Annotation of researchv10no/cmd/basic/bite/src/encode.c, revision 1.1

1.1     ! root        1: /* Copyright Bell Telephone Laboratories Whippany, N.J.
        !             2: 
        !             3:  *     /////////////////////////////////////
        !             4:  *     /////////////////////////////////////
        !             5:  *     ///////////// encode.c //////////////
        !             6:  *     /// J. P. Hawkins WH X4610 8C-001 ///
        !             7:  *     ///// Sun Aug 26 06:33:03 1979 //////
        !             8:  *     /////////////////////////////////////
        !             9:  *     /////////////////////////////////////
        !            10: 
        !            11:  *
        !            12:  * ENCODE BASIC COMMAND
        !            13:  * mod,J.P.Hawkins,17-JUL-79, add "else" and "endif" commands
        !            14:  */
        !            15: /*   "@(#) encode.c:  V 1.3  11/29/81" */
        !            16: #include "bas.h"
        !            17: /*
        !            18:  *
        !            19:  * //////// BASIC INTERPRETER COMMAND TABLE ////////
        !            20:  *
        !            21:  */
        !            22: int    delete();       /* delete specified line number(s) */
        !            23: int    brake();        /* break out of a for loop */
        !            24: int    cont();
        !            25: int    dim();          /* alloc specified data array */
        !            26: int    __end();        /* define end of program */
        !            27: int    expunge();      /* expunge variables */
        !            28: int    _for();         /* initialize and/or test "for" loop */
        !            29: int    gosub();        /* goto subroutine, return to next statement */
        !            30: int    call();         /* overlay and gosub */
        !            31: int    __goto();       /* goto specified statement number */
        !            32: int    __if();         /* if/then/goto test */
        !            33: int    __input();      /* accept input from stdio dev */
        !            34: int    new();          /* clean out BASIC program txtbuf */
        !            35: int    let();          /* execute assignment */
        !            36: int    list();         /* reverse translate, then list */
        !            37: int    next();         /* terminate last "for" statement */
        !            38: int    pause();        /* wait for spacebar or panel pause button */
        !            39: int    __print();      /* print string and/or variables */
        !            40: int    _random();      /* plant random "seed" for "rnd" cmd */
        !            41: int    __read();       /* initialized data */
        !            42: int    no_op();        /* ignore this statemtnt */
        !            43: int    restore();      /* restore initialized data area pointer */
        !            44: int    __return();     /* return from subroutine called by gosub */
        !            45: int    sub();          /* substitute command for editing */
        !            46: int    run();          /* run or load and run a BASIC core image */
        !            47: int    sing();         /* single step execution */
        !            48: int    con();          /* continue from single step */
        !            49: int    stop();         /* halt program execution and re-init */
        !            50: int    minus();        /* print previous program line */
        !            51: int    reseq();        /* resequence line numbers */
        !            52: int    mov();          /* move a group of lines */
        !            53: int    autnum();               /* start auto line numbering */
        !            54: int    save();         /*save basic program full ascii text form*/
        !            55: int    f();            /* print current filename */
        !            56: int    load();         /*read in basic file in full ascii text form*/
        !            57: int    old();          /* clear user core, the read in BASIC prog */
        !            58: int    corleft();      /* returns amount of core bytes remaining in decimal */
        !            59: int    undo();         /* undoes the last substite command */
        !            60: int    _common();      /* preserve variables for next "run" */
        !            61: int    on();           /* on goto, on gosub */
        !            62: int    goaway();       /* "bye" command exits the interpreter */
        !            63: int    openo();        /* OPEN file(s) for write */
        !            64: int    openi();        /* OPEN file(s) for reading */
        !            65: int    __seek();       /* random access */
        !            66: int    rewin();        /* Rewind to beginning of file */
        !            67: int    append();       /* Open file for append, create if non-exist */
        !            68: int    _closef();      /* CLOSE FILE */
        !            69: int    clall();        /* Close all open files */
        !            70: int    iprintf();      /* interpretive printf */
        !            71: int    _else();        /* ELSE command for structured "if" */
        !            72: int    _endif();       /* Structured "if" terminator */
        !            73: int    sysls();        /* direct call to ls */
        !            74: int    sysrm();        /* direct call to rm */
        !            75: 
        !            76: #ifndef        LSX
        !            77: int    bsys();         /* "!" command for system calls */
        !            78: #endif
        !            79: #ifdef TEST
        !            80: int    buscmd();       /* IEEE BUS COMMAND */
        !            81: int    buspr();        /* print to IEEE BUS */
        !            82: int    ps();           /* set power supply */
        !            83: int    relay();        /* set relays command */
        !            84: int    bscan();        /* set scanner command */
        !            85: int    bdelay();       /* 1/60 sec delay command */
        !            86: int    bdvminit();     /* dvm initializer */
        !            87: int    bdvms();        /* dvm setup command */
        !            88: int    bhprintf();     /* strip printer driver */
        !            89: int    lodset();       /* load setting driver */
        !            90: #endif
        !            91: #ifdef LSX
        !            92: int    chdir();
        !            93: int    lsdir();
        !            94: int    pwd();
        !            95: #endif
        !            96: /*
        !            97:  *
        !            98:  * This is the BASIC interpreter command string and routine
        !            99:  * dispatch table.
        !           100:  * This table is used for forward translation of a BASIC text
        !           101:  * file to it's core image form and is also used in the reverse
        !           102:  * translation process.
        !           103:  * In loadin the basic text file (.b) the table is searched
        !           104:  * for each command encountered in the file and is used to replace
        !           105:  * the command with a "PSEUDO CODE" or the relative position of the
        !           106:  * code in the table. This process also occurs when an input line is typed
        !           107:  * before it is stored for a run.
        !           108:  * When a run command is executed the table need-NOT be searched
        !           109:  * as the offset is already "compiled" in the code.
        !           110:  * The basic execution routine is then executed by an indirect,
        !           111:  * indexed jump through this table.
        !           112:  * The format of a line in a BASIC core image is as follows:
        !           113:  *     first two bytes represent the integer value of the line number.
        !           114:  *     Second two bytes represent the PSEUDO code or table offset.
        !           115:  *     Then the rest of the line is in it's original TEXT form,
        !           116:  *             terminated by a line-feed (NO-NULL)
        !           117:  *
        !           118:  *
        !           119:  */
        !           120: 
        !           121: /*
        !           122:  * each entry contains the text for the BASIC command
        !           123:  * in question and the address of the routine which sevices it
        !           124:  */
        !           125: struct COMMAND cmdtbl[] = {
        !           126:        {"common",      _common},
        !           127:        {"on",          on},
        !           128:        {"com",         _common},
        !           129:        {"data",        no_op},
        !           130:        {"delete",      delete},
        !           131:        {"break",       brake},
        !           132:        {"continue",    cont},
        !           133:        {"del",         delete},
        !           134:        {"dim",         dim},
        !           135:        {"end",         __end},
        !           136:        {"bye",         goaway},
        !           137:        {"q",           goaway},
        !           138:        {"expunge",     expunge},
        !           139:        {"for",         _for},
        !           140:        {"gosub",       gosub},
        !           141:        {"call",        call},
        !           142:        {"goto",        __goto},
        !           143:        {"go to",       __goto},
        !           144:        {"if",          __if},
        !           145:        {"input",       __input},
        !           146:        {"new",         new},
        !           147:        {"let",         let},
        !           148:        {"\010",        let},
        !           149:        {"list",        list},
        !           150:        {"l",           list},
        !           151:        {"n",           list},
        !           152:        {"next",        next},
        !           153:        {"pause",       pause},
        !           154:        {"pr",          __print},
        !           155:        {"print",       __print},
        !           156:        {"randomize",   _random},
        !           157:        {"read",        __read},
        !           158:        {"rem",         no_op},
        !           159:        {"restore",     restore},
        !           160:        {"return",      __return},
        !           161:        {"s",           sub},   /* substitute command */
        !           162:        {"undo",        undo},
        !           163:        {"run",         run},
        !           164:        {"sing",        sing},
        !           165:        {"con",         con},
        !           166:        {"stop",        stop},
        !           167:        {"-",           minus},
        !           168:        {"reseq",       reseq},
        !           169:        {"mov",         mov},
        !           170:        {"auto",        autnum},
        !           171:        {"a",           autnum},
        !           172:        {"save",        save},
        !           173:        {"w",           save},
        !           174:        {"f",           f},
        !           175:        {"load",        load},
        !           176:        {"old",         old},
        !           177:        {"size",        corleft},
        !           178:        {"openo",       openo},
        !           179:        {"openi",       openi},
        !           180:        {"seek",        __seek},
        !           181:        {"rewin",       rewin},
        !           182:        {"close",       _closef},
        !           183:        {"closeall",    clall},
        !           184:        {"append",      append},
        !           185:        {"printf",      iprintf},
        !           186:        {"else",        _else},
        !           187:        {"endif",       _endif},
        !           188:        {"ls",          sysls},
        !           189:        {"rm",          sysrm},
        !           190: #ifndef        LSX
        !           191:        {"!",           bsys},
        !           192: #endif
        !           193: #ifdef TEST
        !           194:        {"cmd",         buscmd},
        !           195:        {"buspr",       buspr},
        !           196:        {"ps",          ps},
        !           197:        {"relay",       relay},
        !           198:        {"dvminit",     bdvminit},
        !           199:        {"scan",        bscan},
        !           200:        {"delay",       bdelay},
        !           201:        {"dvms",        bdvms},
        !           202:        {"hprintf",     bhprintf},
        !           203:        {"lodset",      lodset},
        !           204: #endif
        !           205: #ifdef LSX
        !           206:        {"cd",          chdir},
        !           207:        {"ls",          lsdir},
        !           208:        {"pwd",         pwd},
        !           209: #endif
        !           210:        {0,             0}      /* null terminator */
        !           211:        };
        !           212: 
        !           213: goaway()
        !           214: {
        !           215:        clall();
        !           216:        exit(0);
        !           217: }
        !           218: /*
        !           219:  *
        !           220:  * calling format:
        !           221:  *     code = encode(string);
        !           222:  *
        !           223:  *     where: code = integer returned as opcode (table offset)
        !           224:  *                     -1 (minus one) returned if search failed
        !           225:  *            string = pointer to string containing code text
        !           226:  *                     to be translated or encoded (null terminated)
        !           227:  */
        !           228: 
        !           229: encode(s)
        !           230: char   s[];
        !           231: {
        !           232:        register int i;         /* index reg. for expediency */
        !           233:        /*
        !           234:         * compare each string in table with s
        !           235:         * when match is found, return index (OPCODE)
        !           236:         * if end-of-table (null) encountered return -1
        !           237:         */
        !           238:        for(i=0; cmdtbl[i].cmdtxt != 0 ; i++)
        !           239:        {
        !           240:                if(!(strcmp(s, cmdtbl[i].cmdtxt)))
        !           241:                        return(i);      /* we found it! */
        !           242:        }
        !           243:        return(-1);     /* oops not in this table, pal */
        !           244: }

unix.superglobalmegacorp.com

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