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