1 static char *sccsid = "@(#)tabs.c 4.1 (Berkeley) 10/01/80"; 2 #include <stdio.h> 3 #include <sgtty.h> 4 5 #define SP ' ' 6 #define TB '\t' 7 #define NL '\n' 8 9 # define ESC 033 10 # define RHM 060 11 # define SI 017 12 # define DEL 0177 13 # define SET '1' 14 # define CLR '2' 15 # define MGN '9' 16 # define CR '\r' 17 # define BS '\b' 18 19 struct sysnod { 20 char *sysnam; 21 int sysval; 22 }; 23 24 #define DASI300 1 25 #define DASI300S 2 26 #define DASI450 3 27 #define TN300 4 28 #define TTY37 5 29 #define HP 6 30 struct sysnod tty[] = { 31 {"dasi300", DASI300}, 32 {"300", DASI300}, 33 {"dasi300s", DASI300S}, 34 {"300s", DASI300S}, 35 {"dasi450", DASI450}, 36 {"450", DASI450}, 37 {"37", TTY37}, 38 {"tty37", TTY37}, 39 {"tn300", TN300}, 40 {"terminet", TN300}, 41 {"tn", TN300}, 42 {"hp", HP}, 43 {0, 0}, 44 }; 45 int margset = 1; 46 47 syslook(w) 48 char *w; 49 { 50 register struct sysnod *sp; 51 52 for (sp = tty; sp->sysnam!=NULL; sp++) 53 if (strcmp(sp->sysnam, w)==0) 54 return(sp->sysval); 55 return(0); 56 } 57 58 main(argc,argv) 59 int argc; char **argv; 60 { 61 struct sgttyb tb; 62 int type; 63 char *getenv(); 64 65 type=0; 66 if (argc>=2 && strcmp(argv[1],"-n")==0) { 67 margset--; argc--; argv++; 68 } 69 if (argc>=2) { 70 type=syslook(argv[1]); 71 } else { 72 type=syslook(getenv("TERM")); 73 } 74 75 switch(type) { 76 77 case DASI300: dasi300(); break; 78 79 case DASI300S: dasi300(); break; 80 81 case DASI450: dasi450(); break; 82 83 case TN300: tn300(); break; 84 85 case TTY37: tty37(); break; 86 87 case HP: hp2645(); break; 88 89 default: 90 gtty (0, &tb); 91 if ( (tb.sg_flags & (LCASE|CRMOD)) == CRMOD) { 92 /* test for CR map on, upper case off, i.e. terminet but not 33 */ 93 if ((tb.sg_ispeed) == B300) /* test for 300 baud */ 94 misc(); 95 } 96 else if ((tb.sg_flags & (CRMOD|LCASE)) == 0 && (tb.sg_ispeed ) == B150) { 97 /* apparent model 37 */ 98 tty37(); 99 } 100 } 101 } 102 103 clear(n) 104 { 105 escape(CLR); 106 delay(n); 107 putchar(CR); nl(); 108 } 109 110 delay(n) 111 { 112 while (n--) putchar(DEL); 113 } 114 115 tabs(n) 116 { 117 int i,j; 118 119 if(margset) n--; 120 121 for( i=0; i<n; ++i ){ 122 for( j=0; j<8; ++j ) { 123 putchar(SP); 124 } 125 escape(SET); 126 } 127 } 128 129 margin(n) 130 { 131 int i; 132 133 if(margset) { 134 for( i=0; i<n; ++i) putchar(SP); 135 } 136 } 137 138 escape(c) 139 { 140 putchar(ESC); putchar(c); 141 } 142 143 bs(n) 144 { 145 while (n--) putchar(BS); 146 } 147 148 nl() 149 { 150 putchar(NL); 151 } 152 153 154 155 /* ======== terminal types ======== */ 156 157 dasi450() 158 { 159 struct sgttyb t; 160 gtty(0,&t); 161 t.sg_flags &= ~ALLDELAY; 162 stty(0,&t); 163 clear(8); bs(16); margin(8); escape(MGN); nl(); tabs(16); 164 escape(RHM); nl(); 165 } 166 167 tty37() 168 { 169 putchar(SI); clear(40); bs(8); tabs(9); nl(); 170 } 171 172 dasi300() 173 { 174 clear(8); tabs(15); nl(); 175 } 176 177 tn300() 178 { 179 struct sgttyb t; 180 gtty(0,&t); 181 t.sg_flags &= ~ALLDELAY; 182 t.sg_flags |= CR1|BS1; 183 stty(0,&t); 184 clear(8); margin(8); escape(SET); tabs(14); nl(); 185 } 186 187 hp2645() 188 { 189 escape('3'); /*clr*/ 190 putchar(CR); 191 tabs(10); 192 nl(); 193 } 194 195 misc() 196 { 197 tabs(14); nl(); 198 } 199