1192830Sed/* 2192830Sed | new_curse.h 3192830Sed | 4192830Sed | A subset of curses developed for use with ae. 5192830Sed | 6192830Sed | written by Hugh Mahon 7192830Sed | 8192830Sed | THIS MATERIAL IS PROVIDED "AS IS". THERE ARE 9192830Sed | NO WARRANTIES OF ANY KIND WITH REGARD TO THIS 10192830Sed | MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE 11192830Sed | IMPLIED WARRANTIES OF MERCHANTABILITY AND 12192830Sed | FITNESS FOR A PARTICULAR PURPOSE. Neither 13192830Sed | Hewlett-Packard nor Hugh Mahon shall be liable 14192830Sed | for errors contained herein, nor for 15192830Sed | incidental or consequential damages in 16192830Sed | connection with the furnishing, performance or 17192830Sed | use of this material. Neither Hewlett-Packard 18192830Sed | nor Hugh Mahon assumes any responsibility for 19192830Sed | the use or reliability of this software or 20192830Sed | documentation. This software and 21192830Sed | documentation is totally UNSUPPORTED. There 22192830Sed | is no support contract available. Hewlett- 23192830Sed | Packard has done NO Quality Assurance on ANY 24192830Sed | of the program or documentation. You may find 25192830Sed | the quality of the materials inferior to 26192830Sed | supported materials. 27192830Sed | 28192830Sed | This software is not a product of Hewlett-Packard, Co., or any 29192830Sed | other company. No support is implied or offered with this software. 30192830Sed | You've got the source, and you're on your own. 31192830Sed | 32192830Sed | This software may be distributed under the terms of Larry Wall's 33192830Sed | Artistic license, a copy of which is included in this distribution. 34192830Sed | 35192830Sed | This notice must be included with this software and any derivatives. 36192830Sed | 37192830Sed | Copyright (c) 1986, 1987, 1988, 1991, 1995 Hugh Mahon 38192830Sed | All are rights reserved. 39192830Sed | 40192830Sed */ 41192830Sed 42192830Sed#include <stdio.h> 43192830Sed 44192830Sed#ifdef SYS5 45192830Sed#include <termio.h> 46192830Sed#else 47192830Sed#include <sgtty.h> 48192830Sed#include <fcntl.h> 49192830Sed#endif 50192830Sed 51192830Sed#define KEY_BREAK 0401 52192830Sed#define KEY_DOWN 0402 53192830Sed#define KEY_UP 0403 54192830Sed#define KEY_LEFT 0404 55192830Sed#define KEY_RIGHT 0405 56192830Sed#define KEY_HOME 0406 57192830Sed#define KEY_BACKSPACE 0407 58192830Sed#define KEY_F0 0410 59192830Sed#define KEY_F(n) (KEY_F0+(n)) 60192830Sed#define KEY_DL 0510 61192830Sed#define KEY_IL 0511 62192830Sed#define KEY_DC 0512 63192830Sed#define KEY_IC 0513 64192830Sed#define KEY_EIC 0514 65192830Sed#define KEY_CLEAR 0515 66192830Sed#define KEY_EOS 0516 67192830Sed#define KEY_EOL 0517 68192830Sed#define KEY_SF 0520 69192830Sed#define KEY_SR 0521 70192830Sed#define KEY_NPAGE 0522 71192830Sed#define KEY_PPAGE 0523 72192830Sed#define KEY_STAB 0524 73192830Sed#define KEY_CTAB 0525 74192830Sed#define KEY_CATAB 0526 75192830Sed#define KEY_ENTER 0527 76192830Sed#define KEY_SRESET 0530 77192830Sed#define KEY_RESET 0531 78192830Sed#define KEY_PRINT 0532 79192830Sed#define KEY_LL 0533 80192830Sed#define KEY_A1 0534 81192830Sed#define KEY_A3 0535 82192830Sed#define KEY_B2 0536 83192830Sed#define KEY_C1 0537 84192830Sed#define KEY_C3 0540 85192830Sed#define KEY_BTAB 0541 86192830Sed#define KEY_BEG 0542 87192830Sed#define KEY_CANCEL 0543 88192830Sed#define KEY_CLOSE 0544 89192830Sed#define KEY_COMMAND 0545 90192830Sed#define KEY_COPY 0546 91192830Sed#define KEY_CREATE 0547 92192830Sed#define KEY_END 0550 93192830Sed#define KEY_EXIT 0551 94192830Sed#define KEY_FIND 0552 95192830Sed#define KEY_HELP 0553 96192830Sed#define KEY_MARK 0554 97192830Sed#define KEY_MESSAGE 0555 98192830Sed#define KEY_MOVE 0556 99192830Sed#define KEY_NEXT 0557 100192830Sed#define KEY_OPEN 0560 101192830Sed#define KEY_OPTIONS 0561 102192830Sed#define KEY_PREVIOUS 0562 103192830Sed#define KEY_REDO 0563 104192830Sed#define KEY_REFERENCE 0564 105192830Sed#define KEY_REFRESH 0565 106192830Sed#define KEY_REPLACE 0566 107192830Sed#define KEY_RESTART 0567 108192830Sed#define KEY_RESUME 0570 109192830Sed#define KEY_SAVE 0571 110192830Sed#define KEY_SBEG 0572 111192830Sed#define KEY_SCANCEL 0573 112192830Sed#define KEY_SCOMMAND 0574 113192830Sed#define KEY_SCOPY 0575 114192830Sed#define KEY_SCREATE 0576 115192830Sed#define KEY_SDC 0577 116192830Sed#define KEY_SDL 0600 117192830Sed#define KEY_SELECT 0601 118192830Sed#define KEY_SEND 0602 119192830Sed#define KEY_SEOL 0603 120192830Sed#define KEY_SEXIT 0604 121192830Sed#define KEY_SFIND 0605 122192830Sed#define KEY_SHELP 0606 123192830Sed#define KEY_SHOME 0607 124192830Sed#define KEY_SIC 0610 125192830Sed#define KEY_SLEFT 0611 126192830Sed#define KEY_SMESSAGE 0612 127192830Sed#define KEY_SMOVE 0613 128192830Sed#define KEY_SNEXT 0614 129192830Sed#define KEY_SOPTIONS 0615 130192830Sed#define KEY_SPREVIOUS 0616 131192830Sed#define KEY_SPRINT 0617 132192830Sed#define KEY_SREDO 0620 133192830Sed#define KEY_SREPLACE 0621 134192830Sed#define KEY_SRIGHT 0622 135192830Sed#define KEY_SRSUME 0623 136192830Sed#define KEY_SSAVE 0624 137192830Sed#define KEY_SSUSPEND 0625 138192830Sed#define KEY_SUNDO 0626 139192830Sed#define KEY_SUSPEND 0627 140192830Sed#define KEY_UNDO 0630 141192830Sed 142192830Sed#define TRUE 1 143192830Sed#define FALSE 0 144192830Sed 145192830Sed#define A_STANDOUT 0001 /* standout mode */ 146192830Sed#define A_NC_BIG5 0x0100 /* Handle Chinese Big5 characters */ 147192830Sed#define SCROLL 1 /* text has been scrolled */ 148192830Sed#define CLEAR 2 /* window has been cleared */ 149192830Sed#define CHANGE 3 /* window has been changed */ 150192830Sed#define UP 1 /* direction of scroll */ 151192830Sed#define DOWN 2 152192830Sed 153192830Sedstruct _line { 154192830Sed struct _line *next_screen; 155192830Sed struct _line *prev_screen; 156192830Sed char *row; 157192830Sed char *attributes; 158192830Sed int last_char; 159192830Sed int changed; 160192830Sed int scroll; 161192830Sed int number; 162192830Sed }; 163192830Sed 164192830Sedstruct _line *top_of_win; 165192830Sed 166192830Sedtypedef struct WIND { 167192830Sed int SR; /* starting row */ 168192830Sed int SC; /* starting column */ 169192830Sed int LC; /* last column */ 170192830Sed int LX; /* last cursor column position */ 171192830Sed int LY; /* last cursor row position */ 172192830Sed int Attrib; /* attributes active in window */ 173192830Sed int Num_lines; /* number of lines */ 174192830Sed int Num_cols; /* number of columns */ 175192830Sed int scroll_up; /* number of lines moved */ 176192830Sed int scroll_down; 177192830Sed int SCROLL_CLEAR; /* indicates that window has been scrolled or cleared */ 178192830Sed struct _line *first_line; 179192830Sed struct _line **line_array; 180192830Sed } WINDOW; 181192830Sed 182192830Sedextern WINDOW *curscr; 183192830Sedextern WINDOW *stdscr; 184192830Sed 185192830Sedextern int LINES, COLS; 186192830Sed 187192830Sed#if defined(__STDC__) || defined(__cplusplus) 188192830Sed#define P_(s) s 189192830Sed#else 190192830Sed#define P_(s) () 191192830Sed#endif 192192830Sed 193192830Sedextern void copy_window P_((WINDOW *origin, WINDOW *destination)); 194192830Sedextern void reinitscr P_((int)); 195192830Sedextern void initscr P_((void)); 196192830Sedextern int Get_int P_((void)); 197192830Sedextern int INFO_PARSE P_((void)); 198192830Sedextern int AtoI P_((void)); 199192830Sedextern void Key_Get P_((void)); 200192830Sedextern void keys_vt100 P_((void)); 201192830Sedextern struct _line *Screenalloc P_((int columns)); 202192830Sedextern WINDOW *newwin P_((int lines, int cols, int start_l, int start_c)); 203192830Sedextern int Operation P_((int Temp_Stack[], int place)); 204192830Sedextern void Info_Out P_((char *string, int p_list[], int place)); 205192830Sedextern void wmove P_((WINDOW *window, int row, int column)); 206192830Sedextern void clear_line P_((struct _line *line, int column, int cols)); 207192830Sedextern void werase P_((WINDOW *window)); 208192830Sedextern void wclrtoeol P_((WINDOW *window)); 209192830Sedextern void wrefresh P_((WINDOW *window)); 210192830Sedextern void touchwin P_((WINDOW *window)); 211192830Sedextern void wnoutrefresh P_((WINDOW *window)); 212192830Sedextern void flushinp P_((void)); 213192830Sedextern void ungetch P_((int c)); 214192830Sedextern int wgetch P_((WINDOW *window)); 215192830Sedextern void Clear P_((int)); 216192830Sedextern int Get_key P_((int first_char)); 217192830Sedextern void waddch P_((WINDOW *window, int c)); 218192830Sedextern void winsertln P_((WINDOW *window)); 219192830Sedextern void wdeleteln P_((WINDOW *window)); 220192830Sedextern void wclrtobot P_((WINDOW *window)); 221192830Sedextern void wstandout P_((WINDOW *window)); 222192830Sedextern void wstandend P_((WINDOW *window)); 223192830Sedextern void waddstr P_((WINDOW *window, char *string)); 224192830Sedextern void clearok P_((WINDOW *window, int flag)); 225192830Sedextern void echo P_((void)); 226192830Sedextern void noecho P_((void)); 227192830Sedextern void raw P_((void)); 228192830Sedextern void noraw P_((void)); 229192830Sedextern void nl P_((void)); 230192830Sedextern void nonl P_((void)); 231192830Sedextern void saveterm P_((void)); 232192830Sedextern void fixterm P_((void)); 233192830Sedextern void resetterm P_((void)); 234192830Sedextern void nodelay P_((WINDOW *window, int flag)); 235192830Sedextern void idlok P_((WINDOW *window, int flag)); 236192830Sedextern void keypad P_((WINDOW *window, int flag)); 237192830Sedextern void savetty P_((void)); 238192830Sedextern void resetty P_((void)); 239192830Sedextern void endwin P_((void)); 240192830Sedextern void delwin P_((WINDOW *window)); 241192830Sedextern void wprintw P_((WINDOW *window, const char* format, ...)); 242192830Sedextern void iout P_((WINDOW *window, int value)); 243192830Sedextern int Comp_line P_((struct _line *line1, struct _line *line2)); 244192830Sedextern struct _line *Insert_line P_((int row, int end_row, WINDOW *window)); 245192830Sedextern struct _line *Delete_line P_((int row, int end_row, WINDOW *window)); 246192830Sedextern void CLEAR_TO_EOL P_((WINDOW *window, int row, int column)); 247192830Sedextern int check_delete P_((WINDOW *window, int line, int offset, struct _line *pointer_new, struct _line *pointer_old)); 248192830Sedextern int check_insert P_((WINDOW *window, int line, int offset, struct _line *pointer_new, struct _line *pointer_old)); 249192830Sedextern void doupdate P_((void)); 250192830Sedextern void Position P_((WINDOW *window, int row, int col)); 251192830Sedextern void Char_del P_((char *line, char *attrib, int offset, int maxlen)); 252192830Sedextern void Char_ins P_((char *line, char *attrib, int newc, int newatt, int offset, int maxlen)); 253192830Sedextern void attribute_on P_((void)); 254192830Sedextern void attribute_off P_((void)); 255192830Sedextern void Char_out P_((int newc, int newatt, char *line, char *attrib, int offset)); 256192830Sed 257192830Sedextern void nc_setattrib P_((int)); 258192830Sedextern void nc_clearattrib P_((int)); 259192830Sed#undef P_ 260192830Sed 261