|
|
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.