1*72fcea8cSEd Schouten /* 2*72fcea8cSEd Schouten | new_curse.h 3*72fcea8cSEd Schouten | 4*72fcea8cSEd Schouten | A subset of curses developed for use with ae. 5*72fcea8cSEd Schouten | 6*72fcea8cSEd Schouten | written by Hugh Mahon 7*72fcea8cSEd Schouten | 8*72fcea8cSEd Schouten | THIS MATERIAL IS PROVIDED "AS IS". THERE ARE 9*72fcea8cSEd Schouten | NO WARRANTIES OF ANY KIND WITH REGARD TO THIS 10*72fcea8cSEd Schouten | MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE 11*72fcea8cSEd Schouten | IMPLIED WARRANTIES OF MERCHANTABILITY AND 12*72fcea8cSEd Schouten | FITNESS FOR A PARTICULAR PURPOSE. Neither 13*72fcea8cSEd Schouten | Hewlett-Packard nor Hugh Mahon shall be liable 14*72fcea8cSEd Schouten | for errors contained herein, nor for 15*72fcea8cSEd Schouten | incidental or consequential damages in 16*72fcea8cSEd Schouten | connection with the furnishing, performance or 17*72fcea8cSEd Schouten | use of this material. Neither Hewlett-Packard 18*72fcea8cSEd Schouten | nor Hugh Mahon assumes any responsibility for 19*72fcea8cSEd Schouten | the use or reliability of this software or 20*72fcea8cSEd Schouten | documentation. This software and 21*72fcea8cSEd Schouten | documentation is totally UNSUPPORTED. There 22*72fcea8cSEd Schouten | is no support contract available. Hewlett- 23*72fcea8cSEd Schouten | Packard has done NO Quality Assurance on ANY 24*72fcea8cSEd Schouten | of the program or documentation. You may find 25*72fcea8cSEd Schouten | the quality of the materials inferior to 26*72fcea8cSEd Schouten | supported materials. 27*72fcea8cSEd Schouten | 28*72fcea8cSEd Schouten | This software is not a product of Hewlett-Packard, Co., or any 29*72fcea8cSEd Schouten | other company. No support is implied or offered with this software. 30*72fcea8cSEd Schouten | You've got the source, and you're on your own. 31*72fcea8cSEd Schouten | 32*72fcea8cSEd Schouten | This software may be distributed under the terms of Larry Wall's 33*72fcea8cSEd Schouten | Artistic license, a copy of which is included in this distribution. 34*72fcea8cSEd Schouten | 35*72fcea8cSEd Schouten | This notice must be included with this software and any derivatives. 36*72fcea8cSEd Schouten | 37*72fcea8cSEd Schouten | Copyright (c) 1986, 1987, 1988, 1991, 1995 Hugh Mahon 38*72fcea8cSEd Schouten | All are rights reserved. 39*72fcea8cSEd Schouten | 40*72fcea8cSEd Schouten */ 41*72fcea8cSEd Schouten 42*72fcea8cSEd Schouten #include <stdio.h> 43*72fcea8cSEd Schouten 44*72fcea8cSEd Schouten #ifdef SYS5 45*72fcea8cSEd Schouten #include <termio.h> 46*72fcea8cSEd Schouten #else 47*72fcea8cSEd Schouten #include <sgtty.h> 48*72fcea8cSEd Schouten #include <fcntl.h> 49*72fcea8cSEd Schouten #endif 50*72fcea8cSEd Schouten 51*72fcea8cSEd Schouten #define KEY_BREAK 0401 52*72fcea8cSEd Schouten #define KEY_DOWN 0402 53*72fcea8cSEd Schouten #define KEY_UP 0403 54*72fcea8cSEd Schouten #define KEY_LEFT 0404 55*72fcea8cSEd Schouten #define KEY_RIGHT 0405 56*72fcea8cSEd Schouten #define KEY_HOME 0406 57*72fcea8cSEd Schouten #define KEY_BACKSPACE 0407 58*72fcea8cSEd Schouten #define KEY_F0 0410 59*72fcea8cSEd Schouten #define KEY_F(n) (KEY_F0+(n)) 60*72fcea8cSEd Schouten #define KEY_DL 0510 61*72fcea8cSEd Schouten #define KEY_IL 0511 62*72fcea8cSEd Schouten #define KEY_DC 0512 63*72fcea8cSEd Schouten #define KEY_IC 0513 64*72fcea8cSEd Schouten #define KEY_EIC 0514 65*72fcea8cSEd Schouten #define KEY_CLEAR 0515 66*72fcea8cSEd Schouten #define KEY_EOS 0516 67*72fcea8cSEd Schouten #define KEY_EOL 0517 68*72fcea8cSEd Schouten #define KEY_SF 0520 69*72fcea8cSEd Schouten #define KEY_SR 0521 70*72fcea8cSEd Schouten #define KEY_NPAGE 0522 71*72fcea8cSEd Schouten #define KEY_PPAGE 0523 72*72fcea8cSEd Schouten #define KEY_STAB 0524 73*72fcea8cSEd Schouten #define KEY_CTAB 0525 74*72fcea8cSEd Schouten #define KEY_CATAB 0526 75*72fcea8cSEd Schouten #define KEY_ENTER 0527 76*72fcea8cSEd Schouten #define KEY_SRESET 0530 77*72fcea8cSEd Schouten #define KEY_RESET 0531 78*72fcea8cSEd Schouten #define KEY_PRINT 0532 79*72fcea8cSEd Schouten #define KEY_LL 0533 80*72fcea8cSEd Schouten #define KEY_A1 0534 81*72fcea8cSEd Schouten #define KEY_A3 0535 82*72fcea8cSEd Schouten #define KEY_B2 0536 83*72fcea8cSEd Schouten #define KEY_C1 0537 84*72fcea8cSEd Schouten #define KEY_C3 0540 85*72fcea8cSEd Schouten #define KEY_BTAB 0541 86*72fcea8cSEd Schouten #define KEY_BEG 0542 87*72fcea8cSEd Schouten #define KEY_CANCEL 0543 88*72fcea8cSEd Schouten #define KEY_CLOSE 0544 89*72fcea8cSEd Schouten #define KEY_COMMAND 0545 90*72fcea8cSEd Schouten #define KEY_COPY 0546 91*72fcea8cSEd Schouten #define KEY_CREATE 0547 92*72fcea8cSEd Schouten #define KEY_END 0550 93*72fcea8cSEd Schouten #define KEY_EXIT 0551 94*72fcea8cSEd Schouten #define KEY_FIND 0552 95*72fcea8cSEd Schouten #define KEY_HELP 0553 96*72fcea8cSEd Schouten #define KEY_MARK 0554 97*72fcea8cSEd Schouten #define KEY_MESSAGE 0555 98*72fcea8cSEd Schouten #define KEY_MOVE 0556 99*72fcea8cSEd Schouten #define KEY_NEXT 0557 100*72fcea8cSEd Schouten #define KEY_OPEN 0560 101*72fcea8cSEd Schouten #define KEY_OPTIONS 0561 102*72fcea8cSEd Schouten #define KEY_PREVIOUS 0562 103*72fcea8cSEd Schouten #define KEY_REDO 0563 104*72fcea8cSEd Schouten #define KEY_REFERENCE 0564 105*72fcea8cSEd Schouten #define KEY_REFRESH 0565 106*72fcea8cSEd Schouten #define KEY_REPLACE 0566 107*72fcea8cSEd Schouten #define KEY_RESTART 0567 108*72fcea8cSEd Schouten #define KEY_RESUME 0570 109*72fcea8cSEd Schouten #define KEY_SAVE 0571 110*72fcea8cSEd Schouten #define KEY_SBEG 0572 111*72fcea8cSEd Schouten #define KEY_SCANCEL 0573 112*72fcea8cSEd Schouten #define KEY_SCOMMAND 0574 113*72fcea8cSEd Schouten #define KEY_SCOPY 0575 114*72fcea8cSEd Schouten #define KEY_SCREATE 0576 115*72fcea8cSEd Schouten #define KEY_SDC 0577 116*72fcea8cSEd Schouten #define KEY_SDL 0600 117*72fcea8cSEd Schouten #define KEY_SELECT 0601 118*72fcea8cSEd Schouten #define KEY_SEND 0602 119*72fcea8cSEd Schouten #define KEY_SEOL 0603 120*72fcea8cSEd Schouten #define KEY_SEXIT 0604 121*72fcea8cSEd Schouten #define KEY_SFIND 0605 122*72fcea8cSEd Schouten #define KEY_SHELP 0606 123*72fcea8cSEd Schouten #define KEY_SHOME 0607 124*72fcea8cSEd Schouten #define KEY_SIC 0610 125*72fcea8cSEd Schouten #define KEY_SLEFT 0611 126*72fcea8cSEd Schouten #define KEY_SMESSAGE 0612 127*72fcea8cSEd Schouten #define KEY_SMOVE 0613 128*72fcea8cSEd Schouten #define KEY_SNEXT 0614 129*72fcea8cSEd Schouten #define KEY_SOPTIONS 0615 130*72fcea8cSEd Schouten #define KEY_SPREVIOUS 0616 131*72fcea8cSEd Schouten #define KEY_SPRINT 0617 132*72fcea8cSEd Schouten #define KEY_SREDO 0620 133*72fcea8cSEd Schouten #define KEY_SREPLACE 0621 134*72fcea8cSEd Schouten #define KEY_SRIGHT 0622 135*72fcea8cSEd Schouten #define KEY_SRSUME 0623 136*72fcea8cSEd Schouten #define KEY_SSAVE 0624 137*72fcea8cSEd Schouten #define KEY_SSUSPEND 0625 138*72fcea8cSEd Schouten #define KEY_SUNDO 0626 139*72fcea8cSEd Schouten #define KEY_SUSPEND 0627 140*72fcea8cSEd Schouten #define KEY_UNDO 0630 141*72fcea8cSEd Schouten 142*72fcea8cSEd Schouten #define TRUE 1 143*72fcea8cSEd Schouten #define FALSE 0 144*72fcea8cSEd Schouten 145*72fcea8cSEd Schouten #define A_STANDOUT 0001 /* standout mode */ 146*72fcea8cSEd Schouten #define A_NC_BIG5 0x0100 /* Handle Chinese Big5 characters */ 147*72fcea8cSEd Schouten #define SCROLL 1 /* text has been scrolled */ 148*72fcea8cSEd Schouten #define CLEAR 2 /* window has been cleared */ 149*72fcea8cSEd Schouten #define CHANGE 3 /* window has been changed */ 150*72fcea8cSEd Schouten #define UP 1 /* direction of scroll */ 151*72fcea8cSEd Schouten #define DOWN 2 152*72fcea8cSEd Schouten 153*72fcea8cSEd Schouten struct _line { 154*72fcea8cSEd Schouten struct _line *next_screen; 155*72fcea8cSEd Schouten struct _line *prev_screen; 156*72fcea8cSEd Schouten char *row; 157*72fcea8cSEd Schouten char *attributes; 158*72fcea8cSEd Schouten int last_char; 159*72fcea8cSEd Schouten int changed; 160*72fcea8cSEd Schouten int scroll; 161*72fcea8cSEd Schouten int number; 162*72fcea8cSEd Schouten }; 163*72fcea8cSEd Schouten 164*72fcea8cSEd Schouten struct _line *top_of_win; 165*72fcea8cSEd Schouten 166*72fcea8cSEd Schouten typedef struct WIND { 167*72fcea8cSEd Schouten int SR; /* starting row */ 168*72fcea8cSEd Schouten int SC; /* starting column */ 169*72fcea8cSEd Schouten int LC; /* last column */ 170*72fcea8cSEd Schouten int LX; /* last cursor column position */ 171*72fcea8cSEd Schouten int LY; /* last cursor row position */ 172*72fcea8cSEd Schouten int Attrib; /* attributes active in window */ 173*72fcea8cSEd Schouten int Num_lines; /* number of lines */ 174*72fcea8cSEd Schouten int Num_cols; /* number of columns */ 175*72fcea8cSEd Schouten int scroll_up; /* number of lines moved */ 176*72fcea8cSEd Schouten int scroll_down; 177*72fcea8cSEd Schouten int SCROLL_CLEAR; /* indicates that window has been scrolled or cleared */ 178*72fcea8cSEd Schouten struct _line *first_line; 179*72fcea8cSEd Schouten struct _line **line_array; 180*72fcea8cSEd Schouten } WINDOW; 181*72fcea8cSEd Schouten 182*72fcea8cSEd Schouten extern WINDOW *curscr; 183*72fcea8cSEd Schouten extern WINDOW *stdscr; 184*72fcea8cSEd Schouten 185*72fcea8cSEd Schouten extern int LINES, COLS; 186*72fcea8cSEd Schouten 187*72fcea8cSEd Schouten #if defined(__STDC__) || defined(__cplusplus) 188*72fcea8cSEd Schouten #define P_(s) s 189*72fcea8cSEd Schouten #else 190*72fcea8cSEd Schouten #define P_(s) () 191*72fcea8cSEd Schouten #endif 192*72fcea8cSEd Schouten 193*72fcea8cSEd Schouten extern void copy_window P_((WINDOW *origin, WINDOW *destination)); 194*72fcea8cSEd Schouten extern void reinitscr P_((int)); 195*72fcea8cSEd Schouten extern void initscr P_((void)); 196*72fcea8cSEd Schouten extern int Get_int P_((void)); 197*72fcea8cSEd Schouten extern int INFO_PARSE P_((void)); 198*72fcea8cSEd Schouten extern int AtoI P_((void)); 199*72fcea8cSEd Schouten extern void Key_Get P_((void)); 200*72fcea8cSEd Schouten extern void keys_vt100 P_((void)); 201*72fcea8cSEd Schouten extern struct _line *Screenalloc P_((int columns)); 202*72fcea8cSEd Schouten extern WINDOW *newwin P_((int lines, int cols, int start_l, int start_c)); 203*72fcea8cSEd Schouten extern int Operation P_((int Temp_Stack[], int place)); 204*72fcea8cSEd Schouten extern void Info_Out P_((char *string, int p_list[], int place)); 205*72fcea8cSEd Schouten extern void wmove P_((WINDOW *window, int row, int column)); 206*72fcea8cSEd Schouten extern void clear_line P_((struct _line *line, int column, int cols)); 207*72fcea8cSEd Schouten extern void werase P_((WINDOW *window)); 208*72fcea8cSEd Schouten extern void wclrtoeol P_((WINDOW *window)); 209*72fcea8cSEd Schouten extern void wrefresh P_((WINDOW *window)); 210*72fcea8cSEd Schouten extern void touchwin P_((WINDOW *window)); 211*72fcea8cSEd Schouten extern void wnoutrefresh P_((WINDOW *window)); 212*72fcea8cSEd Schouten extern void flushinp P_((void)); 213*72fcea8cSEd Schouten extern void ungetch P_((int c)); 214*72fcea8cSEd Schouten extern int wgetch P_((WINDOW *window)); 215*72fcea8cSEd Schouten extern void Clear P_((int)); 216*72fcea8cSEd Schouten extern int Get_key P_((int first_char)); 217*72fcea8cSEd Schouten extern void waddch P_((WINDOW *window, int c)); 218*72fcea8cSEd Schouten extern void winsertln P_((WINDOW *window)); 219*72fcea8cSEd Schouten extern void wdeleteln P_((WINDOW *window)); 220*72fcea8cSEd Schouten extern void wclrtobot P_((WINDOW *window)); 221*72fcea8cSEd Schouten extern void wstandout P_((WINDOW *window)); 222*72fcea8cSEd Schouten extern void wstandend P_((WINDOW *window)); 223*72fcea8cSEd Schouten extern void waddstr P_((WINDOW *window, char *string)); 224*72fcea8cSEd Schouten extern void clearok P_((WINDOW *window, int flag)); 225*72fcea8cSEd Schouten extern void echo P_((void)); 226*72fcea8cSEd Schouten extern void noecho P_((void)); 227*72fcea8cSEd Schouten extern void raw P_((void)); 228*72fcea8cSEd Schouten extern void noraw P_((void)); 229*72fcea8cSEd Schouten extern void nl P_((void)); 230*72fcea8cSEd Schouten extern void nonl P_((void)); 231*72fcea8cSEd Schouten extern void saveterm P_((void)); 232*72fcea8cSEd Schouten extern void fixterm P_((void)); 233*72fcea8cSEd Schouten extern void resetterm P_((void)); 234*72fcea8cSEd Schouten extern void nodelay P_((WINDOW *window, int flag)); 235*72fcea8cSEd Schouten extern void idlok P_((WINDOW *window, int flag)); 236*72fcea8cSEd Schouten extern void keypad P_((WINDOW *window, int flag)); 237*72fcea8cSEd Schouten extern void savetty P_((void)); 238*72fcea8cSEd Schouten extern void resetty P_((void)); 239*72fcea8cSEd Schouten extern void endwin P_((void)); 240*72fcea8cSEd Schouten extern void delwin P_((WINDOW *window)); 241*72fcea8cSEd Schouten extern void wprintw P_((WINDOW *window, const char* format, ...)); 242*72fcea8cSEd Schouten extern void iout P_((WINDOW *window, int value)); 243*72fcea8cSEd Schouten extern int Comp_line P_((struct _line *line1, struct _line *line2)); 244*72fcea8cSEd Schouten extern struct _line *Insert_line P_((int row, int end_row, WINDOW *window)); 245*72fcea8cSEd Schouten extern struct _line *Delete_line P_((int row, int end_row, WINDOW *window)); 246*72fcea8cSEd Schouten extern void CLEAR_TO_EOL P_((WINDOW *window, int row, int column)); 247*72fcea8cSEd Schouten extern int check_delete P_((WINDOW *window, int line, int offset, struct _line *pointer_new, struct _line *pointer_old)); 248*72fcea8cSEd Schouten extern int check_insert P_((WINDOW *window, int line, int offset, struct _line *pointer_new, struct _line *pointer_old)); 249*72fcea8cSEd Schouten extern void doupdate P_((void)); 250*72fcea8cSEd Schouten extern void Position P_((WINDOW *window, int row, int col)); 251*72fcea8cSEd Schouten extern void Char_del P_((char *line, char *attrib, int offset, int maxlen)); 252*72fcea8cSEd Schouten extern void Char_ins P_((char *line, char *attrib, int newc, int newatt, int offset, int maxlen)); 253*72fcea8cSEd Schouten extern void attribute_on P_((void)); 254*72fcea8cSEd Schouten extern void attribute_off P_((void)); 255*72fcea8cSEd Schouten extern void Char_out P_((int newc, int newatt, char *line, char *attrib, int offset)); 256*72fcea8cSEd Schouten 257*72fcea8cSEd Schouten extern void nc_setattrib P_((int)); 258*72fcea8cSEd Schouten extern void nc_clearattrib P_((int)); 259*72fcea8cSEd Schouten #undef P_ 260*72fcea8cSEd Schouten 261