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