File: termx.h

package info (click to toggle)
epic5 3.0.3-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 5,328 kB
  • sloc: ansic: 75,810; makefile: 648; ruby: 227; python: 215; sh: 78; perl: 13
file content (642 lines) | stat: -rw-r--r-- 38,726 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
/*
 * term.h: header file for term.c 
 *
 * Copyright 1990 Michael Sandrof
 * Copyright 1997 EPIC Software Labs
 * Copyright 1998 J. Kean Johnston
 * See the COPYRIGHT file, or do a HELP IRCII COPYRIGHT 
 */

#ifndef __term_h__
#define __term_h__

/* To get declaration of "output_screen" */
#include "screen.h"

extern	volatile sig_atomic_t	need_redraw;
extern	int	meta_mode;

/* 
 * This puts a character to the current target, whatever it is. 
 * All output everywhere should go through this.
 * This does not mangle its output, so its suitable for outputting
 * escape sequences.
 */
#if !defined(WTERM_C) && !defined(WSERV_C)
#define current_ftarget (output_screen >= 0 && get_screen_fpout(output_screen) ? get_screen_fpout(output_screen) : stdout)

# ifdef __need_putchar_x__
__inline__ static int putchar_x (int c) { 
	return fputc((int) c, current_ftarget );
}
# endif

# ifdef __need_term_flush__
__inline__ static void term_flush (void) { 
	fflush( current_ftarget ); 
}
# endif
#endif

#define	TERM_SGR_BOLD_ON	1
#define TERM_SGR_BOLD_OFF	2
#define TERM_SGR_BLINK_ON	3
#define TERM_SGR_BLINK_OFF	4
#define TERM_SGR_UNDL_ON	5
#define TERM_SGR_UNDL_OFF	6
#define TERM_SGR_REV_ON		7
#define TERM_SGR_REV_OFF	8
#define TERM_SGR_NORMAL		9
#define TERM_SGR_RESET		10
#define TERM_SGR_FOREGROUND	11
#define TERM_SGR_BACKGROUND	12
#define TERM_SGR_GCHAR		13
#define TERM_SGR_ALTCHAR_ON	14
#define TERM_SGR_ALTCHAR_OFF	15
#define TERM_SGR_ITALIC_ON	16
#define TERM_SGR_ITALIC_OFF	17
#define TERM_SGR_MAXVAL		18

#define TERM_CAN_CUP		(1 << 0)
#define TERM_CAN_CLEAR		(1 << 1)
#define TERM_CAN_CLREOL		(1 << 2)
#define TERM_CAN_RIGHT		(1 << 3)
#define TERM_CAN_LEFT		(1 << 4)
#define TERM_CAN_SCROLL		(1 << 5)
#define TERM_CAN_DELETE		(1 << 6)
#define TERM_CAN_INSERT		(1 << 7)
#define TERM_CAN_DELLINES	(1 << 8)
#define TERM_CAN_INSLINES	(1 << 9)
#define TERM_CAN_REPEAT		(1 << 10)
#define TERM_CAN_BOLD		(1 << 11)
#define TERM_CAN_BLINK		(1 << 12)
#define TERM_CAN_UNDL		(1 << 13)
#define TERM_CAN_REVERSE	(1 << 14)
#define TERM_CAN_COLOR		(1 << 15)
#define TERM_CAN_GCHAR		(1 << 16)

extern	int	termfeatures;
extern	struct	my_term	*current_term;

/*      Our variable name   Cap / Info      Description */
struct my_term {
	int TI_bw;	 /* bw  / bw        cub1 wraps from column 0 to last column */
	int TI_am;	 /* am  / am        terminal has automatic margins */
	int TI_xsb;	 /* xb  / xsb       beehive (f1=escape, f2=ctrl C) */
	int TI_xhp;	 /* xs  / xhp       standout not erased by overwriting (hp) */
	int TI_xenl;	 /* xn  / xenl      newline ignored after 80 cols (concept) */
	int TI_eo;	 /* eo  / eo        can erase overstrikes with a blank */
	int TI_gn;	 /* gn  / gn        generic line type */
	int TI_hc;	 /* hc  / hc        hardcopy terminal */
	int TI_km;	 /* km  / km        Has a meta key (shift, sets parity bit) */
	int TI_hs;	 /* hs  / hs        has extra status line */
	int TI_in;	 /* in  / in        insert mode distinguishes nulls */
	int TI_da;	 /* da  / da        display may be retained above the screen */
	int TI_db;	 /* db  / db        display may be retained below the screen */
	int TI_mir;	 /* mi  / mir       safe to move while in insert mode */
	int TI_msgr;	 /* ms  / msgr      safe to move while in standout mode */
	int TI_os;	 /* os  / os        terminal can overstrike */
	int TI_eslok;	 /* es  / eslok     escape can be used on the status line */
	int TI_xt;	 /* xt  / xt        tabs destructive, magic so char (t1061) */
	int TI_hz;	 /* hz  / hz        can't print ~'s (hazeltine) */
	int TI_ul;	 /* ul  / ul        underline character overstrikes */
	int TI_xon;	 /* xo  / xon       terminal uses xon/xoff handshaking */
	int TI_nxon;	 /* nx  / nxon      padding won't work, xon/xoff required */
	int TI_mc5i;	 /* 5i  / mc5i      printer won't echo on screen */
	int TI_chts;	 /* HC  / chts      cursor is hard to see */
	int TI_nrrmc;	 /* NR  / nrrmc     smcup does not reverse rmcup */
	int TI_npc;	 /* NP  / npc       pad character does not exist */
	int TI_ndscr;	 /* ND  / ndscr     scrolling region is non-destructive */
	int TI_ccc;	 /* cc  / ccc       terminal can re-define existing colors */
	int TI_bce;	 /* ut  / bce       screen erased with background color */
	int TI_hls;	 /* hl  / hls       terminal uses only HLS color notation (Tektronix) */
	int TI_xhpa;	 /* YA  / xhpa      only positive motion for hpa/mhpa caps */
	int TI_crxm;	 /* YB  / crxm      using cr turns off micro mode */
	int TI_daisy;	 /* YC  / daisy     printer needs operator to change character set */
	int TI_xvpa;	 /* YD  / xvpa      only positive motion for vpa/mvpa caps */
	int TI_sam;	 /* YE  / sam       printing in last column causes cr */
	int TI_cpix;	 /* YF  / cpix      changing character pitch changes resolution */
	int TI_lpix;	 /* YG  / lpix      changing line pitch changes resolution */
	int TI_cols;	 /* co  / cols      number of columns in a line */
	int TI_it;	 /* it  / it        tabs initially every # spaces */
	int TI_lines;	 /* li  / lines     number of lines on screen or page */
	int TI_lm;	 /* lm  / lm        lines of memory if > line. 0 means varies */
	int TI_xmc;	 /* sg  / xmc       number of blank characters left by smso or rmso */
	int TI_pb;	 /* pb  / pb        lowest baud rate where padding needed */
	int TI_vt;	 /* vt  / vt        virtual terminal number (CB/unix) */
	int TI_wsl;	 /* ws  / wsl       number of columns in status line */
	int TI_nlab;	 /* Nl  / nlab      number of labels on screen */
	int TI_lh;	 /* lh  / lh        rows in each label */
	int TI_lw;	 /* lw  / lw        columns in each label */
	int TI_ma;	 /* ma  / ma        maximum combined attributes terminal can handle */
	int TI_wnum;	 /* MW  / wnum      maximum number of defineable windows */
	int TI_colors;	 /* Co  / colors    maximum number of colors on screen */
	int TI_pairs;	 /* pa  / pairs     maximum number of color-pairs on the screen */
	int TI_ncv;	 /* NC  / ncv       video attributes that can't be used with colors */
	int TI_bufsz;	 /* Ya  / bufsz     numbers of bytes buffered before printing */
	int TI_spinv;	 /* Yb  / spinv     spacing of pins vertically in pins per inch */
	int TI_spinh;	 /* Yc  / spinh     spacing of dots horizontally in dots per inch */
	int TI_maddr;	 /* Yd  / maddr     maximum value in micro_..._address */
	int TI_mjump;	 /* Ye  / mjump     maximum value in parm_..._micro */
	int TI_mcs;	 /* Yf  / mcs       character step size when in micro mode */
	int TI_mls;	 /* Yg  / mls       line step size when in micro mode */
	int TI_npins;	 /* Yh  / npins     numbers of pins in print-head */
	int TI_orc;	 /* Yi  / orc       horizontal resolution in units per line */
	int TI_orl;	 /* Yj  / orl       vertical resolution in units per line */
	int TI_orhi;	 /* Yk  / orhi      horizontal resolution in units per inch */
	int TI_orvi;	 /* Yl  / orvi      vertical resolution in units per inch */
	int TI_cps;	 /* Ym  / cps       print rate in characters per second */
	int TI_widcs;	 /* Yn  / widcs     character step size when in double wide mode */
	int TI_btns;	 /* BT  / btns      number of buttons on mouse */
	int TI_bitwin;	 /* Yo  / bitwin    number of passes for each bit-image row */
	int TI_bitype;	 /* Yp  / bitype    type of bit-image device */
	const char *TI_cbt;	 /* bt  / cbt       back tab (P) */
	const char *TI_bel;	 /* bl  / bel       audible signal (bell) (P) */
	const char *TI_cr;	 /* cr  / cr        carriage return (P*) (P*) */
	const char *TI_csr;	 /* cs  / csr       change region to line #1 to line #2 (P) */
	const char *TI_tbc;	 /* ct  / tbc       clear all tab stops (P) */
	const char *TI_clear;	 /* cl  / clear     clear screen and home cursor (P*) */
	const char *TI_el;	 /* ce  / el        clear to end of line (P) */
	const char *TI_ed;	 /* cd  / ed        clear to end of screen (P*) */
	const char *TI_hpa;	 /* ch  / hpa       horizontal position #1, absolute (P) */
	const char *TI_cmdch;	 /* CC  / cmdch     terminal settable cmd character in prototype !? */
	const char *TI_cup;	 /* cm  / cup       move to row #1 columns #2 */
	const char *TI_cud1;	 /* do  / cud1      down one line */
	const char *TI_home;	 /* ho  / home      home cursor (if no cup) */
	const char *TI_civis;	 /* vi  / civis     make cursor invisible */
	const char *TI_cub1;	 /* le  / cub1      move left one space */
	const char *TI_mrcup;	 /* CM  / mrcup     memory relative cursor addressing */
	const char *TI_cnorm;	 /* ve  / cnorm     make cursor appear normal (undo civis/cvvis) */
	const char *TI_cuf1;	 /* nd  / cuf1      non-destructive space (move right one space) */
	const char *TI_ll;	 /* ll  / ll        last line, first column (if no cup) */
	const char *TI_cuu1;	 /* up  / cuu1      up one line */
	const char *TI_cvvis;	 /* vs  / cvvis     make cursor very visible */
	const char *TI_dch1;	 /* dc  / dch1      delete character (P*) */
	const char *TI_dl1;	 /* dl  / dl1       delete line (P*) */
	const char *TI_dsl;	 /* ds  / dsl       disable status line */
	const char *TI_hd;	 /* hd  / hd        half a line down */
	const char *TI_smacs;	 /* as  / smacs     start alternate character set (P) */
	const char *TI_blink;	 /* mb  / blink     turn on blinking */
	const char *TI_bold;	 /* md  / bold      turn on bold (extra bright) mode */
	const char *TI_smcup;	 /* ti  / smcup     string to start programs using cup */
	const char *TI_smdc;	 /* dm  / smdc      enter delete mode */
	const char *TI_dim;	 /* mh  / dim       turn on half-bright mode */
	const char *TI_smir;	 /* im  / smir      enter insert mode */
	const char *TI_invis;	 /* mk  / invis     turn on blank mode (characters invisible) */
	const char *TI_prot;	 /* mp  / prot      turn on protected mode */
	const char *TI_rev;	 /* mr  / rev       turn on reverse video mode */
	const char *TI_smso;	 /* so  / smso      begin standout mode */
	const char *TI_smul;	 /* us  / smul      begin underline mode */
	const char *TI_ech;	 /* ec  / ech       erase #1 characters (P) */
	const char *TI_rmacs;	 /* ae  / rmacs     end alternate character set (P) */
	const char *TI_sgr0;	 /* me  / sgr0      turn off all attributes */
	const char *TI_rmcup;	 /* te  / rmcup     strings to end programs using cup */
	const char *TI_rmdc;	 /* ed  / rmdc      end delete mode */
	const char *TI_rmir;	 /* ei  / rmir      exit insert mode */
	const char *TI_rmso;	 /* se  / rmso      exit standout mode */
	const char *TI_rmul;	 /* ue  / rmul      exit underline mode */
	const char *TI_flash;	 /* vb  / flash     visible bell (may not move cursor) */
	const char *TI_ff;	 /* ff  / ff        hardcopy terminal page eject (P*) */
	const char *TI_fsl;	 /* fs  / fsl       return from status line */
	const char *TI_is1;	 /* i1  / is1       initialization string */
	const char *TI_is2;	 /* is  / is2       initialization string */
	const char *TI_is3;	 /* i3  / is3       initialization string */
	const char *TI_if;	 /* if  / if        name of initialization file */
	const char *TI_ich1;	 /* ic  / ich1      insert character (P) */
	const char *TI_il1;	 /* al  / il1       insert line (P*) */
	const char *TI_ip;	 /* ip  / ip        insert padding after inserted character */
	const char *TI_kbs;	 /* kb  / kbs       backspace key */
	const char *TI_ktbc;	 /* ka  / ktbc      clear-all-tabs key */
	const char *TI_kclr;	 /* kC  / kclr      clear-screen or erase key */
	const char *TI_kctab;	 /* kt  / kctab     clear-tab key */
	const char *TI_kdch1;	 /* kD  / kdch1     delete-character key */
	const char *TI_kdl1;	 /* kL  / kdl1      delete-line key */
	const char *TI_kcud1;	 /* kd  / kcud1     down-arrow key */
	const char *TI_krmir;	 /* kM  / krmir     sent by rmir or smir in insert mode */
	const char *TI_kel;	 /* kE  / kel       clear-to-end-of-line key */
	const char *TI_ked;	 /* kS  / ked       clear-to-end-of-screen key */
	const char *TI_kf0;	 /* k0  / kf0       F0 function key */
	const char *TI_kf1;	 /* k1  / kf1       F1 function key */
	const char *TI_kf10;	 /* k;  / kf10      F10 function key */
	const char *TI_kf2;	 /* k2  / kf2       F2 function key */
	const char *TI_kf3;	 /* k3  / kf3       F3 function key */
	const char *TI_kf4;	 /* k4  / kf4       F4 function key */
	const char *TI_kf5;	 /* k5  / kf5       F5 function key */
	const char *TI_kf6;	 /* k6  / kf6       F6 function key */
	const char *TI_kf7;	 /* k7  / kf7       F7 function key */
	const char *TI_kf8;	 /* k8  / kf8       F8 function key */
	const char *TI_kf9;	 /* k9  / kf9       F9 function key */
	const char *TI_khome;	 /* kh  / khome     home key */
	const char *TI_kich1;	 /* kI  / kich1     insert-character key */
	const char *TI_kil1;	 /* kA  / kil1      insert-line key */
	const char *TI_kcub1;	 /* kl  / kcub1     left-arrow key */
	const char *TI_kll;	 /* kH  / kll       lower-left key (home down) */
	const char *TI_knp;	 /* kN  / knp       next-page key */
	const char *TI_kpp;	 /* kP  / kpp       previous-page key */
	const char *TI_kcuf1;	 /* kr  / kcuf1     right-arrow key */
	const char *TI_kind;	 /* kF  / kind      scroll-forward key */
	const char *TI_kri;	 /* kR  / kri       scroll-backward key */
	const char *TI_khts;	 /* kT  / khts      set-tab key */
	const char *TI_kcuu1;	 /* ku  / kcuu1     up-arrow key */
	const char *TI_rmkx;	 /* ke  / rmkx      leave 'keyboard_transmit' mode */
	const char *TI_smkx;	 /* ks  / smkx      enter 'keyboard_transmit' mode */
	const char *TI_lf0;	 /* l0  / lf0       label on function key f0 if not f0 */
	const char *TI_lf1;	 /* l1  / lf1       label on function key f1 if not f1 */
	const char *TI_lf10;	 /* la  / lf10      label on function key f10 if not f10 */
	const char *TI_lf2;	 /* l2  / lf2       label on function key f2 if not f2 */
	const char *TI_lf3;	 /* l3  / lf3       label on function key f3 if not f3 */
	const char *TI_lf4;	 /* l4  / lf4       label on function key f4 if not f4 */
	const char *TI_lf5;	 /* l5  / lf5       label on function key f5 if not f5 */
	const char *TI_lf6;	 /* l6  / lf6       label on function key f6 if not f6 */
	const char *TI_lf7;	 /* l7  / lf7       label on function key f7 if not f7 */
	const char *TI_lf8;	 /* l8  / lf8       label on function key f8 if not f8 */
	const char *TI_lf9;	 /* l9  / lf9       label on function key f9 if not f9 */
	const char *TI_rmm;	 /* mo  / rmm       turn off meta mode */
	const char *TI_smm;	 /* mm  / smm       turn on meta mode (8th-bit on) */
	const char *TI_nel;	 /* nw  / nel       newline (behave like cr followed by lf) */
	const char *TI_pad;	 /* pc  / pad       padding char (instead of null) */
	const char *TI_dch;	 /* DC  / dch       delete #1 characters (P*) */
	const char *TI_dl;	 /* DL  / dl        delete #1 lines (P*) */
	const char *TI_cud;	 /* DO  / cud       down #1 lines (P*) */
	const char *TI_ich;	 /* IC  / ich       insert #1 characters (P*) */
	const char *TI_indn;	 /* SF  / indn      scroll forward #1 lines (P) */
	const char *TI_il;	 /* AL  / il        insert #1 lines (P*) */
	const char *TI_cub;	 /* LE  / cub       move #1 characters to the left (P) */
	const char *TI_cuf;	 /* RI  / cuf       move #1 characters to the right (P*) */
	const char *TI_rin;	 /* SR  / rin       scroll back #1 lines (P) */
	const char *TI_cuu;	 /* UP  / cuu       up #1 lines (P*) */
	const char *TI_pfkey;	 /* pk  / pfkey     program function key #1 to type string #2 */
	const char *TI_pfloc;	 /* pl  / pfloc     program function key #1 to execute string #2 */
	const char *TI_pfx;	 /* px  / pfx       program function key #1 to transmit string #2 */
	const char *TI_mc0;	 /* ps  / mc0       print contents of screen */
	const char *TI_mc4;	 /* pf  / mc4       turn off printer */
	const char *TI_mc5;	 /* po  / mc5       turn on printer */
	const char *TI_rep;	 /* rp  / rep       repeat char #1 #2 times (P*) */
	const char *TI_rs1;	 /* r1  / rs1       reset string */
	const char *TI_rs2;	 /* r2  / rs2       reset string */
	const char *TI_rs3;	 /* r3  / rs3       reset string */
	const char *TI_rf;	 /* rf  / rf        name of reset file */
	const char *TI_rc;	 /* rc  / rc        restore cursor to position of last save_cursor */
	const char *TI_vpa;	 /* cv  / vpa       vertical position #1 absolute (P) */
	const char *TI_sc;	 /* sc  / sc        save current cursor position (P) */
	const char *TI_ind;	 /* sf  / ind       scroll text up (P) */
	const char *TI_ri;	 /* sr  / ri        scroll text down (P) */
	const char *TI_sgr;	 /* sa  / sgr       define video attributes #1-#9 (PG9) */
	const char *TI_hts;	 /* st  / hts       set a tab in every row, current columns */
	const char *TI_wind;	 /* wi  / wind      current window is lines #1-#2 cols #3-#4 */
	const char *TI_ht;	 /* ta  / ht        tab to next 8-space hardware tab stop */
	const char *TI_tsl;	 /* ts  / tsl       move to status line */
	const char *TI_uc;	 /* uc  / uc        underline char and move past it */
	const char *TI_hu;	 /* hu  / hu        half a line up */
	const char *TI_iprog;	 /* iP  / iprog     path name of program for initialization */
	const char *TI_ka1;	 /* K1  / ka1       upper left of keypad */
	const char *TI_ka3;	 /* K3  / ka3       upper right of keypad */
	const char *TI_kb2;	 /* K2  / kb2       center of keypad */
	const char *TI_kc1;	 /* K4  / kc1       lower left of keypad */
	const char *TI_kc3;	 /* K5  / kc3       lower right of keypad */
	const char *TI_mc5p;	 /* pO  / mc5p      turn on printer for #1 bytes */
	const char *TI_rmp;	 /* rP  / rmp       like ip but when in insert mode */
	const char *TI_acsc;	 /* ac  / acsc      graphics charset pairs, based on vt100 */
	const char *TI_pln;	 /* pn  / pln       program label #1 to show string #2 */
	const char *TI_kcbt;	 /* kB  / kcbt      back-tab key */
	const char *TI_smxon;	 /* SX  / smxon     turn on xon/xoff handshaking */
	const char *TI_rmxon;	 /* RX  / rmxon     turn off xon/xoff handshaking */
	const char *TI_smam;	 /* SA  / smam      turn on automatic margins */
	const char *TI_rmam;	 /* RA  / rmam      turn off automatic margins */
	const char *TI_xonc;	 /* XN  / xonc      XON character */
	const char *TI_xoffc;	 /* XF  / xoffc     XOFF character */
	const char *TI_enacs;	 /* eA  / enacs     enable alternate char set */
	const char *TI_smln;	 /* LO  / smln      turn on soft labels */
	const char *TI_rmln;	 /* LF  / rmln      turn off soft labels */
	const char *TI_kbeg;	 /* @1  / kbeg      begin key */
	const char *TI_kcan;	 /* @2  / kcan      cancel key */
	const char *TI_kclo;	 /* @3  / kclo      close key */
	const char *TI_kcmd;	 /* @4  / kcmd      command key */
	const char *TI_kcpy;	 /* @5  / kcpy      copy key */
	const char *TI_kcrt;	 /* @6  / kcrt      create key */
	const char *TI_kend;	 /* @7  / kend      end key */
	const char *TI_kent;	 /* @8  / kent      enter/send key */
	const char *TI_kext;	 /* @9  / kext      exit key */
	const char *TI_kfnd;	 /* @0  / kfnd      find key */
	const char *TI_khlp;	 /* %1  / khlp      help key */
	const char *TI_kmrk;	 /* %2  / kmrk      mark key */
	const char *TI_kmsg;	 /* %3  / kmsg      message key */
	const char *TI_kmov;	 /* %4  / kmov      move key */
	const char *TI_knxt;	 /* %5  / knxt      next key */
	const char *TI_kopn;	 /* %6  / kopn      open key */
	const char *TI_kopt;	 /* %7  / kopt      options key */
	const char *TI_kprv;	 /* %8  / kprv      previous key */
	const char *TI_kprt;	 /* %9  / kprt      print key */
	const char *TI_krdo;	 /* %0  / krdo      redo key */
	const char *TI_kref;	 /* &1  / kref      reference key */
	const char *TI_krfr;	 /* &2  / krfr      refresh key */
	const char *TI_krpl;	 /* &3  / krpl      replace key */
	const char *TI_krst;	 /* &4  / krst      restart key */
	const char *TI_kres;	 /* &5  / kres      resume key */
	const char *TI_ksav;	 /* &6  / ksav      save key */
	const char *TI_kspd;	 /* &7  / kspd      suspend key */
	const char *TI_kund;	 /* &8  / kund      undo key */
	const char *TI_kBEG;	 /* &9  / kBEG      shifted begin key */
	const char *TI_kCAN;	 /* &0  / kCAN      shifted cancel key */
	const char *TI_kCMD;	 /* *1  / kCMD      shifted command key */
	const char *TI_kCPY;	 /* *2  / kCPY      shifted copy key */
	const char *TI_kCRT;	 /* *3  / kCRT      shifted create key */
	const char *TI_kDC;	 /* *4  / kDC       shifted delete-character key */
	const char *TI_kDL;	 /* *5  / kDL       shifted delete-line key */
	const char *TI_kslt;	 /* *6  / kslt      select key */
	const char *TI_kEND;	 /* *7  / kEND      shifted end key */
	const char *TI_kEOL;	 /* *8  / kEOL      shifted clear-to-end-of-line key */
	const char *TI_kEXT;	 /* *9  / kEXT      shifted exit key */
	const char *TI_kFND;	 /* *0  / kFND      shifted find key */
	const char *TI_kHLP;	 /* #1  / kHLP      shifted help key */
	const char *TI_kHOM;	 /* #2  / kHOM      shifted home key */
	const char *TI_kIC;	 /* #3  / kIC       shifted insert-character key */
	const char *TI_kLFT;	 /* #4  / kLFT      shifted left-arrow key */
	const char *TI_kMSG;	 /* %a  / kMSG      shifted message key */
	const char *TI_kMOV;	 /* %b  / kMOV      shifted move key */
	const char *TI_kNXT;	 /* %c  / kNXT      shifted next key */
	const char *TI_kOPT;	 /* %d  / kOPT      shifted options key */
	const char *TI_kPRV;	 /* %e  / kPRV      shifted previous key */
	const char *TI_kPRT;	 /* %f  / kPRT      shifted print key */
	const char *TI_kRDO;	 /* %g  / kRDO      shifted redo key */
	const char *TI_kRPL;	 /* %h  / kRPL      shifted replace key */
	const char *TI_kRIT;	 /* %i  / kRIT      shifted right-arrow key */
	const char *TI_kRES;	 /* %j  / kRES      shifted resume key */
	const char *TI_kSAV;	 /* !1  / kSAV      shifted save key */
	const char *TI_kSPD;	 /* !2  / kSPD      shifted suspend key */
	const char *TI_kUND;	 /* !3  / kUND      shifted undo key */
	const char *TI_rfi;	 /* RF  / rfi       send next input char (for ptys) */
	const char *TI_kf11;	 /* F1  / kf11      F11 function key */
	const char *TI_kf12;	 /* F2  / kf12      F12 function key */
	const char *TI_kf13;	 /* F3  / kf13      F13 function key */
	const char *TI_kf14;	 /* F4  / kf14      F14 function key */
	const char *TI_kf15;	 /* F5  / kf15      F15 function key */
	const char *TI_kf16;	 /* F6  / kf16      F16 function key */
	const char *TI_kf17;	 /* F7  / kf17      F17 function key */
	const char *TI_kf18;	 /* F8  / kf18      F18 function key */
	const char *TI_kf19;	 /* F9  / kf19      F19 function key */
	const char *TI_kf20;	 /* FA  / kf20      F20 function key */
	const char *TI_kf21;	 /* FB  / kf21      F21 function key */
	const char *TI_kf22;	 /* FC  / kf22      F22 function key */
	const char *TI_kf23;	 /* FD  / kf23      F23 function key */
	const char *TI_kf24;	 /* FE  / kf24      F24 function key */
	const char *TI_kf25;	 /* FF  / kf25      F25 function key */
	const char *TI_kf26;	 /* FG  / kf26      F26 function key */
	const char *TI_kf27;	 /* FH  / kf27      F27 function key */
	const char *TI_kf28;	 /* FI  / kf28      F28 function key */
	const char *TI_kf29;	 /* FJ  / kf29      F29 function key */
	const char *TI_kf30;	 /* FK  / kf30      F30 function key */
	const char *TI_kf31;	 /* FL  / kf31      F31 function key */
	const char *TI_kf32;	 /* FM  / kf32      F32 function key */
	const char *TI_kf33;	 /* FN  / kf33      F33 function key */
	const char *TI_kf34;	 /* FO  / kf34      F34 function key */
	const char *TI_kf35;	 /* FP  / kf35      F35 function key */
	const char *TI_kf36;	 /* FQ  / kf36      F36 function key */
	const char *TI_kf37;	 /* FR  / kf37      F37 function key */
	const char *TI_kf38;	 /* FS  / kf38      F38 function key */
	const char *TI_kf39;	 /* FT  / kf39      F39 function key */
	const char *TI_kf40;	 /* FU  / kf40      F40 function key */
	const char *TI_kf41;	 /* FV  / kf41      F41 function key */
	const char *TI_kf42;	 /* FW  / kf42      F42 function key */
	const char *TI_kf43;	 /* FX  / kf43      F43 function key */
	const char *TI_kf44;	 /* FY  / kf44      F44 function key */
	const char *TI_kf45;	 /* FZ  / kf45      F45 function key */
	const char *TI_kf46;	 /* Fa  / kf46      F46 function key */
	const char *TI_kf47;	 /* Fb  / kf47      F47 function key */
	const char *TI_kf48;	 /* Fc  / kf48      F48 function key */
	const char *TI_kf49;	 /* Fd  / kf49      F49 function key */
	const char *TI_kf50;	 /* Fe  / kf50      F50 function key */
	const char *TI_kf51;	 /* Ff  / kf51      F51 function key */
	const char *TI_kf52;	 /* Fg  / kf52      F52 function key */
	const char *TI_kf53;	 /* Fh  / kf53      F53 function key */
	const char *TI_kf54;	 /* Fi  / kf54      F54 function key */
	const char *TI_kf55;	 /* Fj  / kf55      F55 function key */
	const char *TI_kf56;	 /* Fk  / kf56      F56 function key */
	const char *TI_kf57;	 /* Fl  / kf57      F57 function key */
	const char *TI_kf58;	 /* Fm  / kf58      F58 function key */
	const char *TI_kf59;	 /* Fn  / kf59      F59 function key */
	const char *TI_kf60;	 /* Fo  / kf60      F60 function key */
	const char *TI_kf61;	 /* Fp  / kf61      F61 function key */
	const char *TI_kf62;	 /* Fq  / kf62      F62 function key */
	const char *TI_kf63;	 /* Fr  / kf63      F63 function key */
	const char *TI_el1;	 /* cb  / el1       Clear to beginning of line */
	const char *TI_mgc;	 /* MC  / mgc       clear right and left soft margins */
	const char *TI_smgl;	 /* ML  / smgl      set left soft margin at current column */
	const char *TI_smgr;	 /* MR  / smgr      set right soft margin at current column */
	const char *TI_fln;	 /* Lf  / fln       label format */
	const char *TI_sclk;	 /* SC  / sclk      set clock, #1 hrs #2 mins #3 secs */
	const char *TI_dclk;	 /* DK  / dclk      display clock at (#1,#2) */
	const char *TI_rmclk;	 /* RC  / rmclk     remove clock */
	const char *TI_cwin;	 /* CW  / cwin      define a window #1 from #2,#3 to #4,#5 */
	const char *TI_wingo;	 /* WG  / wingo     go to window #1 */
	const char *TI_hup;	 /* HU  / hup       hang-up phone */
	const char *TI_dial;	 /* DI  / dial      dial number #1 */
	const char *TI_qdial;	 /* QD  / qdial     dial number #1 without checking */
	const char *TI_tone;	 /* TO  / tone      select touch tone dialing */
	const char *TI_pulse;	 /* PU  / pulse     select pulse dialing */
	const char *TI_hook;	 /* fh  / hook      flash switch hook */
	const char *TI_pause;	 /* PA  / pause     pause for 2-3 seconds */
	const char *TI_wait;	 /* WA  / wait      wait for dial-tone */
	const char *TI_u0;	 /* u0  / u0        User string #0 */
	const char *TI_u1;	 /* u1  / u1        User string #1 */
	const char *TI_u2;	 /* u2  / u2        User string #2 */
	const char *TI_u3;	 /* u3  / u3        User string #3 */
	const char *TI_u4;	 /* u4  / u4        User string #4 */
	const char *TI_u5;	 /* u5  / u5        User string #5 */
	const char *TI_u6;	 /* u6  / u6        User string #6 */
	const char *TI_u7;	 /* u7  / u7        User string #7 */
	const char *TI_u8;	 /* u8  / u8        User string #8 */
	const char *TI_u9;	 /* u9  / u9        User string #9 */
	const char *TI_op;	 /* op  / op        Set default pair to its original value */
	const char *TI_oc;	 /* oc  / oc        Set all color pairs to the original ones */
	const char *TI_initc;	 /* Ic  / initc     initialize color #1 to (#2,#3,#4) */
	const char *TI_initp;	 /* Ip  / initp     Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7) */
	const char *TI_scp;	 /* sp  / scp       Set current color pair to #1 */
	const char *TI_setf;	 /* Sf  / setf      Set foreground color #1 */
	const char *TI_setb;	 /* Sb  / setb      Set background color #1 */
	const char *TI_cpi;	 /* ZA  / cpi       Change number of characters per inch */
	const char *TI_lpi;	 /* ZB  / lpi       Change number of lines per inch */
	const char *TI_chr;	 /* ZC  / chr       Change horizontal resolution */
	const char *TI_cvr;	 /* ZD  / cvr       Change vertical resolution */
	const char *TI_defc;	 /* ZE  / defc      Define a character */
	const char *TI_swidm;	 /* ZF  / swidm     Enter double-wide mode */
	const char *TI_sdrfq;	 /* ZG  / sdrfq     Enter draft-quality mode */
	const char *TI_sitm;	 /* ZH  / sitm      Enter italic mode */
	const char *TI_slm;	 /* ZI  / slm       Start leftward carriage motion */
	const char *TI_smicm;	 /* ZJ  / smicm     Start micro-motion mode */
	const char *TI_snlq;	 /* ZK  / snlq      Enter NLQ mode */
	const char *TI_snrmq;	 /* ZL  / snrmq     Enter normal-quality mode */
	const char *TI_sshm;	 /* ZM  / sshm      Enter shadow-print mode */
	const char *TI_ssubm;	 /* ZN  / ssubm     Enter subscript mode */
	const char *TI_ssupm;	 /* ZO  / ssupm     Enter superscript mode */
	const char *TI_sum;	 /* ZP  / sum       Start upward carriage motion */
	const char *TI_rwidm;	 /* ZQ  / rwidm     End double-wide mode */
	const char *TI_ritm;	 /* ZR  / ritm      End italic mode */
	const char *TI_rlm;	 /* ZS  / rlm       End left-motion mode */
	const char *TI_rmicm;	 /* ZT  / rmicm     End micro-motion mode */
	const char *TI_rshm;	 /* ZU  / rshm      End shadow-print mode */
	const char *TI_rsubm;	 /* ZV  / rsubm     End subscript mode */
	const char *TI_rsupm;	 /* ZW  / rsupm     End superscript mode */
	const char *TI_rum;	 /* ZX  / rum       End reverse character motion */
	const char *TI_mhpa;	 /* ZY  / mhpa      Like column_address in micro mode */
	const char *TI_mcud1;	 /* ZZ  / mcud1     Like cursor_down in micro mode */
	const char *TI_mcub1;	 /* Za  / mcub1     Like cursor_left in micro mode */
	const char *TI_mcuf1;	 /* Zb  / mcuf1     Like cursor_right in micro mode */
	const char *TI_mvpa;	 /* Zc  / mvpa      Like row_address in micro mode */
	const char *TI_mcuu1;	 /* Zd  / mcuu1     Like cursor_up in micro mode */
	const char *TI_porder; /* Ze  / porder    Match software bits to print-head pins */
	const char *TI_mcud;	 /* Zf  / mcud      Like parm_down_cursor in micro mode */
	const char *TI_mcub;	 /* Zg  / mcub      Like parm_left_cursor in micro mode */
	const char *TI_mcuf;	 /* Zh  / mcuf      Like parm_right_cursor in micro mode */
	const char *TI_mcuu;	 /* Zi  / mcuu      Like parm_up_cursor in micro mode */
	const char *TI_scs;	 /* Zj  / scs       Select character set */
	const char *TI_smgb;	 /* Zk  / smgb      Set bottom margin at current line */
	const char *TI_smgbp;	 /* Zl  / smgbp     Set bottom margin at line #1 or #2 lines from bottom */
	const char *TI_smglp;	 /* Zm  / smglp     Set left (right) margin at column #1 (#2) */
	const char *TI_smgrp;	 /* Zn  / smgrp     Set right margin at column #1 */
	const char *TI_smgt;	 /* Zo  / smgt      Set top margin at current line */
	const char *TI_smgtp;	 /* Zp  / smgtp     Set top (bottom) margin at row #1 (#2) */
	const char *TI_sbim;	 /* Zq  / sbim      Start printing bit image graphics */
	const char *TI_scsd;	 /* Zr  / scsd      Start character set definition */
	const char *TI_rbim;	 /* Zs  / rbim      Stop printing bit image graphics */
	const char *TI_rcsd;	 /* Zt  / rcsd      End definition of character set */
	const char *TI_subcs;	 /* Zu  / subcs     List of subscriptable characters */
	const char *TI_supcs;	 /* Zv  / supcs     List of superscriptable characters */
	const char *TI_docr;	 /* Zw  / docr      Printing any of these characters causes CR */
	const char *TI_zerom;	 /* Zx  / zerom     No motion for subsequent character */
	const char *TI_csnm;	 /* Zy  / csnm      List of character set names */
	const char *TI_kmous;	 /* Km  / kmous     Mouse event has occurred */
	const char *TI_minfo;	 /* Mi  / minfo     Mouse status information */
	const char *TI_reqmp;	 /* RQ  / reqmp     Request mouse position */
	const char *TI_getm;	 /* Gm  / getm      Curses should get button events */
	const char *TI_setaf;	 /* AF  / setaf     Set foreground color using ANSI escape */
	const char *TI_setab;	 /* AB  / setab     Set background color using ANSI escape */
	const char *TI_pfxl;	 /* xl  / pfxl      Program function key #1 to type string #2 and show string #3 */
	const char *TI_devt;	 /* dv  / devt      Indicate language/codeset support */
	const char *TI_csin;	 /* ci  / csin      Init sequence for multiple codesets */
	const char *TI_s0ds;	 /* s0  / s0ds      Shift to code set 0 (EUC set 0, ASCII) */
	const char *TI_s1ds;	 /* s1  / s1ds      Shift to code set 1 */
	const char *TI_s2ds;	 /* s2  / s2ds      Shift to code set 2 */
	const char *TI_s3ds;	 /* s3  / s3ds      Shift to code set 3 */
	const char *TI_smglr;	 /* ML  / smglr     Set both left and right margins to #1, #2 */
	const char *TI_smgtb;	 /* MT  / smgtb     Sets both top and bottom margins to #1, #2 */
	const char *TI_birep;	 /* Xy  / birep     Repeat bit image cell #1 #2 times */
	const char *TI_binel;	 /* Zz  / binel     Move to next row of the bit image */
	const char *TI_bicr;	 /* Yv  / bicr      Move to beginning of same row */
	const char *TI_colornm; /* Yw  / colornm   Give name for color #1 */
	const char *TI_defbi;	 /* Yx  / defbi     Define rectangualar bit image region */
	const char *TI_endbi;	 /* Yy  / endbi     End a bit-image region */
	const char *TI_setcolor; /* Yz  / setcolor  Change to ribbon color #1 */
	const char *TI_slines; /* YZ  / slines    Set page length to #1 lines */
	const char *TI_dispc;	 /* S1  / dispc     Display PC character */
	const char *TI_smpch;	 /* S2  / smpch     Enter PC character display mode */
	const char *TI_rmpch;	 /* S3  / rmpch     Exit PC character display mode */
	const char *TI_smsc;	 /* S4  / smsc      Enter PC scancode mode */
	const char *TI_rmsc;	 /* S5  / rmsc      Exit PC scancode mode */
	const char *TI_pctrm;	 /* S6  / pctrm     PC terminal options */
	const char *TI_scesc;	 /* S7  / scesc     Escape for scancode emulation */
	const char *TI_scesa;	 /* S8  / scesa     Alternate escape for scancode emulation */
	const char *TI_ehhlm;	 /* Xh  / ehhlm     Enter horizontal highlight mode */
	const char *TI_elhlm;	 /* Xl  / elhlm     Enter left highlight mode */
	const char *TI_elohlm; /* Xo  / elohlm    Enter low highlight mode */
	const char *TI_erhlm;	 /* Xr  / erhlm     Enter right highlight mode */
	const char *TI_ethlm;	 /* Xt  / ethlm     Enter top highlight mode */
	const char *TI_evhlm;	 /* Xv  / evhlm     Enter vertical highlight mode */
	const char *TI_sgr1;	 /* sA  / sgr1      Define second set of video attributes #1-#6 */
	const char *TI_slength; /* sL  / slength   YI Set page length to #1 hundredth of an inch */
	const char *TI_OTi2;	 /* i2  / OTi2      secondary initialization string */
	const char *TI_OTrs;	 /* rs  / OTrs      terminal reset string */
	int TI_OTug;	 /* ug  / OTug      number of blanks left by ul */
	int TI_OTbs;	 /* bs  / OTbs      uses ^H to move left */
	int TI_OTns;	 /* ns  / OTns      crt cannot scroll */
	int TI_OTnc;	 /* nc  / OTnc      no way to go to start of line */
	int TI_OTdC;	 /* dC  / OTdC      pad needed for CR */
	int TI_OTdN;	 /* dN  / OTdN      pad needed for LF */
	const char *TI_OTnl;	 /* nl  / OTnl      use to move down */
	const char *TI_OTbc;	 /* bc  / OTbc      move left, if not ^H */
	int TI_OTMT;	 /* MT  / OTMT      has meta key */
	int TI_OTNL;	 /* NL  / OTNL      move down with \n */
	int TI_OTdB;	 /* dB  / OTdB      padding required for ^H */
	int TI_OTdT;	 /* dT  / OTdT      padding required for ^I */
	int TI_OTkn;	 /* kn  / OTkn      count of function keys */
	const char *TI_OTko;	 /* ko  / OTko      list of self-mapped keycaps */
	const char *TI_OTma;	 /* ma  / OTma      map arrow keys rogue(1) motion keys */
	int TI_OTpt;	 /* pt  / OTpt      has 8-const char tabs invoked with ^I */
	int TI_OTxr;	 /* xr  / OTxr      return clears the line */
	const char *TI_OTG2;	 /* G2  / OTG2      single upper left */
	const char *TI_OTG3;	 /* G3  / OTG3      single lower left */
	const char *TI_OTG1;	 /* G1  / OTG1      single upper right */
	const char *TI_OTG4;	 /* G4  / OTG4      single lower right */
	const char *TI_OTGR;	 /* GR  / OTGR      tee pointing right */
	const char *TI_OTGL;	 /* GL  / OTGL      tee pointing left */
	const char *TI_OTGU;	 /* GU  / OTGU      tee pointing up */
	const char *TI_OTGD;	 /* GD  / OTGD      tee pointing down */
	const char *TI_OTGH;	 /* GH  / OTGH      single horizontal line */
	const char *TI_OTGV;	 /* GV  / OTGV      single vertical line */
	const char *TI_OTGC;	 /* GC  / OTGC      single intersection */
	const char *TI_meml;	 /* ml  / meml      memory lock above */
	const char *TI_memu;	 /* mu  / memu      memory unlock */
	const char *TI_box1;	 /* bx  / box1      box characters primary set */
	/* non termcap/terminfo terminal info (generated by epic) */
	char TI_normal[256];
	const char *TI_sgrstrs[TERM_SGR_MAXVAL];
	const char *TI_forecolors[256];
	const char *TI_backcolors[256];
	const char *TI_bold_forecolors[8];
	const char *TI_bold_backcolors[8];
	int TI_meta_mode;
/*	int TI_need_redraw ; */
};

#define term_has(x) 	(termfeatures & (x))
#define capstr(x) 	(current_term->TI_sgrstrs[(TERM_SGR_ ## x)-1])
#define outcap(x)	(tputs_x(capstr(x)))

#ifndef TERM_DEBUG
#define tputs_x(s)		(tputs(s, 0, putchar_x))
#else
int	tputs_x(char *);
#endif

#define term_underline_on()	outcap(UNDL_ON)
#define term_underline_off()	outcap(UNDL_OFF)
#define term_standout_on()	outcap(REV_ON)
#define term_standout_off()	outcap(REV_OFF)
#define term_blink_on()		outcap(BLINK_ON)
#define term_blink_off()	outcap(BLINK_OFF)
#define term_bold_on()		outcap(BOLD_ON)
#define	term_bold_off()		outcap(BOLD_OFF)
#define term_altcharset_on()	outcap(ALTCHAR_ON)
#define term_altcharset_off()	outcap(ALTCHAR_OFF)
#define term_italics_on()	outcap(ITALIC_ON)
#define term_italics_off()	outcap(ITALIC_OFF)
#define term_set_foreground(x)	tputs_x(current_term->TI_forecolors[(x) & 0xff])
#define term_set_background(x)	tputs_x(current_term->TI_backcolors[(x) & 0xff])
#define term_set_bold_foreground(x)	tputs_x(current_term->TI_bold_forecolors[(x) & 0x07])
#define term_set_bold_background(x)	tputs_x(current_term->TI_bold_backcolors[(x) & 0x07])
#define term_clear_screen()	term_clrscr()
#define term_move_cursor(c, r)	term_gotoxy((c),(r))
#define term_cr()		tputs_x(current_term->TI_cr)
#define term_newline()		tputs_x(current_term->TI_nel)
#define term_cursor_right()	term_right(1)
#define term_clear_to_eol()	term_clreol()
#define term_all_off()          tputs_x(current_term->TI_normal);

	void		term_cont 		(int);
	void 		term_beep 		(void);
	int		term_echo 		(int);
	int		term_init 		(void);
	int		term_resize 		(void);
	BUILT_IN_KEYBINDING(term_pause);
	void		term_inputline_putchar 	(unsigned char);
	void		term_scroll 		(int, int, int);
	void		term_right		(int);
	void		term_clreol		(void);
	void		term_clrscr		(void);
	void		term_gotoxy		(int, int);
	void		term_reset		(void);
	void		set_automargin_override	(void *);
	const char *	term_getsgr		(int, int, int);
	const char *	get_term_capability	(const char *, int, int);

#endif /* _TERM_H_ */