class lex : public lex_scanner {
protected:
iter<term>* _yacc;
int so; int cd; int comment;
void unso() { so = 0; cd = 0; comment = 0; }
//int argc;
//char argv[12][80];
public:
lex(istream* in = &cin, ostream* out = &cout ) : lex_scanner(in,out) {
unso(); _yacc = 0;
}
//~lex() { in << endl; }
term* operator()();
virtual void process(istream* xin) {
lex l(xin);
l();
}
void paths(int argc, char argv[24][256]) {
//void paths(int argc, char** argv) {
//cerr << "Calling paths" << endl;
::the_paths(argc,argv);
//cerr << "Called paths" << endl;
}
void files(char* s, char* ext) {
int argc=0;
char argv[12][80];
cerr << "FILES: " << s << endl;
argc = unflatten(s,argv);
for( int i = 1; i <= argc; i++ ) {
//cerr << "Reading:" << argv[i] << "***" << endl;
(*yyout) << endl;
soinc(argv[i],ext);
(*yyout) << endl;
//cerr << "end reading:" << argv[i] << "***" << endl;
}
}
void directories(char* s, char* ext, char* f = 0) {
int argc=0;
char argv[12][80];
//cerr << "DIRS: " << s << endl;
argc = unflatten(s,argv);
for( int i = 1; i <= argc; i++ ) {
//cerr << "reading " << argv[i];
char buf[1024];
strcpy(buf,_prefix);
cerr << "ORIG PREFIX " << _prefix << endl;
cdinc(argv[i],f,ext);
strcpy(_prefix,buf);
cerr << "RESTORING PREFIX " << _prefix << endl;
}
}
void soinc(char* s, char* ext = "") {
lex_file f(s,ext);
istream* xin = f.stream();
this->process(xin);
}
void cdinc(char* s, char* f = 0, char* ext = "") {
if (f && !strcmp(f,"")) f = 0;
(*yyout) << endl;
prefix(s);
cerr << "PREFIX " << _prefix << endl;
lex_directory x(s,ext);
char buf[1024];
sprintf(buf,"%s",f?f:strip(s));
//cerr << "Getting " << buf << endl;
soinc( buf, ext);
//soinc( strip(s), ext);
//istream* xin = f.stream();
//this->process(xin);
}
};
slide: lex