|
|
1.1 ! root 1: /* ! 2: * The routines in this file ! 3: * provide support for ANSI style terminals ! 4: * over a serial line. The serial I/O services are ! 5: * provided by routines in "termio.c". It compiles ! 6: * into nothing if not an ANSI device. ! 7: */ ! 8: #include <stdio.h> ! 9: #include "ed.h" ! 10: ! 11: #if ANSI ! 12: ! 13: #define NROW 24 /* Screen size. */ ! 14: #define NCOL 80 /* Edit if you want to. */ ! 15: #define BEL 0x07 /* BEL character. */ ! 16: #define ESC 0x1B /* ESC character. */ ! 17: ! 18: extern int ttopen(); /* Forward references. */ ! 19: extern int ttgetc(); ! 20: extern int ttputc(); ! 21: extern int ttflush(); ! 22: extern int ttclose(); ! 23: extern int ansimove(); ! 24: extern int ansieeol(); ! 25: extern int ansieeop(); ! 26: extern int ansibeep(); ! 27: extern int ansiopen(); ! 28: extern int ansistand(); ! 29: ! 30: /* ! 31: * Standard terminal interface ! 32: * dispatch table. Most of the fields ! 33: * point into "termio" code. ! 34: */ ! 35: TERM term = { ! 36: NROW-1, ! 37: NCOL, ! 38: ansiopen, ! 39: ttclose, ! 40: ttgetc, ! 41: ttputc, ! 42: ttflush, ! 43: ansimove, ! 44: ansieeol, ! 45: ansieeop, ! 46: ansibeep, ! 47: ansistand ! 48: }; ! 49: ! 50: ansimove(row, col) ! 51: { ! 52: ttputc(ESC); ! 53: ttputc('['); ! 54: ansiparm(row+1); ! 55: ttputc(';'); ! 56: ansiparm(col+1); ! 57: ttputc('H'); ! 58: } ! 59: ! 60: ansieeol() ! 61: { ! 62: ttputc(ESC); ! 63: ttputc('['); ! 64: ttputc('K'); ! 65: } ! 66: ! 67: ansieeop() ! 68: { ! 69: ttputc(ESC); ! 70: ttputc('['); ! 71: ttputc('J'); ! 72: } ! 73: ! 74: ansibeep() ! 75: { ! 76: ttputc(BEL); ! 77: ttflush(); ! 78: } ! 79: ! 80: ansiparm(n) ! 81: register int n; ! 82: { ! 83: register int q; ! 84: ! 85: q = n/10; ! 86: if (q != 0) ! 87: ansiparm(q); ! 88: ttputc((n%10) + '0'); ! 89: } ! 90: ! 91: ansistand(f) ! 92: { ! 93: ttputc(ESC); /* <ESC> [ Ps m -- Select graphics rendition */ ! 94: ttputc('['); /* (SGR) */ ! 95: ttputc(!f ? '0' : '7'); /* 7 = Reverse video */ ! 96: ttputc('m'); ! 97: } ! 98: ! 99: #endif ! 100: ! 101: ansiopen() ! 102: { ! 103: #if V7 ! 104: register uchar *cp; ! 105: char *getenv(); ! 106: ! 107: if ((cp = getenv("TERM")) == NULL) { ! 108: puts("Shell variable TERM not defined!"); ! 109: exit(1); ! 110: } ! 111: if (strcmp(cp, "vt100") != 0) { ! 112: puts("Terminal type not 'vt100'!"); ! 113: exit(1); ! 114: } ! 115: #endif ! 116: ttopen(); ! 117: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.