Annotation of researchv10dc/cmd/post/main.c, revision 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.