home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 13 / MA_Cover_13.bin / source / c / apl / aw.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-11-23  |  3.9 KB  |  259 lines

  1. #include "apl.h"
  2.  
  3. char *opname[] = {
  4.  
  5.     "eol",        /* 0 */
  6.     "add",        /* 1 */
  7.     "plus",        /* 2 */
  8.     "sub",        /* 3 */
  9.     "minus",    /* 4 */
  10.     "mul",        /* 5 */
  11.     "sgn",        /* 6 */
  12.     "div",        /* 7 */
  13.     "recip",    /* 8 */
  14.     "mod",        /* 9 */
  15.     "abs",        /* 10 */
  16.     "min",        /* 11 */
  17.     "floor",    /* 12 */
  18.     "max",        /* 13 */
  19.     "ceil",        /* 14 */
  20.     "pwr",        /* 15 */
  21.     "exp",        /* 16 */
  22.     "log",        /* 17 */
  23.     "loge",        /* 18 */
  24.     "cir",        /* 19 */
  25.     "pi",        /* 20 */
  26.     "comb",        /* 21 */
  27.     "fac",        /* 22 */
  28.     "deal",        /* 23 */
  29.     "rand",        /* 24 */
  30.     "drho",        /* 25 */
  31.     "mrho",        /* 26 */
  32.     "diot",        /* 27 */
  33.     "miot",        /* 28 */
  34.     "rot0",        /* 29 */
  35.     "rev0",        /* 30 */
  36.     "dtrn",        /* 31 */
  37.     "mtrn",        /* 32 */
  38.     "dibm",        /* 33 */
  39.     "mibm",        /* 34 */
  40.     "gdu",        /* 35 */
  41.     "gduk",        /* 36 */
  42.     "gdd",        /* 37 */
  43.     "gddk",        /* 38 */
  44.     "exd",        /* 39 */
  45.     "scan",        /* 40 */
  46.     "exdk",        /* 41 */
  47.     "scank",    /* 42 */
  48.     "iprod",    /* 43 */
  49.     "oprod",    /* 44 */
  50.     "quad",        /* 45 */
  51.     "qquad",    /* 46 */
  52.     "br0",        /* 47 */
  53.     "br",        /* 48 */
  54.     "ddom",        /* 49 */
  55.     "mdom",        /* 50 */
  56.     "com",        /* 51 */
  57.     "red",        /* 52 */
  58.     "comk",        /* 53 */
  59.     "redk",        /* 54 */
  60.     "rot",        /* 55 */
  61.     "rev",        /* 56 */
  62.     "rotk",        /* 57 */
  63.     "revk",        /* 58 */
  64.     "cat",        /* 59 */
  65.     "rav",        /* 60 */
  66.     "catk",        /* 61 */
  67.     "ravk",        /* 62 */
  68.     "print",    /* 63 */
  69.     "quot",        /* 64 */
  70.     "elid",        /* 65 */
  71.     "cquad",    /* 66 */
  72.     "comnt",    /* 67 */
  73.     "index",    /* 68 */
  74.     "hprint",    /* 69 */
  75.     0,            /* 70 */
  76.     "lt",        /* 71 */
  77.     "le",        /* 72 */
  78.     "gt",        /* 73 */
  79.     "ge",        /* 74 */
  80.     "eq",        /* 75 */
  81.     "ne",        /* 76 */
  82.     "and",        /* 77 */
  83.     "or",        /* 78 */
  84.     "nand",        /* 79 */
  85.     "nor",        /* 80 */
  86.     "not",        /* 81 */
  87.     "eps",        /* 82 */
  88.     "meps",        /* 83 */
  89.     "rep",        /* 84 */
  90.     "take",        /* 85 */
  91.     "drop",        /* 86 */
  92.     "exd0",        /* 87 */
  93.     "asgn",        /* 88 */
  94.     "immed",    /* 89 */
  95.     "name",        /* 90 */
  96.     "const",    /* 91 */
  97.     "fun",        /* 92 */
  98.     "arg1",        /* 93 */
  99.     "arg2",        /* 94 */
  100.     "auto",        /* 95 */
  101.     "rest",        /* 96 */
  102.     "com0",        /* 97 */
  103.     "red0",        /* 98 */
  104.     "exd0",        /* 99 */
  105.     "scan0",    /*100 */
  106.     "base",        /*101 */
  107.     "format",    /*102 */
  108.     "label",    /*103 */
  109.     "psi",        /*104 */
  110.     "psi1",        /*105 */
  111.     "psi2",        /*106 */
  112.     "isp",        /*107 */
  113.     "isp1",        /*108 */
  114.     "isp2",        /*109 */
  115.     "Lwidth",    /*110 */
  116.     "Lfuzz",    /*111 */
  117.     "Lrun",        /*112 */
  118.     "Lfork",    /*113 */
  119.     "Lwait",    /*114 */
  120.     "Lexec",    /*115 */
  121.     "Lfx",        /*116 */
  122.     "Lexit",    /*117 */
  123.     "Lpipe",    /*118 */
  124.     "Lchdir",    /*119 */
  125.     "Lopen",    /*120 */
  126.     "Lclose",    /*121 */
  127.     "Lread",    /*122 */
  128.     "Lwrite",    /*123 */
  129.     "Lcreat",    /*124 */
  130.     "Lseek",    /*125 */
  131.     "Lrm",        /*126 */
  132.     "Lrd",        /*127 */
  133.     "Ldup",        /*128 */
  134.     "Lap",        /*129 */
  135.     "Lkill",    /*130 */
  136.     "Lcr",        /*131 */
  137.     "dfmt",        /*132 */
  138.     "mfmt",        /*133 */
  139.     "Lnc",        /*134 */
  140.     "nilret",    /*135 */
  141.     "Llx",        /*136 */
  142.     "ibr",        /*137 */
  143.     "ibr0",        /*138 */
  144.     "rval",        /*139 */
  145.     "Lsig",        /*140 */
  146.     "Lfloat",    /*141 */
  147.     "Lnl",        /*142 */
  148. };
  149.  
  150. dump(cp, flag)
  151. char *cp;
  152. {
  153.     char *s, *t;
  154.     int i;
  155.  
  156.     s = cp;
  157.     if(flag) printf("[ ");
  158.  
  159. loop:
  160.     putchar(' ');
  161.     if(column > 50) {
  162.         if(flag) printf(" ]\n[ ");
  163.         else putchar('\n');
  164.     }
  165.     i = *s++;
  166.     if(i != EOF) i &= 0377;
  167.     if(i >= 0 && i <= 142 && opname[i]) {
  168.         t = opname[i];
  169.         while(*t) putchar(*t++);
  170.     }
  171.     else if(i != EOF) printf("%d ", i);
  172.     switch(i) {
  173.  
  174.     case EOL:
  175.         if(*s != EOL) break;
  176.     case EOF:
  177.         printf(".");
  178.         if(flag) printf(" ].");
  179.         putchar('\n');
  180.         return;
  181.  
  182.     case QUOT:
  183.         i = *s++;
  184.         s += i;
  185.         break;
  186.  
  187.     case CONST:
  188.         i = *s++;
  189.         s += i*SDAT;
  190.         break;
  191.  
  192.     case NAME:
  193.     case FUN:
  194.     case ARG1:
  195.     case ARG2:
  196.     case AUTO:
  197.     case REST:
  198.     case RVAL:
  199.         s += copy(IN, s, &cp, 1);
  200.         putchar('-');
  201.         t = ((struct nlist *)cp)->namep;
  202.         while(*t) putchar(*t++);
  203.         break;
  204.  
  205.     case INDEX:
  206.     case IMMED:
  207.         s++;
  208.         break;
  209.     }
  210.     goto loop;
  211. }
  212.  
  213.  
  214. lastCode(s)
  215. char *s;
  216. {
  217.     int code, j, last;
  218.  
  219.     code = 0;
  220.     last = 0;
  221. loop:
  222.     if (code && code != EOL && code != EOF) last = code;
  223.     code = *s++;
  224.     if(code != EOF) code &= 0377;
  225.     switch(code) {
  226.  
  227.         case EOL:
  228.         if(*s != EOL) break;
  229.         case EOF:
  230.         return last;
  231.  
  232.         case QUOT:
  233.         j = *s++;
  234.         s += j;
  235.         break;
  236.  
  237.         case CONST:
  238.         j = *s++;
  239.         s += j*SDAT;
  240.         break;
  241.  
  242.         case NAME:
  243.         case FUN:
  244.         case ARG1:
  245.         case ARG2:
  246.         case AUTO:
  247.         case REST:
  248.         case RVAL:
  249.         s += SINT;
  250.         break;
  251.  
  252.         case INDEX:
  253.         case IMMED:
  254.         s++;
  255.         break;
  256.     }
  257.     goto loop;
  258. }
  259.