--- bcc/bcc.c Sat Dec 30 04:30:59 1995 +++ new/bcc.c Fri Jan 5 11:40:26 1996 @@ -37,6 +37,10 @@ #define CRT0 "crt0.o" #define GCC "gcc" #define LD "ld86" +#ifdef ANSI_SUPPORT +#define UNPROTO "unprotoize" +#define CP "/bin/cp" +#endif #define STANDARD_CRT0_0_PREFIX LOCALPREFIX "/lib/bcc/i86/" #define STANDARD_CRT0_3_PREFIX LOCALPREFIX "/lib/bcc/i386/" #define STANDARD_EXEC_PREFIX LOCALPREFIX "/lib/bcc/" @@ -88,6 +92,9 @@ PRIVATE struct arg_s asargs = { AS, }; PRIVATE struct arg_s ccargs = { CC1, CC1_MINUS_O_BROKEN, }; PRIVATE struct arg_s cppargs = { CPP, }; +#ifdef ANSI_SUPPORT +PRIVATE struct arg_s unprotoargs = { UNPROTO, }; +#endif #ifdef STANDARD_CRT0_PREFIX PRIVATE struct prefix_s crt0_prefix = { STANDARD_CRT0_PREFIX, }; #endif @@ -137,7 +144,7 @@ FORWARD char *fixpath P((char *path, struct prefix_s *prefix, int mode)); FORWARD void killtemps P((void)); FORWARD void *my_malloc P((unsigned size, char *where)); -FORWARD char *my_mktemp P((void)); +FORWARD char *my_mktemp P((int c_extension)); FORWARD void my_unlink P((char *name)); FORWARD void outofmemory P((char *where)); FORWARD int run P((char *in_name, char *out_name, struct arg_s *argp)); @@ -166,6 +173,10 @@ char *bits_arg; #endif bool_T cc_only = FALSE; +#ifdef ANSI_SUPPORT + bool_T ansi_pass = FALSE; + bool_T quiet_ansi = FALSE; +#endif #ifdef CCC bool_T cpp_pass = TRUE; #else @@ -290,6 +301,18 @@ else if (arg[0] == '-') switch (arg[1]) { +#ifdef ANSI_SUPPORT + case 'a': + if (!strcmp(arg, "-ansi")) + ansi_pass=TRUE; + break; + case 'q': + if (strcmp(arg, "-qansi")) + break; + ansi_pass=TRUE; + quiet_ansi=TRUE; + break; +#endif case 'A': addarg(&asargs, arg + 2); break; @@ -371,6 +394,9 @@ asargs.prog = fixpath(asargs.prog, &exec_prefix, X_OK); ldargs.prog = fixpath(ldargs.prog, &exec_prefix, X_OK); ldrargs.prog = fixpath(ldrargs.prog, &exec_prefix, X_OK); +#ifdef ANSI_SUPPORT + unprotoargs.prog=fixpath(unprotoargs.prog, &exec_prefix, X_OK); +#endif if (tmpdir == NULL && (tmpdir = getenv("TMPDIR")) == NULL) tmpdir = "/tmp"; @@ -430,12 +456,31 @@ in_name = arg; if (ext == 'c') { +#ifdef ANSI_SUPPORT + if (ansi_pass) + { + char *old_tmpdir; + struct arg_s cpargs = { CP, TRUE, }; + + old_tmpdir=tmpdir; + tmpdir="."; + out_name=my_mktemp(TRUE); + tmpdir=old_tmpdir; + run(in_name, out_name, &cpargs); + + addarg(&unprotoargs, out_name); + if (quiet_ansi) + addarg(&unprotoargs, "-q"); + run(NULL, NULL, &unprotoargs); + in_name=out_name; + } +#endif if (cpp_pass) { if (prep_only) out_name = f_out; else - out_name = my_mktemp(); + out_name = my_mktemp(FALSE); if (run(in_name, out_name, &cppargs) != 0) continue; in_name = out_name; @@ -457,7 +502,7 @@ } } else - out_name = my_mktemp(); + out_name = my_mktemp(FALSE); if (run(in_name, out_name, &ccargs) != 0) continue; in_name = out_name; @@ -478,7 +523,7 @@ } } else - out_name = my_mktemp(); + out_name = my_mktemp(FALSE); if (run(in_name, out_name, &cppargs) != 0) continue; in_name = out_name; @@ -501,7 +546,7 @@ } } else - out_name = my_mktemp(); + out_name = my_mktemp(FALSE); addarg(&asargs, "-n"); arg[length - 1] = 's'; addarg(&asargs, arg); @@ -510,7 +555,7 @@ { char *tmp_out_name; - tmp_out_name = my_mktemp(); + tmp_out_name = my_mktemp(FALSE); status = run(in_name, tmp_out_name, &asargs); asargs.argc -= 2; if (status != 0) @@ -670,7 +715,8 @@ return block; } -PRIVATE char *my_mktemp() +PRIVATE char *my_mktemp(c_extension) +int c_extension; { char *p; unsigned digit; @@ -678,8 +724,17 @@ char *template; static unsigned tmpnum; - p = template = stralloc2(tmpdir, "/bccYYYYXXXX"); - p += strlen(p); + if (c_extension) + { + p = template = stralloc2(tmpdir, "/bccYYYYXXXX.c"); + p += strlen(p) - 2; + } + else + { + p = template = stralloc2(tmpdir, "/bccYYYYXXXX"); + p += strlen(p); + } + digits = getpid(); while (*--p == 'X') {