/*=========================================================================== * * File: ConApp.H * Author: Dave Humphrey (uesp@m0use.net) * Created On: Wednesday, December 06, 2000 * * Defines the class CConsoleApp, used as a base class for simple * console (or command line) programs. * *=========================================================================*/ #ifndef __CONAPP_H #define __CONAPP_H /*=========================================================================== * * Begin Required Include Files * *=========================================================================*/ #include "dl_base.h" #include "dl_err.h" #include "dl_str.h" #include "dl_file.h" /*=========================================================================== * End of Required Include Files *=========================================================================*/ /*=========================================================================== * * Begin Defines * *=========================================================================*/ /* Defines a standard main routine */ #define STANDARD_CONSOLEAPP_MAIN(AppName) int main (int ArgCount, char* pArgs[]) { \ return AppName.StartConsoleApp(ArgCount, &pArgs[0]); } /* Custom class errors */ #define ERRCONAPP_NOHELP 2001 #define ERRCONAPP_BADLINESPERPAGE 2002 /*=========================================================================== * End of Defines *=========================================================================*/ /*=========================================================================== * * Begin Structure and Type Definitions * *=========================================================================*/ /* Used to determine the type of release */ typedef enum { RELEASE_UNKNOWN, RELEASE_DEBUG, RELEASE_ALPHA, RELEASE_BETA, RELEASE_FINAL } release_t; /* Return values for command line parameter parsing */ typedef enum { CMDPARSE_FAILED = -1, CMDPARSE_NOTPARSED = 0, CMDPARSE_SUCCESS = 1 } cmdparse_t; /*=========================================================================== * End of Structure and Type Definitions *=========================================================================*/ /*=========================================================================== * * Begin Class CConsoleApp Definition * * Defines a base class from which applications can derive from to get * simple support for a console application. * *=========================================================================*/ class CConsoleApp { /*---------- Begin Private Class Members ----------------------*/ private: FILE* pOutputStream; /* Destination of output */ int NumArguments; /* The program arguments data */ char** pArguments; /* Pointer to array of arguments */ char* pProgramName; /* Program name as given by argv[0] */ char* pAppName; /* Program information */ char* pAppDate; char* pAppAuthor; char* pCompiledDate; int MajorVersion; /* Versioning information */ int MinorVersion; release_t ReleaseType; int BuildNumber; boolean DoParseCommands; /* Command line argument options */ boolean DoParseParameters; boolean DoFlagParsing; boolean DisplayTitle; /* Display optioms */ boolean DoOpenLog; boolean DoPaging; /* Paging options */ int LinesPerPage; int OutputLineCount; char** ppHelpText; /* Help text for the application */ /*---------- Begin Protected Class Methods --------------------*/ protected: /* Registers any custom class errors */ static boolean AddClassErrors (void); /* Parses all the command line parameters */ virtual boolean ParseAllParameters (void); /* Parse the given command string */ virtual cmdparse_t ParseCommand (char* pCommand, const boolean Flag = TRUE); virtual cmdparse_t ParsePagingCommand (char* pString, const boolean Flag); /* Parse the given parameter string */ virtual cmdparse_t ParseOneParameter (char* pString); virtual cmdparse_t ParseParameter (char* pString); /* Main override for derived classes */ virtual int StartApp (void); /*---------- Begin Public Class Methods -----------------------*/ public: /* Class Constructors/Destructors */ CConsoleApp(); virtual ~CConsoleApp() { Destroy(); } virtual void Destroy (void); /* Aborts the program outputting an error message */ virtual void AbortProgram (void); /* Get class members */ virtual char* GetAppName (void); // virtual char* GetAppDate (void); // virtual char* GetAppAuthor (void); // virtual char* GetCompiledDate (void); // virtual int GetMajorVersion (void); // virtual int GetMinorVersion (void); // virtual int GetBuildNumber (void); // virtual release_t GetBuildType (void); /* Opens the standard log file for debug builds */ virtual boolean OpenLog (void); /* Outputs the help screen for the program */ virtual boolean OutputHelp (void); /* Outputs a title information to the current output stream */ virtual boolean OutputTitle (void); virtual boolean OutputVersion (void); /* Outputs a line printf() style to the desired output stream */ virtual boolean PrintLine (const char* pString = NULL, ...); /* Set class members */ virtual void SetVersion (const int Major, const int Minor, const release_t Type); virtual void SetMajorVersion (const int Major); virtual void SetMinorVersion (const int Minor); virtual void SetReleaseType (const release_t Type); virtual void SetBuildNumber (const int Value); virtual void SetAppName (const char* pString); virtual void SetAppDate (const char* pString); virtual void SetAppAuthor (const char* pString); virtual void SetCompiledDate (const char* pString); virtual void SetHelpText (char** pText); virtual void SetDoPaging (const boolean Flag); virtual void SetDoOpenLog (const boolean Flag); /* Entry point for the class from main() */ virtual int StartConsoleApp (const int ArgC, char* Argv[]); }; /*=========================================================================== * End of Class CConsoleApp Definition *=========================================================================*/ /*=========================================================================== * * Begin Class CConsoleApp Inline Methods * *=========================================================================*/ /* Get class members */ inline char* CConsoleApp::GetAppName (void) { return (pAppName); } /* Main protected override for derived classes */ inline int CConsoleApp::StartApp (void) { return (EXIT_SUCCESS); } /* Set the application version information */ inline void CConsoleApp::SetVersion (const int Major, const int Minor, const release_t Type) { MajorVersion = Major; MinorVersion = Minor; ReleaseType = Type; } /* Set the version members of application */ inline void CConsoleApp::SetMajorVersion (const int Major) { MajorVersion = Major; } inline void CConsoleApp::SetMinorVersion (const int Minor) { MinorVersion = Minor; } inline void CConsoleApp::SetReleaseType (const release_t Type) { ReleaseType = Type; } inline void CConsoleApp::SetBuildNumber (const int Value) { BuildNumber = Value; } /* Change the program identification strings */ inline void CConsoleApp::SetAppName (const char* pString) { ReplaceString(&pAppName, pString); } inline void CConsoleApp::SetAppDate (const char* pString) { ReplaceString(&pAppDate, pString); } inline void CConsoleApp::SetCompiledDate (const char* pString) { ReplaceString(&pCompiledDate, pString); } inline void CConsoleApp::SetAppAuthor (const char* pString) { ReplaceString(&pAppAuthor, pString); } inline void CConsoleApp::SetHelpText (char** ppText) { ppHelpText = ppText; } /* Set paging options */ inline void CConsoleApp::SetDoPaging (const boolean Flag) { if (DoPaging != Flag) OutputLineCount = 0; DoPaging = Flag; } /* Set log options */ inline void CConsoleApp::SetDoOpenLog (const boolean Flag) { DoOpenLog = Flag; } /*=========================================================================== * End of Class CConsoleApp Inline Methods *=========================================================================*/ /*=========================================================================== * * Begin Function Prototypes * *=========================================================================*/ /* Return the current console application object */ CConsoleApp* GetConsoleApp (void); /* Converts a release type to a printable output character */ char ReleaseTypeToChar (const release_t ReleaseType); /*=========================================================================== * End of Function Prototypes *=========================================================================*/ #endif /*=========================================================================== * End of File ConApp.H *=========================================================================*/