static int caca_select_driver(caca_display_t *dp, char const *driver) { char const *var = driver; #if defined(HAVE_GETENV) if(!var) var = getenv("CACA_DRIVER"); #endif #if defined(HAVE_STRCASECMP) /* If the environment variable was set, use it */ if(var && *var) { #if defined(USE_COCOA) if(!strcasecmp(var, "cocoa")) return cocoa_install(dp); #endif #if defined(USE_WIN32) if(!strcasecmp(var, "win32")) return win32_install(dp); #endif #if defined(USE_CONIO) if(!strcasecmp(var, "conio")) return conio_install(dp); #endif #if defined(USE_X11) if(!strcasecmp(var, "x11")) return x11_install(dp); #endif #if defined(USE_GL) if(!strcasecmp(var, "gl")) return gl_install(dp); #endif #if !defined(__KERNEL__) if(!strcasecmp(var, "raw")) return raw_install(dp); #endif #if defined(USE_SLANG) if(!strcasecmp(var, "slang")) return slang_install(dp); #endif #if defined(USE_NCURSES) if(!strcasecmp(var, "ncurses")) return ncurses_install(dp); #endif #if defined(USE_VGA) if(!strcasecmp(var, "vga")) return vga_install(dp); #endif #if !defined(__KERNEL__) if(!strcasecmp(var, "null")) return null_install(dp); #endif return -1; } #endif #if defined(USE_COCOA) if(cocoa_install(dp) == 0) return 0; #endif #if defined(USE_WIN32) if(win32_install(dp) == 0) return 0; #endif #if defined(USE_CONIO) if(conio_install(dp) == 0) return 0; #endif #if defined(USE_VGA) if(vga_install(dp) == 0) return 0; #endif #if defined(USE_X11) if(x11_install(dp) == 0) return 0; #endif #if defined(USE_GL) if(gl_install(dp) == 0) return 0; #endif /* ncurses has a higher priority than slang because it has better colour * support across terminal types, despite being slightly slower. */ #if defined(USE_NCURSES) if(ncurses_install(dp) == 0) return 0; #endif #if defined(USE_SLANG) if(slang_install(dp) == 0) return 0; #endif /* Of course we don't try "raw" or "null" if the user did not * specifically ask for them. */ return -1; }
void KERNEL_CALL os_main() { vga_install(); BRAG("Eve successfully switched to P-mode with paging enabled\n"); put_logo(); idt_install(); BRAG("ISRs & IRQs are on-line\n"); sys_call_table_install(); BRAG("System call table installed\n"); timer_install(); BRAG("PIT firing rate is %d Hz\n", _TIMER_RATE); mm_install(); BRAG("Memory manager is installed\n", _TIMER_RATE); //mm_print_info(); /*{ char* p; SEPARATE DBG_DUMP(p = sbrk(2)); DBG_DUMP(sbrk(0)); DBG_DUMP(*p); DBG_DUMP(p[1]); DBG_DUMP(p[4095]); // possable page fault //DBG_DUMP(p[4096]); // page fault for sure SEPARATE DBG_DUMP(p = sbrk(4 * MEGABYTE)); DBG_DUMP(sbrk(0)); DBG_DUMP(p[0]); DBG_DUMP(p[MEGABYTE]); DBG_DUMP(p[4 * MEGABYTE]); // possable page fault //DBG_DUMP(p[5 * MEGABYTE]); // page fault for sure SEPARATE DBG_DUMP(sbrk(-4 * MEGABYTE)); DBG_DUMP(p = sbrk(0)); DBG_DUMP(p[0]); // possable page fault //DBG_DUMP(p[MEGABYTE]); // page fault for sure DBG_DUMP(sbrk(-2)); DBG_DUMP(p = sbrk(0)); //DBG_DUMP(p[0]); // page fault for sure }*/ /*{ char* p; SEPARATE; DUMP(sbrk(0)); DUMP(p = malloc(2)); DUMP(sbrk(0)); DUMP(*p); DUMP(p[1]); //DUMP(p[4095]); // possable page fault //DUMP(p[4096]); // page fault for sure char* q; SEPARATE; DUMP(q = malloc(4 * MEGABYTE)); DUMP(sbrk(0)); DUMP(q[0]); DUMP(q[MEGABYTE]); DUMP(q[4 * MEGABYTE]); // possable page fault //DUMP(p[5 * MEGABYTE]); // page fault for sure SEPARATE; MARK(free(q)); DUMP(sbrk(0)); //DUMP(q[0]); // possable page fault //DUMP(p[MEGABYTE]); // page fault for sure MARK(free(p)); DUMP(sbrk(0)); //DUMP(p[0]); // page fault for sure }*/ keyboard_install(); BRAG("Keyboard is on-line (US layout)\n"); // prepare tss segment tss_install(); //BRAG("TSS is loaded\n"); // install resource manager before starting multitasking rm_install(); // task manager task_ring_node_t* pKernelNode = tm_install(); BRAG("Multitasking is enabled\n"); //print_task_tree(); // load shell app gEshTaskOffset = (dword_t)&gKernelEnd; tm_load_task((pointer_t) gEshTaskOffset, pKernelNode, ACC_USER, PRIOR_LOW, TRUE); extern dword_t gNextTaskOffset; gPingTaskOffset = gNextTaskOffset; /* from this point on Kernel process will serve as a resources manager */ rm_start(); for (;;); }