1#include <setjmp.h>2#include <stdio.h>3#include <stdlib.h>4#include <string.h>5#include <errno.h>67#include <scc/arg.h>8#include <scc/scc.h>910#include "cc1.h"1112char *argv0;1314int warnings;15jmp_buf recover;1617int onlycpp, onlyheader;181920extern int failure;2122static void23defmacro(char *macro)24{25 char *p = strchr(macro, '=');2627 if (p)28 *p++ = '\0';29 else30 p = "1";3132 defdefine(macro, p, "command-line");33}3435static void36usage(void)37{38 fputs("usage: cc1 [-Ewd] [-D def[=val]]... [-U def]... "39 "[-I dir]... [-a architecture] [input]\n", stderr);40 exit(1);41}4243int44main(int argc, char *argv[])45{46 int i;47 static struct items uflags, dflags, iflags;4849 ARGBEGIN {50 case 'a':51 architecture = EARGF(usage());52 break;53 case 'D':54 newitem(&dflags, EARGF(usage()));55 break;56 case 'M':57 onlyheader = 1;58 break;59 case 'E':60 onlycpp = 1;61 break;62 case 'I':63 newitem(&iflags, EARGF(usage()));64 break;65 case 'U':66 newitem(&uflags, EARGF(usage()));67 break;68 case 'd':69 DBGON();70 break;71 case 'w':72 warnings = 1;73 break;74 default:75 usage();76 } ARGEND7778 if (argc > 1)79 usage();8081 isyms();82 icode();83 iarch();84 icpp();8586 for (i = 0; i < iflags.n; ++i)87 incdir(iflags.s[i]);8889 for (i = 0; i < dflags.n; ++i)90 defmacro(dflags.s[i]);9192 for (i = 0; i < uflags.n; ++i)93 undefmacro(uflags.s[i]);9495 if (*argv)96 addinput(IFILE, *argv, FAIL);97 else98 addinput(ISTDIN, NULL, FAIL);99100 if (onlycpp || onlyheader) {101 outcpp();102 } else {103 next();104 while (yytoken != EOFTOK)105 decl();106 }107108 return failure;109}