Annotation of 43BSD/contrib/X/ximpv/decode.c, revision 1.1.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.