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