Update to 2.0.0 tree from current Fremantle build
[opencv] / apps / cvenv / EiC / eicmod.c
diff --git a/apps/cvenv/EiC/eicmod.c b/apps/cvenv/EiC/eicmod.c
deleted file mode 100644 (file)
index 3cf1e5e..0000000
+++ /dev/null
@@ -1,1548 +0,0 @@
-/* eicmod.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 <string.h>
-#include <ctype.h>
-
-#include "typemod.h"
-#include "global.h"
-#include "lexer.h"
-
-#include "func.h"
-#include "xalloc.h"
-#include "typesets.h"
-#include "preproc.h"
-#include "cdecl.h"
-#include "error.h"
-#include "emitter.h"
-#include "symbol.h"
-
-extern char EiC_LEXEM[];
-extern token_t *token;
-
-int EiC_listcodeON = 0;
-int EiC_lineNums = 0;
-int EiC_interpON = 1;
-int EiC_TIMER = 0;
-int EiC_SHOWLINE = 0;
-int EiC_memdumpON = 0;
-int EiC_memtraceON = 0;
-int EiC_traceON = 0;
-int EiC_traceFunc = 0;
-int EiC_verboseON = 0;
-int interfaceON=0;
-int EiC_interActive=1;
-int EiC_showIncludes = 0;
-int adjustNum = 0;
-
-
-static void outputval(int obj, void *v)
-{
-    switch (obj) {
-      case t_char:    fprintf(stdout,"%d",*(char *) v);break;
-      case t_uchar:   fprintf(stdout,"%d",*(unsigned char *) v); break;
-      case t_short:   fprintf(stdout,"%d",*(short *) v); break;
-      case t_ushort:  fprintf(stdout,"%d",*(unsigned short*) v); break;
-      case t_int:     fprintf(stdout,"%d",*(int *) v); break;
-      case t_uint:    fprintf(stdout,"%u",*(unsigned *) v); break;
-      case t_long:    fprintf(stdout,"%ld",*(long *) v); break;
-      case t_ulong:   fprintf(stdout,"%lu",*(long *) v); break;
-
-#ifndef NO_LONG_LONG
-
-      case t_llong:   fprintf(stdout,"%Ld",*(eic_llong *) v); break;
-#else
-      case t_llong:   fprintf(stdout,"%ld",*(eic_llong *) v); break;
-#endif 
-
-      case t_float:   fprintf(stdout,"%.9g",*(float *) v); break;
-      case t_double:  fprintf(stdout,"%.9g",*(double *) v); break;
-      case t_lval:   
-      case t_pointer: fprintf(stdout,"%p",(void*)*(long *) v); break;
-      case t_void:    fprintf(stdout,"(void)"); break;
-      case t_enum:    fprintf(stdout,"(enumeration)"); break; 
-      case STR:       fprintf(stdout,"%.100s",*(char **) v); break;
-      default:        fprintf(stdout,"Unknown type"); break;
-    }
-}
-
-
-static void showstruct(AR_t * arg)
-{
-    int i, t;
-    struct_t *S;
-    char *D;
-    S = (struct_t *) EiC_getInf(arg->type);
-    D = arg->v.p.p;
-    fputc('{', stdout);
-    if (!D)
-       fputs("(null struct) ", stdout);
-    else
-       for (i = 0; i < S->n; i++) {
-           switch ((t = EiC_gettype(S->type[i]))) {
-             case t_array:
-               fputs("Array", stdout);
-               break;
-             case t_union:
-               fputs("Union",stdout);
-               break;
-             case t_struct:
-               fputs("Struct", stdout);
-               break;
-             default:
-               outputval(t, &D[S->offset[i]]);
-               break;
-           }
-           fputc(',', stdout);
-       }
-    fputs("\b}", stdout);
-}
-
-void EiC_showvalue(AR_t * arg)
-{
-    int t;
-
-    if(!EiC_interActive || !arg->type)
-       return ;
-
-    fputc('\t', stdout);
-
-    t = EiC_gettype(arg->type);
-
-    if(isconst(arg->type) && t != t_pointer) {
-       outputval(t, &arg->v);
-       fputc('\n', stdout);
-       return;
-    }
-       
-    switch ((t = EiC_gettype(arg->type))) {
-      case t_union:  fputs("(Union)",stdout); break;
-      case t_struct: showstruct(arg); break;
-      case t_char:   case t_uchar:  case t_short:  
-      case t_ushort: outputval(t_int, &arg->v.ival); break;
-      case t_float:  outputval(t_double, &arg->v.ival); break;
-      case t_array:
-      case t_pointer:
-       if (EiC_gettype(nextType(arg->type)) == t_char)
-           t = STR;
-       else
-           t = t_pointer;
-      default:
-       outputval(t, &arg->v);
-       break;
-    }
-    fputc('\n', stdout);
-
-}
-
-static void EiC_showdectype(type_expr *, int, FILE *);
-
-static void showFunc(type_expr **t, FILE *fp)
-{
-    static int level = 0;
-    func_t *F;
-    int i,k;
-    fputs("Func (", fp);
-    F = (func_t *) EiC_getInf(*t);
-    level++;
-
-    if (F && getFNp(F)) {
-       for (i = 0; i < getFNp(F); i++) {
-           fputc('\n',fp);
-           for(k=0;k<level;k++)
-               fputc('\t',fp);
-           if(getFPname(F,i))
-               printf("%s: ",getFPname(F,i));
-           EiC_showdectype(getFPty(F,i), 0,fp);
-           if(i < getFNp(F)-1)
-               fputs(",", fp);
-       }
-
-    }
-    fputc('\n',fp);
-    for(k=0;k<level;k++)
-       fputc('\t',fp);
-    fputs(") returning ", fp);
-    if(nextType(*t)) {
-       *t = nextType(*t);
-       EiC_showdectype(*t,0,fp);
-       if(*t)
-           while(nextType(*t))
-               *t = nextType(*t);
-    }
-    
-    if(F && getFComm(F)) 
-       fprintf(fp,"\n\n    /* %s/\n", getFComm(F));  /**/
-    level--;
-    
-}    
-
-static void EiC_showdectype(type_expr * t, int expand, FILE *fp)
-{
-
-    struct_t *S;
-    int i;
-    static int level = 0;
-
-    while (t) {
-       if(isconst(t) || isconstp(t))
-           fputs("const ",fp);
-       
-       switch (EiC_gettype(t)) {
-         case t_var:   fputs("...", fp); break;
-         case t_enum:  fputs("enum ", fp); break;
-         case t_char:  fputs("char ", fp); break;
-         case t_uchar: fputs("unsigned char ", fp); break;
-         case t_short: fputs("short ", fp); break;
-         case t_ushort:fputs("unsigned short ", fp); break;
-         case t_int:   fputs("int ", fp); break;
-         case t_uint:  fputs("unsigned ", fp); break;
-         case t_long:  fputs("long int ", fp); break;
-         case t_ulong: fputs("unsigned long int ", fp); break;
-         case t_llong: fputs("long long ",fp); break;
-         case t_float: fputs("float ", fp); break;
-         case t_double:fputs("double ", fp); break;
-         case t_pointer: 
-
-           if(isunsafe(t)) 
-             fputs("unsafe ", fp);
-           /*else if(issafe(t)) 
-             fputs("safe ", fp);*/
-
-           fputs("* ", fp); 
-           break;
-
-         case t_void:  fputs("void ", fp); break;
-         case t_hidden: fputs("hidden ",fp); break;
-           
-         case t_funcdec: fputs("dec_", fp); showFunc(&t,fp); break;
-         case t_func:   showFunc(&t,fp); break;
-         case t_builtin: fputs("Builtin ",fp); showFunc(&t,fp); break; 
-
-         case t_array:
-           fprintf(fp,"ARY[%d]",(int) EiC_getInf(t));
-           break;
-         case t_union:
-         case t_struct:
-           S = EiC_getInf(t);
-           if(!S) {
-               fputs("Incomplete", fp);
-               break;
-           }
-           if (EiC_gettype(t) == t_struct)
-               fprintf(fp,"struct: size  %u bytes",S->tsize);
-           else
-               fprintf(fp,"union: size  %u bytes",S->tsize);
-           if (expand) {
-               level++;
-               fputc('\n', fp);
-               if (level <= 2) {
-                   int j;
-                   for (i = 0; i < S->n; i++) {
-                       for (j = 0; j < level; j++)
-                           fputc('\t', fp);
-                       fputs(S->id[i], fp);
-                       fputs(" -> ", fp);
-                       EiC_showdectype(S->type[i], expand,fp);
-                       fputc('\n', fp);
-                   }
-               }
-               level--;
-           }
-           break;
-         case t_ref: fputs("Reference ",fp);break;
-         case ID: fputs("Identifier ", fp); break;
-         default: fputs("Uknown identifier", fp); return;
-       }
-       t = nextType(t);
-    }
-}
-
-static int IsObject(int t)
-{
-    if(t != t_func && t !=t_funcdec && t != t_builtin)
-       return 1;
-    return 0;
-}
-
-
-int EiC_IsFunc(int t)
-{
-    return !IsObject(t);
-}
-
-static void displaySclass(symentry_t *sym)
-{
-    /* display storage class */
-    if (sym->sclass == c_typedef)
-       fputs("typedef ", stdout);
-    else if(sym->sclass & c_private)
-       fprintf(stdout,"private to %s: ", sym->fname);
-    else if (sym->sclass & c_static)
-       fputs("static ", stdout);
-    if (sym->typequal == q_const)
-       fputs("const ", stdout);
-    else if (sym->typequal == q_volatile)
-       fputs("volatile ", stdout);
-}    
-
-static void showtab(int tab, int expand, token_t * e1, char *fname, int allowed())
-{
-    int i, t;
-    symentry_t *sym;
-    
-    for (i = 0; i < HSIZE; i++)
-       for (sym = EiC_HTAB[i]; sym; sym = sym->next) {
-
-           if ((t = EiC_gettype(sym->type)) == t_eic || sym->nspace != tab)
-               continue;
-
-           if(e1 && e1->Type && ! EiC_sametypes(e1->Type,sym->type))
-               continue;
-
-           /*printf("looking at [%s]\n",sym->fname);*/
-           if(fname && strcmp(fname,sym->fname) != 0)
-               continue;
-           
-           if(allowed && !allowed(t))
-               continue;
-           displaySclass(sym);
-           fputs(sym->id, stdout);
-           fputs(" -> ", stdout);
-           EiC_showdectype(sym->type, expand,stdout);
-           fputc('\n', stdout);
-       }
-}
-
-
-static int show(void)
-{
-    int t;
-    int h = EiC_work_tab;
-    AR_t arg;
-
-    EiC_work_tab = stand_tab;
-
-    if ((t = EiC_lexan()) == ID || t == TYPENAME) {
-       if(!EiC_showMacro(token->Val.sym->id)) { /* test macros first */
-           t = EiC_gettype(token->Val.sym->type);
-           if (t == ID) {
-               EiC_remsym(token->Val.sym);
-               /*
-                * check for struct/union tag name.
-                */
-               if ((token->Val.sym = EiC_lookup(tag_tab, EiC_LEXEM)) == NULL) {
-                   EiC_error("Unknown identifier %s",EiC_LEXEM);
-                   return 0;
-               }
-               fputs("Tag::",stdout);
-           }
-
-           displaySclass(token->Val.sym);
-           fputs(token->Val.sym->id, stdout);
-           fputs(" -> ", stdout);
-           EiC_showdectype(token->Val.sym->type, 1,stdout);
-           fputc('\n',stdout);
-           
-/* -----------------------------------------------------*/
-          
-           t = EiC_gettype(token->Val.sym->type);
-           if (! (token->Val.sym->sclass == c_typedef ||
-                  (t==t_builtin) || (t==t_func) || (t==t_funcdec))) 
-           {
-              fputs("value= ", stdout);
-              
-              arg.v=EiC_ENV->AR[token->Val.sym->val.ival].v;
-              arg.type = token->Val.sym->type;
-    
-              EiC_showvalue(&arg);
-              
-             } 
-             
-
-/* -------------------------------------------------*/
-           if (t == t_func && EiC_listcodeON) {
-               if (EiC_ENV->AR[token->Val.sym->val.ival].v.p.p)
-                   EiC_listcode(EiC_ENV->AR[token->Val.sym->val.ival].v.p.p);         
-           }
-       } else
-           EiC_remsym(token->Val.sym);
-    } else
-       EiC_error("Expected identifier");
-    EiC_work_tab = h;
-    return 1;
-}
-
-static char *getNextInput()
-{
-    
-    char c, *p;
-    static char buf[256];
-    
-    while(isspace(c = EiC_nextchar()));
-    p = buf;
-    while( c && c != DONE && !isspace(c)) {
-       *p++ = c;
-       c = EiC_nextchar();
-    }
-    *p = '\0';
-
-    return buf;
-}
-
-
-static int ResetEiC()
-{
-    char *buf;
-    void EiCp_ResetStart(void);
-    void EiCp_setResetStart(void);
-
-    buf = getNextInput();
-    if(buf[0]) {
-       if(strcmp(buf,"here") == 0)
-          EiCp_setResetStart();
-       else
-           EiC_error("Unrecgonised command `%s' for reset",buf);
-    } else
-       EiCp_ResetStart();
-
-    return 0;
-}
-
-static int filesCommand(void)
-{
-    void EiC_showIncludedFiles(void);
-    void EiC_showFileMacros(char *fname);
-    char EiC_nextchar(void);
-
-    int EiC_IsIncluded(char *fname);
-    char *buf;
-    
-    buf = getNextInput();
-
-    if(buf[0]) {
-       if(!EiC_IsIncluded(buf))
-            EiC_warningerror("Failed to find %s",buf); 
-       else {
-           EiC_showFileMacros(buf);
-           showtab(stand_tab,0,NULL,buf,IsObject);
-           showtab(stand_tab,0,NULL,buf,EiC_IsFunc);
-       }
-    } else 
-       EiC_showIncludedFiles();
-    
-    return 1;
-}
-
-static int clearCommand(void)
-{
-    /*
-     * syntax :clear file1[,file]*
-     */
-
-    int EiC_lutClearFileEntries(char *FileName);
-    void EiC_ClearFileMacros(char *fname);
-    void EiC_rmIncludeFileName(char *fname);
-    
-    char EiC_nextchar(void);
-
-    int EiC_IsIncluded(char *fname);
-    char *buf;
-
-    buf = getNextInput();
-
-    if(buf[0]) {
-       char *p;
-       do {
-           p = strchr(buf,',');
-           if(p) 
-               *p = 0;
-
-           if(!EiC_IsIncluded(buf))
-               EiC_warningerror("Failed to find %s",buf); 
-           else {
-               int r = EiC_lutClearFileEntries(buf);
-               EiC_ClearFileMacros(buf);
-               if(r)
-                   EiC_rmIncludeFileName(buf);
-           }
-           if(p) 
-               buf = p + 1;
-       }while(p);
-               
-
-    } else 
-       EiC_error("Expected file name");
-    
-
-
-    return 1;
-}
-
-static int setnextinf(void *info)
-{
-    int i, t;
-    symentry_t *sym;
-    type_expr *type;
-    for (i = 0; i < HSIZE; i++)
-       for (sym = EiC_HTAB[i]; sym; sym = sym->next)
-           if ((t = EiC_gettype(sym->type)) == t_union || t == t_struct)
-               for (type = sym->type; type; type = nextType(type))
-                   if (type->alias && EiC_getInf(type) == info) {
-                       type->alias = 0;
-                       return 1;
-                   }
-    return 0;
-}
-
-static void checktype(type_expr * type)
-{
-    int t;
-    while (type) {
-       if ((t = EiC_gettype(type)) == t_struct || t == t_union)
-           if (!type->alias)
-               if (setnextinf(EiC_getInf(type)))
-                   type->alias = 1;
-       type = nextType(type);
-    }
-}
-
-
-static long getmitem(val_t *v, int t)
-{
-    switch(t) {
-      case INT: return v->ival;
-      case UINT: return v->uival;      
-      case LONG: return v->lval;
-      case ULONG: return v->ulval;
-    }
-    return -1;      
-}
-
-static int rm(void)
-{
-    unsigned long mitem;
-    
-    int t, h = EiC_work_tab;
-    EiC_work_tab = stand_tab;
-    do {
-       switch(EiC_lexan()) {
-         case ID:
-         case TYPENAME:
-           t = EiC_gettype(token->Val.sym->type);
-           if (t == ID) {
-               EiC_remsym(token->Val.sym);
-               /*
-                * check for a tag name.
-                */
-               if((token->Val.sym = EiC_lookup(tag_tab,EiC_LEXEM)) == NULL) {
-                   EiC_error("Unknown identifier %s",EiC_LEXEM);
-               }else {
-                   checktype(token->Val.sym->type);
-                   EiC_remsym(token->Val.sym);
-               }
-           } else if (t == t_builtin) {
-               EiC_error("Cannot remove builtin functions");
-           } else {
-               checktype(token->Val.sym->type);
-               EiC_remsym(token->Val.sym);
-           }
-           break;
-         case INT: 
-         case UINT:
-         case LONG:
-         case ULONG:       
-           mitem = getmitem(&token->Val,token->Tok);
-           if(EiC_getMemMark(mitem) == MEM_LEAK)
-               EiC_freeMemItem(mitem);
-           else
-               EiC_error("Memory item %ld is not a leak\n", mitem);
-           break;
-         default:
-           EiC_error("UnExpected input to rm");
-           break;
-           
-       }
-    } while (EiC_lexan() == ',');
-    retractlexan();
-    EiC_work_tab = h;
-    return 1;
-}
-
-
-static int showhashtab(void)
-{
-    int tab;
-    token_t e1;
-
-    EiC_work_tab = tab  = stand_tab;   /* standard name space */
-    EiC_inittoken(&e1);
-
-    switch(EiC_lexan()) {
-      TYPESPEC:
-      TYPEQUAL:
-       retractlexan();
-       EiC_type_name(&e1);
-       break;
-      case ID:
-       if(strcmp(EiC_LEXEM,"tags") == 0) 
-           tab = tag_tab;
-       else if(strcmp(EiC_LEXEM,"builtin") == 0)
-               e1.Type = EiC_addtype(t_builtin,0);
-       else
-           retractlexan();
-       break;          
-      default:
-       retractlexan();
-    }
-    if(e1.Type) {
-       showtab(tab, 0,&e1,NULL,NULL);
-       EiC_freetype(e1.Type);
-    } else {
-       showtab(tab,0,NULL,NULL,IsObject);
-       showtab(tab,0,NULL,NULL,EiC_IsFunc);
-    }
-    return 1;
-}
-
-static int extra_option(char * option)
-{
-    EiC_work_tab = stand_tab;   /* standard name space */
-    if (EiC_lexan() == ID) {
-       if(strcmp(EiC_LEXEM,option) == 0)
-           return 1;
-       else
-           retractlexan();
-    } else
-       retractlexan();
-    return 0;
-}
-
-int EiC_exit_EiC()
-{
-    extern FILE *EiChist;
-    fflush(NULL);
-    if(EiC_verboseON)
-       fputs("EiC Bye\n", stdout);
-    if(EiChist)
-       fclose(EiChist);
-    exit(1);
-    return 1;
-}
-
-static int toggle_verbose()
-{
-    EiC_verboseON = !EiC_verboseON;
-    return EiC_verboseON;
-}
-
-static int toggle_interface()
-{
-    interfaceON = !interfaceON;
-    return interfaceON;
-}
-
-
-static int toggle_memdump()
-{
-    EiC_memdumpON = !EiC_memdumpON;
-    return EiC_memdumpON;
-}
-
-static int toggle_memtrace()
-{
-    EiC_memtraceON = !EiC_memtraceON;
-    return EiC_memtraceON;
-}
-
-static int toggle_showline()
-{
-    EiC_SHOWLINE = !EiC_SHOWLINE;
-    return EiC_SHOWLINE;
-}
-
-
-static int toggle_timer()
-{
-    EiC_TIMER = !EiC_TIMER;
-    return EiC_TIMER;
-}
-
-static int toggle_interp()
-{
-    EiC_interpON = !EiC_interpON;
-    return EiC_interpON;
-}
-
-static int toggle_includes()
-{
-    EiC_showIncludes= !EiC_showIncludes;
-    return EiC_showIncludes;
-}
-
-static int toggle_trace()
-{
-    if(extra_option("funcs"))
-       EiC_traceFunc = !EiC_traceFunc;
-    else
-       EiC_traceFunc = 0;
-
-    if(EiC_traceFunc)
-       EiC_traceON = 1;
-    else
-       EiC_traceON = !EiC_traceON;
-
-    return EiC_traceON;
-}
-
-static int toggle_listcode()
-{
-    if(extra_option("linenums"))
-       EiC_lineNums = !EiC_lineNums;
-    else
-       EiC_lineNums = 0;
-
-    if(EiC_lineNums)
-       EiC_listcodeON = 1;
-    else
-       EiC_listcodeON = !EiC_listcodeON;
-
-    return EiC_listcodeON;
-}
-
-
-static int showhistory()
-{
-  #ifndef NO_HISTORY
-    void EiC_show_history(FILE *fp);
-    EiC_show_history(stdout);
-  #endif
-    return 1;
-}
-
-static int showHelp()
-{
-puts("-----------------------------------------------------------------------------\n"
-     "EiC-COMMAND          SUMMARY DESCRIPTION\n"
-     "-----------------------------------------------------------------------------\n"
-     ":-I path       Append path to the include-file search list.\n"
-     ":-L            List search paths.\n"
-     ":-R path       Remove path from the include-file search list.\n"
-     ":clear fname   Removes the contents of file fname from EiC.\n"
-     ":exit          Terminates an EiC session.\n"
-     ":files         Display the names of all included files.\n"
-     ":files fname   Summarize the contents of the included file `fname'.\n" 
-     ":gen fname     Generates EiC interface of the included file `fname'.\n"
-     ":gen fname [<\"outfile\">] Places the interface in outfile\n"
-     ":gen fname 4   Generates EiC interface with 4 levels of multiplexing.\n"
-     ":help          Display summary of EiC commands.\n"
-     ":history       List the history of all input commands.\n"
-     ":includes      Display path of include files when loaded.\n"
-     ":interpreter   Execute input commands. By default it is on.\n"
-     ":listcode      List stack code.\n"
-     ":listcode linenums     List stack code with associated line numbers.\n"
-     ":memdump       Show potential memory leaks.\n"
-     ":reset         Reset EiC back to its start state.\n"
-     ":reset here    Set the `reset' state to EiC's current state.\n"
-     ":rm  dddd      Remove memory item dddd, which is a constant integer value.\n"
-     ":rm   f        Removes f's definition from the symbol tables.\n"
-     ":show f        Shows type or  macro definition of `f'.\n"
-     ":showline      Show input line after macro expansion.\n"
-     ":status        Display the status of the toggle switches.\n"
-     ":timer         Time in seconds of execution.\n"
-     ":trace         Trace function calls and line numbers during code execution.\n"
-     ":trace funcs   Trace function calls only during code execution.\n"
-     ":variables     Display declared variables and interpreter-ed function names.\n"
-     ":variables tags       Display the tag identifiers.\n"
-     ":variables type-name  Display variables of type `type-name'.\n"
-     ":verbose       Suppresses EiC's copyright and warning messages on start up.\n"
-     "------------------------------------------------------------------------------\n"
-     );
-    return 0;
-}
-
-static int EiCstatus()
-{
-    struct toggle {
-       char * name;
-       int *val; }
-    toggles[] =  {
-        {"includes",&EiC_showIncludes},
-       {"interpreter", &EiC_interpON},
-       {"listcode",&EiC_listcodeON},
-       {"memdump", &EiC_memdumpON},
-       {"showline",&EiC_SHOWLINE},
-       {"timer",&EiC_TIMER},
-       {"trace",&EiC_traceON},
-       {"verbose",&EiC_verboseON},
-    };
-    int n = sizeof(toggles)/sizeof(struct toggle);
-
-    while(n--)
-       printf("\t%-15s %d\n",toggles[n].name, *toggles[n].val);
-
-    return 0;
-}
-
-
-static symentry_t *add_eicfunc(char *name, int (*func) ())
-{
-    symentry_t *sym;
-    sym = EiC_insertLUT(eic_tab, name, t_eic);
-    sym->level = 1;
-    sym->val.func = func;
-    return sym;
-}
-
-symentry_t *EiC_add_builtinfunc(char *name, val_t(*vfunc) ())
-{
-    symentry_t *sym = EiC_lookup(1, name);
-    if(!sym)
-    {
-        sym = EiC_insertLUT(stand_tab, name, ID);
-        EiC_freetype(sym->type);
-        sym->level = 1;
-        sym->val.vfunc = vfunc;
-        sym->type = EiC_addtype(t_builtin,NULL);
-    }
-    else
-    {
-        sym->level = 1;
-        sym->val.vfunc = vfunc;
-        sym->type->obj = t_builtin;
-/*        EiC_freetype(sym->type->nxt);
-        sym->type->nxt = 0;
-*/
-    }
-    return sym;
-}
-
-
-void EiC_comm_switch(void)
-{
-    int EiC_insertpath(char *);
-    int EiC_removepath(char *);
-    void EiC_listpath(void);
-    char EiC_nextchar(void);
-    
-    char *buf;
-    if (EiC_lexan() == ID) {
-       if(EiC_gettype(token->Val.sym->type) == ID) {
-           EiC_remsym(token->Val.sym);
-       }
-
-       buf = getNextInput();
-           
-       switch(EiC_LEXEM[0]) {
-         case 'I':
-           if(!*buf || !EiC_insertpath(buf))
-            EiC_warningerror("Failed to add path"); 
-           break;
-         case 'R':
-           if(!*buf || !EiC_removepath(buf))
-            EiC_warningerror("Failed to remove path"); 
-           break;
-         case 'L':
-           EiC_listpath();break;
-         default:          
-           EiC_error("Unknown command switch");
-       }                   
-           
-    } else 
-       EiC_error("Expected command switch");
-
-}
-
-
-
-/*                                                                     */
-/* Jean-Bruno Richard personal Modification inside eicmod.c            */
-/*                                                                     */
-/* Semi-automatic module code generation                               */
-/* functions. Thanks to the function prototype, it's possible to       */
-/* generate it's interfacing function to EiC.                          */
-/* Few manual modification of the generated code are sometimes needed, */
-/* but it helps a lot....                                              */
-/* How to use it :                                                     */
-/* Launch EiC, #include the desired header file                        */
-/* (Example #include "gl.h")                                           */
-/* and use the new EiC command :gen with the name of the header file   */
-/* (In the example :gen gl.h) EiC will output the interface to stdout  */
-/* Hope it helps.....  :                                               */
-/* jean-bruno.richard@mg2.com                                          */
-
-
-
-#ifndef NO_AUTOGEN
-
-
-static int callBack=0;
-static  int * callNo =NULL;
-static  int *callpos = NULL;
-static int Ncalls = 0;
-static char *callName="EiC_Cfunc_";
-static char *middleName="MiddleOne_";
-static int  MULTIPLEX = 1;
-
-static void EiC__generateType(type_expr *t, char *id,FILE *fp, int level)
-{
-
-    struct_t *S;
-
-    char tmp[100];
-    char out[100];
-
-    strcpy(out,id);
-
-    do {
-        switch(EiC_gettype(t)) {
-            case t_pointer: /* pointer */
-                sprintf(tmp,"*%s",out);
-                strcpy(out,tmp);
-                break;
-
-           case t_char:    sprintf(tmp,"%s %s", "char", out); strcpy(out,tmp); break;
-           case t_uchar:   sprintf(tmp,"%s %s", "unsigned char",out);strcpy(out,tmp); break;
-           case t_short:   sprintf(tmp,"%s %s",  "short",out);strcpy(out,tmp);break;
-           case t_ushort:  sprintf(tmp,"%s %s",  "unsigned short",out);strcpy(out,tmp);break;
-           case t_int:     sprintf(tmp,"%s %s",  "int",out);strcpy(out,tmp);break;
-           case t_uint:    sprintf(tmp,"%s %s",  "unsigned",out);strcpy(out,tmp);break;
-           case t_long:    sprintf(tmp,"%s %s",  "long",out);strcpy(out,tmp);break;
-           case t_ulong:   sprintf(tmp,"%s %s",  "unsigned long",out);strcpy(out,tmp);break;
-           case t_float:   sprintf(tmp,"%s %s",  "float",out);strcpy(out,tmp);break;
-           case t_double:  sprintf(tmp,"%s %s",  "double",out);strcpy(out,tmp);break;
-           case t_void:  sprintf(tmp,"%s %s",  "void",out);strcpy(out,tmp);break;
-
-           case t_struct:
-           case t_union:
-               if(EiC_gettype(t) == t_union) 
-                   fputs("union {",fp);
-               else
-                   fputs("struct {",fp);
-
-               S = EiC_getInf(t);
-               if(!S) {
-                   fputs("Incomplete", fp);
-                   break;
-               }
-               level++;
-               if (level <= 2) {
-                   int i;
-                   for (i = 0; i < S->n; i++) {
-                       EiC__generateType(S->type[i], S->id[i], fp,level);
-                       fputs(";",fp);
-                   }
-               }
-               sprintf(tmp,"} %s ",out);
-               strcpy(out,tmp);
-               level--;
-               break;
-
-            case t_array: /* array */ 
-                if(out[0] ==  '*') {
-                    sprintf(tmp,"(%s)%s",out,"[]");
-                    strcpy(out,tmp);
-                } else {
-                   sprintf(tmp,"[%d]",(int)EiC_getInf(t));
-                    strcat(out, tmp);
-               }
-               break;
-
-               
-       }
-
-    } while ( (t=nextType(t)));
-
-    fprintf(fp,"%s",out);
-}
-
-static int DoCallBackNames(func_t *F, FILE *fp)
-{
-    int x = 0;
-    if (F) {
-       int i;
-       callpos = realloc(callpos,sizeof(int)*getFNp(F));
-       for (i = 0; i < getFNp(F); i++) {
-           type_expr *t = getFPty(F,i);
-           if(EiC_gettype(t) == t_pointer && 
-              EiC_IsFunc(EiC_gettype(nextType(t)))) {
-               callNo = realloc(callNo, sizeof(*callNo) * (x+1));
-               callpos[x] = i;
-               callNo[x] = callBack++;
-               fprintf(fp,"static void * %s%d = NULL;\n",callName,callNo[x]);
-               x++;
-           }
-       }
-    }
-    return (Ncalls = x);
-}
-
-
-static void genCallBackFunc(type_expr *ty, 
-                           int p, 
-                           FILE *fp)
-{
-    char buff[10];
-    func_t *F, *F2;
-    int i,v, var=0;
-    type_expr *t;
-
-    F = EiC_getInf(ty);
-    t = getFPty(F,callpos[p]);
-    t = nextType(t);
-    F2 = EiC_getInf(t);
-
-    fprintf(fp,"static ");
-    EiC_showdectype(nextType(t),0,fp);
-
-    fprintf(fp," %s%d(",middleName,callNo[p]);
-
-    /* check 4 varadic function calls */
-    for(i=0;i<getFNp(F2);i++) 
-       if(EiC_gettype(getFPty(F2,i)) == t_var) {
-           var = 1;
-           break;
-       }
-
-    if(!var) {
-       for(i=0;i<getFNp(F2)-1;i++) {
-           if((v=EiC_gettype(getFPty(F2,i))) == t_void)
-               continue;
-           sprintf(buff,"x%d, ",i);
-           EiC__generateType(getFPty(F2,i),buff,fp,1);
-
-       }
-       if((v=EiC_gettype(getFPty(F2,i))) != t_void)  {
-           sprintf(buff,"x%d ",i);
-           EiC__generateType(getFPty(F2,i),buff,fp,1);
-       }
-       fprintf(fp,")\n{\n");
-
-       for (i = 0; i < getFNp(F2); i++) {
-           if(EiC_gettype(getFPty(F2,i)) == t_void)
-               continue;
-           fprintf(fp,"    setArg(%d, %s%d, ",i,callName,callNo[p]);
-
-           EiC__generateType(getFPty(F2,i),"",fp,1);
-
-           fprintf(fp,",x%d);\n",i);
-       }
-
-    } else {
-       fprintf(fp," va_alist )  va_dcl\n{\n");
-       fprintf(fp,"    void Auto_EiC_CallBack(code_t *callback, va_list ap);\n");
-       fprintf(fp,"    va_list ap; va_start(ap);\n");
-       fprintf(fp,"    Auto_EiC_CallBack(%s%d,ap);\n",callName,callNo[p]);
-    } 
-       
-    fprintf(fp,"\n    EiC_callBack(%s%d);\n",callName,callNo[p]);
-
-    if(EiC_gettype(nextType(t)) != t_void) {
-       fputs("    return EiC_ReturnValue( ",fp);
-       /*EiC_showdectype(nextType(t),0,fp);*/
-       EiC__generateType(nextType(t),"",fp,1);
-       fputs(");\n",fp);
-    }
-    if(var)
-       fputs("    va_end(ap);\n",fp);
-    
-    fputs("}\n\n",fp);
-
-}
-
-
-
-static void genArg(type_expr * t, int idx, FILE *fp)
-{
-    int ob;
-   if ((ob = EiC_gettype(t)) == t_void) {
-      return;
-   }
-
-   if(ob == t_pointer) {
-       int k = EiC_gettype((nextType(t)));
-       if(EiC_IsFunc(k)) {
-          k = 0;
-          while(k<Ncalls && callpos[k] != idx) k++;
-          fprintf(fp,"%s%d",middleName,callNo[k]+adjustNum);
-          return ;
-       }
-   }
-       
-    fputs("arg(",fp);
-    fprintf(fp,"%d",idx);
-    fputs(",getargs(),",fp);
-
-       switch (ob) {
-         case t_char:  fputs("char)", fp); break;
-         case t_uchar: fputs("char)", fp); break;
-         case t_short: fputs("short)", fp); break;
-         case t_ushort:fputs("short)", fp); break;
-         case t_int:   fputs("int)", fp); break;
-         case t_uint:  fputs("unsigned)", fp); break;
-         case t_long:  fputs("long) ", fp); break;
-         case t_ulong: fputs("unsigned long)", fp); break;
-         case t_float: fputs("float)", fp); break;
-         case t_double:fputs("double)", fp); break;
-         case t_pointer:
-             fputs("ptr_t).p",fp);
-             break; 
-         default: fputs("Uknown identifier", fp); return;
-       }
-}
-
-static void genAffect(type_expr * t, int expand, FILE *fp)
-{
-       fputs("\t", fp);
-       switch (EiC_gettype(t)) {
-         case t_char: 
-         case t_short:
-         case t_int:   fputs("v.ival = ", fp); break;
-         case t_uchar:
-         case t_ushort:
-         case t_uint:  fputs("v.uival = ", fp); break;
-         case t_long:  fputs("v.lval = ", fp); break;
-         case t_ulong: fputs("v.ulval = ", fp); break;
-         case t_float: 
-         case t_double:fputs("v.dval = ", fp); break;
-
-         case t_pointer: 
-           if(isunsafe(t)) 
-             fputs("v.p.ep = (void*)ULONG_MAX;\n"
-                   "\tv.p.sp = v.p.p = ",fp);
-           else if(issafe(t)) 
-             fputs("v.p.ep = v.p.sp = v.p.p = ", fp);
-           break;
-         case t_void:  break;
-         case t_hidden: break;
-           
-/*       case t_array:
-           fprintf(fp,"ARY[%d]",(int) EiC_getInf(t));
-           break;
-         case t_union:
-         case t_struct:
-           S = EiC_getInf(t);
-           if(!S) {
-               fputs("Incomplete", fp);
-               break;
-           }
-           if (EiC_gettype(t) == t_struct)
-               fprintf(fp,"struct: size  %u bytes",S->tsize);
-           else
-               fprintf(fp,"union: size  %u bytes",S->tsize);
-           if (expand) {
-               level++;
-               fputc('\n', fp);
-               if (level <= 2) {
-                   int j;
-                   for (i = 0; i < S->n; i++) {
-                       for (j = 0; j < level; j++)
-                           fputc('\t', fp);
-                       fputs(S->id[i], fp);
-                       fputs(" -> ", fp);
-                       EiC_showdectype(S->type[i], expand,fp);
-                       fputc('\n', fp);
-                   }
-               }
-               level--;
-           }
-           break;
-         case t_ref: fputs("Reference ",fp);break;
-         case ID: fputs("Identifier ", fp); break;
-*/
-         default: fputs("Uknown identifier", fp); return;
-       }
-}
-
-static void genCall(type_expr *t, char *fname, FILE *fp)
-{
-    static int level = 0;
-    func_t *F;
-    int i;
-
-    F = (func_t *) EiC_getInf(t);
-    level++;
-
-    fputs("\n", fp);
-
-    if(Ncalls) {
-       int k;
-       for(k=0;k<Ncalls;++k) 
-           fprintf(fp,"\t%s%d = arg(%d,getargs(),ptr_t).p;\n",
-                   callName,callNo[k],callpos[k]);
-    }
-
-    if(nextType(t)) {
-       t = nextType(t);
-       genAffect(t,0,fp);
-       if(t)
-           while(nextType(t))
-               t = nextType(t);
-    }
-    
-    fputs(fname,fp);
-    fputs("(", fp);
-    if (F && getFNp(F)) {
-       for (i = 0; i < getFNp(F); i++) {
-           genArg(getFPty(F,i), i, fp);
-           if(i < getFNp(F)-1) {
-               fputs(",\n", fp);
-               fputs("\t\t", fp);
-           }
-       }
-       fputs(");\n", fp);
-    }
-    else
-       fputs(");\n", fp);
-
-    level--;
-}
-
-static void genMultiCall(type_expr *t, char *fname, FILE *fp)
-{
-    static int level = 0;
-    func_t *F;
-    int i,n;
-    type_expr *T;
-
-    F = (func_t *) EiC_getInf(t);
-    level++;
-
-    fputs("\tstatic int nb = 0;\n\n",fp);
-
-    fprintf(fp,"\tswitch(nb)\n");
-    fprintf(fp,"\t{\n");
-    for (n = 0;n < MULTIPLEX;++n)
-    {
-       adjustNum = n+1-MULTIPLEX;
-       fprintf(fp,"\tcase %d :\n",n);
-
-       if(Ncalls) {
-           int k;
-           for(k=0;k<Ncalls;++k) 
-               fprintf(fp,"\t%s%d = arg(%d,getargs(),ptr_t).p;\n",
-                       callName,callNo[k]+adjustNum,callpos[k]);
-       }
-
-       if (n == 0)
-       {
-           T = t;
-       }
-       else
-       {
-           t = T;
-       }
-
-       if(nextType(t)) {
-           t = nextType(t);
-           genAffect(t,0,fp);
-           if(t)
-               while(nextType(t))
-                   t = nextType(t);
-       }
-
-       fputs(fname,fp);
-       fputs("(", fp);
-       if (F && getFNp(F)) {
-           for (i = 0; i < getFNp(F); i++) {
-               genArg(getFPty(F,i), i, fp);
-               if(i < getFNp(F)-1) {
-                   fputs(",\n", fp);
-                   fputs("\t\t", fp);
-               }
-           }
-           fputs(");\n", fp);
-       }
-       else
-           fputs(");\n", fp);
-
-       level--;
-       fprintf(fp,"\tbreak;\n");
-    }
-    fprintf(fp,"\t}\n");
-    fprintf(fp,"\t++nb;\n");
-    fprintf(fp,"\tnb %%= %d;\n",MULTIPLEX);
-    adjustNum = 0;
-}
-
-
-static void genFunctions(int tab, int expand, 
-                 token_t * e1, 
-                 char *mname, 
-                 int allowed(), FILE *fp)
-{
-    int i, n, t;
-    int multiplexed;
-    symentry_t *sym;
-    
-    for (i = 0; i < HSIZE; i++)
-       for (sym = EiC_HTAB[i]; sym; sym = sym->next) {
-           if ((t = EiC_gettype(sym->type)) == t_eic || sym->nspace != tab)
-               continue;
-
-           if(e1 && e1->Type && ! EiC_sametypes(e1->Type,sym->type))
-               continue;
-
-           if(mname && strcmp(mname,sym->fname) != 0)
-               continue;
-           
-           if(allowed && !allowed(t))
-               continue;
-
-           n = 1;
-           multiplexed = 0;
-           while (n)
-           {
-               if(DoCallBackNames(EiC_getInf(sym->type),fp)) {
-                   int k = 0;
-                   if (!multiplexed)
-                   {
-                       multiplexed = 1;
-                       n = MULTIPLEX;
-                   }
-                   while(k<Ncalls) {
-                       genCallBackFunc(sym->type,k++,fp);
-                   }
-               }
-               --n;
-           }
-
-           fputs("static val_t eic_",fp);
-           fputs(sym->id, fp);
-           fputs("(void)\n",fp);
-           fputs("{\n",fp);
-           
-           fputs("\tval_t v;\n",fp);
-           /*fputs("\tstatic int nb = 0;\n",fp);*/
-
-           if (multiplexed)
-           {
-               genMultiCall(sym->type, sym->id, fp);
-           }
-           else
-           {
-               genCall(sym->type, sym->id, fp);
-           }
-           
-           fputs("\n",fp);
-           fputs("\treturn v;\n",fp);
-           fputs("}\n\n",fp);
-
-       }
-}
-
-
-
-
-
-
-static void genInterface(int tab, 
-                 int expand, 
-                 token_t * e1, 
-                 char *mname, 
-                 FILE *fp)
-{
-    char *pt;
-    int i, t;
-    symentry_t *sym;
-    char iname[255]; 
-  
-    strcpy(iname,mname);
-    pt = strrchr(iname,'.');
-    if (pt)
-    {
-       *pt = '\0';
-    }
-    pt = strrchr(iname,'/');
-    if (pt)
-    {
-       ++pt;
-    }
-    else
-    {
-       pt = iname;
-    }
-
-    fputs("/**********************************/\n\n",fp);
-
-    fprintf(fp,"void module_%s()\n",pt);
-    fputs("{\n",fp);
-
-
-    for (i = 0; i < HSIZE; i++)
-       for (sym = EiC_HTAB[i]; sym; sym = sym->next) {
-
-           if ((t = EiC_gettype(sym->type)) == t_eic || sym->nspace != tab)
-               continue;
-
-           if(e1 && e1->Type && ! EiC_sametypes(e1->Type,sym->type))
-               continue;
-
-           if(mname && strcmp(mname,sym->fname) != 0)
-               continue;
-           
-           if(EiC_IsFunc(t) || sym->sclass == c_typedef || sym->sclass == c_enum)
-               continue;
-
-            fprintf(fp,"\tEiC_parseString(\"");
-           EiC__generateType(sym->type,sym->id,fp,1);
-           fprintf(fp," @ %%ld;\", (long)&%s);\n",sym->id);
-       }
-
-
-
-    for (i = 0; i < HSIZE; i++)
-       for (sym = EiC_HTAB[i]; sym; sym = sym->next) {
-
-           if ((t = EiC_gettype(sym->type)) == t_eic || sym->nspace != tab)
-               continue;
-
-           if(e1 && e1->Type && ! EiC_sametypes(e1->Type,sym->type))
-               continue;
-
-           if(mname && strcmp(mname,sym->fname) != 0)
-               continue;
-           
-           if(!EiC_IsFunc(t))
-               continue;
-
-            fprintf(fp,"\tEiC_add_builtinfunc(\"%s\",eic_%s);\n",sym->id,sym->id);
-       }
-
-    fputs("}\n\n",fp);
-    fputs("/**********************************/\n\n",fp);
-}
-
-static void genHeader(char *mname, FILE *fp)
-{
-    fputs("#include <stdlib.h>\n"
-         "#include <varargs.h>\n"
-         "#include <limits.h>\n"
-         "#include \"eic.h\"\n",fp);
-    fprintf(fp,"#include \"%s\"\n",mname);
-    fputs("\n\n",fp);
-}
-
-static void genModule(int tab, int expand, token_t * e1, char *mname)
-{
-  FILE *fp = stdout;
-
-  if(EiC_lexan() == INT)
-      MULTIPLEX = token->Val.ival;
-  else
-      retractlexan();
-
-  if(EiC_lexan() == STR) {
-    fp = fopen(token->Val.p.p,"w");
-    EiC_formatMessage("redirecting to [%s]\n",(char*)token->Val.p.p);
-    if(!fp) {
-      EiC_warningerror("Failed to open file %s\n", token->Val.p.p);
-      fp = stdout;
-    }
-  } else
-    retractlexan();
-
-  genHeader(mname,fp);
-  genFunctions(tab, expand, e1, mname, EiC_IsFunc,fp);
-  genInterface(tab, expand, e1, mname,fp);
-
-
-  if(fp != stdout)
-    fclose(fp);
-}
-
-/*
- *
- *     NEW EiC COMMAND !
- *     By Jean-Bruno Richard
- *
- */
-static int genCommand(void)
-{
-    char EiC_nextchar(void);
-    int EiC_IsIncluded(char *fname);
-    char *buf;
-    
-    callBack=0;
-    buf = getNextInput();
-    if(buf[0]) {
-       if(!EiC_IsIncluded(buf))
-            EiC_warningerror("Failed to find %s",buf); 
-       else {
-           genModule(stand_tab,0,NULL,buf);
-       }
-    } else 
-            EiC_warningerror("Need a included file name for generating module"); 
-    return 1;
-}
-#endif
-
-
-
-static void establish_ARs(void)
-{
-    EiC_ENV->LARsize = 4000;
-    EiC_ENV->ARsize =  3000;
-    EiC_ENV->LAR =(AR_t*)xmalloc(sizeof(AR_t)*EiC_ENV->LARsize);
-    EiC_ENV->AR = (AR_t*)xmalloc(sizeof(AR_t)*EiC_ENV->ARsize);
-}
-
-void EiC_init_EiC(void)
-{
-    EiC_ENV = (environ_t *) xcalloc(1, sizeof(environ_t));
-    EiC_ENV->CODE.Filename = "::EiC::";
-
-    establish_ARs();
-    EiC_initpp();
-    EiC_work_tab = stand_tab;
-    /*init_hashtab(31);*/
-    /* add EiC command line functions */
-    add_eicfunc("listcode", toggle_listcode);
-    add_eicfunc("interpreter", toggle_interp);
-    add_eicfunc("variables", showhashtab);
-    add_eicfunc("exit", EiC_exit_EiC);
-    add_eicfunc("quit", EiC_exit_EiC);
-    add_eicfunc("timer", toggle_timer);
-    add_eicfunc("showline", toggle_showline);
-    add_eicfunc("show", show);
-    add_eicfunc("memdump", toggle_memdump);
-    add_eicfunc("memtrace", toggle_memtrace);
-    add_eicfunc("rm", rm);
-    add_eicfunc("trace",toggle_trace);
-    add_eicfunc("verbose",toggle_verbose);
-    add_eicfunc("interface",toggle_interface);
-
-#ifndef NO_HISTORY
-    add_eicfunc("history",showhistory);
-#endif
-    add_eicfunc("help", showHelp);
-    add_eicfunc("status",EiCstatus);
-    add_eicfunc("includes",toggle_includes);
-    add_eicfunc("files",filesCommand);
-    add_eicfunc("clear",clearCommand);
-#ifndef NO_AUTOGEN
-    add_eicfunc("gen",genCommand);
-    add_eicfunc("reset",ResetEiC);
-    /* Remenber to modify help message too... */
-#endif
-}
-
-
-
-
-
-
-
-
-
-