1: /* trmsbr.c - minor termcap support (load with -ltermlib) */
   2: 
   3: #include "../h/mh.h"
   4: #include <stdio.h>
   5: #ifndef SYS5
   6: #include <sgtty.h>
   7: #else   SYS5
   8: #include <sys/types.h>
   9: #include <termio.h>
  10: #include <sys/ioctl.h>
  11: #endif	SYS5
  12: 
  13: 
  14: #if BUFSIZ<2048
  15: #define TXTSIZ  2048
  16: #else
  17: #define TXTSIZ  BUFSIZ
  18: #endif
  19: 
  20: #ifndef SYS5
  21: extern char PC;
  22: extern short    ospeed;
  23: #else   SYS5
  24: char    PC;
  25: short   ospeed;
  26: #endif	SYS5
  27: 
  28: int     tgetent (), tgetnum ();
  29: char   *tgetstr ();
  30: 
  31: /*  */
  32: 
  33: static int  initLI = 0;
  34: static int  LI = 40;
  35: static int  initCO = 0;
  36: static int  CO = 80;
  37: static char *CL = NULL;
  38: static char *SE = NULL;
  39: static char *SO = NULL;
  40: 
  41: static char termcap[TXTSIZ];
  42: 
  43: /*  */
  44: 
  45: static  read_termcap () {
  46:     register char  *bp,
  47:                    *term;
  48:     char   *cp,
  49:         myterm[TXTSIZ];
  50: #ifndef SYS5
  51:     struct sgttyb   sg;
  52: #else   SYS5
  53:     struct termio   sg;
  54: #endif	SYS5
  55:     static int  inited = 0;
  56: 
  57:     if (inited++)
  58:     return;
  59: 
  60:     if ((term = getenv ("TERM")) == NULL || tgetent (myterm, term) <= OK)
  61:     return;
  62: 
  63: #ifndef SYS5
  64:     ospeed = ioctl (fileno (stdout), TIOCGETP, (char *) &sg) != NOTOK
  65:         ? sg.sg_ospeed : 0;
  66: #else   SYS5
  67:     ospeed = ioctl (fileno (stdout), TCGETA, &sg) != NOTOK
  68:         ? sg.c_cflag & CBAUD : 0;
  69: #endif	SYS5
  70: 
  71:     if (!initCO && (CO = tgetnum ("co")) <= 0)
  72:     CO = 80;
  73:     if (!initLI && (LI = tgetnum ("li")) <= 0)
  74:     LI = 24;
  75: 
  76:     cp = termcap;
  77:     CL = tgetstr ("cl", &cp);
  78:     if (bp = tgetstr ("pc", &cp))
  79:     PC = *bp;
  80:     if (tgetnum ("sg") <= 0) {
  81:     SE = tgetstr ("se", &cp);
  82:     SO = tgetstr ("so", &cp);
  83:     }
  84: }
  85: 
  86: /*  */
  87: 
  88: int     sc_width () {
  89: #ifdef  TIOCGWINSZ
  90:     struct winsize win;
  91: 
  92:     if (ioctl (fileno (stderr), TIOCGWINSZ, &win) != NOTOK
  93:         && (CO = win.ws_col) > 0)
  94:     initCO++;
  95:     else
  96: #endif	TIOCGWINSZ
  97:     read_termcap ();
  98: 
  99:     return CO;
 100: }
 101: 
 102: 
 103: int     sc_length () {
 104: #ifdef  TIOCGWINSZ
 105:     struct winsize win;
 106: 
 107:     if (ioctl (fileno (stderr), TIOCGWINSZ, &win) != NOTOK
 108:         && (LI = win.ws_row) > 0)
 109:     initLI++;
 110:     else
 111: #endif	TIOCGWINSZ
 112:     read_termcap ();
 113: 
 114:     return LI;
 115: }
 116: 
 117: /*  */
 118: 
 119: static int  outc (c)
 120: register char    c;
 121: {
 122:     (void) putchar (c);
 123: }
 124: 
 125: 
 126: void clear_screen () {
 127:     read_termcap ();
 128: 
 129:     if (CL && ospeed)
 130:     tputs (CL, LI, outc);
 131:     else {
 132:     printf ("\f");
 133:     if (ospeed)
 134:         printf ("\200");
 135:     }
 136: 
 137:     (void) fflush (stdout);
 138: }
 139: 
 140: /*  */
 141: 
 142: /* VARARGS1 */
 143: 
 144: int     SOprintf (fmt, a, b, c, d, e, f)
 145: char   *fmt,
 146:        *a,
 147:        *b,
 148:        *c,
 149:        *d,
 150:        *e,
 151:        *f;
 152: {
 153:     read_termcap ();
 154:     if (SO == NULL || SE == NULL)
 155:     return NOTOK;
 156: 
 157:     tputs (SO, 1, outc);
 158:     printf (fmt, a, b, c, d, e, f);
 159:     tputs (SE, 1, outc);
 160: 
 161:     return OK;
 162: }

Defined functions

outc defined in line 119; used 3 times
read_termcap defined in line 45; used 4 times
sc_length defined in line 103; used 1 times

Defined variables

CL defined in line 37; used 3 times
CO defined in line 36; used 4 times
LI defined in line 34; used 5 times
PC declared in line 21; defined in line 24; used 2 times
SE defined in line 38; used 3 times
SO defined in line 39; used 3 times
initCO defined in line 35; used 2 times
initLI defined in line 33; used 2 times
ospeed declared in line 22; defined in line 25; used 8 times
termcap defined in line 41; used 1 times
  • in line 76

Defined macros

TXTSIZ defined in line 17; used 2 times
Last modified: 1986-05-05
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1240
Valid CSS Valid XHTML 1.0 Strict