1 /* $Header: curses.mus,v 3.0.1.1 90/08/09 04:05:21 lwall Locked $
4 * Revision 3.0.1.1 90/08/09 04:05:21 lwall
5 * patch19: Initial revision
17 static enum uservars {
29 static enum usersubs {
111 static int usersub();
112 static int userset();
113 static int userval();
119 char *filename = "curses.c";
124 #define MAGICVAR(name, ix) uf.uf_index = ix, magicname(name, &uf, sizeof uf)
126 MAGICVAR("curscr", UV_curscr);
127 MAGICVAR("stdscr", UV_stdscr);
128 MAGICVAR("Def_term",UV_Def_term);
129 MAGICVAR("My_term", UV_My_term);
130 MAGICVAR("ttytype", UV_ttytype);
131 MAGICVAR("LINES", UV_LINES);
132 MAGICVAR("COLS", UV_COLS);
133 MAGICVAR("ERR", UV_ERR);
134 MAGICVAR("OK", UV_OK);
136 make_usub("addch", US_addch, usersub, filename);
137 make_usub("waddch", US_waddch, usersub, filename);
138 make_usub("addstr", US_addstr, usersub, filename);
139 make_usub("waddstr", US_waddstr, usersub, filename);
140 make_usub("box", US_box, usersub, filename);
141 make_usub("clear", US_clear, usersub, filename);
142 make_usub("wclear", US_wclear, usersub, filename);
143 make_usub("clearok", US_clearok, usersub, filename);
144 make_usub("clrtobot", US_clrtobot, usersub, filename);
145 make_usub("wclrtobot", US_wclrtobot, usersub, filename);
146 make_usub("clrtoeol", US_clrtoeol, usersub, filename);
147 make_usub("wclrtoeol", US_wclrtoeol, usersub, filename);
148 make_usub("delch", US_delch, usersub, filename);
149 make_usub("wdelch", US_wdelch, usersub, filename);
150 make_usub("deleteln", US_deleteln, usersub, filename);
151 make_usub("wdeleteln", US_wdeleteln, usersub, filename);
152 make_usub("erase", US_erase, usersub, filename);
153 make_usub("werase", US_werase, usersub, filename);
154 make_usub("flushok", US_flushok, usersub, filename);
155 make_usub("idlok", US_idlok, usersub, filename);
156 make_usub("insch", US_insch, usersub, filename);
157 make_usub("winsch", US_winsch, usersub, filename);
158 make_usub("insertln", US_insertln, usersub, filename);
159 make_usub("winsertln", US_winsertln, usersub, filename);
160 make_usub("move", US_move, usersub, filename);
161 make_usub("wmove", US_wmove, usersub, filename);
162 make_usub("overlay", US_overlay, usersub, filename);
163 make_usub("overwrite", US_overwrite, usersub, filename);
164 make_usub("printw", US_printw, usersub, filename);
165 make_usub("wprintw", US_wprintw, usersub, filename);
166 make_usub("refresh", US_refresh, usersub, filename);
167 make_usub("wrefresh", US_wrefresh, usersub, filename);
168 make_usub("standout", US_standout, usersub, filename);
169 make_usub("wstandout", US_wstandout, usersub, filename);
170 make_usub("standend", US_standend, usersub, filename);
171 make_usub("wstandend", US_wstandend, usersub, filename);
172 make_usub("cbreak", US_cbreak, usersub, filename);
173 make_usub("nocbreak", US_nocbreak, usersub, filename);
174 make_usub("echo", US_echo, usersub, filename);
175 make_usub("noecho", US_noecho, usersub, filename);
176 make_usub("getch", US_getch, usersub, filename);
177 make_usub("wgetch", US_wgetch, usersub, filename);
178 make_usub("getstr", US_getstr, usersub, filename);
179 make_usub("wgetstr", US_wgetstr, usersub, filename);
180 make_usub("raw", US_raw, usersub, filename);
181 make_usub("noraw", US_noraw, usersub, filename);
182 make_usub("scanw", US_scanw, usersub, filename);
183 make_usub("wscanw", US_wscanw, usersub, filename);
184 make_usub("baudrate", US_baudrate, usersub, filename);
185 make_usub("delwin", US_delwin, usersub, filename);
186 make_usub("endwin", US_endwin, usersub, filename);
187 make_usub("erasechar", US_erasechar, usersub, filename);
188 make_usub("getcap", US_getcap, usersub, filename);
189 make_usub("getyx", US_getyx, usersub, filename);
190 make_usub("inch", US_inch, usersub, filename);
191 make_usub("winch", US_winch, usersub, filename);
192 make_usub("initscr", US_initscr, usersub, filename);
193 make_usub("killchar", US_killchar, usersub, filename);
194 make_usub("leaveok", US_leaveok, usersub, filename);
195 make_usub("longname", US_longname, usersub, filename);
196 make_usub("fullname", US_fullname, usersub, filename);
197 make_usub("mvwin", US_mvwin, usersub, filename);
198 make_usub("newwin", US_newwin, usersub, filename);
199 make_usub("nl", US_nl, usersub, filename);
200 make_usub("nonl", US_nonl, usersub, filename);
201 make_usub("scrollok", US_scrollok, usersub, filename);
202 make_usub("subwin", US_subwin, usersub, filename);
203 make_usub("touchline", US_touchline, usersub, filename);
204 make_usub("touchoverlap", US_touchoverlap,usersub, filename);
205 make_usub("touchwin", US_touchwin, usersub, filename);
206 make_usub("unctrl", US_unctrl, usersub, filename);
207 make_usub("gettmode", US_gettmode, usersub, filename);
208 make_usub("mvcur", US_mvcur, usersub, filename);
209 make_usub("scroll", US_scroll, usersub, filename);
210 make_usub("savetty", US_savetty, usersub, filename);
211 make_usub("resetty", US_resetty, usersub, filename);
212 make_usub("setterm", US_setterm, usersub, filename);
213 make_usub("tstp", US_tstp, usersub, filename);
214 make_usub("_putchar", US__putchar, usersub, filename);
218 usersub(ix, sp, items)
223 STR **st = stack->ary_array + sp;
226 register STR *Str; /* used in str_get and str_gnum macros */
349 fatal("Usage: &printw($fmt, $arg1, $arg2, ... )");
352 STR* str = str_new(0);
354 do_sprintf(str, items - 1, st + 1);
355 retval = addstr(str->str_ptr);
356 str_numset(st[0], (double) retval);
363 fatal("Usage: &wprintw($win, $fmt, $arg1, $arg2, ... )");
366 STR* str = str_new(0);
367 WINDOW* win = *(WINDOW**) str_get(st[1]);
369 do_sprintf(str, items - 1, st + 1);
370 retval = waddstr(win, str->str_ptr);
371 str_numset(st[0], (double) retval);
411 fatal("Usage: &getch()");
421 str_nset(st[0], &retch, 1);
428 fatal("Usage: &wgetch($win)");
432 WINDOW* win = *(WINDOW**) str_get(st[1]);
434 retval = wgetch(win);
439 str_nset(st[0], &retch, 1);
478 fatal("Usage: &getyx($win, $y, $x)");
481 STR* str = str_new(0);
482 WINDOW* win = *(WINDOW**) str_get(st[1]);
486 do_sprintf(str, items - 1, st + 1);
487 retval = getyx(win, y, x);
488 str_numset(st[2], (double)y);
489 str_numset(st[3], (double)x);
490 str_numset(st[0], (double) retval);
563 CASE int touchoverlap
608 fatal("Unimplemented user-defined subroutine");
620 str_numset(str, (double)COLS);
623 str_set(str, Def_term);
626 str_numset(str, (double)ERR);
629 str_numset(str, (double)LINES);
632 str_numset(str, (double)My_term);
635 str_numset(str, (double)OK);
638 str_nset(str, &curscr, sizeof(WINDOW*));
641 str_nset(str, &stdscr, sizeof(WINDOW*));
644 str_set(str, ttytype);
657 COLS = (int)str_gnum(str);
660 Def_term = savestr(str_get(str)); /* never freed */
663 LINES = (int)str_gnum(str);
666 My_term = (bool)str_gnum(str);
669 strcpy(ttytype, str_get(str)); /* hope it fits */