use install
[unix-history] / usr / src / old / ratfor / r2.c
CommitLineData
a41ae56c
CC
1Original BTL Ratfor System for 4.2
2/* @(#)r2.c 1.1 (Berkeley) %G% */
3#include "r.h"
4
5extern int hollerith;
6
7char outbuf[80];
8int outp = 0;
9int cont = 0;
10int contchar = '&';
11
12char comment[320];
13int comptr = 0;
14int indent = 0;
15
16outdon() {
17 outbuf[outp] = '\0';
18 if (outp > 0)
19 fprintf(outfil, "%s\n", outbuf);
20 outp = cont = 0;
21}
22
23putcom(s) char *s; {
24 if (printcom) {
25 ptc('c');
26 outtab();
27 pts(s);
28 outdon();
29 }
30}
31
32outcode(xp) char *xp; {
33 register c, c1, j;
34 char *q, *p;
35
36 p = (char *) xp; /* shut lint up */
37 if (cont == 0 && comptr > 0) /* flush comment if not on continuation */
38 flushcom();
39 while( (c = *p++) ){
40 c1 = *p;
41 if (type[c] == LET || type[c] == DIG) {
42 pts(p-1);
43 break;
44 }
45 switch(c){
46
47 case '"': case '\'':
48 j = 0;
49 for (q=p; *q; q++) {
50 if (*q == '\\')
51 q++;
52 j++;
53 }
54 if (outp+j+2 > 71)
55 contcard();
56 if (hollerith) {
57 outnum(--j);
58 ptc('h');
59 } else
60 ptc(c);
61 while (*p != c) {
62 if (*p == '\\')
63 p++;
64 ptc(*p++);
65 }
66 if (!hollerith)
67 ptc(c);
68 p++;
69 break;
70 case '$': case '\\':
71 if (strlen(p-1)+outp > 71)
72 contcard();
73 if (c1 == '"' || c1 == '\'') {
74 ptc(c1);
75 p++;
76 } else
77 for (p--; *p; p++)
78 ptc(*p);
79 break;
80 case '%':
81 outp = 0;
82 while (*p)
83 ptc(*p++);
84 break;
85 case '>':
86 if( c1=='=' ){
87 pts(".ge."); p++;
88 } else
89 pts(".gt.");
90 break;
91 case '<':
92 if( c1=='=' ){
93 pts(".le."); p++;
94 } else if( c1=='>' ){
95 pts(".ne."); p++;
96 } else
97 pts(".lt.");
98 break;
99 case '=':
100 if( c1=='=' ){
101 pts(".eq."); p++;
102 } else
103 ptc('=');
104 break;
105 case '!': case '^':
106 if( c1=='=' ){
107 pts(".ne."); p++;
108 } else
109 pts(".not.");
110 break;
111 case '&':
112 if( c1=='&' )
113 p++;
114 pts(".and.");
115 break;
116 case '|':
117 if( c1=='|' )
118 p++;
119 pts(".or.");
120 break;
121 case '\t':
122 outtab();
123 break;
124 case '\n':
125 ptc(' ');
126 break;
127 default:
128 ptc(c);
129 break;
130 }
131 }
132}
133
134ptc(c) char c; {
135 if( outp > 71 )
136 contcard();
137 outbuf[outp++] = c;
138}
139
140pts(s) char *s; {
141 if (strlen(s)+outp > 71)
142 contcard();
143 while(*s)
144 ptc(*s++);
145}
146
147contcard(){
148 int n;
149 outbuf[outp] = '\0';
150 fprintf(outfil, "%s\n", outbuf);
151 n = 6;
152 if (printcom) {
153 n += INDENT * indent + 1;
154 if (n > 35) n = 35;
155 }
156 for( outp=0; outp<n; outbuf[outp++] = ' ' );
157 outbuf[contfld-1] = contchar;
158 cont++;
159 if (cont > 19)
160 error("more than 19 continuation cards");
161}
162
163outtab(){
164 int n;
165 n = 6;
166 if (printcom) {
167 n += INDENT * indent;
168 if (n > 35) n = 35;
169 }
170 while (outp < n)
171 ptc(' ');
172}
173
174outnum(n) int n; {
175 int a;
176 if( a = n/10 )
177 outnum(a);
178 ptc(n%10 + '0');
179}
180
181outcont(n) int n; {
182 transfer = 0;
183 if (n == 0 && outp == 0)
184 return;
185 if( n > 0 )
186 outnum(n);
187 outcode("\tcontinue");
188 outdon();
189}
190
191outgoto(n) int n; {
192 if (transfer != 0)
193 return;
194 outcode("\tgoto ");
195 outnum(n);
196 outdon();
197}
198
199flushcom() {
200 int i, j;
201 if (printcom == 0)
202 comptr = 0;
203 else if (cont == 0 && comptr > 0) {
204 for (i=j=0; i < comptr; i++)
205 if (comment[i] == '\n') {
206 comment[i] = '\0';
207 fprintf(outfil, "%s\n", &comment[j]);
208 j = i + 1;
209 }
210 comptr = 0;
211 }
212}