/* * The routines in this file provide support for the TI-PC and other * compatible terminals. It goes directly to the graphics RAM to do * screen output. It compiles into nothing if not a TI-PC driver */ #define termdef 1 /* don't define "term" external */ #include #include "estruct.h" #include "edef.h" #if TIPC #define NROW 25 /* Screen size. */ #define NCOL 80 /* Edit if you want to. */ #define MARGIN 8 /* size of minimim margin and */ #define SCRSIZ 64 /* scroll size for extended lines */ #define NPAUSE 200 /* # times thru update to pause */ #define BEL 0x07 /* BEL character. */ #define ESC 0x1B /* ESC character. */ #define SPACE 32 /* space character */ #define SCADD 0xDE000L /* address of screen RAM */ #define CHAR_ENABLE 0x08 /* TI attribute to show char */ #define TI_REVERSE 0x10 /* TI attribute to reverse char */ #define BLACK 0+CHAR_ENABLE /* TI attribute for Black */ #define BLUE 1+CHAR_ENABLE /* TI attribute for Blue */ #define RED 2+CHAR_ENABLE /* TI attribute for Red */ #define MAGENTA 3+CHAR_ENABLE /* TI attribute for Magenta */ #define GREEN 4+CHAR_ENABLE /* TI attribute for Green */ #define CYAN 5+CHAR_ENABLE /* TI attribute for Cyan */ #define YELLOW 6+CHAR_ENABLE /* TI attribute for Yellow */ #define WHITE 7+CHAR_ENABLE /* TI attribute for White */ extern int ttopen(); /* Forward references. */ extern int ttgetc(); extern int ttputc(); extern int ttflush(); extern int ttclose(); extern int timove(); extern int tieeol(); extern int tieeop(); extern int tibeep(); extern int tiopen(); extern int tirev(); extern int ticres(); extern int ticlose(); extern int tiputc(); #if COLOR extern int tifcol(); extern int tibcol(); int cfcolor = -1; /* current forground color */ int cbcolor = -1; /* current background color */ int ctrans[] = /* ansi to ti color translation table */ {BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE}; #endif /* * Standard terminal interface dispatch table. Most of the fields point into * "termio" code. */ TERM term = { NROW-1, NROW-1, NCOL, NCOL, MARGIN, SCRSIZ, NPAUSE, tiopen, ticlose, ttgetc, tiputc, ttflush, timove, tieeol, tieeop, tibeep, tirev, ticres #if COLOR , tifcol, tibcol #endif }; extern union REGS rg; #if COLOR setatt( attr ) int attr; { rg.h.ah = 0x16; /* set the forground character attribute */ rg.h.bl = attr; int86( 0x49, &rg, &rg ); } tifcol(color) /* set the current output color */ int color; /* color to set */ { cfcolor = ctrans[color]; setatt ( cfcolor ); } tibcol(color) /* set the current background color */ int color; /* color to set */ { cbcolor = ctrans[color]; } #endif timove(row, col) { rg.h.ah = 2; /* set cursor position function code */ rg.h.dh = col; rg.h.dl = row; int86(0x49, &rg, &rg); } tieeol() /* erase to the end of the line */ { int ccol; /* current column cursor lives */ int crow; /* row */ /* find the current cursor position */ rg.h.ah = 3; /* read cursor position function code */ int86(0x49, &rg, &rg); ccol = rg.h.dh; /* record current column */ crow = rg.h.dl; /* and row */ rg.h.ah = 0x09; /* Write character at cursor position */ rg.h.al = ' '; /* Space */ rg.h.bl = cfcolor; rg.x.cx = NCOL-ccol; /* Number of characters to write */ int86(0x49, &rg, &rg); } tiputc(ch) /* put a character at the current position in the current colors */ int ch; { rg.h.ah = 0x0E; /* write char to screen with current attrs */ rg.h.al = ch; int86(0x49, &rg, &rg); } tieeop() /* Actually a clear screen */ { rg.h.ah = 0x13; /* Clear Text Screen and Home Cursor */ int86(0x49, &rg, &rg); } tirev(state) /* change reverse video state */ int state; /* TRUE = reverse, FALSE = normal */ { setatt( state ? cbcolor : cfcolor ); } ticres() /* change screen resolution */ { return(TRUE); } spal() /* change palette string */ { /* Does nothing here */ } tibeep() { bdos(6, BEL, 0); } tiopen() { strcpy(sres, "NORMAL"); revexist = TRUE; ttopen(); } ticlose() { #if COLOR tifcol(7); tibcol(0); #endif ttclose(); } #else tihello() { } #endif