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; }
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; }