Files
Digital-Research-Source-Code/CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v102/c068/main.lis
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

177 lines
5.3 KiB
Plaintext

1File: MAIN.C Page 1
1 /*
2 Copyright 1982
3 Alcyon Corporation
4 8716 Production Ave.
5 San Diego, Ca. 92121
6 */
7
8 char *version "@(#) c068 parser 4.0 - Feb 11, 1983";
9 /*
10 ALCYON C Compiler for the Motorola 68000 - Parser
11
12 Called from c68:
13
14 c068 source icode strings
15
16 source: input source code, preprocessed with comments stripped
17
18 icode: contains the intermediate code for the code generator,
19 for a detailed explanaion see ../doc/icode.
20
21 strings: contains all the string constants.
22
23 The basic structure of the parser is as follows:
24
25 main main driver for parser
26 syminit initializes symbol table
27 doextdef external definition syntax
28 getatt get type attributes
29 dlist declaration list for structures/unions
30 getatt recursive gettype call
31 dodecl do one declaration
32 declarator handle declarator syntax
33 dodecl do one external declaraion
34 initlist external initialization list
35 cexpr constant expressions
36 expr arithmetic expressions
37 maketree build operator tree
38 funcbody function body
39 dlist declaration list
40 stmt function statements
41 stmt recursive stmt call
42 expr arithmetic expressions
43
44 */
45
46 #include "parser.h"
47
48 int nextlabel 1;
49 int lineno;
50 char *exprp &exprarea[0];
51
52 /*
53 * main - main routine for parser
54 * Checks arguments, opens input and output files, does main loop
55 * for external declarations and blocks.
56 */
57 main(argc,argv) /* returns - none*/
58 int argc; /* argument count*/
59 char *argv[]; /* argument pointers*/
1File: MAIN.C Page 2
60 {
61 register char *q;
62 register int i;
63
64 for( i = 4; i < argc; i++ ) {
65 q = argv[i];
66 if( *q++ != '-' )
67 usage();
68 while( 1 ) {
69 switch( *q++ ) {
70
71 case 'F':
72 case 'f':
73 fflag++;
74 continue;
75
76 case 'E':
77 case 'e':
78 eflag++;
79 continue;
80
81 case 'W':
82 case 'w':
83 wflag++;
84 continue;
85
86 case '\0':
87 break;
88
89 default:
90 usage();
91 }
92 break;
93 }
94 }
95 if( argc < 4 )
96 usage();
97 if( fopen(argv[1],&ibuf,0) < 0 ) /* 3rd arg for versados */
98 ferror("can't open %s",argv[i]);
99 if( fcreat(argv[2],&obuf,0) < 0 || fcreat(argv[3],&sbuf,0) < 0 )
100 ferror("temp creation error");
101 obp = &obuf;
102 lineno++;
103 frstp = -1; /* [vlh] 3.4 - initialize only once */
104 syminit();
105 while( !peek(EOF) )
106 doextdef();
107 outeof();
108 outdata();
109 copysfile(argv[3]);
110 exit(errcnt!=0);
111 }
112
113 /* usage - output usage error message and die*/
114 usage()
115 {
116 ferror("usage: c068 source icode str [-e] [-f] [-w]");
117 }
118
1File: MAIN.C Page 3
119 /* error - report an error message*/
120 /* outputs current line number and error message*/
121 error(s,x1,x2,x3,x4,x5,x6) /* returns - none*/
122 char *s; /* error message*/
123 int x1, x2, x3, x4, x5, x6; /* args for printf*/
124 {
125 register char *savep;
126
127 savep = obp;
128 obp = 0;
129 errcnt++;
130 if (!inclflag) {
131 if( lineno )
132 printf("* %d: ",lineno);
133 }
134 else /*[vlh] generate filename and approp line #*/
135 printf("%s: * %d: ",inclfile,inclline);
136 printf(s,x1,x2,x3,x4,x5,x6);
137 printf("\n");
138 obp = savep;
139 }
140
141 /* ferror - fatal error*/
142 /* Outputs error message and exits*/
143 ferror(s,x1,x2,x3,x4,x5,x6) /* returns - none*/
144 char *s; /* error message*/
145 int x1, x2, x3, x4, x5, x6; /* args for printf*/
146 {
147 error(s,x1,x2,x3,x4,x5,x6);
148 exit(1);
149 }
150
151 v6flush(v6buf)
152 struct iobuf *v6buf;
153 {
154 register i;
155
156 i = BLEN - v6buf->nunused;
157 v6buf->nunused = BLEN;
158 v6buf->xfree = &(v6buf->buff[0]);
159 if(write(v6buf->fildes,v6buf->xfree,i) != i)
160 return(-1);
161 return(0);
162 }
163 printf(string,a,b,c,d,e,f,g)
164 char *string;
165 int a,b,c,d,e,f,g;
166 {
167 char area[256];
168 register char *p;
169
170 sprintf(area,string,a,b,c,d,e,f,g);
171 for(p = &area[0]; *p; p++)
172 putchar(*p);
173 }