Show
Ignore:
Timestamp:
05/24/08 09:58:45 (6 months ago)
Author:
mwhitworth
Message:

Add earlyconsole driver.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • Whitix/branches/hybrid/video/console.c

    r493 r549  
    118118} 
    119119 
    120 int printf(char* str,...) 
    121 { 
    122         DWORD flags; 
    123         char printBuf[512]; 
    124         int len; 
    125         va_list args; 
    126  
    127         IrqSaveFlags(flags); 
    128  
    129         va_start(args,str); 
    130         len=vsprintf(printBuf,str,args); 
    131         va_end(args); 
    132  
    133         ConsoleWriteString(currConsole,printBuf,len); 
    134         IrqRestoreFlags(flags); 
    135  
    136         return len; 
    137 } 
    138  
    139 SYMBOL_EXPORT(printf); 
    140  
    141120void putc(int c) 
    142121{ 
     
    146125unsigned char colorTable[] = {0, 4, 2, 6, 1, 5, 3, 7}; 
    147126 
    148 static int ConsoleWriteString(int console,char* str,int length) 
     127int ConsoleWriteString(int console, char* str, int length) 
    149128{ 
    150129        struct Console* currCons=&consoles[console]; 
     
    297276} 
    298277 
     278SYMBOL_EXPORT(ConsoleWriteString); 
     279 
    299280extern void KeyboardDoAlarm(); 
    300281 
     
    376357} 
    377358 
     359void ConsoleWriteOutput(char* message, int length) 
     360{ 
     361        ConsoleWriteString(currConsole, message, length); 
     362} 
     363 
    378364static void ConsoleClearScreen(int index) 
    379365{ 
     
    426412} 
    427413 
     414static void ConsoleGetCursorPos() 
     415{ 
     416        DWORD flags; 
     417        WORD position; 
     418 
     419        IrqSaveFlags(flags); 
     420 
     421        outb(0x3D4, 14); 
     422        position=inb(0x3D5) << 8; 
     423        outb(0x3D4, 15); 
     424        position |= inb(0x3D5); 
     425 
     426        IrqRestoreFlags(flags); 
     427 
     428        curX=position % 80; 
     429        curY=position/80; 
     430} 
     431 
    428432static void ConsoleNewLine(int index) 
    429433{ 
     
    581585        if (item->events & POLL_OUT) 
    582586                item->revents |= POLL_OUT; 
    583  
    584 //      printf("ConsolePoll(%u)\n", ListEmpty(&cons->waitQueue.list)); 
    585587 
    586588        PollAddWait(pollQueue, &cons->waitQueue); 
     
    622624        } 
    623625 
     626        /* Get the current cursor position, and take over from the early console driver. */ 
     627        ConsoleGetCursorPos(); 
     628 
     629        KeSetOutput(ConsoleWriteOutput); 
     630 
    624631        return 0; 
    625632}