void* cons_thread( void *arg ) { cons_struct *cons; // The argument is a pointer to a sort structure cons = (cons_struct*)arg; while( 1 ) { // Wait for the start sorting condition to occur cons_start( cons ); // Perform the sort cons_data( cons->data, cons->size ); // Send the finished sorting condition out` cons_finish( cons ); } return NULL; }
int main(int argc,char **argv) { if(sizeof(byte) != 1 || sizeof(wyde) != 2 || sizeof(tetra) != 4 || sizeof(octa) != 8) error("Type-sizes are wrong. Please change the typedefs in common.h for your platform!"); bool interactive = false; for(int i = 1; i < argc; i++) { if(strcmp(argv[i],"-i") == 0) interactive = true; else if(strncmp(argv[i],"--postcmds=",sizeof("--postcmds=") - 1) == 0) postCmds = argv[i] + sizeof("--postcmds=") - 1; else if(strncmp(argv[i],"--script=",sizeof("--script=") - 1) == 0) { script = argv[i] + sizeof("--script=") - 1; interactive = true; } else if(strncmp(argv[i],"--start=",sizeof("--start=") - 1) == 0) { octa cpc = mstrtoo(argv[i] + sizeof("--start=") - 1,NULL,0); cfg_setStartAddr(cpc); } else if(strcmp(argv[i],"--user") == 0) { cfg_setUserMode(true); cfg_setStartAddr(0x1000); cfg_setRAMSize((octa)32 * 1024 * 1024 * 1024); } else if(strcmp(argv[i],"--test") == 0) cfg_setTestMode(true); else if(strcmp(argv[i],"-t") == 0) { if(i >= argc - 1) error(usage,argv[0]); cfg_setTermCount(mstrtoo(argv[i + 1],NULL,0)); i++; } else if(strcmp(argv[i],"-l") == 0) { if(i >= argc - 1) error(usage,argv[0]); cfg_setProgram(argv[i + 1]); i++; } else if(strcmp(argv[i],"-r") == 0) { if(i >= argc - 1) error(usage,argv[0]); cfg_setROM(argv[i + 1]); cfg_setStartAddr(MSB(64) | ROM_START_ADDR); i++; } else if(strcmp(argv[i],"-d") == 0) { if(i >= argc - 1) error(usage,argv[0]); cfg_setDiskImage(argv[i + 1]); i++; } else if(strcmp(argv[i],"-o") == 0) { if(i >= argc - 1) error(usage,argv[0]); cfg_setOutputFile(argv[i + 1]); i++; } else if(strcmp(argv[i],"-m") == 0) { if(i >= argc - 1) error(usage,argv[0]); cfg_setRAMSize(mstrtoo(argv[i + 1],NULL,0) * 1024 * 1024); i++; } else if(strcmp(argv[i],"-c") == 0) cfg_setUseDspKbd(true); else if(strcmp(argv[i],"-p") == 0) { if(i >= argc - 1) error(usage,argv[0]); gdbport = atoi(argv[i + 1]); i++; } else if(strcmp(argv[i],"-b") == 0) cfg_setUseBacktracing(true); else if(strcmp(argv[i],"-s") == 0) { const char *mapNames[MAX_MAPS]; for(int x = 0; x < MAX_MAPS; x++) mapNames[x] = NULL; if(i == argc - 1 || mapNames[0] != NULL) error(usage,argv[0]); for(int x = 0; x < MAX_MAPS && i < argc - 1; x++) { mapNames[x] = argv[++i]; if(mapNames[x][0] == '-') { mapNames[x] = NULL; i--; break; } } cfg_setMaps(mapNames); } else error(usage,argv[0]); } // in non-interactive mode, either a program or ROM is required if(!interactive && cfg_getProgram() == NULL && cfg_getROM() == NULL) error(usage,argv[0]); // catch exceptions that are not catched by anybody else. it may occur an exception during // initialization for example. jmp_buf env; int ex = setjmp(env); if(ex != EX_NONE) mprintf("Exception: %s\n",ex_toString(ex,ex_getBits())); else { ex_push(&env); sim_init(); if(gdbport != -1) gdbstub_init(gdbport); else if(interactive) { cons_init(); if(script) cons_exec(script,true); cons_start(); cons_shutdown(); } else { cpu_run(); if(postCmds) postcmds_perform(postCmds); } } ex_pop(); sim_shutdown(); // ignore errors raised by the gcov stuff fclose(stderr); return EXIT_SUCCESS; }