/*  $VER: vbcc (vars.c) V0.3    */

#include "vbc.h"

char *typname[]={"strange","char","short","int","long","float","double","void",
                 "pointer","array","struct","union","enum","function"};
char *storage_class_name[]={"strange","auto","register","static","extern","typedef"};

char *s,*ident;
char string[MAXINPUT],number[MAXI],buff[MAXI];
struct struct_declaration *first_sd[MAXN],*last_sd[MAXN],*merk_sdf,*merk_sdl;
struct struct_identifier *first_si[MAXN],*last_si[MAXN],*merk_sif,*merk_sil;
struct identifier_list *first_ilist[MAXN],*last_ilist[MAXN],*merk_ilistf,*merk_ilistl;
struct llist *first_llist,*last_llist;
int nesting;
char *empty="";
struct Var *first_var[MAXN],*last_var[MAXN],*merk_varf,*merk_varl;

zchar vchar; zuchar vuchar;
zshort vshort; zushort vushort;
zint vint; zuint vuint;
zlong vlong; zulong vulong;
zfloat vfloat; zdouble vdouble;
zpointer vpointer;

int DEBUG,MDEBUG=0;

int label=0;

FILE *out,*ic1,*ic2,*ppout;

int nocode;
int registerpri=200,currentpri=0,looppri=10;
int return_label,return_value,break_label,switch_typ,switch_count=0,switch_act=0;
struct Typ *return_typ;
struct Var *return_var;
int local_offset[MAXN];

int c_flags[MAXCF]={
    VALFLAG,STRINGFLAG,0,0,
    VALFLAG,0,0,0,
    VALFLAG,FUNCFLAG,FUNCFLAG,VALFLAG,
    VALFLAG,0,0,0,
    0,0,0
};
char *c_flags_name[MAXCF]={
    "O","o","ic1","ic2",
    "debug","noasm","quiet","ansi",
    "maxerrors","dontwarn","warn","maxoptpasses",
    "inline-size","nested-comments","cpp-comments","macro-redefinition",
    "no-trigraphs","no-preprocessor","E"
};
union ppi c_flags_val[MAXCF];

char *inname;

int max_offset,function_calls;

struct const_list *first_clist=0,*last_clist=0;

int afterlabel;

int goto_used;

struct err_out err_out[]={
#include "errors.h"
"",0
};
int err_num=sizeof(err_out)/sizeof(struct err_out)-1;

int ic_count;

int lastlabel;

char *copyright="vbcc V0.3 (c) in 1995-96 by Volker Barthelmann\n";
