示例#1
0
文件: hw_multi.c 项目: Mirppc/twin
static byte module_InitHW(TW_CONST byte *arg, uldat len) {
    TW_CONST byte *name, *tmp;
    byte * alloc_name;
    byte *(*InitD)(void);
    module Module;

    if (!arg || !len)
	return FALSE;
    
    if (len >= 4 && !memcmp(arg, "-hw=", 4)) {
	arg += 4; len -= 4; /* skip "-hw=" */
    }
    
    name = memchr(arg, '@', len);
    tmp = memchr(arg, ',', len);
    if (tmp && (!name || tmp < name))
	name = tmp;
    if (name)
	len = name - arg;
    
    if (len == 1 && *arg == 'X') {
        len = 3;
        arg = "X11";
    }
    
    if ((alloc_name = AllocMem(len + 4))) {
	sprintf(alloc_name, "hw_%.*s", (int)len, arg);

	Module = DlLoadAny(len + 3, alloc_name);
	
	if (Module) {
	    printk("twin: starting display driver module `%."STR(TW_SMALLBUFF)"s'...\n", alloc_name);
	    if ((InitD = Module->Private) && InitD()) {
		printk("twin: ...module `%."STR(TW_SMALLBUFF)"s' successfully started.\n", alloc_name);
		FreeMem(alloc_name);
		HW->Module = Module; Module->Used++;
		return TRUE;
	    }
	    Delete(Module);
	}
    }
    
    if (alloc_name)
        name = alloc_name;
    else if (!name)
        name = (byte *)"(NULL)";

    if (Module) {
	printk("twin: ...module `%."STR(TW_SMALLBUFF)"s' failed to start.\n", name);
    } else
	printk("twin: unable to load display driver module `%."STR(TW_SMALLBUFF)"s' :\n"
	       "      %."STR(TW_SMALLBUFF)"s\n", name, ErrStr);
    if (alloc_name)
	FreeMem(alloc_name);
    
    return FALSE;
}
示例#2
0
int main()
{ Tx v[20], vv[10], *r,
	x = {3, -9.35, "test"}, y = {-1,1,"y"}, z = {0,0,"a"};
	TMultime m1 = {sizeof(Tx),comp3,NULL,v,v+10,v+20}, *a = &m1,
		 m2, *b = &m2, m3, *c;
	int i, nr, nvv, nrr1;
	int rez;

	randomize();
	printf("--- Demo multimi generice ---\n");
	/* initializeaza 10 elemente din v cu valori aleatoare */
	for(i = 0; i < 10; i++) inix(v+i);
	for(nvv = 4,i = 0; i < nvv; i++) inix(vv+i);
	/* initializeaza b */
	InitS(b, vv,10,sizeof(Tx),comp3,NULL);
	Adauga(v+5,b);    /* o valoare preluata din a */
	Adauga(&y, b), Adauga(&z, b);

	/* S = secventa de prelucrari, folosind operatii generice: */
	/*   - afisare multime, - test apartenenta, - test localizare */
	printf("-- Multimea a --\n");
	afiMx(a);
	rez = Apartine(&x, a);
	printf("elementul (%i,%4.2lf,%s) %sapartine multimii\n\n",
			x.v1, x.v2, x.v3, rez? "" : "nu ");
	y = v[2];
	r = (Tx*)Loc(&y, a);
	if(!r)
		printf("elementul (%i,%4.2lf,%s) nu apartine multimii\n\n",
				y.v1, y.v2, y.v3);
	else
		printf("elementul (%i,%4.2lf,%s) are adresa %p si indice %i \n\n",
				y.v1, y.v2, y.v3, r, r-v);
	getch();

	/* - adaugare 2 noi elemente: unul care nu exista si altul care exista
	   - afisare multime */
	printf("\n-- Teste adaugari --\n\n");
	rez = Adauga(&x, a);
	if(rez) printf("(%i,%4.2lf,%s) %s\n",
			x.v1, x.v2, x.v3, rez? "adaugat" : "exista deja");
	rez = Adauga(&y, a);
	if(rez) printf("(%i,%4.2lf,%s)  %s\n\n",
			y.v1, y.v2, y.v3, rez? "adaugat" : "exista deja");
	afiMx(a);

	/* - eliminare 2 elemente: unul care exista si altul care nu exista
	   - afisare multime
	   */
	printf("\n-- Teste eliminari --\n\n");
	rez = Elimina(&y, a);
	printf("(%i,%4.2lf,%s) %s\n",
			y.v1, y.v2, y.v3, rez? "eliminat" : "nu exista");
	rez = Elimina(&z, a);
	printf("(%i,%4.2lf,%s) %s\n",
			z.v1, z.v2, z.v3, rez? "eliminat" : "nu exista");
	afiMx(a);

	getch();

	printf("\n-- Test reuniune --\n\n");
	c = InitD(50,sizeof(Tx),comp3,comp3);
	if(!c)
	{ printf("Initializate dinamica esuata\n");
		getch(); return 1;
	}
	printf("\na:\n"); afiMx(a);
	printf("\nb:\n"); afiMx(b);
	nrr1 = Reuniune(a,b,c);
	printf("\n-- rezultat Reuniune(a,b)--\n"); afiMx(c);

	getch();

	/* Sortare multime, urmata de afisare */


	/* Repetarea S folosind functii specifice multimii sortate */


	return 0;
}