#line 56 "./src/implbla.nw"
class BlaReader;
class STLightItem {
friend class STLight;
protected:
	STLightItem* next;
	char* son;
	STLightItem(char* s, STLightItem* n){
		son = s; next = n;	
	}
};
class STLight {
	
#line 81 "./src/implbla.nw"
static const int hash_size = 51;
STLightItem* hash_table[hash_size];
#line 95 "./src/implbla.nw"
int hash_code(const char* nme);
#line 68 "./src/implbla.nw"
public:
	STLight(){
		
#line 86 "./src/implbla.nw"
int i;
for(i = 0; i < hash_size; i++){
	hash_table[i] = (STLightItem*)NULL;
}
#line 71 "./src/implbla.nw"
	}
	
#line 121 "./src/implbla.nw"
char* find(char* nme);
const char* add(const char* nme);
#line 73 "./src/implbla.nw"
};
#line 124 "./src/apibla.nw"
enum BlaItem {
	
#line 150 "./src/apibla.nw"
	BLA_EOF,
#line 158 "./src/apibla.nw"
	BLA_INT,
#line 166 "./src/apibla.nw"
	BLA_FLOAT,
#line 174 "./src/apibla.nw"
	BLA_PRAGMA,
#line 182 "./src/apibla.nw"
	BLA_END_PRAGMA,
#line 190 "./src/apibla.nw"
	BLA_STRING,
#line 198 "./src/apibla.nw"
	BLA_ERROR,
#line 126 "./src/apibla.nw"
	NB_BlaItem
};
#line 6 "./src/apibla.nw"
class BlaReader {
	
#line 13 "./src/implbla.nw"
FILE* infile;
int (*infunction)();
#line 157 "./src/implbla.nw"
STLight* pragmas;
#line 177 "./src/implbla.nw"
char buffer[1024];
BlaItem curitem;
#line 189 "./src/implbla.nw"
int cur_char;
#line 196 "./src/implbla.nw"
int get_char_buff_cpt;
int get_char_buff[5];
#line 206 "./src/implbla.nw"
void get_char(){
	if(get_char_buff_cpt){
		cur_char = get_char_buff[--get_char_buff_cpt];
	} else {
		cur_char = (infile)? fgetc(infile) : (*infunction)();
	}
}
#line 215 "./src/implbla.nw"
void unget_and_restore(int c){
	get_char_buff[get_char_buff_cpt++] = cur_char;
	cur_char = c;
}
#line 240 "./src/implbla.nw"
char* curpragma;
int par_pragma_mode;
int line_pragma_mode;
#line 487 "./src/implbla.nw"
void ignore_line();
void ignore_comment();
#line 8 "./src/apibla.nw"
public:
	
#line 85 "./src/apibla.nw"
static const char* version(){ return "1"; }
#line 101 "./src/apibla.nw"
BlaReader(int (*f)());
BlaReader(FILE* in);
BlaReader();
#line 132 "./src/apibla.nw"
const char* item_name(BlaItem it);
#line 210 "./src/apibla.nw"
const char* add_pragma(const char* prag);
#line 221 "./src/apibla.nw"
BlaItem get();
#line 226 "./src/apibla.nw"
BlaItem get(char** val);
#line 233 "./src/apibla.nw"
BlaItem cur_item();
char* cur_string();
#line 10 "./src/apibla.nw"
};
