|
|
1.1 root 1: #include "defs"
2:
3: struct { char chars[ 10 ]; };
4:
5:
6: crii() /* create names for intermediate files */
7: {
8:
9: #ifdef unix
10: sprintf(icfile->filename, "eflc.%d", getpid());
11: sprintf(idfile->filename, "efld.%d", getpid());
12: sprintf(iefile->filename, "efle.%d", getpid());
13: #endif
14:
15: #ifdef gcos
16: sprintf(icfile->filename, "code.efl");
17: sprintf(idfile->filename, "data.efl");
18: sprintf(iefile->filename, "equv.efl");
19: #endif
20: }
21:
22:
23:
24: rmiis()
25: {
26: rmii(icfile);
27: rmii(idfile);
28: rmii(iefile);
29: }
30:
31:
32:
33:
34: rmii(p) /* discard the intermediate file */
35: struct fileblock *p;
36: {
37: #ifdef unix
38: if(p)
39: {
40: fclose(p->fileptr);
41: unlink(p->filename);
42: }
43: #endif
44:
45: #ifdef gcos
46: if(p)
47: fclose(p->fileptr, "d");
48: #endif
49: }
50:
51:
52: opiis()
53: {
54: opii(icfile);
55: opii(idfile);
56: opii(iefile);
57: }
58:
59:
60:
61:
62: opii(p) /* open the intermediate file for writing */
63: struct fileblock *p;
64: {
65:
66: #ifdef unix
67: if( (p->fileptr = fopen(p->filename, "w")) == NULL)
68: fatal("cannot open intermediate file");
69: #endif
70:
71: #ifdef gcos
72: if( (p->fileptr = fopen(p->filename, "wi")) == NULL)
73: fatal("cannot open intermediate file");
74: #endif
75:
76: }
77:
78:
79:
80: swii(p)
81: struct fileblock *p;
82: {
83: iifilep = p;
84: }
85:
86:
87:
88: putii(w,n)
89: int *w, n;
90: {
91: if( fwrite(w,sizeof(int),n, iifilep->fileptr) != n)
92: fatal("write error");
93: }
94:
95:
96:
97: getii(w, n)
98: int *w, n;
99: {
100: if( fread(w,sizeof(int), n, iifilep->fileptr) != n)
101: fatal("read error");
102: }
103:
104:
105:
106:
107: cliis()
108: {
109: clii(icfile);
110: clii(idfile);
111: clii(iefile);
112: }
113:
114:
115:
116:
117: clii(p) /* close the intermediate file */
118: struct fileblock *p;
119: {
120: #ifdef unix
121: fclose(p->fileptr);
122: #endif
123:
124: #ifdef gcos
125: fclose(p->fileptr, "rl");
126: #endif
127: }
128:
129:
130:
131: rewii(p) /* close and rewind the intermediate file for reading */
132: struct fileblock *p;
133: {
134: swii(p);
135: putic(ICEOF,0);
136: clii(p);
137:
138: #ifdef unix
139: if( (p->fileptr = fopen(p->filename, "r")) == NULL)
140: fatal("cannot open intermediate file");
141: #endif
142:
143: #ifdef gcos
144: if( (p->fileptr = fopen(p->filename, "ri")) == NULL)
145: fatal("cannot open intermediate file");
146: #endif
147: }
148:
149:
150:
151: putic(c,p)
152: int c;
153: int p;
154: {
155: int w[2];
156: prevbg = (c==ICINDENT);
157: w[0] = c;
158: w[1] = p;
159: putii(w,2);
160: }
161:
162:
163: getic(p)
164: int *p;
165: {
166: int w[2];
167:
168: getii(w,2);
169: *p = w[1];
170: return( w[0] );
171: }
172:
173:
174:
175: putsii(l, p)
176: int l;
177: char *p;
178: {
179: int word;
180: register int i, m, n;
181:
182: n = strlen(p);
183: putic(l, n);
184: m = (n/sizeof(int)) ;
185: while(m-- > 0)
186: {
187: for(i=0 ; i<sizeof(int); ++i)
188: word.chars[i] = *p++;
189: putii(&word, 1);
190: }
191: n -= (n/sizeof(int))*sizeof(int);
192: if(n > 0)
193: {
194: for(i=0 ; i<n ; ++i)
195: word.chars[i] = *p++;
196: putii(&word,1);
197: }
198: }
199:
200:
201:
202:
203: ptr getsii(n)
204: int n;
205: {
206: static int incomm[100];
207: int m;
208: register int *q, *qm;
209: char *p;
210:
211: m = (n + sizeof(int)-1 ) / sizeof(int);
212: q = incomm;
213: qm = q + m;
214:
215: while(q < qm)
216: getii(q++, 1);
217: p = incomm;
218: p[n] = '\0';
219:
220: return(incomm);
221: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.