1#include <errno.h>2#include <stdarg.h>3#include <stdio.h>4#include <stdlib.h>5#include <string.h>67#include <scc/arg.h>8#include <scc/scc.h>9#include "cc2.h"10#include "error.h"1112char *argv0;13int noswtch;1415void16error(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}2627static int28moreinput(void)29{30 int c;3132repeat: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}4243static void44usage(void)45{46 fputs("usage: cc2 [irfile]\n", stderr);47 exit(1);48}4950int51main(int argc, char *argv[])52{53 ARGBEGIN {54 case 'd':55 DBGON();56 break;57 default:58 usage();59 } ARGEND6061 if (argv[0] && !freopen(argv[0], "r", stdin))62 die("cc2: %s: %s", argv[0], strerror(errno));6364 while (moreinput()) {65 parse();66 if (curfun) {67 genaddr();68 gencfg();69 genasm();70 peephole();71 writeout();72 }73 }74 return 0;75}