/*=========================================================================== * * File: GOutput.H * Author: Dave Humphrey (uesp@m0use.net) * Created On: Wednesday, March 28, 2001 * * Defines the class CGenOutput used for dealing with general format type * files. * *=========================================================================*/ #ifndef __GOUTPUT_H #define __GOUTPUT_H /*=========================================================================== * * Begin Required Include Files * *=========================================================================*/ #include "dl_base.h" #include "dl_mem.h" #include "dl_err.h" #include "dl_log.h" #include "dl_str.h" #include "dl_chr.h" /*=========================================================================== * End of Required Include Files *=========================================================================*/ /*=========================================================================== * * Begin Structure and Type Definitions * *=========================================================================*/ /* Output format mask type */ #define OUTPUT_MASK_WIDTH (1) #define OUTPUT_MASK_PRECISION (2) #define OUTPUT_MASK_TYPE (4) #define OUTPUT_MASK_ALL (0xFFFF) typedef long outputmask_t; /* Output format structure */ typedef struct { int Width; int Precision; char Type; outputmask_t Mask; } COutputFormat; /* User output function type */ typedef boolean (*PUSER_OUTPUT_FUNC) (const COutputFormat& Format, FILE* pOutputFile, void* pUserData); typedef boolean (USER_OUTPUT_FUNC) (const COutputFormat& Format, FILE* pOutputFile, void* pUserData); /*=========================================================================== * End of Structure and Type Definitions *=========================================================================*/ /*============================================================================ * * Class CGenOutput Definition * * This class simply reads in a sepcified text file and then outputs * it to the user as requested. The file contains format codes as per * printf() which are parsed and replaced by data specified by the user. * *==========================================================================*/ class CGenOutput { /*---------- Begin Private Member Definitions -----------------------*/ private: char* pDefaultBuffer; /* The default data if no file was specified */ char* pFileBuffer; /* The file data */ PUSER_OUTPUT_FUNC UserFunction; /* The user supplied output function */ /*---------- Begin Protected Method Definitions ---------------------*/ protected: /* Parses a format field from the input string */ boolean ParseFormat (const char** ppParse, FILE* pOutputFile, void* pUserData); void ParseFormatWidth (const char** ppParse, COutputFormat& Format); void ParseFormatPrecision (const char** ppParse, COutputFormat& Format); /*---------- Begin Public Method Definitions ------------------------*/ public: /* Class Constructor and destructor */ CGenOutput(); CGenOutput (const char* pBuffer); CGenOutput (PUSER_OUTPUT_FUNC pFunction); CGenOutput (const char* pBuffer, PUSER_OUTPUT_FUNC pFunction); virtual ~CGenOutput(); virtual void Destroy (void); /* Get class members */ char* GetBuffer (void) const; /* Returns TRUE if object has a valid buffers */ inline boolean HasBuffer (void) const; inline boolean HasDefaultBuffer (void) const; inline boolean HasFileBuffer (void) const; /* Parse and output file to the given stream */ boolean OutputFile (FILE* pOutputFile, void* pUserData); /* Loads a file into the variable for later outputting */ boolean ReadFile (const char* pFilename); /* Class set memkbers */ void SetDefaultBuffer (const char* pString); void SetUserFunction (PUSER_OUTPUT_FUNC Func); }; /*============================================================================ * End of Class CGenOutput Definition *==========================================================================*/ /*=========================================================================== * * Begin Class CGenOutput Inline Methods * *=========================================================================*/ /* Class destructor */ inline CGenOutput::~CGenOutput() { Destroy(); } /* Returns the file buffer (or default buffer if no file has been loaded). * Returns the empty string "" if no buffers were defined. */ inline char* CGenOutput::GetBuffer (void) const { if (pFileBuffer != NULL) return (pFileBuffer); if (pDefaultBuffer != NULL) return (pDefaultBuffer); return (""); } /* Returns TRUE if object has a valid file and default buffers */ inline boolean CGenOutput::HasBuffer (void) const { return ((pFileBuffer == NULL && pDefaultBuffer == NULL) ? FALSE : TRUE); } /* Returns TRUE if object has a valid default buffer */ inline boolean CGenOutput::HasDefaultBuffer (void) const { return ((pDefaultBuffer == NULL) ? FALSE : TRUE); } /* Returns TRUE if object has a valid file buffer */ inline boolean CGenOutput::HasFileBuffer (void) const { return ((pFileBuffer == NULL) ? FALSE : TRUE); } /* Change the default buffer string */ inline void CGenOutput::SetDefaultBuffer (const char* pString) { ReplaceString(&pDefaultBuffer, pString); } /* Set the user defined parsing function */ inline void CGenOutput::SetUserFunction (PUSER_OUTPUT_FUNC Func) { UserFunction = Func; } /*=========================================================================== * End of Class CGenOutput Inline Methods *=========================================================================*/ /*=========================================================================== * * Begin Test Function Prototypes * *=========================================================================*/ #if defined(_DEBUG) void Test_goutput (void); #endif /*=========================================================================== * End of Test Function Prototypes *=========================================================================*/ #endif /*=========================================================================== * End of File GOutput.H *=========================================================================*/