|
|
1.1 ! root 1: /* $Header: term.h,v 4.3.1.2 85/05/13 15:52:05 lwall Exp $ ! 2: * ! 3: * $Log: term.h,v $ ! 4: * Revision 4.3.1.2 85/05/13 15:52:05 lwall ! 5: * Declared devtty on TERMIO system. ! 6: * ! 7: * Revision 4.3.1.1 85/05/10 11:41:24 lwall ! 8: * Branch for patches. ! 9: * ! 10: * Revision 4.3 85/05/01 11:51:36 lwall ! 11: * Baseline for release with 4.3bsd. ! 12: * ! 13: */ ! 14: ! 15: #ifdef PUSHBACK ! 16: EXT char circlebuf[PUSHSIZE]; ! 17: EXT int nextin INIT(0); ! 18: EXT int nextout INIT(0); ! 19: #ifdef PENDING ! 20: #ifdef FIONREAD ! 21: EXT long iocount INIT(0); ! 22: #ifndef lint ! 23: #define input_pending() (nextin!=nextout || (ioctl(0, FIONREAD, &iocount),(int)iocount)) ! 24: #else ! 25: #define input_pending() bizarre ! 26: #endif lint ! 27: #else FIONREAD ! 28: int circfill(); ! 29: EXT int devtty INIT(0); ! 30: #ifndef lint ! 31: #define input_pending() (nextin!=nextout || circfill()) ! 32: #else ! 33: #define input_pending() bizarre ! 34: #endif lint ! 35: #endif FIONREAD ! 36: #else PENDING ! 37: #ifndef lint ! 38: #define input_pending() (nextin!=nextout) ! 39: #else ! 40: #define input_pending() bizarre ! 41: #endif lint ! 42: #endif PENDING ! 43: #else PUSHBACK ! 44: #ifdef PENDING ! 45: #ifdef FIONREAD /* must have FIONREAD or O_NDELAY for input_pending() */ ! 46: #define read_tty(addr,size) read(0,addr,size) ! 47: #ifndef lint ! 48: #define input_pending() (ioctl(0, FIONREAD, &iocount),(int)iocount) ! 49: #else ! 50: #define input_pending() bizarre ! 51: #endif lint ! 52: EXT long iocount INIT(0); ! 53: ! 54: #else FIONREAD ! 55: ! 56: EXT int devtty INIT(0); ! 57: EXT bool is_input INIT(FALSE); ! 58: EXT char pending_ch INIT(0); ! 59: #ifndef lint ! 60: #define input_pending() (is_input || (is_input=read(devtty,&pending_ch,1))) ! 61: #else ! 62: #define input_pending() bizarre ! 63: #endif lint ! 64: #endif FIONREAD ! 65: #else PENDING ! 66: #define read_tty(addr,size) read(0,addr,size) ! 67: #define input_pending() (FALSE) ! 68: #endif PENDING ! 69: #endif PUSHBACK ! 70: ! 71: /* stuff wanted by terminal mode diddling routines */ ! 72: ! 73: #ifdef TERMIO ! 74: EXT struct termio _tty, _oldtty; ! 75: #else ! 76: EXT struct sgttyb _tty; ! 77: EXT int _res_flg INIT(0); ! 78: #endif ! 79: ! 80: EXT int _tty_ch INIT(2); ! 81: EXT bool bizarre INIT(FALSE); /* do we need to restore terminal? */ ! 82: ! 83: /* terminal mode diddling routines */ ! 84: ! 85: #ifdef TERMIO ! 86: ! 87: #define crmode() ((bizarre=1),_tty.c_lflag &=~ICANON,_tty.c_cc[VMIN] = 1,ioctl(_tty_ch,TCSETAF,&_tty)) ! 88: #define nocrmode() ((bizarre=1),_tty.c_lflag |= ICANON,_tty.c_cc[VEOF] = CEOF,stty(_tty_ch,&_tty)) ! 89: #define echo() ((bizarre=1),_tty.c_lflag |= ECHO, ioctl(_tty_ch, TCSETA, &_tty)) ! 90: #define noecho() ((bizarre=1),_tty.c_lflag &=~ECHO, ioctl(_tty_ch, TCSETA, &_tty)) ! 91: #define nl() ((bizarre=1),_tty.c_iflag |= ICRNL,_tty.c_oflag |= ONLCR,ioctl(_tty_ch, TCSETAW, &_tty)) ! 92: #define nonl() ((bizarre=1),_tty.c_iflag &=~ICRNL,_tty.c_oflag &=~ONLCR,ioctl(_tty_ch, TCSETAW, &_tty)) ! 93: #define savetty() (ioctl(_tty_ch, TCGETA, &_oldtty),ioctl(_tty_ch, TCGETA, &_tty)) ! 94: #define resetty() ((bizarre=0),ioctl(_tty_ch, TCSETAF, &_oldtty)) ! 95: #define unflush_output() ! 96: ! 97: #else ! 98: ! 99: #define raw() ((bizarre=1),_tty.sg_flags|=RAW, stty(_tty_ch,&_tty)) ! 100: #define noraw() ((bizarre=1),_tty.sg_flags&=~RAW,stty(_tty_ch,&_tty)) ! 101: #define crmode() ((bizarre=1),_tty.sg_flags |= CBREAK, stty(_tty_ch,&_tty)) ! 102: #define nocrmode() ((bizarre=1),_tty.sg_flags &= ~CBREAK,stty(_tty_ch,&_tty)) ! 103: #define echo() ((bizarre=1),_tty.sg_flags |= ECHO, stty(_tty_ch, &_tty)) ! 104: #define noecho() ((bizarre=1),_tty.sg_flags &= ~ECHO, stty(_tty_ch, &_tty)) ! 105: #define nl() ((bizarre=1),_tty.sg_flags |= CRMOD,stty(_tty_ch, &_tty)) ! 106: #define nonl() ((bizarre=1),_tty.sg_flags &= ~CRMOD, stty(_tty_ch, &_tty)) ! 107: #define savetty() (gtty(_tty_ch, &_tty), _res_flg = _tty.sg_flags) ! 108: #define resetty() ((bizarre=0),_tty.sg_flags = _res_flg, stty(_tty_ch, &_tty)) ! 109: #ifdef LFLUSHO ! 110: #ifndef lint ! 111: EXT int lflusho INIT(LFLUSHO); ! 112: #else ! 113: EXT long lflusho INIT(LFLUSHO); ! 114: #endif lint ! 115: #define unflush_output() (ioctl(_tty_ch,TIOCLBIC,&lflusho)) ! 116: #else ! 117: #define unflush_output() ! 118: #endif LFLUSHO ! 119: #endif TERMIO ! 120: ! 121: #ifdef TIOCSTI ! 122: #ifdef lint ! 123: #define forceme(c) ioctl(_tty_ch,TIOCSTI,Null(long*)) /* ghad! */ ! 124: #else ! 125: #define forceme(c) ioctl(_tty_ch,TIOCSTI,c) /* pass character in " " */ ! 126: #endif lint ! 127: #else ! 128: #define forceme(c) ! 129: #endif ! 130: ! 131: /* termcap stuff */ ! 132: ! 133: /* ! 134: * NOTE: if you don't have termlib you'll either have to define these strings ! 135: * and the tputs routine, or you'll have to redefine the macros below ! 136: */ ! 137: ! 138: #ifdef HAVETERMLIB ! 139: EXT char *BC INIT(Nullch); /* backspace character */ ! 140: EXT char *UP INIT(Nullch); /* move cursor up one line */ ! 141: EXT char *CR INIT(Nullch); /* get to left margin, somehow */ ! 142: EXT char *VB INIT(Nullch); /* visible bell */ ! 143: EXT char *CL INIT(Nullch); /* home and clear screen */ ! 144: EXT char *CE INIT(Nullch); /* clear to end of line */ ! 145: #ifdef CLEAREOL ! 146: EXT char *CM INIT(Nullch); /* cursor motion -- PWP */ ! 147: EXT char *HO INIT(Nullch); /* home cursor -- PWP */ ! 148: EXT char *CD INIT(Nullch); /* clear to end of display -- PWP */ ! 149: #endif CLEAREOL ! 150: EXT char *SO INIT(Nullch); /* begin standout mode */ ! 151: EXT char *SE INIT(Nullch); /* end standout mode */ ! 152: EXT int SG INIT(0); /* blanks left by SO and SE */ ! 153: EXT char *US INIT(Nullch); /* start underline mode */ ! 154: EXT char *UE INIT(Nullch); /* end underline mode */ ! 155: EXT char *UC INIT(Nullch); /* underline a character, if that's how it's done */ ! 156: EXT int UG INIT(0); /* blanks left by US and UE */ ! 157: EXT bool AM INIT(FALSE); /* does terminal have automatic margins? */ ! 158: EXT bool XN INIT(FALSE); /* does it eat 1st newline after automatic wrap? */ ! 159: EXT char PC INIT(0); /* pad character for use by tputs() */ ! 160: EXT short ospeed INIT(0); /* terminal output speed, for use by tputs() */ ! 161: EXT int LINES INIT(0), COLS INIT(0); /* size of screen */ ! 162: EXT int just_a_sec INIT(960); /* 1 sec at current baud rate */ ! 163: /* (number of nulls) */ ! 164: ! 165: /* define a few handy macros */ ! 166: ! 167: #define backspace() tputs(BC,0,putchr) FLUSH ! 168: #define clear() tputs(CL,LINES,putchr) FLUSH ! 169: #define erase_eol() tputs(CE,1,putchr) FLUSH ! 170: #ifdef CLEAREOL ! 171: #define clear_rest() tputs(CD,LINES,putchr) FLUSH /* PWP */ ! 172: #define maybe_eol() if(erase_screen&&can_home_clear)tputs(CE,1,putchr) FLUSH ! 173: #endif CLEAREOL ! 174: #define underline() tputs(US,1,putchr) FLUSH ! 175: #define un_underline() tputs(UE,1,putchr) FLUSH ! 176: #define underchar() tputs(UC,0,putchr) FLUSH ! 177: #define standout() tputs(SO,1,putchr) FLUSH ! 178: #define un_standout() tputs(SE,1,putchr) FLUSH ! 179: #define up_line() tputs(UP,1,putchr) FLUSH ! 180: #define carriage_return() tputs(CR,1,putchr) FLUSH ! 181: #define dingaling() tputs(VB,1,putchr) FLUSH ! 182: #else ! 183: ???????? /* up to you */ ! 184: #endif ! 185: ! 186: EXT int page_line INIT(1); /* line number for paging in print_line (origin 1) */ ! 187: ! 188: void term_init(); ! 189: void term_set(); ! 190: #ifdef PUSHBACK ! 191: void pushchar(); ! 192: void mac_init(); ! 193: void mac_line(); ! 194: void show_macros(); ! 195: #endif ! 196: char putchr(); /* routine for tputs to call */ ! 197: bool finish_command(); ! 198: void eat_typeahead(); ! 199: void settle_down(); ! 200: #ifndef read_tty ! 201: int read_tty(); ! 202: #endif ! 203: void underprint(); ! 204: #ifdef NOFIREWORKS ! 205: void no_sofire(); ! 206: void no_ulfire(); ! 207: #endif ! 208: void getcmd(); ! 209: int get_anything(); ! 210: void in_char(); ! 211: int print_lines(); ! 212: void page_init(); ! 213: void pad(); ! 214: void printcmd(); ! 215: void rubout(); ! 216: void reprint(); ! 217: #ifdef CLEAREOL ! 218: void home_cursor(); ! 219: #endif CLEAREOL
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.