Annotation of 43BSD/contrib/apl/src/ah.c, revision 1.1.1.1

1.1       root        1: static char Sccsid[] = "ah.c @(#)ah.c  1.1     10/1/82 Berkeley ";
                      2: #include "apl.h"
                      3: 
                      4: ex_immed()
                      5: {
                      6:        register i;
                      7:        register struct item *p;
                      8:        register struct nlist *n;
                      9:        double f;
                     10:        char fname[64];                 /* Array for filename */
                     11:        char *cp, *vfname();
                     12:        int *ip;
                     13: 
                     14:        i = *pcp++;
                     15:        switch(i) {
                     16: 
                     17:        default:
                     18:                error("immed B");
                     19: 
                     20:        case SCRIPT:
                     21:                if(protofile > 0)
                     22:                        CLOSEF(protofile);
                     23:                protofile = 0;
                     24:                cp = vfname(fname);
                     25:                if(equal(cp, "off"))
                     26:                        return;
                     27:                if((protofile = OPENF(cp, 1)) > 0){
                     28:                        SEEKF(protofile, 0L, 2);  /* append to existing file */
                     29:                        printf("[appending]\n");
                     30:                } else {
                     31:                        /*
                     32:                         * create new file
                     33:                         */
                     34:                        protofile = opn(cp, 0644);
                     35:                        printf("[new file]\n");
                     36:                }
                     37:                WRITEF(protofile, "\t)script on\n", 12);
                     38:                return;
                     39: 
                     40:        case DEBUG:
                     41:                debug = ~debug;
                     42:                return;
                     43: 
                     44:        case DIGITS:
                     45:                i = topfix();
                     46:                if(i < 1 || i > 20)
                     47:                        error("digits D");
                     48:                printf("was %d\n",thread.digits);
                     49:                thread.digits = i;
                     50:                return;
                     51:        case TRACE:
                     52:                funtrace = 1;
                     53:                return;
                     54: 
                     55:        case UNTRACE:
                     56:                funtrace = 0;
                     57:                return;
                     58: 
                     59:        case WRITE:
                     60:                funwrite(0);
                     61:                return;
                     62: 
                     63:        case DEL:
                     64:        case EDITF:
                     65:                *sp++ = sp[-1]; /* duplicate top of stack */
                     66:                funwrite(scr_file);
                     67:                funedit(scr_file, i);
                     68:                unlink(scr_file);
                     69:                return;
                     70: 
                     71: 
                     72:        case EDIT:
                     73:                funedit(0, i);
                     74:                return;
                     75: 
                     76:        case FUZZ:
                     77:                i = topfix();
                     78:                if(i <= 0) {
                     79:                        thread.fuzz = 0.;
                     80:                        return;
                     81:                }
                     82:                f = i;
                     83:                thread.fuzz = exp(-f*2.3025851);
                     84:                return;
                     85: 
                     86:        case ORIGIN:
                     87:                printf("was %d\n",thread.iorg);
                     88:                thread.iorg = topfix();
                     89:                return;
                     90: 
                     91:        case WIDTH:
                     92:                i = topfix();
                     93:                if(i < 1)
                     94:                        error("width D");
                     95:                printf("was %d\n",thread.width);
                     96:                thread.width = i;
                     97:                return;
                     98: 
                     99:        case READ:
                    100:                funread(0);
                    101:                return;
                    102: 
                    103:        case ERASE:
                    104:                p = sp[-1];
                    105:                sp--;
                    106:                erase(p);
                    107:                return;
                    108: 
                    109:        case CONTIN:
                    110:                i = opn("continue", 0644);
                    111:                wssave(i);
                    112:                printf(" continue");
                    113: 
                    114:        case OFF:
                    115:                term(0);
                    116: 
                    117:        case VARS:
                    118:                for(n=nlist; n->namep; n++)
                    119:                        if(n->itemp && n->use == DA && n->namep[0] != 'L') {
                    120:                                if(column+8 >= thread.width)
                    121:                                        printf("\n\t");
                    122:                                printf(n->namep);
                    123:                                putchar('\t');
                    124:                        }
                    125:                putchar('\n');
                    126:                return;
                    127: 
                    128:        case FNS:
                    129:                for(n=nlist; n->namep; n++)
                    130:                        if(n->use == DF || n->use == MF || n->use == NF) {
                    131:                                if(column+8 >= thread.width)
                    132:                                        printf("\n\t");
                    133:                                printf(n->namep);
                    134:                                putchar('\t');
                    135:                        }
                    136:                putchar('\n');
                    137:                return;
                    138: 
                    139:        case CODE:
                    140:                n = (struct nlist *)sp[-1];
                    141:                sp--;
                    142:                switch(n->use){
                    143:                default:
                    144:                        error("not a fn");
                    145:                case NF:
                    146:                case MF:
                    147:                case DF:
                    148:                        if(n->itemp == 0)
                    149:                                funcomp(n);
                    150:                        ip = (int *)n->itemp;
                    151:                        for(i=0; i <= *ip; i++){
                    152:                                printf(" [%d] ", i);
                    153:                                dump(ip[i+1], 0);
                    154:                        }
                    155:                        putchar('\n');
                    156:                }
                    157:                return;
                    158: 
                    159:        case RESET:
                    160:                while(gsip)
                    161:                        ex_ibr0();
                    162:                error("");
                    163: 
                    164:        case SICOM:
                    165:                tback(1);
                    166:                return;
                    167: 
                    168:        case CLEAR:
                    169:                clear();
                    170:                printf("clear ws\n");
                    171:                goto warp1;             /* four lines down, or so... */
                    172: 
                    173:        case LOAD:
                    174:                i = opn(vfname(fname), 0);
                    175:                clear();
                    176:                wsload(i);
                    177:                printf(" %s\n", fname);
                    178:                evLlx();        /* possible latent expr evaluation */
                    179: warp1:
                    180:                /*
                    181:                 * this garbage is necessary because clear()
                    182:                 * does a brk(&end), and the normal return & cleanup
                    183:                 * procedures are guaranteed to fail (miserably).
                    184:                 *              --jjb 1/78
                    185:                 */
                    186:                sp = stack;
                    187:                reset();
                    188: 
                    189:        case LIB:
                    190:                listdir();
                    191:                return;
                    192: 
                    193:        case COPY:
                    194:                if(gsip)
                    195:                        error("si damage -- type ')reset'");
                    196:                wsload(opn(vfname(fname),0));
                    197:                printf(" copy %s\n", fname);
                    198:                return;
                    199: 
                    200:        case DROPC:
                    201:                cp = vfname(fname);
                    202:                if(unlink(cp) == -1)
                    203:                        printf("[can't remove %s]\n", cp);
                    204:                return;
                    205: 
                    206:        case SAVE:
                    207:                i = opn(vfname(fname), 0644);
                    208:                wssave(i);
                    209:                printf(" saved %s\n", fname);
                    210:                return;
                    211: 
                    212:        case VSAVE:
                    213:                i = opn(vfname(fname), 0644);
                    214:                vsave(i);
                    215:                putchar('\n');
                    216:                return;
                    217: 
                    218: 
                    219:        case SHELL:
                    220:                ex_shell();
                    221:                return;
                    222: 
                    223:        case LIST:
                    224:                ex_list();
                    225:                return;
                    226: 
                    227:        case PRWS:
                    228:                ex_prws();
                    229:                return;
                    230: 
                    231:        }
                    232: }
                    233: 
                    234: char *
                    235: vfname(array)
                    236: char *array;
                    237: {
                    238:        register struct nlist *n;
                    239:        register char *p;
                    240: 
                    241:        n = (struct nlist *)sp[-1];
                    242:        sp--;
                    243:        if(n->type != LV)
                    244:                error("save B");
                    245:        p = n->namep;
                    246:        while(*array++ = *p++);
                    247:        return(n->namep);
                    248: 
                    249: }
                    250: 
                    251: /*
                    252:  * check for latent expr., and evaluate it if it is there:
                    253:  */
                    254: evLlx()
                    255: {
                    256:        register struct nlist *n;
                    257:        register struct item *p;
                    258: 
                    259:        if((n=nlook("Llx")) && n->itemp->type == CH && n->itemp->size){
                    260:                *sp++ = dupdat(n->itemp);
                    261:                ex_meps();
                    262:                p = sp[-1];
                    263:                if(p->type != EL && p->type != DU)
                    264:                        ex_print();
                    265:                pop();
                    266: /*             error("");      */
                    267:        }
                    268: }

unix.superglobalmegacorp.com

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