#ifndef __MAIN_H__ #define __MAIN_H__ #include #include /////////////////////////////////////////////////////////////////////////////// // From RLMan // Token flag Masks #define ISPOPUP 0x0001 #define ISCOR 0x0010 #define ISDUP 0x0020 #define ISCAP 0x0040 #define ISDLGFONTCHARSET 0x0002 #define ISDLGFONTNAME 0x0004 #define ISDLGFONTSIZE 0x0008 #define ISALIGN 0x0080 #define ISEXTSTYLE 0x0200 #define OLD_POPUP_ID 0x0100 #define ISKEY 0x0010 #define ISVAL 0x0020 // status bits #define ST_TRANSLATED 4 #define ST_READONLY 2 #define ST_NEW 1 #define ST_DIRTY 1 #define ST_CHANGED 4 #define MAX_STR_SIZE 8192 // Max Len of a string passed to WriteCon #define MAX_BUF_SIZE 8192 // Max ResItem Buffer size // Console flags #define CONOUT 0 // Used with WriteCon to send the message to stdout #define CONERR 1 // Used with WriteCon to send the message to stderr #define CONBOTH 2 // Used with WriteCon to send the message to stderr and stdout if not the same handle #define CONWRN 3 // Used with WriteCon to send the message to stderr only if WARNING enabled class CMainApp { public: // Error codes enum Error_Codes { ERR_NOERROR = 0x00000000, // ERR_COMMAND_LINE = 0x00000001, // Wrong command line ERR_TOKEN_MISMATCH = 0x00000002, // Token file don't match ERR_TOKEN_WRONGFORMAT = 0x00000004, // Token file are not in the right format ERR_FILE_OPEN = 0x00000100, // Cannot open the file ERR_FILE_COPY = 0x00000200, // Cannot copy the file ERR_FILE_CREATE = 0x00000400, // Cannot create the file ERR_FILE_NOTSUPP = 0x00000800, // This file type is not supported ERR_FILE_NOTFOUND = 0x00001000, // The file doesn't exist ERR_FILE_VERSTAMPONLY = 0x00002000, // The file has only version stamping ERR_HELP_CHOOSE = 0x00004000 // The user want to see the help file }; // Options Flags enum Option_Codes { NO_OPTION = 0x00000000, // Initializer WARNING = 0x00000001, // -w (Show warning messages) HELP = 0x00000002, // -? or -h (Show more complete help using winhelp) APPEND = 0x00000004, // -a (Append resources in localized tokens) REPLACE = 0x00000008, // -r (Replace resources in localized tokens, no checking) EXTRACT = 0x00000010, // -t (Extract token file) BITMAPS = 0x00000020, // -b (Extract bitmaps and icons) SPLIT = 0x00000040, // -s (Split the message table) NOLOGO = 0x00000080, // -n (Nologo) UPDATE = 0x00000100, // -u (Update the resources in localized file) FONTS = 0x00000200, // -f (Font information for dialog) PIPED = 0x00001000, // We have being piped to a file INPUT_LANG = 0x00002000, // -i (Input language resources set) OUTPUT_LANG = 0x00004000, // -o (Output language resources set) LEANAPPEND = 0x00010000, // -l (Do not append redudant resources) ALIGNMENT = 0x00020000, // -y (Extract static control alignment style info) GIFHTMLINF = 0x00040000, // -c (Extract embedded gifs, htmls and infs) NOVERSION = 0x00080000 // -v (Do not generate selected version stamp information) }; #if 0 enum Return_Codes { RET_NOERROR = 0x00000000, // RET_ID_NOTFOUND = 0x00000001, // An Id was not found RET_CNTX_CHANGED = 0x00000002, // Contex changed RET_RESIZED = 0x00000004, // item resized RET_INVALID_TOKEN = 0x00000008, // The token file is not valid RET_TOKEN_REMOVED = 0x00000010, // some token were removed RET_TOKEN_MISMATCH = 0x00000020, // The token mismatch RET_IODLL_ERROR = 0x00000040, // There is an error in IO RET_IODLL_WARNING = 0x00000080, // There is an warning in IO RET_FILE_VERSTAMPONLY = 0x00000100, // File has only version stamping RET_FILE_NORESOURCE = 0x00000200, // File has no resource RET_FILE_MULTILANG = 0x00000400, // File has multiple language RET_IODLL_CHKMISMATCH = 0x00000800, // Symbool checksum mismatch RET_FILE_CUSTOMRES = 0x00001000, // Contains custom resource. RET_IODLL_NOSYMBOL = 0x00002000, // Symbol file not found RET_FILE_NOSYMPATH = 0x00004000 // Output symbol path not found. }; #endif public: // Constructor CMainApp(); ~CMainApp(); // Operations Error_Codes ParseCommandLine(int argc, char ** argv); Error_Codes GenerateFile(); void Banner(); void Help(); BOOL IsFlag(Option_Codes dwFlag) { return ((m_dwFlags & dwFlag)==dwFlag); } int __cdecl WriteCon(int iFlags, const char * lpstr, ...); void AddNotFound() { m_wIDNotFound++; SetReturn(ERROR_RET_ID_NOTFOUND); } void AddChanged() { m_wCntxChanged++; SetReturn(ERROR_RET_CNTX_CHANGED); } void AddResized() { m_wResized++; SetReturn(ERROR_RET_RESIZED); } int ReturnCode() { return m_dwReturn; } // Language support WORD GetOutLang() { return ( MAKELANGID(m_usOPriLangId, m_usOSubLangId) ); } int SetReturn(int rc); int IoDllError(int iError); UINT GetUICodePage() { return m_uiCodePage; } private: // Attributes Option_Codes m_dwFlags; // Command line parameters int m_dwReturn; // Return codes // Console Handles HANDLE m_StdOutput; HANDLE m_StdError; // String Buffers CString m_strBuffer1; CString m_strBuffer2; BYTE * m_pBuf; // File Names CString m_strInExe; CString m_strOutExe; CString m_strSrcTok; CString m_strTgtTok; // Symbol Path Name CString m_strSymPath; CString m_strOutputSymPath; SHORT m_usIPriLangId; // Primary language ID for the input file SHORT m_usISubLangId; // Secondary language ID for the input file SHORT m_usOPriLangId; // Primary language ID for the output file SHORT m_usOSubLangId; // Secondary language ID for the output file UINT m_uiCodePage; // Code page to use during conversion char m_unmappedChar; // Default for unmappable characters // report counters WORD m_wIDNotFound; WORD m_wCntxChanged; WORD m_wResized; // Helper operators CString CalcTab(CString str, int tablen, char ch); USHORT GetLangID(CString strNum); UINT GetCodePage(CString strNum); LPCSTR Format(CString strTmp); LPCSTR UnFormat(CString strTmp); // Member functions Error_Codes BinGen(); Error_Codes TokGen(); Error_Codes DelRes(); }; ///////////////////////////////////////////////////////////////////////// // This is needed to make sure that the operator |= will work fine on the // enumerated type Option_Codes inline CMainApp::Option_Codes operator|=( CMainApp::Option_Codes &oc, int i ) { return oc = (CMainApp::Option_Codes)(oc | i); } #if 0 inline CMainApp::Error_Codes operator|=( CMainApp::Error_Codes &rc, int i ) { return rc = (CMainApp::Return_Codes)(rc | i); } #endif #pragma pack(1) typedef struct iconHeader { WORD idReserved; WORD idType; WORD idCount; BYTE bWidth; BYTE bHeight; BYTE bColorCount; BYTE bReserved; WORD wPlanes; WORD wBitCount; DWORD dwBytesInRes; DWORD dwImageOffset; } ICONHEADER; #pragma pack(8) #endif // __MAIN_H__