Annotation of 3BSD/cmd/tp/tp1.c, revision 1.1.1.1

1.1       root        1: #include "tp.h"
                      2: 
                      3: main(argc,argv)
                      4: char **argv;
                      5: {
                      6:        register char c,*ptr;
                      7:        extern cmd(), cmr(),cmx(), cmt();
                      8: 
                      9:        tname = tc;
                     10:        command = cmr;
                     11:        if ((narg = rnarg = argc) < 2)  narg = 2;
                     12:        else {
                     13:                ptr = argv[1];  /* get first argument */
                     14:                parg = &argv[2];        /* pointer to second argument */
                     15:                while (c = *ptr++) switch(c)  {
                     16:                        case '0':
                     17:                        case '1':
                     18:                        case '2':
                     19:                        case '3':
                     20:                        case '4':
                     21:                        case '5':
                     22:                        case '6':
                     23:                        case '7':
                     24:                                tc[8] = c;
                     25:                                mt[7] = c;
                     26:                                continue;
                     27: 
                     28:                        case 'f':
                     29:                                tname = *parg++;
                     30:                                narg--; rnarg--;
                     31:                                continue;
                     32:                        case 'c':
                     33:                                flags |= flc;  continue;
                     34:                        case 'd':
                     35:                                setcom(cmd);  continue;
                     36:                        case 'i':
                     37:                                flags |= fli;  continue;
                     38:                        case 'm':
                     39:                                tname = mt;
                     40:                                flags |= flm;
                     41:                                continue;
                     42:                        case 'r':
                     43:                                flags &= ~flu;  setcom(cmr);  continue;
                     44:                        case 's':
                     45:                                flags |= fls; continue;
                     46:                        case 't':
                     47:                                setcom(cmt);  continue;
                     48:                        case 'u':
                     49:                                flags |= flu;  setcom(cmr);  continue;
                     50:                        case 'v':
                     51:                                flags |= flv;  continue;
                     52:                        case 'w':
                     53:                                flags |= flw;  continue;
                     54:                        case 'x':
                     55:                                setcom(cmx);  continue;
                     56:                        default:
                     57:                                useerr();
                     58:                }
                     59:        }
                     60:        optap();
                     61:        top = nptr = nameblk = sbrk(0);
                     62:        (*command)();
                     63: }
                     64: 
                     65: optap()
                     66: {
                     67:        extern cmr();
                     68: 
                     69:        if ((flags & flm) == 0) {       /*  DECTAPE */
                     70:                tapsiz = TCSIZ;
                     71:                ndirent = TCDIRS;
                     72:                fio =open(tc,2);
                     73:        } else {                        /* MAGTAPE */
                     74:                tapsiz = MTSIZ;
                     75:                ndirent = MDIRENT;
                     76:                if(command == cmr)
                     77:                        fio = open(tname,1);
                     78:                else
                     79:                        fio = open(tname,0);
                     80:        }
                     81:        if (fio < 0)  {
                     82:                printf("Tape open error\n");
                     83:                done();
                     84:        }
                     85:        ndentb = ndirent/TPB;
                     86:        edir = &dir[ndirent];
                     87: }
                     88: 
                     89: setcom(newcom)
                     90: int (*newcom)();
                     91: {
                     92:        extern cmr();
                     93: 
                     94:        if (command != cmr)     useerr();
                     95:        command = newcom;
                     96: }
                     97: 
                     98: useerr()
                     99: {
                    100:        printf("Bad usage\n");
                    101:        done();
                    102: }
                    103: 
                    104: /*/* COMMANDS */
                    105: 
                    106: cmd()
                    107: {
                    108:        extern delete();
                    109: 
                    110:        if (flags & (flm|flc))  useerr();
                    111:        if (narg <= 2)                  useerr();
                    112:        rddir();
                    113:        gettape(delete);
                    114:        wrdir();
                    115:        check();
                    116: }
                    117: 
                    118: cmr()
                    119: {
                    120:        if (flags & (flc|flm))          clrdir();
                    121:        else                            rddir();
                    122:        getfiles();
                    123:        update();
                    124:        check();
                    125: }
                    126: 
                    127: cmt()
                    128: {
                    129:        extern taboc();
                    130: 
                    131:        if (flags & (flc|flw))  useerr();
                    132:        rddir();
                    133:        if (flags & flv)
                    134:                printf("   mode    uid gid tapa    size   date    time name\n");
                    135:        gettape(taboc);
                    136:        check();
                    137: }
                    138: 
                    139: cmx()
                    140: {
                    141:        extern extract();
                    142: 
                    143:        if (flags & (flc))              useerr();
                    144:        rddir();
                    145:        gettape(extract);
                    146:        done();
                    147: }
                    148: 
                    149: check()
                    150: {
                    151:        usage();
                    152:        done();
                    153: }
                    154: 
                    155: done()
                    156: {
                    157:        printf("End\n");
                    158:        exit(0);
                    159: }
                    160: 
                    161: encode(pname,dptr)     /* pname points to the pathname
                    162:                         * nptr points to next location in nameblk
                    163:                         * dptr points to the dir entry            */
                    164: char   *pname;
                    165: struct dent *dptr;
                    166: {
                    167:        register  char *np;
                    168:        register n;
                    169: 
                    170:        dptr->d_namep = np = nptr;
                    171:        if (np > top - NAMELEN)  {
                    172:                if(sbrk(BRKINCR) == (char *)-1) {
                    173:                        printf("Out of core\n");
                    174:                        done();
                    175:                } else
                    176:                        top += BRKINCR;
                    177:        }
                    178:        if((n=strlen(pname)) > NAMELEN) {
                    179:                printf("Pathname too long - %s\nFile ignored\n",pname);
                    180:                clrent(dptr);
                    181:        }
                    182:        else {
                    183:                nptr += n+1;
                    184:                strcpy(np, pname);
                    185:        }
                    186: }
                    187: 
                    188: decode(pname,dptr)     /* dptr points to the dir entry
                    189:                         * name is placed in pname[] */
                    190: char   *pname;
                    191: struct dent *dptr;
                    192: {
                    193: 
                    194:        strcpy(pname, dptr->d_namep);
                    195: }

unix.superglobalmegacorp.com

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