scc

A fork of https://git.simple-cc.org/scc/ for Qute

git clone https://git.8pit.net/scc.git

 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
12char *argv0;
13int noswtch;
14
15void
16error(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
27static int
28moreinput(void)
29{
30	int c;
31
32repeat:
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
43static void
44usage(void)
45{
46	fputs("usage: cc2 [irfile]\n", stderr);
47	exit(1);
48}
49
50int
51main(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}