|
|
1.1 ! root 1: /* ! 2: * Query optimization module ! 3: */ ! 4: ! 5: #include <malloc.h> ! 6: #include <string.h> ! 7: ! 8: typedef struct { ! 9: char *tag; ! 10: short count; ! 11: short copy[512]; ! 12: } opt_t; ! 13: ! 14: extern char *pq_open(); ! 15: ! 16: char * ! 17: opt_open(argv) ! 18: char *argv[]; ! 19: { ! 20: opt_t *opt = (opt_t *) malloc(sizeof (opt_t)); ! 21: ! 22: if ((opt->tag = pq_open(argv)) == 0) { ! 23: free((char *) opt); ! 24: return 0; ! 25: } ! 26: opt->count = -1; ! 27: return (char *) opt; ! 28: } ! 29: ! 30: opt_close(opt) ! 31: opt_t *opt; ! 32: { ! 33: int rv = pq_close(opt->tag); ! 34: free((char *) opt); ! 35: return rv; ! 36: } ! 37: ! 38: opt_read(opt, argv) ! 39: register opt_t *opt; ! 40: register char *argv[]; ! 41: { ! 42: register int rv, i; ! 43: ! 44: if ((rv = pq_read(opt->tag, argv)) > 0) ! 45: for (i = opt->count; i >= 0; i--) ! 46: argv[i] = argv[opt->copy[i]]; ! 47: return rv; ! 48: } ! 49: ! 50: opt_write(opt, argv) ! 51: register opt_t *opt; ! 52: register char *argv[]; ! 53: { ! 54: register int i, j, k = 0; ! 55: char *vec[512]; ! 56: ! 57: for (i = 0; argv[i]; i++) { ! 58: for (j = 0; j < k; j++) ! 59: if (eqattr(argv[i], vec[j])) { ! 60: if (!strchr(vec[j], '=')) ! 61: vec[j] = argv[i]; ! 62: break; ! 63: } ! 64: if (j == k) ! 65: vec[k++] = argv[i]; ! 66: opt->copy[i] = j; ! 67: } ! 68: opt->copy[i] = k; ! 69: opt->count = i; ! 70: vec[k] = 0; ! 71: return pq_write(opt->tag, vec); ! 72: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.