Annotation of researchv10dc/cmd/post/main.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include <string.h>
                      3: 
                      4: #define USAGE  "usage: pq [-l] [-a attr] [-m mods] [-o fmt] [queries...]\n"
                      5: 
                      6: typedef char   *strings[512];
                      7: typedef char   buffer[BUFSIZ];
                      8: 
                      9: extern char    emp_def[], emp_fmt[], loc_def[], loc_fmt[];
                     10: extern char    *pq_open();
                     11: 
                     12: main(argc, argv)
                     13: int    argc;
                     14: char   *argv[];
                     15: {
                     16:        extern char     *optarg;
                     17:        extern int      optind;
                     18:        char    *attr = emp_def, *mods = "", *ofmt = emp_fmt;
                     19:        strings vars, vals, defs;
                     20:        buffer  prog, out;
                     21:        int     rv = 0;
                     22:        int     c, v, r;
                     23:        char    *pq;
                     24: 
                     25:        while ((c = getopt(argc, argv, "a:m:o:l")) != EOF)
                     26:                switch (c) {
                     27:                case 'a':
                     28:                        attr = optarg;
                     29:                        break;
                     30:                case 'm':
                     31:                        mods = optarg;
                     32:                        break;
                     33:                case 'o':
                     34:                        ofmt = optarg;
                     35:                        break;
                     36:                case 'l':
                     37:                        attr = loc_def;
                     38:                        ofmt = loc_fmt;
                     39:                        break;
                     40:                default:
                     41:                        fputs(USAGE, stderr);
                     42:                        return 1;
                     43:                }
                     44: 
                     45:        strvec(mods, vals, " \t\n");
                     46:        if ((pq = pq_open(vals)) == 0)
                     47:                return pqerr();
                     48: 
                     49:        fmtcomp(prog, ofmt, vars);
                     50:        for (v = 0; vars[v]; v++);
                     51:        strvec(attr, defs, "/:");
                     52: 
                     53:        if (optind == argc)
                     54:                argv[argc++] = "";
                     55:        while (optind < argc) {
                     56:                strvec(argv[optind++], vars + v, "/:");
                     57:                if (!dodef(vars + v, defs))
                     58:                        continue;
                     59:                c = 0;
                     60:                if ((r = pq_write(pq, vars)) != -1)
                     61:                        while ((r = pq_read(pq, vals)) > 0) {
                     62:                                fmtexec(out, prog, vals);
                     63:                                fputs(out, stdout);
                     64:                                fflush(stdout);
                     65:                                c++;
                     66:                        }
                     67:                if (r == -1)
                     68:                        rv += pqerr();
                     69:                if (c == 0)
                     70:                        rv++;
                     71:        }
                     72:        if (pq_close(pq) == -1)
                     73:                rv += pqerr();
                     74:        return rv;
                     75: }
                     76: 
                     77: dodef(vars, defs)
                     78: strings        vars, defs;
                     79: {
                     80:        static buffer   buf;
                     81:        register char   *bp = buf;
                     82:        int     i, m, n;
                     83: 
                     84:        for (m = 0; defs[m]; m++);
                     85:        for (i = 0; vars[i]; i++)
                     86:                if (!strchr(vars[i], '='))
                     87:                        if (i < m) {
                     88:                                n = sprintf(bp, "%s=%s", defs[i], vars[i]);
                     89:                                vars[i] = bp;
                     90:                                bp += n + 1;
                     91:                        } else {
                     92:                                fprintf(stderr, "pq: %s: No attribute\n",
                     93:                                                        vars[i]);
                     94:                                return 0;
                     95:                        }
                     96:        return 1;
                     97: }
                     98: 
                     99: pqerr()
                    100: {
                    101:        extern char pq_error[];
                    102:        fprintf(stderr, "pq: %s\n", pq_error);
                    103:        return 1;
                    104: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.