-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathptyx.h
1440 lines (1256 loc) · 44 KB
/
ptyx.h
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
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*
* $XConsortium: ptyx.h /main/67 1996/11/29 10:34:19 swick $
* $XFree86: xc/programs/xterm/ptyx.h,v 3.73 2000/03/03 22:50:36 dawes Exp $
*/
/*
* Copyright 1999-2000 by Thomas E. Dickey <dickey@clark.net>
*
* All Rights Reserved
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Except as contained in this notice, the name(s) of the above copyright
* holders shall not be used in advertising or otherwise to promote the
* sale, use or other dealings in this Software without prior written
* authorization.
*
*
* Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
*
* All Rights Reserved
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted,
* provided that the above copyright notice appear in all copies and that
* both that copyright notice and this permission notice appear in
* supporting documentation, and that the name of Digital Equipment
* Corporation not be used in advertising or publicity pertaining to
* distribution of the software without specific, written prior permission.
*
*
* DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
* DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
* ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
* SOFTWARE.
*/
#ifndef included_ptyx_h
#define included_ptyx_h 1
#ifdef HAVE_CONFIG_H
#include <xtermcfg.h>
#endif
/* ptyx.h */
/* @(#)ptyx.h X10/6.6 11/10/86 */
#include <X11/IntrinsicP.h>
#include <X11/Xmu/Misc.h> /* For Max() and Min(). */
#include <X11/Xfuncs.h>
#include <X11/Xosdefs.h>
#include <X11/Xmu/Converters.h>
/* adapted from IntrinsicI.h */
#define MyStackAlloc(size, stack_cache_array) \
((size) <= sizeof(stack_cache_array) \
? (XtPointer)(stack_cache_array) \
: (XtPointer)malloc((unsigned)(size)))
#define MyStackFree(pointer, stack_cache_array) \
if ((pointer) != ((char *)(stack_cache_array))) free(pointer)
#ifdef AMOEBA
/* Avoid name clashes with standard Amoeba types: */
#define event am_event_t
#define interval am_interval_t
#include <amoeba.h>
#include <semaphore.h>
#include <circbuf.h>
#undef event
#undef interval
#endif
/*
** System V definitions
*/
#ifdef SYSV
#ifdef X_NOT_POSIX
#ifndef CRAY
#define dup2(fd1,fd2) ((fd1 == fd2) ? fd1 : \
(close(fd2), fcntl(fd1, F_DUPFD, fd2)))
#endif
#endif
#endif /* SYSV */
/*
** allow for mobility of the pty master/slave directories
*/
#ifndef PTYDEV
#if defined(__hpux)
#define PTYDEV "/dev/ptym/ptyxx"
#elif defined(__MVS__)
#define PTYDEV "/dev/ptypxxxx"
#elif !defined(__osf__)
#define PTYDEV "/dev/ptyxx"
#endif
#endif /* !PTYDEV */
#ifndef TTYDEV
#if defined(__hpux)
#define TTYDEV "/dev/pty/ttyxx"
#elif defined(__MVS__)
#define TTYDEV "/dev/ptypxxxx"
#elif defined(__osf__) || (defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1))
#define TTYDEV "/dev/ttydirs/xxx/xxxxxxxxxxxxxx"
#else
#define TTYDEV "/dev/ttyxx"
#endif
#endif /* !TTYDEV */
#ifndef PTYCHAR1
#ifdef __hpux
#define PTYCHAR1 "zyxwvutsrqp"
#else /* !__hpux */
#ifdef __EMX__
#define PTYCHAR1 "pq"
#else
#define PTYCHAR1 "pqrstuvwxyzPQRSTUVWXYZ"
#endif /* !__EMX__ */
#endif /* !__hpux */
#endif /* !PTYCHAR1 */
#ifndef PTYCHAR2
#ifdef __hpux
#define PTYCHAR2 "fedcba9876543210"
#else /* !__hpux */
#ifdef __FreeBSD__
#define PTYCHAR2 "0123456789abcdefghijklmnopqrstuv"
#else /* !__FreeBSD__ */
#define PTYCHAR2 "0123456789abcdef"
#endif /* !__FreeBSD__ */
#endif /* !__hpux */
#endif /* !PTYCHAR2 */
#ifndef TTYFORMAT
#if defined(CRAY)
#define TTYFORMAT "/dev/ttyp%03d"
#elif defined(__MVS__)
#define TTYFORMAT "/dev/ttyp%04d"
#else
#define TTYFORMAT "/dev/ttyp%d"
#endif
#endif /* TTYFORMAT */
#ifndef PTYFORMAT
#ifdef CRAY
#define PTYFORMAT "/dev/pty/%03d"
#elif defined(__MVS__)
#define PTYFORMAT "/dev/ptyp%04d"
#else
#define PTYFORMAT "/dev/ptyp%d"
#endif
#endif /* PTYFORMAT */
#ifndef MAXPTTYS
#ifdef CRAY
#define MAXPTTYS 256
#else
#define MAXPTTYS 2048
#endif
#endif
/* Until the translation manager comes along, I have to do my own translation of
* mouse events into the proper routines. */
typedef enum {NORMAL, LEFTEXTENSION, RIGHTEXTENSION} EventMode;
/*
* The origin of a screen is 0, 0. Therefore, the number of rows
* on a screen is screen->max_row + 1, and similarly for columns.
*/
typedef unsigned char Char; /* to support 8 bit chars */
typedef Char **ScrnBuf;
#define CharOf(n) ((n) & 0xff)
/*
* ANSI emulation, special character codes
*/
#define INQ 0x05
#define BEL 0x07
#define FF 0x0C /* C0, C1 control names */
#define LS1 0x0E
#define LS0 0x0F
#define NAK 0x15
#define CAN 0x18
#define SUB 0x1A
#define ESC 0x1B
#define XPOUND 0x1E /* internal mapping for '#' */
#define US 0x1F
#define DEL 0x7F
#define RI 0x8D
#define SS2 0x8E
#define SS3 0x8F
#define DCS 0x90
#define SPA 0x96
#define EPA 0x97
#define SOS 0x98
#define OLDID 0x9A /* ESC Z */
#define CSI 0x9B
#define ST 0x9C
#define OSC 0x9D
#define PM 0x9E
#define APC 0x9F
#define RDEL 0xFF
#define MIN_DECID 52 /* can emulate VT52 */
#define MAX_DECID 420 /* ...through VT420 */
#ifndef DFT_DECID
#define DFT_DECID "vt100" /* default VT100 */
#endif
#ifndef DFT_KBD_DIALECT
#define DFT_KBD_DIALECT "B" /* default USASCII */
#endif
/* constants used for utf8 mode */
#define UCS_REPL 0xfffd
#define UCS_LIMIT 0x80000000U /* both limit and flag for non-UCS */
#define TERMCAP_SIZE 1500 /* 1023 is standard; 'screen' exceeds */
#define NMENUFONTS 9 /* font entries in fontMenu */
#define NBOX 5 /* Number of Points in box */
#define NPARAM 30 /* Max. parameters */
typedef struct {
unsigned char a_type;
unsigned char a_pintro;
unsigned char a_final;
unsigned char a_inters;
char a_nparam; /* # of parameters */
short a_param[NPARAM]; /* Parameters */
} ANSI;
#define TEK_FONT_LARGE 0
#define TEK_FONT_2 1
#define TEK_FONT_3 2
#define TEK_FONT_SMALL 3
#define TEKNUMFONTS 4
/* Actually there are 5 types of lines, but four are non-solid lines */
#define TEKNUMLINES 4
typedef struct {
int x;
int y;
int fontsize;
int linetype;
} Tmodes;
typedef struct {
int Twidth;
int Theight;
} T_fontsize;
typedef struct {
short *bits;
int x;
int y;
int width;
int height;
} BitmapBits;
#define SAVELINES 64 /* default # lines to save */
#define SCROLLLINES 1 /* default # lines to scroll */
/***====================================================================***/
#define TEXT_FG 0
#define TEXT_BG 1
#define TEXT_CURSOR 2
#define MOUSE_FG 3
#define MOUSE_BG 4
#define TEK_FG 5
#define TEK_BG 6
#define HIGHLIGHT_BG 7
#define NCOLORS 8
#define EXCHANGE(a,b,tmp) tmp = a; a = b; b = tmp;
#define COLOR_DEFINED(s,w) ((s)->which&(1<<(w)))
#define COLOR_VALUE(s,w) ((s)->colors[w])
#define SET_COLOR_VALUE(s,w,v) (((s)->colors[w]=(v)),((s)->which|=(1<<(w))))
#define COLOR_NAME(s,w) ((s)->names[w])
#define SET_COLOR_NAME(s,w,v) (((s)->names[w]=(v)),((s)->which|=(1<<(w))))
#define UNDEFINE_COLOR(s,w) ((s)->which&=(~((w)<<1)))
#define OPPOSITE_COLOR(n) (((n)==TEXT_FG?TEXT_BG:\
((n)==TEXT_BG?TEXT_FG:\
((n)==MOUSE_FG?MOUSE_BG:\
((n)==MOUSE_BG?MOUSE_FG:\
((n)==TEK_FG?TEK_BG:\
((n)==TEXT_BG?TEK_FG:(n))))))))
#ifndef RES_OFFSET
#define RES_OFFSET(offset) XtOffsetOf(XtermWidgetRec, offset)
#endif
#define RES_NAME(name) name
#define RES_CLASS(name) name
#define Bres(name,class,offset,value) \
{RES_NAME(name), RES_CLASS(class), XtRBoolean, sizeof(Boolean), \
RES_OFFSET(offset), XtRImmediate, (XtPointer) value}
#define Cres(name,offset,value) \
{RES_NAME(name), XtCForeground, XtRPixel, sizeof(Pixel), \
RES_OFFSET(offset), XtRString, value}
#define Ires(name,class,offset,value) \
{RES_NAME(name), RES_CLASS(class), XtRInt, sizeof(int), \
RES_OFFSET(offset), XtRImmediate, (XtPointer) value}
#define Sres(name,class,offset,value) \
{RES_NAME(name), RES_CLASS(class), XtRString, sizeof(char *), \
RES_OFFSET(offset), XtRString, (XtPointer) value}
/***====================================================================***/
#if (XtSpecificationRelease < 6)
#ifndef NO_ACTIVE_ICON
#define NO_ACTIVE_ICON 1 /* Note: code relies on an X11R6 function */
#endif
#endif
#ifndef OPT_AIX_COLORS
#define OPT_AIX_COLORS 1 /* true if xterm is configured with AIX (16) colors */
#endif
#ifndef OPT_BLINK_CURS
#define OPT_BLINK_CURS 1 /* true if xterm has blinking cursor capability */
#endif
#ifndef OPT_BOX_CHARS
#define OPT_BOX_CHARS 1 /* true if xterm can simulate box-characters */
#endif
#ifndef OPT_CLIP_BOLD
#define OPT_CLIP_BOLD 1 /* true if xterm uses clipping to avoid bold-trash */
#endif
#ifndef OPT_COLOR_RES
#define OPT_COLOR_RES 1 /* true if xterm delays color-resource evaluation */
#endif
#ifndef OPT_DEC_CHRSET
#define OPT_DEC_CHRSET 1 /* true if xterm is configured for DEC charset */
#endif
#ifndef OPT_DEC_LOCATOR
#define OPT_DEC_LOCATOR 0 /* true if xterm supports VT220-style mouse events */
#endif
#ifndef OPT_DEC_SOFTFONT
#define OPT_DEC_SOFTFONT 0 /* true if xterm is configured for VT220 softfonts */
#endif
#ifndef OPT_EBCDIC
#ifdef __MVS__
#define OPT_EBCDIC 1
#else
#define OPT_EBCDIC 0
#endif
#endif
#ifndef OPT_HP_FUNC_KEYS
#define OPT_HP_FUNC_KEYS 0 /* true if xterm supports HP-style function keys */
#endif
#ifndef OPT_I18N_SUPPORT
#if (XtSpecificationRelease >= 5)
#define OPT_I18N_SUPPORT 1 /* true if xterm uses internationalization support */
#else
#define OPT_I18N_SUPPORT 0
#endif
#endif
#ifndef OPT_INITIAL_ERASE
#define OPT_INITIAL_ERASE 1 /* use pty's erase character if it's not 128 */
#endif
#ifndef OPT_INPUT_METHOD
#if (XtSpecificationRelease >= 6)
#define OPT_INPUT_METHOD 1 /* true if xterm uses input-method support */
#else
#define OPT_INPUT_METHOD 0
#endif
#endif
#ifndef OPT_ISO_COLORS
#define OPT_ISO_COLORS 1 /* true if xterm is configured with ISO colors */
#endif
#ifndef OPT_256_COLORS
#define OPT_256_COLORS 0 /* true if xterm is configured with 256 colors */
#endif
#ifndef OPT_88_COLORS
#define OPT_88_COLORS 0 /* true if xterm is configured with 88 colors */
#endif
#ifndef OPT_HIGHLIGHT_COLOR
#define OPT_HIGHLIGHT_COLOR 1 /* true if xterm supports color highlighting */
#endif
#ifndef OPT_MAXIMIZE
#define OPT_MAXIMIZE 1 /* add actions for iconify ... maximize */
#endif
#ifndef OPT_NUM_LOCK
#define OPT_NUM_LOCK 1 /* use NumLock key only for numeric-keypad */
#endif
#ifndef OPT_SAME_NAME
#define OPT_SAME_NAME 1 /* suppress redundant updates of title, icon, etc. */
#endif
#ifndef OPT_PC_COLORS
#define OPT_PC_COLORS 1 /* true if xterm supports PC-style (bold) colors */
#endif
#ifndef OPT_PRINT_COLORS
#define OPT_PRINT_COLORS 1 /* true if we print color information */
#endif
#ifndef OPT_SCO_FUNC_KEYS
#define OPT_SCO_FUNC_KEYS 0 /* true if xterm supports SCO-style function keys */
#endif
#ifndef OPT_SHIFT_KEYS
#define OPT_SHIFT_KEYS 1 /* true if xterm interprets shifted special-keys */
#endif
#ifndef OPT_SUNPC_KBD
#define OPT_SUNPC_KBD 1 /* true if xterm supports Sun/PC keyboard map */
#endif
#ifndef OPT_TEK4014
#define OPT_TEK4014 1 /* true if we're using tek4014 emulation */
#endif
#ifndef OPT_TOOLBAR
#define OPT_TOOLBAR 0 /* true if xterm supports toolbar menus */
#endif
#ifndef OPT_TRACE
#define OPT_TRACE 0 /* true if we're using debugging traces */
#endif
#ifndef OPT_VT52_MODE
#define OPT_VT52_MODE 1 /* true if xterm supports VT52 emulation */
#endif
#ifndef OPT_WIDE_CHARS
#define OPT_WIDE_CHARS 0 /* true if xterm supports 16-bit characters */
#endif
#ifndef OPT_XMC_GLITCH
#define OPT_XMC_GLITCH 0 /* true if xterm supports xmc (magic cookie glitch) */
#endif
#ifndef OPT_ZICONBEEP
#define OPT_ZICONBEEP 1 /* true if xterm supports "-ziconbeep" option */
#endif
/***====================================================================***/
#if OPT_AIX_COLORS && !OPT_ISO_COLORS
/* You must have ANSI/ISO colors to support AIX colors */
#undef OPT_AIX_COLORS
#endif
#if OPT_PC_COLORS && !OPT_ISO_COLORS
/* You must have ANSI/ISO colors to support PC colors */
#undef OPT_PC_COLORS
#endif
#if OPT_256_COLORS && !OPT_ISO_COLORS
/* You must have ANSI/ISO colors to support 256 colors */
#undef OPT_256_COLORS
#endif
#if OPT_88_COLORS && !OPT_ISO_COLORS
/* You must have ANSI/ISO colors to support 88 colors */
#undef OPT_88_COLORS
#endif
#if OPT_88_COLORS && OPT_256_COLORS
/* 256 colors supersedes 88 colors */
#undef OPT_88_COLORS
#endif
/***====================================================================***/
#if OPT_ISO_COLORS
#define if_OPT_ISO_COLORS(screen, code) if(screen->colorMode) code
#define TERM_COLOR_FLAGS (term->flags & (FG_COLOR|BG_COLOR))
#define COLOR_0 0
#define COLOR_1 1
#define COLOR_2 2
#define COLOR_3 3
#define COLOR_4 4
#define COLOR_5 5
#define COLOR_6 6
#define COLOR_7 7
#define COLOR_8 8
#define COLOR_9 9
#define COLOR_10 10
#define COLOR_11 11
#define COLOR_12 12
#define COLOR_13 13
#define COLOR_14 14
#define COLOR_15 15
#if OPT_256_COLORS
# define NUM_ANSI_COLORS 256
#elif OPT_88_COLORS
# define NUM_ANSI_COLORS 88
#else
# define NUM_ANSI_COLORS 16
#endif
#if NUM_ANSI_COLORS > 16
# define OPT_EXT_COLORS 1
#else
# define OPT_EXT_COLORS 0
#endif
#define COLOR_BD (NUM_ANSI_COLORS) /* BOLD */
#define COLOR_UL (NUM_ANSI_COLORS+1) /* UNDERLINE */
#define COLOR_BL (NUM_ANSI_COLORS+2) /* BLINK */
#define MAXCOLORS (NUM_ANSI_COLORS+3)
#ifndef DFT_COLORMODE
#define DFT_COLORMODE TRUE /* default colorMode resource */
#endif
#else /* !OPT_ISO_COLORS */
#define if_OPT_ISO_COLORS(screen, code) /* nothing */
#define TERM_COLOR_FLAGS 0
#endif /* OPT_ISO_COLORS */
#if OPT_AIX_COLORS
#define if_OPT_AIX_COLORS(screen, code) if(screen->colorMode) code
#else
#define if_OPT_AIX_COLORS(screen, code) /* nothing */
#endif
#if OPT_256_COLORS || OPT_88_COLORS
# define if_OPT_EXT_COLORS(screen, code) if(screen->colorMode) code
# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) /* nothing */
#elif OPT_ISO_COLORS
# define if_OPT_EXT_COLORS(screen, code) /* nothing */
# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) if(screen->colorMode) code
#else
# define if_OPT_EXT_COLORS(screen, code) /* nothing */
# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) /*nothing*/
#endif
#if OPT_COLOR_RES
#define COLOR_RES(name,offset,value) Sres(name, XtCForeground, offset.resource, value)
#else
#define COLOR_RES(name,offset,value) Cres(name, offset, value)
#endif
/***====================================================================***/
#if OPT_DEC_CHRSET
#define if_OPT_DEC_CHRSET(code) code
/* Use 2 bits for encoding the double high/wide sense of characters */
#define CSET_SWL 0
#define CSET_DHL_TOP 1
#define CSET_DHL_BOT 2
#define CSET_DWL 3
#define NUM_CHRSET 8 /* normal/bold and 4 CSET_xxx values */
/* Use remaining bits for encoding the other character-sets */
#define CSET_NORMAL(code) ((code) == CSET_SWL)
#define CSET_DOUBLE(code) (!CSET_NORMAL(code) && !CSET_EXTEND(code))
#define CSET_EXTEND(code) ((code) > CSET_DWL)
/* for doublesize characters, the first cell in a row holds the info */
#define SCRN_ROW_CSET(screen,row) (SCRN_BUF_CSETS((screen), row)[0])
#define CurMaxCol(screen, row) \
(CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \
? (screen->max_col / 2) \
: (screen->max_col))
#define CurCursorX(screen, row, col) \
(CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \
? CursorX(screen, 2*(col)) \
: CursorX(screen, (col)))
#define CurFontWidth(screen, row) \
(CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \
? 2*FontWidth(screen) \
: FontWidth(screen))
#else
#define if_OPT_DEC_CHRSET(code) /*nothing*/
#define CurMaxCol(screen, row) screen->max_col
#define CurCursorX(screen, row, col) CursorX(screen, col)
#define CurFontWidth(screen, row) FontWidth(screen)
#endif
/* the number of pointers per row in 'ScrnBuf' */
#if OPT_ISO_COLORS || OPT_DEC_CHRSET || OPT_WIDE_CHARS
#define MAX_PTRS term->num_ptrs
#else
#define MAX_PTRS (OFF_ATTRS+1)
#endif
#define BUF_HEAD 1
/* the number that point to Char data */
#define BUF_PTRS (MAX_PTRS - BUF_HEAD)
/***====================================================================***/
#if OPT_EBCDIC
extern int E2A(int);
extern int A2E(int);
extern char CONTROL(char);
#else
#define E2A(a) (a)
#define A2E(a) (a)
#define CONTROL(a) ((a)&037)
#endif
/***====================================================================***/
#if OPT_TEK4014
#define TEK4014_ACTIVE(screen) ((screen)->TekEmu)
#define CURRENT_EMU_VAL(screen,tek,vt) (TEK4014_ACTIVE(screen) ? tek : vt)
#define CURRENT_EMU(screen) CURRENT_EMU_VAL(screen, (Widget)tekWidget, (Widget)term)
#else
#define TEK4014_ACTIVE(screen) 0
#define CURRENT_EMU_VAL(screen,tek,vt) (vt)
#define CURRENT_EMU(screen) ((Widget)term)
#endif
/***====================================================================***/
#if OPT_TOOLBAR
#define SHELL_OF(widget) XtParent(XtParent(widget))
#else
#define SHELL_OF(widget) XtParent(widget)
#endif
/***====================================================================***/
#if OPT_VT52_MODE
#define if_OPT_VT52_MODE(screen, code) if(screen->ansi_level == 0) code
#else
#define if_OPT_VT52_MODE(screen, code) /* nothing */
#endif
/***====================================================================***/
#if OPT_XMC_GLITCH
#define if_OPT_XMC_GLITCH(screen, code) if(screen->xmc_glitch) code
#define XMC_GLITCH 1 /* the character we'll show */
#define XMC_FLAGS (INVERSE|UNDERLINE|BOLD)
#else
#define if_OPT_XMC_GLITCH(screen, code) /* nothing */
#endif
/***====================================================================***/
#if OPT_WIDE_CHARS
#define if_OPT_WIDE_CHARS(screen, code) if(screen->wide_chars) code
#define PAIRED_CHARS(a,b) a,b
typedef unsigned IChar; /* for 8 or 16-bit characters, plus flag */
#else
#define if_OPT_WIDE_CHARS(screen, code) /* nothing */
#define PAIRED_CHARS(a,b) a
typedef unsigned char IChar; /* for 8-bit characters */
#endif
/***====================================================================***/
#define BUF_SIZE 4096
typedef struct {
int cnt; /* number of chars left to process */
IChar * ptr; /* pointer into decoded data */
Char buf[BUF_SIZE]; /* we read directly into this */
#if OPT_WIDE_CHARS
IChar buf2[BUF_SIZE]; /* ...and may decode into this */
#define DecodedData(data) (data)->buf2
#else
#define DecodedData(data) (data)->buf
#endif
} PtyData;
/***====================================================================***/
#if OPT_TRACE
#include <trace.h>
#else
#define TRACE(p) /*nothing*/
#define TRACE_CHILD /*nothing*/
#endif
/***====================================================================***/
/* The order of ifdef's matches the logic for num_ptrs in VTInitialize */
typedef enum {
OFF_FLAGS = 0 /* BUF_HEAD */
, OFF_CHARS = 1
, OFF_ATTRS = 2
#if OPT_ISO_COLORS
#if OPT_256_COLORS || OPT_88_COLORS
, OFF_FGRND
, OFF_BGRND
#else
, OFF_COLOR
#endif
#endif
#if OPT_DEC_CHRSET
, OFF_CSETS
#endif
#if OPT_WIDE_CHARS
, OFF_WIDEC
#endif
} BufOffsets;
/* ScrnBuf-level macros */
#define BUF_FLAGS(buf, row) (buf[MAX_PTRS * (row) + OFF_FLAGS])
#define BUF_CHARS(buf, row) (buf[MAX_PTRS * (row) + OFF_CHARS])
#define BUF_ATTRS(buf, row) (buf[MAX_PTRS * (row) + OFF_ATTRS])
#define BUF_COLOR(buf, row) (buf[MAX_PTRS * (row) + OFF_COLOR])
#define BUF_FGRND(buf, row) (buf[MAX_PTRS * (row) + OFF_FGRND])
#define BUF_BGRND(buf, row) (buf[MAX_PTRS * (row) + OFF_BGRND])
#define BUF_CSETS(buf, row) (buf[MAX_PTRS * (row) + OFF_CSETS])
#define BUF_WIDEC(buf, row) (buf[MAX_PTRS * (row) + OFF_WIDEC])
/* TScreen-level macros */
#define SCRN_BUF_FLAGS(screen, row) BUF_FLAGS(screen->visbuf, row)
#define SCRN_BUF_CHARS(screen, row) BUF_CHARS(screen->visbuf, row)
#define SCRN_BUF_ATTRS(screen, row) BUF_ATTRS(screen->visbuf, row)
#define SCRN_BUF_COLOR(screen, row) BUF_COLOR(screen->visbuf, row)
#define SCRN_BUF_FGRND(screen, row) BUF_FGRND(screen->visbuf, row)
#define SCRN_BUF_BGRND(screen, row) BUF_BGRND(screen->visbuf, row)
#define SCRN_BUF_CSETS(screen, row) BUF_CSETS(screen->visbuf, row)
#define SCRN_BUF_WIDEC(screen, row) BUF_WIDEC(screen->visbuf, row)
typedef struct {
unsigned chrset;
unsigned flags;
XFontStruct * fs;
GC gc;
char * fn;
} XTermFonts;
/* indices into save_modes[] */
typedef enum {
DP_DECCKM,
DP_DECANM,
DP_DECCOLM, /* IN132COLUMNS */
DP_DECSCLM,
DP_DECSCNM,
DP_DECOM,
DP_DECAWM,
DP_DECARM,
DP_X_X10MSE,
DP_DECPFF,
DP_DECPEX,
DP_DECTCEM,
DP_DECTEK,
DP_X_DECCOLM,
DP_X_MORE,
DP_X_MARGIN,
DP_X_REVWRAP,
DP_X_LOGGING,
DP_X_ALTSCRN,
DP_DECBKM,
DP_X_MOUSE,
DP_LAST
} SaveModes;
#define DoSM(code,value) screen->save_modes[code] = value
#define DoRM(code,value) value = screen->save_modes[code]
/* index into vt_shell[] or tek_shell[] */
typedef enum {
mainMenu,
vtMenu,
fontMenu,
tekMenu
} MenuIndex;
#define NUM_POPUP_MENUS 4
#if OPT_COLOR_RES
typedef struct {
String resource;
Pixel value;
int mode;
} ColorRes;
#else
#define ColorRes Pixel
#endif
typedef struct {
unsigned which; /* must have NCOLORS bits */
Pixel colors[NCOLORS];
char *names[NCOLORS];
} ScrnColors;
typedef struct {
Boolean saved;
int row;
int col;
unsigned flags; /* VTxxx saves graphics rendition */
char curgl;
char curgr;
char gsets[4];
#if OPT_ISO_COLORS
int cur_foreground; /* current foreground color */
int cur_background; /* current background color */
int sgr_foreground; /* current SGR foreground color */
Boolean sgr_extended; /* SGR set with extended codes? */
#endif
} SavedCursor;
struct _vtwin {
Window window; /* X window id */
int width; /* width of columns */
int height; /* height of rows */
int fullwidth; /* full width of window */
int fullheight; /* full height of window */
int f_width; /* width of fonts in pixels */
int f_height; /* height of fonts in pixels */
int scrollbar; /* if > 0, width of scrollbar, */
/* and scrollbar is showing */
GC normalGC; /* normal painting */
GC reverseGC; /* reverse painting */
GC normalboldGC; /* normal painting, bold font */
GC reverseboldGC; /* reverse painting, bold font */
#if OPT_TOOLBAR
Widget menu_bar; /* toolbar, if initialized */
Dimension menu_height; /* ...and its height */
#endif
};
struct _tekwin {
Window window; /* X window id */
int width; /* width of columns */
int height; /* height of rows */
int fullwidth; /* full width of window */
int fullheight; /* full height of window */
double tekscale; /* scale factor Tek -> vs100 */
};
typedef struct {
/* These parameters apply to both windows */
Display *display; /* X display for screen */
int respond; /* socket for responses
(position report, etc.) */
#ifdef AMOEBA
capability proccap; /* process capability */
struct circbuf *tty_inq; /* tty server input queue */
struct circbuf *tty_outq; /* tty server output queue */
#endif
long pid; /* pid of process on far side */
int uid; /* user id of actual person */
int gid; /* group id of actual person */
GC cursorGC; /* normal cursor painting */
GC fillCursorGC; /* special cursor painting */
GC reversecursorGC;/* reverse cursor painting */
GC cursoroutlineGC;/* for painting lines around */
Pixel foreground; /* foreground color */
Pixel cursorcolor; /* Cursor color */
Pixel mousecolor; /* Mouse color */
Pixel mousecolorback; /* Mouse color background */
#if OPT_ISO_COLORS
ColorRes Acolors[MAXCOLORS]; /* ANSI color emulation */
Boolean boldColors; /* can we make bold colors? */
Boolean colorMode; /* are we using color mode? */
Boolean colorULMode; /* use color for underline? */
Boolean colorBDMode; /* use color for bold? */
Boolean colorBLMode; /* use color for blink? */
Boolean colorAttrMode; /* prefer colorUL/BD to SGR */
#endif
#if OPT_HIGHLIGHT_COLOR
Pixel highlightcolor; /* Highlight background color */
#endif
#if OPT_DEC_CHRSET
Boolean font_doublesize;/* enable font-scaling */
int cache_doublesize;/* limit of our cache */
Char cur_chrset; /* character-set index & code */
int fonts_used; /* count items in double_fonts */
XTermFonts double_fonts[NUM_CHRSET];
#endif
#if OPT_WIDE_CHARS
Boolean wide_chars; /* true when 16-bit chars */
int utf8_mode; /* use UTF-8 decode/encode: 0-2 */
int utf_count; /* state of utf_char */
IChar utf_char; /* in-progress character */
#endif
int border; /* inner border */
Cursor arrow; /* arrow cursor */
unsigned long event_mask;
unsigned short send_mouse_pos; /* user wants mouse transition */
/* and position information */
#if OPT_DEC_LOCATOR
Boolean locator_reset; /* turn mouse off after 1 report? */
Boolean locator_pixels; /* report in pixels? */
/* if false, report in cells */
unsigned short locator_events; /* what events to report */
Boolean loc_filter; /* is filter rectangle active? */
int loc_filter_top; /* filter rectangle for DEC Locator */
int loc_filter_left;
int loc_filter_bottom;
int loc_filter_right;
#endif /* OPT_DEC_LOCATOR */
int mouse_button; /* current button pressed */
int mouse_row; /* ...and its row */
int mouse_col; /* ...and its column */
int select; /* xterm selected */
Boolean visualbell; /* visual bell mode */
Boolean allowSendEvents;/* SendEvent mode */
Boolean awaitInput; /* select-timeout mode */
Boolean grabbedKbd; /* keyboard is grabbed */
#ifdef ALLOWLOGGING
int logging; /* logging mode */
int logfd; /* file descriptor of log */
char *logfile; /* log file name */
IChar *logstart; /* current start of log buffer */
#endif
int inhibit; /* flags for inhibiting changes */
/* VT window parameters */
Boolean Vshow; /* VT window showing */
struct _vtwin fullVwin;
#ifndef NO_ACTIVE_ICON
struct _vtwin iconVwin;
struct _vtwin * whichVwin;
#endif /* NO_ACTIVE_ICON */
Cursor pointer_cursor; /* pointer cursor in window */
String answer_back; /* response to ENQ */
String printer_command; /* pipe/shell command string */
Boolean printer_autoclose; /* close printer when offline */
Boolean printer_extent; /* print complete page */
Boolean printer_formfeed; /* print formfeed per function */
int printer_controlmode; /* 0=off, 1=auto, 2=controller */
#if OPT_PRINT_COLORS
int print_attributes; /* 0=off, 1=normal, 2=color */
#endif
Boolean fnt_prop; /* true if proportional fonts */
Boolean fnt_boxes; /* true if font has box-chars */
Boolean force_box_chars; /* true if we assume that */
Dimension fnt_wide;
Dimension fnt_high;
XFontStruct *fnt_norm; /* normal font of terminal */
XFontStruct *fnt_bold; /* bold font of terminal */
#ifndef NO_ACTIVE_ICON
XFontStruct *fnt_icon; /* icon font */
#endif /* NO_ACTIVE_ICON */
int enbolden; /* overstrike for bold font */
XPoint *box; /* draw unselected cursor */
int cursor_state; /* ON, OFF, or BLINKED_OFF */
#if OPT_BLINK_CURS
Boolean cursor_blink; /* cursor blink enable */
int cursor_on; /* cursor on time (msecs) */
int cursor_off; /* cursor off time (msecs) */
XtIntervalId cursor_timer; /* timer-id for cursor-proc */
#endif
int cursor_set; /* requested state */
int cursor_col; /* previous cursor column */
int cursor_row; /* previous cursor row */
int cur_col; /* current cursor column */
int cur_row; /* current cursor row */
int max_col; /* rightmost column */