Update to 2.0.0 tree from current Fremantle build
[opencv] / apps / cvenv / EiC / symbol.c
diff --git a/apps/cvenv/EiC/symbol.c b/apps/cvenv/EiC/symbol.c
deleted file mode 100644 (file)
index ec499ee..0000000
+++ /dev/null
@@ -1,889 +0,0 @@
-/* symbol.c
- *
- *     (C) Copyright Apr 15 1995, Edmond J. Breen.
- *                ALL RIGHTS RESERVED.
- * This code may be copied for personal, non-profit use only.
- *
- */
-/* Modified by Intel OpenCV team. Added lines 528-531 in order to prevent 
-   the parser exceptions throwing in specific cases. No guarantee that this 
-   is the fix for all cases. */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "typemod.h"
-#include "MachSet.h"
-#include  "global.h"
-#include "lexer.h"
-#include "xalloc.h"
-#include "preproc.h"
-#include "symbol.h"
-#include "parser.h"
-#include "global.h"
-#include "func.h"
-
-
-
-int EiC_iskeyword(keyword_t *keywords,char*id,int n)
-{
-    int i;
-    for(i=0;i<n;i++)
-       if(strcmp(keywords[i].id,id) == 0)
-           return keywords[i].token;
-    return 0;
-}
-
-#define MoD 2
-void EiC_eicpush(eicstack_t *s, val_t v)
-{
-    if(!(s->n%MoD)) {
-       if(!s->n)
-           s->val = (val_t*)xcalloc(sizeof(val_t),MoD);
-       else
-           s->val = (val_t*)xrealloc(s->val,(s->n+MoD)*sizeof(val_t));
-    }
-    s->val[s->n] = v;
-    s->n++;
-}
-
-int EiC_eicpop(eicstack_t *s, val_t *pop)
-{
-    if(s->n == 0)
-       return 0;
-    s->n--;
-    *pop = s->val[s->n];
-    if(!(s->n%MoD)) {          
-       if(!s->n)
-           xfree(s->val);
-       else
-           s->val = (val_t*)xrealloc(s->val,s->n*sizeof(val_t));
-    }
-    return 1;
-}
-
-
-/* LOOK UP TABLE ROUTINES
-   --------------------------*/
-
-static size_t _EnTrY_No = 0;
-int hashsmc(char * s,int mod);
-symentry_t *EiC_HTAB[HSIZE];
-
-
-/* code for generating tempories */
-unsigned int NumTemps=0, CurTemp =0;
-
-symentry_t * EiC_nxtTemp(int obj, int level)
-{
-    symentry_t *sym;
-    char tmpName[50];
-    sprintf(tmpName,"%s%d","__TeMp",NumTemps);
-
-    /* There should be no need to watch out for change of level !!!!
-     * It will be assumed that the compound statement routine will
-     * handle it.
-     */
-
-
-    sym = EiC_insertLUT(EiC_work_tab,tmpName,obj);
-    NumTemps++;
-
-    CurTemp++;
-
-    if(sym->val.ival == -1) /* needs a home */ 
-       EiC_stackit(sym,level);
-
-    /* Setting up the token information is left
-     * to the caller of this routine.
-     */
-
-    sym->level = level;
-    return sym;
-}    
-
-
-
-size_t EiC_lut_NextEntryNum(void)
-{
-    return _EnTrY_No;
-}
-                             /*CUT EiChashFunc*/
-int hashsmc(char * s,int mod)
-{
-    register unsigned int h, c;
-    h = 0;
-    while(  (c = (int) *s++) > 0)
-       h =   (h << 1) + c;
-    return ( h % mod);
-}
-                           /*END CUT*/
-
-                            /*CUT lutLookUp*/
-int Pclash;
-
-char *EiC_getClashedfname(char nspace,char *id)
-{
-    symentry_t *sym;
-    for(sym = EiC_HTAB[hashsmc(id,HSIZE)]; sym != NULL; sym = sym->next)
-       if(sym->nspace == nspace && strcmp(id,sym->id) == 0)
-           if((sym->sclass & c_private) &&
-              sym->fname != CurrentFileName()) {
-               return sym->fname;
-           }
-    return NULL;
-}
-
-symentry_t * EiC_lookup(char nspace, char *id)
-{
-    symentry_t *sym;
-    Pclash = 0;
-    for(sym = EiC_HTAB[hashsmc(id,HSIZE)]; sym != NULL; sym = sym->next)
-       if(sym->nspace == nspace && strcmp(id,sym->id) == 0) {
-           if((sym->sclass & c_private) &&
-              sym->fname != CurrentFileName()) {
-               Pclash = 1;
-               continue;
-           }
-           else
-               break;
-       }
-
-    return(sym);
-}
-                             /*END CUT*/
-
-/* function added by Sergey Oblomov (Intel OpenCV team member) */
-symentry_t * EiC_lookup_by_callback(char nspace, void* callback)
-{
-    symentry_t *sym;
-    int i;
-    Pclash = 0;
-    for( i = 0; i < HSIZE; i++ )
-        if( EiC_HTAB[i] )
-            for(sym = EiC_HTAB[i]; sym != NULL; sym = sym->next)
-                   if(sym->nspace == nspace)
-                    if( sym->type->obj == t_func && sym->type->u.inf &&
-                        ((func_t*)sym->type->u.inf)->callBack == callback )
-                        return sym;
-    return 0;
-}
-
-
-                           /*CUT lutInsert*/
-symentry_t * EiC_insertLUT(char nspace,char *id,int type)
-{
-    symentry_t *sym;
-    auto int  hashval;
-
-    sym = (symentry_t *) xcalloc(1,sizeof(symentry_t));
-    if(sym == NULL)
-       return(NULL);
-    if( (sym->id = EiC_strsave(id)) == NULL) {
-       xfree(sym);
-       return(NULL);
-    }
-    sym->entry = _EnTrY_No++;
-    hashval = hashsmc(sym->id,HSIZE);
-    sym->next = EiC_HTAB[hashval];
-    EiC_HTAB[hashval] = sym;
-    sym->nspace = nspace;
-    sym->val.ival = -1;                /* indicates  unused */
-    sym->type = EiC_addtype(type,NULL);
-    sym->fname =  CurrentFileName();
-    return(sym);
-}
-                           /*END CUT*/
-
-void delete(symentry_t *sym)
-{
-    auto symentry_t * this;
-    auto int idx;
-    
-    idx = hashsmc(sym->id,HSIZE);
-    this = EiC_HTAB[idx];
-    if(this == sym)
-       EiC_HTAB[idx] = sym->next;
-    else {                     /* find and unlink  */
-       while(this && this->next != sym)
-           this = this->next;
-       this->next = sym->next;
-    }
-}
-
-void EiC_UpdateSymPos(symentry_t * sym)
-{
-
-    if(sym->next && sym->next->level > sym->level) {
-       symentry_t * p = EiC_HTAB[hashsmc(sym->id,HSIZE)];
-       delete(sym);
-       while(p->next != sym)
-           if(p->next) {
-               if(p->next->level > sym->level)
-                   p=p->next;
-               else {
-                   sym->next = p->next;
-                   p->next = sym;
-               }
-           } else {
-               p->next = sym;
-               sym->next = NULL;
-           }
-    }
-}
-
-void EiC_remsym(symentry_t *sym)
-{
-
-  delete(sym);
-  free_sym(sym);
-
-}
-/*END CUT*/
-
-#if 1
-void remBuiltin(symentry_t *sym)
-{
-    /* removes the prototype of the builtin function only */
-    EiC_freetype(sym->type);
-    sym->type = EiC_addtype(t_builtin,NULL);
-    sym->fname = "::EiC::";
-}
-#endif
-
-
-/*CUT lutRemLevel*/
-void EiC_remlevel(int level)
-{
-  int i;
-  symentry_t * sym, *symh;
-
-  for(i=0;i<HSIZE;i++) {
-    sym = EiC_HTAB[i];
-    while(sym && sym->level >= level) {
-      symh = sym->next;
-      free_sym(sym);
-      sym = symh;
-    }
-    EiC_HTAB[i] = sym;
-  }
-}
-/*END CUT*/
-/*CUT lutRemTempories*/
-void EiC_remTempories(void)
-{
-  int i;
-  symentry_t * sym, *symh;
-
-  for(i=0;i<HSIZE;i++) {
-    sym = EiC_HTAB[i];
-    while(sym && IsTemp(sym->type)) {
-      symh = sym->next;
-      free_sym(sym);
-      sym = symh;
-    }
-    EiC_HTAB[i] = sym;
-  }
-}
-/*END CUT*/
-
-
-
-int  EiC_lutClearFileEntries(char *FileName)
-{
-
-    int i;
-    symentry_t * sym, *p, *t;
-
-    for(i=0;i<HSIZE;i++) {
-       t = sym = EiC_HTAB[i];
-       p = NULL;
-       while(sym){
-           if(strcmp(sym->fname,FileName) == 0) {
-               if(p)
-                   p->next = sym->next;
-               else
-                   t = sym->next;
-               free_sym(sym);
-               if(!p) {
-                   sym = t;
-                   continue;
-               }
-           } else
-               p = sym;
-           sym=p->next;
-       }
-       EiC_HTAB[i] = t;
-    }
-    return 1;
-
-}
-                    /*END CUT*/
-                     /*CUT lutCleanUp*/
-
-void EiC_lut_CleanUp(size_t bot)
-{
-
-    int i;
-    symentry_t * sym, *p, *t;
-    for(i=0;i<HSIZE;i++) {
-       t = sym = EiC_HTAB[i];
-       p = NULL;
-       while(sym){
-           if(sym->entry >= bot) {
-               if(EiC_gettype(sym->type) == t_builtin) {
-                   remBuiltin(sym);
-                   p = sym;
-               } else {
-                   if(p)
-                       p->next = sym->next;
-                   else
-                       t = sym->next;
-                   free_sym(sym);
-                   if(!p) {
-                       sym = t;
-                       continue;
-                   }
-               }
-           } else
-               p = sym;
-           sym=p->next;
-       }
-       EiC_HTAB[i] = t;
-    }
-
-}
-                     /*END CUT*/
-                     /*CUT lutFreeSym*/
-
-#define freeAg(X)   do {\
-                           symentry_t *x = X; \
-                           if(!isconst(x->type)) \
-                                xfree(EiC_ENV->AR[x->val.ival].v.p.p);\
-                           else xfree(x->val.p.p);\
-                   } while (0)
-
-
-#define freeAg1(X)  xfree(EiC_ENV->AR[X->val.ival].v.p.p)
-
-
-static void free_sym(symentry_t *sym)
-{
-
-#if 0    
-      printf("Freeing [%s] %d  %d [%d]\n",
-       sym->id, sym->entry, sym->val.ival,EiC_gettype(sym->type));
-    
-#endif    
-    
-    if(EiC_gettype(sym->type) == t_func) {
-       EiC_killcode(sym);
-    } else if(sym->level == 1)  { /* global value */
-       int t;
-       if((t=EiC_gettype(sym->type)) == t_array && sym->val.ival >=0) 
-           freeAg(sym);
-       else if ((t== t_union || t == t_struct) && sym->val.ival >=0 ) 
-           freeAg(sym);
-               
-    }
-
-
-    /*
-     * the conditions for pushing  onto the ARgar stack
-     * must be the same as those for stacking as found in
-     * function establish_id
-     * Except for ParseError
-     */
-    if( sym->val.ival >=0
-       && sym->level == 1
-       && EiC_gettype(sym->type) != t_builtin ) {
-       if(! isconst(sym->type)
-          && sym->nspace == stand_tab
-          && sym->sclass != c_typedef) {
-           EiC_eicpush(&EiC_ENV->ARgar,sym->val);
-       }
-    }
-    EiC_freetype(sym->type);
-    xfree(sym->id);
-    xfree(sym);
-}
-                        /*END CUT*/
-
-void EiC_UpdateEntry(symentry_t *sym)
-{
-    int t = EiC_gettype(sym->type);
-    if(CurrentFileName() != sym->fname &&
-       t != t_func &&
-       t != t_funcdec &&
-       t != t_builtin)
-       return;
-    sym->entry =  _EnTrY_No++;
-    sym->pname = sym->fname;
-    sym->fname = CurrentFileName();
-}
-
-void EiC_addoffsettolevel(char nspace,int level,int off)
-{
-    int i;
-    symentry_t * sym;
-
-    for(i=0;i<HSIZE;i++) {
-       sym = EiC_HTAB[i];
-       while(sym && sym->level == level && sym->nspace == nspace) {
-           sym->val.ival = -(sym->val.ival + off);
-           sym = sym->next;
-       }
-    }
-}
-
-void EiC_marktype(type_expr *type, char mark)
-{
-    int i;
-    struct_t *s;
-    void EiC_markFunc(type_expr *t,int mark);
-    
-    while(type) {
-       xmark(type,mark);
-       switch(EiC_gettype(type)) {
-         case t_builtin:
-           if(EiC_getInf(type) == NULL)
-               break;
-         case t_funcdec:
-         case t_func:
-           EiC_markFunc(type,mark);
-           break;
-         case t_union:
-         case t_struct:
-           if(type->alias)
-               break;
-           s = EiC_getInf(type);
-           /*
-            * REM must allow for incomplete
-            * types.
-            */
-           if(!s)
-               break;
-           xmark(s,mark);
-           if(!s->cl)
-               break;
-           xmark(s->offset,mark);
-           xmark(s->id,mark);
-           xmark(s->type,mark);
-           for(i=0;i<s->n;i++) {
-               xmark(s->id[i],mark);
-               EiC_marktype(s->type[i],mark);
-           }
-           if(s->ntags) {
-               xmark(s->tag,mark);
-               for(i=0;i<s->ntags;++i)
-                   EiC_marktype(s->tag[i],mark);
-           }
-           break;
-       }
-       type = nextType(type);
-    }
-}
-
-static void marklabel(Label_t *l,char mark) 
-{
-    while(l) {
-       xmark(l,mark);
-       xmark(l->name,mark);
-       l = l->nxt;
-    }
-}
-
-static void markcode(symentry_t *sym,char mark)
-{
-    int i;
-    InsT_t *inst;
-    code_t * code;
-    code = EiC_ENV->AR[sym->val.ival].v.p.p;
-    xmark(code,mark);
-    xmark(code->inst,mark);
-    marklabel(code->labels,mark);
-    marklabel(code->gotos,mark);
-
-    inst = code->inst;
-    for(i=0;i<code->nextinst;i++,inst++)
-       if(inst->opcode == jmptab) {
-           eicstack_t * s;
-           s = inst->val.p.p;
-           xmark(s->val,mark);
-           xmark(s,mark);
-       } else if(inst->opcode == assigntype)
-           EiC_marktype(inst->val.p.p,mark);
-}
-
-
-void EiC_marksyms(char mark)
-{
-    void EiC_markmacros(char);
-    void EiC_markENV(char);
-    
-    int i;
-    symentry_t * sym;
-
-    EiC_markmacros(mark);
-    
-    if(EiC_ENV->AR)
-       xmark(EiC_ENV->AR,mark);
-    if(EiC_ENV->ARgar.n) 
-       xmark(EiC_ENV->ARgar.val,mark);
-    if(EiC_ENV->LAR)
-       xmark(EiC_ENV->LAR,mark);
-    if(EiC_ENV->CODE.nextinst)
-       xmark(EiC_ENV->CODE.inst,mark);
-    xmark(EiC_ENV,mark);
-
-    EiC_markENV(mark);
-    
-    for(i=0;i<HSIZE;i++) {
-       sym = EiC_HTAB[i];
-       while(sym) {
-           /*printf("marking %s\n",sym->id);*/
-           if(strcmp(sym->id,"p") == 0)
-             sym->id = sym->id;
-           xmark(sym,mark);
-           xmark(sym->id,mark);
-           EiC_marktype(sym->type,mark);           
-           if(sym->nspace != tag_tab)
-               switch(EiC_gettype(sym->type)) {
-                 case t_func: markcode(sym,mark); break;
-                 case t_array:
-                 case t_union:
-                 case t_struct:
-                   if(isconst(sym->type))
-                      xmark(sym->val.p.p,mark);
-                   else
-                       if(sym->sclass != c_typedef && sym->val.ival >= 0)
-                           xmark(EiC_ENV->AR[sym->val.ival].v.p.p,mark);
-                   break;
-               }
-           sym = sym->next;
-       }
-    }
-}
-
-
-char * EiC_strsave(char *s)
-{
-    char *p;
-    int n;
-
-    for(n = 0,p =s; *p != '\0';++p,++n)
-       ;
-    n++;
-    p = xcalloc(n,sizeof(char));
-    if(p) 
-       while((*p++ = *s++));
-    return p - n;
-}
-
-void EiC_newsymtype(symentry_t *sym, type_expr *t)
-{
-    if(sym) {
-       if(sym->type && sym->type != t)
-           EiC_freetype(sym->type);
-       sym->type = t;
-    }
-}
-
-int nextstackitem(int level)
-{
-    if(level == 1) {           /* static variables */
-       val_t v;
-       if(!EiC_eicpop(&EiC_ENV->ARgar,&v))  { /* check for spare slots */
-           if(EiC_ENV->sp == EiC_ENV->ARsize) {
-               if(!EiC_ENV->ARsize)
-                   EiC_ENV->AR = (AR_t*)xcalloc(sizeof(AR_t),1);
-               else
-                   EiC_ENV->AR = (AR_t*)xrealloc(EiC_ENV->AR,
-                                             (EiC_ENV->sp+1)*sizeof(AR_t));
-               EiC_ENV->ARsize++;
-           }
-           v.ival = EiC_ENV->sp;
-           EiC_ENV->sp++;
-       }
-       return v.ival;
-    } else {                   /* automatic variables */
-       if(EiC_ENV->lsp == EiC_ENV->LARsize) {
-           if(!EiC_ENV->LARsize)
-               EiC_ENV->LAR = (AR_t*)xcalloc(sizeof(AR_t),1);
-           else
-               EiC_ENV->LAR = (AR_t*)xrealloc(EiC_ENV->LAR,(EiC_ENV->lsp+1)*
-                                          sizeof(AR_t));
-           EiC_ENV->LARsize++;
-       }
-       EiC_ENV->lsp++;
-       return EiC_ENV->lsp - 1;
-    }
-}
-
-int EiC_stackit(symentry_t * sym,int level)
-{
-    int i;
-    AR_t * ar;
-    
-    i = nextstackitem(level);
-    if(level == 1)             /* static variables */
-       ar = EiC_ENV->AR;
-    else                       /* local variable */    
-       ar = EiC_ENV->LAR;
-
-    sym->val.ival = i;
-
-    ar[i].v.dval = 0; /* NULL it */
-    ar[i].type = sym->type;
-    return i;
-}
-
-
-/*------------------------------------------------*/
-void EiC_inittoken(token_t * e1)
-{
-    e1->Pflag = 0;
-    e1->Code.binst = e1->Code.nextinst = 0;
-    e1->Code.labels = e1->Code.gotos = NULL;
-    e1->Typequal = e1->Sclass = 0;
-    e1->Sym = NULL;
-    e1->Val.sym = NULL;
-    e1->Type = NULL;
-}
-void EiC_freetoken(token_t * e1)
-{
-    EiC_freetype(e1->Type);
-    e1->Type = NULL;
-}
-void initcode(code_t * code)
-{
-    code->binst = code->nextinst = 0;
-}
-
-
-void EiC_cleancode(code_t * code)
-{
-    unsigned int i;
-    InsT_t *inst;
-
-    if(!code)
-       return;
-    inst = code->inst;
-    /* printf("Next instr: %d\n", code->nextinst); */
-    /* rem free up other info also */
-    for(i=0;i<code->nextinst;i++,inst++)
-       if(inst->opcode == jmptab) {
-           eicstack_t *s;
-           s = inst->val.p.p;
-           xfree(s->val);
-           xfree(s);
-       } else if(inst->opcode == assigntype)
-           EiC_freetype(inst->val.p.p);
-
-}    
-
-static void freeCodeLabels(code_t *code)
-{
-    void EiCp_freeLabels(Label_t *lab);
-    if(code->labels) {
-       EiCp_freeLabels(code->labels);
-       code->labels = NULL;
-    }
-    if(code->gotos) {
-       EiCp_freeLabels(code->gotos);
-       code->gotos = NULL;
-    }
-}
-
-void EiC_killcode(symentry_t *sym)
-{
-    code_t * code;
-    code = EiC_ENV->AR[sym->val.ival].v.p.p;
-    if(!code)
-       return;
-    EiC_cleancode(code);
-    freeCodeLabels(code);
-    xfree(code->inst);
-    xfree(code);
-}
-void EiC_freecode(code_t * code)
-{
-
-    if(code && code->binst > 0) {
-       xfree(code->inst);
-       code->nextinst = code->binst = 0;
-       freeCodeLabels(code);
-    }
-}
-
-#define ModSize 5
-
-void EiC_generate(code_t * code, int opcode,val_t *val,int ext)
-{
-    InsT_t * inst;
-    inst = code->inst;
-    if(code->nextinst == code->binst)
-       if(!(code->binst%ModSize)) {
-           if(!code->binst)
-               inst = (InsT_t*)xcalloc(1,sizeof(InsT_t)*ModSize);
-           else
-               inst = (InsT_t*)
-                   xrealloc(inst,(code->binst+ModSize)*sizeof(InsT_t));
-           code->binst += ModSize;
-       }
-    code->inst = inst;
-    inst[code->nextinst].opcode = opcode;
-    inst[code->nextinst].val = *val;
-    inst[code->nextinst].ext = ext;
-    inst[code->nextinst].line = CurrentLineNo();
-    code->nextinst++;
-}
-
-#if 0
-void copycode(code_t * c1, code_t * c2)
-{
-    /* this function needs to handle label and gotos */
-    unsigned int i;
-    InsT_t *inst;
-    inst = c2->inst;
-    for(i=0;i<c2->nextinst;++i,++inst) {
-       EiC_generate(c1,inst->opcode,&inst->val,inst->ext);
-       c1->inst[c1->nextinst-1].line = inst->line;
-    }
-}
-#else
-void copycode(code_t * c1, code_t * c2)
-{
-    Label_t * EiCp_addLabel(Label_t *, char *, int, int);
-    InsT_t *inst;
-    int h, Tsize;
-    Label_t *lab;
-
-    if(!c2->nextinst)
-       return;
-    /* concatenate labels*/
-    if(c2->labels) {
-       lab = c2->labels;
-       while(lab) {
-           c1->labels = EiCp_addLabel(c1->labels,lab->name,lab->loc+c1->nextinst,1);
-           lab = lab->nxt;
-       }
-    }
-    /* conatenate gotos */
-    if(c2->gotos) {
-       lab = c2->gotos;
-       while(lab) {
-           c1->gotos = EiCp_addLabel(c1->gotos,lab->name,lab->loc+c1->nextinst,0);
-           lab = lab->nxt;
-       }
-    }
-
-    Tsize = c1->nextinst + c2->nextinst;
-    /* make memory size a multiple of ModSize */
-    h = Tsize;
-    if(Tsize%ModSize) 
-       Tsize += ModSize - (Tsize%ModSize);
-    if(c1->binst)
-       c1->inst = xrealloc(c1->inst,Tsize*sizeof(InsT_t));
-    else
-       c1->inst = xcalloc(Tsize,sizeof(InsT_t));
-    inst = c1->inst;
-    memcpy(&inst[c1->nextinst], c2->inst, c2->nextinst * sizeof(InsT_t));
-    c1->binst = Tsize;
-    c1->nextinst = h;
-}
-
-#endif
-
-void EiC_concode(code_t * c1, code_t * c2)
-{
-    copycode(c1,c2);
-    EiC_freecode(c2);
-}
-void EiC_contoken(token_t * e1, token_t * e2)
-{
-    EiC_concode(&e1->Code,&e2->Code);
-    e1->Type = EiC_getcontype(e1->Type,e2->Type);
-    EiC_freetoken(e2);
-}
-
-void EiC_swaptokens(token_t *e1, token_t * e2)
-{
-    token_t e3;
-    e3 = *e2;
-    *e2 = *e1;
-    *e1 = e3;
-}
-    
-
-#if 0
-
-typedef struct list_t {
-    char * fname;
-    struct list_t *nxt;
-}list_t;
-
-
-typdef struct llist_t {
-    list_t **list;
-    int n;
-} llist_t;
-
-static llist_t ** includes = NULL, ** included = NULL;
-
-static int inllist(llist_t **list, char *fname)
-{
-    /* returns -1 if not in list */
-    int i;
-    for(i=0;i<list->n,++i) {
-       if(fname == list->list[i]->fname == 0)
-           return i;
-    }
-    return -1;
-}
-
-static list_t * add2list(list_t *list, char *fname)
-{
-   list_t n = calloc(sizeof(list_t),1);
-   n->fname = fname;
-   n->nxt = list;
-   return n;
-}
-
-
-static void add2includes(char *file, char * includes)
-{
-    int i = inlist(includes,file);
-
-    if(i < 0) {
-       i = includes->n;
-       includes->list = realloc(includes->list, 
-                                (includes->n + 1) * sizeof(*includes->list));
-       
-       includes->list = 
-       includes
-
-
-
-
-
-#endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-