main.c - scc - simple c99 compiler
(HTM) git clone git://git.simple-cc.org/scc
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) LICENSE
---
main.c (1034B)
---
1 #include <errno.h>
2 #include <stdarg.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 #include <scc/arg.h>
8 #include <scc/scc.h>
9 #include "cc2.h"
10 #include "error.h"
11
12 char *argv0;
13 int noswtch;
14
15 void
16 error(unsigned nerror, ...)
17 {
18 va_list va;
19 va_start(va, nerror);
20 fputs("cc2:", stderr);
21 vfprintf(stderr, errlist[nerror], va);
22 va_end(va);
23 putc('\n', stderr);
24 exit(1);
25 }
26
27 static int
28 moreinput(void)
29 {
30 int c;
31
32 repeat:
33 if (ferror(stdin))
34 error(EFERROR, strerror(errno));
35 if (feof(stdin))
36 return 0;
37 if ((c = getchar()) == '\n' || c == EOF)
38 goto repeat;
39 ungetc(c, stdin);
40 return 1;
41 }
42
43 static void
44 usage(void)
45 {
46 fputs("usage: cc2 [irfile]\n", stderr);
47 exit(1);
48 }
49
50 int
51 main(int argc, char *argv[])
52 {
53 ARGBEGIN {
54 case 'd':
55 DBGON();
56 break;
57 default:
58 usage();
59 } ARGEND
60
61 if (argv[0] && !freopen(argv[0], "r", stdin))
62 die("cc2: %s: %s", argv[0], strerror(errno));
63
64 while (moreinput()) {
65 parse();
66 if (curfun) {
67 genaddr();
68 gencfg();
69 genasm();
70 peephole();
71 writeout();
72 }
73 }
74 return 0;
75 }