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: 
   7: #ifndef lint
   8: static char sccsid[] = "@(#)cr_tty.c	5.2 (Berkeley) 11/8/85";
   9: #endif not lint
  10: 
  11: /*
  12:  * Terminal initialization routines.
  13:  *
  14:  */
  15: 
  16: # include   "curses.ext"
  17: 
  18: static bool *sflags[] = {
  19:             &AM, &BS, &DA, &DB, &EO, &HC, &HZ, &IN, &MI,
  20:             &MS, &NC, &NS, &OS, &UL, &XB, &XN, &XT, &XS,
  21:             &XX
  22:         };
  23: 
  24: static char *_PC,
  25:         **sstrs[] = {
  26:             &AL, &BC, &BT, &CD, &CE, &CL, &CM, &CR, &CS,
  27:             &DC, &DL, &DM, &DO, &ED, &EI, &K0, &K1, &K2,
  28:             &K3, &K4, &K5, &K6, &K7, &K8, &K9, &HO, &IC,
  29:             &IM, &IP, &KD, &KE, &KH, &KL, &KR, &KS, &KU,
  30:             &LL, &MA, &ND, &NL, &_PC, &RC, &SC, &SE, &SF,
  31:             &SO, &SR, &TA, &TE, &TI, &UC, &UE, &UP, &US,
  32:             &VB, &VS, &VE, &AL_PARM, &DL_PARM, &UP_PARM,
  33:             &DOWN_PARM, &LEFT_PARM, &RIGHT_PARM,
  34:         },
  35:         *tgoto();
  36: 
  37: char        _tspace[2048];      /* Space for capability strings */
  38: 
  39: static char *aoftspace;     /* Address of _tspace for relocation */
  40: 
  41: static int  destcol, destline;
  42: 
  43: /*
  44:  *	This routine does terminal type initialization routines, and
  45:  * calculation of flags at entry.  It is almost entirely stolen from
  46:  * Bill Joy's ex version 2.6.
  47:  */
  48: short   ospeed = -1;
  49: 
  50: gettmode() {
  51: 
  52:     if (gtty(_tty_ch, &_tty) < 0)
  53:         return;
  54:     savetty();
  55:     if (stty(_tty_ch, &_tty) < 0)
  56:         _tty.sg_flags = _res_flg;
  57:     ospeed = _tty.sg_ospeed;
  58:     _res_flg = _tty.sg_flags;
  59:     UPPERCASE = (_tty.sg_flags & LCASE) != 0;
  60:     GT = ((_tty.sg_flags & XTABS) == 0);
  61:     NONL = ((_tty.sg_flags & CRMOD) == 0);
  62:     _tty.sg_flags &= ~XTABS;
  63:     stty(_tty_ch, &_tty);
  64: # ifdef DEBUG
  65:     fprintf(outf, "GETTMODE: UPPERCASE = %s\n", UPPERCASE ? "TRUE":"FALSE");
  66:     fprintf(outf, "GETTMODE: GT = %s\n", GT ? "TRUE" : "FALSE");
  67:     fprintf(outf, "GETTMODE: NONL = %s\n", NONL ? "TRUE" : "FALSE");
  68:     fprintf(outf, "GETTMODE: ospeed = %d\n", ospeed);
  69: # endif
  70: }
  71: 
  72: setterm(type)
  73: reg char    *type; {
  74: 
  75:     reg int     unknown;
  76:     static char genbuf[1024];
  77: # ifdef TIOCGWINSZ
  78:     struct winsize win;
  79: # endif
  80: 
  81: # ifdef DEBUG
  82:     fprintf(outf, "SETTERM(\"%s\")\n", type);
  83:     fprintf(outf, "SETTERM: LINES = %d, COLS = %d\n", LINES, COLS);
  84: # endif
  85:     if (type[0] == '\0')
  86:         type = "xx";
  87:     unknown = FALSE;
  88:     if (tgetent(genbuf, type) != 1) {
  89:         unknown++;
  90:         strcpy(genbuf, "xx|dumb:");
  91:     }
  92: # ifdef DEBUG
  93:     fprintf(outf, "SETTERM: tty = %s\n", type);
  94: # endif
  95: # ifdef TIOCGWINSZ
  96:     if (ioctl(_tty_ch, TIOCGWINSZ, &win) >= 0) {
  97:         if (LINES == 0)
  98:             LINES = win.ws_row;
  99:         if (COLS == 0)
 100:             COLS = win.ws_col;
 101:     }
 102: # endif
 103: 
 104:     if (LINES == 0)
 105:         LINES = tgetnum("li");
 106:     if (LINES <= 5)
 107:         LINES = 24;
 108: 
 109:     if (COLS == 0)
 110:         COLS = tgetnum("co");
 111:     if (COLS <= 4)
 112:         COLS = 80;
 113: 
 114: # ifdef DEBUG
 115:     fprintf(outf, "SETTERM: LINES = %d, COLS = %d\n", LINES, COLS);
 116: # endif
 117:     aoftspace = _tspace;
 118:     zap();          /* get terminal description		*/
 119: 
 120:     /*
 121: 	 * Handle funny termcap capabilities
 122: 	 */
 123:     if (CS && SC && RC) AL=DL="";
 124:     if (AL_PARM && AL==NULL) AL="";
 125:     if (DL_PARM && DL==NULL) DL="";
 126:     if (IC && IM==NULL) IM="";
 127:     if (IC && EI==NULL) EI="";
 128:     if (!GT) BT=NULL;   /* If we can't tab, we can't backtab either */
 129: 
 130:     if (tgoto(CM, destcol, destline)[0] == 'O')
 131:         CA = FALSE, CM = 0;
 132:     else
 133:         CA = TRUE;
 134: 
 135:     PC = _PC ? _PC[0] : FALSE;
 136:     aoftspace = _tspace;
 137:     strncpy(ttytype, longname(genbuf, type), sizeof(ttytype) - 1);
 138:     ttytype[sizeof(ttytype) - 1] = '\0';
 139:     if (unknown)
 140:         return ERR;
 141:     return OK;
 142: }
 143: 
 144: /*
 145:  *	This routine gets all the terminal flags from the termcap database
 146:  */
 147: 
 148: zap()
 149: {
 150:     register char   *namp;
 151:     register bool   **fp;
 152:     register char   ***sp;
 153: #ifdef  DEBUG
 154:     register char   *cp;
 155: #endif
 156:     extern char *tgetstr();
 157: 
 158:     namp = "ambsdadbeohchzinmimsncnsosulxbxnxtxsxx";
 159:     fp = sflags;
 160:     do {
 161:         *(*fp++) = tgetflag(namp);
 162: #ifdef DEBUG
 163:         fprintf(outf, "%2.2s = %s\n", namp, *fp[-1] ? "TRUE" : "FALSE");
 164: #endif
 165:         namp += 2;
 166:     } while (*namp);
 167:     namp = "albcbtcdceclcmcrcsdcdldmdoedeik0k1k2k3k4k5k6k7k8k9hoicimipkdkekhklkrkskullmandnlpcrcscsesfsosrtatetiucueupusvbvsveALDLUPDOLERI";
 168:     sp = sstrs;
 169:     do {
 170:         *(*sp++) = tgetstr(namp, &aoftspace);
 171: #ifdef DEBUG
 172:         fprintf(outf, "%2.2s = %s", namp, *sp[-1] == NULL ? "NULL\n" : "\"");
 173:         if (*sp[-1] != NULL) {
 174:             for (cp = *sp[-1]; *cp; cp++)
 175:                 fprintf(outf, "%s", unctrl(*cp));
 176:             fprintf(outf, "\"\n");
 177:         }
 178: #endif
 179:         namp += 2;
 180:     } while (*namp);
 181:     if (XS)
 182:         SO = SE = NULL;
 183:     else {
 184:         if (tgetnum("sg") > 0)
 185:             SO = NULL;
 186:         if (tgetnum("ug") > 0)
 187:             US = NULL;
 188:         if (!SO && US) {
 189:             SO = US;
 190:             SE = UE;
 191:         }
 192:     }
 193: }
 194: 
 195: /*
 196:  * return a capability from termcap
 197:  */
 198: char *
 199: getcap(name)
 200: char *name;
 201: {
 202:     char *tgetstr();
 203: 
 204:     return tgetstr(name, &aoftspace);
 205: }

Defined functions

getcap defined in line 198; used 2 times
zap defined in line 148; used 1 times

Defined variables

_PC defined in line 24; used 3 times
_tspace defined in line 37; used 2 times
aoftspace defined in line 39; used 4 times
destcol defined in line 41; used 1 times
destline defined in line 41; used 1 times
sccsid defined in line 8; never used
sstrs defined in line 25; used 1 times
Last modified: 1985-11-09
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1304
Valid CSS Valid XHTML 1.0 Strict