1: /*
   2:  * Copyright (c) 1980 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  *
   6:  *	@(#)ex_tty.h	7.5 (Berkeley) 5/31/85
   7:  */
   8: 
   9: /*
  10:  * Capabilities from termcap
  11:  *
  12:  * The description of terminals is a difficult business, and we only
  13:  * attempt to summarize the capabilities here;  for a full description
  14:  * see the paper describing termcap.
  15:  *
  16:  * Capabilities from termcap are of three kinds - string valued options,
  17:  * numeric valued options, and boolean options.  The string valued options
  18:  * are the most complicated, since they may include padding information,
  19:  * which we describe now.
  20:  *
  21:  * Intelligent terminals often require padding on intelligent operations
  22:  * at high (and sometimes even low) speed.  This is specified by
  23:  * a number before the string in the capability, and has meaning for the
  24:  * capabilities which have a P at the front of their comment.
  25:  * This normally is a number of milliseconds to pad the operation.
  26:  * In the current system which has no true programmible delays, we
  27:  * do this by sending a sequence of pad characters (normally nulls, but
  28:  * specifiable as "pc").  In some cases, the pad is better computed
  29:  * as some number of milliseconds times the number of affected lines
  30:  * (to bottom of screen usually, except when terminals have insert modes
  31:  * which will shift several lines.)  This is specified as '12*' e.g.
  32:  * before the capability to say 12 milliseconds per affected whatever
  33:  * (currently always line).  Capabilities where this makes sense say P*.
  34:  */
  35: var char    tspace[256];    /* Space for capability strings */
  36: var char    *aoftspace; /* Address of tspace for relocation */
  37: 
  38: var char    *AL;        /* P* Add new blank line */
  39: var char    *AL_PARM;   /* P* Add n new blank lines */
  40: extern  char    *BC;        /*    Back cursor */
  41: var char    *BT;        /* P  Back tab */
  42: var char    *CD;        /* P* Clear to end of display */
  43: var char    *CE;        /* P  Clear to end of line */
  44: var char    *CL;        /* P* Clear screen */
  45: var char    *CM;        /* PG Cursor motion */
  46: var char    *CS;        /* PG Change scrolling region (vt100) */
  47: var char    *xCR;       /* P  Carriage return */
  48: var char    *DC;        /* P* Delete character */
  49: var char    *DL;        /* P* Delete line sequence */
  50: var char    *DL_PARM;   /* P* Delete n lines */
  51: var char    *DM;        /*    Delete mode (enter)  */
  52: var char    *DO;        /*    Down line sequence */
  53: var char    *DOWN_PARM; /*    Down n lines */
  54: var char    *ED;        /*    End delete mode */
  55: var char    *EI;        /*    End insert mode */
  56: var char    *F0,*F1,*F2,*F3,*F4,*F5,*F6,*F7,*F8,*F9;
  57:                 /*    Strings sent by various function keys */
  58: var char    *HO;        /*    Home cursor */
  59: var char    *IC;        /* P  Insert character */
  60: var char    *IM;        /*    Insert mode (give as ':im=:' if 'ic' */
  61: var char    *IP;        /* P* Insert pad after char ins'd using IM+IE */
  62: var char    *KD;        /*    Keypad down arrow */
  63: var char    *KE;        /*    Keypad don't xmit */
  64: var char    *KH;        /*    Keypad home key */
  65: var char    *KL;        /*    Keypad left arrow */
  66: var char    *KR;        /*    Keypad right arrow */
  67: var char    *KS;        /*    Keypad start xmitting */
  68: var char    *KU;        /*    Keypad up arrow */
  69: var char    *LEFT_PARM; /*    Left n chars */
  70: var char    *LL;        /*    Quick to last line, column 0 */
  71: var char    *ND;        /*    Non-destructive space */
  72: var char    *RIGHT_PARM;    /*    Right n spaces */
  73: var char    *xNL;       /*    Line feed (new line) */
  74: extern  char    PC;     /*    Pad character */
  75: var char    *RC;        /*    Restore cursor from last SC */
  76: var char    *SC;        /*    Save cursor */
  77: var char    *SE;        /*    Standout end (may leave space) */
  78: var char    *SF;        /* P  Scroll forwards */
  79: var char    *SO;        /*    Stand out begin (may leave space) */
  80: var char    *SR;        /* P  Scroll backwards */
  81: var char    *TA;        /* P  Tab (other than ^I or with padding) */
  82: var char    *TE;        /*    Terminal end sequence */
  83: var char    *TI;        /*    Terminal initial sequence */
  84: extern  char    *UP;        /*    Upline */
  85: var char    *UP_PARM;   /*    Up n lines */
  86: var char    *VB;        /*    Visible bell */
  87: var char    *VE;        /*    Visual end sequence */
  88: var char    *VS;        /*    Visual start sequence */
  89: var bool    AM;     /* Automatic margins */
  90: var bool    BS;     /* Backspace works */
  91: var bool    CA;     /* Cursor addressible */
  92: var bool    DA;     /* Display may be retained above */
  93: var bool    DB;     /* Display may be retained below */
  94: var bool    EO;     /* Can erase overstrikes with ' ' */
  95: var bool    GT;     /* Gtty indicates tabs */
  96: var bool    HC;     /* Hard copy terminal */
  97: var bool    HZ;     /* Hazeltine ~ braindamage */
  98: var bool    IN;     /* Insert-null blessing */
  99: var bool    MI;     /* can move in insert mode */
 100: var bool    NC;     /* No Cr - \r snds \r\n then eats \n (dm2500) */
 101: var bool    NS;     /* No scroll - linefeed at bottom won't scroll */
 102: var bool    OS;     /* Overstrike works */
 103: var bool    UL;     /* Underlining works even though !os */
 104: var bool    XB;     /* Beehive (no escape key, simulate with f1) */
 105: var bool    XN;     /* A newline gets eaten after wrap (concept) */
 106: var bool    XT;     /* Tabs are destructive */
 107: var bool    XX;     /* Tektronix 4025 insert line */
 108:     /* X? is reserved for severely nauseous glitches */
 109:     /* If there are enough of these we may need bit masks! */
 110: 
 111: /*
 112:  * From the tty modes...
 113:  */
 114: var bool    NONL;       /* Terminal can't hack linefeeds doing a CR */
 115: var bool    UPPERCASE;  /* Ick! */
 116: extern  short   LINES;      /* Number of lines on screen */
 117: extern  short   COLUMNS;
 118: var short   OCOLUMNS;   /* Save COLUMNS for a hack in open mode */
 119: var struct winsize winsz;   /* Save window size for stopping comparisons */
 120: 
 121: var short   outcol;     /* Where the cursor is */
 122: var short   outline;
 123: 
 124: var short   destcol;    /* Where the cursor should be */
 125: var short   destline;
 126: 
 127: /*
 128:  * There are several kinds of tty drivers to contend with.  These include:
 129:  * (1)	V6:		no CBREAK, no ioctl.  (Include PWB V1 here).
 130:  * (2)	V7 research:	has CBREAK, has ioctl, and has the tchars (TIOCSETC)
 131:  *			business to change start, stop, etc. chars.
 132:  * (3)	USG V2:		Basically like V6 but RAW mode is like V7 RAW.
 133:  *			(We treat it as V6.)
 134:  * (4)	USG V3:		equivalent to V7 but totally incompatible.
 135:  * (5)  Berkeley:	has ltchars in addition to all of V7.
 136:  *
 137:  * The following attempts to decide what we are on, and declare
 138:  * some variables in the appropriate format.  The wierd looking one (ttymode)
 139:  * is the thing we pass to sTTY and family to turn "RAW" mode on or off
 140:  * when we go into or out of visual mode.  In V7/V6 it's just the flags word
 141:  * to stty.  In USG V3 it's the whole tty structure.
 142:  */
 143: #ifdef  USG3TTY         /* USG V3 */
 144:   var   struct  termio tty; /* Use this one structure to change modes */
 145:   typedef   struct termio ttymode;  /* Mode to contain tty flags */
 146: 
 147: #else               /* All others */
 148:   var   struct  sgttyb tty; /* Always stty/gtty using this one structure */
 149:   typedef   int ttymode;    /* Mode to contain tty flags */
 150: # ifdef     TIOCSETC    /* V7 */
 151:    var  struct  tchars ottyc, nttyc;    /* For V7 character masking */
 152: # endif
 153: # ifdef     TIOCLGET    /* Berkeley */
 154:    var  struct  ltchars olttyc, nlttyc; /* More of tchars style stuff */
 155: # endif
 156: 
 157: #endif
 158: 
 159: var ttymode normf;      /* Restore tty flags to this (someday) */
 160: var bool    normtty;    /* Have to restore normal mode from normf */
 161: 
 162: ttymode ostart(), setty(), unixex();
 163: 
 164: var short   costCM; /* # chars to output a typical CM, with padding etc. */
 165: var short   costSR; /* likewise for scroll reverse */
 166: var short   costAL; /* likewise for insert line */
 167: var short   costDP; /* likewise for DOWN_PARM */
 168: var short   costLP; /* likewise for LEFT_PARM */
 169: var short   costRP; /* likewise for RIGHT_PARM */
 170: 
 171: #ifdef VMUNIX
 172: # define MAXNOMACS  128 /* max number of macros of each kind */
 173: # define MAXCHARMACS    2048    /* max # of chars total in macros */
 174: #else
 175: # define MAXNOMACS  32  /* max number of macros of each kind */
 176: # define MAXCHARMACS    512 /* max # of chars total in macros */
 177: #endif
 178: struct maps {
 179:     char *cap;  /* pressing button that sends this.. */
 180:     char *mapto;    /* .. maps to this string */
 181:     char *descr;    /* legible description of key */
 182: };
 183: var struct maps arrows[MAXNOMACS];  /* macro defs - 1st 5 built in */
 184: var struct maps immacs[MAXNOMACS];  /* for while in insert mode */
 185: var struct maps abbrevs[MAXNOMACS]; /* for word abbreviations */
 186: var int ldisc;          /* line discipline for ucb tty driver */
 187: var char    mapspace[MAXCHARMACS];
 188: var char    *msnext;    /* next free location in mapspace */
 189: var int maphopcnt;  /* check for infinite mapping loops */
 190: var bool    anyabbrs;   /* true if abbr or unabbr has been done */
 191: var char    ttynbuf[20];    /* result of ttyname() */
 192: var int ttymesg;    /* original mode of users tty */

Defined variables

AL_PARM defined in line 39; used 4 times
BT defined in line 41; used 6 times
CD defined in line 42; used 7 times
CE defined in line 43; used 9 times
CM defined in line 45; used 6 times
CS defined in line 46; used 8 times
DC defined in line 48; used 4 times
DL defined in line 49; used 16 times
DL_PARM defined in line 50; used 4 times
DM defined in line 51; used 4 times
DO defined in line 52; used 1 times
DOWN_PARM defined in line 53; used 4 times
ED defined in line 54; used 3 times
EI defined in line 55; used 9 times
F0 defined in line 56; used 2 times
F1 defined in line 56; used 2 times
F2 defined in line 56; used 2 times
F3 defined in line 56; used 2 times
F4 defined in line 56; used 2 times
F5 defined in line 56; used 2 times
F6 defined in line 56; used 2 times
F7 defined in line 56; used 2 times
F8 defined in line 56; used 2 times
F9 defined in line 56; used 2 times
HO defined in line 58; used 3 times
IC defined in line 59; used 4 times
IM defined in line 60; used 11 times
IP defined in line 61; used 2 times
KD defined in line 62; used 2 times
KE defined in line 63; used 2 times
KH defined in line 64; used 2 times
KL defined in line 65; used 2 times
KR defined in line 66; used 4 times
KS defined in line 67; used 2 times
KU defined in line 68; used 2 times
LEFT_PARM defined in line 69; used 4 times
LL defined in line 70; used 3 times
ND defined in line 71; used 3 times
RC defined in line 75; used 5 times
RIGHT_PARM defined in line 72; used 4 times
SC defined in line 76; used 4 times
SE defined in line 77; used 10 times
SF defined in line 78; used 4 times
SO defined in line 79; used 10 times
SR defined in line 80; used 7 times
TA defined in line 81; used 5 times
TI defined in line 83; used 4 times
UP_PARM defined in line 85; used 3 times
VB defined in line 86; used 5 times
VE defined in line 87; used 2 times
VS defined in line 88; used 2 times
abbrevs defined in line 185; used 4 times
aoftspace defined in line 36; used 3 times
costAL defined in line 166; used 2 times
costCM defined in line 164; used 2 times
costDP defined in line 167; used 2 times
costLP defined in line 168; used 2 times
costRP defined in line 169; used 2 times
costSR defined in line 165; used 2 times
immacs defined in line 184; used 2 times
ldisc defined in line 186; used 4 times
maphopcnt defined in line 189; used 4 times
mapspace defined in line 187; used 2 times
msnext defined in line 188; used 12 times
nlttyc defined in line 154; used 7 times
nttyc defined in line 151; used 9 times
olttyc defined in line 154; used 5 times
ottyc defined in line 151; used 3 times
outcol defined in line 121; used 74 times
tspace defined in line 35; used 2 times
tty defined in line 148; used 61 times
ttymesg defined in line 192; used 2 times
ttynbuf defined in line 191; used 8 times
winsz defined in line 119; used 4 times
xCR defined in line 47; used 5 times
xNL defined in line 73; used 9 times

Defined struct's

maps defined in line 178; used 12 times

Defined typedef's

ttymode defined in line 145; used 18 times

Defined macros

MAXCHARMACS defined in line 176; used 2 times
MAXNOMACS defined in line 175; used 4 times

Usage of this include

Last modified: 1985-06-08
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1856
Valid CSS Valid XHTML 1.0 Strict