Annotation of 3BSD/cmd/apl/aj.c, revision 1.1

1.1     ! root        1: #include "apl.h"
        !             2: 
        !             3: clear()
        !             4: {
        !             5:        register struct nlist *n;
        !             6:        extern freelist[];
        !             7: 
        !             8:        for(n=nlist; n->namep; n++) {
        !             9:                n->itemp = 0;
        !            10:                n->use = 0;
        !            11:                n->namep = 0;
        !            12:                }
        !            13:                freelist[0] = 0;
        !            14:                freelist[1] = -1;       /*empty free list*/
        !            15:                /* brk(memstart);       /*shrink core*/
        !            16:                stack = sp = 0;
        !            17:                Reset();
        !            18: }
        !            19: 
        !            20: lsize(s)
        !            21: char *s;
        !            22: {
        !            23:        register short i;
        !            24:        register char *p;
        !            25: 
        !            26:        i=1;
        !            27:        p=s;
        !            28:        while (*p++) i++;
        !            29:        return(i);
        !            30: }
        !            31: 
        !            32: isize(ip)
        !            33: struct item *ip;
        !            34: {
        !            35:        register struct item *p;
        !            36:        register i;
        !            37: 
        !            38:        p=ip;
        !            39:        i=sizeof *p + p->rank*SINT;
        !            40:        if(p->type == DA)
        !            41:                i += p->size*SDAT; else
        !            42:        if(p->type == CH)
        !            43:                i += p->size;
        !            44:        return(i);
        !            45: }
        !            46: 
        !            47: wsload(ffile)
        !            48: {
        !            49:        long b [ 256 ];
        !            50:        int     ibuf, obuf;
        !            51:        char name[NAMS];
        !            52:        short  iz;
        !            53:        long    vmagic[1];
        !            54:        register i;
        !            55:        register struct nlist *n;
        !            56:        register struct item *p;
        !            57:        char ch[1];
        !            58: 
        !            59:        iz = 0;
        !            60:        ibuf = ffile;
        !            61:        /* ibuf[1] = ibuf[2] = 0;*/
        !            62: /* Check for correct magic number */
        !            63:        read(ibuf,vmagic,4);
        !            64:        if(vmagic[0] != (long)MAGIC) {
        !            65:                close(ffile);
        !            66:                error("not a ws");
        !            67:        }
        !            68:        read(ibuf,&thread,sizeof thread);
        !            69:        while(read(ibuf,&iz,2) == 2) {
        !            70:                i = iz.c[1];
        !            71: /* read name of vbl or fn */
        !            72:                read(ibuf,name,i);
        !            73:                for(n=nlist; n->namep; n++)
        !            74:                        if(equal(name,n->namep)) {
        !            75:                                erase(n);
        !            76:                                goto hokay;
        !            77:                        }
        !            78:                n->namep = alloc(i);
        !            79:                copy(CH,name,n->namep,i);
        !            80: hokay:
        !            81:                n->use = iz.c[0];
        !            82:                n->type = LV;
        !            83:                switch(n->use) {
        !            84:                    default:
        !            85:                        close(ffile);
        !            86:                        error("can not load ws");
        !            87:                    case DA:
        !            88:                        read(ibuf,&iz,2);
        !            89:                        p=alloc(iz);
        !            90:                        read(ibuf,p,iz);
        !            91:                        p->label +=  ((int)p);/*make absolute*/
        !            92:                        n->itemp = p;
        !            93:                        continue;
        !            94:                    case NF:
        !            95:                    case MF:
        !            96:                    case DF:
        !            97:                        n->itemp = 0;
        !            98:                        fstat(obuf=wfile,b);
        !            99:                        /*obuf[1] = obuf[2] = 0;*/
        !           100:                        n->label=b[4];
        !           101:                        lseek(wfile,b[4],0);
        !           102:                        do {
        !           103:                                read(ibuf,ch,1);
        !           104:                                write(obuf,ch,1);
        !           105:                        } while(ch[0] != '\0');
        !           106:                        fflush(obuf);
        !           107:                }
        !           108:        }
        !           109:        fdat(ffile);
        !           110:        close(ffile);
        !           111: }
        !           112: 
        !           113: wssave(ffile)
        !           114: {      long    vmagic[1];
        !           115:        short   iz;
        !           116:        int  jfile,ibuf, obuf;
        !           117:        register struct nlist *n;
        !           118:        register i;
        !           119:        register struct item *p;
        !           120:        char c[1];
        !           121: 
        !           122:        ibuf = jfile = dup(wfile);
        !           123:        obuf = ffile;
        !           124:        /* obuf[1] = obuf[2] = 0; */
        !           125:        vmagic[0] = (long)MAGIC;
        !           126:        write(obuf,vmagic,4);
        !           127:        /*putw(vmagic, obuf); */
        !           128:        write(obuf,&thread,sizeof thread);
        !           129: 
        !           130:        for(n=nlist; n->namep; n++) {
        !           131:                if(n->use == 0 || (n->use == DA && n->itemp == 0))
        !           132:                        continue;
        !           133:                iz.c[0] = n->use;
        !           134:                i= lsize(n->namep);
        !           135:                iz.c[1] = (char)i ;
        !           136:                write(obuf,&iz,2);
        !           137:                write(obuf,n->namep,i);
        !           138: 
        !           139:                switch(n->use) {
        !           140:                    default:
        !           141:                        close(ffile);
        !           142:                        close(jfile);
        !           143:                        error("save B");
        !           144:                    case DA:
        !           145:                        p = n->itemp;
        !           146:                        i = isize(p);
        !           147:                        iz = (short) i;
        !           148:                        p -> label -= ((int)p);
        !           149:                        write(obuf,&iz,2);
        !           150:                        write(obuf,p,i);
        !           151:                        p->label += ((int)p);
        !           152:                        continue;
        !           153:                    case NF:
        !           154:                    case MF:
        !           155:                    case DF:
        !           156:                        lseek(ibuf,n->label,0);
        !           157:                        /* ibuf[1] = ibuf[2] = 0; */
        !           158:                        do {    
        !           159:                                read(ibuf,c,1);
        !           160:                                write(obuf,c,1);
        !           161:                        } while (c[0] != '\0') ;
        !           162:                }
        !           163:        }
        !           164:        fflush(obuf);
        !           165:        fdat(ffile);
        !           166:        close(ffile);
        !           167:        close(jfile);
        !           168: };
        !           169: 
        !           170: listdir()
        !           171: {
        !           172:        register f;
        !           173:        struct {
        !           174:        short  in;
        !           175:        char nam[14];
        !           176:        } dir;
        !           177: 
        !           178:        if((f = open(".",0)) < 0)
        !           179:                error("directory B");
        !           180:        while(read(f,&dir,sizeof dir) == sizeof dir)
        !           181:                if(dir.in != 0 && dir.nam[0] != '.') {
        !           182:                        if(column+10 >= thread.width){
        !           183:                                aprintf("\n\t");
        !           184:                        }
        !           185:                        aprintf(dir.nam);
        !           186:                        aputchar('\t');
        !           187:                }
        !           188:        aputchar('\n');
        !           189:        close(f);
        !           190: }
        !           191: 
        !           192: fdat(f)
        !           193: {
        !           194:        long b [ 256 ] ;
        !           195:        register long *p;
        !           196:        fstat(f,b);
        !           197:        p = localtime(&b[7]);
        !           198:        aprintf("  ");
        !           199:        pr2d(p[2]);
        !           200:        aputchar('.');
        !           201:        pr2d(p[1]);
        !           202:        aputchar('.');
        !           203:        pr2d(p[0]);
        !           204:        aputchar(' ');
        !           205:        pr2d(p[4]+1);
        !           206:        aputchar('/');
        !           207:        pr2d(p[3]);
        !           208:        aputchar('/');
        !           209:        pr2d(p[5]);
        !           210: }
        !           211: 
        !           212: pr2d(i)
        !           213: long i;
        !           214: {
        !           215:        aputchar(i/10+'0');
        !           216:        aputchar(i % 10 + '0');
        !           217: }

unix.superglobalmegacorp.com

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