BSD 4_3 development
[unix-history] / usr / contrib / nntp / rrn / term.h
CommitLineData
25a197fc
C
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
16EXT char circlebuf[PUSHSIZE];
17EXT int nextin INIT(0);
18EXT int nextout INIT(0);
19#ifdef PENDING
20#ifdef FIONREAD
21EXT 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
28int circfill();
29EXT 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
52EXT long iocount INIT(0);
53
54#else FIONREAD
55
56EXT int devtty INIT(0);
57EXT bool is_input INIT(FALSE);
58EXT 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
74EXT struct termio _tty, _oldtty;
75#else
76EXT struct sgttyb _tty;
77EXT int _res_flg INIT(0);
78#endif
79
80EXT int _tty_ch INIT(2);
81EXT 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
111EXT int lflusho INIT(LFLUSHO);
112#else
113EXT 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
139EXT char *BC INIT(Nullch); /* backspace character */
140EXT char *UP INIT(Nullch); /* move cursor up one line */
141EXT char *CR INIT(Nullch); /* get to left margin, somehow */
142EXT char *VB INIT(Nullch); /* visible bell */
143EXT char *CL INIT(Nullch); /* home and clear screen */
144EXT char *CE INIT(Nullch); /* clear to end of line */
145#ifdef CLEAREOL
146EXT char *CM INIT(Nullch); /* cursor motion -- PWP */
147EXT char *HO INIT(Nullch); /* home cursor -- PWP */
148EXT char *CD INIT(Nullch); /* clear to end of display -- PWP */
149#endif CLEAREOL
150EXT char *SO INIT(Nullch); /* begin standout mode */
151EXT char *SE INIT(Nullch); /* end standout mode */
152EXT int SG INIT(0); /* blanks left by SO and SE */
153EXT char *US INIT(Nullch); /* start underline mode */
154EXT char *UE INIT(Nullch); /* end underline mode */
155EXT char *UC INIT(Nullch); /* underline a character, if that's how it's done */
156EXT int UG INIT(0); /* blanks left by US and UE */
157EXT bool AM INIT(FALSE); /* does terminal have automatic margins? */
158EXT bool XN INIT(FALSE); /* does it eat 1st newline after automatic wrap? */
159EXT char PC INIT(0); /* pad character for use by tputs() */
160EXT short ospeed INIT(0); /* terminal output speed, for use by tputs() */
161EXT int LINES INIT(0), COLS INIT(0); /* size of screen */
162EXT 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
186EXT int page_line INIT(1); /* line number for paging in print_line (origin 1) */
187
188void term_init();
189void term_set();
190#ifdef PUSHBACK
191void pushchar();
192void mac_init();
193void mac_line();
194void show_macros();
195#endif
196char putchr(); /* routine for tputs to call */
197bool finish_command();
198void eat_typeahead();
199void settle_down();
200#ifndef read_tty
201 int read_tty();
202#endif
203void underprint();
204#ifdef NOFIREWORKS
205 void no_sofire();
206 void no_ulfire();
207#endif
208void getcmd();
209int get_anything();
210void in_char();
211int print_lines();
212void page_init();
213void pad();
214void printcmd();
215void rubout();
216void reprint();
217#ifdef CLEAREOL
218void home_cursor();
219#endif CLEAREOL