diff options
Diffstat (limited to 'examples/windoze/bcowl25/multimod/swrdabtd.cpp')
-rw-r--r-- | examples/windoze/bcowl25/multimod/swrdabtd.cpp | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/examples/windoze/bcowl25/multimod/swrdabtd.cpp b/examples/windoze/bcowl25/multimod/swrdabtd.cpp new file mode 100644 index 0000000..ca43db2 --- /dev/null +++ b/examples/windoze/bcowl25/multimod/swrdabtd.cpp @@ -0,0 +1,175 @@ +/* Project sword + + GNU Copyleft GPL © 1995. Almost No Rights Reserved. + + SUBSYSTEM: sword.exe Application + FILE: swrdabtd.cpp + AUTHOR: The Sword Project Team + + + OVERVIEW + ======== + Source file for implementation of swordAboutDlg (TDialog). +*/ + + +#include <owl\owlpch.h> +#pragma hdrstop + +#if !defined(__FLAT__) +#include <ver.h> +#endif + +#include "swordapp.h" +#include "swrdabtd.h" + + +ProjectRCVersion::ProjectRCVersion (TModule *module) +{ + char appFName[255]; + char subBlockName[255]; + DWORD fvHandle; + UINT vSize; + + FVData = 0; + + module->GetModuleFileName(appFName, sizeof(appFName)); + OemToAnsi(appFName, appFName); + DWORD dwSize = ::GetFileVersionInfoSize(appFName, &fvHandle); + if (dwSize) { + FVData = (void FAR *)new char[(UINT)dwSize]; + if (::GetFileVersionInfo(appFName, fvHandle, dwSize, FVData)) { + // Copy string to buffer so if the -dc compiler switch (Put constant strings in code segments) + // is on VerQueryValue will work under Win16. This works around a problem in Microsoft's ver.dll + // which writes to the string pointed to by subBlockName. + strcpy(subBlockName, "\\VarFileInfo\\Translation"); + if (!::VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&TransBlock, &vSize)) { + delete[] FVData; + FVData = 0; + } else + // Swap the words so wsprintf will print the lang-charset in the correct format. + *(DWORD *)TransBlock = MAKELONG(HIWORD(*(DWORD *)TransBlock), LOWORD(*(DWORD *)TransBlock)); + } + } +} + + +ProjectRCVersion::~ProjectRCVersion () +{ + if (FVData) + delete[] FVData; +} + + +bool ProjectRCVersion::GetProductName (LPSTR &prodName) +{ + UINT vSize; + char subBlockName[255]; + + if (FVData) { + wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"ProductName"); + return FVData ? ::VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&prodName, &vSize) : false; + } else + return false; +} + + +bool ProjectRCVersion::GetProductVersion (LPSTR &prodVersion) +{ + UINT vSize; + char subBlockName[255]; + + if (FVData) { + wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"ProductVersion"); + return FVData ? ::VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&prodVersion, &vSize) : false; + } else + return false; +} + + +bool ProjectRCVersion::GetCopyright (LPSTR ©right) +{ + UINT vSize; + char subBlockName[255]; + + if (FVData) { + wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"LegalCopyright"); + return FVData ? ::VerQueryValue(FVData, subBlockName, (void FAR* FAR*)©right, &vSize) : false; + } else + return false; +} + + +bool ProjectRCVersion::GetDebug (LPSTR &debug) +{ + UINT vSize; + char subBlockName[255]; + + if (FVData) { + wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"SpecialBuild"); + return FVData ? ::VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&debug, &vSize) : false; + } else + return false; +} + + +//{{swordAboutDlg Implementation}} + + +////////////////////////////////////////////////////////// +// swordAboutDlg +// ========== +// Construction/Destruction handling. +swordAboutDlg::swordAboutDlg (TWindow *parent, TResId resId, TModule *module) + : TDialog(parent, resId, module) +{ + // INSERT>> Your constructor code here. +} + + +swordAboutDlg::~swordAboutDlg () +{ + Destroy(); + + // INSERT>> Your destructor code here. +} + + +void swordAboutDlg::SetupWindow () +{ + LPSTR prodName = 0, prodVersion = 0, copyright = 0, debug = 0; + + // Get the static text for the value based on VERSIONINFO. + TStatic *versionCtrl = new TStatic(this, IDC_VERSION, 255); + TStatic *copyrightCtrl = new TStatic(this, IDC_COPYRIGHT, 255); + TStatic *debugCtrl = new TStatic(this, IDC_DEBUG, 255); + + TDialog::SetupWindow(); + + // Process the VERSIONINFO. + ProjectRCVersion applVersion(GetModule()); + + // Get the product name and product version strings. + if (applVersion.GetProductName(prodName) && applVersion.GetProductVersion(prodVersion)) { + // IDC_VERSION is the product name and version number, the initial value of IDC_VERSION is + // the word Version (in whatever language) product name VERSION product version. + char buffer[255]; + char versionName[128]; + + buffer[0] = '\0'; + versionName[0] = '\0'; + + versionCtrl->GetText(versionName, sizeof(versionName)); + wsprintf(buffer, "%s %s %s", prodName, versionName, prodVersion); + + versionCtrl->SetText(buffer); + } + + //Get the legal copyright string. + if (applVersion.GetCopyright(copyright)) + copyrightCtrl->SetText(copyright); + + // Only get the SpecialBuild text if the VERSIONINFO resource is there. + if (applVersion.GetDebug(debug)) + debugCtrl->SetText(debug); +} |