static void vidc_rawputchar(int c) { int i; if (c == '\t') /* lame tab expansion */ for (i = 0; i < 8; i++) vidc_rawputchar(' '); else { #ifndef TERM_EMU vidc_biosputchar(c); #else /* Emulate AH=0eh (teletype output) */ switch(c) { case '\a': vidc_biosputchar(c); return; case '\r': curx = 0; curs_move(&curx, &cury, curx, cury); return; case '\n': cury++; if (cury > 24) { scroll_up(1, fg_c, bg_c); cury--; } else { curs_move(&curx, &cury, curx, cury); } return; case '\b': if (curx > 0) { curx--; curs_move(&curx, &cury, curx, cury); /* write_char(' ', fg_c, bg_c); XXX destructive(!) */ return; } return; default: write_char(c, fg_c, bg_c); curx++; if (curx > 79) { curx = 0; cury++; } if (cury > 24) { curx = 0; scroll_up(1, fg_c, bg_c); cury--; } } curs_move(&curx, &cury, curx, cury); #endif } }
static int vidc_init(int arg) { int i, hw_cursor; if (vidc_started && arg == 0) return (0); vidc_started = 1; Crtat = (unsigned short *)PTOV(0xA0000); while ((inb(0x60) & 0x04) == 0) ; outb(0x62, 0xe0); while ((inb(0x60) & 0x01) == 0) ; hw_cursor = inb(0x62); hw_cursor |= (inb(0x62) << 8); inb(0x62); inb(0x62); inb(0x62); crtat = Crtat + hw_cursor; #ifdef TERM_EMU /* Init terminal emulator */ end_term(); get_pos(); curs_move(curx, cury); fg_c = DEFAULT_FGCOLOR; bg_c = DEFAULT_BGCOLOR; #endif for (i = 0; i < 10 && vidc_ischar(); i++) (void)vidc_getchar(); return (0); /* XXX reinit? */ }
/* Absolute cursor move to args[0] rows and args[1] columns * (the coordinates are 1-based). */ void CM(void) { if(args[0]>0) args[0]--; if(args[1]>0) args[1]--; curs_move(args[1],args[0]); end_term(); }
/* Clear display from current position to end of screen */ void CD(void) { get_pos(); v86.ctl = 0; v86.addr = 0x10; v86.eax = 0x0600; v86.ebx = (bg_c<<4)+fg_c; v86.ecx = v86.edx; v86.edx = 0x184f; v86int(); curx=0; curs_move(curx,cury); end_term(); }
static int vidc_init(int arg) { int i; if (vidc_started && arg == 0) return (0); vidc_started = 1; #ifdef TERM_EMU /* Init terminal emulator */ end_term(); get_pos(&curx, &cury); curs_move(&curx, &cury, curx, cury); fg_c = DEFAULT_FGCOLOR; bg_c = DEFAULT_BGCOLOR; #endif for (i = 0; i < 10 && vidc_ischar(); i++) (void)vidc_getchar(); return (0); /* XXX reinit? */ }