📄 window.h
字号:
/* * This file is part of the Minicom Communications Program, * written by Miquel van Smoorenburg 1991/1992/1993. * * Window Header File. * * 1991/10/09 Miquel van Smoorenburg. *//* * One character is contained in a "ELM" */typedef struct _elm { char value; char attr; char color;} ELM;/* * Control struct of a window */typedef struct _win { int x1, y1, x2, y2; /* Coordinates */ int sy1, sy2; /* Scrolling region */ int xs, ys; /* x and y size */ char border; /* type of border */ char cursor; /* Does it have a cursor */ char attr; /* Current attribute of window */ char color; /* Current color of window */ char autocr; /* With '\n', do an automatic '\r' */ char doscroll; /* Automatically scroll up */ char wrap; /* Wrap around edge */ char direct; /* Direct write to screen ? */ short curx, cury; /* current x and y */ char o_cursor; short o_curx; short o_cury; char o_attr; char o_color; /* Position & attributes before window was opened */ ELM *map; /* Map of contents */ ELM *histbuf; /* History buffer. */ int histlines; /* How many lines we keep in the history buffer */ int histline; /* Current line in the history buffer. */} WIN;/* * Stdwin is the whole screen */extern WIN *stdwin; /* Whole screen */extern int LINES, COLS; /* Size of sreen */extern int usecolor; /* Use ansi color escape sequences */extern int useattr; /* Use attributes (reverse, bold etc. ) */extern int dirflush; /* Direct flush after write */extern int literal; /* Literal pass-through of all characters? */extern int w_init; /* Already initialized? *//* * Possible attributes. */#define A_NORMAL 0 #define A_BLINK 1#define A_BOLD 2#define A_REVERSE 4#define A_STANDOUT 8#define A_UNDERLINE 16#define A_ALTCHARSET 32#define A_BLANK 64/* * Possible colors */#define BLACK 0#define RED 1#define GREEN 2#define YELLOW 3#define BLUE 4#define MAGENTA 5#define CYAN 6#define WHITE 7#define COLATTR(fg, bg) (((fg) << 4) + (bg))#define COLFG(ca) ((ca) >> 4)#define COLBG(ca) ((ca) % 16)/* * Possible borders. */#define BNONE 0#define BSINGLE 1#define BDOUBLE 2/* * Scrolling directions. */#define S_UP 1#define S_DOWN 2/* * Cursor types. */#define CNONE 0#define CNORMAL 1/* * Title Positions */#define TLEFT 0#define TMID 1#define TRIGHT 2/* * For wselect. */#define NIL_FUNLIST ((void (**)()) 0)#define NIL_FUN ((void (*)()) 0)#define MENU_END ((char *) 0)#define CNULL ((char *)0)#define NIL_WIN (WIN *) 0/* * Function prototypes. */#ifndef _PROTO# if __STDC__# define _PROTO(fun, args) fun args# else# define _PROTO(fun, args) fun()# endif#endif_PROTO( int getch, ( void ));_PROTO(void wflush, ( void ));_PROTO(WIN *wopen, ( int x1 , int y1 , int x2 , int y2 , int border , int attr , int fg , int bg , int direct , int hl , int rel ));_PROTO(void wclose, ( WIN *win , int replace ));_PROTO(void wleave, ( void ));_PROTO(void wreturn, ( void ));_PROTO(void wresize, (WIN *w, int x, int y ));_PROTO(void wredraw, ( WIN *w , int newdirect ));_PROTO(void wscroll, ( WIN *win , int dir ));_PROTO(void wlocate, ( WIN *win , int x , int y ));_PROTO(void wputc, ( WIN *win , int c ));_PROTO(void wdrawelm, ( WIN *win, int y, ELM *e ));_PROTO(void wputs, ( WIN *win , char *s ));/* Should use stdarg et al. */int wprintf();_PROTO(void wbell, ( void ));_PROTO(void wcursor, ( WIN *win , int type ));_PROTO(void wtitle, ( WIN *w , int pos , char *s ));_PROTO(void wcurbar, ( WIN *w , int y , int attr ));_PROTO(int wselect, ( int x , int y , char **choices , void (**funlist)() , char *title , int attr , int fg , int bg ));_PROTO(void wclrel, ( WIN *w ));_PROTO(void wclreol, ( WIN *w ));_PROTO(void wclrbol, ( WIN *w ));_PROTO(void wclreos, ( WIN *w ));_PROTO(void wclrbos, ( WIN *w ));_PROTO(void winclr, ( WIN *w ));_PROTO(void winsline, ( WIN *w ));_PROTO(void wdelline, ( WIN *w ));_PROTO(void winschar, ( WIN *w ));_PROTO(void wdelchar, ( WIN *w ));_PROTO(int wgets, ( WIN *win , char *s , int linemax, int totmax ));_PROTO(void win_end, ( void ));#ifdef BBS_PROTO(int win_init, ( char *term, int lines ));#else_PROTO(int win_init, ( int fg , int bg , int attr ));#endif/* * Some macro's that can be used as functions. */#define wsetregion(w, z1, z2) (((w)->sy1=(w)->y1+(z1)),((w)->sy2=(w)->y1+(z2)))#define wresetregion(w) ( (w)->sy1 = (w)->y1, (w)->sy2 = (w)->y2 )#define wgetattr(w) ( (w)->attr )#define wsetattr(w, a) ( (w)->attr = (a) )#define wsetfgcol(w, fg) ( (w)->color = ((w)->color & 15) + ((fg) << 4))#define wsetbgcol(w, bg) ( (w)->color = ((w)->color & 240) + (bg) )#define wsetam(w) ( (w)->wrap = 1 )#define wresetam(w) ( (w)->wrap = 0 )/* * Allright, now the macro's for our keyboard routines. */#define K_BS 8#define K_ESC 27#define K_STOP 256#define K_F1 257#define K_F2 258#define K_F3 259#define K_F4 260#define K_F5 261#define K_F6 262#define K_F7 263#define K_F8 264#define K_F9 265#define K_F10 266#define K_HOME 267#define K_PGUP 268#define K_UP 269#define K_LT 270#define K_RT 271#define K_DN 272#define K_END 273#define K_PGDN 274#define K_INS 275#define K_DEL 276#define NUM_KEYS 21#define KEY_OFFS 256#ifndef EOF# define EOF ((int) -1)#endif#define K_ERA '\b'#define K_KILL ((int) -2)/* Internal structure. */struct key { char *cap; char len;};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -