|
|
1.1 ! root 1: /* py_pp.c - generic pretty-printer */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/pepy/RCS/py_pp.c,v 7.0 89/11/23 22:12:06 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/pepy/RCS/py_pp.c,v 7.0 89/11/23 22:12:06 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: py_pp.c,v $ ! 12: * Revision 7.0 89/11/23 22:12:06 mrose ! 13: * Release 6.0 ! 14: * ! 15: */ ! 16: ! 17: /* ! 18: * NOTICE ! 19: * ! 20: * Acquisition, use, and distribution of this module and related ! 21: * materials are subject to the restrictions of a license agreement. ! 22: * Consult the Preface in the User's Manual for the full terms of ! 23: * this agreement. ! 24: * ! 25: */ ! 26: ! 27: ! 28: /* LINTLIBRARY */ ! 29: ! 30: #include <stdio.h> ! 31: #include "psap.h" ! 32: ! 33: #define ps_advise(ps, f) \ ! 34: advise (NULLCP, "%s: %s", (f), ps_error ((ps) -> ps_errno)) ! 35: ! 36: /* DATA */ ! 37: ! 38: static char *myname = "pp"; ! 39: ! 40: static enum { ps2pp, pl2pp } mode = ps2pp; ! 41: ! 42: ! 43: void adios (), advise (); ! 44: ! 45: /* */ ! 46: ! 47: /* ARGSUSED */ ! 48: ! 49: int PY_pp (argc, argv, envp, pfx) ! 50: int argc; ! 51: char **argv, ! 52: **envp; ! 53: IFP pfx; ! 54: { ! 55: register int status = 0; ! 56: register char *cp; ! 57: register FILE *fp; ! 58: ! 59: if (myname = rindex (argv[0], '/')) ! 60: myname++; ! 61: if (myname == NULL || *myname == NULL) ! 62: myname = argv[0]; ! 63: ! 64: for (argc--, argv++; cp = *argv; argc--, argv++) ! 65: if (*cp == '-') { ! 66: if (strcmp (cp + 1, "ps") == 0) { ! 67: mode = ps2pp; ! 68: continue; ! 69: } ! 70: if (strcmp (cp + 1, "pl") == 0) { ! 71: mode = pl2pp; ! 72: continue; ! 73: } ! 74: adios (NULLCP, "usage: %s [ -ps | -pl ] [ files... ]", myname); ! 75: } ! 76: else ! 77: break; ! 78: ! 79: if (argc == 0) ! 80: status = process ("(stdin)", stdin, pfx); ! 81: else ! 82: while (cp = *argv++) { ! 83: if ((fp = fopen (cp, "r")) == NULL) { ! 84: advise (cp, "unable to read"); ! 85: status++; ! 86: continue; ! 87: } ! 88: status += process (cp, fp, pfx); ! 89: (void) fclose (fp); ! 90: } ! 91: ! 92: return status; ! 93: } ! 94: ! 95: /* */ ! 96: ! 97: static int process (file, fp, pfx) ! 98: register char *file; ! 99: register FILE *fp; ! 100: IFP pfx; ! 101: { ! 102: register PE pe; ! 103: register PS ps; ! 104: ! 105: if ((ps = ps_alloc (std_open)) == NULLPS) { ! 106: ps_advise (ps, "ps_alloc"); ! 107: return 1; ! 108: } ! 109: if (std_setup (ps, fp) == NOTOK) { ! 110: advise (NULLCP, "%s: std_setup loses", file); ! 111: return 1; ! 112: } ! 113: ! 114: for (;;) { ! 115: switch (mode) { ! 116: case ps2pp: ! 117: if ((pe = ps2pe (ps)) == NULLPE) ! 118: if (ps -> ps_errno) { ! 119: ps_advise (ps, "ps2pe"); ! 120: you_lose: ; ! 121: ps_free (ps); ! 122: return 1; ! 123: } ! 124: else { ! 125: done: ; ! 126: ps_free (ps); ! 127: return 0; ! 128: } ! 129: break; ! 130: ! 131: case pl2pp: ! 132: if ((pe = pl2pe (ps)) == NULLPE) ! 133: if (ps -> ps_errno) { ! 134: ps_advise (ps, "pl2pe"); ! 135: goto you_lose; ! 136: } ! 137: else ! 138: goto done; ! 139: break; ! 140: } ! 141: ! 142: (void) (*pfx) (pe, 1, NULLIP, NULLVP, NULLCP); ! 143: ! 144: pe_free (pe); ! 145: } ! 146: } ! 147: ! 148: /* ERRORS */ ! 149: ! 150: #include <varargs.h> ! 151: ! 152: ! 153: #ifndef lint ! 154: void _advise (); ! 155: ! 156: ! 157: static void adios (va_alist) ! 158: va_dcl ! 159: { ! 160: va_list ap; ! 161: ! 162: va_start (ap); ! 163: ! 164: _advise (ap); ! 165: ! 166: va_end (ap); ! 167: ! 168: _exit (1); ! 169: } ! 170: #else ! 171: /* VARARGS */ ! 172: ! 173: static void adios (what, fmt) ! 174: char *what, ! 175: *fmt; ! 176: { ! 177: adios (what, fmt); ! 178: } ! 179: #endif ! 180: ! 181: ! 182: #ifndef lint ! 183: static void advise (va_alist) ! 184: va_dcl ! 185: { ! 186: va_list ap; ! 187: ! 188: va_start (ap); ! 189: ! 190: _advise (ap); ! 191: ! 192: va_end (ap); ! 193: } ! 194: ! 195: ! 196: static void _advise (ap) ! 197: va_list ap; ! 198: { ! 199: char buffer[BUFSIZ]; ! 200: ! 201: asprintf (buffer, ap); ! 202: ! 203: (void) fflush (stdout); ! 204: ! 205: fprintf (stderr, "%s: ", myname); ! 206: (void) fputs (buffer, stderr); ! 207: (void) fputc ('\n', stderr); ! 208: ! 209: (void) fflush (stderr); ! 210: } ! 211: #else ! 212: /* VARARGS */ ! 213: ! 214: static void advise (what, fmt) ! 215: char *what, ! 216: *fmt; ! 217: { ! 218: advise (what, fmt); ! 219: } ! 220: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.