Update to 2.0.0 tree from current Fremantle build
[opencv] / apps / cvenv / EiC / interpre.c
diff --git a/apps/cvenv/EiC/interpre.c b/apps/cvenv/EiC/interpre.c
deleted file mode 100644 (file)
index 45d42e0..0000000
+++ /dev/null
@@ -1,789 +0,0 @@
-/* interpre.c
- *
- *     (C) Copyright Apr 15 1995, Edmond J. Breen.
- *                ALL RIGHTS RESERVED.
- * This code may be copied for personal, non-profit use only.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <stddef.h>
-#include <string.h>
-#include <time.h>
-#include <limits.h>
-
-#include "MachSet.h"
-#include "global.h"
-#include "xalloc.h"
-#include "typemod.h"
-#include "symbol.h"
-
-#include "error.h"
-
-/* make a safe memory block */
-#define MASSIGN \
-
-#define checkPtr(P,s,i) \
-if(( (char *)P.p + i ) > (char *) P.ep || P.p < P.sp) {\
-     if(( (char *)P.p + i ) > (char *) P.ep) {\
-        EiC_messageDisplay(s ": attempted beyond allowed access area\n"); }\
-     else\
-        EiC_messageDisplay(s ": attempted before allowed access area\n");\
-     raise(SIGSEGV);\
-}
-
-
-#define FMEM         xfree(AR[InSt[p].ext][InSt[p].val.ival].v.p.sp)
-
-#define LDA                     
-
-#define LVAL
-
-#define stoTYPE(x)   AR[InSt[p].ext][InSt[p].val.ival].v.x =STK[ToP].v.x
-#define stoVAL          env->LAR[env->lsp].v = STK[ToP].v;env->lsp++
-#define pushVAL         STK[ToP].v = InSt[p].val;
-#define assignTYPE      env->LAR[env->lsp-1].type = InSt[p].val.p.p
-#define rvalTYPE(x) STK[ToP].v.x = AR[InSt[p].ext][InSt[p].val.ival].v.x
-
-                                                                                  
-#define drefTYPE(x,y)  checkPtr(STK[ToP].v.p,"READ", sizeof(x) );\
-                       STK[ToP].v.y = *(x*)STK[ToP].v.p.p
-
-
-
-#define refTYPE(x,y)   ToP--;\
-                      checkPtr(STK[ToP].v.p,"WRITE", sizeof(x) );\
-                      *(x*)STK[ToP].v.p.p = STK[ToP+1].v.y;\
-                       STK[ToP].v.y = STK[ToP+1].v.y
-
-#define refMEM        ToP--;\
-        memcpy(STK[ToP].v.p.p,STK[ToP+1].v.p.p,InSt[p].val.ival);\
-        STK[ToP].v.p.sp = STK[ToP].v.p.p;\
-        STK[ToP].v.p.ep = (char*)STK[ToP].v.p.p + InSt[p].val.ival;
-
-
-
-#define pushTYPE(x)  STK[ToP].v.x = InSt[p].val.x
-#define  castTYPES(x,y,T)  STK[ToP].v.y = (T)STK[ToP].v.x
-#define negTYPE(x)   STK[ToP].v.x =  -STK[ToP].v.x
-#define addTYPE(x)   ToP--; STK[ToP].v.x += STK[ToP+1].v.x
-#define subTYPE(x)   ToP--; STK[ToP].v.x -= STK[ToP+1].v.x
-#define divTYPE(x)   ToP--; STK[ToP].v.x /= STK[ToP+1].v.x
-#define multTYPE(x)  ToP--;  STK[ToP].v.x *= STK[ToP+1].v.x
-#define modTYPE(x)   ToP--;  STK[ToP].v.x %= STK[ToP+1].v.x
-#define lshtTYPE(x)  ToP--; STK[ToP].v.x <<= STK[ToP+1].v.x
-#define rshtTYPE(x)  ToP--; STK[ToP].v.x >>= STK[ToP+1].v.x
-#define ltTYPE(x)   ToP--; STK[ToP].v.ival = STK[ToP].v.x < STK[ToP+1].v.x
-#define leTYPE(x)   ToP--; STK[ToP].v.ival = STK[ToP].v.x <= STK[ToP+1].v.x
-#define eqTYPE(x)   ToP--; STK[ToP].v.ival = STK[ToP].v.x == STK[ToP+1].v.x
-#define neTYPE(x)   ToP--; STK[ToP].v.ival = STK[ToP].v.x != STK[ToP+1].v.x
-#define gtTYPE(x)   ToP--; STK[ToP].v.ival = STK[ToP].v.x > STK[ToP+1].v.x
-#define geTYPE(x)   ToP--; STK[ToP].v.ival = STK[ToP].v.x >= STK[ToP+1].v.x
-#define lorTYPE(x)  ToP--; STK[ToP].v.ival = STK[ToP].v.x || STK[ToP+1].v.x
-#define landTYPE(x)  STK[ToP].v.ival = STK[ToP].v.x != 0
-
-#define notTYPE(x)  STK[ToP].v.ival = !STK[ToP].v.x
-#define borTYPE(x)  ToP--; STK[ToP].v.x = STK[ToP].v.x | STK[ToP+1].v.x
-#define xorTYPE(x)  ToP--; STK[ToP].v.x = STK[ToP].v.x ^ STK[ToP+1].v.x
-#define andTYPE(x)  ToP--; STK[ToP].v.x = STK[ToP].v.x & STK[ToP+1].v.x
-#define compTYPE(x) STK[ToP].v.x = ~STK[ToP].v.x
-#define jmpfTYPE(x)  if(STK[ToP].v.x == 0) {\
-                          STK[ToP].v.ival = 0;\
-                          p += InSt[p].val.ival-1;\
-                     } else\
-                       STK[ToP].v.ival = 1
-
-#define jmptTYPE(x)  if(STK[ToP].v.x != 0) {\
-                          STK[ToP].v.ival = 1;\
-                          p += InSt[p].val.ival-1;\
-                     } else\
-                       STK[ToP].v.ival = 0
-
-#define  AdjustTop(x)   if(ToP + (x) >= stksz) {\
-                         stksz += stacksize; \
-                         STK =  (STK_t *) xrealloc(STK,sizeof(STK_t)\
-                                                   * stksz); \
-                                         }
-
-extern unsigned int EiC_CurrentLine;
-extern char *EiC_CurrentFile;
-
-extern int EiC_traceON;
-extern int EiC_traceFunc;
-extern int EiC_interActive;
-
-
-
-#define stacksize 200
-typedef AR_t STK_t;
-
-STK_t *AR[3];
-size_t ARGC;
-
-val_t EiC_STaCK_VaLuE;
-
-void EiC_interpret(environ_t * env)
-{
-
-    int p;
-    size_t argc;
-    unsigned int ToP;
-    InsT_t *InSt;
-    STK_t *STK, *hold_AR, *hold_AR1;
-
-    /* EXPLANATION OF REGISTERS
-     *  ToP          stack top;
-     *  p            program counter;
-     *  InSt         pointer to instruction set
-     */
-
-
-
-    typedef struct {
-       int p;
-       unsigned int top;
-       int lsp;
-       long offset;
-       void *file;
-       void *inst;
-       void *ar;
-    } _EiC_jmp_buf;
-
-
-    extern int EiC_TIMER;
-    extern void EiC_showvalue(AR_t *);
-    extern void showcode(InsT_t * inst,int i);
-    int stksz = stacksize;
-    int lastln = -1;
-    eicstack_t names = {0, NULL};
-    val_t v;
-    void *vp;  /* for temporay use only */
-    
-    unsigned int ON;
-    code_t *code;
-    
-    clock_t start, end;
-
-    v.p.p = "::EiC::";
-    STK = (STK_t *) xcalloc(sizeof(STK_t) * stacksize, 1);
-    AR[0] = env->AR;
-    AR[1] = &env->LAR[env->lsp];
-    InSt = env->CODE.inst;
-    ToP = 0;
-    p = 0;
-    
-    STK[ToP].v.dval = 0;
-    ON = 1;
-
-    start = clock();
-    EiC_CurrentFile = codeName(&env->CODE);
-    while (ON) {
-       if(EiC_CurrentLine != InSt[p].line)   /* for error reporting */
-           EiC_CurrentLine = InSt[p].line;   /* purposes only */
-       if(EiC_traceON) {
-           /*printf("%4d:",p); showcode(&InSt[p],p);
-           putchar('\n'); */
-           if(InSt[p].opcode == eiccall) {
-               EiC_eicpush(&names,v);
-               v.p.p = ((symentry_t *) STK[ToP - 1].v.p.p)->id;
-               EiC_formatMessage("\n[%s] ",(char*)v.p.p);
-           }
-           if(!EiC_traceFunc && lastln != InSt[p].line && InSt[p].line) {
-               lastln = InSt[p].line;
-               EiC_formatMessage("%d,",lastln);
-           }
-       }
-       switch (InSt[p].opcode) {
-       case bump:
-             AdjustTop(InSt[p].val.ival);
-           ToP += InSt[p].val.ival;
-           break;
-       case jmpFint: jmpfTYPE(ival); break;
-       case jmpFlng: jmpfTYPE(lval); break;
-       case jmpFdbl: jmpfTYPE(dval); break;
-       case jmpFptr: jmpfTYPE(p.p); break;
-       case jmpFllng: jmpfTYPE(llval); break;
-             
-       case jmpTint: jmptTYPE(ival); break;
-       case jmpTlng: jmptTYPE(lval); break;
-       case jmpTdbl: jmptTYPE(dval); break;
-       case jmpTptr: jmptTYPE(p.p); break;
-       case jmpTllng: jmptTYPE(llval); break;
-
-       case jmpu: p += InSt[p].val.ival - 1; break;
-       case dupval:
-           /* should really adjustTop here !!*/
-           STK[ToP + 1].v = STK[ToP].v;
-           ToP += InSt[p].val.ival;
-           break;
-       case jmptab:
-       {
-             struct {
-                 int n;
-                 val_t *loc;
-             } *tab;
-             int i;
-             tab = InSt[p].val.p.p;
-             for (i = 1; i < tab->n; i += 2)
-                 if (tab->loc[i].ival == STK[ToP].v.ival) {
-                     p += tab->loc[i + 1].ival - 1;
-                     break;
-                 }
-             if (i >= tab->n)
-                 p += tab->loc[0].ival - 1;
-         }
-           break;
-
-
-         /* specific float stuff */
-
-       case dreffloat: drefTYPE(float, dval); break;
-       case reffloat: refTYPE(float, dval); break;
-       case rvalfloat:
-           STK[ToP].v.dval=AR[InSt[p].ext][InSt[p].val.ival].v.fval;
-           break;
-       case stofloat:
-           AR[InSt[p].ext][InSt[p].val.ival].v.fval = (float)STK[ToP].v.dval;
-           break;
-
-           
-         /* specific short stuff */
-       case rvalshort:
-           STK[ToP].v.ival=AR[InSt[p].ext][InSt[p].val.ival].v.sval;
-           break;
-       case rvalushort:
-           STK[ToP].v.ival=AR[InSt[p].ext][InSt[p].val.ival].v.usval;
-           break;
-       case drefushort: drefTYPE(unsigned short, ival); break; 
-       case drefshort: drefTYPE(short, ival); break;
-       case refshort: refTYPE(short, ival); break;
-       case stoshort:
-           AR[InSt[p].ext][InSt[p].val.ival].v.sval = STK[ToP].v.ival;
-           break;
-
-         /* specific char stuff */ 
-       case rvalchar:
-           STK[ToP].v.ival=AR[InSt[p].ext][InSt[p].val.ival].v.cval;
-           break;
-       case rvaluchar:
-           STK[ToP].v.ival=AR[InSt[p].ext][InSt[p].val.ival].v.ucval;
-           break;
-       case stochar:
-           AR[InSt[p].ext][InSt[p].val.ival].v.cval = STK[ToP].v.ival;
-           break;
-       case drefuchar: drefTYPE(unsigned char, ival); break;
-       case drefchar: drefTYPE(char, ival); break;
-       case refchar: refTYPE(char, ival); break;
-       case neguchar: STK[ToP].v.uival = 256 - STK[ToP].v.uival; break;
-
-         /* specific int stuff */
-       case incint: STK[ToP].v.ival += InSt[p].val.ival; break;
-       case decint: STK[ToP].v.ival -= InSt[p].val.ival; break;
-       case drefint: drefTYPE(int, ival); break;
-       case refint: refTYPE(int, ival); break;
-       case stoint: stoTYPE(ival); break;
-       case rvalint: rvalTYPE(ival); break;
-       case pushint: pushTYPE(ival); break;
-       case negint: negTYPE(ival); break;
-       case addint: addTYPE(ival); break;
-       case subint: subTYPE(ival); break;
-       case divint: divTYPE(ival); break;
-       case multint: multTYPE(ival); break;
-       case modint: modTYPE(ival); break;
-       case lshtint: lshtTYPE(ival); break;
-       case rshtint: rshtTYPE(ival); break;
-       case ltint: ltTYPE(ival); break;
-       case leint: leTYPE(ival); break;
-       case eqint: eqTYPE(ival); break;
-       case neint: neTYPE(ival); break;
-       case gtint: gtTYPE(ival); break;
-       case geint: geTYPE(ival); break;
-       case lorint: lorTYPE(ival); break;
-       case landint: landTYPE(ival); break;
-       case notint: notTYPE(ival); break;
-       case borint: borTYPE(ival); break;
-       case xorint: xorTYPE(ival); break;
-       case andint: andTYPE(ival); break;
-       case compint: compTYPE(ival); break;
-       case int2double: castTYPES(ival, dval, double); break;
-       case int2ptr: castTYPES(ival, p.p, void *); break;
-       case int2long: castTYPES(ival, lval, long); break;
-       case int2llong: castTYPES(ival, llval, eic_llong); break;
-       case int2uchar: castTYPES(ival, lval, unsigned char); break;
-       case int2ushort: castTYPES(ival, lval, unsigned short); break;
-           
-         /* unsigned int stuff */
-       case incuint: STK[ToP].v.uival += InSt[p].val.uival; break;
-       case decuint: STK[ToP].v.uival -= InSt[p].val.uival; break;
-       case drefuint: drefTYPE(unsigned, uival); break;
-       case refuint: refTYPE(unsigned, uival); break;
-       case stouint: stoTYPE(uival); break;
-       case rvaluint: rvalTYPE(uival); break;
-       case pushuint: pushTYPE(uival); break;
-       case neguint: negTYPE(uival); break;
-       case adduint: addTYPE(uival); break;
-       case subuint: subTYPE(uival); break;
-       case divuint: divTYPE(uival); break;
-       case multuint: multTYPE(uival); break;
-       case moduint: modTYPE(uival); break;
-       case lshtuint: lshtTYPE(uival); break;
-       case rshtuint: rshtTYPE(uival); break;
-       case ltuint: ltTYPE(uival); break;
-       case leuint: leTYPE(uival); break;
-       case equint: eqTYPE(uival); break;
-       case neuint: neTYPE(uival); break;
-       case gtuint: gtTYPE(uival); break;
-       case geuint: geTYPE(uival); break;
-       case loruint: lorTYPE(uival); break;
-
-       case notuint: notTYPE(uival); break;
-       case boruint: borTYPE(uival); break;
-       case xoruint: xorTYPE(uival); break;
-       case anduint: andTYPE(uival); break;
-       case compuint: compTYPE(uival); break;
-       case uint2double: castTYPES(uival, dval, double); break;
-       case uint2ptr: castTYPES(uival, p.p, void *); break;
-       case uint2long: castTYPES(uival, lval, long); break;
-       case uint2llong: castTYPES(uival, llval, eic_llong); break;
-
-         /* specific long stuff */
-       case inclong: STK[ToP].v.lval += InSt[p].val.ival; break;
-       case declong: STK[ToP].v.lval -= InSt[p].val.ival; break;
-       case dreflong: drefTYPE(long, lval); break;
-       case reflong: refTYPE(long, lval); break;
-       case stolong: stoTYPE(lval); break;
-       case rvallong: rvalTYPE(lval); break;
-       case pushlong: pushTYPE(lval); break;
-       case neglong: negTYPE(lval); break;
-       case addlong: addTYPE(lval); break;
-       case sublong: subTYPE(lval); break;
-       case divlong: divTYPE(lval); break;
-       case multlong: multTYPE(lval); break;
-       case modlong: modTYPE(lval); break;
-       case lshtlong: lshtTYPE(lval); break;
-       case rshtlong: rshtTYPE(lval); break;
-       case ltlong: ltTYPE(lval); break;
-       case lelong: leTYPE(lval); break;
-       case eqlong: eqTYPE(lval); break;
-       case nelong: neTYPE(lval); break;
-       case gtlong: gtTYPE(lval); break;
-       case gelong: geTYPE(lval); break;
-       case lorlong: lorTYPE(lval); break;
-       case landlong: landTYPE(lval); break;
-       case notlong: notTYPE(lval); break;
-       case borlong: borTYPE(lval); break;
-       case xorlong: xorTYPE(lval); break;
-       case andlong: andTYPE(lval); break;
-       case complong: compTYPE(lval); break;
-       case long2double: castTYPES(lval, dval, double); break;
-       case long2ptr: castTYPES(lval, p.p, void *); break;
-       case long2llong: castTYPES(lval, llval, eic_llong); break;
-       case long2int: castTYPES(lval, ival, int); break;
-
-           /* unsigned long stuff */
-       case inculong: STK[ToP].v.ulval += InSt[p].val.ival; break;
-       case deculong: STK[ToP].v.ulval -= InSt[p].val.ival; break;
-       case drefulong: drefTYPE(unsigned long, ulval); break;
-       case refulong: refTYPE(unsigned long, ulval); break;
-       case stoulong: stoTYPE(ulval); break;
-       case rvalulong: rvalTYPE(ulval); break;
-       case pushulong: pushTYPE(ulval); break;
-       case negulong: negTYPE(ulval); break;
-       case addulong: addTYPE(ulval); break;
-       case subulong: subTYPE(ulval); break;
-       case divulong: divTYPE(ulval); break;
-       case multulong: multTYPE(ulval); break;
-       case modulong: modTYPE(ulval); break;
-       case lshtulong: lshtTYPE(ulval); break;
-       case rshtulong: rshtTYPE(ulval); break;
-       case ltulong: ltTYPE(ulval); break;
-       case leulong: leTYPE(ulval); break;
-       case equlong: eqTYPE(ulval); break;
-       case neulong: neTYPE(ulval); break;
-       case gtulong: gtTYPE(ulval); break;
-       case geulong: geTYPE(ulval); break;
-       case lorulong: lorTYPE(ulval); break;
-
-       case notulong: notTYPE(ulval); break;
-       case borulong: borTYPE(ulval); break;
-       case xorulong: xorTYPE(ulval); break;
-       case andulong: andTYPE(ulval); break;
-       case compulong: compTYPE(ulval); break;
-       case ulong2double: castTYPES(ulval, dval, double); break;
-       case ulong2ptr: castTYPES(ulval, p.p, void *); break;
-       case ulong2int: castTYPES(ulval, ival, int); break;
-       case ulong2llong: castTYPES(ulval, llval, eic_llong); break;
-
-
-
-         /* specific long long stuff */
-       case incllong: STK[ToP].v.llval += InSt[p].val.ival; break;
-       case decllong: STK[ToP].v.llval -= InSt[p].val.ival; break;
-       case drefllong: drefTYPE(eic_llong, llval); break;
-       case refllong: refTYPE(eic_llong, llval); break;
-       case stollong: stoTYPE(llval); break;
-       case rvalllong: rvalTYPE(llval); break;
-       case pushllong: pushTYPE(llval); break;
-       case negllong: negTYPE(llval); break;
-       case addllong: addTYPE(llval); break;
-       case subllong: subTYPE(llval); break;
-       case divllong: divTYPE(llval); break;
-       case multllong: multTYPE(llval); break;
-       case modllong: modTYPE(llval); break;
-       case lshtllong: lshtTYPE(llval); break;
-       case rshtllong: rshtTYPE(llval); break;
-       case ltllong: ltTYPE(llval); break;
-       case lellong: leTYPE(llval); break;
-       case eqllong: eqTYPE(llval); break;
-       case nellong: neTYPE(llval); break;
-       case gtllong: gtTYPE(llval); break;
-       case gellong: geTYPE(llval); break;
-       case lorllong: lorTYPE(llval); break;
-       case landllong: landTYPE(llval); break;
-       case notllong: notTYPE(llval); break;
-       case borllong: borTYPE(llval); break;
-       case xorllong: xorTYPE(llval); break;
-       case andllong: andTYPE(llval); break;
-       case compllong: compTYPE(llval); break;
-       case llong2double: castTYPES(llval, dval, double); break;
-       case llong2ptr: castTYPES(llval, p.p, void *); break;
-       case llong2int: castTYPES(llval, ival, int); break;
-       case llong2long: castTYPES(llval, lval, long); break;
-
-
-           /* specific double stuff */
-       case incdouble:STK[ToP].v.dval += InSt[p].val.ival; break;
-       case decdouble:STK[ToP].v.dval -= InSt[p].val.ival; break;
-       case drefdouble: drefTYPE(double, dval); break;
-       case refdouble: refTYPE(double, dval); break;
-       case stodouble: stoTYPE(dval); break;
-       case rvaldouble: rvalTYPE(dval); break;
-       case pushdouble: pushTYPE(dval); break;
-       case negdouble: negTYPE(dval); break;
-       case adddouble: addTYPE(dval); break;
-       case subdouble: subTYPE(dval); break;
-       case divdouble: divTYPE(dval); break;
-       case multdouble: multTYPE(dval); break;
-       case ltdouble: ltTYPE(dval); break;
-       case ledouble: leTYPE(dval); break;
-       case eqdouble: eqTYPE(dval); break;
-       case nedouble: neTYPE(dval); break;
-       case gtdouble: gtTYPE(dval); break;
-       case gedouble: geTYPE(dval); break;
-       case lordouble: lorTYPE(dval); break;
-       case landdouble: landTYPE(dval); break;
-       case notdouble: notTYPE(dval); break;
-
-       case double2int: castTYPES(dval, uival, unsigned int); break;
-       case double2long: castTYPES(dval, ulval, unsigned long); break;
-       case double2llong: castTYPES(dval, llval, eic_llong); break;
-       case double2float: castTYPES(dval, fval, float); break;
-
-
-         /*specific pointer stuff */
-       case incptr: STK[ToP].v.p.p = (char *) STK[ToP].v.p.p +
-                        InSt[p].val.ival; break;
-       case decptr: STK[ToP].v.p.p = (char *) STK[ToP].v.p.p -
-                        InSt[p].val.ival; break;
-       case lda:
-#if 0
-           STK[ToP].v.p = AR[1][InSt[p].val.ival].v.p;
-           STK[ToP].v.p.p = (char*)STK[ToP].v.p.sp + InSt[p].ext;
-           STK[ToP].v.p.sp = STK[ToP].v.p.p;
-#else
-
-           {
-               ptr_t *q = &AR[1][InSt[p].val.ival].v.p;
-               ptr_t *a = &STK[ToP].v.p;
-               
-               a->p   = a->sp = (char*)q->sp + InSt[p].ext;
-               a->ep  = q->ep;
-
-               if(vp) { /* patch previous lda assignment */
-                   ((ptr_t*)vp)->ep = (char*)a->p;
-               }
-               /* Take advantage of the fact that the next InSt
-                * has the location of where `a' is to be stored.
-                */
-               vp = &AR[1][InSt[p+1].val.ival].v.p;
-               
-           }
-           
-#endif
-           
-           break;
-       case ixa:
-           ToP--;
-           STK[ToP].v.p.p = (char *) STK[ToP].v.p.p + STK[ToP+1].v.ival*InSt[p].val.ival;
-           break;
-       case addptr2int: ToP--;
-           STK[ToP].v.p.p = (char *) STK[ToP].v.p.p + STK[ToP + 1].v.ival; break;
-       case addint2ptr: ToP--;
-           STK[ToP].v.p.p = STK[ToP].v.ival
-               + (char *) STK[ToP+1].v.p.p; break;
-       case subptrint: ToP--;
-           STK[ToP].v.p.p = (char *) STK[ToP].v.p.p - STK[ToP + 1].v.ival; break;
-       case subptr:
-           ToP--;
-           STK[ToP].v.ival =
-               (int) ((long) STK[ToP].v.p.p - (long) STK[ToP+1].v.p.p);
-           break;
-
-       case drefptr:   drefTYPE(ptr_t, p); break;
-
-       case drefuptr:  drefTYPE(void**,p.p);
-                       STK[ToP].v.p.sp = 0;
-                       STK[ToP].v.p.ep = (void *) ULONG_MAX;
-                       break;
-
-       case refptr: refTYPE(ptr_t, p); break;
-       case refuptr: refTYPE(void *, p.p); break;
-
-       case stoptr: stoTYPE(p); break;
-       case stouptr: stoTYPE(p.p); break;
-           
-       case rvalptr: rvalTYPE(p); break;
-       case rvaluptr: rvalTYPE(p);
-         STK[ToP].v.p.sp = 0;
-         STK[ToP].v.p.ep = (void*) ULONG_MAX; /* set to a very high value */
-           break;
-
-       case pushptr: pushTYPE(p); break;
-       case ltptr: ltTYPE(p.p); break;
-       case leptr: leTYPE(p.p); break;
-       case eqptr: eqTYPE(p.p); break;
-       case neptr: neTYPE(p.p); break;
-       case gtptr: gtTYPE(p.p); break;
-       case geptr: geTYPE(p.p); break;
-       case lorptr: lorTYPE(p.p); break;
-       case landptr: landTYPE(p.p); break;
-       case notptr: notTYPE(p.p); break;
-       case ptr2int: castTYPES(p.p, ival, int); break;
-       case ptr2long: castTYPES(p.p, lval, long); break;
-           
-       case lval: /* on the fly safe pointer */
-           STK[ToP].v.p.p = &AR[InSt[p].ext][InSt[p].val.ival].v;
-           STK[ToP].v.p.ep = (char *) STK[ToP].v.p.p + (size_t) 
-               InSt[p].val.p.ep;
-           STK[ToP].v.p.sp = STK[ToP].v.p.p;
-           break;
-       case assigntype: assignTYPE; break;
-       case stoval:
-           switch(InSt[p].ext) {
-             case t_char:
-             case t_uchar: STK[ToP].v.cval = STK[ToP].v.ival; break;
-             case t_short:
-             case t_ushort: STK[ToP].v.sval = STK[ToP].v.ival; break;
-             case t_float:  STK[ToP].v.fval = STK[ToP].v.dval;
-/*           case t_struct:
-             case t_union:
-               printf("stoVa1l with struct/union\n");
-*/
-           }
-
-           stoVAL; break;
-       case pushval: pushVAL; break;
-           
-       case eiccall:
-
-           if(!((symentry_t*)STK[ToP - 1].v.p.p)->tag) {
-               AdjustTop(6);
-               STK[ToP + 1].v.ival = p;
-               STK[ToP + 1].type = (void*)EiC_CurrentFile; /* save file */
-               STK[ToP + 2].v.p.p = InSt;
-               STK[ToP + 3].v.lval = AR[1] - env->LAR;
-               STK[ToP + 4].v.ival = env->lsp - STK[ToP].v.ival;
-           
-               AR[1] = &env->LAR[env->lsp] /* - STK[ToP].v.ival] */ ;
-               code = ! STK[ToP - 1].v.p.p ? NULL :
-                   AR[0][((symentry_t *)
-                          STK[ToP - 1].v.p.p)->val.ival].v.p.p;
-
-               if (code == NULL) {
-                   if(STK[ToP - 1].v.p.p) {
-                       EiC_formatMessage("Link error: undefined function :-> %s\n",
-                                         ((symentry_t *) STK[ToP - 1].v.p.p)->id);
-                   } else
-                       EiC_formatMessage("Link error: possible usage of a function pointer"
-                                         " before assignment.\n");
-                   env->lsp = 0;
-                   raise(SIGINT);
-               }
-           
-               EiC_CurrentFile = codeName(code);
-
-               InSt = code->inst;
-               p = -1;
-               ToP += 5;
-               if(EiC_traceON)
-                   lastln = -1;
-               break;
-           }
-
-       case call: 
-         argc = ARGC;
-         hold_AR = AR[2];
-         hold_AR1 = AR[1];
-         ARGC = STK[ToP].v.ival;
-         
-          /*AR[2] = &env->LAR[env->lsp - ARGC];*/
-           AR[2] = &env->LAR[env->lsp];
-           if(InSt[p].ext)
-               STK[ToP - 1].v = STK[ToP - 1].v.vfunc ();
-           else
-               STK[ToP - 1].v.vfunc();
-           env->lsp -= STK[ToP].v.ival;
-           ARGC = argc;
-           AR[2] = hold_AR;
-           AR[1] = hold_AR1;
-           ToP--; break;
-
-       case eicreturn:
-           ToP -= 6;           /* over write code pointer */
-
-           p = STK[ToP + 2].v.ival;
-           EiC_CurrentFile = (char*)STK[ToP+2].type;
-           
-           InSt = STK[ToP + 3].v.p.p;
-       
-           env->lsp = STK[ToP + 5].v.ival;
-           STK[ToP].v = STK[ToP + 6].v;
-
-           AR[1] = &env->LAR[STK[ToP + 4].v.ival];
-           if(EiC_traceON) {
-               EiC_eicpop(&names,&v);
-               EiC_formatMessage("\n[%s] ", (char*)v.p.p);
-               lastln = -1;
-           }
-           break;
-
-
-#if 1
-       case __eiclongjmp:
-       {
-
-           _EiC_jmp_buf * reg;
-
-           reg = (_EiC_jmp_buf *) ((char*)STK[ToP].v.p.p - STK[ToP+1].v.ival);
-
-           p = reg->p;
-           EiC_CurrentFile = reg->file;
-           InSt = reg->inst;
-           env->lsp = reg->lsp;
-           AR[1] = &env->LAR[reg->offset]; /*reg->ar; */
-
-           if(STK[ToP+1].v.ival == 0)
-                STK[reg->top].v.ival = 1;
-           else
-                STK[reg->top].v.ival = STK[ToP+1].v.ival;
-
-           ToP = reg->top;
-
-
-       }
-
-       break;
-           
-       case __eicsetjmp:
-       {
-
-           _EiC_jmp_buf * reg;
-
-           reg = (_EiC_jmp_buf *) STK[ToP].v.p.p;
-
-           reg->p = p;
-           reg->file = (void*)EiC_CurrentFile; /* save file */
-           reg->inst = InSt;
-           reg->lsp =  env->lsp;
-           reg->offset = AR[1] - env->LAR;
-           reg->ar = AR[1];
-           reg->top = ToP;
-
-           STK[ToP].v.ival = 0;
-
-       }
-
-       break;
-#endif
-
-        case massign:   
-           {
-               val_t *v = &AR[InSt[p].ext][InSt[p].val.ival].v;
-               v->p.sp = (void*)xcalloc(STK[ToP].v.ival,1);
-               v->p.ep = (char*)v->p.sp + STK[ToP].v.ival;
-               vp = NULL;
-               
-           }
-           break;
-       case fmem: FMEM; break;
-       case refmem: refMEM; break;
-       case minit:
-           memcpy(STK[ToP].v.p.p,InSt[p].val.p.p, InSt[p].ext); 
-           break;
-       case reducear:
-           env->lsp -= InSt[p].val.ival;
-           break;
-       case checkar:{
-             size_t d;
-             ptrdiff_t d2;
-             d = env->LARsize - env->lsp;
-             if (d < InSt[p].val.ival) {
-                 /* printf("expanding AR %d\n",env->LARsize);*/
-                 d2 = (AR[1] - env->LAR);
-                 env->LARsize += InSt[p].val.ival - d;
-                 env->LAR =
-                     (AR_t *) xrealloc(env->LAR,
-                                       env->LARsize * sizeof(AR_t));
-                 AR[1] = &env->LAR[(size_t) d2];
-             }
-             if (InSt[p].ext == 0) {
-                 env->lsp += InSt[p].val.ival;
-                 /*AR[1][0].v.p.p = NULL;*/
-             }
-         }
-           break;
-       case halt: STK[ToP].type = InSt[p].val.p.p;
-             ON = 0;  EiC_STaCK_VaLuE = STK[ToP].v; break;
-
-       case empty: break;
-           
-       }
-       p++;
-    }
-
-
-    end = clock();
-    if(EiC_traceON)
-       EiC_messageDisplay("\n");
-    
-    if(EiC_interActive)
-       EiC_showvalue(&STK[ToP]);
-    
-    if (EiC_TIMER) {
-       fprintf(stdout," <time taken>: %g\n",
-               (end-start)/(float)CLOCKS_PER_SEC);
-    }
-    
-    xfree(STK);
-}
-
-
-
-
-   
-    
-
-
-
-
-
-
-