1 /* Copyright (c) 1998, 1999, 2001, 2002 John E. Davis 2 * This file is part of the S-Lang library. 3 * 4 * You may distribute under the terms of either the GNU General Public 5 * License or the Perl Artistic License. 6 */ 7 #include <stdio.h> 8 9 #ifndef SLANG_VERSION 10 # include <slang.h> 11 #endif 12 13 /* This is a temporary hack until lynx is fixed to not include this file. */ 14 #ifndef LYCURSES_H 15 16 typedef struct 17 { 18 unsigned int _begy, _begx, _maxy, _maxx; 19 unsigned int _curx, _cury; 20 unsigned int nrows, ncols; 21 unsigned int scroll_min, scroll_max; 22 SLsmg_Char_Type **lines; 23 SLsmg_Char_Type color; 24 int is_subwin; 25 SLtt_Char_Type attr; 26 int delay_off; 27 int scroll_ok; 28 int modified; 29 int has_box; 30 int use_keypad; 31 } 32 SLcurses_Window_Type; 33 34 extern int SLcurses_wclrtobot (SLcurses_Window_Type *); 35 extern int SLcurses_wscrl (SLcurses_Window_Type *, int); 36 extern int SLcurses_wrefresh (SLcurses_Window_Type *); 37 extern int SLcurses_delwin (SLcurses_Window_Type *); 38 extern int SLcurses_wprintw (SLcurses_Window_Type *, char *, ...); 39 extern SLcurses_Window_Type *SLcurses_newwin (unsigned int, unsigned int, 40 unsigned int, unsigned int); 41 42 extern SLcurses_Window_Type *SLcurses_subwin (SLcurses_Window_Type *, 43 unsigned int, unsigned int, 44 unsigned int, unsigned int); 45 46 extern int SLcurses_wnoutrefresh (SLcurses_Window_Type *); 47 extern int SLcurses_wclrtoeol (SLcurses_Window_Type *); 48 49 extern int SLcurses_wmove (SLcurses_Window_Type *, unsigned int, unsigned int); 50 extern int SLcurses_waddch (SLcurses_Window_Type *, SLtt_Char_Type); 51 extern int SLcurses_waddnstr (SLcurses_Window_Type *, char *, int); 52 53 #define waddnstr SLcurses_waddnstr 54 #define waddch SLcurses_waddch 55 #define waddstr(w,s) waddnstr((w),(s),-1) 56 #define addstr(x) waddstr(stdscr, (x)) 57 #define addnstr(s,n) waddnstr(stdscr,(s),(n)) 58 #define addch(ch) waddch(stdscr,(ch)) 59 60 #define mvwaddnstr(w,y,x,s,n) \ 61 (-1 == wmove((w),(y),(x)) ? -1 : waddnstr((w),(s),(n))) 62 #define mvwaddstr(w,y,x,s) \ 63 (-1 == wmove((w),(y),(x)) ? -1 : waddnstr((w),(s), -1)) 64 #define mvaddnstr(y,x,s,n) mvwaddnstr(stdscr,(y),(x),(s),(n)) 65 #define mvaddstr(y,x,s) mvwaddstr(stdscr,(y),(x),(s)) 66 #define mvwaddch(w,y,x,c) \ 67 ((-1 == wmove((w),(y),(x))) ? -1 : waddch((w),(c))) 68 #define mvaddch(y,x,c) mvwaddch(stdscr,(y),(x),(c)) 69 70 extern int SLcurses_wclear (SLcurses_Window_Type *w); 71 extern int SLcurses_printw (char *, ...); 72 73 #if 0 74 /* Why are these functions part of curses??? */ 75 extern int SLcurses_mvwscanw (SLcurses_Window_Type *, unsigned int, unsigned int, 76 char *, ...); 77 extern int SLcurses_wscanw (SLcurses_Window_Type *, char *, ...); 78 extern int SLcurses_scanw (char *, ...); 79 #define mvwscanw SLcurses_mvwscanw 80 #define wscanw SLcurses_wscanw 81 #define scanw SLcurses_scanw 82 #endif 83 84 extern SLcurses_Window_Type *SLcurses_Stdscr; 85 #define WINDOW SLcurses_Window_Type 86 #define stdscr SLcurses_Stdscr 87 88 #define subwin SLcurses_subwin 89 #define wclrtobot SLcurses_wclrtobot 90 #define wscrl SLcurses_wscrl 91 #define scrl(n) wscrl(stdscr,(n)) 92 #define scroll(w) wscrl((w),1) 93 #define wrefresh SLcurses_wrefresh 94 #define delwin SLcurses_delwin 95 #define wmove SLcurses_wmove 96 #define newwin SLcurses_newwin 97 #define wnoutrefresh SLcurses_wnoutrefresh 98 #define werase(w) SLcurses_wmove((w),0,0); SLcurses_wclrtobot(w) 99 #define wclear(w) SLcurses_wmove((w),0,0); SLcurses_wclrtobot(w) 100 #define wprintw SLcurses_wprintw 101 #define mvwprintw SLcurses_mvwprintw 102 103 #define winch(w) \ 104 ((((w)->_cury < (w)->nrows) && ((w)->_curx < (w)->ncols)) \ 105 ? ((w)->lines[(w)->_cury][(w)->_curx]) : 0) 106 107 #define inch() winch(stdscr) 108 #define mvwinch(w,x,y) \ 109 ((-1 != wmove((w),(x),(y))) ? winch(w) : (-1)) 110 #define doupdate SLsmg_refresh 111 112 #define mvwin(w,a,b) ((w)->_begy = (a), (w)->_begx = (b)) 113 114 extern int SLcurses_mvprintw (int, int, char *, ...); 115 extern int SLcurses_mvwprintw (SLcurses_Window_Type *, int, int, char *, ...); 116 extern int SLcurses_has_colors(void); 117 extern int SLcurses_nil (void); 118 extern int SLcurses_wgetch (SLcurses_Window_Type *); 119 extern int SLcurses_getch (void); 120 121 extern int SLcurses_wattrset (SLcurses_Window_Type *, SLtt_Char_Type); 122 extern int SLcurses_wattron (SLcurses_Window_Type *, SLtt_Char_Type); 123 extern int SLcurses_wattroff (SLcurses_Window_Type *, SLtt_Char_Type); 124 #define attrset(x) SLcurses_wattrset(stdscr, (x)) 125 #define attron(x) SLcurses_wattron(stdscr, (x)) 126 #define attroff(x) SLcurses_wattroff(stdscr, (x)) 127 #define wattrset(w, x) SLcurses_wattrset((w), (x)) 128 #define wattron(w, x) SLcurses_wattron((w), (x)) 129 #define wattroff(w, x) SLcurses_wattroff((w), (x)) 130 #define wattr_get(w) ((w)->color << 8) 131 #define attr_get() wattr_get(stdscr) 132 133 #define COLOR_PAIR(x) ((x) << 8) 134 135 extern int SLcurses_start_color (void); 136 #define start_color SLcurses_start_color 137 138 #define ERR 0xFFFF 139 #define wgetch SLcurses_wgetch 140 #define getch SLcurses_getch 141 142 extern int SLcurses_nodelay (SLcurses_Window_Type *, int); 143 extern SLcurses_Window_Type *SLcurses_initscr (void); 144 #define initscr SLcurses_initscr 145 146 extern int SLcurses_cbreak (void); 147 extern int SLcurses_raw (void); 148 #define cbreak SLcurses_cbreak 149 #define crmode SLcurses_cbreak 150 #define raw SLcurses_raw 151 #define noraw SLang_reset_tty 152 #define nocbreak SLang_reset_tty 153 154 #define mvprintw SLcurses_mvprintw 155 #define has_colors SLcurses_has_colors 156 #define nodelay SLcurses_nodelay 157 158 #define ungetch SLang_ungetkey 159 160 #define COLS SLtt_Screen_Cols 161 #define LINES SLtt_Screen_Rows 162 163 #define move(x,y) SLcurses_wmove(stdscr, (x), (y)) 164 #define wclrtoeol SLcurses_wclrtoeol 165 #define clrtoeol() SLcurses_wclrtoeol(stdscr) 166 #define clrtobot() SLcurses_wclrtobot(stdscr) 167 168 #define printw SLcurses_printw 169 #define mvprintw SLcurses_mvprintw 170 #define wstandout(w) SLcurses_wattrset((w),A_STANDOUT) 171 #define wstandend(w) SLcurses_wattrset((w),A_NORMAL) 172 #define standout() SLcurses_wattrset(stdscr,A_STANDOUT) 173 #define standend() SLcurses_wattrset(stdscr,A_NORMAL) 174 175 #define refresh() SLcurses_wrefresh(stdscr) 176 #define clear() SLcurses_wclear(stdscr) 177 #define erase() werase(stdscr) 178 #define touchline SLsmg_touch_lines 179 #define resetterm SLang_reset_tty 180 181 extern int SLcurses_endwin (void); 182 #define endwin SLcurses_endwin 183 extern int SLcurses_Is_Endwin; 184 #define isendwin() SLcurses_Is_Endwin 185 186 #define keypad(w,x) ((w)->use_keypad = (x)) 187 188 #define KEY_MIN SL_KEY_UP 189 #define KEY_DOWN SL_KEY_DOWN 190 #define KEY_UP SL_KEY_UP 191 #define KEY_LEFT SL_KEY_LEFT 192 #define KEY_RIGHT SL_KEY_RIGHT 193 #define KEY_A1 SL_KEY_A1 194 #define KEY_B1 SL_KEY_B1 195 #define KEY_C1 SL_KEY_C1 196 #define KEY_A2 SL_KEY_A2 197 #define KEY_B2 SL_KEY_B2 198 #define KEY_C2 SL_KEY_C2 199 #define KEY_A3 SL_KEY_A3 200 #define KEY_B3 SL_KEY_B3 201 #define KEY_C3 SL_KEY_C3 202 #define KEY_REDO SL_KEY_REDO 203 #define KEY_UNDO SL_KEY_UNDO 204 #define KEY_BACKSPACE SL_KEY_BACKSPACE 205 #define KEY_PPAGE SL_KEY_PPAGE 206 #define KEY_NPAGE SL_KEY_NPAGE 207 #define KEY_HOME SL_KEY_HOME 208 #define KEY_END SL_KEY_END 209 #define KEY_F0 SL_KEY_F0 210 #define KEY_F SL_KEY_F 211 #define KEY_ENTER SL_KEY_ENTER 212 #define KEY_MAX 0xFFFF 213 214 /* Ugly Hacks that may not work */ 215 #define flushinp SLcurses_nil 216 #define winsertln(w) \ 217 ((w)->scroll_min=(w)->_cury, \ 218 (w)->scroll_max=(w)->nrows, \ 219 wscrl((w), -1)) 220 221 extern SLtt_Char_Type SLcurses_Acs_Map [128]; 222 #define acs_map SLcurses_Acs_Map 223 224 #define ACS_ULCORNER (acs_map[SLSMG_ULCORN_CHAR]) 225 #define ACS_URCORNER (acs_map[SLSMG_URCORN_CHAR]) 226 #define ACS_LRCORNER (acs_map[SLSMG_LRCORN_CHAR]) 227 #define ACS_LLCORNER (acs_map[SLSMG_LLCORN_CHAR]) 228 #define ACS_TTEE (acs_map[SLSMG_UTEE_CHAR]) 229 #define ACS_LTEE (acs_map[SLSMG_LTEE_CHAR]) 230 #define ACS_RTEE (acs_map[SLSMG_RTEE_CHAR]) 231 #define ACS_BTEE (acs_map[SLSMG_DTEE_CHAR]) 232 #define ACS_PLUS (acs_map[SLSMG_PLUS_CHAR]) 233 #define ACS_VLINE (acs_map[SLSMG_VLINE_CHAR]) 234 #define ACS_HLINE (acs_map[SLSMG_HLINE_CHAR]) 235 #define ACS_S1 '-' 236 #define ACS_S9 '-' 237 #define ACS_DIAMOND '&' 238 #define ACS_CKBOARD (acs_map[SLSMG_CKBRD_CHAR]) 239 #define ACS_DEGREE 'o' 240 #define ACS_PLMINUS '+' 241 #define ACS_BULLET '*' 242 #define ACS_LARROW '<' 243 #define ACS_RARROW '>' 244 #define ACS_DARROW 'v' 245 #define ACS_UARROW '^' 246 #define ACS_BOARD '#' 247 #define ACS_LANTERN '#' 248 #define ACS_BLOCK '#' 249 250 #if 1 251 #define hline(x,y) SLcurses_nil () 252 #define vline(x,y) SLcurses_nil () 253 #endif 254 255 #define A_CHARTEXT 0x00FF 256 #define A_NORMAL 0 257 #define A_BOLD 0x1000 258 #define A_REVERSE 0x2000 259 #define A_STANDOUT A_REVERSE 260 #define A_UNDERLINE 0x4000 261 #define A_BLINK 0 262 #define A_COLOR 0x0700 263 #define A_ALTCHARSET 0x8000 264 #define A_DIM 0 265 #define A_PROTECT 0 266 #define A_INVIS 0 267 268 #define COLOR_BLACK SLSMG_COLOR_BLACK 269 #define COLOR_RED SLSMG_COLOR_RED 270 #define COLOR_GREEN SLSMG_COLOR_GREEN 271 #define COLOR_YELLOW SLSMG_COLOR_BROWN 272 #define COLOR_BLUE SLSMG_COLOR_BLUE 273 #define COLOR_MAGENTA SLSMG_COLOR_MAGENTA 274 #define COLOR_CYAN SLSMG_COLOR_CYAN 275 #define COLOR_WHITE SLSMG_COLOR_LGRAY 276 277 extern int SLcurses_Num_Colors; 278 #define COLORS SLcurses_Num_Colors 279 #define COLOR_PAIRS (SLcurses_Num_Colors*SLcurses_Num_Colors) 280 281 #define init_pair(_x,_f,_b) \ 282 SLtt_set_color_object((_x), ((_f) == (_b) ? 0x0700 : ((_f) | ((_b) << 8)) << 8)) 283 284 #define scrollok(a,b) ((a)->scroll_ok = (b)) 285 #define getyx(a,y,x) (y=(a)->_cury, x=(a)->_curx) 286 #define getmaxyx(a,y,x) (y=(a)->nrows, x=(a)->ncols) 287 #ifdef napms 288 # undef napms 289 #endif 290 #define napms(x) usleep(1000 * (x)) 291 typedef SLtt_Char_Type chtype; 292 #define beep SLtt_beep 293 #define curs_set(x) SLtt_set_cursor_visibility(x) 294 #define touchwin(x) SLsmg_touch_lines((x)->_begy, (x)->nrows) 295 #define flash SLtt_beep 296 297 #define wsetscrreg(w,a,b) ((w)->scroll_min = (a), (w)->scroll_max = (b)) 298 299 #define wtimeout(a,b) (a)->delay_off = ((b >= 0) ? (b) / 100 : -1) 300 #define timeout(a) wtimeout(stdscr, a) 301 extern int SLcurses_wdelch (SLcurses_Window_Type *); 302 #if SLANG_HAS_KANJI_SUPPORT 303 extern int kSLcurses_wdelch (SLcurses_Window_Type *); 304 #endif 305 # define wdelch SLcurses_wdelch 306 #define delch() wdelch(stdscr) 307 308 extern int SLcurses_winsch (SLcurses_Window_Type *, int); 309 #define winsch SLcurses_winsch 310 311 extern int SLcurses_Esc_Delay;/* ESC expire time in milliseconds (ncurses compatible) */ 312 #define ESCDELAY SLcurses_Esc_Delay 313 314 extern int SLcurses_clearok (SLcurses_Window_Type *, int); 315 #define clearok SLcurses_clearok 316 317 /* Functions that have not been implemented. */ 318 #define copywin(w,v,a,b,c,d,e,f,g) SLcurses_nil() 319 #define wdeleteln(win) SLcurses_nil() 320 #define resetty SLcurses_nil 321 #define savetty SLcurses_nil 322 #define overlay(u,v) SLcurses_nil() 323 324 /* These functions do nothing */ 325 #define savetty SLcurses_nil 326 #define nonl SLcurses_nil 327 #define echo SLcurses_nil 328 #define noecho SLcurses_nil 329 #define saveterm SLcurses_nil 330 #define box(w,y,z) ((w)->has_box = 1, (w)->modified = 1) 331 #define leaveok(a,b) SLcurses_nil() 332 #define nl() SLcurses_nil() 333 #define trace(x) SLcurses_nil() 334 #define tigetstr(x) NULL 335 336 /* These have no place in C */ 337 #define TRUE 1 338 #define FALSE 0 339 #define bool int 340 341 /* Lynx compatability */ 342 #else 343 344 #define stdscr NULL 345 #define COLS SLtt_Screen_Cols 346 #define LINES SLtt_Screen_Rows 347 #define move SLsmg_gotorc 348 #define addstr SLsmg_write_string 349 #define clear SLsmg_cls 350 #define standout SLsmg_reverse_video 351 #define standend SLsmg_normal_video 352 #define clrtoeol SLsmg_erase_eol 353 #define scrollok(a,b) SLsmg_Newline_Moves = ((b) ? 1 : -1) 354 #define addch SLsmg_write_char 355 #define echo() 356 #define printw SLsmg_printf 357 #define endwin SLsmg_reset_smg(),SLang_reset_tty 358 359 #endif 360