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
|
/*
* $XConsortium: ptyx.h /main/66 1995/12/09 08:58:41 kaleb $
* $Id: ptyx.h,v 6.2 1996/07/02 05:01:31 kagotani Rel $
*/
#ifdef KTERM
#include "kterm.h"
#endif /* KTERM */
/*
* 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.
*/
/* 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>
/* Extra Xlib definitions */
#define AllButtonsUp(detail, ignore) (\
((ignore) == Button1) ? \
(((detail)&(Button2Mask|Button3Mask)) == 0) \
: \
(((ignore) == Button2) ? \
(((detail)&(Button1Mask|Button3Mask)) == 0) \
: \
(((detail)&(Button1Mask|Button2Mask)) == 0)) \
)
#define MAX_COLS 200
#define MAX_ROWS 128
/*
** 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
#ifdef hpux
#define PTYDEV "/dev/ptym/ptyxx"
#else /* !hpux */
#ifndef __osf__
#define PTYDEV "/dev/ptyxx"
#endif
#endif /* !hpux */
#endif /* !PTYDEV */
#ifndef TTYDEV
#ifdef hpux
#define TTYDEV "/dev/pty/ttyxx"
#else /* !hpux */
#ifdef __osf__
#define TTYDEV "/dev/ttydirs/xxx/xxxxxxxxxxxxxx"
#else
#define TTYDEV "/dev/ttyxx"
#endif
#endif /* !hpux */
#endif /* !TTYDEV */
#ifndef PTYCHAR1
#ifdef hpux
#define PTYCHAR1 "zyxwvutsrqp"
#else /* !hpux */
#define PTYCHAR1 "pqrstuvwxyzPQRSTUVWXYZ"
#endif /* !hpux */
#endif /* !PTYCHAR1 */
#ifndef PTYCHAR2
#ifdef hpux
#define PTYCHAR2 "fedcba9876543210"
#else /* !hpux */
#ifdef __FreeBSD__
#define PTYCHAR2 "0123456789abcdefghijklmnopqrstuv"
#else
#define PTYCHAR2 "0123456789abcdef"
#endif
#endif /* !hpux */
#endif /* !PTYCHAR2 */
#ifndef TTYFORMAT
#ifdef CRAY
#define TTYFORMAT "/dev/ttyp%03d"
#else
#define TTYFORMAT "/dev/ttyp%d"
#endif
#endif
#ifndef PTYFORMAT
#ifdef CRAY
#define PTYFORMAT "/dev/pty/%03d"
#else
#define PTYFORMAT "/dev/ptyp%d"
#endif
#endif
#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 */
#ifdef KTERM
#include "gset.h" /* uses Boolean and Char */
#endif /* KTERM */
#ifdef KTERM
typedef struct {
Char gset;
Char code;
# ifdef KTERM_COLOR
unsigned short attr;
# else /* !KTERM_COLOR */
Char attr;
# endif /* !KTERM_COLOR */
} Bchr; /* char for screen buffers */
typedef Bchr **ScrnBuf;
typedef struct {
Char gset;
Char code;
} Ichr; /* char for interchanging with other processes */
#else /* !KTERM */
typedef Char **ScrnBuf;
#endif /* !KTERM */
/*
* ANSI emulation.
*/
#define INQ 0x05
#define FF 0x0C /* C0, C1 control names */
#define LS1 0x0E
#define LS0 0x0F
#define CAN 0x18
#define SUB 0x1A
#define ESC 0x1B
#define US 0x1F
#define DEL 0x7F
#define HTS ('H'+0x40)
#define SS2 0x8E
#define SS3 0x8F
#define DCS 0x90
#define OLDID 0x9A /* ESC Z */
#define CSI 0x9B
#define ST 0x9C
#define OSC 0x9D
#define PM 0x9E
#define APC 0x9F
#define RDEL 0xFF
#define NMENUFONTS 9 /* entries in fontMenu */
#define NBOX 5 /* Number of Points in box */
#define NPARAM 10 /* Max. parameters */
#define MINHILITE 32
typedef struct {
unsigned char a_type;
unsigned char a_pintro;
unsigned char a_final;
unsigned char a_inters;
char a_nparam; /* # of parameters */
char a_dflt[NPARAM]; /* Default value flags */
short a_param[NPARAM]; /* Parameters */
char a_nastyf; /* Error flag */
} ANSI;
typedef struct {
int row;
int col;
unsigned flags; /* Vt100 saves graphics rendition. Ugh! */
char curgl;
char curgr;
#ifdef KTERM
Char gsets[4];
#else /* !KTERM */
char gsets[4];
#endif /* !KTERM */
} SavedCursor;
#ifndef KTERM_NOTEK
#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;
#endif /* !KTERM_NOTEK */
#define SAVELINES 64 /* default # lines to save */
#define SCROLLLINES 1 /* default # lines to scroll */
#ifdef KTERM
# define LINESPACE 0 /* default space between lines */
#endif /* KTERM */
#ifdef KTERM_XIM
# define EUCJPLOCALE "ja_JP.eucJP,ja_JP.ujis,ja_JP.EUC,japanese.euc,Japanese-EUC,ja,japan"
#endif /* KTERM_XIM */
typedef struct {
/* These parameters apply to both windows */
Display *display; /* X display for screen */
int respond; /* socket for responses
(position report, etc.) */
long pid; /* pid of process on far side */
int uid; /* user id of actual person */
int gid; /* group id of actual person */
#ifdef KTERM
GC _normalGC[FCNT];
GC _reverseGC[FCNT];
GC _normalboldGC[FCNT];
GC _reverseboldGC[FCNT];
GC _cursorGC[FCNT];
GC _reversecursorGC[FCNT];
# define normalGC _normalGC[fnum]
# define reverseGC _reverseGC[fnum]
# define normalboldGC _normalboldGC[fnum]
# define reverseboldGC _reverseboldGC[fnum]
# define cursorGC _cursorGC[fnum]
# define reversecursorGC _reversecursorGC[fnum]
#else /* !KTERM */
GC normalGC; /* normal painting */
GC reverseGC; /* reverse painting */
GC normalboldGC; /* normal painting, bold font */
GC reverseboldGC; /* reverse painting, bold font */
GC cursorGC; /* normal cursor painting */
GC reversecursorGC;/* reverse cursor painting */
#endif /* !KTERM */
GC cursoroutlineGC;/* for painting lines around */
Pixel foreground; /* foreground color */
Pixel cursorcolor; /* Cursor color */
Pixel mousecolor; /* Mouse color */
Pixel mousecolorback; /* Mouse color background */
#ifdef KTERM_COLOR
Pixel textcolor[8]; /* text colors */
#endif /* KTERM_COLOR */
int border; /* inner border */
Cursor arrow; /* arrow cursor */
unsigned short send_mouse_pos; /* user wants mouse transition */
/* and position information */
int select; /* xterm selected */
Boolean visualbell; /* visual bell mode */
Boolean allowSendEvents;/* SendEvent mode */
Boolean grabbedKbd; /* keyboard is grabbed */
#ifdef ALLOWLOGGING
int logging; /* logging mode */
int logfd; /* file descriptor of log */
char *logfile; /* log file name */
unsigned char *logstart; /* current start of log buffer */
#endif
int inhibit; /* flags for inhibiting changes */
/* VT window parameters */
struct {
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 */
} fullVwin;
Cursor pointer_cursor; /* pointer cursor in window */
/* Terminal fonts must be of the same size and of fixed width */
#ifdef KTERM
XFontStruct *_fnt_norm[FCNT];
XFontStruct *_fnt_bold[FCNT];
XPoint *_box[FCNT];
# define fnt_norm _fnt_norm[fnum]
# define fnt_bold _fnt_bold[fnum]
# define box _box[fnum]
int linespace; /* space between lines */
int max_ascent;
int max_descent;
Pixmap *graphics;
#else /* !KTERM */
XFontStruct *fnt_norm; /* normal font of terminal */
XFontStruct *fnt_bold; /* bold font of terminal */
int enbolden; /* overstrike for bold font */
XPoint *box; /* draw unselected cursor */
#endif /* !KTERM */
int cursor_state; /* ON or OFF */
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 */
int max_row; /* bottom row */
int top_marg; /* top line of scrolling region */
int bot_marg; /* bottom line of " " */
Widget scrollWidget; /* pointer to scrollbar struct */
int scrollbar; /* if > 0, width of scrollbar, and
scrollbar is showing */
int topline; /* line number of top, <= 0 */
int savedlines; /* number of lines that've been saved */
int savelines; /* number of lines off top to save */
int scrolllines; /* number of lines to button scroll */
Boolean scrollttyoutput; /* scroll to bottom on tty output */
Boolean scrollkey; /* scroll to bottom on key */
ScrnBuf buf; /* ptr to visible screen buf (main) */
ScrnBuf allbuf; /* screen buffer (may include
lines scrolled off top) */
char *sbuf_address; /* main screen memory address */
ScrnBuf altbuf; /* alternate screen buffer */
char *abuf_address; /* alternate screen memory address */
Boolean alternate; /* true if using alternate buf */
unsigned short do_wrap; /* true if cursor in last column
and character just output */
int incopy; /* 0 idle; 1 XCopyArea issued;
-1 first GraphicsExpose seen,
but last not seen */
int copy_src_x; /* params from last XCopyArea ... */
int copy_src_y;
unsigned int copy_width;
unsigned int copy_height;
int copy_dest_x;
int copy_dest_y;
Boolean c132; /* allow change to 132 columns */
Boolean curses; /* kludge line wrap for more */
Boolean hp_ll_bc; /* kludge HP-style ll for xdb */
Boolean marginbell; /* true if margin bell on */
int nmarginbell; /* columns from right margin */
int bellarmed; /* cursor below bell margin */
Boolean multiscroll; /* true if multi-scroll */
int scrolls; /* outstanding scroll count,
used only with multiscroll */
SavedCursor sc; /* data for restore cursor */
int save_modes[19]; /* save dec private modes */
#ifdef STATUSLINE
int statusheight; /* status line height */
Boolean instatus; /* cursor in status line */
SavedCursor statussc; /* status line restore cursor */
Boolean reversestatus; /* status line reversed */
#endif /* STATUSLINE */
/* Improved VT100 emulation stuff. */
#ifdef KTERM
Char gsets[4]; /* G0 through G3. */
#else /* !KTERM */
char gsets[4]; /* G0 through G3. */
#endif /* !KTERM */
char curgl; /* Current GL setting. */
char curgr; /* Current GR setting. */
char curss; /* Current single shift. */
int scroll_amt; /* amount to scroll */
int refresh_amt; /* amount to refresh */
Boolean jumpscroll; /* whether we should jumpscroll */
Boolean always_highlight; /* whether to highlight cursor */
#ifndef KTERM_NOTEK
/* Tektronix window parameters */
GC TnormalGC; /* normal painting */
GC TcursorGC; /* normal cursor painting */
Pixel Tforeground; /* foreground color */
Pixel Tbackground; /* Background color */
Pixel Tcursorcolor; /* Cursor color */
int Tcolor; /* colors used */
Boolean Vshow; /* VT window showing */
Boolean Tshow; /* Tek window showing */
Boolean waitrefresh; /* postpone refresh */
struct {
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 */
} fullTwin;
int xorplane; /* z plane for inverts */
GC linepat[TEKNUMLINES]; /* line patterns */
Boolean TekEmu; /* true if Tektronix emulation */
int cur_X; /* current x */
int cur_Y; /* current y */
Tmodes cur; /* current tek modes */
Tmodes page; /* starting tek modes on page */
int margin; /* 0 -> margin 1, 1 -> margin 2 */
int pen; /* current Tektronix pen 0=up, 1=dn */
char *TekGIN; /* nonzero if Tektronix GIN mode*/
int gin_terminator; /* Tek strap option */
#endif /* !KTERM_NOTEK */
int multiClickTime; /* time between multiclick selects */
int bellSuppressTime; /* msecs after Bell before another allowed */
Boolean bellInProgress; /* still ringing/flashing prev bell? */
char *charClass; /* for overriding word selection */
Boolean cutNewline; /* whether or not line cut has \n */
Boolean cutToBeginningOfLine; /* line cuts to BOL? */
#ifdef KTERM
Ichr *selection; /* the current selection */
#else /* !KTERM */
char *selection; /* the current selection */
#endif /* !KTERM */
int selection_size; /* size of allocated buffer */
int selection_length; /* number of significant bytes */
Time selection_time; /* latest event timestamp */
int startHRow, startHCol, /* highlighted text */
endHRow, endHCol,
startHCoord, endHCoord;
Atom* selection_atoms; /* which selections we own */
Cardinal sel_atoms_size; /* how many atoms allocated */
Cardinal selection_count; /* how many atoms in use */
Boolean input_eight_bits;/* use 8th bit instead of ESC prefix */
Boolean output_eight_bits; /* honor all bits or strip */
Pixmap menu_item_bitmap; /* mask for checking items */
#ifdef KTERM_NOTEK
Widget mainMenu, vtMenu, fontMenu;
#else /* !KTERM_NOTEK */
Widget mainMenu, vtMenu, tekMenu, fontMenu;
#endif /* !KTERM_NOTEK */
#ifdef KTERM
Boolean dynamic_font_load; /* load fonts on demand */
char* menu_font_list[NMENUFONTS];
char* menu_bfont_list[NMENUFONTS];
char* _menu_font_names[FCNT][NMENUFONTS];
char* _menu_bfont_names[FCNT][NMENUFONTS];
# define menu_font_names _menu_font_names[fnum]
# define menu_bfont_names _menu_bfont_names[fnum]
#else /* !KTERM */
char* menu_font_names[NMENUFONTS];
#endif /* !KTERM */
int menu_font_number;
XIC xic;
#ifdef KTERM_XIM
XIMStyle xicstyle;
XFontSet xicfontset;
Boolean imregistered;
#ifdef INTHEFUTURE
Boolean imserverdied;
char **modifier_list;
#endif
#endif /* KTERM_XIM */
} TScreen;
#ifndef KTERM_NOTEK
typedef struct _TekPart {
XFontStruct *Tfont[TEKNUMFONTS];
int tobaseline[TEKNUMFONTS]; /* top to baseline for each font */
char *initial_font; /* large, 2, 3, small */
char *gin_terminator_str; /* ginTerminator resource */
} TekPart;
#endif /* !KTERM_NOTEK */
/* meaning of bits in screen.select flag */
#define INWINDOW 01 /* the mouse is in one of the windows */
#define FOCUS 02 /* one of the windows is the focus window */
#define MULTICLICKTIME 250 /* milliseconds */
typedef struct
{
unsigned flags;
} TKeyboard;
typedef struct _Misc {
char *geo_metry;
char *T_geometry;
#ifndef KTERM
char *f_n;
char *f_b;
#endif /* !KTERM */
#ifdef ALLOWLOGGING
Boolean log_on;
#endif
Boolean login_shell;
Boolean re_verse;
int resizeGravity;
Boolean reverseWrap;
Boolean autoWrap;
Boolean logInhibit;
Boolean signalInhibit;
#ifndef KTERM_NOTEK
Boolean tekInhibit;
#endif /* !KTERM_NOTEK */
Boolean scrollbar;
Boolean titeInhibit;
#ifndef KTERM_NOTEK
Boolean tekSmall; /* start tek window in small size */
#endif /* !KTERM_NOTEK */
Boolean appcursorDefault;
Boolean appkeypadDefault;
#ifdef KTERM_KANJIMODE
char *k_m;
#endif /* KTERM_KANJIMODE */
#ifdef KTERM_XIM
char* eucjp_locale;
#endif /* !KTERM_XIM */
char* input_method;
char* preedit_type;
Boolean open_im;
Boolean shared_ic;
#ifdef STATUSLINE
Boolean statusline;
Boolean statusnormal;
#endif /* STATUSLINE */
} Misc;
#ifdef KTERM_NOTEK
typedef struct {int foo;} XtermClassPart;
#else /* !KTERM_NOTEK */
typedef struct {int foo;} XtermClassPart, TekClassPart;
#endif /* !KTERM_NOTEK */
typedef struct _XtermClassRec {
CoreClassPart core_class;
XtermClassPart xterm_class;
} XtermClassRec;
#ifndef KTERM_NOTEK
typedef struct _TekClassRec {
CoreClassPart core_class;
TekClassPart tek_class;
} TekClassRec;
#endif /* !KTERM_NOTEK */
/* define masks for flags */
#define CAPS_LOCK 0x01
#define KYPD_APL 0x02
#define CURSOR_APL 0x04
#define N_MARGINBELL 10
#define MAX_TABS 320
#define TAB_ARRAY_SIZE 10 /* number of ints to provide MAX_TABS bits */
typedef unsigned Tabs [TAB_ARRAY_SIZE];
typedef struct _XtermWidgetRec {
CorePart core;
TKeyboard keyboard; /* terminal keyboard */
TScreen screen; /* terminal screen */
unsigned flags; /* mode flags */
unsigned initflags; /* initial mode flags */
Tabs tabs; /* tabstops of the terminal */
Misc misc; /* miscellaneous parameters */
} XtermWidgetRec, *XtermWidget;
#ifndef KTERM_NOTEK
typedef struct _TekWidgetRec {
CorePart core;
TekPart tek;
} TekWidgetRec, *TekWidget;
#endif /* !KTERM_NOTEK */
#define BUF_SIZE 4096
/*
* terminal flags
* There are actually two namespaces mixed together here.
* One is the set of flags that can go in screen->buf attributes
* and which must fit in a char.
* The other is the global setting stored in
* term->flags and screen->save_modes. This need only fit in an unsigned.
*/
#ifdef KTERM_COLOR
#define ATTRIBUTES 0xff07 /* mask: user-visible attributes */
#else /* !KTERM_COLOR */
#define ATTRIBUTES 0x07 /* mask: user-visible attributes */
#endif /* !KTERM_COLOR */
/* global flags and character flags (visible character attributes) */
#define INVERSE 0x01 /* invert the characters to be output */
#define UNDERLINE 0x02 /* true if underlining */
#define BOLD 0x04
/* character flags (internal attributes) */
#define LINEWRAPPED 0x08 /* used on the first character in a
* line to indicate that it wraps onto
* the next line so we can tell the
* difference between lines that have
* wrapped around and lines that have
* ended naturally with a CR at column
* max_col.
*/
#define CHARDRAWN 0x10 /* a character has been drawn here on the
screen. Used to distinguish blanks from
empty parts of the screen when selecting */
#ifdef KTERM_COLOR
#define FORECOLORED 0x0800
#define FORECOLORMASK 0x0700
#define FORECOLOR(c) ((c) << 8)
#define FORECOLORNUM(f) (((f) & FORECOLORMASK) >> 8)
#define BACKCOLORED 0x8000
#define BACKCOLORMASK 0x7000
#define BACKCOLOR(c) ((c) << 12)
#define BACKCOLORNUM(f) (((f) & BACKCOLORMASK) >> 12)
#endif /* KTERM_COLOR */
/* global flags */
#ifdef KTERM
#define WRAPAROUND 0x40000 /* true if auto wraparound mode */
#define REVERSEWRAP 0x80000 /* true if reverse wraparound mode */
#define REVERSE_VIDEO 0x100000 /* true if screen white on black */
#define LINEFEED 0x200000 /* true if in auto linefeed mode */
#define ORIGIN 0x400000 /* true if in origin mode */
#define INSERT 0x800000 /* true if in insert mode */
#define SMOOTHSCROLL 0x1000000 /* true if in smooth scroll mode */
#define IN132COLUMNS 0x2000000 /* true if in 132 column mode */
#ifdef KTERM_KANJIMODE
#define EUC_KANJI 0x4000000 /* true if in EUC mode */
#define SJIS_KANJI 0x8000000 /* true if in SJIS mode */
#endif /* KTERM_KANJIMODE */
#else /* !KTERM */
#define WRAPAROUND 0x400 /* true if auto wraparound mode */
#define REVERSEWRAP 0x800 /* true if reverse wraparound mode */
#define REVERSE_VIDEO 0x1000 /* true if screen white on black */
#define LINEFEED 0x2000 /* true if in auto linefeed mode */
#define ORIGIN 0x4000 /* true if in origin mode */
#define INSERT 0x8000 /* true if in insert mode */
#define SMOOTHSCROLL 0x10000 /* true if in smooth scroll mode */
#define IN132COLUMNS 0x20000 /* true if in 132 column mode */
#endif /* !KTERM */
#define VWindow(screen) (screen->fullVwin.window)
#define VShellWindow term->core.parent->core.window
#define TextWindow(screen) (screen->fullVwin.window)
#ifndef KTERM_NOTEK
#define TWindow(screen) (screen->fullTwin.window)
#define TShellWindow tekWidget->core.parent->core.window
#endif /* !KTERM_NOTEK */
#define Width(screen) (screen->fullVwin.width)
#define Height(screen) (screen->fullVwin.height)
#define FullWidth(screen) (screen->fullVwin.fullwidth)
#define FullHeight(screen) (screen->fullVwin.fullheight)
#define FontWidth(screen) (screen->fullVwin.f_width)
#ifdef KTERM
#define FontHeight(screen) (screen->fullVwin.f_height + screen->linespace)
#else /* !KTERM */
#define FontHeight(screen) (screen->fullVwin.f_height)
#endif /* !KTERM */
#ifndef KTERM_NOTEK
#define TWidth(screen) (screen->fullTwin.width)
#define THeight(screen) (screen->fullTwin.height)
#define TFullWidth(screen) (screen->fullTwin.fullwidth)
#define TFullHeight(screen) (screen->fullTwin.fullheight)
#define TekScale(screen) (screen->fullTwin.tekscale)
#endif /* !KTERM_NOTEK */
#define CursorX(screen,col) ((col) * FontWidth(screen) + screen->border \
+ screen->scrollbar)
#ifdef STATUSLINE
#define CursorY(screen,row) ((row)>screen->max_row \
? (row) * FontHeight(screen) + screen->border * 2 + 1 \
: ((row) - screen->topline) * FontHeight(screen) + screen->border)
#else /* !STATUSLINE */
#define CursorY(screen,row) ((((row) - screen->topline) * FontHeight(screen)) \
+ screen->border)
#endif /* !STATUSLINE */
#define TWINDOWEVENTS (KeyPressMask | ExposureMask | ButtonPressMask |\
ButtonReleaseMask | StructureNotifyMask |\
EnterWindowMask | LeaveWindowMask | FocusChangeMask)
#define WINDOWEVENTS (TWINDOWEVENTS | PointerMotionMask)
#ifndef KTERM_NOTEK
#define TEK_LINK_BLOCK_SIZE 1024
typedef struct Tek_Link
{
struct Tek_Link *next; /* pointer to next TekLink in list
NULL <=> this is last TekLink */
short fontsize; /* character size, 0-3 */
short count; /* number of chars in data */
char *ptr; /* current pointer into data */
char data [TEK_LINK_BLOCK_SIZE];
} TekLink;
#endif /* !KTERM_NOTEK */
/* flags for cursors */
#define OFF 0
#define ON 1
#define CLEAR 0
#define TOGGLE 1
/* flags for inhibit */
#ifdef ALLOWLOGGING
#define I_LOG 0x01
#endif
#define I_SIGNAL 0x02
#ifndef KTERM_NOTEK
#define I_TEK 0x04
#endif /* !KTERM_NOTEK */
extern Cursor make_colored_cursor();
extern int GetBytesAvailable();
extern void first_map_occurred();
extern int kill_process_group();
|