|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.