#include #include "ndirlexer.h" class NDirList : public NDirLexer { public: NDirList(istream* = 0, ostream* = 0); ~NDirList(); protected: virtual int PathUpdate(const NDirPath&); virtual int FileUpdate(const NDirFile&); virtual int DirectoryUpdate(const NDirDirectory&); virtual int ErrorUpdate(); private: char* path; }; NDirList::NDirList(istream* is, ostream* os) : NDirLexer(is, os), path(NULL) { } NDirList::~NDirList() { if(path) delete[] path; } int NDirList::PathUpdate(const NDirPath& npath) { int _i = 0; if(path) { delete[] path; path = NULL; } if(npath.Server()) _i = strlen(npath.Server()); if(npath.Volume()) _i += strlen(npath.Volume()); if(npath.Path()) _i += strlen(npath.Path()); if((path = new char[_i + 4]) == NULL) return 0; path[0] = '\0'; if(npath.Server()) { strcat(path, npath.Server()); strcat(path, "\\"); } if(npath.Volume()) { strcat(path, npath.Volume()); strcat(path, ":"); } if(npath.Path()) { strcat(path, npath.Path()); strcat(path, "\\"); } return 1; } int NDirList::FileUpdate(const NDirFile& file) { cout << path; cout << file.File(); if(file.Extension()) cout << "." << file.Extension(); cout << "\n"; return 1; } int NDirList::DirectoryUpdate(const NDirDirectory& dir) { cout << path; cout << dir.Directory(); if(dir.Extension()) cout << "." << dir.Extension(); cout << "\\\n"; return 1; } int NDirList::ErrorUpdate() { return 0; } int main() { NDirList ndirlexer; ndirlexer.yylex(); }