📄 curses.mus
字号:
/* $RCSfile: curses.mus,v $$Revision: 4.0.1.2 $$Date: 92/06/08 16:06:12 $ * * $Log: curses.mus,v $ * Revision 4.0.1.2 92/06/08 16:06:12 lwall * patch20: function key support added to curses.mus * * Revision 4.0.1.1 91/11/05 19:06:19 lwall * patch11: usub/curses.mus now supports SysV curses * * Revision 4.0 91/03/20 01:56:13 lwall * 4.0 baseline. * * Revision 3.0.1.1 90/08/09 04:05:21 lwall * patch19: Initial revision * */#include "EXTERN.h"#include "perl.h"char *savestr();#undef bool#include <curses.h>#ifndef A_UNDERLINE#define NOSETATTR#define A_STANDOUT 0x0200#define A_UNDERLINE 0x0100#define A_REVERSE 0x0200#define A_BLINK 0x0400#define A_BOLD 0x0800#define A_ALTCHARSET 0x1000 #define A_NORMAL 0#endif#ifdef USGstatic char *tcbuf = NULL;#endif#ifdef NOSETATTRstatic unsigned curattr = NORMAL;#endifstatic enum uservars { UV_curscr, UV_stdscr, UV_ttytype, UV_LINES, UV_COLS, UV_ERR, UV_OK,#ifdef BSD UV_Def_term, UV_My_term,#endif UV_A_STANDOUT, UV_A_UNDERLINE, UV_A_REVERSE, UV_A_BLINK, UV_A_DIM, UV_A_BOLD, UV_A_NORMAL,};static enum usersubs { US_addch, US_waddch, US_addstr, US_waddstr, US_box, US_clear, US_wclear, US_clearok, US_clrtobot, US_wclrtobot, US_clrtoeol, US_wclrtoeol, US_delch, US_wdelch, US_deleteln, US_wdeleteln, US_erase, US_werase, US_idlok, US_insch, US_winsch, US_insertln, US_winsertln, US_move, US_wmove, US_overlay, US_overwrite, US_refresh, US_wrefresh, US_standout, US_wstandout, US_standend, US_wstandend, US_cbreak, US_nocbreak, US_echo, US_noecho, US_getch, US_wgetch, US_getstr, US_wgetstr, US_raw, US_noraw, US_baudrate, US_delwin, US_endwin, US_erasechar, US_getyx, US_inch, US_winch, US_initscr, US_killchar, US_leaveok, US_longname, US_mvwin, US_newwin, US_nl, US_nonl, US_scrollok, US_subwin, US_touchline, US_touchwin, US_unctrl, US_gettmode, US_mvcur, US_scroll, US_savetty, US_resetty, US_setterm, US_attroff, US_wattroff, US_attron, US_wattron, US_attrset, US_wattrset,#ifdef CURSEFMT US_printw, /* remove */ US_wprintw, /* remove */ US_scanw, /* delete */ US_wscanw, /* delete */#endif US_getcap,#ifdef BSD US_flushok, US_fullname, US_touchoverlap, US_tstp, US__putchar,#endif US_mysub, US_testcallback,};static int usersub();static int userset();static int userval();intinit_curses(){ struct ufuncs uf; char *filename = "curses.c"; uf.uf_set = userset; uf.uf_val = userval;#define MAGICVAR(name, ix) uf.uf_index = ix, magicname(name, &uf, sizeof uf) MAGICVAR("curscr", UV_curscr); MAGICVAR("stdscr", UV_stdscr); MAGICVAR("ttytype", UV_ttytype); MAGICVAR("LINES", UV_LINES); MAGICVAR("COLS", UV_COLS); MAGICVAR("ERR", UV_ERR); MAGICVAR("OK", UV_OK);#ifdef BSD MAGICVAR("Def_term",UV_Def_term); MAGICVAR("My_term", UV_My_term);#endif MAGICVAR("A_STANDOUT", UV_A_STANDOUT); MAGICVAR("A_UNDERLINE", UV_A_UNDERLINE); MAGICVAR("A_REVERSE", UV_A_REVERSE); MAGICVAR("A_BLINK", UV_A_BLINK); MAGICVAR("A_DIM", UV_A_DIM); MAGICVAR("A_BOLD", UV_A_BOLD); MAGICVAR("A_NORMAL", UV_A_NORMAL); make_usub("addch", US_addch, usersub, filename); make_usub("waddch", US_waddch, usersub, filename); make_usub("addstr", US_addstr, usersub, filename); make_usub("waddstr", US_waddstr, usersub, filename); make_usub("box", US_box, usersub, filename); make_usub("clear", US_clear, usersub, filename); make_usub("wclear", US_wclear, usersub, filename); make_usub("clearok", US_clearok, usersub, filename); make_usub("clrtobot", US_clrtobot, usersub, filename); make_usub("wclrtobot", US_wclrtobot, usersub, filename); make_usub("clrtoeol", US_clrtoeol, usersub, filename); make_usub("wclrtoeol", US_wclrtoeol, usersub, filename); make_usub("delch", US_delch, usersub, filename); make_usub("wdelch", US_wdelch, usersub, filename); make_usub("deleteln", US_deleteln, usersub, filename); make_usub("wdeleteln", US_wdeleteln, usersub, filename); make_usub("erase", US_erase, usersub, filename); make_usub("werase", US_werase, usersub, filename); make_usub("idlok", US_idlok, usersub, filename); make_usub("insch", US_insch, usersub, filename); make_usub("winsch", US_winsch, usersub, filename); make_usub("insertln", US_insertln, usersub, filename); make_usub("winsertln", US_winsertln, usersub, filename); make_usub("move", US_move, usersub, filename); make_usub("wmove", US_wmove, usersub, filename); make_usub("overlay", US_overlay, usersub, filename); make_usub("overwrite", US_overwrite, usersub, filename); make_usub("refresh", US_refresh, usersub, filename); make_usub("wrefresh", US_wrefresh, usersub, filename); make_usub("standout", US_standout, usersub, filename); make_usub("wstandout", US_wstandout, usersub, filename); make_usub("standend", US_standend, usersub, filename); make_usub("wstandend", US_wstandend, usersub, filename); make_usub("cbreak", US_cbreak, usersub, filename); make_usub("nocbreak", US_nocbreak, usersub, filename); make_usub("echo", US_echo, usersub, filename); make_usub("noecho", US_noecho, usersub, filename); make_usub("getch", US_getch, usersub, filename); make_usub("wgetch", US_wgetch, usersub, filename); make_usub("getstr", US_getstr, usersub, filename); make_usub("wgetstr", US_wgetstr, usersub, filename); make_usub("raw", US_raw, usersub, filename); make_usub("noraw", US_noraw, usersub, filename); make_usub("baudrate", US_baudrate, usersub, filename); make_usub("delwin", US_delwin, usersub, filename); make_usub("endwin", US_endwin, usersub, filename); make_usub("erasechar", US_erasechar, usersub, filename); make_usub("getyx", US_getyx, usersub, filename); make_usub("inch", US_inch, usersub, filename); make_usub("winch", US_winch, usersub, filename); make_usub("initscr", US_initscr, usersub, filename); make_usub("killchar", US_killchar, usersub, filename); make_usub("leaveok", US_leaveok, usersub, filename); make_usub("longname", US_longname, usersub, filename); make_usub("mvwin", US_mvwin, usersub, filename); make_usub("newwin", US_newwin, usersub, filename); make_usub("nl", US_nl, usersub, filename); make_usub("nonl", US_nonl, usersub, filename); make_usub("scrollok", US_scrollok, usersub, filename); make_usub("subwin", US_subwin, usersub, filename); make_usub("touchline", US_touchline, usersub, filename); make_usub("touchwin", US_touchwin, usersub, filename); make_usub("unctrl", US_unctrl, usersub, filename); make_usub("gettmode", US_gettmode, usersub, filename); make_usub("mvcur", US_mvcur, usersub, filename); make_usub("scroll", US_scroll, usersub, filename); make_usub("savetty", US_savetty, usersub, filename); make_usub("resetty", US_resetty, usersub, filename); make_usub("setterm", US_setterm, usersub, filename); make_usub("getcap", US_getcap, usersub, filename); make_usub("attroff", US_attroff, usersub, filename); make_usub("wattroff", US_wattroff, usersub, filename); make_usub("attron", US_attron, usersub, filename); make_usub("wattron", US_wattron, usersub, filename); make_usub("attrset", US_attrset, usersub, filename); make_usub("wattrset", US_wattrset, usersub, filename);#ifdef CURSEFMT make_usub("printw", US_printw, usersub, filename); make_usub("wprintw", US_wprintw, usersub, filename); make_usub("scanw", US_scanw, usersub, filename); make_usub("wscanw", US_wscanw, usersub, filename);#endif#ifdef BSD make_usub("flushok", US_flushok, usersub, filename); make_usub("fullname", US_fullname, usersub, filename); make_usub("touchoverlap", US_touchoverlap,usersub, filename); make_usub("tstp", US_tstp, usersub, filename); make_usub("_putchar", US__putchar, usersub, filename);#endif make_usub("testcallback", US_testcallback,usersub, filename); }; #ifdef USGstatic char*getcap(cap)register char *cap;{ static char nocaperr[] = "Cannot read termcap entry."; extern char *tgetstr(); if (tcbuf == NULL) { if ((tcbuf = malloc(1024)) == NULL) { fatal(nocaperr); } if (tgetent(tcbuf, ttytype) == -1) { fatal(nocaperr); } } return (tgetstr(cap, NULL));}#endif#ifdef NOSETATTR#define attron(attr) wattron(stdscr, attr)#define attroff(attr) wattroff(stdscr, attr)#define attset(attr) wattset(stdscr, attr)intwattron(win, attr)WINDOW *win;chtype attr;{ curattr |= attr; if (curattr & A_STANDOUT) { return(wstandout(win)); } else { return(wstandend(win)); }}intwattroff(win, attr)WINDOW *win;chtype attr;{ curattr &= (~attr); if (curattr & A_STANDOUT) { return(wstandout(win)); } else { return(wstandend(win)); }}intwattrset(win, attr)WINDOW *win;chtype attr;{ curattr = attr; if (curattr & A_STANDOUT) { return(wstandout(win)); } else { return(wstandend(win)); }}#endif static intusersub(ix, sp, items)int ix;register int sp;register int items;{ STR **st = stack->ary_array + sp; register int i; register char *tmps; register STR *Str; /* used in str_get and str_gnum macros */ switch (ix) {CASE int addchI char chENDCASE int waddchI WINDOW* winI char chENDCASE int addstrI char* strENDCASE int waddstrI WINDOW* winI char* strENDCASE int boxI WINDOW* winI char vertI char horENDCASE int clearENDCASE int wclearI WINDOW* winENDCASE int clearokI WINDOW* winI bool boolfENDCASE int clrtobotENDCASE int wclrtobotI WINDOW* winENDCASE int clrtoeolENDCASE int wclrtoeolI WINDOW* winENDCASE int delchENDCASE int wdelchI WINDOW* winENDCASE int deletelnENDCASE int wdeletelnI WINDOW* winENDCASE int eraseENDCASE int weraseI WINDOW* winENDCASE int idlokI WINDOW* winI bool boolfENDCASE int inschI char cEND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -