Annotation of 43BSD/contrib/apl/src/tab.c, revision 1.1

1.1     ! root        1: static char tab_c_Sccsid[] = "tab.c @(#)tab.c  1.3     10/5/82 Berkeley ";
        !             2: 
        !             3: /*
        !             4:  * This table defines the operators in APL\11.
        !             5:  * The first entry is the character representing
        !             6:  * the operator, the second is the unique operator
        !             7:  * identifier (which should give you a hint as
        !             8:  * to what the operator is), and the third is
        !             9:  * the operator type, of interest only to the
        !            10:  * interpreter.
        !            11:  * Those characters represented by octal numbers are actually
        !            12:  * two-character overstrikes.  Ignore the leading "2", and
        !            13:  * the rest of the number is an index into "chartab", below,
        !            14:  * which lists the two-character overstrikes.  Overstrikes
        !            15:  * may be in either order.
        !            16:  *
        !            17:  * Note: What isn't shown here is that unary minus
        !            18:  * is ` (backwards apostrophe).  This is handled in lex.c, a0.c
        !            19:  * and a2.c (both input and output).
        !            20:  */
        !            21: struct tab
        !            22: {
        !            23:        int     input;
        !            24:        int     lexval;
        !            25:        int     retval;
        !            26: } tab[] = {
        !            27: 
        !            28: /*
        !            29:  * one of a kind
        !            30:  */
        !            31: 
        !            32:        '(',    unk,lpar,
        !            33:        ')',    unk,rpar,
        !            34:        '[',    unk,lbkt,
        !            35:        ']',    unk,rbkt,
        !            36:        '/',    COM,com,
        !            37:        0200  , COM0,com0,
        !            38:        '\\',   EXD,com,
        !            39:        0201  , EXD0,com0,
        !            40:        '\'',   unk,strng,
        !            41:        'J',    unk,null,
        !            42:        '.',    IPROD,dot,
        !            43:        'L',    QUAD,Quad,
        !            44:        0202  , QQUAD,Quad,
        !            45:        0203  , CQUAD,Quad,
        !            46:        ';',    unk,semi,
        !            47:        ':',    unk,cln,
        !            48:        0204  , COMNT,comnt,
        !            49:        'C',    COMNT,comnt,
        !            50:        '}',    BRAN0,tran,
        !            51: 
        !            52: /*
        !            53:  * dyadic scalars
        !            54:  *     op2 op1 v (dyadic op)
        !            55:  */
        !            56: 
        !            57:        '<',    LT,dscal,
        !            58:        '>',    GT,dscal,
        !            59:        '$',    LE,dscal,
        !            60:        0220,   LE,dscal,
        !            61:        '&',    GE,dscal,
        !            62:        0221,   GE,dscal,
        !            63:        '=',    EQ,dscal,
        !            64:        '#',    NE,dscal,
        !            65:        0222,   NE,dscal,
        !            66:        '^',    AND,dscal,
        !            67:        'A',    AND,dscal,
        !            68:        'Q',    OR,dscal,
        !            69:        'V',    OR,dscal,
        !            70:        0205  , NAND,dscal,
        !            71:        0231,   NAND,dscal,
        !            72:        0206  , NOR,dscal,
        !            73:        0223,   NAND,dscal,
        !            74:        0224,   NOR,dscal,
        !            75: 
        !            76: /*
        !            77:  * monadic or dyadic scalars
        !            78:  *     op2 op1 v (dyadic op)
        !            79:  *     op1 v+1 (monadic op)
        !            80:  */
        !            81: 
        !            82:        '+',    ADD,mdscal,
        !            83:        '-',    SUB,mdscal,
        !            84:        'M',    MUL,mdscal,
        !            85:        'X',    MUL,mdscal,
        !            86:        0225,   MUL,mdscal,
        !            87:        'P',    DIV,mdscal,
        !            88:        0240,   DIV,mdscal,
        !            89:        '%',    DIV,mdscal,
        !            90:        0226,   DIV,mdscal,
        !            91:        '|',    MOD,mdscal,
        !            92:        'D',    MIN,mdscal,
        !            93:        'S',    MAX,mdscal,
        !            94:        '*',    PWR,mdscal,
        !            95:        0207  , LOG,mdscal,
        !            96:        'O',    CIR,mdscal,
        !            97:        0210  , COMB,mdscal,
        !            98:        '!',    COMB,mdscal,
        !            99: 
        !           100: /*
        !           101:  * monadic
        !           102:  *     op1 v (monadic op)
        !           103:  */
        !           104: 
        !           105:        '~',    NOT,m,
        !           106:        0241,   EPS+1,m,
        !           107: /*
        !           108:  * dyadic
        !           109:  *     op2 op1 v (dyadic op)
        !           110:  */
        !           111: 
        !           112:        'N',    REP,d,
        !           113:        'Y',    TAKE,d,
        !           114:        'U',    DROP,d,
        !           115:        '_',    ASGN,asg,
        !           116:        '{',    ASGN,asg,
        !           117: 
        !           118: /*
        !           119:  * monadic or dyadic
        !           120:  *     op2 op1 v (dyadic op)
        !           121:  *     op1 v+1 (monadic op)
        !           122:  */
        !           123: 
        !           124:        'E',    EPS,md,
        !           125:        'B',    BASE,md,
        !           126:        '?',    DEAL,md,
        !           127:        'R',    DRHO,md,
        !           128:        'I',    DIOT,md,
        !           129:        0211  , ROT0,md,
        !           130:        0212  , DTRN,md,
        !           131:        0213  , DIBM,md,
        !           132:        0214  , DDOM,md,
        !           133:        0242,   DFMT,md,
        !           134: 
        !           135: 
        !           136: 
        !           137: /*
        !           138:  * monadic with optional subscript
        !           139:  *     op1 v (monadic op)
        !           140:  *     op1 sub v+1 (subscripted monadic op)
        !           141:  */
        !           142: 
        !           143:        0215  , GDU,msub,
        !           144:        0216  , GDD,msub,
        !           145:        0227,   GDU,msub,
        !           146:        0230,   GDD,msub,
        !           147: 
        !           148: /*
        !           149:  * dyadic with optional subscript
        !           150:  *     op2 op1 v (dyadic op)
        !           151:  *     op2 op1 sub v+1 (subscripted dyadic op)
        !           152:  */
        !           153: 
        !           154: 
        !           155: /*
        !           156:  * monadic or dyadic with optional subscript
        !           157:  *     op2 op1 v (dyadic op)
        !           158:  *     op1 v+1 (monadic op)
        !           159:  *     op2 op1 sub v+2 (subscripted dyadic op)
        !           160:  *     op1 sub v+3 (subscripted monadic op)
        !           161:  */
        !           162: 
        !           163:        0217  , ROT,mdsub,
        !           164:        ',',    CAT,mdsub,
        !           165: 
        !           166: /*
        !           167:  *     ISP and PSI
        !           168:  */
        !           169:        0232,   PSI,d,
        !           170:        0233,   ISP,d,
        !           171: 
        !           172: /*
        !           173:  *     other, non-function
        !           174:  */
        !           175:        0234,   unk,null,
        !           176:        0235,   unk,null,
        !           177:        0236,   unk,null,
        !           178:        0237,   unk,null,
        !           179:        '@',    unk,null,
        !           180: 
        !           181: /*
        !           182:  * end of list
        !           183:  */
        !           184: 
        !           185:        0
        !           186: };
        !           187: 
        !           188: struct {
        !           189:        char    *ct_name;               /* command name string */
        !           190:        int     ct_ytype;               /* command type */
        !           191:        int     ct_ylval;               /* "yylval" value */
        !           192: } comtab[] = {
        !           193:        "clear",        comnull,        CLEAR,
        !           194:        "continue",     comnull,        CONTIN,
        !           195:        "copy",         comnam,         COPY,
        !           196:        "debug",        comnull,        DEBUG,
        !           197:        "digits",       comexpr,        DIGITS,
        !           198:        "drop",         comlist,        DROPC,
        !           199:        "edit",         comnam,         EDIT,
        !           200:        "editf",        comnam,         EDITF,
        !           201:        "write",        comnam,         WRITE,
        !           202:        "trace",        comnull,        TRACE,
        !           203:        "untrace",      comnull,        UNTRACE,
        !           204:        "erase",        comlist,        ERASE,
        !           205:        "fns",          comnull,        FNS,
        !           206:        "fuzz",         comexpr,        FUZZ,
        !           207:        "lib",          comnull,        LIB,
        !           208:        "load",         comnam,         LOAD,
        !           209:        "off",          comnull,        OFF,
        !           210:        "origin",       comexpr,        ORIGIN,
        !           211:        "read",         comnam,         READ,
        !           212:        "save",         comnam,         SAVE,
        !           213:        "vars",         comnull,        VARS,
        !           214:        "width",        comexpr,        WIDTH,
        !           215:        "vsave",        comnam,         VSAVE,
        !           216:        "script",       comnam,         SCRIPT,
        !           217:        "reset",        comnull,        RESET,
        !           218:        "si",           comnull,        SICOM,
        !           219:        "code",         comnam,         CODE,
        !           220:        "del",          comnam,         DEL,
        !           221:        "shell",        comnull,        SHELL,
        !           222:        "list",         comnam,         LIST,
        !           223:        "prws",         comnull,        PRWS,
        !           224:        0,              unk
        !           225: };
        !           226: 
        !           227: /*
        !           228:  * List of two-character escapes.  Indexed by 02XX entries
        !           229:  * in "tab", above.  Entries must be in lexical order, i.e.
        !           230:  * 'V~' will work, '~V' will not (since overstrikes are
        !           231:  * sorted before they are looked up).  'V~' is 6 down in
        !           232:  * the table, and thus corresponds to 0206,
        !           233:  * which "tab" shows to be NOR.
        !           234:  */
        !           235: int     chartab[] = {
        !           236: 
        !           237:        '-/',           /* 0200 comprs */
        !           238:        '-\\',          /* 0201 expand */
        !           239:        '\'L',          /* 0202 quote quad */
        !           240:        'LO',           /* 0203 circle quad */
        !           241:        'CJ',           /* 0204 lamp */
        !           242:        '^~',           /* 0205 nand */
        !           243:        'V~',           /* 0206 nor */
        !           244:        '*O',           /* 0207 log */
        !           245:        '\'.',          /* 0210 comb/fact ('!') */
        !           246:        '-O',           /* 0211 rotate */
        !           247:        'O\\',          /* 0212 transpose */
        !           248:        'BN',           /* 0213 i beam */
        !           249:        '%L',           /* 0214 domino */
        !           250:        'A|',           /* 0215 grade up */
        !           251:        'V|',           /* 0216 grade dn */
        !           252:        'O|',           /* 0217 rotate */
        !           253:        '<=',           /* 0220 less eq */
        !           254:        '=>',           /* 0221 greater eq */
        !           255:        '/=',           /* 0222 not eq */
        !           256:        'A~',           /* 0223 nand */
        !           257:        'Q~',           /* 0224 nor */
        !           258:        '/\\',          /* 0225 multiply */
        !           259:        '-:',           /* 0226 divide */
        !           260:        'H|',           /* 0227 another grade up */
        !           261:        'G|',           /* 0230 another dgrade dn */
        !           262:        '&~',           /* 0231 yet another nand */
        !           263:        'U|',           /* 0232 PSI */
        !           264:        'C|',           /* 0233 ISP */
        !           265:        'Y~',           /* 0234 bracket 1 */
        !           266:        'U~',           /* 0235 bracket 2 */
        !           267:        '-U',           /* 0236 another bracket 2 */
        !           268:        '-Y',           /* 0237 another bracket 2 */
        !           269:        '//',           /* 0240 alternate divide */
        !           270:        'BJ',           /* 0241 standard execute */
        !           271:        'JN',           /* 0242 format */
        !           272: /*
        !           273:  *     function alpha() in lex.c must be changed whenever this
        !           274:  *     table is updated.  It must know the index of the alternate
        !           275:  *     character set (currently 0243)
        !           276:  */
        !           277:        'Fa',           /* alternate character set */
        !           278:        'Fb',
        !           279:        'Fc',
        !           280:        'Fd',
        !           281:        'Fe',
        !           282:        'Ff',
        !           283:        'Fg',
        !           284:        'Fh',
        !           285:        'Fi',
        !           286:        'Fj',
        !           287:        'Fk',
        !           288:        'Fl',
        !           289:        'Fm',
        !           290:        'Fn',
        !           291:        'Fo',
        !           292:        'Fp',
        !           293:        'Fq',
        !           294:        'Fr',
        !           295:        'Fs',
        !           296:        'Ft',
        !           297:        'Fu',
        !           298:        'Fv',
        !           299:        'Fw',
        !           300:        'Fx',
        !           301:        'Fy',
        !           302:        'Fz',
        !           303:        0
        !           304: };
        !           305: 
        !           306: /*
        !           307:  *     qtab -- table of valid quad functions
        !           308:  *     the format of the qtab is the similar to tab, above
        !           309:  *
        !           310:  */
        !           311: struct qtab{
        !           312:        char    *qname;
        !           313:        int     qtype;
        !           314:        int     rtype;
        !           315: } qtab[] = {
        !           316: 
        !           317:        "lx",   XQUAD,  Quad,
        !           318:        "width", QWID,  Quad,
        !           319:        "run",  QRUN,   m,
        !           320:        "fuzz", QFUZZ,  Quad,
        !           321:        "fork", QFORK,  m,
        !           322:        "wait", QWAIT,  m,
        !           323:        "exec", QEXEC,  m,
        !           324:        "cr",   QCRP,   m,
        !           325:        "fx",   FDEF,   m,
        !           326:        "exit", QEXIT,  m,
        !           327:        "pipe", QPIPE,  m,
        !           328:        "chdir",QCHDIR, m,
        !           329:        "open", QOPEN,  d,
        !           330:        "close", QCLOSE, m,
        !           331:        "read", QREAD,  d,
        !           332:        "write",QWRITE, d,
        !           333:        "creat",QCREAT, d,
        !           334:        "seek", QSEEK,  m,
        !           335:        "kill", QKILL,  d,
        !           336:        "rd",   QRD,    m,
        !           337:        "rm",   QUNLNK, m,
        !           338:        "dup",  QDUP,   m,
        !           339:        "ap",   QAP,    d,
        !           340:        "rline",QRD,    m,
        !           341:        "nc",   QNC,    m,
        !           342:        "sig",  QSIGNL, d,
        !           343:        "float",QFLOAT, m,
        !           344:        "nl"    ,QNL,   m,
        !           345:        0};

unix.superglobalmegacorp.com

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