📄 new_curse.c
字号:
/* | new_curse.c | | A subset of curses developed for use with ae. | | written by Hugh Mahon | | THIS MATERIAL IS PROVIDED "AS IS". THERE ARE | NO WARRANTIES OF ANY KIND WITH REGARD TO THIS | MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE | IMPLIED WARRANTIES OF MERCHANTABILITY AND | FITNESS FOR A PARTICULAR PURPOSE. Neither | Hewlett-Packard nor Hugh Mahon shall be liable | for errors contained herein, nor for | incidental or consequential damages in | connection with the furnishing, performance or | use of this material. Neither Hewlett-Packard | nor Hugh Mahon assumes any responsibility for | the use or reliability of this software or | documentation. This software and | documentation is totally UNSUPPORTED. There | is no support contract available. Hewlett- | Packard has done NO Quality Assurance on ANY | of the program or documentation. You may find | the quality of the materials inferior to | supported materials. | | This software is not a product of Hewlett-Packard, Co., or any | other company. No support is implied or offered with this software. | You've got the source, and you're on your own. | | This software may be distributed under the terms of Larry Wall's | Artistic license, a copy of which is included in this distribution. | | This notice must be included with this software and any derivatives. | | Copyright (c) 1986, 1987, 1988, 1991, 1992, 1993, 1994, 1995 Hugh Mahon | All are rights reserved. | | $Header: /home/hugh/sources/old_ae/RCS/new_curse.c,v 1.49 1998/12/21 02:25:59 hugh Exp hugh $ | */char *copyright_message[] = { "Copyright (c) 1986, 1987, 1988, 1991, 1992, 1993, 1994, 1995 Hugh Mahon", "All rights are reserved."};char * new_curse_name= "@(#) new_curse.c $Revision: 1.49 $";#include "new_curse.h"#include <signal.h>#include <fcntl.h>#ifdef SYS5#include <string.h>#else#include <strings.h>#endif#ifdef BSD_SELECT#include <sys/types.h>#include <sys/time.h>#ifdef SLCT_HDR#include <sys/select.h> /* on AIX */#endif /* SLCT_HDR */#endif /* BSD_SELECT */#ifdef HAS_STDLIB#include <stdlib.h>#endif#if defined(__STDC__)#include <stdarg.h>#else#include <varargs.h>#endif#ifdef HAS_UNISTD#include <unistd.h>#endif#ifdef HAS_SYS_IOCTL#include <sys/ioctl.h>#endifWINDOW *curscr;static WINDOW *virtual_scr;WINDOW *stdscr;WINDOW *last_window_refreshed;#ifdef TIOCGWINSZ struct winsize ws;#endif#define min(a, b) (a < b ? a : b)#define highbitset(a) ((a) & 0x80)#ifndef CAP#define String_Out(table, stack, place) Info_Out(table, stack, place)#else#define String_Out(table, stack, place) Cap_Out(table, stack, place)#endif#define bw__ 0 /* booleans */#define am__ 1#define xb__ 2#define xs__ 3 /* hp glitch (standout not erased by overwrite) */#define xn__ 4#define eo__ 5#define gn__ 6 /* generic type terminal */#define hc__ 7 /* hardcopy terminal */#define km__ 8#define hs__ 9#define in__ 10#define da__ 11#define db__ 12#define mi__ 13 /* safe to move during insert mode */#define ms__ 14 /* safe to move during standout mode */#define os__ 15#define es__ 16#define xt__ 17#define hz__ 18 /* hazeltine glitch */#define ul__ 19#define xo__ 20#define chts__ 21#define nxon__ 22#define nrrmc__ 23#define npc__ 24#define mc5i__ 25#define co__ 0 /* number of columns */ /* numbers */#define it__ 1 /* spaces per tab */#define li__ 2 /* number of lines */#define lm__ 3#define sg__ 4 /* magic cookie glitch */#define pb__ 5#define vt__ 6#define ws__ 7#define cols__ 0#define lines__ 2#define xmc__ 4#define vt__ 6#define wsl__ 7#define nlab__ 8#define lh__ 9#define lw__ 10#define bt__ 0 /* back tab */ /* strings */#define bl__ 1 /* bell */#define cr__ 2 /* carriage return */#define cs__ 3 /* change scroll region */#define ct__ 4 /* clear all tab stops */#define cl__ 5 /* clear screen and home cursor */#define ce__ 6 /* clear to end of line */#define cd__ 7 /* clear to end of display */#define ch__ 8 /* set cursor column */#define CC__ 9 /* term, settable cmd char in */#define cm__ 10 /* screen rel cursor motion, row, column */#define do__ 11 /* down one line */#define ho__ 12 /* home cursor */#define vi__ 13 /* make cursor invisible */#define le__ 14 /* move cursor left one space */#define CM__ 15 /* memory rel cursor addressing */#define ve__ 16 /* make cursor appear normal */#define nd__ 17 /* non-destructive space (cursor right) */#define ll__ 18 /* last line, first col */#define up__ 19 /* cursor up */#define vs__ 20#define dc__ 21 /* delete character */#define dl__ 22 /* delete line */#define ds__ 23#define hd__ 24#define as__ 25#define mb__ 26#define md__ 27 /* turn on bold */#define ti__ 28#define dm__ 29 /* turn on delete mode */#define mh__ 30 /* half bright mode */#define im__ 31 /* insert mode */#define mk__ 32#define mp__ 33#define mr__ 34#define so__ 35 /* enter standout mode */#define us__ 36#define ec__ 37#define ae__ 38#define me__ 39#define te__ 40#define ed__ 41#define ei__ 42 /* exit insert mode */#define se__ 43 /* exit standout mode */#define ue__ 44#define vb__ 45#define ff__ 46#define fs__ 47#define i1__ 48#define i2__ 49#define i3__ 50#define if__ 51#define ic__ 52#define al__ 53#define ip__ 54#define kb__ 55 /* backspace key */#define ka__ 56#define kC__ 57#define kt__ 58#define kD__ 59#define kL__ 60#define kd__ 61#define kM__ 62#define kE__ 63#define kS__ 64#define k0__ 65#define k1__ 66#define kf10__ 67#define k2__ 68#define k3__ 69#define k4__ 70#define k5__ 71#define k6__ 72#define k7__ 73#define k8__ 74#define k9__ 75#define kh__ 76#define kI__ 77#define kA__ 78#define kl__ 79#define kH__ 80#define kN__ 81#define kP__ 82#define kr__ 83#define kF__ 84#define kR__ 85#define kT__ 86#define ku__ 87 /* key up */#define ke__ 88#define ks__ 89#define l0__ 90#define l1__ 91#define la__ 92#define l2__ 93#define l3__ 94#define l4__ 95#define l5__ 96#define l6__ 97#define l7__ 98#define l8__ 99#define l9__ 100#define mo__ 101#define mm__ 102#define nw__ 103#define pc__ 104#define DC__ 105#define DL__ 106#define DO__ 107#define IC__ 118#define SF__ 109#define AL__ 110#define LE__ 111#define RI__ 112#define SR__ 113#define UP__ 114#define pk__ 115#define pl__ 116#define px__ 117#define ps__ 118#define pf__ 119#define po__ 120#define rp__ 121#define r1__ 122#define r2__ 123#define r3__ 124#define rf__ 125#define rc__ 126#define cv__ 127#define sc__ 128#define sf__ 129#define sr__ 130#define sa__ 131 /* sgr */#define st__ 132#define wi__ 133#define ta__ 134#define ts__ 135#define uc__ 136#define hu__ 137#define iP__ 138#define K1__ 139#define K2__ 140#define K3__ 141#define K4__ 142#define K5__ 143#define pO__ 144#define ml__ 145#define mu__ 146#define rmp__ 145#define acsc__ 146#define pln__ 147#define kcbt__ 148#define smxon__ 149#define rmxon__ 150#define smam__ 151#define rmam__ 152#define xonc__ 153#define xoffc__ 154#define enacs__ 155#define smln__ 156#define rmln__ 157#define kbeg__ 158#define kcan__ 159#define kclo__ 160#define kcmd__ 161#define kcpy__ 162#define kcrt__ 163#define kend__ 164#define kent__ 165#define kext__ 166#define kfnd__ 167#define khlp__ 168#define kmrk__ 169#define kmsg__ 170#define kmov__ 171#define knxt__ 172#define kopn__ 173#define kopt__ 174#define kprv__ 175#define kprt__ 176#define krdo__ 177#define kref__ 178#define krfr__ 179#define krpl__ 180#define krst__ 181#define kres__ 182#define ksav__ 183#define kspd__ 184#define kund__ 185#define kBEG__ 186#define kCAN__ 187#define kCMD__ 188#define kCPY__ 189#define kCRT__ 190#define kDC__ 191#define kDL__ 192#define kslt__ 193#define kEND__ 194#define kEOL__ 195#define kEXT__ 196#define kFND__ 197#define kHLP__ 198#define kHOM__ 199#define kIC__ 200#define kLFT__ 201#define kMSG__ 202#define kMOV__ 203#define kNXT__ 204#define kOPT__ 205#define kPRV__ 206#define kPRT__ 207#define kRDO__ 208#define kRPL__ 209#define kRIT__ 210#define kRES__ 211#define kSAV__ 212#define kSPD__ 213#define kUND__ 214#define rfi__ 215#define kf11__ 216#define kf12__ 217#define kf13__ 218#define kf14__ 219#define kf15__ 220#define kf16__ 221#define kf17__ 222#define kf18__ 223#define kf19__ 224#define kf20__ 225#define kf21__ 226#define kf22__ 227#define kf23__ 228#define kf24__ 229#define kf25__ 230#define kf26__ 231#define kf27__ 232#define kf28__ 233#define kf29__ 234#define kf30__ 235#define kf31__ 236#define kf32__ 237#define kf33__ 238#define kf34__ 239#define kf35__ 240#define kf36__ 241#define kf37__ 242#define kf38__ 243#define kf39__ 244#define kf40__ 245#define kf41__ 246#define kf42__ 247#define kf43__ 248#define kf44__ 249#define kf45__ 250#define kf46__ 251#define kf47__ 252#define kf48__ 253#define kf49__ 254#define kf50__ 255#define kf51__ 256#define kf52__ 257#define kf53__ 258#define kf54__ 259#define kf55__ 260#define kf56__ 261#define kf57__ 262#define kf58__ 263#define kf59__ 264#define kf60__ 265#define kf61__ 266#define kf62__ 267#define kf63__ 268#define el1__ 269#define mgc__ 270#define smgl__ 271#define smgr__ 272#ifdef CAPchar *Boolean_names[] = {"bw", "am", "xb", "xs", "xn", "eo", "gn", "hc", "km", "hs", "in", "da", "db", "mi", "ms", "os", "es", "xt", "hz", "ul", "xo", "HC", "nx", "NR", "NP", "5i"}; char *Number_names[] = { "co#", "it#", "li#", "lm#", "sg#", "pb#", "vt#", "ws#", "Nl#", "lh#", "lw#"};char *String_names[] = {"bt=", "bl=", "cr=", "cs=", "ct=", "cl=", "ce=", "cd=", "ch=", "CC=", "cm=", "do=", "ho=", "vi=", "le=", "CM=", "ve=", "nd=", "ll=", "up=", "vs=", "dc=", "dl=", "ds=", "hd=", "as=", "mb=", "md=", "ti=", "dm=", "mh=", "im=", "mk=", "mp=", "mr=", "so=", "us=", "ec=", "ae=", "me=", "te=", "ed=", "ei=", "se=", "ue=", "vb=", "ff=", "fs=", "i1=", "i2=", "i3=", "if=", "ic=", "al=", "ip=", "kb=", "ka=", "kC=", "kt=", "kD=", "kL=", "kd=", "kM=", "kE=", "kS=", "k0=", "k1=", "k;=", "k2=", "k3=", "k4=", "k5=", "k6=", "k7=", "k8=", "k9=", "kh=", "kI=", "kA=", "kl=", "kH=", "kN=", "kP=", "kr=", "kF=", "kR=", "kT=", "ku=", "ke=", "ks=", "l0=", "l1=", "la=", "l2=", "l3=", "l4=", "l5=", "l6=", "l7=", "l8=", "l9=", "mo=", "mm=", "nw=", "pc=", "DC=", "DL=", "DO=", "IC=", "SF=", "AL=", "LE=", "RI=", "SR=", "UP=", "pk=", "pl=", "px=", "ps=", "pf=", "po=", "rp=", "r1=", "r2=", "r3=", "rf=", "rc=", "cv=", "sc=", "sf=", "sr=", "sa=", "st=", "wi=", "ta=", "ts=", "uc=", "hu=", "iP=", "K1=", "K3=", "K2=", "K4=", "K5=", "pO=", "rP=", "ac=", "pn=", "kB=", "SX=", "RX=", "SA=", "RA=", "XN=", "XF=", "eA=", "LO=", "LF=", "@1=", "@2=", "@3=", "@4=", "@5=", "@6=", "@7=", "@8=", "@9=", "@0=", "%1=", "%2=", "%3=", "%4=", "%5=", "%6=", "%7=", "%8=", "%9=", "%0=", "&1=", "&2=", "&3=", "&4=", "&5=", "&6=", "&7=", "&8=", "&9=", "&0=", "*1=", "*2=", "*3=", "*4=", "*5=", "*6=", "*7=", "*8=", "*9=", "*0=", "#1=", "#2=", "#3=", "#4=", "%a=", "%b=", "%c=", "%d=", "%e=", "%f=", "%g=", "%h=", "%i=", "%j=", "!1=", "!2=", "!3=", "RF=", "F1=", "F2=", "F3=", "F4=", "F5=", "F6=", "F7=", "F8=", "F9=", "FA=", "FB=", "FC=", "FD=", "FE=", "FF=", "FG=", "FH=", "FI=", "FJ=", "FK=", "FL=", "FM=", "FN=", "FO=", "FP=", "FQ=", "FR=", "FS=", "FT=", "FU=", "FV=", "FW=", "FX=", "FY=", "FZ=", "Fa=", "Fb=", "Fc=", "Fd=", "Fe=", "Ff=", "Fg=", "Fh=", "Fi=", "Fj=", "Fk=", "Fl=", "Fm=", "Fn=", "Fo=", "Fp=", "Fq=", "Fr=", "cb=", "MC=", "ML=", "MR="};#endifchar *new_curse = "October 1987";char in_buff[100]; /* buffer for ungetch */int bufp; /* next free position in in_buff */char *TERMINAL_TYPE = NULL; /* terminal type to be gotten from environment */int CFOUND = FALSE;int Data_Line_len = 0;int Max_Key_len; /* max length of a sequence sent by a key */char *Data_Line = NULL;char *TERM_PATH = NULL;char *TERM_data_ptr = NULL;char *Term_File_name = NULL; /* name of file containing terminal description */FILE *TFP; /* file pointer to file with terminal des. */int Fildes; /* file descriptor for terminfo file */int STAND = FALSE; /* is standout mode activated? */int TERM_INFO = FALSE; /* is terminfo being used (TRUE), or termcap (FALSE) */int Time_Out; /* set when time elapsed while trying to read function key */int Curr_x; /* current x position on screen */int Curr_y; /* current y position on the screen */int LINES;int COLS;int Move_It; /* flag to move cursor if magic cookie glitch */int initialized = FALSE; /* tells whether new_curse is initialized */float speed;float chars_per_millisecond;int Repaint_screen; /* if an operation to change screen impossible, repaint screen */int Intr; /* storeage for interrupt character */int Parity; /* 0 = no parity, 1 = odd parity, 2 = even parity */int Noblock; /* for BSD systems */int Num_bits; /* number of bits per character */int Flip_Bytes; /* some systems have byte order reversed */int interrupt_flag = FALSE; /* set true if SIGWINCH received */#ifndef CAPchar *Strings;#endifstruct KEYS { int length; /* length of string sent by key */ char *string; /* string sent by key */ int value; /* CURSES value of key (9-bit) */ };struct KEY_STACK { struct KEYS *element; struct KEY_STACK *next; };struct KEY_STACK *KEY_TOS = NULL;struct KEY_STACK *KEY_POINT;/* | | Not all systems have good terminal information, so we will define | keyboard information here for the most widely used terminal type, | the VT100. | */struct KEYS vt100[] = { { 3, "\033[A", 0403 }, /* key up */ { 3, "\033[C", 0405 }, /* key right */ { 3, "\033[D", 0404 }, /* key left */ { 4, "\033[6~", 0522 }, /* key next page */ { 4, "\033[5~", 0523 }, /* key prev page */ { 3, "\033[[", 0550 }, /* key end */ { 3, "\033[@", 0406 }, /* key home */ { 4, "\033[2~", 0513 }, /* key insert char */ { 3, "\033[y", 0410 }, /* key F0 */ { 3, "\033[P", 0411 }, /* key F1 */ { 3, "\033[Q", 0412 }, /* key F2 */ { 3, "\033[R", 0413 }, /* key F3 */ { 3, "\033[S", 0414 }, /* key F4 */ { 3, "\033[t", 0415 }, /* key F5 */ { 3, "\033[u", 0416 }, /* key F6 */ { 3, "\033[v", 0417 }, /* key F7 */ { 3, "\033[l", 0420 }, /* key F8 */ { 3, "\033[w", 0421 }, /* key F9 */ { 3, "\033[x", 0422 }, /* key F10 */ { 5, "\033[10~", 0410 }, /* key F0 */ { 5, "\033[11~", 0411 }, /* key F1 */ { 5, "\033[12~", 0412 }, /* key F2 */ { 5, "\033[13~", 0413 }, /* key F3 */ { 5, "\033[14~", 0414 }, /* key F4 */ { 5, "\033[15~", 0415 }, /* key F5 */ { 5, "\033[17~", 0416 }, /* key F6 */ { 5, "\033[18~", 0417 }, /* key F7 */ { 5, "\033[19~", 0420 }, /* key F8 */ { 5, "\033[20~", 0421 }, /* key F9 */ { 5, "\033[21~", 0422 }, /* key F10 */ { 5, "\033[23~", 0423 }, /* key F11 */ { 5, "\033[24~", 0424 }, /* key F12 */ { 3, "\033[q", 0534 }, /* ka1 upper-left of keypad */ { 3, "\033[s", 0535 }, /* ka3 upper-right of keypad */ { 3, "\033[r", 0536 }, /* kb2 center of keypad */ { 3, "\033[p", 0537 }, /* kc1 lower-left of keypad */ { 3, "\033[n", 0540 }, /* kc3 lower-right of keypad */ /* | The following are the same keys as above, but with | a different character following the escape char. */ { 3, "\033OA", 0403 }, /* key up */ { 3, "\033OC", 0405 }, /* key right */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -