|
|
1.1 root 1: #From arpa!NSFnet-Relay.AC.UK!NAGIST%vax.oxford.ac.uk Fri Jun 30 13:02 BST 1989
2: #Received: from vax.oxford.ac.uk by NSFnet-Relay.AC.UK via Janet with NIFTP
3: # id aa05326; 30 Jun 89 12:59 BST
4: #Date: Fri, 30 Jun 89 13:02 BST
5: #From: NAG Software Engineering Group <NAGIST%[email protected]>
6: #To: DMG <@NSFnet-Relay.AC.UK:[email protected]>
7: #Subject:
8: #
9: #!/bin/sh
10: # to extract, remove the header and type "sh filename"
11: if `test ! -s ./data.c.ed`
12: then
13: echo "writting ./data.c.ed"
14: cat > ./data.c.ed << '\Rogue\Monster\'
15: 378a
16:
17: void
18: make_param(p, e)
19: register struct Paramblock *p;
20: expptr e;
21: {
22: p->vclass = CLPARAM;
23: impldcl(p);
24: p->paramval = mkconv(p->vtype, e);
25: }
26: .
27: 3c
28: /* ROUTINES CALLED DURING DATA AND PARAMETER STATEMENT PROCESSING */
29: .
30: \Rogue\Monster\
31: else
32: echo "will not over write ./data.c.ed"
33: fi
34: if `test ! -s ./defines.h.ed`
35: then
36: echo "writting ./defines.h.ed"
37: cat > ./defines.h.ed << '\Rogue\Monster\'
38: 204c
39: #define OPASSIGNI 56 /* assignment for inquire stmt */
40: #define OPIDENTITY 57 /* for turning TADDR into TEXPR */
41: .
42: 16,27d
43: \Rogue\Monster\
44: else
45: echo "will not over write ./defines.h.ed"
46: fi
47: if `test ! -s ./defs.h.ed`
48: then
49: echo "writting ./defs.h.ed"
50: cat > ./defs.h.ed << '\Rogue\Monster\'
51: 635,637d
52: 294a
53: chainp init_values; /* list of sorted block data init values */
54: .
55: 202,207d
56: \Rogue\Monster\
57: else
58: echo "will not over write ./defs.h.ed"
59: fi
60: if `test ! -s ./equiv.c.ed`
61: then
62: echo "writting ./equiv.c.ed"
63: cat > ./equiv.c.ed << '\Rogue\Monster\'
64: 308,312d
65: 275,278d
66: 261d
67: 256,259d
68: 223,226c
69: freqchain(equivdecl);
70: .
71: 216,221d
72: 214a
73: if (x == 0) {
74: x = 1;
75: k = TYCHAR;
76: } /* if */
77: .
78: 210,213d
79: 204,207c
80:
81: /* Only want TYLOGICAL if ALL the init values are logical. Otherwise, all
82: non-zero values get mapped onto TRUE_ */
83:
84: if ((x < t && (np -> vtype != TYLOGICAL || x == 0))
85: || k == TYLOGICAL) {
86: x = t;
87: k = np->vtype;
88: }
89: .
90: 198c
91: x = 0;
92: .
93: 192,196d
94: 136,139d
95: 2,8d
96: \Rogue\Monster\
97: else
98: echo "will not over write ./equiv.c.ed"
99: fi
100: if `test ! -s ./exec.c.ed`
101: then
102: echo "writting ./exec.c.ed"
103: cat > ./exec.c.ed << '\Rogue\Monster\'
104: 633,637c
105: vname -> vis_assigned = 1;
106: }
107:
108: /* don't duplicate labels... */
109:
110: stno = labelval->stateno;
111: for(cp = vname->varxptr.assigned_values; cp; cp = cp->nextp)
112: if ((ftnint)cp->datap == stno)
113: break;
114: if (!cp)
115: vname->varxptr.assigned_values =
116: mkchain(stno, vname->varxptr.assigned_values);
117: }
118:
119: /* Code for FORMAT label... */
120:
121: fs = labelval->fmtstring;
122: if (!labelval->labdefined || fs && fs != nullstr) {
123: if (!fs)
124: labelval->fmtstring = nullstr;
125: labelval->labused = 1;
126: vname = asg_name(vname->varname);
127: q = ALLOC(Addrblock);
128: q->tag = TADDR;
129: q->vtype = TYCHAR;
130: q->vstg = STGAUTO;
131: q->ntempelt = 1;
132: q->memoffset = ICON(0);
133: q->uname_tag = UNAM_IDENT;
134: sprintf(q->user.ident, "fmt_%ld", labelval->stateno);
135: putout(mkexpr(OPASSIGN, vname, q));
136: }
137:
138: .
139: 631c
140: if (!labelval->labdefined || !labelval->fmtstring) {
141:
142: putout(mkexpr(OPASSIGN, p, mkintcon(labelval->stateno)));
143:
144: if (vname -> vis_assigned == 0) {
145: .
146: 627d
147: 625c
148: /* code for executable label... */
149: .
150: 623c
151: /* If the label hasn't been defined, then we do things twice:
152: * once for an executable stmt label, once for a format
153: */
154: .
155: 621c
156: return;
157: }
158: .
159: 619c
160: if( ! ONEOF(p->vtype, MSKINT|MSKADDR) ) {
161: .
162: 616a
163: register Addrp q;
164: static char nullstr[] = "";
165: char *fs;
166: register chainp cp;
167: register ftnint stno;
168: .
169: 612c
170: register Namep vname;
171: .
172: 610a
173: Namep
174: asg_name(s1)
175: register char *s1;
176: {
177: char buf[VL], *s, *se;
178: register Namep vn;
179: extern chainp assigned_fmts;
180:
181: /* Use Upper-case first letter for corresponding format variable */
182: buf[0] = *s1 + 'A' - 'a';
183: s = buf + 1;
184: se = buf + VL;
185: while(s < se && (*s = *++s1) != ' ')
186: s++;
187: vn = mkname(s-buf, buf);
188: if (!vn->vis_assigned) {
189: vn->vis_assigned = 1;
190: vn->vstg = STGAUTO;
191: vn->vprocclass = CLVAR;
192: vn->vtype = TYCHAR;
193: vn->vleng = ICON(-1); /* kludge used in list_decls */
194: assigned_fmts = mkchain((tagptr) vn, assigned_fmts);
195: }
196: return vn;
197: }
198:
199: .
200: 393c
201: /* putx added 6-29-89 (mwm), not sure if fixtype is required, but I doubt it
202: since mkconv is called just before */
203: doinit = putx (mkconv (dotype, DOINIT));
204: .
205: \Rogue\Monster\
206: else
207: echo "will not over write ./exec.c.ed"
208: fi
209: if `test ! -s ./expr.c.ed`
210: then
211: echo "writting ./expr.c.ed"
212: cat > ./expr.c.ed << '\Rogue\Monster\'
213: 2590,2591c
214: if (doing_setbound)
215: lp = p->exprblock.leftp = make_int_expr(lp);
216: else {
217: p->exprblock.vtype = ltype;
218: return(p);
219: }
220: .
221: 2551a
222: extern expptr make_int_expr();
223: .
224: 2545a
225: int doing_setbound;
226: .
227: 1991a
228: case OPASSIGNI:
229: .
230: 1980a
231: case OPIDENTITY:
232: .
233: 1865a
234: case OPIDENTITY:
235: .
236: 1843a
237: case OPASSIGNI:
238: .
239: 1405c
240: return (Addrp) cpexpr ((expptr) retslot);
241: .
242: 1282,1284d
243: 1279d
244: 1128c
245: if (!replaced)
246: s->memoffset = mkexpr(OPPLUS, s->memoffset, suboffset(p) );
247: .
248: 1118a
249: replaced = 0;
250: .
251: 1082c
252: return((Addrp) errnode() );
253: .
254: 1068a
255: replaced = 1;
256: .
257: 1052d
258: 1050a
259: static int replaced;
260: .
261: 1003c
262: if((rp->rpltag = rp->rplvp->tag) == TERROR)
263: .
264: 871a
265: #endif
266: .
267: 869a
268: #if 0
269: /* erroneous error msg */
270: .
271: 822d
272: 806d
273: 561,563d
274: 559d
275: 549a
276: if (rtype == TYREAL)
277: break;
278: .
279: 363a
280: if (p->addrblock.vtype > TYERROR) /* i/o block */
281: break;
282: .
283: 209c
284: #if PDP11_option
285: .
286: 99a
287: p -> vtype = (p -> const.ci >> typesize[TYSHORT]) ? TYLONG : TYSHORT;
288: .
289: \Rogue\Monster\
290: else
291: echo "will not over write ./expr.c.ed"
292: fi
293: if `test ! -s ./f2c.h.ed`
294: then
295: echo "writting ./f2c.h.ed"
296: cat > ./f2c.h.ed << '\Rogue\Monster\'
297: 102a
298: /* fix up name clashes */
299:
300: #define acos__ acos_
301: #define asin__ asin_
302: #define asm__ asm_
303: #define auto__ auto_
304: #define break__ break_
305: #define case__ case_
306: #define char__ char_
307: #define const__ const_
308: #define cos__ cos_
309: #define cosh__ cosh_
310: #define do__ do_
311: #define double__ double_
312: #define else__ else_
313: #define entry__ entry_
314: #define enum__ enum_
315: #define exp__ exp_
316: #define extern__ extern_
317: #define float__ float_
318: #define for__ for_
319: #define int__ int_
320: #define log__ log_
321: #define long__ long_
322: #define short__ short_
323: #define signed__ signed_
324: #define sin__ sin_
325: #define sinh__ sinh_
326: #define sizeof__ sizeof_
327: #define sqrt__ sqrt_
328: #define static__ static_
329: #define struct__ struct_
330: #define switch__ switch_
331: #define tan__ tan_
332: #define tanh__ tanh_
333: #define union__ union_
334: #define void__ void_
335: #define while__ while_
336: #define pow_ii_ pow_ii
337: #define pow_ri_ pow_ri
338: #define pow_di_ pow_di
339: #define pow_ci_ pow_ci
340: #define pow_zi_ pow_zi
341: #define pow_hh_ pow_hh
342: #define pow_dd_ pow_dd
343: #define pow_zz_ pow_zz
344: .
345: \Rogue\Monster\
346: else
347: echo "will not over write ./f2c.h.ed"
348: fi
349: if `test ! -s ./format.c.ed`
350: then
351: echo "writting ./format.c.ed"
352: cat > ./format.c.ed << '\Rogue\Monster\'
353: 1319c
354: sprintf(buf+k, "[%d]", this_size -> constblock.const.ci);
355: k += strlen (buf + k);
356: .
357: 1310c
358: sprintf (buf, "\t/* was ");
359: k = strlen (buf);
360: .
361: 1304c
362: int i, k;
363: .
364: 1302a
365: int size;
366: .
367: 1300c
368: char *write_array_decls(outfile, dimp, size)
369: .
370: 1260a
371: else if (write_header == 2)
372: nice_printf(outfile, "\n");
373:
374: /* Finally, ioblocks (which may reference equivs) */
375: if (iob_list)
376: write_ioblocks(outfile);
377: if (assigned_fmts)
378: write_assigned_fmts(outfile);
379:
380: .
381: 1249a
382: if (Define) {
383: indent_printf(0, outfile, ")\n");
384: write_header = 2;
385: }
386: .
387: 1200c
388: if (!Define)
389: nice_printf (outfile, " = ");
390: .
391: 1178c
392: Alias1:
393: if (Alias) {
394: .
395: 1175d
396: 1173c
397: comment = write_array_decls(outfile, var->vdim, 1);
398: }
399: .
400: 1160,1171c
401: !ISICON (var -> vleng)
402: || oneof_stg(var, stg, M(STGEQUIV)|M(STGCOMMON)))
403: nice_printf (outfile, "*%s", storage);
404: else {
405: nice_printf (outfile, "%s", storage);
406: if (var -> vclass == CLPROC)
407: nice_printf (outfile, "()");
408: else if (var -> vtype == TYCHAR && ISICON ((var -> vleng)))
409: write_char_len(outfile, var->vdim,
410: var -> vleng -> constblock.const.ci, 0);
411: else if (var -> vdim &&
412: .
413: 1115c
414: Alias = oneof_stg(var, stg, M(STGEQUIV)|M(STGCOMMON));
415: if (Define = Alias && define_equivs) {
416: if (!write_header)
417: nice_printf(outfile, ";\n");
418: define_start(outfile, storage, CNULL, "(");
419: goto Alias1;
420: }
421: else if (type == last_type && class == last_class &&
422: .
423: 1104a
424: write_header = 2;
425: }
426: .
427: 1103c
428: M(STGBSS)|M(STGEXT)|M(STGAUTO)|M(STGCOMMON)|M(STGEQUIV))) {
429: .
430: 1101c
431: if (write_header == 1 && (new_vars || nequiv || used_builtins)
432: .
433: 999,1001c
434: ISICON ((var -> vleng))
435: && (i = var->vleng->constblock.const.ci) > 0)
436: nice_printf (outfile, "[%d]", i);
437: .
438: 957a
439: /* Next come formats */
440: write_formats(outfile);
441:
442: .
443: 951c
444: int Alias, Define, did_one, i, last_type, type;
445: extern int define_equivs;
446: .
447: 939a
448: static void
449: write_formats(outfile)
450: FILE *outfile;
451: {
452: register struct Labelblock *lp;
453: int first = 1;
454: extern int in_string;
455: char *fs;
456:
457: for(lp = labeltab ; lp < highlabtab ; ++lp)
458: if (lp->labused) {
459: if (first) {
460: first = 0;
461: nice_printf(outfile, "/* Format strings */\n");
462: }
463: nice_printf(outfile, "static char fmt_%ld[] = \"",
464: lp->stateno);
465: in_string = 1;
466: if (!(fs = lp->fmtstring))
467: fs = "";
468: nice_printf(outfile, "%s\"", fs);
469: in_string = 0;
470: nice_printf(outfile, ";\n");
471: }
472: if (!first)
473: nice_printf(outfile, "\n");
474: }
475:
476: static void
477: write_ioblocks(outfile)
478: FILE *outfile;
479: {
480: register iob_data *L;
481: register char *f, **s, *sep;
482:
483: nice_printf(outfile, "/* Fortran I/O blocks */\n");
484: L = iob_list = (iob_data *)revchain((chainp)iob_list);
485: do {
486: nice_printf(outfile, "static %s %s = { ",
487: L->type, L->name);
488: indent += tab_size;
489: sep = 0;
490: for(s = L->fields; f = *s; s++) {
491: if (sep)
492: nice_printf(outfile, sep);
493: sep = ", ";
494: if (*f == '"') { /* kludge */
495: nice_printf(outfile, "\"");
496: in_string = 1;
497: nice_printf(outfile, "%s\"", f+1);
498: in_string = 0;
499: }
500: else
501: nice_printf(outfile, "%s", f);
502: }
503: nice_printf(outfile, " };\n");
504: indent -= tab_size;
505: }
506: while(L = L->next);
507: nice_printf(outfile, "\n\n");
508: }
509:
510: static void
511: write_assigned_fmts(outfile)
512: FILE *outfile;
513: {
514: register chainp cp;
515: Namep np;
516: int did_one = 0;
517:
518: cp = assigned_fmts = revchain(assigned_fmts);
519: nice_printf(outfile, "/* Assigned format variables */\nchar ");
520: do {
521: np = (Namep)cp->datap;
522: if (did_one)
523: nice_printf(outfile, ", ");
524: did_one = 1;
525: nice_printf(outfile, "*%s", varstr(VL, np->varname));
526: }
527: while(cp = cp->nextp);
528: nice_printf(outfile, ";\n\n");
529: }
530:
531: .
532: 747c
533: next_tab (outfile);
534: .
535: 742a
536:
537: .
538: 98a
539: other_undefs(c_file);
540: .
541: 40c
542: extern FILE *fopen ();
543: .
544: 31a
545: extern chainp assigned_fmts;
546: .
547: 20a
548: static int p1get_const (), p1getn ();
549: .
550: 12c
551: int c_output_line_length = DEF_C_LINE_LENGTH;
552: .
553: 10a
554: #include "iob.h"
555: .
556: \Rogue\Monster\
557: else
558: echo "will not over write ./format.c.ed"
559: fi
560: if `test ! -s ./format_d.c.ed`
561: then
562: echo "writting ./format_d.c.ed"
563: cat > ./format_d.c.ed << '\Rogue\Monster\'
564: 821a
565:
566: save_block_data (comname, values)
567: char *comname;
568: chainp values;
569: {
570: struct Extsym *ext = mkext (varunder (XL, comname));
571:
572: if (ext && ext -> extp)
573: if (ext -> init_values)
574: errstr ("Two block data for %s common block", comname);
575: else
576: ext -> init_values = values;
577: else
578: errstr ("Bad common block '%s' with BLOCK DATA", comname);
579: } /* save_block_data */
580: .
581: 802,820c
582: type = eqv -> eqvtype;
583: nice_printf (outfile, "static %s %s", c_type_decl (type, NULL),
584: equiv_name (memno, NULL));
585: nice_printf (outfile, "[%d] = ", (eqv -> eqvtop - eqv -> eqvbottom) /
586: typesize[type]);
587: reshape_values (type, values, '\0');
588: write_array_init (outfile, type, values);
589: nice_printf (outfile, ";\n");
590: .
591: 799,800d
592: 792a
593: int type;
594: .
595: 622a
596: int index = (int) (((chainp) values -> datap) -> datap);
597:
598: while (index - main_index++ > 0)
599: *str_ptr++ = ' ';
600:
601: .
602: 620c
603: /* Find the max length of init string, by finding the highest offset
604: value stored in the list of initial values */
605:
606: for(k = 1, prev = CHNULL, v = values; v; prev = v, v = v->nextp)
607: ;
608: if (prev != CHNULL)
609: k = ((int) (((chainp) prev -> datap) -> datap)) + 1;
610: .
611: 617,618c
612: chainp v, prev;
613: int b = 0, k = 0, main_index = 0;
614: .
615: 611a
616: int str_start; /* offset at which character storage starts. If type
617: is not TYCHAR, this value is ignored */
618: .
619: 608c
620: union Constant *make_one_const (type, storage, values, str_start)
621: .
622: 583c
623: const = make_one_const (type, storage, values, 0);
624: .
625: 574c
626: const = make_one_const (type, storage, values, 0);
627: .
628: 511a
629: if (stddbg)fprintf (stddbg, "format_data: index %d, main %d\n", index, main_index);
630: .
631: 455c
632: (tagptr) mkchain ((tagptr) offset, mkchain ((tagptr) dest, val)), CHNULL));
633: .
634: 434c
635: res.c[i] = pad_char;
636: if (i == 0)
637: offset = 0;
638: .
639: 418c
640: c = pad_char;
641: .
642: 414c
643: make_one_const (TYLONG, &c, cp, 0);
644: .
645: 409a
646:
647: /* Now this is a little weird. Until June 20, 1989, we didn't need to store
648: any offset information. But it seems the equiv init process requires it.
649: So, instead of zeroing it out, we'll keep it in, BUT the offset is in
650: terms of characters, whereas the reshaped data is of the proper type. */
651:
652: offset = ((int) this -> datap);
653: .
654: 400a
655: int offset = 0;
656: .
657: 349a
658: char pad_char; /* value used for padding. ' ' for most, but
659: '\0' for equivalenced data */
660: .
661: 347c
662: static reshape_values (dest, data, pad_char)
663: .
664: 339c
665: const = make_one_const (type, temp, values, 0);
666: .
667: 330c
668: reshape_values (type, values, ' ');
669: .
670: 216,219d
671: 213,214c
672: ? 0 : write_array_decls (outfile, namep -> vdim, 1);
673: .
674: 173c
675:
676: /* I don't know why eqvstart needs to be subtracted, but Dave Gay thinks
677: it's necessary 28-June-89 (mwm)
678: */
679: write_equiv_init (outfile, memno - eqvstart, values);
680: .
681: 139c
682: static int ch_ar_dim = -1; /* length of each element of char string array,
683: used to break up long init strings for ansi
684: compilers */
685: .
686: 78a
687: /* Save the COMMON block data initializations for later */
688: save_block_data (ovarname, values);
689:
690: .
691: 77a
692: else
693: .
694: \Rogue\Monster\
695: else
696: echo "will not over write ./format_d.c.ed"
697: fi
698: if `test ! -s ./gram.dcl.ed`
699: then
700: echo "writting ./gram.dcl.ed"
701: cat > ./gram.dcl.ed << '\Rogue\Monster\'
702: 197,199c
703: make_param($1, $3);
704: .
705: 173d
706: \Rogue\Monster\
707: else
708: echo "will not over write ./gram.dcl.ed"
709: fi
710: if `test ! -s ./gram.exec.ed`
711: then
712: echo "writting ./gram.exec.ed"
713: cat > ./gram.exec.ed << '\Rogue\Monster\'
714: \Rogue\Monster\
715: else
716: echo "will not over write ./gram.exec.ed"
717: fi
718: if `test ! -s ./gram.expr.ed`
719: then
720: echo "writting ./gram.expr.ed"
721: cat > ./gram.expr.ed << '\Rogue\Monster\'
722: 98a
723: | bit_const
724: .
725: \Rogue\Monster\
726: else
727: echo "will not over write ./gram.expr.ed"
728: fi
729: if `test ! -s ./gram.head.ed`
730: then
731: echo "writting ./gram.head.ed"
732: cat > ./gram.head.ed << '\Rogue\Monster\'
733: 136,149d
734: 5,16d
735: \Rogue\Monster\
736: else
737: echo "will not over write ./gram.head.ed"
738: fi
739: if `test ! -s ./init.c.ed`
740: then
741: echo "writting ./init.c.ed"
742: cat > ./init.c.ed << '\Rogue\Monster\'
743: 318d
744: 302a
745: frchain(&assigned_fmts);
746: .
747: 270d
748: 266,268d
749: 242d
750: 240d
751: 237a
752: iob_list = 0;
753: for(i = 0; i < 9; i++)
754: io_structs[i] = 0;
755: .
756: 168,172d
757: 161d
758: 23a
759: chainp assigned_fmts = CHNULL; /* assigned formats */
760: .
761: 3a
762: #include "iob.h"
763: .
764: \Rogue\Monster\
765: else
766: echo "will not over write ./init.c.ed"
767: fi
768: if `test ! -s ./intr.c.ed`
769: then
770: echo "writting ./intr.c.ed"
771: cat > ./intr.c.ed << '\Rogue\Monster\'
772: 672c
773: return((Addrp) errnode() );
774: .
775: 26c
776: char intrfname[VL+1]; /* "+1" added 19 June 89 (mwm) */
777: .
778: \Rogue\Monster\
779: else
780: echo "will not over write ./intr.c.ed"
781: fi
782: if `test ! -s ./io.c.ed`
783: then
784: echo "writting ./io.c.ed"
785: cat > ./io.c.ed << '\Rogue\Monster\'
786: 963a
787: ioset_assign = OPASSIGN;
788: }
789: .
790: 962c
791: ONEOF(p->addrblock.vtype, M(TYLONG)|M(TYLOGICAL)) ) {
792: ioset_assign = OPASSIGNI;
793: .
794: 940,946c
795: if (!p)
796: return;
797: if (p->tag != TADDR)
798: badtag(who, p->tag);
799: if (p->vtype != TYCHAR
800: && p->vtype != TYLONG
801: && p->vtype != TYSHORT)
802: badtype(who, p->vtype);
803: offset /= SZLONG;
804: switch(p->uname_tag) {
805: case UNAM_NAME:
806: mo = p->memoffset;
807: if (mo->tag != TCONST)
808: badtag("ioseta/memoffset", mo->tag);
809: if (mo->constblock.const.ci)
810: sprintf(s = mem(VL+20,0), "%s+%ld",
811: varstr(VL, p->user.name->varname),
812: mo->constblock.const.ci);
813: else
814: s = cpstring(varstr(VL, p->user.name->varname));
815: break;
816: case UNAM_CONST:
817: s = tostring(p->user.const.ccp1.ccp0,
818: p->vleng->constblock.const.ci);
819: break;
820: default:
821: badthing("uname_tag", who, p->uname_tag);
822: }
823: /* kludge for Hollerith */
824: if (p->vtype != TYCHAR) {
825: s1 = mem(strlen(s)+10,0);
826: sprintf(s1, "(char *)%s%s", p->isarray ? "" : "&", s);
827: s = s1;
828: }
829: iob_list->fields[offset] = s;
830: .
831: 936c
832: char *s, *s1;
833: static char who[] = "ioseta";
834: expptr mo;
835: .
836: 910,912c
837: }
838: else {
839: register Addrp q;
840:
841: q = ALLOC(Addrblock);
842: q->tag = TADDR;
843: q->vtype = type;
844: q->vstg = STGAUTO;
845: q->ntempelt = 1;
846: q->isarray = 0;
847: q->memoffset = ICON(0);
848: q->uname_tag = UNAM_IDENT;
849: sprintf(q->user.ident, "%s.%s",
850: statstruct ? iob_list->name : ioblkp->user.ident,
851: io_fields[offset + 1]);
852: if (type == TYADDR && p->tag == TCONST
853: && p->constblock.vtype == TYADDR) {
854: /* kludge */
855: register Addrp p1;
856: p1 = ALLOC(Addrblock);
857: p1->tag = TADDR;
858: p1->vtype = type;
859: p1->vstg = STGAUTO; /* wrong, but who cares? */
860: p1->ntempelt = 1;
861: p1->isarray = 0;
862: p1->memoffset = ICON(0);
863: p1->uname_tag = UNAM_IDENT;
864: sprintf(p1->user.ident, "fmt_%ld",
865: p->constblock.const.ci);
866: frexpr(p);
867: p = (expptr)p1;
868: }
869: putexpr(mkexpr(ioset_assign, q, p));
870: }
871: .
872: 900,908c
873: offset /= SZLONG;
874: if(statstruct && ISCONST(p)) {
875: register char *s;
876: switch(type) {
877: case TYADDR: /* stmt label */
878: s = IO_FMT_NAME;
879: break;
880: case TYIOINT:
881: s = "";
882: break;
883: default:
884: badtype("ioset", type);
885: }
886: iob_list->fields[offset] =
887: string_num(s, p->constblock.const.ci);
888: .
889: 895d
890: 893a
891: static int ioset_assign = OPASSIGN;
892: .
893: 794a
894: ioblkp = 0; /* unnecessary */
895: .
896: 793d
897: 746,758d
898: 744c
899: new_iob_data(ios,
900: temp_name(IO_YAIN_NAME, lastvarno,
901: ioblkp->user.ident));
902: } else if(!(ioblkp = io_structs[iostmt1]))
903: io_structs[iostmt1] = ioblkp =
904: autovar(1, ios->type, PNULL, IO_BLOCK_NAME);
905: .
906: 738c
907: ioblkp->vtype = ios->type;
908: .
909: 732,735c
910: iob_data *iod;
911: char *s, *se;
912: .
913: 729a
914: if (intfile) {
915: ios = io_stuff + iostmt;
916: iostmt1 = IOREAD;
917: }
918: else {
919: ios = io_stuff;
920: iostmt1 = 0;
921: }
922: io_fields = ios->fields;
923: .
924: 690c
925: fmtp = (Addrp)mkaddcon(lp->stateno);
926: /* lp->stateno for names fmt_nnn */
927: lp->labused = 1;
928: .
929: 688c
930: struct Labelblock *lp;
931: lp = mklabel(p->constblock.const.ci);
932: if( (k = fmtstmt(lp)) > 0 )
933: .
934: 674,675c
935: varfmt = YES;
936: fmtp = asg_addr(p);
937: .
938: 588a
939: struct io_setup *ios;
940: .
941: 587c
942: int iostmt1, k;
943: .
944: 583c
945: register Addrp unitp, fmtp, recp;
946: .
947: 577a
948:
949: LOCAL Addrp asg_addr(p)
950: union Expression *p;
951: {
952: extern Namep asg_name();
953: register Addrp q;
954:
955: if (p->tag != TPRIM)
956: badtag("asg_addr", p->tag);
957: q = ALLOC(Addrblock);
958: q->tag = TADDR;
959: q->vtype = TYCHAR;
960: q->vstg = STGAUTO;
961: q->ntempelt = 1;
962: q->isarray = 0;
963: q->memoffset = ICON(0);
964: q->uname_tag = UNAM_NAME;
965: q->user.name = asg_name(p->primblock.namep->varname);
966: return q;
967: }
968: .
969: 571,576c
970: putexpr(q);
971: if(ioendlab) {
972: exif(mkexpr(OPLT, cpexpr(zork), ICON(0)));
973: exgoto(execlab(ioendlab));
974: exendif();
975: }
976: if(ioerrlab) {
977: exif(mkexpr(iostmt==IOREAD||iostmt==IOWRITE ? OPGT : OPNE,
978: cpexpr(zork), ICON(0)));
979: exgoto(execlab(ioerrlab));
980: exendif();
981: }
982: if (zorkf)
983: templist = mkchain(zorkf, templist);
984: .
985: 569c
986: q = fixexpr( mkexpr(OPASSIGN, cpexpr(zork), q));
987: .
988: 566c
989: expptr zork, zorkf;
990:
991: if (!(zork = IOSTP) && (ioendlab || ioerrlab))
992: zork = zorkf = (expptr)mktemp(tyint, PNULL, IO_RESRC_NAME);
993: else
994: zorkf = 0;
995: if(zork)
996: .
997: 546,556d
998: 533,537c
999: expptr mc = mkconv(TYLONG, ICON(type));
1000: q = c ? call4(TYINT, "do_lio", mc, nelt, addr, c)
1001: : call3(TYINT, "do_lio", mc, nelt, addr);
1002: }
1003: else {
1004: char *s = ioformatted==FORMATTED ? "do_fio" : "do_uio";
1005: q = c ? call3(TYINT, s, nelt, addr, c)
1006: : call2(TYINT, s, nelt, addr);
1007: }
1008: .
1009: 528a
1010: #endif
1011: c = ALLOC(Addrblock);
1012: c->tag = TADDR;
1013: c->vtype = type;
1014: c->vstg = STGAUTO;
1015: c->ntempelt = 1;
1016: c->isarray = 1;
1017: c->memoffset = ICON(0);
1018: c->uname_tag = UNAM_IDENT;
1019: sprintf(c->user.ident, "sizeof(%s)", c_type_decl ((type
1020: == TYCHAR ? TYADDR : type), NULL));
1021: .
1022: 519c
1023: #if 0
1024: .
1025: 515a
1026: char *c_type_decl ();
1027: .
1028: 514d
1029: 502a
1030: extern Constp mkconst();
1031: register Addrp c = 0;
1032: .
1033: 494,496d
1034: 457c
1035: }
1036: else if(qe->headblock.vtype != TYERROR)
1037: .
1038: 283c
1039:
1040: .
1041: 279,280c
1042: io_structs[iostmt] = ioblkp =
1043: autovar(1, ios->type, PNULL, IO_BLOCK_NAME);
1044: .
1045: 277a
1046: ios = io_stuff + iostmt;
1047: io_fields = ios->fields;
1048: ioblkp = io_structs[iostmt];
1049: .
1050: 244,272c
1051: else if(iostmt == IOREAD && ioerrlab && ioendlab && ioerrlab!=ioendlab)
1052: IOSTP = (expptr) mktemp(TYINT, PNULL, IO_START_NAME);
1053: .
1054: 232c
1055: execlab(ioerrlab = p->constblock.const.ci);
1056: .
1057: 226c
1058: execlab(ioendlab = p->constblock.const.ci);
1059: .
1060: 222c
1061: ioerrlab = ioendlab = 0;
1062: .
1063: 216a
1064: struct io_setup *ios;
1065: .
1066: 193,194c
1067: s0 = s = lexline(&n);
1068: se = t = s + n;
1069:
1070: /* fix MYQUOTES (\002's) and \\'s */
1071:
1072: while(s < se)
1073: switch(*s++) {
1074: case 2:
1075: t += 3; break;
1076: case '"':
1077: case '\\':
1078: t++; break;
1079: }
1080: s = s0;
1081: lp->fmtstring = t = mem(t - s + 1, 0);
1082: while(s < se)
1083: switch(k = *s++) {
1084: case 2:
1085: t[0] = '\\';
1086: t[1] = '0';
1087: t[2] = '0';
1088: t[3] = '2';
1089: t += 4;
1090: break;
1091: case '"':
1092: case '\\':
1093: *t++ = '\\';
1094: /* no break */
1095: default:
1096: *t++ = k;
1097: }
1098: *t = 0;
1099: .
1100: 189,191c
1101: char *s0, *lexline();
1102: register char *s, *se, *t;
1103: register k;
1104: .
1105: 184d
1106: 160a
1107:
1108: LOCAL char _0[] = "0";
1109: LOCAL char *cilist_names[] = {
1110: "cilist",
1111: "cierr",
1112: "ciunit",
1113: "ciend",
1114: "cifmt",
1115: "cirec"
1116: };
1117: LOCAL char *icilist_names[] = {
1118: "icilist",
1119: "icierr",
1120: "iciunit",
1121: "iciend",
1122: "icifmt",
1123: "icirlen",
1124: "icirnum"
1125: };
1126: LOCAL char *olist_names[] = {
1127: "olist",
1128: "oerr",
1129: "ounit",
1130: "ofnm",
1131: "ofnmlen",
1132: "osta",
1133: "oacc",
1134: "ofm",
1135: "orl",
1136: "oblnk"
1137: };
1138: LOCAL char *cllist_names[] = {
1139: "cllist",
1140: "cerr",
1141: "cunit",
1142: "csta"
1143: };
1144: LOCAL char *alist_names[] = {
1145: "alist",
1146: "aerr",
1147: "aunit"
1148: };
1149: LOCAL char *inlist_names[] = {
1150: "inlist",
1151: "inerr",
1152: "inunit",
1153: "infile",
1154: "infilen",
1155: "inex",
1156: "inopen",
1157: "innum",
1158: "innamed",
1159: "inname",
1160: "innamlen",
1161: "inacc",
1162: "inacclen",
1163: "inseq",
1164: "inseqlen",
1165: "indir",
1166: "indirlen",
1167: "infmt",
1168: "infmtlen",
1169: "inform",
1170: "informlen",
1171: "inunf",
1172: "inunflen",
1173: "inrecl",
1174: "innrec",
1175: "inblank",
1176: "inblanklen"
1177: };
1178:
1179: LOCAL char **io_fields;
1180:
1181: #define zork(n,t) n, sizeof(n)/sizeof(char *) - 1, t
1182:
1183: LOCAL io_setup io_stuff[] = {
1184: zork(cilist_names, TYCILIST), /* external read/write */
1185: zork(inlist_names, TYINLIST), /* inquire */
1186: zork(olist_names, TYOLIST), /* open */
1187: zork(cllist_names, TYCLLIST), /* close */
1188: zork(alist_names, TYALIST), /* rewind */
1189: zork(alist_names, TYALIST), /* backspace */
1190: zork(alist_names, TYALIST), /* endfile */
1191: zork(icilist_names,TYICILIST), /* internal read */
1192: zork(icilist_names,TYICILIST) /* internal write */
1193: };
1194:
1195: #undef zork
1196:
1197: .
1198: 24c
1199: Addrp ioblkp;
1200: .
1201: 20,21d
1202: 12c
1203: iob_data *iob_list;
1204: Addrp io_structs[9];
1205: .
1206: 10a
1207: #include "iob.h"
1208: .
1209: \Rogue\Monster\
1210: else
1211: echo "will not over write ./io.c.ed"
1212: fi
1213: if `test ! -s ./lex.c.ed`
1214: then
1215: echo "writting ./lex.c.ed"
1216: cat > ./lex.c.ed << '\Rogue\Monster\'
1217: 985a
1218:
1219: /* Check for NAG's special hex constant */
1220:
1221: if (isdigit (*nextch) && (*(nextch + 1) == '#' ||
1222: (isdigit (*(nextch + 1)) && *(nextch + 2) == '#'))) {
1223:
1224: radix = atoi (nextch);
1225: if (*++nextch != '#')
1226: nextch++;
1227: if (radix != 2 && radix != 8 && radix != 16) {
1228: erri ("invalid base for constant, defaulting to hex", radix);
1229: radix = 16;
1230: } /* if */
1231: nextch++;
1232: for (p = token; hextoi (*nextch) < radix;)
1233: *p++ = *nextch++;
1234: toklen = p - token;
1235: token[toklen] = '\0';
1236: return (radix == 16) ? SHEXCON : ((radix == 8) ? SOCTCON :
1237: SBITCON);
1238: } /* if */
1239:
1240: .
1241: 930a
1242:
1243: /* BUG BUG BUG Why the heck is this a single OR? (mwm 6-20-89) */
1244:
1245: .
1246: 923a
1247:
1248: .
1249: 840a
1250: /* gettok -- moves the right amount of text from nextch into the token
1251: buffer. token initially contains garbage (leftovers from the prev token) */
1252:
1253: .
1254: \Rogue\Monster\
1255: else
1256: echo "will not over write ./lex.c.ed"
1257: fi
1258: if `test ! -s ./machdefs.h.ed`
1259: then
1260: echo "writting ./machdefs.h.ed"
1261: cat > ./machdefs.h.ed << '\Rogue\Monster\'
1262: 1,15c
1263: /*#define SDB 1*/
1264: .
1265: \Rogue\Monster\
1266: else
1267: echo "will not over write ./machdefs.h.ed"
1268: fi
1269: if `test ! -s ./main.c.ed`
1270: then
1271: echo "writting ./main.c.ed"
1272: cat > ./main.c.ed << '\Rogue\Monster\'
1273: 378d
1274: 369,376d
1275: 305,318d
1276: 262,265d
1277: 255,258d
1278: 226d
1279: 220,221c
1280: /* fatal("vax cannot recover from floating exception");*/
1281: .
1282: 99c
1283: f2c_entry ("Fr", P_ONE_ARG, P_STRING, &fl_fmt_string, 0),
1284: f2c_entry ("ev", P_NO_ARGS, P_INT, &define_equivs, NO)
1285: .
1286: 67a
1287: int define_equivs = YES;
1288: .
1289: 30d
1290: 8,28d
1291: 1,2c
1292: char xxxvers[] = "\n@(#) FORTRAN to C Translator, VERSION 0.4, June 29, 1989\n";
1293: #define VER 0x9629 /* for pi; 8YMDD */
1294: .
1295: \Rogue\Monster\
1296: else
1297: echo "will not over write ./main.c.ed"
1298: fi
1299: if `test ! -s ./mem.c.ed`
1300: then
1301: echo "writting ./mem.c.ed"
1302: cat > ./mem.c.ed << '\Rogue\Monster\'
1303: 59a
1304: }
1305:
1306: void
1307: new_iob_data(ios, name)
1308: register io_setup *ios;
1309: char *name;
1310: {
1311: register iob_data *iod;
1312: register char **s, **se;
1313:
1314: iod = (iob_data *)
1315: mem(sizeof(iob_data) + ios->nelt*sizeof(char *), 1);
1316: iod->next = iob_list;
1317: iob_list = iod;
1318: iod->type = ios->fields[0];
1319: iod->name = cpstring(name);
1320: s = iod->fields;
1321: se = s + ios->nelt;
1322: while(s < se)
1323: *s++ = "0";
1324: *s = 0;
1325: }
1326:
1327: char *
1328: string_num(pfx, n)
1329: char *pfx;
1330: long n;
1331: {
1332: char buf[32];
1333: sprintf(buf, "%s%ld", pfx, n);
1334: /* can't trust return type of sprintf -- BSD gets it wrong */
1335: return strcpy(mem(strlen(buf)+1,0), buf);
1336: }
1337:
1338: char *
1339: cpstring(s)
1340: register char *s;
1341: {
1342: return strcpy(mem(strlen(s)+1,0), s);
1343: }
1344:
1345: static defines *define_list;
1346:
1347: void
1348: define_start(outfile, s1, s2, post)
1349: FILE *outfile;
1350: char *s1, *s2, *post;
1351: {
1352: defines *d;
1353: int n, n1;
1354:
1355: n = n1 = strlen(s1);
1356: if (s2)
1357: n += strlen(s2);
1358: d = (defines *)mem(sizeof(defines)+n, 1);
1359: d->next = define_list;
1360: define_list = d;
1361: strcpy(d->defname, s1);
1362: if (s2)
1363: strcpy(d->defname + n1, s2);
1364: nice_printf(outfile, "#define %s %s", d->defname, post);
1365: }
1366:
1367: void
1368: other_undefs(outfile)
1369: FILE *outfile;
1370: {
1371: defines *d;
1372: if (d = define_list) {
1373: define_list = 0;
1374: nice_printf(outfile, "\n");
1375: do
1376: nice_printf(outfile, "#undef %s\n", d->defname);
1377: while(d = d->next);
1378: nice_printf(outfile, "\n");
1379: }
1380: .
1381: 57,58c
1382: register int k = n + 2, L;
1383: for(L = 0; L < n; L++)
1384: if (s[L] == '"')
1385: k++;
1386: rv = s1 = mem(k);
1387: *s1++ = '"';
1388: for(L = 0; L < n; L++) {
1389: if (s[L] == '"')
1390: *s1++ = '\\';
1391: *s1++ = s[L];
1392: }
1393: *s1 = 0;
1394: .
1395: 55a
1396: register char *s1;
1397: .
1398: 53,54c
1399: register char *s;
1400: register int n;
1401: .
1402: 48c
1403: return rv;
1404: .
1405: 44,45c
1406: rv = b->buf;
1407: mem_last = rv + sizeof(b->buf);
1408: s = rv + n;
1409: .
1410: 28c
1411: if (round)
1412: mem_next = (char *)(
1413: ((long)mem_next + sizeof(char *)-1)
1414: & ~(sizeof(char *)-1));
1415: rv = mem_next;
1416: s = rv + n;
1417: .
1418: 26c
1419: register char *rv, *s;
1420: .
1421: 22c
1422: mem(n, round)
1423: .
1424: 1a
1425: #include "iob.h"
1426: #include <string.h>
1427: .
1428: \Rogue\Monster\
1429: else
1430: echo "will not over write ./mem.c.ed"
1431: fi
1432: if `test ! -s ./misc.c.ed`
1433: then
1434: echo "writting ./misc.c.ed"
1435: cat > ./misc.c.ed << '\Rogue\Monster\'
1436: 1137a
1437: } /* struct_eq */
1438:
1439: /* biggest_type -- returns the largest type that can be used to output
1440: offset padding bytes. */
1441:
1442: int biggest_type (offset)
1443: int offset;
1444: {
1445: if (offset % typesize[TYDCOMPLEX] == 0)
1446: return TYDCOMPLEX;
1447: if (offset % typesize[TYDREAL] == 0)
1448: return TYDREAL;
1449: if (offset % typesize[TYLONG] == 0)
1450: return TYLONG;
1451: if (offset % typesize[TYSHORT] == 0)
1452: return TYSHORT;
1453: return TYCHAR;
1454: } /* biggest_type */
1455: .
1456: 888a
1457: case OPASSIGNI:
1458: .
1459: 745d
1460: 730c
1461:
1462: .
1463: 559a
1464: nextext->init_values = CHNULL;
1465: .
1466: 510c
1467: /* lp->labused = YES; */
1468: .
1469: 485a
1470: lp->fmtstring = 0;
1471: .
1472: 275,276d
1473: 273d
1474: 247c
1475: static char name[IDENT_LEN+1];
1476: .
1477: \Rogue\Monster\
1478: else
1479: echo "will not over write ./misc.c.ed"
1480: fi
1481: if `test ! -s ./names.c.ed`
1482: then
1483: echo "writting ./names.c.ed"
1484: cat > ./names.c.ed << '\Rogue\Monster\'
1485: 605,610c
1486: "acos", "alist", "asin", "asm", "atan", "atan2", "auto", "break",
1487: "case", "char", "cilist", "cllist", "const", "continue", "cos", "cosh",
1488: "default", "do", "double", "else", "entry", "enum", "exp",
1489: "extern", "flag", "float", "for", "ftnint", "ftnlen", "goto",
1490: "icilist", "if", "inlist", "int", "log", "long",
1491: "noalias", "olist", "register", "return",
1492: .
1493: 602a
1494: /* Also includes keywords used for I/O in f2c.h */
1495: .
1496: 545c
1497: static char buf[USER_LABEL_MAX + 1];
1498: .
1499: 427,429c
1500: define_start (outfile, varstr (XL, ext -> extname),
1501: comm_union_name (count, NULL), CNULL);
1502: .
1503: 264,267c
1504: sprintf (pointer, "_%d", count);
1505: .
1506: 78a
1507: case TYCILIST: strcpy (buff, "cilist"); break;
1508: case TYICILIST: strcpy (buff, "icilist"); break;
1509: case TYOLIST: strcpy (buff, "olist"); break;
1510: case TYCLLIST: strcpy (buff, "cllist"); break;
1511: case TYALIST: strcpy (buff, "alist"); break;
1512: case TYINLIST: strcpy (buff, "inlist"); break;
1513: .
1514: \Rogue\Monster\
1515: else
1516: echo "will not over write ./names.c.ed"
1517: fi
1518: if `test ! -s ./names.h.ed`
1519: then
1520: echo "writting ./names.h.ed"
1521: cat > ./names.h.ed << '\Rogue\Monster\'
1522: 18a
1523: #define IO_YAIN_NAME "io_" /* Yet another I/O Name */
1524: #define IO_FMT_NAME "fmt_" /* IO Format prefix */
1525: #define IO_RESRC_NAME "io_rc"
1526: .
1527: \Rogue\Monster\
1528: else
1529: echo "will not over write ./names.h.ed"
1530: fi
1531: if `test ! -s ./nice_printf.c.ed`
1532: then
1533: echo "writting ./nice_pf.c.ed"
1534: cat > ./nice_pf.c.ed << '\Rogue\Monster\'
1535: 229c
1536: cursor_pos = in_string ? 0 : ind +
1537: .
1538: 211a
1539: (void) safe_strncpy (next_slot, pointer + 1, sizeof(output_buf)-1);
1540: .
1541: 210d
1542: 198,199c
1543: pointer = adjust_pointer_in_string(pointer);
1544: else if (strchr("&*+-/<=>|", *pointer)
1545: .
1546: 167c
1547: else if (word_start && isntident(*(unsigned char *)pointer))
1548: .
1549: 164,165c
1550: if (!word_start && isident(*(unsigned char *)pointer))
1551: .
1552: 160,162c
1553: at the same time. Must check for tokens first, since '-' is considered
1554: part of an identifier; checking isident first would mean breaking up "->" */
1555: .
1556: 129d
1557: 124c
1558: if (in_string)
1559: for (pointer = next_slot; *pointer && *pointer != '\n' &&
1560: cursor_pos <= max_line_len; pointer++)
1561: cursor_pos++;
1562: else
1563: for (pointer = next_slot; *pointer && *pointer != '\n' &&
1564: .
1565: 117,119d
1566: 113a
1567: ind = indent <= MAX_INDENT
1568: ? indent
1569: : MIN_INDENT + indent % (MAX_INDENT - MIN_INDENT);
1570:
1571: .
1572: 100a
1573: extern char tr_tab[]; /* in output.c */
1574: register char *Tr = tr_tab;
1575: int ind;
1576: .
1577: 97d
1578: 89c
1579: /* #define isident(x) (isalnum (x) || (x) == '_' || (x) == '.' || (x) == '-') */
1580: #define isident(x) (Tr[x] & 1)
1581: #define isntident(x) (!Tr[x])
1582: .
1583: 81a
1584: static char *
1585: adjust_pointer_in_string(pointer)
1586: register char *pointer;
1587: {
1588: register char *s, *s1, *se, *s0;
1589:
1590: if (pointer - next_slot < 20) /* arbitrary choice */
1591: return next_slot - 1;
1592: /* arrange not to break \002 */
1593: for(s = s1 = next_slot; s < pointer; s++) {
1594: s0 = s1;
1595: s1 = s;
1596: if (*s == '\\') {
1597: se = s++ + 4;
1598: if (se > pointer)
1599: break;
1600: if (*s < '0' || *s > '7')
1601: continue;
1602: while(++s < se)
1603: if (*s < '0' || *s > '7')
1604: break;
1605: --s;
1606: }
1607: }
1608: return s0 - 1;
1609: }
1610:
1611: .
1612: 22c
1613: int tab = ind + (use_extra ? TOO_LONG_INDENT : 0);
1614: .
1615: 20a
1616: ind = indent <= MAX_INDENT
1617: ? indent
1618: : MIN_INDENT + indent % (MAX_INDENT - MIN_INDENT);
1619:
1620: .
1621: 19c
1622: int ind;
1623: .
1624: 8a
1625: #define MAX_INDENT 44
1626: #define MIN_INDENT 22
1627: .
1628: 7d
1629: 2d
1630: \Rogue\Monster\
1631: else
1632: echo "will not over write ./nice_pf.c.ed"
1633: fi
1634: if `test ! -s ./nice_pf.h.ed`
1635: then
1636: echo "writting ./nice_pf.h.ed"
1637: cat > ./nice_pf.h.ed << '\Rogue\Monster\'
1638: 5c
1639: #define MAX_OUTPUT_SIZE 6000 /* Number of chars on one output line PLUS
1640: .
1641: \Rogue\Monster\
1642: else
1643: echo "will not over write ./nice_pf.h.ed"
1644: fi
1645: if `test ! -s ./output.c.ed`
1646: then
1647: echo "writting ./output.c.ed"
1648: cat > ./output.c.ed << '\Rogue\Monster\'
1649: 1168a
1650: extern int tab_size;
1651: register char *s;
1652:
1653: s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_+-.";
1654: while(*s)
1655: tr_tab[*s++] = 3;
1656: tr_tab['>'] = 1;
1657: .
1658: 1157a
1659: char tr_tab[256]; /* machine dependent */
1660: .
1661: 1114,1141d
1662: 1104,1108d
1663: 1096d
1664: 1050,1054c
1665: #endif
1666: ONEOF(q->addrblock.vstg,
1667: M(STGARG)|M(STGCOMMON)|M(STGEQUIV)|M(STGCONST))
1668: || (memoffset && (!ISICON(memoffset)
1669: || memoffset->constblock.const.ci)))
1670: || ONEOF(q->addrblock.vstg,
1671: M(STGINIT)|M(STGAUTO)|M(STGBSS))
1672: && !q->addrblock.isarray)
1673: .
1674: 1047c
1675: q -> addrblock.vstg, M(STGARG)|M(STGEQUIV)) ||
1676: .
1677: 1045c
1678: !oneof_stg(q -> addrblock.uname_tag == UNAM_NAME ?
1679: .
1680: 1043c
1681: !ONEOF (q -> addrblock.vstg, M(STGEXT)|M(STGLENG))
1682: && (
1683: #if 0
1684: .
1685: 983a
1686: if (q->tag == TADDR) {
1687: if (q->addrblock.vtype > TYERROR) {
1688: /* I/O block */
1689: nice_printf(outfile, "&%s", q->addrblock.user.ident);
1690: continue;
1691: }
1692: if (!byvalue && q->addrblock.isarray
1693: && q->addrblock.vtype != TYCHAR
1694: && q->addrblock.memoffset->tag == TCONST
1695: && q->addrblock.memoffset->constblock.const.ci == 0) {
1696:
1697: /* &x[0] == x */
1698: /* This also prevents &sizeof(doublereal)[0] */
1699: switch(q->addrblock.uname_tag) {
1700: case UNAM_NAME:
1701: output_name(outfile, q->addrblock.user.name);
1702: continue;
1703: case UNAM_IDENT:
1704: nice_printf(outfile, "%s",
1705: q->addrblock.user.ident);
1706: continue;
1707: case UNAM_EXTERN:
1708: output_extern(outfile,
1709: &extsymtab[q->addrblock.memno]);
1710: continue;
1711: }
1712: }
1713: }
1714:
1715: .
1716: 976,977c
1717: for (cp = arglist; cp; cp = cp -> nextp, done_once = TRUE) {
1718: .
1719: 961c
1720: nice_printf(outfile, " (");
1721: .
1722: 940,947d
1723: 909a
1724: register expptr q;
1725: .
1726: 907,908d
1727: 894d
1728: 877,879d
1729: 813a
1730: /* Fudge character/arithmetic pairs: promote char to int. */
1731: /* This mainuplation is meant to make ichar() work right. */
1732:
1733: if (e->vtype >= TYSHORT && e->vtype <= TYLOGICAL) {
1734: register union Expression *Offset;
1735:
1736: if (e->leftp && e->leftp->tag == TADDR
1737: && e->leftp->addrblock.vtype == TYCHAR) {
1738: e->leftp->addrblock.vtype = tyint;
1739: Offset = e->leftp->addrblock.memoffset;
1740: e->leftp->addrblock.memoffset =
1741: Offset
1742: ? mkexpr(OPSTAR, Offset, ICON(typesize[tyint]))
1743: : ICON(0);
1744: e->leftp->addrblock.isarray = 1;
1745: }
1746: if (e->rightp && e->rightp->tag == TADDR
1747: && e->rightp->addrblock.vtype == TYCHAR) {
1748: e->rightp->addrblock.vtype = tyint;
1749: Offset = e->rightp->addrblock.memoffset;
1750: e->rightp->addrblock.memoffset =
1751: Offset
1752: ? mkexpr(OPSTAR, Offset, ICON(typesize[tyint]))
1753: : ICON(0);
1754: e->rightp->addrblock.isarray = 1;
1755: }
1756: }
1757:
1758: .
1759: 754a
1760: case OPIDENTITY:
1761: .
1762: 110d
1763: 94a
1764: /* OPASSIGNI 56 */ { BINARY_OP, 2, "%l = &%r" },
1765: /* OPIDENTITY 57 */ { UNARY_OP, 15, "%l" },
1766: .
1767: 27,28c
1768: /* OPEQV 9 */ { BINARY_OP, 9, "%l == %r" },
1769: /* OPNEQV 10 */ { BINARY_OP, 9, "%l != %r" },
1770: .
1771: \Rogue\Monster\
1772: else
1773: echo "will not over write ./output.c.ed"
1774: fi
1775: if `test ! -s ./p1output.c.ed`
1776: then
1777: echo "writting ./p1output.c.ed"
1778: cat > ./p1output.c.ed << '\Rogue\Monster\'
1779: 359a
1780: case OPIDENTITY:
1781: .
1782: 209c
1783: stg, M(STGARG)|M(STGEQUIV)) && addrp->vtype != TYCHAR) {
1784: .
1785: 206c
1786: Lengths are passed by value, so don't check STGLENG
1787: 28-Jun-89 (dmg) Added the check for != TYCHAR
1788: */
1789: .
1790: \Rogue\Monster\
1791: else
1792: echo "will not over write ./p1output.c.ed"
1793: fi
1794: if `test ! -s ./pccdefs.h.ed`
1795: then
1796: echo "writting ./pccdefs.h.ed"
1797: cat > ./pccdefs.h.ed << '\Rogue\Monster\'
1798: 56,64c
1799: #define P2SHORT 3
1800: #define P2INT 4
1801: #define P2LONG 4
1802: .
1803: 1c
1804: /* The following numbers are strange, and implementation-dependent */
1805: .
1806: \Rogue\Monster\
1807: else
1808: echo "will not over write ./pccdefs.h.ed"
1809: fi
1810: if `test ! -s ./proc.c.ed`
1811: then
1812: echo "writting ./proc.c.ed"
1813: cat > ./proc.c.ed << '\Rogue\Monster\'
1814: 1522a
1815: doing_setbound = 0;
1816: .
1817: 1521c
1818: p->basexpr = make_int_expr (fixtype (q));
1819: .
1820: 1491c
1821: p->dims[i].dimexpr = make_int_expr (fixtype (q));
1822: .
1823: 1458a
1824: doing_setbound = 1;
1825: .
1826: 1445a
1827: extern expptr make_int_expr ();
1828: extern int doing_setbound;
1829: .
1830: 1046,1099d
1831: 1003,1007d
1832: 990,993c
1833:
1834: .
1835: 959,964d
1836: 770,773d
1837: 733,761d
1838: 727,731d
1839: 688,691c
1840: (qclass==CLVAR && qstg==STGUNKNOWN) ) {
1841: if (! q -> vis_assigned)
1842: warn1("local variable %s never used",
1843: varstr(VL,q->varname) );
1844: } else if(qclass==CLVAR && qstg==STGBSS) {
1845: .
1846: 658,686d
1847: 597,600d
1848: 565,569d
1849: 536,542d
1850: 519,524d
1851: 451,454d
1852: 439,442d
1853: 404,411d
1854: 402d
1855: 397,399d
1856: 394d
1857: 390,392d
1858: 260,281d
1859: 172,186d
1860: 111,123d
1861: 97d
1862: 87,95d
1863: 41,44d
1864: 18a
1865: char *memname();
1866: .
1867: 4,12d
1868: \Rogue\Monster\
1869: else
1870: echo "will not over write ./proc.c.ed"
1871: fi
1872: if `test ! -s ./put.c.ed`
1873: then
1874: echo "writting ./put.c.ed"
1875: cat > ./put.c.ed << '\Rogue\Monster\'
1876: 85,86c
1877: /* templist = hookup(templist, holdtemps); */
1878: /* holdtemps = NULL; */
1879:
1880: .
1881: 61d
1882: 57,59d
1883: 50c
1884: P2BAD, P2BAD, P2BAD, P2BAD,
1885: 1,1,1,1,1 /* OPNEG1, OPQUESTd, OPCOLONd, OPASSIGNI, OPIDENTITY */
1886: .
1887: 9,15d
1888: 7a
1889: #include "pccdefs.h"
1890: .
1891: \Rogue\Monster\
1892: else
1893: echo "will not over write ./put.c.ed"
1894: fi
1895: if `test ! -s ./putpcc.c.ed`
1896: then
1897: echo "writting ./putpcc.c.ed"
1898: cat > ./putpcc.c.ed << '\Rogue\Monster\'
1899: 1459c
1900: return (expptr) p;
1901: .
1902: 1447c
1903: cp -> datap = (tagptr) addrfix(putx( mkconv(TYLENG,cp->datap)));
1904: .
1905: 1327c
1906: if( ISCHAR(q) &&
1907: (q->headblock.vclass != CLPROC || q->headblock.vstg == STGARG))
1908: .
1909: 1260a
1910: LOCAL expptr
1911: addrfix(e) /* fudge character string length if it's a TADDR */
1912: expptr e;
1913: {
1914: return e->tag == TADDR ? mkexpr(OPIDENTITY, e, ENULL) : e;
1915: }
1916:
1917: .
1918: 1076c
1919: return (expptr) p;
1920: .
1921: 1070c
1922: return ENULL;
1923: .
1924: 895c
1925: return (Addrp) p;
1926: .
1927: 465a
1928: case OPASSIGNI:
1929: .
1930: 355a
1931: case OPASSIGNI:
1932: case OPIDENTITY:
1933: .
1934: \Rogue\Monster\
1935: else
1936: echo "will not over write ./putpcc.c.ed"
1937: fi
1938: if `test ! -s ./star2s.c.ed`
1939: then
1940: echo "writting ./star2s.c.ed"
1941: cat > ./star2s.c.ed << '\Rogue\Monster\'
1942: 634a
1943:
1944: char *parstate2s (par, pointer)
1945: int par;
1946: char *pointer;
1947: {
1948: static char buff[STATIC_STORE_SIZE];
1949:
1950: if (pointer == NULL)
1951: pointer = buff;
1952:
1953: switch (par) {
1954: case OUTSIDE: strcpy (pointer, "OUTSIDE"); break;
1955: case INSIDE: strcpy (pointer, "INSIDE"); break;
1956: case INDCL: strcpy (pointer, "INDCL"); break;
1957: case INDATA: strcpy (pointer, "INDATA"); break;
1958: case INEXEC: strcpy (pointer, "INEXEC"); break;
1959: default: strcpy (pointer, "Bad parstate '%d'", par);
1960: } /* switch */
1961:
1962: return pointer;
1963: } /* parstate2s */
1964: .
1965: \Rogue\Monster\
1966: else
1967: echo "will not over write ./star2s.c.ed"
1968: fi
1969: if `test ! -s ./star2s.h.ed`
1970: then
1971: echo "writting ./star2s.h.ed"
1972: cat > ./star2s.h.ed << '\Rogue\Monster\'
1973: 3a
1974: char *parstate2s ();
1975: .
1976: \Rogue\Monster\
1977: else
1978: echo "will not over write ./star2s.h.ed"
1979: fi
1980: if `test ! -s ./statics.c.ed`
1981: then
1982: echo "writting ./statics.c.ed"
1983: cat > ./statics.c.ed << '\Rogue\Monster\'
1984: 169a
1985: } /* free_static_inits */
1986: .
1987: 63c
1988: type = biggest_type (val);
1989: val /= typesize[type];
1990: nice_printf (fp, "%s ", c_type_decl (type, 0));
1991: .
1992: 39a
1993: int type;
1994: .
1995: \Rogue\Monster\
1996: else
1997: echo "will not over write ./statics.c.ed"
1998: fi
1999: if `test ! -s ./vax.c.ed`
2000: then
2001: echo "writting ./vax.c.ed"
2002: cat > ./vax.c.ed << '\Rogue\Monster\'
2003: 617,840d
2004: 608d
2005: 603d
2006: 497d
2007: 495c
2008: expptr expr = (expptr) cpexpr (dp -> dims[i].dimexpr);
2009: .
2010: 170d
2011: 144,153d
2012: 140d
2013: 80,87d
2014: 32,33c
2015: #if 1
2016: .
2017: 2,10d
2018: \Rogue\Monster\
2019: else
2020: echo "will not over write ./vax.c.ed"
2021: fi
2022: if `test ! -s ./vaxdefs.h.ed`
2023: then
2024: echo "writting ./vaxdefs.h.ed"
2025: cat > ./vaxdefs.h.ed << '\Rogue\Monster\'
2026: 1,15c
2027: /*#define SDB 1*/
2028: .
2029: \Rogue\Monster\
2030: else
2031: echo "will not over write ./vaxdefs.h.ed"
2032: fi
2033: if `test ! -s ./FINAL_NOTES`
2034: then
2035: echo "writting ./FINAL_NOTES"
2036: cat > ./FINAL_NOTES << '\Rogue\Monster\'
2037: NOTES AS I PREPARE TO LEAVE NAG ON JUNE 30
2038: ----------------------------------------------------------------------
2039:
2040: /user/mark/bin/f2c - translator before I merged the IO stuff
2041: -- source in /user/mark/f2c/hold
2042: /user/mark/bin/f2cio - Dave Gay's version, as of June 28
2043: -- source in /user/mark/update_f2c/new
2044: /user/mark/f2c/f2c - translator with I/O and bugs
2045: -- source in /user/mark/f2c
2046:
2047: (null)com_ bug -- grep for "null" in all source files, I think
2048: the only one is in star2s.c, stg2s(). Set a breakpoint there, run the
2049: translator and look at the stack trace.
2050:
2051: common array init bug -- look at the differences between an
2052: earlier version and the current version. First run the earlier
2053: version to see if it gets it right (it should).
2054:
2055: other bugs -- look at the file /user/mark/mail/dave. These
2056: are the email messages I've exchanged with David Gay
2057: (cbs%uk.ac.nsfnet-relay::com.att.research::dmg). I've incorporated
2058: most of his bug fixes except for the last ones (which 1. increase the
2059: default sizee of the statement function table and 2. fix a problem
2060: with a "too many initializers" error message). There's nothing too
2061: personal in there, I hope!
2062:
2063: Look in my .login for the c and h aliases. Most useful at
2064: searching the right files, avoiding gram.c (yacc output) and gram.o,
2065: but looking at the 5 grammar source files.
2066:
2067: I want to send Dave Gay my whole directory tree, if possible.
2068: PLEASE delete the .o's, files ending in ~, and the executables (look
2069: in /user/mark/bin for some more of these) before tar(1)ing these. If
2070: that's not possible, just /user/mark/f2c subtree. If THAT's not
2071: possible, just the /user/mark/f2c directory by itself.
2072:
2073: I also want to email him the diff -e between /user/mark/f2c
2074: source files and /user/mark/update_f2c/original_f2c source files. You
2075: can find a list of all relevant source files in the file
2076: /user/mark/f2c/myfiles.
2077: \Rogue\Monster\
2078: else
2079: echo "will not over write ./FINAL_NOTES"
2080: fi
2081: echo "Finished archive 1 of 1"
2082: exit
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.