Annotation of 43BSDTahoe/new/X/ximpv/decode.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1985 University of Alberta *
        !             3:  *
        !             4:  * This file contains two fuctions for parameter decoding;
        !             5:  * "inicodes" is an initialization function and must be called once,
        !             6:  * before "decode" can be used; "decode" is the actual parameter
        !             7:  * decoding function;
        !             8:  */
        !             9: 
        !            10: #ifndef lint
        !            11: static char *rcsid_decode_c = "$Header: decode.c,v 10.2 86/02/01 15:59:43 tony Rel $";
        !            12: #endif
        !            13: 
        !            14: #include "imPdefs.h"
        !            15: #include "imPcodes.h"
        !            16: #define CMDPLEN(code)  (017&cmdpars[code&0177])
        !            17: #define        CMDPMIX(code)   (017&(cmdpars[code&0177]>>4))
        !            18: char   cmdpars[128];
        !            19: 
        !            20: #define        NOPMSK  (15<<4)
        !            21: #define        B       (0<<4)
        !            22: 
        !            23: 
        !            24: 
        !            25: #define        BA      (0<<4)
        !            26: #define        W       (1<<4)
        !            27: #define        BB      (2<<4)
        !            28: #define        BBB     (3<<4)
        !            29: #define        WWW     (4<<4)
        !            30: #define        BBA     (5<<4)
        !            31: #define        WBBBBBA (6<<4)
        !            32: #define        WWWWWWA (7<<4)
        !            33: #define BWA    (8<<4)
        !            34: #define BBBA   (9<<4)
        !            35: #define WA     (10<<4)
        !            36: #define        NOPARS  NOPMSK+0
        !            37: 
        !            38: char   *cmdpmsk[16] = {
        !            39:        "B", "W", "BB", "BBB", "WWW", "BBA", "WBBBBBA", "WWWWWWA",
        !            40:        "BWA", "BBBA", "WA", "", "", "", "", ""};
        !            41: 
        !            42: inicodes ()
        !            43: {      
        !            44:        int     i;
        !            45: 
        !            46:        for (i=0; i<128; i++)
        !            47:                cmdpars[i] = NOPARS;
        !            48: 
        !            49:        cmdpars[ASP0&0177] = NOPARS;
        !            50:        cmdpars[ASP1&0177] = NOPARS;
        !            51: 
        !            52:        cmdpars[ASRULE&0177] = BBB+3;
        !            53:        cmdpars[ABRULE&0177] = WWW+6;
        !            54: 
        !            55:        cmdpars[AM&0177] = BB+2;
        !            56:        cmdpars[AMP&0177]= NOPARS;
        !            57:        cmdpars[AMM&0177]= NOPARS;
        !            58:        cmdpars[AH&0177] = W+2;
        !            59:        cmdpars[AV&0177] = W+2;
        !            60:        cmdpars[AN&0177] = NOPARS;
        !            61: 
        !            62:        cmdpars[ASGLY&0177] = WBBBBBA+7;
        !            63:        cmdpars[ABGLY&0177] = WWWWWWA+12;
        !            64:        cmdpars[ADELG&0177] = W+2;
        !            65:        cmdpars[ADELC&0177] = W+2;
        !            66:        cmdpars[ADELF&0177] = B+1;
        !            67:        cmdpars[AFONT&0177] = BA+1;
        !            68: 
        !            69:        cmdpars[APAGOR&0177] = B+1;
        !            70:        cmdpars[AROTMS&0177] = B+1;
        !            71: 
        !            72:        cmdpars[AF&0177] = B+1;
        !            73:        cmdpars[ABSKIP&0177] = W+2;
        !            74:        cmdpars[AMARGIN&0177] = W+2;
        !            75:        cmdpars[ASETSP&0177] = W+2;
        !            76: 
        !            77:        cmdpars[APUSH&0177] = NOPARS;
        !            78:        cmdpars[APOP&0177] = NOPARS;
        !            79: 
        !            80:        cmdpars[APAGE&0177] = NOPARS;
        !            81:        cmdpars[AEND&0177] = NOPARS;
        !            82: 
        !            83:        cmdpars[AEOF&0177] = NOPARS;
        !            84:        cmdpars[ANOP&0177] = NOPARS;
        !            85: 
        !            86:        cmdpars[ASET_HV_SYS&0177] = B+1;
        !            87:        cmdpars[ASET_ABS_H&0177] = W+2;
        !            88:        cmdpars[ASET_ABS_V&0177] = W+2;
        !            89:        cmdpars[ASET_REL_H&0177] = W+2;
        !            90:        cmdpars[ASET_REL_V&0177] = W+2;
        !            91: 
        !            92:        cmdpars[AMMOVE&0177] = W+2;
        !            93:        cmdpars[ASMOVE&0177] = W+2;
        !            94: 
        !            95:        cmdpars[ACREATE_MAP&0177] = BB+2;
        !            96:        cmdpars[ACREATE_FAMILY&0177] = BB+2;
        !            97:        cmdpars[AFORCE_GLY_DELETE&0177] = NOPARS;
        !            98: 
        !            99:        cmdpars[ASET_PATH&0177] = WA+2;
        !           100:        cmdpars[ASET_TEXTURE&0177] = BB+2;
        !           101:        cmdpars[ASET_PEN&0177] = B+1;
        !           102:        cmdpars[ADRAW_PATH&0177] = B+1;
        !           103:        cmdpars[AFILL_PATH&0177] = B+1;
        !           104:        cmdpars[ABIT_MAP&0177] = BBBA+3;
        !           105:        cmdpars[ASET_MAGNIFICATION&0177] = B+1;
        !           106:        cmdpars[ASET_PUSH_MASK&0177] = W+2;
        !           107: 
        !           108:        cmdpars[ADEFINE_MACRO&0177] = BWA+3;
        !           109:        cmdpars[AEXECUTE_MACRO&0177] = B+1;
        !           110: }
        !           111: 
        !           112: decode(ccode)
        !           113: char   ccode;
        !           114: {      
        !           115:        register parva  *parap;
        !           116:        register char   *sp;
        !           117:        register int    i;
        !           118:        register char   *Cinpcurr;
        !           119:        char    inp[20];
        !           120: 
        !           121:        Cinpcurr = inp;
        !           122:        for (i=CMDPLEN(ccode); i; i--)
        !           123:                *Cinpcurr++ = gc();
        !           124:        Cinpcurr = inp;
        !           125: 
        !           126:        parap = param+1;
        !           127:        sp = cmdpmsk[CMDPMIX(ccode)];
        !           128:        while (*sp!=0) {
        !           129:                if (*sp == 'B') {
        !           130:                        parap->pval2.hival = 0;
        !           131:                        parap->pval2.loval = *Cinpcurr;
        !           132:                        Cinpcurr++;
        !           133:                }
        !           134:                else if (*sp == 'W') {
        !           135:                        parap->pval = ((*Cinpcurr & 0377) << 8)
        !           136:                            | (Cinpcurr[1] & 0377);
        !           137:                        Cinpcurr += 2;
        !           138:                }
        !           139:                else parap->pptr = Cinpcurr;
        !           140:                sp++;
        !           141:                parap++;
        !           142:        }
        !           143: }
        !           144: 
        !           145: getint()
        !           146: {      
        !           147:        register parva  *parap;
        !           148:        register int c = gc();
        !           149: 
        !           150:        parap = param+1;
        !           151:        parap->pval = ((c & 0377) << 8) | (gc() & 0377);
        !           152:        return(V(1));
        !           153: }

unix.superglobalmegacorp.com

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