home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / pstoedit.zip / source.zip / pstoedit.2.50 / src / bc5gui / winp2ead.cpp < prev    next >
C/C++ Source or Header  |  1996-12-12  |  6KB  |  193 lines

  1. /*
  2.    winp2ead.cpp : This file is part of pstoedit
  3.    Source file for implementation of TWinp2eAboutDlg (TDialog).
  4.  
  5.    Copyright (C) 1996 Jens Weber, wr@lzh1.lzh.de
  6.  
  7.     This program is free software; you can redistribute it and/or modify
  8.     it under the terms of the GNU General Public License as published by
  9.     the Free Software Foundation; either version 2 of the License, or
  10.     (at your option) any later version.
  11.  
  12.     This program is distributed in the hope that it will be useful,
  13.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.     GNU General Public License for more details.
  16.  
  17.     You should have received a copy of the GNU General Public License
  18.     along with this program; if not, write to the Free Software
  19.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  
  21. */
  22.  
  23.  
  24. #include <owl/pch.h>
  25. #include <stdio.h>
  26. #if defined(BI_PLAT_WIN16)
  27. # include <ver.h>
  28. #endif
  29.  
  30. #include "winp2ead.h"
  31.  
  32.  
  33. TProjectRCVersion::TProjectRCVersion(TModule* module)
  34. {
  35.   uint32  fvHandle;
  36.   uint    vSize;
  37.   char    appFName[255];
  38.   TAPointer<char> subBlockName = new char[255];
  39.  
  40.   FVData = 0;
  41.  
  42.   module->GetModuleFileName(appFName, sizeof appFName);
  43.   OemToAnsi(appFName, appFName);
  44.   uint32 dwSize = ::GetFileVersionInfoSize(appFName, &fvHandle);
  45.   if (dwSize) {
  46.     FVData  = (void far *)new char[(uint)dwSize];
  47.     if (::GetFileVersionInfo(appFName, fvHandle, dwSize, FVData)) {
  48.       // Copy string to buffer so if the -dc compiler switch(Put constant strings in code segments)
  49.       // is on VerQueryValue will work under Win16.  This works around a problem in Microsoft's ver.dll
  50.       // which writes to the string pointed to by subBlockName.
  51.       //
  52.       strcpy(subBlockName, "\\VarFileInfo\\Translation");
  53.       if (!::VerQueryValue(FVData, subBlockName,(void far* far*)&TransBlock, &vSize)) {
  54.         delete[] FVData;
  55.         FVData = 0;
  56.       }
  57.       else
  58.         // Swap the words so sprintf will print the lang-charset in the correct format.
  59.         //
  60.         *(uint32 *)TransBlock = MAKELONG(HIWORD(*(uint32 *)TransBlock), LOWORD(*(uint32 *)TransBlock));
  61.     }
  62.   }
  63. }
  64.  
  65.  
  66. TProjectRCVersion::~TProjectRCVersion()
  67. {
  68.   if (FVData)
  69.     delete[] FVData;
  70. }
  71.  
  72.  
  73. bool TProjectRCVersion::GetProductName(LPSTR& prodName)
  74. {
  75.   uint    vSize;
  76.   TAPointer<char> subBlockName = new char[255];
  77.  
  78.   if (FVData) {
  79.     sprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(uint32 *)TransBlock,(LPSTR)"ProductName");
  80.     return FVData ? ::VerQueryValue(FVData, subBlockName,(void far* far*)&prodName, &vSize) : false;
  81.   } else
  82.     return false;
  83. }
  84.  
  85.  
  86. bool TProjectRCVersion::GetProductVersion(LPSTR& prodVersion)
  87. {
  88.   uint    vSize;
  89.   TAPointer<char> subBlockName = new char[255];
  90.  
  91.   if (FVData) {
  92.     sprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(uint32 *)TransBlock,(LPSTR)"ProductVersion");
  93.     return FVData ? ::VerQueryValue(FVData, subBlockName,(void far* far*)&prodVersion, &vSize) : false;
  94.   } else
  95.     return false;
  96. }
  97.  
  98.  
  99. bool TProjectRCVersion::GetCopyright(LPSTR& copyright)
  100. {
  101.   uint    vSize;
  102.   TAPointer<char> subBlockName = new char[255];
  103.  
  104.   if (FVData) {
  105.     sprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(uint32 *)TransBlock,(LPSTR)"LegalCopyright");
  106.     return FVData ? ::VerQueryValue(FVData, subBlockName,(void far* far*)©right, &vSize) : false;
  107.   } else
  108.     return false;
  109. }
  110.  
  111.  
  112. bool TProjectRCVersion::GetDebug(LPSTR& debug)
  113. {
  114.   uint    vSize;
  115.   TAPointer<char> subBlockName = new char[255];
  116.  
  117.   if (FVData) {
  118.     sprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(uint32 *)TransBlock,(LPSTR)"SpecialBuild");
  119.     return FVData ? ::VerQueryValue(FVData, subBlockName,(void far* far*)&debug, &vSize) : false;
  120.   } else
  121.     return false;
  122. }
  123.  
  124.  
  125. //{{TWinp2eAboutDlg Implementation}}
  126.  
  127.  
  128. //--------------------------------------------------------
  129. // TWinp2eAboutDlg
  130. // ~~~~~~~~~~
  131. // Construction/Destruction handling.
  132. //
  133. TWinp2eAboutDlg::TWinp2eAboutDlg(TWindow* parent, TResId resId, TModule* module)
  134. :
  135.   TDialog(parent, resId, module)
  136. {
  137.   // INSERT>> Your constructor code here.
  138. }
  139.  
  140.  
  141. TWinp2eAboutDlg::~TWinp2eAboutDlg()
  142. {
  143.   Destroy();
  144.  
  145.   // INSERT>> Your destructor code here.
  146. }
  147.  
  148.  
  149. void TWinp2eAboutDlg::SetupWindow()
  150. {
  151.   LPSTR prodName = 0, prodVersion = 0, copyright = 0, debug = 0;
  152.  
  153.   // Get the static text for the value based on VERSIONINFO.
  154.   //
  155.   TStatic* versionCtrl = new TStatic(this, IDC_VERSION, 255);
  156.   TStatic* copyrightCtrl = new TStatic(this, IDC_COPYRIGHT, 255);
  157.   TStatic* debugCtrl = new TStatic(this, IDC_DEBUG, 255);
  158.  
  159.   TDialog::SetupWindow();
  160.  
  161.   // Process the VERSIONINFO.
  162.   //
  163.   TProjectRCVersion applVersion(GetModule());
  164.  
  165.   // Get the product name and product version strings.
  166.   //
  167.   if (applVersion.GetProductName(prodName) && applVersion.GetProductVersion(prodVersion)) {
  168.     // IDC_VERSION is the product name and version number, the initial value of IDC_VERSION is
  169.     // the word Version(in whatever language) product name VERSION product version.
  170.     //
  171.     char buffer[255];
  172.     char versionName[128];
  173.  
  174.     buffer[0] = '\0';
  175.     versionName[0] = '\0';
  176.  
  177.     versionCtrl->GetText(versionName, sizeof versionName);
  178.     sprintf(buffer, "%s %s %s", prodName, versionName, prodVersion);
  179.  
  180.     versionCtrl->SetText(buffer);
  181.   }
  182.  
  183.   // Get the legal copyright string.
  184.   //
  185.   if (applVersion.GetCopyright(copyright))
  186.     copyrightCtrl->SetText(copyright);
  187.  
  188.   // Only get the SpecialBuild text if the VERSIONINFO resource is there.
  189.   //
  190.   if (applVersion.GetDebug(debug))
  191.     debugCtrl->SetText(debug);
  192. }
  193.