Ratfor in C changes..
Ozan Yigit
oz at yetti.UUCP
Wed Jun 26 06:34:38 AEST 1985
Ian Darwin (darwin!ian) has improved the front-end of the ratfor
program recently posted to net.sources. It now uses getopt(), and
accepts a parameter (-l n) to set the ratfor-generated label number.
Here is a normal diff of this version, to feed into patch 1.3.
Oz
Ps: case stmt handling on its way..
------------------- CUT (obviously) -------------------------
2,6c2,4
< * ratfor
< *
< * A ratfor pre-processor in C. It is almost a direct
< * translation of a pre-processor distributed by the
< * University of Arizona. It closely corresponds to the
---
> * ratfor - A ratfor pre-processor in C.
> * Almost a direct translation of a pre-processor distributed by the
> * University of Arizona. Closely corresponds to the
8,9d5
< * It lacks the "case" construct available in the UNIX
< * version of ratfor.
11c7,9
< * By: Oz
---
> * Lacks the "case" construct available in the UNIX version of ratfor.
> *
> * By: Ozan Yigit, York University, Toronto, Canada
14a13
>
93,96c92,96
<
< /* ------------------------------ */
< /* M A I N L I N E & I N I T */
< /* ------------------------------ */
---
> char *progname;
>
> /*
> * M A I N L I N E & I N I T
> */
102,103c102,104
< int i;
< char *p;
---
> int c, errflg = 0;
> extern int optind;
> extern char *optarg;
105,108c106,132
< if (argc == 1)
< usage();
< if ((infile[0] = fopen(argv[1], "r")) == NULL) {
< fprintf(stderr,"%s: cannot open.\n",argv[1]);
---
> progname = argv[0];
>
> while ((c=getopt(argc, argv, "Chn:o:6:")) != EOF)
> switch (c) {
> case 'C':
> /* not written yet */
> break;
> case 'h':
> /* not written yet */
> break;
> case 'l':
> startlab = atoi(optarg);
> break;
> case 'o':
> if ((freopen(optarg, "w", stdout)) == NULL)
> error("can't write %s\n", optarg);
> break;
> case '6':
> /* not written yet */
> break;
> default:
> ++errflg;
> }
>
> if (errflg) {
> fprintf(stderr,
> "usage: %s [-C][-hx][-l n][-o file][-6x] [file...]\n");
111,115d134
< if (p = argv[2])
< if ((freopen(p, "w", stdout)) == NULL) {
< fprintf(stderr,"%s: cannot create.\n",p);
< exit(1);
< }
116a136,150
> /*
> * present version can only process one file, sadly.
> */
> if (optind >= argc)
> infile[0] = stdin;
> else if ((infile[0] = fopen(argv[optind], "r")) == NULL)
> error("cannot read %s", argv[optind]);
>
> initvars();
>
> parse(); /* call parser.. */
>
> exit(1);
> }
>
118,119c152
< * initialise our stuff..
< *
---
> * initialise
120a154,157
> initvars()
> {
> int i;
>
133,136c170
< label = 23000; /* next generated label */
<
< parse(); /* call parser.. */
< exit(1);
---
> label = startlab; /* next generated label */
139,142c173,175
<
< /* ------------------------------ */
< /* P A R S E R */
< /* ------------------------------ */
---
> /*
> * P A R S E R
> */
204,207c237,239
<
< /* ------------------------------ */
< /* L E X I C A L A N A L Y S E R */
< /* ------------------------------ */
---
> /*
> * L E X I C A L A N A L Y S E R
> */
787,790c819,821
<
< /* ------------------------------ */
< /* C O D E G E N E R A T I O N */
< /* ------------------------------ */
---
> /*
> * C O D E G E N E R A T I O N
> */
794d824
< *
1018c1048
< if (lexstr[0] == DIG2 && lexstr[1] == DIG3)
---
> if (atoi(lexstr) >= startlab)
1358,1361c1388,1390
<
< /* ------------------------------ */
< /* E R R O R M E S S A G E S */
< /* ------------------------------ */
---
> /*
> * E R R O R M E S S A G E S
> */
1365d1393
< *
1377d1404
< *
1380c1407
< char msg[];
---
> char *msg;
1400a1428
>
1402,1403c1430
< * usage
< *
---
> * U T I L I T Y R O U T I N E S
1405,1409d1431
< usage()
< {
< fprintf(stderr,"usage: ratfor <input file> [output file]\n");
< exit(1);
< }
1411,1415d1432
<
< /* ------------------------------ */
< /* U T I L I T Y R O U T I N E S */
< /* ------------------------------ */
<
1418d1434
< *
1471c1487
< if (str1[i] == EOS) {
---
> if (str1[i] == EOS)
1473d1488
< }
1512c1527
< strcpy(defn,p->def);
---
> (void) strcpy(defn,p->def);
1518d1532
< *
1526d1539
<
1542d1554
< *
More information about the Comp.sources.unix
mailing list