Annotation of 43BSDTahoe/ucb/pascal/px/interp.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1980 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  */
                      6: 
                      7: #ifndef lint
                      8: static char sccsid[] = "@(#)interp.c   5.5 (Berkeley) 11/12/86";
                      9: #endif not lint
                     10: 
                     11: #include <math.h>
                     12: #include <signal.h>
                     13: #include "whoami.h"
                     14: #include "vars.h"
                     15: #include "objfmt.h"
                     16: #include "h02opcs.h"
                     17: #include "machdep.h"
                     18: #include "libpc.h"
                     19: 
                     20: /*
                     21:  * program variables
                     22:  */
                     23: union display _display;
                     24: struct dispsave        *_dp;
                     25: long   _lino = 0;
                     26: int    _argc;
                     27: char   **_argv;
                     28: long   _mode;
                     29: long   _runtst = (long)TRUE;
                     30: bool   _nodump = FALSE;
                     31: long   _stlim = 500000;
                     32: long   _stcnt = 0;
                     33: long   _seed = 1;
                     34: #ifdef ADDR32
                     35: char   *_minptr = (char *)0x7fffffff;
                     36: #endif ADDR32
                     37: #ifdef ADDR16
                     38: char   *_minptr = (char *)0xffff;
                     39: #endif ADDR16
                     40: char   *_maxptr = (char *)0;
                     41: long   *_pcpcount = (long *)0;
                     42: long   _cntrs = 0;
                     43: long   _rtns = 0;
                     44: 
                     45: /*
                     46:  * standard files
                     47:  */
                     48: char           _inwin, _outwin, _errwin;
                     49: struct iorechd _err = {
                     50:        &_errwin,               /* fileptr */
                     51:        0,                      /* lcount  */
                     52:        0x7fffffff,             /* llimit  */
                     53:        &_iob[2],               /* fbuf    */
                     54:        FILNIL,                 /* fchain  */
                     55:        STDLVL,                 /* flev    */
                     56:        "Message file",         /* pfname  */
                     57:        FTEXT | FWRITE | EOFF,  /* funit   */
                     58:        2,                      /* fblk    */
                     59:        1                       /* fsize   */
                     60: };
                     61: struct iorechd output = {
                     62:        &_outwin,               /* fileptr */
                     63:        0,                      /* lcount  */
                     64:        0x7fffffff,             /* llimit  */
                     65:        &_iob[1],               /* fbuf    */
                     66:        ERR,                    /* fchain  */
                     67:        STDLVL,                 /* flev    */
                     68:        "standard output",      /* pfname  */
                     69:        FTEXT | FWRITE | EOFF,  /* funit   */
                     70:        1,                      /* fblk    */
                     71:        1                       /* fsize   */
                     72: };
                     73: struct iorechd input = {
                     74:        &_inwin,                /* fileptr */
                     75:        0,                      /* lcount  */
                     76:        0x7fffffff,             /* llimit  */
                     77:        &_iob[0],               /* fbuf    */
                     78:        OUTPUT,                 /* fchain  */
                     79:        STDLVL,                 /* flev    */
                     80:        "standard input",       /* pfname  */
                     81:        FTEXT|FREAD|SYNC|EOLN,  /* funit   */
                     82:        0,                      /* fblk    */
                     83:        1                       /* fsize   */
                     84: };
                     85: 
                     86: /*
                     87:  * file record variables
                     88:  */
                     89: long           _filefre = PREDEF;
                     90: struct iorechd _fchain = {
                     91:        0, 0, 0, 0,             /* only use fchain field */
                     92:        INPUT                   /* fchain  */
                     93: };
                     94: struct iorec   *_actfile[MAXFILES] = {
                     95:        INPUT,
                     96:        OUTPUT,
                     97:        ERR
                     98: };
                     99: 
                    100: /*
                    101:  * stuff for pdx
                    102:  */
                    103: 
                    104: union progcntr *pcaddrp;
                    105: asm(".globl _loopaddr");
                    106: 
                    107: /*
                    108:  * Px profile array
                    109:  */
                    110: #ifdef PROFILE
                    111: long _profcnts[NUMOPS];
                    112: #endif PROFILE
                    113: 
                    114: /*
                    115:  * debugging variables
                    116:  */
                    117: #ifdef PXDEBUG
                    118: char opc[10];
                    119: long opcptr = 9;
                    120: #endif PXDEBUG
                    121: 
                    122: interpreter(base)
                    123:        char *base;
                    124: {
                    125:        union progcntr pc;              /* interpreted program cntr */
                    126:        register char *vpc;             /* register used for "pc" */
                    127:        struct iorec *curfile;          /* active file */
                    128:        register struct blockmark *stp; /* active stack frame ptr */
                    129:        /*
                    130:         * the following variables are used as scratch
                    131:         */
                    132:        register char *tcp;
                    133:        register short *tsp;
                    134:        register long tl, tl1, tl2, tl3;
                    135:        double td, td1;
                    136:        struct sze8 t8;
                    137:        register short *tsp1;
                    138:        long *tlp;
                    139:        char *tcp1;
                    140:        bool tb;
                    141:        struct blockmark *tstp;
                    142:        register struct formalrtn *tfp;
                    143:        union progcntr tpc;
                    144:        struct iorec **ip;
                    145:        int mypid;
                    146: 
                    147:        pcaddrp = &pc;
                    148:        mypid = getpid();
                    149: 
                    150:        /*
                    151:         * Setup sets up any hardware specific parameters before
                    152:         * starting the interpreter. Typically this is inline replaced
                    153:         * by interp.sed to utilize specific machine instructions.
                    154:         */
                    155:         setup();
                    156:        /*
                    157:         * necessary only on systems which do not initialize
                    158:         * memory to zero
                    159:         */
                    160:        for (ip = &_actfile[3]; ip < &_actfile[MAXFILES]; *ip++ = FILNIL)
                    161:                /* void */;
                    162:        /*
                    163:         * set up global environment, then ``call'' the main program
                    164:         */
                    165:        STACKALIGN(tl, 2 * sizeof(struct iorec *));
                    166:        _display.frame[0].locvars = pushsp(tl);
                    167:        _display.frame[0].locvars += 2 * sizeof(struct iorec *);
                    168:        *(struct iorec **)(_display.frame[0].locvars + OUTPUT_OFF) = OUTPUT;
                    169:        *(struct iorec **)(_display.frame[0].locvars + INPUT_OFF) = INPUT;
                    170:        STACKALIGN(tl, sizeof(struct blockmark));
                    171:        stp = (struct blockmark *)pushsp(tl);
                    172:        _dp = &_display.frame[0];
                    173:        pc.cp = base;
                    174: 
                    175:        asm("_loopaddr:");
                    176:        for(;;) {
                    177: #              ifdef PXDEBUG
                    178:                if (++opcptr == 10)
                    179:                        opcptr = 0;
                    180:                opc[opcptr] = *pc.ucp;
                    181: #              endif PXDEBUG
                    182: #              ifdef PROFILE
                    183:                _profcnts[*pc.ucp]++;
                    184: #              endif PROFILE
                    185:                switch (*pc.ucp++) {
                    186:                case O_BPT:                     /* breakpoint trap */
                    187:                        PFLUSH();
                    188:                        kill(mypid, SIGILL);
                    189:                        pc.ucp--;
                    190:                        continue;
                    191:                case O_NODUMP:
                    192:                        _nodump = TRUE;
                    193:                        /* and fall through */
                    194:                case O_BEG:
                    195:                        _dp += 1;               /* enter local scope */
                    196:                        stp->odisp = *_dp;      /* save old display value */
                    197:                        tl = *pc.ucp++;         /* tl = name size */
                    198:                        stp->entry = pc.hdrp;   /* pointer to entry info */
                    199:                        tl1 = pc.hdrp->framesze;/* tl1 = size of frame */
                    200:                        _lino = pc.hdrp->offset;
                    201:                        _runtst = pc.hdrp->tests;
                    202:                        disableovrflo();
                    203:                        if (_runtst)
                    204:                                enableovrflo();
                    205:                        pc.cp += (int)tl;       /* skip over proc hdr info */
                    206:                        stp->file = curfile;    /* save active file */
                    207:                        STACKALIGN(tl2, tl1);
                    208:                        tcp = pushsp(tl2);      /* tcp = new top of stack */
                    209:                        if (_runtst)            /* zero stack frame */
                    210:                                blkclr(tcp, tl1);
                    211:                        tcp += (int)tl1;        /* offsets of locals are neg */
                    212:                        _dp->locvars = tcp;     /* set new display pointer */
                    213:                        _dp->stp = stp;
                    214:                        stp->tos = pushsp((long)0); /* set tos pointer */
                    215:                        continue;
                    216:                case O_END:
                    217:                        PCLOSE(_dp->locvars);   /* flush & close local files */
                    218:                        stp = _dp->stp;
                    219:                        curfile = stp->file;    /* restore old active file */
                    220:                        *_dp = stp->odisp;      /* restore old display entry */
                    221:                        if (_dp == &_display.frame[1])
                    222:                                return;         /* exiting main proc ??? */
                    223:                        _lino = stp->lino;      /* restore lino, pc, dp */
                    224:                        pc.cp = stp->pc;
                    225:                        _dp = stp->dp;
                    226:                        _runtst = stp->entry->tests;
                    227:                        disableovrflo();
                    228:                        if (_runtst)
                    229:                                enableovrflo();
                    230:                        STACKALIGN(tl, stp->entry->framesze);
                    231:                        STACKALIGN(tl1, sizeof(struct blockmark));
                    232:                        popsp(tl +              /* pop local vars */
                    233:                             tl1 +              /* pop stack frame */
                    234:                             stp->entry->nargs);/* pop parms */
                    235:                        continue;
                    236:                case O_CALL:
                    237:                        tl = *pc.cp++;
                    238:                        PCLONGVAL(tl1);
                    239:                        tcp = base + tl1 + sizeof(short);/* new entry point */
                    240:                        GETLONGVAL(tl1, tcp);
                    241:                        tcp = base + tl1;
                    242:                        STACKALIGN(tl1, sizeof(struct blockmark));
                    243:                        stp = (struct blockmark *)pushsp(tl1);
                    244:                        stp->lino = _lino;      /* save lino, pc, dp */
                    245:                        stp->pc = pc.cp;
                    246:                        stp->dp = _dp;
                    247:                        _dp = &_display.frame[tl]; /* set up new display ptr */
                    248:                        pc.cp = tcp;
                    249:                        continue;
                    250:                case O_FCALL:
                    251:                        pc.cp++;
                    252:                        tcp = popaddr(); /* ptr to display save area */
                    253:                        tfp = (struct formalrtn *)popaddr();
                    254:                        STACKALIGN(tl, sizeof(struct blockmark));
                    255:                        stp = (struct blockmark *)pushsp(tl);
                    256:                        stp->lino = _lino;      /* save lino, pc, dp */
                    257:                        stp->pc = pc.cp;
                    258:                        stp->dp = _dp;
                    259:                        pc.cp = (char *)(tfp->fentryaddr);/* new entry point */
                    260:                        _dp = &_display.frame[tfp->fbn];/* new display ptr */
                    261:                        blkcpy(&_display.frame[1], tcp,
                    262:                                tfp->fbn * sizeof(struct dispsave));
                    263:                        blkcpy(&tfp->fdisp[0], &_display.frame[1],
                    264:                                tfp->fbn * sizeof(struct dispsave));
                    265:                        continue;
                    266:                case O_FRTN:
                    267:                        tl = *pc.cp++;          /* tl = size of return obj */
                    268:                        if (tl == 0)
                    269:                                tl = *pc.usp++;
                    270:                        tcp = pushsp((long)(0));
                    271:                        tfp = *(struct formalrtn **)(tcp + tl);
                    272:                        tcp1 = *(char **)
                    273:                            (tcp + tl + sizeof(struct formalrtn *));
                    274:                        if (tl != 0) {
                    275:                                blkcpy(tcp, tcp + sizeof(struct formalrtn *)
                    276:                                    + sizeof(char *), tl);
                    277:                        }
                    278:                        STACKALIGN(tl,
                    279:                                sizeof(struct formalrtn *) + sizeof (char *));
                    280:                        popsp(tl);
                    281:                        blkcpy(tcp1, &_display.frame[1],
                    282:                            tfp->fbn * sizeof(struct dispsave));
                    283:                        continue;
                    284:                case O_FSAV:
                    285:                        tfp = (struct formalrtn *)popaddr();
                    286:                        tfp->fbn = *pc.cp++;    /* blk number of routine */
                    287:                        PCLONGVAL(tl);
                    288:                        tcp = base + tl + sizeof(short);/* new entry point */
                    289:                        GETLONGVAL(tl, tcp);
                    290:                        tfp->fentryaddr = (long (*)())(base + tl);
                    291:                        blkcpy(&_display.frame[1], &tfp->fdisp[0],
                    292:                                tfp->fbn * sizeof(struct dispsave));
                    293:                        pushaddr(tfp);
                    294:                        continue;
                    295:                case O_SDUP2:
                    296:                        pc.cp++;
                    297:                        tl = pop2();
                    298:                        push2((short)(tl));
                    299:                        push2((short)(tl));
                    300:                        continue;
                    301:                case O_SDUP4:
                    302:                        pc.cp++;
                    303:                        tl = pop4();
                    304:                        push4(tl);
                    305:                        push4(tl);
                    306:                        continue;
                    307:                case O_TRA:
                    308:                        pc.cp++;
                    309:                        pc.cp += *pc.sp;
                    310:                        continue;
                    311:                case O_TRA4:
                    312:                        pc.cp++;
                    313:                        PCLONGVAL(tl);
                    314:                        pc.cp = base + tl;
                    315:                        continue;
                    316:                case O_GOTO:
                    317:                        tstp = _display.frame[*pc.cp++].stp; /* ptr to
                    318:                                                                exit frame */
                    319:                        PCLONGVAL(tl);
                    320:                        pc.cp = base + tl;
                    321:                        stp = _dp->stp;
                    322:                        while (tstp != stp) {
                    323:                                if (_dp == &_display.frame[1])
                    324:                                        ERROR("Active frame not found in non-local goto\n", 0); /* exiting prog ??? */
                    325:                                PCLOSE(_dp->locvars); /* close local files */
                    326:                                curfile = stp->file;  /* restore active file */
                    327:                                *_dp = stp->odisp;    /* old display entry */
                    328:                                _dp = stp->dp;        /* restore dp */
                    329:                                stp = _dp->stp;
                    330:                        }
                    331:                        /* pop locals, stack frame, parms, and return values */
                    332:                        popsp((long)(stp->tos - pushsp((long)(0))));
                    333:                        continue;
                    334:                case O_LINO:
                    335:                        if (_dp->stp->tos != pushsp((long)(0)))
                    336:                                ERROR("Panic: stack not empty between statements\n");
                    337:                        _lino = *pc.cp++;       /* set line number */
                    338:                        if (_lino == 0)
                    339:                                _lino = *pc.sp++;
                    340:                        if (_runtst) {
                    341:                                LINO();         /* inc statement count */
                    342:                                continue;
                    343:                        }
                    344:                        _stcnt++;
                    345:                        continue;
                    346:                case O_PUSH:
                    347:                        tl = *pc.cp++;
                    348:                        if (tl == 0)
                    349:                                PCLONGVAL(tl);
                    350:                        STACKALIGN(tl1, -tl);
                    351:                        tcp = pushsp(tl1);
                    352:                        if (_runtst)
                    353:                                blkclr(tcp, tl1);
                    354:                        continue;
                    355:                case O_IF:
                    356:                        pc.cp++;
                    357:                        if (pop2()) {
                    358:                                pc.sp++;
                    359:                                continue;
                    360:                        }
                    361:                        pc.cp += *pc.sp;
                    362:                        continue;
                    363:                case O_REL2:
                    364:                        tl = pop2();
                    365:                        tl1 = pop2();
                    366:                        goto cmplong;
                    367:                case O_REL24:
                    368:                        tl = pop2();
                    369:                        tl1 = pop4();
                    370:                        goto cmplong;
                    371:                case O_REL42:
                    372:                        tl = pop4();
                    373:                        tl1 = pop2();
                    374:                        goto cmplong;
                    375:                case O_REL4:
                    376:                        tl = pop4();
                    377:                        tl1 = pop4();
                    378:                cmplong:
                    379:                        switch (*pc.cp++) {
                    380:                        case releq:
                    381:                                push2(tl1 == tl);
                    382:                                continue;
                    383:                        case relne:
                    384:                                push2(tl1 != tl);
                    385:                                continue;
                    386:                        case rellt:
                    387:                                push2(tl1 < tl);
                    388:                                continue;
                    389:                        case relgt:
                    390:                                push2(tl1 > tl);
                    391:                                continue;
                    392:                        case relle:
                    393:                                push2(tl1 <= tl);
                    394:                                continue;
                    395:                        case relge:
                    396:                                push2(tl1 >= tl);
                    397:                                continue;
                    398:                        default:
                    399:                                ERROR("Panic: bad relation %d to REL4*\n",
                    400:                                    *(pc.cp - 1));
                    401:                                continue;
                    402:                        }
                    403:                case O_RELG:
                    404:                        tl2 = *pc.cp++;         /* tc has jump opcode */
                    405:                        tl = *pc.usp++;         /* tl has comparison length */
                    406:                        STACKALIGN(tl1, tl);    /* tl1 has arg stack length */
                    407:                        tcp = pushsp((long)(0));/* tcp pts to first arg */
                    408:                        switch (tl2) {
                    409:                        case releq:
                    410:                                tb = RELEQ(tl, tcp + tl1, tcp);
                    411:                                break;
                    412:                        case relne:
                    413:                                tb = RELNE(tl, tcp + tl1, tcp);
                    414:                                break;
                    415:                        case rellt:
                    416:                                tb = RELSLT(tl, tcp + tl1, tcp);
                    417:                                break;
                    418:                        case relgt:
                    419:                                tb = RELSGT(tl, tcp + tl1, tcp);
                    420:                                break;
                    421:                        case relle:
                    422:                                tb = RELSLE(tl, tcp + tl1, tcp);
                    423:                                break;
                    424:                        case relge:
                    425:                                tb = RELSGE(tl, tcp + tl1, tcp);
                    426:                                break;
                    427:                        default:
                    428:                                ERROR("Panic: bad relation %d to RELG*\n", tl2);
                    429:                                break;
                    430:                        }
                    431:                        popsp(tl1 << 1);
                    432:                        push2((short)(tb));
                    433:                        continue;
                    434:                case O_RELT:
                    435:                        tl2 = *pc.cp++;         /* tc has jump opcode */
                    436:                        tl1 = *pc.usp++;        /* tl1 has comparison length */
                    437:                        tcp = pushsp((long)(0));/* tcp pts to first arg */
                    438:                        switch (tl2) {
                    439:                        case releq:
                    440:                                tb = RELEQ(tl1, tcp + tl1, tcp);
                    441:                                break;
                    442:                        case relne:
                    443:                                tb = RELNE(tl1, tcp + tl1, tcp);
                    444:                                break;
                    445:                        case rellt:
                    446:                                tb = RELTLT(tl1, tcp + tl1, tcp);
                    447:                                break;
                    448:                        case relgt:
                    449:                                tb = RELTGT(tl1, tcp + tl1, tcp);
                    450:                                break;
                    451:                        case relle:
                    452:                                tb = RELTLE(tl1, tcp + tl1, tcp);
                    453:                                break;
                    454:                        case relge:
                    455:                                tb = RELTGE(tl1, tcp + tl1, tcp);
                    456:                                break;
                    457:                        default:
                    458:                                ERROR("Panic: bad relation %d to RELT*\n", tl2);
                    459:                                break;
                    460:                        }
                    461:                        STACKALIGN(tl, tl1);
                    462:                        popsp(tl << 1);
                    463:                        push2((short)(tb));
                    464:                        continue;
                    465:                case O_REL28:
                    466:                        td = pop2();
                    467:                        td1 = pop8();
                    468:                        goto cmpdbl;
                    469:                case O_REL48:
                    470:                        td = pop4();
                    471:                        td1 = pop8();
                    472:                        goto cmpdbl;
                    473:                case O_REL82:
                    474:                        td = pop8();
                    475:                        td1 = pop2();
                    476:                        goto cmpdbl;
                    477:                case O_REL84:
                    478:                        td = pop8();
                    479:                        td1 = pop4();
                    480:                        goto cmpdbl;
                    481:                case O_REL8:
                    482:                        td = pop8();
                    483:                        td1 = pop8();
                    484:                cmpdbl:
                    485:                        switch (*pc.cp++) {
                    486:                        case releq:
                    487:                                push2(td1 == td);
                    488:                                continue;
                    489:                        case relne:
                    490:                                push2(td1 != td);
                    491:                                continue;
                    492:                        case rellt:
                    493:                                push2(td1 < td);
                    494:                                continue;
                    495:                        case relgt:
                    496:                                push2(td1 > td);
                    497:                                continue;
                    498:                        case relle:
                    499:                                push2(td1 <= td);
                    500:                                continue;
                    501:                        case relge:
                    502:                                push2(td1 >= td);
                    503:                                continue;
                    504:                        default:
                    505:                                ERROR("Panic: bad relation %d to REL8*\n",
                    506:                                    *(pc.cp - 1));
                    507:                                continue;
                    508:                        }
                    509:                case O_AND:
                    510:                        pc.cp++;
                    511:                        tl = pop2();
                    512:                        tl1 = pop2();
                    513:                        push2(tl1 & tl);
                    514:                        continue;
                    515:                case O_OR:
                    516:                        pc.cp++;
                    517:                        tl = pop2();
                    518:                        tl1 = pop2();
                    519:                        push2(tl1 | tl);
                    520:                        continue;
                    521:                case O_NOT:
                    522:                        pc.cp++;
                    523:                        tl = pop2();
                    524:                        push2(tl ^ 1);
                    525:                        continue;
                    526:                case O_AS2:
                    527:                        pc.cp++;
                    528:                        tl = pop2();
                    529:                        *(short *)popaddr() = tl;
                    530:                        continue;
                    531:                case O_AS4:
                    532:                        pc.cp++;
                    533:                        tl = pop4();
                    534:                        *(long *)popaddr() = tl;
                    535:                        continue;
                    536:                case O_AS24:
                    537:                        pc.cp++;
                    538:                        tl = pop2();
                    539:                        *(long *)popaddr() = tl;
                    540:                        continue;
                    541:                case O_AS42:
                    542:                        pc.cp++;
                    543:                        tl = pop4();
                    544:                        *(short *)popaddr() = tl;
                    545:                        continue;
                    546:                case O_AS21:
                    547:                        pc.cp++;
                    548:                        tl = pop2();
                    549:                        *popaddr() = tl;
                    550:                        continue;
                    551:                case O_AS41:
                    552:                        pc.cp++;
                    553:                        tl = pop4();
                    554:                        *popaddr() = tl;
                    555:                        continue;
                    556:                case O_AS28:
                    557:                        pc.cp++;
                    558:                        tl = pop2();
                    559:                        *(double *)popaddr() = tl;
                    560:                        continue;
                    561:                case O_AS48:
                    562:                        pc.cp++;
                    563:                        tl = pop4();
                    564:                        *(double *)popaddr() = tl;
                    565:                        continue;
                    566:                case O_AS8:
                    567:                        pc.cp++;
                    568:                        t8 = popsze8();
                    569:                        *(struct sze8 *)popaddr() = t8;
                    570:                        continue;
                    571:                case O_AS:
                    572:                        tl = *pc.cp++;
                    573:                        if (tl == 0)
                    574:                                tl = *pc.usp++;
                    575:                        STACKALIGN(tl1, tl);
                    576:                        tcp = pushsp((long)(0));
                    577:                        blkcpy(tcp, *(char **)(tcp + tl1), tl);
                    578:                        popsp(tl1 + sizeof(char *));
                    579:                        continue;
                    580:                case O_VAS:
                    581:                        pc.cp++;
                    582:                        tl = pop4();
                    583:                        tcp1 = popaddr();
                    584:                        tcp = popaddr();
                    585:                        blkcpy(tcp1, tcp, tl);
                    586:                        continue;
                    587:                case O_INX2P2:
                    588:                        tl = *pc.cp++;          /* tl has shift amount */
                    589:                        tl1 = pop2();
                    590:                        tl1 = (tl1 - *pc.sp++) << tl;
                    591:                        tcp = popaddr();
                    592:                        pushaddr(tcp + tl1);
                    593:                        continue;
                    594:                case O_INX4P2:
                    595:                        tl = *pc.cp++;          /* tl has shift amount */
                    596:                        tl1 = pop4();
                    597:                        tl1 = (tl1 - *pc.sp++) << tl;
                    598:                        tcp = popaddr();
                    599:                        pushaddr(tcp + tl1);
                    600:                        continue;
                    601:                case O_INX2:
                    602:                        tl = *pc.cp++;          /* tl has element size */
                    603:                        if (tl == 0)
                    604:                                tl = *pc.usp++;
                    605:                        tl1 = pop2();           /* index */
                    606:                        tl2 = *pc.sp++;
                    607:                        tcp = popaddr();
                    608:                        pushaddr(tcp + (tl1 - tl2) * tl);
                    609:                        tl = *pc.usp++;
                    610:                        if (_runtst)
                    611:                                SUBSC(tl1, tl2, tl); /* range check */
                    612:                        continue;
                    613:                case O_INX4:
                    614:                        tl = *pc.cp++;          /* tl has element size */
                    615:                        if (tl == 0)
                    616:                                tl = *pc.usp++;
                    617:                        tl1 = pop4();           /* index */
                    618:                        tl2 = *pc.sp++;
                    619:                        tcp = popaddr();
                    620:                        pushaddr(tcp + (tl1 - tl2) * tl);
                    621:                        tl = *pc.usp++;
                    622:                        if (_runtst)
                    623:                                SUBSC(tl1, tl2, tl); /* range check */
                    624:                        continue;
                    625:                case O_VINX2:
                    626:                        pc.cp++;
                    627:                        tl = pop2();            /* tl has element size */
                    628:                        tl1 = pop2();           /* upper bound */
                    629:                        tl2 = pop2();           /* lower bound */
                    630:                        tl3 = pop2();           /* index */
                    631:                        tcp = popaddr();
                    632:                        pushaddr(tcp + (tl3 - tl2) * tl);
                    633:                        if (_runtst)
                    634:                                SUBSC(tl3, tl2, tl1); /* range check */
                    635:                        continue;
                    636:                case O_VINX24:
                    637:                        pc.cp++;
                    638:                        tl = pop2();            /* tl has element size */
                    639:                        tl1 = pop2();           /* upper bound */
                    640:                        tl2 = pop2();           /* lower bound */
                    641:                        tl3 = pop4();           /* index */
                    642:                        tcp = popaddr();
                    643:                        pushaddr(tcp + (tl3 - tl2) * tl);
                    644:                        if (_runtst)
                    645:                                SUBSC(tl3, tl2, tl1); /* range check */
                    646:                        continue;
                    647:                case O_VINX42:
                    648:                        pc.cp++;
                    649:                        tl = pop4();            /* tl has element size */
                    650:                        tl1 = pop4();           /* upper bound */
                    651:                        tl2 = pop4();           /* lower bound */
                    652:                        tl3 = pop2();           /* index */
                    653:                        tcp = popaddr();
                    654:                        pushaddr(tcp + (tl3 - tl2) * tl);
                    655:                        if (_runtst)
                    656:                                SUBSC(tl3, tl2, tl1); /* range check */
                    657:                        continue;
                    658:                case O_VINX4:
                    659:                        pc.cp++;
                    660:                        tl = pop4();            /* tl has element size */
                    661:                        tl1 = pop4();           /* upper bound */
                    662:                        tl2 = pop4();           /* lower bound */
                    663:                        tl3 = pop4();           /* index */
                    664:                        tcp = popaddr();
                    665:                        pushaddr(tcp + (tl3 - tl2) * tl);
                    666:                        if (_runtst)
                    667:                                SUBSC(tl3, tl2, tl1); /* range check */
                    668:                        continue;
                    669:                case O_OFF:
                    670:                        tl = *pc.cp++;
                    671:                        if (tl == 0)
                    672:                                tl = *pc.usp++;
                    673:                        tcp = popaddr();
                    674:                        pushaddr(tcp + tl);
                    675:                        continue;
                    676:                case O_NIL:
                    677:                        pc.cp++;
                    678:                        tcp = popaddr();
                    679:                        NIL(tcp);
                    680:                        pushaddr(tcp);
                    681:                        continue;
                    682:                case O_ADD2:
                    683:                        pc.cp++;
                    684:                        tl = pop2();
                    685:                        tl1 = pop2();
                    686:                        push4(tl1 + tl);
                    687:                        continue;
                    688:                case O_ADD4:
                    689:                        pc.cp++;
                    690:                        tl = pop4();
                    691:                        tl1 = pop4();
                    692:                        push4(tl1 + tl);
                    693:                        continue;
                    694:                case O_ADD24:
                    695:                        pc.cp++;
                    696:                        tl = pop2();
                    697:                        tl1 = pop4();
                    698:                        push4(tl1 + tl);
                    699:                        continue;
                    700:                case O_ADD42:
                    701:                        pc.cp++;
                    702:                        tl = pop4();
                    703:                        tl1 = pop2();
                    704:                        push4(tl1 + tl);
                    705:                        continue;
                    706:                case O_ADD28:
                    707:                        pc.cp++;
                    708:                        tl = pop2();
                    709:                        td = pop8();
                    710:                        push8(td + tl);
                    711:                        continue;
                    712:                case O_ADD48:
                    713:                        pc.cp++;
                    714:                        tl = pop4();
                    715:                        td = pop8();
                    716:                        push8(td + tl);
                    717:                        continue;
                    718:                case O_ADD82:
                    719:                        pc.cp++;
                    720:                        td = pop8();
                    721:                        td1 = pop2();
                    722:                        push8(td1 + td);
                    723:                        continue;
                    724:                case O_ADD84:
                    725:                        pc.cp++;
                    726:                        td = pop8();
                    727:                        td1 = pop4();
                    728:                        push8(td1 + td);
                    729:                        continue;
                    730:                case O_SUB2:
                    731:                        pc.cp++;
                    732:                        tl = pop2();
                    733:                        tl1 = pop2();
                    734:                        push4(tl1 - tl);
                    735:                        continue;
                    736:                case O_SUB4:
                    737:                        pc.cp++;
                    738:                        tl = pop4();
                    739:                        tl1 = pop4();
                    740:                        push4(tl1 - tl);
                    741:                        continue;
                    742:                case O_SUB24:
                    743:                        pc.cp++;
                    744:                        tl = pop2();
                    745:                        tl1 = pop4();
                    746:                        push4(tl1 - tl);
                    747:                        continue;
                    748:                case O_SUB42:
                    749:                        pc.cp++;
                    750:                        tl = pop4();
                    751:                        tl1 = pop2();
                    752:                        push4(tl1 - tl);
                    753:                        continue;
                    754:                case O_SUB28:
                    755:                        pc.cp++;
                    756:                        tl = pop2();
                    757:                        td = pop8();
                    758:                        push8(td - tl);
                    759:                        continue;
                    760:                case O_SUB48:
                    761:                        pc.cp++;
                    762:                        tl = pop4();
                    763:                        td = pop8();
                    764:                        push8(td - tl);
                    765:                        continue;
                    766:                case O_SUB82:
                    767:                        pc.cp++;
                    768:                        td = pop8();
                    769:                        td1 = pop2();
                    770:                        push8(td1 - td);
                    771:                        continue;
                    772:                case O_SUB84:
                    773:                        pc.cp++;
                    774:                        td = pop8();
                    775:                        td1 = pop4();
                    776:                        push8(td1 - td);
                    777:                        continue;
                    778:                case O_MUL2:
                    779:                        pc.cp++;
                    780:                        tl = pop2();
                    781:                        tl1 = pop2();
                    782:                        push4(tl1 * tl);
                    783:                        continue;
                    784:                case O_MUL4:
                    785:                        pc.cp++;
                    786:                        tl = pop4();
                    787:                        tl1 = pop4();
                    788:                        push4(tl1 * tl);
                    789:                        continue;
                    790:                case O_MUL24:
                    791:                        pc.cp++;
                    792:                        tl = pop2();
                    793:                        tl1 = pop4();
                    794:                        push4(tl1 * tl);
                    795:                        continue;
                    796:                case O_MUL42:
                    797:                        pc.cp++;
                    798:                        tl = pop4();
                    799:                        tl1 = pop2();
                    800:                        push4(tl1 * tl);
                    801:                        continue;
                    802:                case O_MUL28:
                    803:                        pc.cp++;
                    804:                        tl = pop2();
                    805:                        td = pop8();
                    806:                        push8(td * tl);
                    807:                        continue;
                    808:                case O_MUL48:
                    809:                        pc.cp++;
                    810:                        tl = pop4();
                    811:                        td = pop8();
                    812:                        push8(td * tl);
                    813:                        continue;
                    814:                case O_MUL82:
                    815:                        pc.cp++;
                    816:                        td = pop8();
                    817:                        td1 = pop2();
                    818:                        push8(td1 * td);
                    819:                        continue;
                    820:                case O_MUL84:
                    821:                        pc.cp++;
                    822:                        td = pop8();
                    823:                        td1 = pop4();
                    824:                        push8(td1 * td);
                    825:                        continue;
                    826:                case O_ABS2:
                    827:                case O_ABS4:
                    828:                        pc.cp++;
                    829:                        tl = pop4();
                    830:                        push4(tl >= 0 ? tl : -tl);
                    831:                        continue;
                    832:                case O_ABS8:
                    833:                        pc.cp++;
                    834:                        td = pop8();
                    835:                        push8(td >= 0.0 ? td : -td);
                    836:                        continue;
                    837:                case O_NEG2:
                    838:                        pc.cp++;
                    839:                        push4((long)(-pop2()));
                    840:                        continue;
                    841:                case O_NEG4:
                    842:                        pc.cp++;
                    843:                        push4(-pop4());
                    844:                        continue;
                    845:                case O_NEG8:
                    846:                        pc.cp++;
                    847:                        push8(-pop8());
                    848:                        continue;
                    849:                case O_DIV2:
                    850:                        pc.cp++;
                    851:                        tl = pop2();
                    852:                        tl1 = pop2();
                    853:                        push4(tl1 / tl);
                    854:                        continue;
                    855:                case O_DIV4:
                    856:                        pc.cp++;
                    857:                        tl = pop4();
                    858:                        tl1 = pop4();
                    859:                        push4(tl1 / tl);
                    860:                        continue;
                    861:                case O_DIV24:
                    862:                        pc.cp++;
                    863:                        tl = pop2();
                    864:                        tl1 = pop4();
                    865:                        push4(tl1 / tl);
                    866:                        continue;
                    867:                case O_DIV42:
                    868:                        pc.cp++;
                    869:                        tl = pop4();
                    870:                        tl1 = pop2();
                    871:                        push4(tl1 / tl);
                    872:                        continue;
                    873:                case O_MOD2:
                    874:                        pc.cp++;
                    875:                        tl = pop2();
                    876:                        tl1 = pop2();
                    877:                        push4(tl1 % tl);
                    878:                        continue;
                    879:                case O_MOD4:
                    880:                        pc.cp++;
                    881:                        tl = pop4();
                    882:                        tl1 = pop4();
                    883:                        push4(tl1 % tl);
                    884:                        continue;
                    885:                case O_MOD24:
                    886:                        pc.cp++;
                    887:                        tl = pop2();
                    888:                        tl1 = pop4();
                    889:                        push4(tl1 % tl);
                    890:                        continue;
                    891:                case O_MOD42:
                    892:                        pc.cp++;
                    893:                        tl = pop4();
                    894:                        tl1 = pop2();
                    895:                        push4(tl1 % tl);
                    896:                        continue;
                    897:                case O_ADD8:
                    898:                        pc.cp++;
                    899:                        td = pop8();
                    900:                        td1 = pop8();
                    901:                        push8(td1 + td);
                    902:                        continue;
                    903:                case O_SUB8:
                    904:                        pc.cp++;
                    905:                        td = pop8();
                    906:                        td1 = pop8();
                    907:                        push8(td1 - td);
                    908:                        continue;
                    909:                case O_MUL8:
                    910:                        pc.cp++;
                    911:                        td = pop8();
                    912:                        td1 = pop8();
                    913:                        push8(td1 * td);
                    914:                        continue;
                    915:                case O_DVD8:
                    916:                        pc.cp++;
                    917:                        td = pop8();
                    918:                        td1 = pop8();
                    919:                        push8(td1 / td);
                    920:                        continue;
                    921:                case O_STOI:
                    922:                        pc.cp++;
                    923:                        push4((long)(pop2()));
                    924:                        continue;
                    925:                case O_STOD:
                    926:                        pc.cp++;
                    927:                        td = pop2();
                    928:                        push8(td);
                    929:                        continue;
                    930:                case O_ITOD:
                    931:                        pc.cp++;
                    932:                        td = pop4();
                    933:                        push8(td);
                    934:                        continue;
                    935:                case O_ITOS:
                    936:                        pc.cp++;
                    937:                        push2((short)(pop4()));
                    938:                        continue;
                    939:                case O_DVD2:
                    940:                        pc.cp++;
                    941:                        td = pop2();
                    942:                        td1 = pop2();
                    943:                        push8(td1 / td);
                    944:                        continue;
                    945:                case O_DVD4:
                    946:                        pc.cp++;
                    947:                        td = pop4();
                    948:                        td1 = pop4();
                    949:                        push8(td1 / td);
                    950:                        continue;
                    951:                case O_DVD24:
                    952:                        pc.cp++;
                    953:                        td = pop2();
                    954:                        td1 = pop4();
                    955:                        push8(td1 / td);
                    956:                        continue;
                    957:                case O_DVD42:
                    958:                        pc.cp++;
                    959:                        td = pop4();
                    960:                        td1 = pop2();
                    961:                        push8(td1 / td);
                    962:                        continue;
                    963:                case O_DVD28:
                    964:                        pc.cp++;
                    965:                        td = pop2();
                    966:                        td1 = pop8();
                    967:                        push8(td1 / td);
                    968:                        continue;
                    969:                case O_DVD48:
                    970:                        pc.cp++;
                    971:                        td = pop4();
                    972:                        td1 = pop8();
                    973:                        push8(td1 / td);
                    974:                        continue;
                    975:                case O_DVD82:
                    976:                        pc.cp++;
                    977:                        td = pop8();
                    978:                        td1 = pop2();
                    979:                        push8(td1 / td);
                    980:                        continue;
                    981:                case O_DVD84:
                    982:                        pc.cp++;
                    983:                        td = pop8();
                    984:                        td1 = pop4();
                    985:                        push8(td1 / td);
                    986:                        continue;
                    987:                case O_RV1:
                    988:                        tcp = _display.raw[*pc.ucp++];
                    989:                        push2((short)(*(tcp + *pc.sp++)));
                    990:                        continue;
                    991:                case O_RV14:
                    992:                        tcp = _display.raw[*pc.ucp++];
                    993:                        push4((long)(*(tcp + *pc.sp++)));
                    994:                        continue;
                    995:                case O_RV2:
                    996:                        tcp = _display.raw[*pc.ucp++];
                    997:                        push2(*(short *)(tcp + *pc.sp++));
                    998:                        continue;
                    999:                case O_RV24:
                   1000:                        tcp = _display.raw[*pc.ucp++];
                   1001:                        push4((long)(*(short *)(tcp + *pc.sp++)));
                   1002:                        continue;
                   1003:                case O_RV4:
                   1004:                        tcp = _display.raw[*pc.ucp++];
                   1005:                        push4(*(long *)(tcp + *pc.sp++));
                   1006:                        continue;
                   1007:                case O_RV8:
                   1008:                        tcp = _display.raw[*pc.ucp++];
                   1009:                        pushsze8(*(struct sze8 *)(tcp + *pc.sp++));
                   1010:                        continue;
                   1011:                case O_RV:
                   1012:                        tcp = _display.raw[*pc.ucp++];
                   1013:                        tcp += *pc.sp++;
                   1014:                        tl = *pc.usp++;
                   1015:                        STACKALIGN(tl1, tl);
                   1016:                        tcp1 = pushsp(tl1);
                   1017:                        blkcpy(tcp, tcp1, tl);
                   1018:                        continue;
                   1019:                case O_LV:
                   1020:                        tcp = _display.raw[*pc.ucp++];
                   1021:                        pushaddr(tcp + *pc.sp++);
                   1022:                        continue;
                   1023:                case O_LRV1:
                   1024:                        tcp = _display.raw[*pc.ucp++];
                   1025:                        PCLONGVAL(tl);
                   1026:                        push2((short)(*(tcp + tl)));
                   1027:                        continue;
                   1028:                case O_LRV14:
                   1029:                        tcp = _display.raw[*pc.ucp++];
                   1030:                        PCLONGVAL(tl);
                   1031:                        push4((long)(*(tcp + tl)));
                   1032:                        continue;
                   1033:                case O_LRV2:
                   1034:                        tcp = _display.raw[*pc.ucp++];
                   1035:                        PCLONGVAL(tl);
                   1036:                        push2(*(short *)(tcp + tl));
                   1037:                        continue;
                   1038:                case O_LRV24:
                   1039:                        tcp = _display.raw[*pc.ucp++];
                   1040:                        PCLONGVAL(tl);
                   1041:                        push4((long)(*(short *)(tcp + tl)));
                   1042:                        continue;
                   1043:                case O_LRV4:
                   1044:                        tcp = _display.raw[*pc.ucp++];
                   1045:                        PCLONGVAL(tl);
                   1046:                        push4(*(long *)(tcp + tl));
                   1047:                        continue;
                   1048:                case O_LRV8:
                   1049:                        tcp = _display.raw[*pc.ucp++];
                   1050:                        PCLONGVAL(tl);
                   1051:                        pushsze8(*(struct sze8 *)(tcp + tl));
                   1052:                        continue;
                   1053:                case O_LRV:
                   1054:                        tcp = _display.raw[*pc.ucp++];
                   1055:                        PCLONGVAL(tl);
                   1056:                        tcp += tl;
                   1057:                        tl = *pc.usp++;
                   1058:                        STACKALIGN(tl1, tl);
                   1059:                        tcp1 = pushsp(tl1);
                   1060:                        blkcpy(tcp, tcp1, tl);
                   1061:                        continue;
                   1062:                case O_LLV:
                   1063:                        tcp = _display.raw[*pc.ucp++];
                   1064:                        PCLONGVAL(tl);
                   1065:                        pushaddr(tcp + tl);
                   1066:                        continue;
                   1067:                case O_IND1:
                   1068:                        pc.cp++;
                   1069:                        push2((short)(*popaddr()));
                   1070:                        continue;
                   1071:                case O_IND14:
                   1072:                        pc.cp++;
                   1073:                        push4((long)(*popaddr()));
                   1074:                        continue;
                   1075:                case O_IND2:
                   1076:                        pc.cp++;
                   1077:                        push2(*(short *)(popaddr()));
                   1078:                        continue;
                   1079:                case O_IND24:
                   1080:                        pc.cp++;
                   1081:                        push4((long)(*(short *)(popaddr())));
                   1082:                        continue;
                   1083:                case O_IND4:
                   1084:                        pc.cp++;
                   1085:                        push4(*(long *)(popaddr()));
                   1086:                        continue;
                   1087:                case O_IND8:
                   1088:                        pc.cp++;
                   1089:                        pushsze8(*(struct sze8 *)(popaddr()));
                   1090:                        continue;
                   1091:                case O_IND:
                   1092:                        tl = *pc.cp++;
                   1093:                        if (tl == 0)
                   1094:                                tl = *pc.usp++;
                   1095:                        tcp = popaddr();
                   1096:                        STACKALIGN(tl1, tl);
                   1097:                        tcp1 = pushsp(tl1);
                   1098:                        blkcpy(tcp, tcp1, tl);
                   1099:                        continue;
                   1100:                case O_CON1:
                   1101:                        push2((short)(*pc.cp++));
                   1102:                        continue;
                   1103:                case O_CON14:
                   1104:                        push4((long)(*pc.cp++));
                   1105:                        continue;
                   1106:                case O_CON2:
                   1107:                        pc.cp++;
                   1108:                        push2(*pc.sp++);
                   1109:                        continue;
                   1110:                case O_CON24:
                   1111:                        pc.cp++;
                   1112:                        push4((long)(*pc.sp++));
                   1113:                        continue;
                   1114:                case O_CON4:
                   1115:                        pc.cp++;
                   1116:                        PCLONGVAL(tl);
                   1117:                        push4(tl);
                   1118:                        continue;
                   1119:                case O_CON8:
                   1120:                        pc.cp++;
                   1121:                        tcp = pushsp(sizeof(double));
                   1122:                        blkcpy(pc.cp, tcp, sizeof(double));
                   1123:                        pc.dbp++;
                   1124:                        continue;
                   1125:                case O_CON:
                   1126:                        tl = *pc.cp++;
                   1127:                        if (tl == 0)
                   1128:                                tl = *pc.usp++;
                   1129:                        STACKALIGN(tl1, tl);
                   1130:                        tcp = pushsp(tl1);
                   1131:                        blkcpy(pc.cp, tcp, tl);
                   1132:                        pc.cp += (int)tl;
                   1133:                        continue;
                   1134:                case O_CONG:
                   1135:                        tl = *pc.cp++;
                   1136:                        if (tl == 0)
                   1137:                                tl = *pc.usp++;
                   1138:                        STACKALIGN(tl1, tl);
                   1139:                        tcp = pushsp(tl1);
                   1140:                        blkcpy(pc.cp, tcp, tl1);
                   1141:                        pc.cp += (int)((tl + 2) & ~1);
                   1142:                        continue;
                   1143:                case O_LVCON:
                   1144:                        tl = *pc.cp++;
                   1145:                        if (tl == 0)
                   1146:                                tl = *pc.usp++;
                   1147:                        pushaddr(pc.cp);
                   1148:                        tl = (tl + 1) & ~1;
                   1149:                        pc.cp += (int)tl;
                   1150:                        continue;
                   1151:                case O_RANG2:
                   1152:                        tl = *pc.cp++;
                   1153:                        if (tl == 0)
                   1154:                                tl = *pc.sp++;
                   1155:                        tl1 = pop2();
                   1156:                        push2((short)(RANG4(tl1, tl, (long)(*pc.sp++))));
                   1157:                        continue;
                   1158:                case O_RANG42:
                   1159:                        tl = *pc.cp++;
                   1160:                        if (tl == 0)
                   1161:                                tl = *pc.sp++;
                   1162:                        tl1 = pop4();
                   1163:                        push4(RANG4(tl1, tl, (long)(*pc.sp++)));
                   1164:                        continue;
                   1165:                case O_RSNG2:
                   1166:                        tl = *pc.cp++;
                   1167:                        if (tl == 0)
                   1168:                                tl = *pc.sp++;
                   1169:                        tl1 = pop2();
                   1170:                        push2((short)(RSNG4(tl1, tl)));
                   1171:                        continue;
                   1172:                case O_RSNG42:
                   1173:                        tl = *pc.cp++;
                   1174:                        if (tl == 0)
                   1175:                                tl = *pc.sp++;
                   1176:                        tl1 = pop4();
                   1177:                        push4(RSNG4(tl1, tl));
                   1178:                        continue;
                   1179:                case O_RANG4:
                   1180:                        tl = *pc.cp++;
                   1181:                        if (tl == 0)
                   1182:                                PCLONGVAL(tl);
                   1183:                        tl1 = pop4();
                   1184:                        PCLONGVAL(tl2);
                   1185:                        push4(RANG4(tl1, tl, tl2));
                   1186:                        continue;
                   1187:                case O_RANG24:
                   1188:                        tl = *pc.cp++;
                   1189:                        if (tl == 0)
                   1190:                                PCLONGVAL(tl);
                   1191:                        tl1 = pop2();
                   1192:                        PCLONGVAL(tl2);
                   1193:                        push2((short)(RANG4(tl1, tl, tl2)));
                   1194:                        continue;
                   1195:                case O_RSNG4:
                   1196:                        tl = *pc.cp++;
                   1197:                        if (tl == 0)
                   1198:                                PCLONGVAL(tl);
                   1199:                        tl1 = pop4();
                   1200:                        push4(RSNG4(tl1, tl));
                   1201:                        continue;
                   1202:                case O_RSNG24:
                   1203:                        tl = *pc.cp++;
                   1204:                        if (tl == 0)
                   1205:                                PCLONGVAL(tl);
                   1206:                        tl1 = pop2();
                   1207:                        push2((short)(RSNG4(tl1, tl)));
                   1208:                        continue;
                   1209:                case O_STLIM:
                   1210:                        pc.cp++;
                   1211:                        STLIM();
                   1212:                        popsp((long)(sizeof(long)));
                   1213:                        continue;
                   1214:                case O_LLIMIT:
                   1215:                        pc.cp++;
                   1216:                        LLIMIT();
                   1217:                        popsp((long)(sizeof(char *)+sizeof(long)));
                   1218:                        continue;
                   1219:                case O_BUFF:
                   1220:                        BUFF((long)(*pc.cp++));
                   1221:                        continue;
                   1222:                case O_HALT:
                   1223:                        pc.cp++;
                   1224:                        if (_nodump == TRUE)
                   1225:                                psexit(0);
                   1226:                        fputs("\nCall to procedure halt\n", stderr);
                   1227:                        backtrace("Halted");
                   1228:                        psexit(0);
                   1229:                        continue;
                   1230:                case O_PXPBUF:
                   1231:                        pc.cp++;
                   1232:                        PCLONGVAL(tl);
                   1233:                        _cntrs = tl;
                   1234:                        PCLONGVAL(tl);
                   1235:                        _rtns = tl;
                   1236:                        NEW(&_pcpcount, (_cntrs + 1) * sizeof(long));
                   1237:                        blkclr(_pcpcount, (_cntrs + 1) * sizeof(long));
                   1238:                        continue;
                   1239:                case O_COUNT:
                   1240:                        pc.cp++;
                   1241:                        _pcpcount[*pc.usp++]++;
                   1242:                        continue;
                   1243:                case O_CASE1OP:
                   1244:                        tl = *pc.cp++;          /* tl = number of cases */
                   1245:                        if (tl == 0)
                   1246:                                tl = *pc.usp++;
                   1247:                        tsp = pc.sp + tl;       /* ptr to end of jump table */
                   1248:                        tcp = (char *)tsp;      /* tcp = ptr to case values */
                   1249:                        tl1 = pop2();           /* tl1 = element to find */
                   1250:                        for(; tl > 0; tl--)     /* look for element */
                   1251:                                if (tl1 == *tcp++)
                   1252:                                        break;
                   1253:                        if (tl == 0)            /* default case => error */
                   1254:                                CASERNG(tl1);
                   1255:                        pc.cp += *(tsp - tl);
                   1256:                        continue;
                   1257:                case O_CASE2OP:
                   1258:                        tl = *pc.cp++;          /* tl = number of cases */
                   1259:                        if (tl == 0)
                   1260:                                tl = *pc.usp++;
                   1261:                        tsp = pc.sp + tl;       /* ptr to end of jump table */
                   1262:                        tsp1 = tsp;             /* tsp1 = ptr to case values */
                   1263:                        tl1 = (unsigned short)pop2();/* tl1 = element to find */
                   1264:                        for(; tl > 0; tl--)     /* look for element */
                   1265:                                if (tl1 == *tsp++)
                   1266:                                        break;
                   1267:                        if (tl == 0)            /* default case => error */
                   1268:                                CASERNG(tl1);
                   1269:                        pc.cp += *(tsp1 - tl);
                   1270:                        continue;
                   1271:                case O_CASE4OP:
                   1272:                        tl = *pc.cp++;          /* tl = number of cases */
                   1273:                        if (tl == 0)
                   1274:                                tl = *pc.usp++;
                   1275:                        tsp1 = pc.sp + tl;      /* ptr to end of jump table */
                   1276:                        tlp = (long *)tsp1;     /* tlp = ptr to case values */
                   1277:                        tl1 = pop4();           /* tl1 = element to find */
                   1278:                        for(; tl > 0; tl--) {   /* look for element */
                   1279:                                GETLONGVAL(tl2, tlp++);
                   1280:                                if (tl1 == tl2)
                   1281:                                        break;
                   1282:                        }
                   1283:                        if (tl == 0)            /* default case => error */
                   1284:                                CASERNG(tl1);
                   1285:                        pc.cp += *(tsp1 - tl);
                   1286:                        continue;
                   1287:                case O_ADDT:
                   1288:                        tl = *pc.cp++;          /* tl has comparison length */
                   1289:                        if (tl == 0)
                   1290:                                tl = *pc.usp++;
                   1291:                        tcp = pushsp((long)(0));/* tcp pts to first arg */
                   1292:                        ADDT(tcp + tl, tcp + tl, tcp, tl >> 2);
                   1293:                        popsp(tl);
                   1294:                        continue;
                   1295:                case O_SUBT:
                   1296:                        tl = *pc.cp++;          /* tl has comparison length */
                   1297:                        if (tl == 0)
                   1298:                                tl = *pc.usp++;
                   1299:                        tcp = pushsp((long)(0));/* tcp pts to first arg */
                   1300:                        SUBT(tcp + tl, tcp + tl, tcp, tl >> 2);
                   1301:                        popsp(tl);
                   1302:                        continue;
                   1303:                case O_MULT:
                   1304:                        tl = *pc.cp++;          /* tl has comparison length */
                   1305:                        if (tl == 0)
                   1306:                                tl = *pc.usp++;
                   1307:                        tcp = pushsp((long)(0));/* tcp pts to first arg */
                   1308:                        MULT(tcp + tl, tcp + tl, tcp, tl >> 2);
                   1309:                        popsp(tl);
                   1310:                        continue;
                   1311:                case O_INCT:
                   1312:                        tl = *pc.cp++;          /* tl has number of args */
                   1313:                        if (tl == 0)
                   1314:                                tl = *pc.usp++;
                   1315:                        tb = INCT();
                   1316:                        popsp(tl*sizeof(long));
                   1317:                        push2((short)(tb));
                   1318:                        continue;
                   1319:                case O_CTTOT:
                   1320:                        tl = *pc.cp++;          /* tl has number of args */
                   1321:                        if (tl == 0)
                   1322:                                tl = *pc.usp++;
                   1323:                        tl1 = tl * sizeof(long);
                   1324:                        tcp = pushsp((long)(0)) + tl1; /* tcp pts to result */
                   1325:                        CTTOT(tcp);
                   1326:                        popsp(tl*sizeof(long));
                   1327:                        continue;
                   1328:                case O_CARD:
                   1329:                        tl = *pc.cp++;          /* tl has comparison length */
                   1330:                        if (tl == 0)
                   1331:                                tl = *pc.usp++;
                   1332:                        tcp = pushsp((long)(0));/* tcp pts to set */
                   1333:                        tl1 = CARD(tcp, tl);
                   1334:                        popsp(tl);
                   1335:                        push2((short)(tl1));
                   1336:                        continue;
                   1337:                case O_IN:
                   1338:                        tl = *pc.cp++;          /* tl has comparison length */
                   1339:                        if (tl == 0)
                   1340:                                tl = *pc.usp++;
                   1341:                        tl1 = pop4();           /* tl1 is the element */
                   1342:                        tcp = pushsp((long)(0));/* tcp pts to set */
                   1343:                        tl2 = *pc.sp++; /* lower bound */
                   1344:                        tb = IN(tl1, tl2, (long)(*pc.usp++), tcp);
                   1345:                        popsp(tl);
                   1346:                        push2((short)(tb));
                   1347:                        continue;
                   1348:                case O_ASRT:
                   1349:                        pc.cp++;
                   1350:                        tl = pop4();
                   1351:                        tcp = popaddr();
                   1352:                        ASRTS(tl, tcp);
                   1353:                        continue;
                   1354:                case O_FOR1U:
                   1355:                        tl1 = *pc.cp++;         /* tl1 loop branch */
                   1356:                        if (tl1 == 0)
                   1357:                                tl1 = *pc.sp++;
                   1358:                        tcp = popaddr();        /* tcp = ptr to index var */
                   1359:                        tl = pop4();            /* tl upper bound */
                   1360:                        if (*tcp == tl)         /* loop is done, fall through */
                   1361:                                continue;
                   1362:                        *tcp += 1;              /* inc index var */
                   1363:                        pc.cp += tl1;           /* return to top of loop */
                   1364:                        continue;
                   1365:                case O_FOR2U:
                   1366:                        tl1 = *pc.cp++;         /* tl1 loop branch */
                   1367:                        if (tl1 == 0)
                   1368:                                tl1 = *pc.sp++;
                   1369:                        tsp = (short *)popaddr(); /* tsp = ptr to index var */
                   1370:                        tl = pop4();            /* tl upper bound */
                   1371:                        if (*tsp == tl)         /* loop is done, fall through */
                   1372:                                continue;
                   1373:                        *tsp += 1;              /* inc index var */
                   1374:                        pc.cp += tl1;           /* return to top of loop */
                   1375:                        continue;
                   1376:                case O_FOR4U:
                   1377:                        tl1 = *pc.cp++;         /* tl1 loop branch */
                   1378:                        if (tl1 == 0)
                   1379:                                tl1 = *pc.sp++;
                   1380:                        tlp = (long *)popaddr(); /* tlp = ptr to index var */
                   1381:                        tl = pop4();            /* tl upper bound */
                   1382:                        if (*tlp == tl)         /* loop is done, fall through */
                   1383:                                continue;
                   1384:                        *tlp += 1;              /* inc index var */
                   1385:                        pc.cp += tl1;           /* return to top of loop */
                   1386:                        continue;
                   1387:                case O_FOR1D:
                   1388:                        tl1 = *pc.cp++;         /* tl1 loop branch */
                   1389:                        if (tl1 == 0)
                   1390:                                tl1 = *pc.sp++;
                   1391:                        tcp = popaddr();        /* tcp = ptr to index var */
                   1392:                        tl = pop4();            /* tl upper bound */
                   1393:                        if (*tcp == tl)         /* loop is done, fall through */
                   1394:                                continue;
                   1395:                        *tcp -= 1;              /* dec index var */
                   1396:                        pc.cp += tl1;           /* return to top of loop */
                   1397:                        continue;
                   1398:                case O_FOR2D:
                   1399:                        tl1 = *pc.cp++;         /* tl1 loop branch */
                   1400:                        if (tl1 == 0)
                   1401:                                tl1 = *pc.sp++;
                   1402:                        tsp = (short *)popaddr(); /* tsp = ptr to index var */
                   1403:                        tl = pop4();            /* tl upper bound */
                   1404:                        if (*tsp == tl)         /* loop is done, fall through */
                   1405:                                continue;
                   1406:                        *tsp -= 1;              /* dec index var */
                   1407:                        pc.cp += tl1;           /* return to top of loop */
                   1408:                        continue;
                   1409:                case O_FOR4D:
                   1410:                        tl1 = *pc.cp++;         /* tl1 loop branch */
                   1411:                        if (tl1 == 0)
                   1412:                                tl1 = *pc.sp++;
                   1413:                        tlp = (long *)popaddr(); /* tlp = ptr to index var */
                   1414:                        tl = pop4();            /* tl upper bound */
                   1415:                        if (*tlp == tl)         /* loop is done, fall through */
                   1416:                                continue;
                   1417:                        *tlp -= 1;              /* dec index var */
                   1418:                        pc.cp += tl1;           /* return to top of loop */
                   1419:                        continue;
                   1420:                case O_READE:
                   1421:                        pc.cp++;
                   1422:                        PCLONGVAL(tl);
                   1423:                        push2((short)(READE(curfile, base + tl)));
                   1424:                        continue;
                   1425:                case O_READ4:
                   1426:                        pc.cp++;
                   1427:                        push4(READ4(curfile));
                   1428:                        continue;
                   1429:                case O_READC:
                   1430:                        pc.cp++;
                   1431:                        push2((short)(READC(curfile)));
                   1432:                        continue;
                   1433:                case O_READ8:
                   1434:                        pc.cp++;
                   1435:                        push8(READ8(curfile));
                   1436:                        continue;
                   1437:                case O_READLN:
                   1438:                        pc.cp++;
                   1439:                        READLN(curfile);
                   1440:                        continue;
                   1441:                case O_EOF:
                   1442:                        pc.cp++;
                   1443:                        push2((short)(TEOF(popaddr())));
                   1444:                        continue;
                   1445:                case O_EOLN:
                   1446:                        pc.cp++;
                   1447:                        push2((short)(TEOLN(popaddr())));
                   1448:                        continue;
                   1449:                case O_WRITEC:
                   1450:                        if (_runtst) {
                   1451:                                WRITEC(curfile);
                   1452:                                popsp((long)(*pc.cp++));
                   1453:                                continue;
                   1454:                        }
                   1455:                        tl = *pc.cp++;
                   1456:                        switch (tl - sizeof(FILE *)) {
                   1457:                        case 2:
                   1458:                                tl1 = pop2();
                   1459:                                break;
                   1460:                        case 4:
                   1461:                                tl1 = pop4();
                   1462:                                break;
                   1463:                        default:
                   1464:                                ERROR("Panic: bad size to O_WRITEC");
                   1465:                                /* NOT REACHED */
                   1466:                        }
                   1467:                        tcp = popaddr();
                   1468:                        fputc(tl1, tcp);
                   1469:                        continue;
                   1470:                case O_WRITES:
                   1471:                        if (_runtst) {
                   1472:                                WRITES(curfile);
                   1473:                                popsp((long)(*pc.cp++));
                   1474:                                continue;
                   1475:                        }
                   1476:                        fwrite();
                   1477:                        popsp((long)(*pc.cp++));
                   1478:                        continue;
                   1479:                case O_WRITEF:
                   1480:                        if (_runtst) {
                   1481:                                WRITEF(curfile);
                   1482:                                popsp((long)(*pc.cp++));
                   1483:                                continue;
                   1484:                        }
                   1485:                        fprintf();
                   1486:                        popsp((long)(*pc.cp++));
                   1487:                        continue;
                   1488:                case O_WRITLN:
                   1489:                        pc.cp++;
                   1490:                        if (_runtst) {
                   1491:                                WRITLN(curfile);
                   1492:                                continue;
                   1493:                        }
                   1494:                        fputc('\n', ACTFILE(curfile));
                   1495:                        continue;
                   1496:                case O_PAGE:
                   1497:                        pc.cp++;
                   1498:                        if (_runtst) {
                   1499:                                PAGE(curfile);
                   1500:                                continue;
                   1501:                        }
                   1502:                        fputc('', ACTFILE(curfile));
                   1503:                        continue;
                   1504:                case O_NAM:
                   1505:                        pc.cp++;
                   1506:                        tl = pop4();
                   1507:                        PCLONGVAL(tl1);
                   1508:                        pushaddr(NAM(tl, base + tl1));
                   1509:                        continue;
                   1510:                case O_MAX:
                   1511:                        tl = *pc.cp++;
                   1512:                        if (tl == 0)
                   1513:                                tl = *pc.usp++;
                   1514:                        tl1 = pop4();
                   1515:                        if (_runtst) {
                   1516:                                push4(MAX(tl1, tl, (long)(*pc.usp++)));
                   1517:                                continue;
                   1518:                        }
                   1519:                        tl1 -= tl;
                   1520:                        tl = *pc.usp++;
                   1521:                        push4(tl1 > tl ? tl1 : tl);
                   1522:                        continue;
                   1523:                case O_MIN:
                   1524:                        tl = *pc.cp++;
                   1525:                        if (tl == 0)
                   1526:                                tl = *pc.usp++;
                   1527:                        tl1 = pop4();
                   1528:                        push4(tl1 < tl ? tl1 : tl);
                   1529:                        continue;
                   1530:                case O_UNIT:
                   1531:                        pc.cp++;
                   1532:                        curfile = UNIT(popaddr());
                   1533:                        continue;
                   1534:                case O_UNITINP:
                   1535:                        pc.cp++;
                   1536:                        curfile = INPUT;
                   1537:                        continue;
                   1538:                case O_UNITOUT:
                   1539:                        pc.cp++;
                   1540:                        curfile = OUTPUT;
                   1541:                        continue;
                   1542:                case O_MESSAGE:
                   1543:                        pc.cp++;
                   1544:                        PFLUSH();
                   1545:                        curfile = ERR;
                   1546:                        continue;
                   1547:                case O_PUT:
                   1548:                        pc.cp++;
                   1549:                        PUT(curfile);
                   1550:                        continue;
                   1551:                case O_GET:
                   1552:                        pc.cp++;
                   1553:                        GET(curfile);
                   1554:                        continue;
                   1555:                case O_FNIL:
                   1556:                        pc.cp++;
                   1557:                        pushaddr(FNIL(popaddr()));
                   1558:                        continue;
                   1559:                case O_DEFNAME:
                   1560:                        pc.cp++;
                   1561:                        DEFNAME();
                   1562:                        popsp((long)(2*sizeof(char *)+2*sizeof(long)));
                   1563:                        continue;
                   1564:                case O_RESET:
                   1565:                        pc.cp++;
                   1566:                        RESET();
                   1567:                        popsp((long)(2*sizeof(char *)+2*sizeof(long)));
                   1568:                        continue;
                   1569:                case O_REWRITE:
                   1570:                        pc.cp++;
                   1571:                        REWRITE();
                   1572:                        popsp((long)(2*sizeof(char *)+2*sizeof(long)));
                   1573:                        continue;
                   1574:                case O_FILE:
                   1575:                        pc.cp++;
                   1576:                        pushaddr(ACTFILE(curfile));
                   1577:                        continue;
                   1578:                case O_REMOVE:
                   1579:                        pc.cp++;
                   1580:                        REMOVE();
                   1581:                        popsp((long)(sizeof(char *)+sizeof(long)));
                   1582:                        continue;
                   1583:                case O_FLUSH:
                   1584:                        pc.cp++;
                   1585:                        FLUSH();
                   1586:                        popsp((long)(sizeof(char *)));
                   1587:                        continue;
                   1588:                case O_PACK:
                   1589:                        pc.cp++;
                   1590:                        PACK();
                   1591:                        popsp((long)(5*sizeof(long)+2*sizeof(char*)));
                   1592:                        continue;
                   1593:                case O_UNPACK:
                   1594:                        pc.cp++;
                   1595:                        UNPACK();
                   1596:                        popsp((long)(5*sizeof(long)+2*sizeof(char*)));
                   1597:                        continue;
                   1598:                case O_ARGC:
                   1599:                        pc.cp++;
                   1600:                        push4((long)_argc);
                   1601:                        continue;
                   1602:                case O_ARGV:
                   1603:                        tl = *pc.cp++;          /* tl = size of char array */
                   1604:                        if (tl == 0)
                   1605:                                tl = *pc.usp++;
                   1606:                        tcp = popaddr();        /* tcp = addr of char array */
                   1607:                        tl1 = pop4();           /* tl1 = argv subscript */
                   1608:                        ARGV(tl1, tcp, tl);
                   1609:                        continue;
                   1610:                case O_CLCK:
                   1611:                        pc.cp++;
                   1612:                        push4(CLCK());
                   1613:                        continue;
                   1614:                case O_WCLCK:
                   1615:                        pc.cp++;
                   1616:                        push4(time(0));
                   1617:                        continue;
                   1618:                case O_SCLCK:
                   1619:                        pc.cp++;
                   1620:                        push4(SCLCK());
                   1621:                        continue;
                   1622:                case O_NEW:
                   1623:                        tl = *pc.cp++;          /* tl = size being new'ed */
                   1624:                        if (tl == 0)
                   1625:                                tl = *pc.usp++;
                   1626:                        tcp = popaddr();        /* ptr to ptr being new'ed */
                   1627:                        NEW(tcp, tl);
                   1628:                        if (_runtst) {
                   1629:                                blkclr(*((char **)(tcp)), tl);
                   1630:                        }
                   1631:                        continue;
                   1632:                case O_DISPOSE:
                   1633:                        tl = *pc.cp++;          /* tl = size being disposed */
                   1634:                        if (tl == 0)
                   1635:                                tl = *pc.usp++;
                   1636:                        tcp = popaddr();        /* ptr to ptr being disposed */
                   1637:                        DISPOSE(tcp, tl);
                   1638:                        *(char **)tcp = (char *)0;
                   1639:                        continue;
                   1640:                case O_DFDISP:
                   1641:                        tl = *pc.cp++;          /* tl = size being disposed */
                   1642:                        if (tl == 0)
                   1643:                                tl = *pc.usp++;
                   1644:                        tcp = popaddr();        /* ptr to ptr being disposed */
                   1645:                        DFDISPOSE(tcp, tl);
                   1646:                        *(char **)tcp = (char *)0;
                   1647:                        continue;
                   1648:                case O_DATE:
                   1649:                        pc.cp++;
                   1650:                        DATE(popaddr());
                   1651:                        continue;
                   1652:                case O_TIME:
                   1653:                        pc.cp++;
                   1654:                        TIME(popaddr());
                   1655:                        continue;
                   1656:                case O_UNDEF:
                   1657:                        pc.cp++;
                   1658:                        td = pop8();
                   1659:                        push2((short)(0));
                   1660:                        continue;
                   1661:                case O_ATAN:
                   1662:                        pc.cp++;
                   1663:                        if (_runtst) {
                   1664:                                push8(ATAN(pop8()));
                   1665:                                continue;
                   1666:                        }
                   1667:                        push8(atan(pop8()));
                   1668:                        continue;
                   1669:                case O_COS:
                   1670:                        pc.cp++;
                   1671:                        if (_runtst) {
                   1672:                                push8(COS(pop8()));
                   1673:                                continue;
                   1674:                        }
                   1675:                        push8(cos(pop8()));
                   1676:                        continue;
                   1677:                case O_EXP:
                   1678:                        pc.cp++;
                   1679:                        if (_runtst) {
                   1680:                                push8(EXP(pop8()));
                   1681:                                continue;
                   1682:                        }
                   1683:                        push8(exp(pop8()));
                   1684:                        continue;
                   1685:                case O_LN:
                   1686:                        pc.cp++;
                   1687:                        if (_runtst) {
                   1688:                                push8(LN(pop8()));
                   1689:                                continue;
                   1690:                        }
                   1691:                        push8(log(pop8()));
                   1692:                        continue;
                   1693:                case O_SIN:
                   1694:                        pc.cp++;
                   1695:                        if (_runtst) {
                   1696:                                push8(SIN(pop8()));
                   1697:                                continue;
                   1698:                        }
                   1699:                        push8(sin(pop8()));
                   1700:                        continue;
                   1701:                case O_SQRT:
                   1702:                        pc.cp++;
                   1703:                        if (_runtst) {
                   1704:                                push8(SQRT(pop8()));
                   1705:                                continue;
                   1706:                        }
                   1707:                        push8(sqrt(pop8()));
                   1708:                        continue;
                   1709:                case O_CHR2:
                   1710:                case O_CHR4:
                   1711:                        pc.cp++;
                   1712:                        if (_runtst) {
                   1713:                                push2((short)(CHR(pop4())));
                   1714:                                continue;
                   1715:                        }
                   1716:                        push2((short)(pop4()));
                   1717:                        continue;
                   1718:                case O_ODD2:
                   1719:                case O_ODD4:
                   1720:                        pc.cp++;
                   1721:                        tl = pop4();
                   1722:                        push2((short)(tl & 1));
                   1723:                        continue;
                   1724:                case O_SUCC2:
                   1725:                        tl = *pc.cp++;
                   1726:                        if (tl == 0)
                   1727:                                tl = *pc.sp++;
                   1728:                        tl1 = pop4();
                   1729:                        if (_runtst) {
                   1730:                                push2((short)(SUCC(tl1, tl, (long)(*pc.sp++))));
                   1731:                                continue;
                   1732:                        }
                   1733:                        push2((short)(tl1 + 1));
                   1734:                        pc.sp++;
                   1735:                        continue;
                   1736:                case O_SUCC24:
                   1737:                        tl = *pc.cp++;
                   1738:                        if (tl == 0)
                   1739:                                tl = *pc.sp++;
                   1740:                        tl1 = pop4();
                   1741:                        if (_runtst) {
                   1742:                                push4(SUCC(tl1, tl, (long)(*pc.sp++)));
                   1743:                                continue;
                   1744:                        }
                   1745:                        push4(tl1 + 1);
                   1746:                        pc.sp++;
                   1747:                        continue;
                   1748:                case O_SUCC4:
                   1749:                        tl = *pc.cp++;
                   1750:                        if (tl == 0)
                   1751:                                PCLONGVAL(tl);
                   1752:                        tl1 = pop4();
                   1753:                        if (_runtst) {
                   1754:                                PCLONGVAL(tl2);
                   1755:                                push4(SUCC(tl1, tl, (long)(tl2)));
                   1756:                                continue;
                   1757:                        }
                   1758:                        push4(tl1 + 1);
                   1759:                        pc.lp++;
                   1760:                        continue;
                   1761:                case O_PRED2:
                   1762:                        tl = *pc.cp++;
                   1763:                        if (tl == 0)
                   1764:                                tl = *pc.sp++;
                   1765:                        tl1 = pop4();
                   1766:                        if (_runtst) {
                   1767:                                push2((short)(PRED(tl1, tl, (long)(*pc.sp++))));
                   1768:                                continue;
                   1769:                        }
                   1770:                        push2((short)(tl1 - 1));
                   1771:                        pc.sp++;
                   1772:                        continue;
                   1773:                case O_PRED24:
                   1774:                        tl = *pc.cp++;
                   1775:                        if (tl == 0)
                   1776:                                tl = *pc.sp++;
                   1777:                        tl1 = pop4();
                   1778:                        if (_runtst) {
                   1779:                                push4(PRED(tl1, tl, (long)(*pc.sp++)));
                   1780:                                continue;
                   1781:                        }
                   1782:                        push4(tl1 - 1);
                   1783:                        pc.sp++;
                   1784:                        continue;
                   1785:                case O_PRED4:
                   1786:                        tl = *pc.cp++;
                   1787:                        if (tl == 0)
                   1788:                                PCLONGVAL(tl);
                   1789:                        tl1 = pop4();
                   1790:                        if (_runtst) {
                   1791:                                PCLONGVAL(tl2);
                   1792:                                push4(PRED(tl1, tl, (long)(tl2)));
                   1793:                                continue;
                   1794:                        }
                   1795:                        push4(tl1 - 1);
                   1796:                        pc.lp++;
                   1797:                        continue;
                   1798:                case O_SEED:
                   1799:                        pc.cp++;
                   1800:                        push4(SEED(pop4()));
                   1801:                        continue;
                   1802:                case O_RANDOM:
                   1803:                        pc.cp++;
                   1804:                        push8(RANDOM(pop8()));
                   1805:                        continue;
                   1806:                case O_EXPO:
                   1807:                        pc.cp++;
                   1808:                        push4(EXPO(pop8()));
                   1809:                        continue;
                   1810:                case O_SQR2:
                   1811:                case O_SQR4:
                   1812:                        pc.cp++;
                   1813:                        tl = pop4();
                   1814:                        push4(tl * tl);
                   1815:                        continue;
                   1816:                case O_SQR8:
                   1817:                        pc.cp++;
                   1818:                        td = pop8();
                   1819:                        push8(td * td);
                   1820:                        continue;
                   1821:                case O_ROUND:
                   1822:                        pc.cp++;
                   1823:                        push4(ROUND(pop8()));
                   1824:                        continue;
                   1825:                case O_TRUNC:
                   1826:                        pc.cp++;
                   1827:                        push4(TRUNC(pop8()));
                   1828:                        continue;
                   1829:                default:
                   1830:                        ERROR("Panic: bad op code\n");
                   1831:                        continue;
                   1832:                }
                   1833:        }
                   1834: }

unix.superglobalmegacorp.com

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