Annotation of researchv10no/cmd/cbt/btlook.c, revision 1.1.1.1

1.1       root        1: #include "stdio.h"
                      2: #include "cbt.h"
                      3: 
                      4: /* like btbuild, but random access */
                      5: char keybuf[NDSZ];
                      6: char recbuf[32767];
                      7: mbuf key = { keybuf, 0};
                      8: mbuf rec = { recbuf, 0};
                      9: bfile *bf;
                     10: int rflag;
                     11: 
                     12: main(argc, argv)
                     13: char **argv;
                     14: {      int n;
                     15:        if(argv[1][0] == '-') {
                     16:                rflag++;
                     17:                argc--;
                     18:                argv++;
                     19:        }
                     20:        if(argc != 2) {
                     21:                fprintf(stderr, "usage: btlook bfile < recs\n");
                     22:                exit(1);
                     23:        }
                     24:        if((bf = bopen(argv[1], 0)) == NULL) {
                     25:                perror(argv[1]);
                     26:                exit(1);
                     27:        }
                     28:        for(;;) {
                     29:                if(rflag)
                     30:                        getrkey();
                     31:                else 
                     32:                        getakey();
                     33:                if(bseek(bf, key) != 1) {
                     34:                        fprintf(stderr, "not found:%s:\n",key.mdata);
                     35:                        continue;
                     36:                }
                     37:                if(bread(bf, 0, &rec) != 0) {
                     38:                        fprintf(stderr, "vanished:%s:\n", key.mdata);
                     39:                        abort();
                     40:                }
                     41:                if(rec.mlen >= sizeof(recbuf)) {
                     42:                        fprintf(stderr, "rec len %ud: recompile btlook\n",
                     43:                                rec.mlen);
                     44:                        abort();
                     45:                }
                     46:                rec.mdata[rec.mlen] = 0;
                     47:                if(rflag) {
                     48:                        put(2, &key.mlen);
                     49:                        put(key.mlen, key.mdata);
                     50:                        put(2, &rec.mlen);
                     51:                        put(rec.mlen, rec.mdata);
                     52:                } else
                     53:                        printf("%s      %s\n", key.mdata, rec.mdata);
                     54:        }
                     55: }
                     56: 
                     57: get(n, s)
                     58: char *s;
                     59: {      int m;
                     60:        for(m = 0; n > 0; n -= m) {
                     61:                m = read(0, s, n);
                     62:                if(m == 0) {
                     63:                        bclose(bf);
                     64:                        exit(0);
                     65:                }
                     66:                if(m < 0) {
                     67:                        fprintf(stderr, "btlook: io error\n");
                     68:                        abort();
                     69:                }
                     70:                s += m;
                     71:        }
                     72: }
                     73: 
                     74: put(n, s)
                     75: char *s;
                     76: {
                     77:        if(fwrite(s, 1, n, stdout) != n) {
                     78:                fprintf(stderr, "btlook: io error\n");
                     79:                abort();
                     80:        }
                     81: }
                     82: 
                     83: getrkey()
                     84: {
                     85:        get(2, (char *)&key.mlen);
                     86:        if(key.mlen >= sizeof(keybuf)) {
                     87:                fprintf(stderr, "key too long\n");
                     88:                exit(1);
                     89:        }
                     90:        get(key.mlen, key.mdata);
                     91:        key.mdata[key.mlen] = 0;
                     92:        get(2, (char *)&rec.mlen);
                     93:        if(rec.mlen >= sizeof(recbuf)) {
                     94:                fprintf(stderr, "rec len %ud: recompile btlook\n", rec.mlen);
                     95:                abort();
                     96:        }
                     97:        get(rec.mlen, rec.mdata);
                     98: }
                     99: 
                    100: getakey()
                    101: {
                    102:        int c;
                    103:        char *s;
                    104:        for(s=key.mdata;;s++) {
                    105:                c = getchar();
                    106:                switch(c) {
                    107:                case EOF:
                    108:                        exit(0);
                    109:                case '\t':
                    110:                        for(;;) {
                    111:                                switch(getchar()) {
                    112:                                case EOF:
                    113:                                        exit(0);
                    114:                                case '\n':
                    115:                                        goto out;
                    116:                                }
                    117:                        }
                    118:                case '\n':
                    119:                        goto out;
                    120:                default:
                    121:                        *s = c;
                    122:                }
                    123:        }
                    124: out:
                    125:        *s = 0;         
                    126:        key.mlen = s - key.mdata;
                    127:        if(key.mlen >= sizeof(keybuf)) {
                    128:                fprintf(stderr, "key too long:%s:\n", key.mdata);
                    129:                abort();
                    130:        }
                    131: }

unix.superglobalmegacorp.com

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