Annotation of 3BSD/cmd/apl/aj.c, revision 1.1.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.