readdir now returns an eof indication
[unix-history] / usr / src / old / eqn / common_source / io.c
CommitLineData
f6227721 1#ifndef lint
13c5231e 2static char sccsid[] = "@(#)io.c 4.5 %G%";
f6227721 3#endif
75afffa2
BS
4
5# include "e.h"
6#define MAXLINE 1200 /* maximum input line */
7
8char in[MAXLINE]; /* input buffer */
9int eqnexit();
10int noeqn;
11
12main(argc,argv) int argc; char *argv[];{
13
14 eqnexit(eqn(argc, argv));
15}
16
17eqnexit(n) {
18#ifdef gcos
19 if (n)
20 fprintf(stderr, "run terminated due to eqn error\n");
21 exit(0);
22#endif
23 exit(n);
24}
25
26eqn(argc,argv) int argc; char *argv[];{
27 int i, type;
28
29 setfile(argc,argv);
30 init_tbl(); /* install keywords in tables */
31 while ((type=getline(in)) != EOF) {
32 eqline = linect;
33 if (in[0]=='.' && in[1]=='E' && in[2]=='Q') {
34 for (i=11; i<100; used[i++]=0);
35 printf("%s",in);
36 printf(".nr 99 \\n(.s\n.nr 98 \\n(.f\n");
37 markline = 0;
38 init();
39 yyparse();
40 if (eqnreg>0) {
41 printf(".nr %d \\w'\\*(%d'\n", eqnreg, eqnreg);
42 /* printf(".if \\n(%d>\\n(.l .tm too-long eqn, file %s, between lines %d-%d\n", */
43 /* eqnreg, svargv[ifile], eqline, linect); */
44 printf(".nr MK %d\n", markline); /* for -ms macros */
45 printf(".if %d>\\n(.v .ne %du\n", eqnht, eqnht);
46 printf(".rn %d 10\n", eqnreg);
47 if(!noeqn)printf("\\*(10\n");
48 }
49 printf(".ps \\n(99\n.ft \\n(98\n");
50 printf(".EN");
51 if (lastchar == EOF) {
52 putchar('\n');
53 break;
54 }
55 if (putchar(lastchar) != '\n')
56 while (putchar(gtc()) != '\n');
57 }
58 else if (type == lefteq)
13c5231e 59 in_line();
75afffa2
BS
60 else
61 printf("%s",in);
62 }
63 return(0);
64}
65
66getline(s) register char *s; {
67 register c;
68 while((*s++=c=gtc())!='\n' && c!=EOF && c!=lefteq)
69 if (s >= in+MAXLINE) {
70 error( !FATAL, "input line too long: %.20s\n", in);
71 in[MAXLINE] = '\0';
72 break;
73 }
74 if (c==lefteq)
75 s--;
76 *s++ = '\0';
77 return(c);
78}
79
13c5231e 80in_line() {
75afffa2
BS
81 int ds;
82
83 printf(".nr 99 \\n(.s\n.nr 98 \\n(.f\n");
84 ds = oalloc();
85 printf(".rm %d \n", ds);
86 do{
87 if (*in)
88 printf(".as %d \"%s\n", ds, in);
89 init();
90 yyparse();
91 if (eqnreg > 0) {
92 printf(".as %d \\*(%d\n", ds, eqnreg);
93 ofree(eqnreg);
94 }
95 printf(".ps \\n(99\n.ft \\n(98\n");
96 } while (getline(in) == lefteq);
97 if (*in)
98 printf(".as %d \"%s", ds, in);
99 printf(".ps \\n(99\n.ft \\n(98\n");
100 printf("\\*(%d\n", ds);
101 ofree(ds);
102}
103
104putout(p1) int p1; {
105 extern int gsize, gfont;
106 int before, after;
107 if(dbg)printf(".\tanswer <- S%d, h=%d,b=%d\n",p1, eht[p1], ebase[p1]);
108 eqnht = eht[p1];
109 printf(".ds %d \\x'0'", p1);
110 /* suppposed to leave room for a subscript or superscript */
6f1a2a65 111#ifndef NEQN
75afffa2 112 before = eht[p1] - ebase[p1] - VERT((ps*6*12)/10);
6f1a2a65
BS
113#else NEQN
114 before = eht[p1] - ebase[p1] - VERT(3); /* 3 = 1.5 lines */
115#endif NEQN
75afffa2
BS
116 if (before > 0)
117 printf("\\x'0-%du'", before);
118 printf("\\f%c\\s%d\\*(%d%s\\s\\n(99\\f\\n(98",
119 gfont, gsize, p1, rfont[p1] == ITAL ? "\\|" : "");
6f1a2a65 120#ifndef NEQN
75afffa2 121 after = ebase[p1] - VERT((ps*6*2)/10);
6f1a2a65
BS
122#else NEQN
123 after = ebase[p1] - VERT(1);
124#endif NEQN
75afffa2
BS
125 if (after > 0)
126 printf("\\x'%du'", after);
127 putchar('\n');
128 eqnreg = p1;
129}
130
131max(i,j) int i,j; {
132 return (i>j ? i : j);
133}
134
135oalloc() {
136 int i;
137 for (i=11; i<100; i++)
138 if (used[i]++ == 0) return(i);
139 error( FATAL, "no eqn strings left", i);
140 return(0);
141}
142
143ofree(n) int n; {
144 used[n] = 0;
145}
146
147setps(p) int p; {
148 printf(".ps %d\n", EFFPS(p));
149}
150
151nrwid(n1, p, n2) int n1, p, n2; {
152 printf(".nr %d \\w'\\s%d\\*(%d'\n", n1, EFFPS(p), n2);
153}
154
155setfile(argc, argv) int argc; char *argv[]; {
156 static char *nullstr = "-";
157
158 svargc = --argc;
159 svargv = argv;
160 while (svargc > 0 && svargv[1][0] == '-') {
161 switch (svargv[1][1]) {
162
163 case 'd': lefteq=svargv[1][2]; righteq=svargv[1][3]; break;
164 case 's': gsize = atoi(&svargv[1][2]); break;
165 case 'p': deltaps = atoi(&svargv[1][2]); break;
166 case 'f': gfont = svargv[1][2]; break;
167 case 'e': noeqn++; break;
dc970c11 168 case 0: goto endargs;
75afffa2
BS
169 default: dbg = 1;
170 }
171 svargc--;
172 svargv++;
173 }
dc970c11 174 endargs:
75afffa2
BS
175 ifile = 1;
176 linect = 1;
177 if (svargc <= 0) {
178 curfile = stdin;
179 svargv[1] = nullstr;
180 }
dc970c11
RH
181 else
182 openinfile(); /* opens up the first input file */
75afffa2
BS
183}
184
185yyerror() {;}
186
187init() {
188 ct = 0;
189 ps = gsize;
190 ft = gfont;
191 setps(ps);
192 printf(".ft %c\n", ft);
193}
194
195error(fatal, s1, s2) int fatal; char *s1, *s2; {
196 if (fatal>0)
197 printf("eqn fatal error: ");
198 printf(s1,s2);
199 printf("\nfile %s, between lines %d and %d\n",
200 svargv[ifile], eqline, linect);
201 fprintf(stderr, "eqn: ");
202 if (fatal>0)
203 fprintf(stderr, "fatal error: ");
204 fprintf(stderr, s1, s2);
205 fprintf(stderr, "\nfile %s, between lines %d and %d\n",
206 svargv[ifile], eqline, linect);
207 if (fatal > 0)
208 eqnexit(1);
209}