⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 curses.mus

📁 早期freebsd实现
💻 MUS
📖 第 1 页 / 共 2 页
字号:
/* $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 + -