|
|
1.1 ! root 1: /* ! 2: * cpp.c ! 3: * Run CC0 (from LIBPATH under GEMDOS) for old cpp functionality. ! 4: * Default to stdin and stdout. ! 5: * See usage() for details. ! 6: * v0 -- dag 870722 ! 7: * v1 -- steve 870730 COHERENT and MSDOS conditionalization ! 8: */ ! 9: #include <stdio.h> ! 10: #include <path.h> ! 11: #include "var.h" ! 12: #include "varmch.h" ! 13: ! 14: #define VERBOSITY 0 /* must be 0 to compile using old cpp */ ! 15: ! 16: VARIANT variant; ! 17: char vstr[2*VMAXIM/VGRANU + 1]; ! 18: char *cppargs[128]; ! 19: int cppargc; ! 20: int verbose = 0; ! 21: ! 22: #if COHERENT ! 23: #define CC0NAME "cc0" ! 24: extern char **environ; ! 25: extern char *getenv(); ! 26: #endif ! 27: ! 28: #if GEMDOS ! 29: #define CC0NAME "cc0.prg" ! 30: extern char **environ; ! 31: extern char *getenv(); ! 32: #endif ! 33: ! 34: #if MSDOS ! 35: #define CC0NAME "cc0" ! 36: extern char *malloc(); ! 37: extern char *strcat(); ! 38: #endif ! 39: ! 40: main(argc, argv) ! 41: register int argc; ! 42: register char **argv; ! 43: { ! 44: register char *ap; ! 45: register int i, s; ! 46: #if GEMDOS || COHERENT ! 47: char *libptr; ! 48: #endif ! 49: #if MSDOS ! 50: register int len; ! 51: register char *tail; ! 52: #endif ! 53: ! 54: cppargc = 4; ! 55: setvariant(VCPP); ! 56: if (argc-- < 2) ! 57: usage(); ! 58: while (argc-- > 0) { ! 59: ap = *++argv; ! 60: #if DEBUG ! 61: printf("%d: %s\n", argc, ap); ! 62: #endif ! 63: if (*ap == '-') { ! 64: switch (ap[1]) { ! 65: case 'I': ! 66: cppargs[cppargc++] = ap; ! 67: if (ap[2] == 0) { ! 68: if ((cppargs[cppargc++] = *++argv) ! 69: == NULL) ! 70: usage(); ! 71: --argc; ! 72: } ! 73: break; ! 74: ! 75: case 'D': ! 76: case 'U': ! 77: cppargs[cppargc++] = ap; ! 78: break; ! 79: ! 80: case 'o': ! 81: if ((cppargs[3] = *++argv) == NULL) ! 82: usage(); ! 83: --argc; ! 84: break; ! 85: ! 86: case 'C': ! 87: #if VCNEST ! 88: setvariant(VCNEST); ! 89: #endif ! 90: break; ! 91: ! 92: case 'E': ! 93: setvariant(VCPPE); ! 94: break; ! 95: ! 96: case 'Q': ! 97: verbose = 0; ! 98: setvariant(VQUIET); ! 99: break; ! 100: case '3': ! 101: setvariant(V3GRAPH); ! 102: break; ! 103: case 'V': ! 104: verbose++; ! 105: break; ! 106: default: ! 107: usage(); ! 108: } ! 109: } else if (cppargs[2] != NULL) { ! 110: usage(); ! 111: } else ! 112: cppargs[2] = ap; ! 113: } ! 114: ! 115: if (cppargs[2] == NULL) ! 116: cppargs[2] = "-"; ! 117: if (cppargs[3] == NULL) ! 118: cppargs[3] = "-"; ! 119: ! 120: #if GEMDOS || COHERENT ! 121: if ((libptr = getenv("LIBPATH")) == NULL) ! 122: libptr = DEFLIBPATH; ! 123: if ((ap = path(libptr, CC0NAME, AEXEC)) == NULL) ! 124: cerr("cannot find cc0"); ! 125: cppargs[0] = ap; ! 126: #endif ! 127: #if MSDOS ! 128: cppargs[0] = CC0NAME; ! 129: #endif ! 130: makvariant(vstr); ! 131: cppargs[1] = vstr; ! 132: if (verbose) { ! 133: for (i = 0; i<cppargc; i++) ! 134: printf("%s ", cppargs[i]); ! 135: printf("\n"); ! 136: } ! 137: #if GEMDOS || COHERENT ! 138: if (s = execve(cppargs[0], cppargs, environ)) ! 139: if (s < 0) ! 140: perror(cppargs[0]); ! 141: #endif ! 142: #if MSDOS ! 143: for (len=0, i=1; i<cppargc; i++) ! 144: len += strlen(cppargs[i]) + 1; ! 145: if ((tail = malloc(len)) == NULL) ! 146: cerr("cannot allocate tail"); ! 147: for (tail[0]='\0', i=1; i<cppargc; i++) { ! 148: strcat(tail, cppargs[i]); ! 149: if (i < cppargc-1) ! 150: strcat(tail, " "); ! 151: } ! 152: if ((s = execall(cppargs[0], tail)) == 0177) ! 153: cerr("cannot execute cc0"); ! 154: #endif ! 155: exit(s); ! 156: } ! 157: ! 158: usage() { ! 159: fprintf(stderr, "Usage:\tcpp [ option... ] [ file ]\n"); ! 160: #if VERBOSITY ! 161: fprintf(stderr, ! 162: "Options:\n" ! 163: /* UNDOCUMENTED: -3 */ ! 164: #if VCNEST ! 165: " -C\t\t\tallow nested comments\n" ! 166: #endif ! 167: " -Dvariable[=val]\tdefine variable with val [default=1]\n" ! 168: " -E\t\t\tstrip all comments and line numbers\n" ! 169: " -Idirectory\t\tadd directory to #include file search list\n" ! 170: " -o outfile\t\twrite output to outfile [default=stdout]\n" ! 171: " -Q\t\t\tsupress all messages\n" ! 172: " -Uvariable\t\tundefine variable\n" ! 173: " -V\t\t\tprint verbose information\n" ! 174: ); ! 175: #endif ! 176: exit(1); ! 177: } ! 178: ! 179: cerr(s) ! 180: char *s; ! 181: { ! 182: fprintf(stderr, "cpp: %s\n", s); ! 183: exit(1); ! 184: } ! 185: ! 186: /* end of cpp.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.