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