|
|
1.1 root 1: # include <stdio.h>
2:
3: # include <sgtty.h>
4:
5: # define bool char /* boolean variable */
6: # define reg register /* register varaible abbr. */
7:
8: # define TRUE (1)
9: # define FALSE (0)
10: # define ERR (0) /* default return on error */
11: # define OK (1) /* default return on good run */
12:
13: # define _SUBWIN 01 /* window is a subindow */
14: # define _ENDLINE 02 /* lines go to end of screen */
15: # define _FULLWIN 04 /* window is entire screen */
16: # define _SCROLLWIN 010 /* window could cause scroll */
17: # define _STANDOUT 0200 /* standout mode in effect */
18: # define _NOCHANGE -1 /* no change on this line */
19:
20: # define _puts(s) tputs(s, 0, _putchar);
21:
22: typedef struct sgttyb SGTTY;
23:
24: # ifndef WINDOW
25:
26: /* Copyright (c) 1979 Regents of the University of California */
27: /*
28: * Capabilities from termcap
29: */
30:
31: char *AL; /* P* Add new blank line */
32: bool AM; /* Automatic margins */
33: char *BC; /* Back cursor */
34: bool BS; /* Backspace works */
35: char *BT; /* P Back tab */
36: bool CA; /* Cursor addressible */
37: char *CD; /* P* Clear to end of display */
38: char *CE; /* P Clear to end of line */
39: char *CL; /* P* Clear screen */
40: char *CM; /* P Cursor motion */
41: bool DA; /* Display may be retained above */
42: bool DB; /* Display may be retained below */
43: char *DC; /* P* Delete character */
44: char *DL; /* P* Delete line sequence */
45: char *DM; /* Delete mode (enter) */
46: char *DO; /* Down line sequence */
47: char *ED; /* End delete mode */
48: bool EO; /* Can erase overstrikes with ' ' */
49: char *EI; /* End insert mode */
50: bool GT; /* Gtty indicates tabs */
51: char *HO; /* Home cursor */
52: bool HZ; /* Hazeltine ~ braindamage */
53: char *IC; /* P Insert character */
54: bool IN; /* Insert-null blessing */
55: char *IM; /* Insrt mode (as ':im=:' if 'ic') */
56: char *IP; /* P* pad after char ins'd using IM+IE */
57: char *LL; /* Quick to last line, column 0 */
58: char *MA; /* Ctrl character map for cmd mode */
59: bool MI; /* can move in insert mode */
60: bool NC; /* No Cr: \r sends \r\n then eats \n */
61: char *ND; /* Non-destructive space */
62: bool OS; /* Overstrike works */
63: char PC; /* Pad character */
64: char *SE; /* Standout end (may leave space) */
65: char *SF; /* P Scroll forwards */
66: char *SO; /* Stand out begin (may leave space) */
67: char *SR; /* P Scroll backwards */
68: char *TA; /* P Tab (not ^I or with padding) */
69: char *TE; /* End sequence after TI */
70: char *TI; /* Terminal Initialize */
71: bool UL; /* Underlining works even though !os */
72: char *UE; /* Underline End sequence */
73: char *UP; /* Upline */
74: char *US; /* Underline Start sequence */
75: char *VB; /* Visible bell */
76: char *VE; /* Visual end sequence */
77: char *VS; /* Visual start sequence */
78: bool XN; /* A newline gets eaten after wrap */
79: /* X? is reserved for severely nauseous glitches */
80: /* If there are enough of these we may need bit masks! */
81:
82: /*
83: * From the tty modes...
84: */
85: bool NONL; /* Term can't hack linefeeds doing a CR */
86: bool UPPERCASE; /* Ick! */
87:
88: bool normtty; /* set if must normal mode from normf */
89: bool pfast; /* Have stty -nl'ed to go faster */
90:
91: # define WINDOW struct _win_st
92:
93: struct _win_st { /* window description structure */
94: short _cury, _curx; /* current y,x positions */
95: short _maxy, _maxx; /* maximum y,x positions */
96: short _begy, _begx; /* start y,x positions */
97: short _flags; /* various window flags */
98: bool _clear; /* need to clear */
99: bool _leave; /* leave curx,y at last update */
100: bool _scroll; /* scrolls allowed */
101: char **_y; /* actual window */
102: short *_firstch; /* first change on line */
103: short *_lastch; /* last change on line */
104: };
105:
106: extern bool My_term, /* set if user species terminal */
107: _echoit, /* set if echoing characters */
108: _rawmode; /* set if terminal in raw mode */
109:
110: extern char *Def_term, /* default terminal type */
111: ttytype[]; /* long name of current terminal */
112:
113: extern int LINES, COLS, /* number of lines and columns */
114: _tty_ch, /* channel with tty on it */
115: _res_flg; /* sgtty flags stored for reset */
116:
117: # ifdef DEBUG
118: FILE *outf; /* error outfile */
119: # endif
120:
121: SGTTY _tty; /* tty structure */
122:
123: WINDOW *stdscr, /* standard screen */
124: *curscr; /* current screen */
125:
126: /*
127: * Define VOID to stop lint from generating "null effect"
128: * comments.
129: */
130: # ifdef lint
131: int __void__; /* place to assign to */
132: # define VOID(x) (__void__ = (int) (x))
133: # else
134: # define VOID(x) (x)
135: # endif
136:
137: # endif
138:
139: /*
140: * psuedo functions for standard screen
141: */
142: # define addch(ch) VOID(waddch(stdscr, ch))
143: # define getch() VOID(wgetch(stdscr))
144: # define addstr(str) VOID(waddstr(stdscr, str))
145: # define getstr(str) VOID(wgetstr(stdscr, str))
146: # define move(y, x) VOID(wmove(stdscr, y, x))
147: # define clear() VOID(wclear(stdscr))
148: # define erase() VOID(werase(stdscr))
149: # define clrtobot() VOID(wclrtobot(stdscr))
150: # define clrtoeol() VOID(wclrtoeol(stdscr))
151: # define insertln() VOID(winsertln(stdscr))
152: # define deleteln() VOID(wdeleteln(stdscr))
153: # define refresh() VOID(wrefresh(stdscr))
154: # define inch() VOID(winch(stdscr))
155: # ifdef STANDOUT
156: # define standout() VOID(wstandout(stdscr))
157: # define standend() VOID(wstandend(stdscr))
158: # endif
159:
160: /*
161: * mv functions
162: */
163: #define mvwaddch(win,y,x,ch) VOID(wmove(win,y,x)==ERR?ERR:waddch(win,ch))
164: #define mvwgetch(win,y,x,ch) VOID(wmove(win,y,x)==ERR?ERR:wgetch(win,ch))
165: #define mvwaddstr(win,y,x,str) VOID(wmove(win,y,x)==ERR?ERR:waddstr(win,str))
166: #define mvwgetstr(win,y,x,str) VOID(wmove(win,y,x)==ERR?ERR:wgetstr(win,str))
167: #define mvwinch(win,y,x) VOID(wmove(win,y,x) == ERR ? ERR : winch(win))
168: #define mvaddch(y,x,ch) mvwaddch(stdscr,y,x,ch)
169: #define mvgetch(y,x,ch) mvwgetch(stdscr,y,x,ch)
170: #define mvaddstr(y,x,str) mvwaddstr(stdscr,y,x,str)
171: #define mvgetstr(y,x,str) mvwgetstr(stdscr,y,x,str)
172: #define mvinch(y,x) mvwinch(win,y,x)
173:
174: /*
175: * psuedo functions
176: */
177:
178: #define clearok(win,bf) (win->_clear = bf)
179: #define leaveok(win,bf) (win->_leave = bf)
180: #define scrollok(win,bf) (win->_scroll = bf)
181: #define getyx(win,y,x) y = win->_cury, x = win->_curx
182: #define winch(win) (win->_y[win->_cury][win->_curx])
183:
184: #define raw() (_tty.sg_flags |= RAW, _rawmode = TRUE, stty(_tty_ch, &_tty))
185: #define noraw() (_tty.sg_flags &= ~RAW, _rawmode = FALSE, stty(_tty_ch, &_tty))
186: #define crmode() (_tty.sg_flags |= CBREAK, _rawmode = TRUE, stty(_tty_ch,&_tty))
187: #define nocrmode() (_tty.sg_flags &= ~CBREAK,_rawmode=FALSE,stty(_tty_ch,&_tty))
188: #define echo() (_tty.sg_flags |= ECHO, _echoit = TRUE, stty(_tty_ch, &_tty))
189: #define noecho() (_tty.sg_flags &= ~ECHO, _echoit = FALSE, stty(_tty_ch, &_tty))
190: #define nl() (_tty.sg_flags |= CRMOD, NONL = TRUE, stty(_tty_ch, &_tty))
191: #define nonl() (_tty.sg_flags &= ~CRMOD, NONL = FALSE, stty(_tty_ch, &_tty))
192: #define savetty() (gtty(_tty_ch, &_tty), _res_flg = _tty.sg_flags)
193: #define resetty() (_tty.sg_flags = _res_flg, stty(_tty_ch, &_tty))
194:
195: WINDOW *initscr(), *newwin();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.