#include "ndirlexer.h" class MyNDirLexer : public NDirLexer { public: MyNDirLexer(istream* = 0, ostream* = 0); protected: virtual int StartUpdate(); virtual int PathUpdate(const NDirPath&); virtual int FilesStartUpdate(); virtual int FileUpdate(const NDirFile&); virtual int FilesEndUpdate(); virtual int DirectoriesStartUpdate(); virtual int DirectoryUpdate(const NDirDirectory&); virtual int DirectoriesEndUpdate(); virtual int FileStatsUpdate(const NDirFileStats&); virtual int BlockStatsUpdate(const NDirBlockStats&); virtual int TotalFileStatsUpdate(const NDirTotalFileStats&); virtual int TotalBlockStatsUpdate(const NDirTotalBlockStats&); virtual int ExitUpdate(); virtual int ErrorUpdate(); private: int foundfiles; }; MyNDirLexer::MyNDirLexer(istream* is, ostream* os) : NDirLexer(is, os), foundfiles(0) { } int MyNDirLexer::StartUpdate() { return 1; } int MyNDirLexer::PathUpdate(const NDirPath& path) { cout << path << "\n\n"; foundfiles = 0; return 1; } int MyNDirLexer::FilesStartUpdate() { cout << "Files: Size Last Updated Flags Owner\n"; cout << "----------------- ------------- --------------- -------------------- ---------\n"; foundfiles = 1; return 1; } int MyNDirLexer::FileUpdate(const NDirFile& file) { cout << file << "\n"; return 1; } int MyNDirLexer::FilesEndUpdate() { cout << "\n"; return 1; } int MyNDirLexer::DirectoriesStartUpdate() { if(!foundfiles) cout << "\n"; cout << " Inherited Effective\n"; cout << "Directories: Rights Rights Owner Created/Copied\n"; cout << "----------------- ----------------------- ------------ ----------------\n"; return 1; } int MyNDirLexer::DirectoryUpdate(const NDirDirectory& dir) { cout << dir << "\n";; return 1; } int MyNDirLexer::DirectoriesEndUpdate() { cout << "\n"; return 1; } int MyNDirLexer::FileStatsUpdate(const NDirFileStats& stats) { cout << stats << "\n"; return 1; } int MyNDirLexer::BlockStatsUpdate(const NDirBlockStats& stats) { cout << stats << "\n\n"; return 1; } int MyNDirLexer::TotalFileStatsUpdate(const NDirTotalFileStats& stats) { cout << stats << "\n"; return 1; } int MyNDirLexer::TotalBlockStatsUpdate(const NDirTotalBlockStats& stats) { cout << stats << "\n\n"; return 1; } int MyNDirLexer::ExitUpdate() { return 1; } int MyNDirLexer::ErrorUpdate() { cout << "ERROR!!!!!\n"; return 0; } int main() { MyNDirLexer ndirlexer; ndirlexer.yylex(); }