From 1a0849f6861e0680fd645255a98674c84386d52c Mon Sep 17 00:00:00 2001 From: Kimmo Varis Date: Wed, 28 Nov 2007 15:44:49 +0000 Subject: [PATCH] PATCH: [ 1838882 ] Remove remaining items from old translation system --- Src/Languages/BuildAll.bat | 27 - Src/Languages/BuildDll.bat | 27 - Src/Languages/BuildOneLanguage.vbs | 35 - Src/Languages/CreateRcFilesFromPoFiles.vbs | 295 -------- Tools/MakeResDll/Changes.txt | 94 --- Tools/MakeResDll/MakeResDll.cpp | 1055 ---------------------------- Tools/MakeResDll/MakeResDll.dsp | 155 ---- Tools/MakeResDll/MakeResDll.h | 12 - Tools/MakeResDll/MakeResDll.rc | 246 ------- Tools/MakeResDll/Merge.ico | Bin 92854 -> 0 bytes Tools/MakeResDll/StdAfx.cpp | 35 - Tools/MakeResDll/StdAfx.h | 31 - Tools/MakeResDll/readme.txt | 45 -- Tools/MakeResDll/resource.h | 65 -- Tools/Scripts/CreateRcFilesFromPoFiles.bat | 9 - 15 files changed, 2131 deletions(-) delete mode 100755 Src/Languages/BuildAll.bat delete mode 100755 Src/Languages/BuildDll.bat delete mode 100644 Src/Languages/BuildOneLanguage.vbs delete mode 100644 Src/Languages/CreateRcFilesFromPoFiles.vbs delete mode 100755 Tools/MakeResDll/Changes.txt delete mode 100755 Tools/MakeResDll/MakeResDll.cpp delete mode 100755 Tools/MakeResDll/MakeResDll.dsp delete mode 100755 Tools/MakeResDll/MakeResDll.h delete mode 100755 Tools/MakeResDll/MakeResDll.rc delete mode 100755 Tools/MakeResDll/Merge.ico delete mode 100755 Tools/MakeResDll/StdAfx.cpp delete mode 100755 Tools/MakeResDll/StdAfx.h delete mode 100755 Tools/MakeResDll/readme.txt delete mode 100755 Tools/MakeResDll/resource.h delete mode 100644 Tools/Scripts/CreateRcFilesFromPoFiles.bat diff --git a/Src/Languages/BuildAll.bat b/Src/Languages/BuildAll.bat deleted file mode 100755 index 2beed6887..000000000 --- a/Src/Languages/BuildAll.bat +++ /dev/null @@ -1,27 +0,0 @@ -Call BuildDll Brazilian -Call BuildDll Bulgarian -Call BuildDll Catalan -Call BuildDll ChineseSimplified -Call BuildDll ChineseTraditional -Call BuildDll Czech -Call BuildDll Danish -Call BuildDll Dutch -Call BuildDll French -Call BuildDll German -Call BuildDll Hungarian -Call BuildDll Italian -Call BuildDll Japanese -Call BuildDll Korean -Call BuildDll Norwegian -Call BuildDll Polish -Call BuildDll Portuguese -Call BuildDll Russian -Call BuildDll Slovak -Call BuildDll Spanish -Call BuildDll Swedish -Call BuildDll Turkish - -Echo "Press ctrl-z " -COPY CON TEMP$$$$.$$$ > nul -DEL TEMP$$$$.$$$ - diff --git a/Src/Languages/BuildDll.bat b/Src/Languages/BuildDll.bat deleted file mode 100755 index 0d4b4a00c..000000000 --- a/Src/Languages/BuildDll.bat +++ /dev/null @@ -1,27 +0,0 @@ -@echo off -rem BuildDll.bat -rem -rem This batch file is used to build the Resource DLL -rem Use it like so: BuildDll Bulgarian -rem It returns 1 if there is an error -rem -rem RCS ID line follows -- this is updated by CVS -rem $Id$ - -if '%1==' echo Syntax: BuildDll language -if '%1==' goto end - -echo Building %1 -set rcScript=.\%1\Merge%1.rc -set outputdir=..\..\Build\Languages - -.\MakeResDll -v -b -o %outputdir% %rcScript% - -if errorlevel==1 goto _failed -goto end - -:_failed -rem This causes console to close! -rem exit 1 - -:end diff --git a/Src/Languages/BuildOneLanguage.vbs b/Src/Languages/BuildOneLanguage.vbs deleted file mode 100644 index cff5c3702..000000000 --- a/Src/Languages/BuildOneLanguage.vbs +++ /dev/null @@ -1,35 +0,0 @@ -' BuildOneLanguage.vbs -' Ask user for language name, and recompile it (BuildDll.bat) -' and recopy all language files to build runtime (CopyAll.bat) -' -' RCS ID line follows -- this is updated by CVS -' $Id$ - -Option Explicit - -Call Main - -Sub Main - Dim msg : msg = "Build which language?" - Dim title : title = "Select language" - Dim defval : defval = "" - Dim language - language = InputBox(msg, title, defval) - If Len(language)<1 Then Exit Sub - - Dim cmd - rem -v=verbose, -p=pause - cmd = ".\MakeResDll -v -p -o .\DLL .\" & language & "\Merge" & language & ".rc" - - Dim WshShell : Set WshShell = WScript.CreateObject("WScript.Shell") - rem 1=Window Style, True=WaitOnReturn - Dim rtn - rtn = WshShell.Run(cmd, 1, True) - If rtn<>0 Then - MsgBox "Compilation failed", vbCritical, "Fatal Error" - Exit Sub - End If - - WshShell.Run "CopyAll.bat " & language, 1, True - -End Sub diff --git a/Src/Languages/CreateRcFilesFromPoFiles.vbs b/Src/Languages/CreateRcFilesFromPoFiles.vbs deleted file mode 100644 index f2107b2bd..000000000 --- a/Src/Languages/CreateRcFilesFromPoFiles.vbs +++ /dev/null @@ -1,295 +0,0 @@ -Option Explicit -'' -' This script creates the language RC files from the language PO files. -' -' Copyright (C) 2007 by Tim Gerundt -' Released under the "GNU General Public License" -' -' ID line follows -- this is updated by SVN -' $Id$ - -Const ForReading = 1 - -Const NO_BLOCK = 0 -Const MENU_BLOCK = 1 -Const DIALOGEX_BLOCK = 2 -Const STRINGTABLE_BLOCK = 3 -Const VERSIONINFO_BLOCK = 4 -Const ACCELERATORS_BLOCK = 5 - -Dim oFSO, bRunFromCmd - -Set oFSO = CreateObject("Scripting.FileSystemObject") - -bRunFromCmd = False -If (LCase(Right(Wscript.FullName, 11))) = "cscript.exe" Then - bRunFromCmd = True -End If - -Call Main - -'' -' ... -Sub Main - Dim oLanguages, sLanguage - Dim oLanguageTranslations - Dim StartTime, EndTime, Seconds - - StartTime = Time - - Wscript.Echo "Warning: " & Wscript.ScriptName & " can take several seconds to finish!" - - Set oLanguages = GetLanguages - For Each sLanguage In oLanguages.Keys 'For all languages... - If (bRunFromCmd = True) Then 'If run from command line... - Wscript.Echo sLanguage - End If - Set oLanguageTranslations = GetTranslationsFromPoFile(oLanguages(sLanguage), sLanguage) - If (oLanguageTranslations.Count > 0) Then 'If translations exists... - CreateRcFileWithTranslations "../Merge.rc", sLanguage & "\Merge" & sLanguage & ".rc", oLanguageTranslations - End If - Next - - EndTime = Time - Seconds = DateDiff("s", StartTime, EndTime) - - Wscript.Echo Wscript.ScriptName & " finished after " & Seconds & " seconds!" -End Sub - -'' -' ... -Function GetLanguages() - Dim oLanguages, oFile - - Set oLanguages = CreateObject("Scripting.Dictionary") - - For Each oFile In oFSO.GetFolder(".").Files 'For all files in the current folder... - If (LCase(oFSO.GetExtensionName(oFile.Name)) = "po") Then 'If a PO file... - oLanguages.Add oFSO.GetBaseName(oFile.Name), oFile.Path - End If - Next - Set GetLanguages = oLanguages -End Function - -'' -' ... -Function GetTranslationsFromPoFile(ByVal sPoPath, ByVal sLanguage) - Dim oTranslations, oTextFile, sLine - Dim oMatch, iMsgStarted, sMsgId, sMsgStr - - Set oTranslations = CreateObject("Scripting.Dictionary") - - If (oFSO.FileExists(sPoPath) = True) Then 'If the PO file exists... - iMsgStarted = 0 - sMsgId = "" - sMsgStr = "" - Set oTextFile = oFSO.OpenTextFile(sPoPath, ForReading) - Do Until oTextFile.AtEndOfStream = True 'For all lines... - sLine = Trim(oTextFile.ReadLine) - - If (sLine <> "") Then 'If NOT empty line... - If (Left(sLine, 1) <> "#") Then 'If NOT comment line... - '-------------------------------------------------------------------------------- - ' Note: We must replace \" temporary with FormFeed and convert them later to "" - '-------------------------------------------------------------------------------- - sLine = Replace(sLine, "\""", vbFormFeed) - If (Left(sLine, 7) = "msgid """) Then 'If "msgid"... - iMsgStarted = 1 - sMsgId = GetRegExpSubMatch(sLine, "^msgid ""(.*)""$") - ElseIf (Left(sLine, 8) = "msgstr """) Then 'If "msgstr"... - iMsgStarted = 2 - sMsgStr = GetRegExpSubMatch(sLine, "^msgstr ""(.*)""$") - ElseIf (FoundRegExpMatch(sLine, "^""(.*)""$", oMatch) = True) Then 'If "msgid" or "msgstr" continued... - If (iMsgStarted = 1) Then - sMsgId = sMsgId & oMatch.SubMatches(0) - ElseIf (iMsgStarted = 2) Then - sMsgStr = sMsgStr & oMatch.SubMatches(0) - End If - End If - sMsgId = Replace(sMsgId, vbFormFeed, """""") - sMsgStr = Replace(sMsgStr, vbFormFeed, """""") - End If - Else 'If empty line - iMsgStarted = 0 - End If - - If (iMsgStarted = 0) Then 'If NOT inside a translation... - If (sMsgId <> "") And (sMsgStr <> "") And (sMsgId <> sMsgStr) Then 'If translated... - oTranslations.Add sMsgId, sMsgStr - End If - sMsgId = "" - sMsgStr = "" - End If - Loop - oTextFile.Close - - '-------------------------------------------------------------------------------- - ' Add additional translations... - '-------------------------------------------------------------------------------- - If (oTranslations.Exists("WinMerge Application") = False) Then - oTranslations.Add "WinMerge Application", sLanguage & " translation for WinMerge" - End If - If (oTranslations.Exists("WinMerge.EXE") = False) Then - oTranslations.Add "WinMerge.EXE", "Merge" & sLanguage & ".lang" - End If - '-------------------------------------------------------------------------------- - End If - Set GetTranslationsFromPoFile = oTranslations -End Function - -'' -' ... -Sub CreateRcFileWithTranslations(ByVal sMasterRcPath, ByVal sLanguageRcPath, ByVal oTranslations) - Dim oMasterRcFile, sMasterLine - Dim oLanguageRcFile, sLanguageLine, sLanguageRcFolder - Dim iBlockType, oMatches, oMatch, sMsgId, sMsgStr - - If (oFSO.FileExists(sMasterRcPath) = True) Then 'If the master RC file exists... - '-------------------------------------------------------------------------------- - ' Create the language RC folder, if necessary... - '-------------------------------------------------------------------------------- - sLanguageRcFolder = oFSO.GetParentFolderName(sLanguageRcPath) - If (oFSO.FolderExists(sLanguageRcFolder) = False) Then 'If the language RC folder NOT exists... - oFSO.CreateFolder sLanguageRcFolder - End If - '-------------------------------------------------------------------------------- - - iBlockType = NO_BLOCK - Set oMasterRcFile = oFSO.OpenTextFile(sMasterRcPath, ForReading) - Set oLanguageRcFile = oFSO.CreateTextFile(sLanguageRcPath, True) - Do Until oMasterRcFile.AtEndOfStream = True 'For all lines... - sMasterLine = oMasterRcFile.ReadLine - sLanguageLine = sMasterLine - sMasterLine = Trim(sMasterLine) 'Save Masterline trimmed! - - If (InStr(sMasterLine, " MENU") > 0) And (InStr(sMasterLine, "IDR_") > 0) Then 'MENU... - iBlockType = MENU_BLOCK - ElseIf (InStr(sMasterLine, " DIALOGEX") > 0) Then 'DIALOGEX... - iBlockType = DIALOGEX_BLOCK - ElseIf (sMasterLine = "STRINGTABLE") Then 'STRINGTABLE... - iBlockType = STRINGTABLE_BLOCK - ElseIf (InStr(sMasterLine, " VERSIONINFO") > 0) Then 'VERSIONINFO... - iBlockType = VERSIONINFO_BLOCK - ElseIf (InStr(sMasterLine, " ACCELERATORS") > 0) Then 'ACCELERATORS... - iBlockType = ACCELERATORS_BLOCK - ElseIf (sMasterLine = "BEGIN") Then 'BEGIN... - 'IGNORE FOR SPEEDUP! - ElseIf (sMasterLine = "END") Then 'END... - If (iBlockType = STRINGTABLE_BLOCK) Then 'If inside stringtable... - iBlockType = NO_BLOCK - End If - ElseIf (Left(sMasterLine, 2) = "//") Then 'If comment line... - 'IGNORE FOR SPEEDUP! - ElseIf (sMasterLine <> "") Then 'If NOT empty line... - Select Case iBlockType - Case NO_BLOCK: - If (FoundRegExpMatch(sMasterLine, "LANGUAGE (LANG_\w*, SUBLANG_\w*)", oMatch) = True) Then 'LANGUAGE... - sMsgId = oMatch.SubMatches(0) - If (sMsgId <> "") And (oTranslations.Exists(sMsgId) = True) Then 'If translation located... - sMsgStr = oTranslations(sMsgId) - sLanguageLine = Replace(sLanguageLine, "LANGUAGE " & sMsgId, "LANGUAGE " & sMsgStr) - End If - ElseIf (FoundRegExpMatch(sMasterLine, "code_page\(([\d]+)\)", oMatch) = True) Then 'code_page... - sMsgId = oMatch.SubMatches(0) - If (sMsgId <> "") And (oTranslations.Exists(sMsgId) = True) Then 'If translation located... - sMsgStr = oTranslations(sMsgId) - sLanguageLine = Replace(sLanguageLine, "code_page(" & sMsgId & ")", "code_page(" & sMsgStr & ")") - End If - ElseIf (InStr(sMasterLine, "#include ""resource.h""") > 0) Then '#include "resource.h"... - sLanguageLine = Replace(sLanguageLine, "#include ""resource.h""", "#include ""..\..\resource.h""") - ElseIf (InStr(sMasterLine, "Merge.rc2") > 0) Then 'Merge.rc2... - sLanguageLine = "" - End If - - Case MENU_BLOCK, DIALOGEX_BLOCK, STRINGTABLE_BLOCK: - If (InStr(sMasterLine, """") > 0) Then 'If quote found (for speedup)... - '-------------------------------------------------------------------------------- - ' Note: We must replace "" temporary with FormFeed... - '-------------------------------------------------------------------------------- - If (FoundRegExpMatches(Replace(sMasterLine, """""", vbFormFeed), """(.*?)""", oMatches) = True) Then 'String... - For Each oMatch In oMatches 'For all strings... - sMsgId = Replace(oMatch.SubMatches(0), vbFormFeed, """""") - If (sMsgId <> "") And (oTranslations.Exists(sMsgId) = True) Then 'If translation located... - sMsgStr = oTranslations(sMsgId) - sLanguageLine = Replace(sLanguageLine, """" & sMsgId & """", """" & sMsgStr & """") - End If - Next - End If - End If - - Case VERSIONINFO_BLOCK: - If (FoundRegExpMatch(sMasterLine, "BLOCK ""([0-9A-F]+)""", oMatch) = True) Then 'StringFileInfo.Block... - sMsgId = oMatch.SubMatches(0) - If (sMsgId <> "") And (oTranslations.Exists(sMsgId) = True) Then 'If translation located... - sMsgStr = oTranslations(sMsgId) - sLanguageLine = Replace(sLanguageLine, """" & sMsgId & """", """" & sMsgStr & """") - End If - ElseIf (FoundRegExpMatch(sMasterLine, "VALUE ""(.*?)"", ""(.*?)\\?0?""", oMatch) = True) Then 'StringFileInfo.Value... - sMsgId = oMatch.SubMatches(1) - If (sMsgId <> "") And (oTranslations.Exists(sMsgId) = True) Then 'If translation located... - sMsgStr = oTranslations(sMsgId) - sLanguageLine = Replace(sLanguageLine, """, """ & sMsgId, """, """ & sMsgStr) - End If - ElseIf (FoundRegExpMatch(sMasterLine, "VALUE ""Translation"", (.*?)$", oMatch) = True) Then 'VarFileInfo.Translation... - sMsgId = oMatch.SubMatches(0) - If (sMsgId <> "") And (oTranslations.Exists(sMsgId) = True) Then 'If translation located... - sMsgStr = oTranslations(sMsgId) - sLanguageLine = Replace(sLanguageLine, sMsgId, sMsgStr) - End If - End If - - End Select - End If - oLanguageRcFile.WriteLine sLanguageLine - Loop - oMasterRcFile.Close - oLanguageRcFile.Close - End If -End Sub - -'' -' ... -Function FoundRegExpMatch(ByVal sString, ByVal sPattern, ByRef oMatchReturn) - Dim oRegExp, oMatches - - Set oRegExp = New RegExp - oRegExp.Pattern = sPattern - oRegExp.IgnoreCase = True - - oMatchReturn = Null - FoundRegExpMatch = False - If (oRegExp.Test(sString) = True) Then - Set oMatches = oRegExp.Execute(sString) - Set oMatchReturn = oMatches(0) - FoundRegExpMatch = True - End If -End Function - -'' -' ... -Function FoundRegExpMatches(ByVal sString, ByVal sPattern, ByRef oMatchesReturn) - Dim oRegExp - - Set oRegExp = New RegExp - oRegExp.Pattern = sPattern - oRegExp.IgnoreCase = True - oRegExp.Global = True - - oMatchesReturn = Null - FoundRegExpMatches = False - If (oRegExp.Test(sString) = True) Then - Set oMatchesReturn = oRegExp.Execute(sString) - FoundRegExpMatches = True - End If -End Function - -'' -' ... -Function GetRegExpSubMatch(ByVal sString, ByVal sPattern) - Dim oMatch - - GetRegExpSubMatch = "" - If (FoundRegExpMatch(sString, sPattern, oMatch)) Then 'If pattern found... - GetRegExpSubMatch = oMatch.SubMatches(0) - End If -End Function diff --git a/Tools/MakeResDll/Changes.txt b/Tools/MakeResDll/Changes.txt deleted file mode 100755 index 8634ca2db..000000000 --- a/Tools/MakeResDll/Changes.txt +++ /dev/null @@ -1,94 +0,0 @@ -MakeResDll/Changes.txt -Add new items to top - -2007-03-14 Kimmo - Remove dependency to coretools.cpp, replace some CStrings with TCHARs, drop VC5 support - MakeResDll: MakeResDll.cpp MakeResDll.dsp StdAfx.h - -2007-02-26 Kimmo - PATCH: [ 1669286 ] Remove dialog from MakeResDll - MakeResDll: MakeResDll.cpp MakeResDll.dsp - MakeResDll removed files: VsVersionDlg.cpp VsVersionDlg.h - -2006-08-27 Kimmo - PATCH: [ 1547212 ] Fix MakeResDll project - MakeResDll: MakeResDll.dsp - -2006-05-07 Kimmo - PATCH: [ 1446649 ] Fix MakeResDll ui - Submitted by Perry - MakeResDll: MakeResDll.cpp StdAfx.h VsVersionDlg.cpp VsVersionDlg.h - Update icon to WinMerge's current icon - MakeResDll: Merge.ico - -2006-03-08 Perry - Update MakeResDll readme with current information (MSVC.Net 2003 works - now), and better explanation of how to pick a specific version. - MakeResDll: readme.txt - PATCH: [ 1443391 ] Update MakeResDll for VS.NET 2005 - MakeResDll: MakeResDll.cpp MakeResDll.dsp MakeResDll.rc - StdAfx.cpp StdAfx.h readme.txt resource.h - New MakeResDll: Merge.ico VsVersionDlg.cpp VsVersionDlg.h - Bump MakeResDll version from 1.0.6.0 to 1.0.7.0. - MakeResDll: MakeResDll.rc - -2006-03-04 Perry - PATCH: [ 1442125 ] Improvements for MakeResDll parsing - Bump version from 1.0.2.0 to 1.0.3.0. - MakeResDll: MakeResDll.cpp MakeResDll.rc resource.h - Src\Common: RegKey.cpp RegKey.h - PATCH: [ 1442134 ] MakeResDll: check that RC file exists - Bump version from 1.0.3.0 to 1.0.4.0. - MakeResDll: MakeResDll.cpp MakeResDll.rc resource.h - PATCH: [ 1442238 ] Fix MakeResDll to work with VS.NET 2003 - Bump version from 1.0.4.0 to 1.0.5.0. - MakeResDll: MakeResDll.cpp MakeResDll.rc - PATCH: [ 1442791 ] Update MakeResDll project - Add Changes.txt to project. - Bump MakeResDll version from 1.0.5.0 to 1.0.6.0. - Change version copyright from "2003" to "2003-2006" - MakeResDll: MakeResDll.dsp MakeResDll.rc - -2006-03-03 Perry - PATCH: [ 1442699 ] New Changes.txt file for MakeResDll - Add Changes.txt change log (this file). - MakeResDll: new Changes.txt - PATCH: [ 1424636 ] New BuildOneLanguage.vbs & fix MakeResDll exit - MakeResDll: MakeResDll.cpp StdAfx.h - Src\Languages: BuildDll.bat BuildOneLanguage.vbs - -2004-02-20 Perry - Add GetClipTcharTextFormat (needed by coretools now) to StdAfx.* - MakeResDll: StdAfx.cpp StdAfx.h - Fix MakeResDll.dsp to compile (new directory structure). - MakeResDll\MakeResDll.dsp - -2004-01-24 Perry - [ 882650 ] Move temp build files out of Build into BuildTmp - Src: Merge.dsp - MakeResDll: MakeResDll.dsp - -2003-10-23 Perry - Handle lib & includes for MakeResDll (& rearrange globals). - Bump version from 1.0.1.0 to 1.0.2.0. - MakeResDll: MakeResDll.cpp MakeResDll.rc readme.txt - Handle lib & includes for .NET and .NET 2003 in MakeResDll. - Fix location of RegKey.h in MakeResDll. - MakeResDll: MakeResDll.cpp MakeResDll.dsp readme.txt - -2003-10-22 Perry - Fix compile for MakeResDll - common: coretools.cpp - Fix MakeResDll for MSVC.NET & MSVC.NET 2003. - Bump MakeResDll version from 1.0.0.1 to 1.0.1.0. - MakeResDll: MakeResDll.cpp MakeResDll.rc - Add readme.txt to MakeResDll. - MakeResDll: MakeResDll.dsp readme.txt - Fix MakeResDll to not create keys not found. - MakeResDll: MakeResDll.cpp - -2003-07-24 Perry - PATCH: [ 773981 ] Modify language build process to eliminate msgboxes - (also added a version resource to MakeResDll, as it lacked one) - Languages: BuildAll.bat BuildDll.bat - MakeResDll: MakeResDll.cpp MakeResDll.rc diff --git a/Tools/MakeResDll/MakeResDll.cpp b/Tools/MakeResDll/MakeResDll.cpp deleted file mode 100755 index eab073309..000000000 --- a/Tools/MakeResDll/MakeResDll.cpp +++ /dev/null @@ -1,1055 +0,0 @@ -/** - * @file MakeResDll.cpp - * - * @brief Code to compile & link a language satellite resource DLL, using Visual Studio - */ -// ID line follows -- this is updated by SVN -// $Id$ - -#include "stdafx.h" -#include -#include -#include "UnicodeString.h" -#include -#include -#include -#include "sys/stat.h" -#include "MakeResDll.h" -// Following files included from WinMerge/Src/Common -#include "RegKey.h" - -// Local files - -using namespace std; - -///////////////////////////////////////////////////////////////////////////// -// The one and only application object - -typedef vector StringArray; - -static LPCTSTR VSRegVersionStrings[] = -{ // These must be laid out in the same order as VS_VERSION: - // VS6, VS2002, ... - _T("6"), - _T("Net"), - _T("Net2003"), - _T("Net2005") -}; - -struct VcPaths -{ - String sRCExe; - String sLinkExe; - String sVcBaseFolder; - String sIncludes; - String sLibs; - String sAdditionalPath; - bool needsInfo() const { return sRCExe.empty() || sLinkExe.empty() || - sIncludes.empty() || sLibs.empty(); } -}; - -// File-level globals -static VcPaths gVcPaths; -static String gsLang; -static String gsVcBin; -static String gsRCScript; -static String gsOutPath; -static BOOL gbPause=FALSE; -BOOL static gbBatch=FALSE; -static BOOL gbSilent=FALSE; -static BOOL gbVerbose=FALSE; -static bool gbUi=false; -static LPCTSTR gVs80VcBaseDir = _T("SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC"); -static LPCTSTR gVs71VcBaseDir = _T("SOFTWARE\\Microsoft\\VisualStudio\\7.1\\Setup\\VC"); -static LPCTSTR gVs70VcBaseDir = _T("SOFTWARE\\Microsoft\\VisualStudio\\7.0\\Setup\\VC"); -static LPCTSTR gVs6VcBaseDir = _T("SOFTWARE\\Microsoft\\DevStudio\\6.0\\Products\\Microsoft Visual C++"); -static LPCTSTR gVs5VcBaseDir = _T("Software\\Microsoft\\DevStudio\\5.0\\Directories"); - -// Static functions -static VS_VERSION MapRegistryValue(LPCTSTR value); -static BOOL MkDirEx(LPCTSTR filename); -static BOOL MyCreateDirectoryIfNeeded(LPCTSTR lpPathName); -static HANDLE RunIt(LPCTSTR szExeFile, LPCTSTR szArgs, BOOL bMinimized /*= TRUE*/, BOOL bNewConsole /*= FALSE*/); -static BOOL BuildDll(LPCTSTR pszRCPath, LPCTSTR pszOutputPath, LPCTSTR pszOutputStem, String& strOutFile); -static BOOL CheckCompiler(); -static void Status(LPCTSTR szText); -static void Status(UINT idstrText, LPCTSTR szText1 = NULL, LPCTSTR szText2 = NULL); -static void InitModulePaths(const StringArray & VsBaseDirs); -static bool FindAndLoadVsVersion(const StringArray & VsBaseDirs, VS_VERSION vsnum); -static void LoadVs2005Settings(const String & sProductDir); -static void LoadVs2003Settings(const String & sProductDir); -static void LoadVs2002Settings(const String & sProductDir); -static void LoadVs6Settings(const String & sProductDir); -static void Usage(); -static BOOL ProcessArgs(int argc, TCHAR* argv[]); -static void FixPath(); -static bool DoesFileExist(LPCTSTR filepath); -static void TrimPath(String & sPath); -//static void DisplayUi(const CStringArray & VsBaseDirs); -static void LoadVsBaseDirs(StringArray & VsBaseDirs); -static void SplitFilename(LPCTSTR path, TCHAR * folder, TCHAR * filename, TCHAR * ext); - -using namespace std; - -/** - * @brief Map registry value to enum value, eg, "Net2003" => VS2003 - */ -static VS_VERSION MapRegistryValue(LPCTSTR value) -{ - for (int i = 0; i < VS_COUNT; ++i) - { - if (_tcscmp(value, VSRegVersionStrings[i]) == 0) - { - return (VS_VERSION)i; - } - } - return VS_NONE; -} - -/** - * @brief Main entry point of (console mode) application - */ -int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) -{ - int nRetCode = 0; - - // initialize MFC and print an error on failure -/* if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) - { - // TODO: change error code to suit your needs - cerr << _T("Fatal Error: MFC initialization failed") << endl; - nRetCode = 1; - } - else -*/ - { - if (argc < 2) - { - Usage(); - return 1; - } - - StringArray VsBaseDirs; - LoadVsBaseDirs(VsBaseDirs); - - InitModulePaths(VsBaseDirs); - - if (!ProcessArgs(argc, argv)) - { - Usage(); - return 1; - } - - if (gbUi) - { - // TODO: Add console GUI - after all this is console app! - - //DisplayUi(VsBaseDirs); - return 0; - } - - TCHAR spath[MAX_PATH] = {0}; - TCHAR sname[MAX_PATH] = {0}; - SplitFilename(gsRCScript.c_str(), spath, sname, NULL); - - if (gsOutPath.empty()) - gsOutPath = spath; - - Status(IDS_CHECK_COMPILER_FMT); - if (!CheckCompiler()) - return 1; - Status(_T("OK\r\n")); - - FixPath(); - - String strOutFile; - BOOL ok = BuildDll(gsRCScript.c_str(), gsOutPath.c_str(), sname, strOutFile); - if (!ok) - nRetCode = 1; - if (ok && !gbSilent && !gbBatch) - { - TCHAR tmpStr[200]; - LoadString(::GetModuleHandle(NULL), IDS_SUCCESS_FMT, tmpStr, 200); - String s = tmpStr; - string_replace(s, _T("%1"), strOutFile); - MessageBox(NULL, s.c_str(), _T("MakeResDll"), MB_ICONINFORMATION); - } - - if (gbPause && !gbSilent) - { - Status(IDS_PRESS_ANY_KEY); - Status(_T("\r\n")); - getc(stdin); - } - } - - return nRetCode; -} - -/** - * @brief Add paths to RC compiler & linker to the PATH environment variable - */ -static void FixPath() -{ - String strPath(_tgetenv(_T("PATH"))); - TCHAR spath[MAX_PATH] = {0}; - if (gbVerbose) - _tprintf(_T("Initial path: %s\r\n"), strPath.c_str()); - - strPath = _T("PATH=") + strPath; - SplitFilename(gVcPaths.sRCExe.c_str(), spath, NULL, NULL); - strPath += _T(";"); - strPath += spath; - SplitFilename(gVcPaths.sLinkExe.c_str(), spath, NULL, NULL); - strPath += _T(";"); - strPath += spath; - strPath += _T(";"); - - if (!gVcPaths.sAdditionalPath.empty()) - { - strPath += gVcPaths.sAdditionalPath + _T(";"); - } - _tputenv(strPath.c_str()); - if (gbVerbose) - _tprintf(_T("New path: %s\r\n"), strPath.c_str()); -} - -/** - * @brief Display status message saying this arg requires another arg and return FALSE - */ -static BOOL MissingArg(LPCTSTR arg) -{ - Status(IDS_ERROR_MISSING_SWITCH_ARG, arg); - return FALSE; -} - -/** - * @brief Parse the arguments and set switches accordingly - */ -static BOOL ProcessArgs(int argc, TCHAR* argv[]) -{ - TCHAR tempStr[10] = {0}; - _stprintf(tempStr, _T("%04x"), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); - gsLang = tempStr; - gsRCScript.erase(); - - for (int i=1; i < argc; i++) - { - if (!_tcsicmp(argv[i], _T("-r")) - || !_tcsicmp(argv[i], _T("/r"))) - { - i++; - if (i < argc-1) - gVcPaths.sRCExe = argv[i]; - else - return MissingArg(argv[i]); - } - else if (!_tcsicmp(argv[i], _T("-p")) - || !_tcsicmp(argv[i], _T("/p"))) - { - gbPause=TRUE; - } - else if (!_tcsicmp(argv[i], _T("-b")) - || !_tcsicmp(argv[i], _T("/b"))) - { - if (!gbBatch) - gbBatch=TRUE; - } - else if (!_tcsicmp(argv[i], _T("-s")) - || !_tcsicmp(argv[i], _T("/s"))) - { - if (!gbVerbose) - gbSilent=TRUE; - } - else if (!_tcsicmp(argv[i], _T("-v")) - || !_tcsicmp(argv[i], _T("/v"))) - { - gbVerbose=TRUE; - gbSilent=FALSE; - } - else if (!_tcsicmp(argv[i], _T("-l")) - || !_tcsicmp(argv[i], _T("/l"))) - { - i++; - if (i < argc-1) - gVcPaths.sLinkExe = argv[i]; - else - return MissingArg(argv[i]); - } - else if (!_tcsicmp(argv[i], _T("-g")) - || !_tcsicmp(argv[i], _T("/g"))) - { - i++; - if (i < argc-1) - gsLang = argv[i]; - else - return MissingArg(argv[i]); - } - else if (!_tcsicmp(argv[i], _T("-i")) - || !_tcsicmp(argv[i], _T("/i"))) - { - i++; - if (i < argc-1) - { - gVcPaths.sIncludes = argv[i]; - } - else - return MissingArg(argv[i]); - } - else if (!_tcsicmp(argv[i], _T("-o")) - || !_tcsicmp(argv[i], _T("/o"))) - { - i++; - if (i < argc-1) - { - gsOutPath = argv[i]; - if (!MkDirEx(gsOutPath.c_str())) - { - Status(IDS_ERROR_MKDIR, gsOutPath.c_str()); - return FALSE; - } - } - else - return MissingArg(argv[i]); - } - else if (!_tcsicmp(argv[i], _T("-y")) - || !_tcsicmp(argv[i], _T("/y"))) - { - i++; - if (i < argc-1) - { - gVcPaths.sLibs = _T(""); - TCHAR temp[2048], *p; - _tcscpy(temp, argv[i]); - p = _tcstok(temp, _T(";\r\n\t")); - while (p != NULL) - { - gVcPaths.sLibs += _T("/libpath:\""); - gVcPaths.sLibs += p; - gVcPaths.sLibs += _T("\" "); - p = _tcstok(NULL, _T(";\r\n\t")); - } - - } - else - return MissingArg(argv[i]); - } - else if (!_tcsicmp(argv[i], _T("-ui")) - || !_tcsicmp(argv[i], _T("/ui"))) - { - gbUi = true; - return TRUE; // ignore other arguments - } - else - { - if (i != argc-1) - { - Status(IDS_LAST_ARG_SHOULD_BE_RC, argv[i]); - return FALSE; - } - gsRCScript = argv[i]; - } - } - if (gsRCScript.empty()) - { - Status(IDS_LAST_ARG_SHOULD_BE_RC, argv[argc-1]); - return FALSE; - } - return TRUE; -} - -// Display resource string on its own line -static void displine(int nId) -{ - if (!nId) - { - _tprintf(_T("\n")); - return; - } - TCHAR line[200] = {0}; - LoadString(::GetModuleHandle(NULL), nId, line, 200); - _tprintf(_T("%s\n"), line); -} - -// Display usage information -static void Usage() -{ - if (gbSilent) - return; - - displine(0); - displine(IDS_USAGE_TITLE); - displine(IDS_USAGE_OPTIONS); - displine(IDS_USAGE_SLASH_P); - displine(IDS_USAGE_SLASH_S); - displine(IDS_USAGE_SLASH_B); - displine(IDS_USAGE_SLASH_V); - displine(IDS_USAGE_SLASH_O); - displine(IDS_USAGE_SLASH_R); - displine(IDS_USAGE_SLASH_I); - displine(IDS_USAGE_SLASH_L); - displine(IDS_USAGE_SLASH_Y); - displine(IDS_USAGE_SLASH_G); - displine(0); -} - -static BOOL BuildDll(LPCTSTR pszRCPath, LPCTSTR pszOutputPath, LPCTSTR pszOutputStem, String& strOutFile) -{ - const int TempStringLen = 4096; - String libs; - TCHAR *p = NULL; - TCHAR * linkArgs = NULL; - TCHAR *libsPath = NULL; - HANDLE hLink; - String strOutFolder(pszOutputPath); - String strStem(pszOutputStem); - - // Check RC file exists - if (!DoesFileExist(pszRCPath)) - { - Status(IDS_MISSING_RC_FILE, pszRCPath); - return FALSE; - } - - Status(IDS_CREATE_OUTDIR); - if (!MkDirEx(strOutFolder.c_str())) - { - Status(IDS_ERROR_MKDIR, gsOutPath.c_str()); - return FALSE; - } - Status(_T("OK\r\n")); - - TCHAR *rcArgs = new TCHAR[TempStringLen]; - _stprintf(rcArgs, _T("/l 0x%s /fo\"%s\\%s.res\" /i \"%s\" ") - _T("/d \"_AFXDLL\" /d \"CORTRON_BUILD\" \"%s\""), - gsLang.c_str(), - strOutFolder.c_str(), - strStem.c_str(), - gVcPaths.sIncludes.c_str(), - pszRCPath); - - String strRCArgs(rcArgs); - delete[] rcArgs; - String strLinkArgs; - - if (gbVerbose) - _tprintf(_T("%s %s\r\n\r\n"), gVcPaths.sRCExe.c_str(), strRCArgs.c_str()); - - Status(IDS_BUILD_RC); - HANDLE hRC = RunIt(gVcPaths.sRCExe.c_str(), strRCArgs.c_str(), TRUE, FALSE); - if (hRC) - { - DWORD dwReturn; - WaitForSingleObject(hRC, INFINITE); - GetExitCodeProcess(hRC, &dwReturn); - - if (dwReturn != 0) - { - Status(_T("Error\r\n")); - goto build_failed; - } - Status(_T("Done\r\n")); - } - else - Status(_T("Error creating process\r\n")); - - libsPath = new TCHAR[TempStringLen]; - _tcscpy(libsPath, gVcPaths.sLibs.c_str()); - p = _tcstok(libsPath, _T(";\r\n\t")); - while (p != NULL) - { - libs += _T("/libpath:\""); - libs += p; - libs += _T("\" "); - p = _tcstok(NULL, _T(";\r\n\t")); - } - delete[] libsPath; - - strOutFile = strOutFolder + _T("\\") + strStem + _T(".lang"); - - linkArgs = new TCHAR[TempStringLen]; - _stprintf(linkArgs, _T("/nologo /subsystem:console /dll ") - _T("/machine:I386 %s ") - _T("/noentry ") - _T("/out:\"%s\" ") - _T("\"%s\\%s.res\" "), - libs.c_str(), - strOutFile.c_str(), - strOutFolder.c_str(), - strStem.c_str()); - strLinkArgs = linkArgs; - delete[] linkArgs; - - if (gbVerbose) - _tprintf(_T("%s %s\r\n\r\n"), gVcPaths.sLinkExe, strLinkArgs); - - Status(IDS_LINK); - hLink = RunIt(gVcPaths.sLinkExe.c_str(), strLinkArgs.c_str(), TRUE, FALSE); - if (hLink) - { - DWORD dwReturn; - WaitForSingleObject(hLink, INFINITE); - GetExitCodeProcess(hLink, &dwReturn); - - if (dwReturn != 0) - { - Status(_T("Error\r\n")); - goto build_failed; - } - Status(_T("Done\r\n")); - } - else - { - Status(_T("Error creating process\r\n")); - goto build_failed; - } - - Status(IDS_SUCCESS); - Status(_T("\r\n")); - Status(_T(" ")); - Status(strOutFile.c_str()); - Status(_T("\r\n")); - return TRUE; - -build_failed: - Status(IDS_ABORT); - return FALSE; -} - -static bool DoesFileExist(LPCTSTR filepath) -{ - struct _stat statbuf = {0}; - int retval = _tstat(filepath, &statbuf); - return retval == 0; -} - -static BOOL CheckCompiler() -{ - // look for the compiler - if (!DoesFileExist(gVcPaths.sRCExe.c_str())) - { - Status(IDS_BAD_RC_PATH_FMT, gVcPaths.sRCExe.c_str()); - Usage(); - return FALSE; - } - - // look for the linker - if (!DoesFileExist(gVcPaths.sLinkExe.c_str())) - { - Status(IDS_BAD_LINK_PATH_FMT, gVcPaths.sLinkExe.c_str()); - Usage(); - return FALSE; - } - - return TRUE; -} - -static void Status(LPCTSTR szText) -{ - if (!gbSilent) - _tprintf(_T("%s"), szText); -} - -static void Status(UINT idstrText, LPCTSTR szText1 /*= NULL*/, LPCTSTR szText2 /*= NULL*/) -{ - if (gbSilent) - return; - - try { - String s; - if (szText1 != NULL && szText2 != NULL) - { - TCHAR tmpStr[200]; - LoadString(::GetModuleHandle(NULL), idstrText, tmpStr, 200); - s = tmpStr; - string_replace(s, _T("%1"), szText1); - string_replace(s, _T("%2"), szText2); - } - else if (szText1 != NULL) - { - TCHAR tmpStr[200]; - LoadString(::GetModuleHandle(NULL), idstrText, tmpStr, 200); - s = tmpStr; - string_replace(s, _T("%1"), szText1); - } - else - { - TCHAR tmpStr[200]; - LoadString(::GetModuleHandle(NULL), idstrText, tmpStr, 200); - s = tmpStr; - } - Status(s.c_str()); - } - catch (exception ex) - { - } -} - - -// Find locations of RC compiler and linker -static void InitModulePaths(const StringArray & VsBaseDirs) -{ - // Access to registry - CRegKeyEx reg; - - // Strategy is that we keep looking as long as we need anything (in gVcPaths) - - String sVcVersion; - - // Check for user-configured overrides - LPCTSTR settings = _T("Software\\Thingamahoochie\\MakeResDll\\Settings"); - if (RegOpenUser(reg, settings)) - { - gVcPaths.sVcBaseFolder = reg.ReadString(_T("VcBaseFolder"), _T("")); - if (gVcPaths.sRCExe.empty()) - gVcPaths.sRCExe = reg.ReadString(_T("RCExe"), _T("")); - if (gVcPaths.sLinkExe.empty()) - gVcPaths.sLinkExe = reg.ReadString(_T("LinkExe"), _T("")); - // This is the main way for the user to override these settings - // VcVersion values handled: - // Net2005 - Use Microsoft Visual Studio .NET 2005 - // Net2003 - Use Microsoft Visual Studio .NET 2003 - // Net - Use Microsoft Visual Studio .NET (2002) - // 6 - Use Microsoft Visual Studio 6 - // 5 - Use Microsoft Visual Studio 5 - sVcVersion = reg.ReadString(_T("VcVersion"), _T("")); - reg.Close(); - } - - VS_VERSION vsnum = VS_NONE; - // Check if user's choice is valid and installed - if (!sVcVersion.empty()) - { - VS_VERSION vstemp = MapRegistryValue(sVcVersion.c_str()); - if (vstemp != VS_NONE) - { - if (!VsBaseDirs[vstemp].empty()) - vsnum = vstemp; - } - } - - FindAndLoadVsVersion(VsBaseDirs, vsnum); - - _tprintf(_T("Build paths:\r\n")); - _tprintf(_T(" %s\r\n"), gVcPaths.sRCExe.c_str()); - _tprintf(_T(" %s\r\n"), gVcPaths.sLinkExe.c_str()); - _tprintf(_T(" inc: %s\r\n"), gVcPaths.sIncludes.c_str()); - _tprintf(_T(" lib: %s\r\n"), gVcPaths.sLibs.c_str()); -} - - -/** - * @brief Look for Visual Studio settings in registry - * sVcVersion, if specified, is user's preference, so only try it - * If it is blank, try all - * Return 1 if success - * Return 0 if not found - * Return -1 if specified version not installed (so caller will retry) - */ -static bool FindAndLoadVsVersion(const StringArray & VsBaseDirs, VS_VERSION vsnum) -{ - // Access to registry - CRegKeyEx reg; - - // Check for versions in descending order - for (int vi=VS_COUNT-1; vi>VS_NONE; --vi) - { - if (vsnum == VS_NONE || vsnum == vi) - { - String sProductDir = VsBaseDirs[vi]; - if (!sProductDir.empty()) - { - if (vi == VS_2005) - LoadVs2005Settings(sProductDir); - else if (vi == VS_2003) - LoadVs2003Settings(sProductDir); - else if (vi == VS_2002) - LoadVs2002Settings(sProductDir); - else if (vi == VS_6) - LoadVs6Settings(sProductDir); - return true; - } - } - } - return false; -} - - -/** - * @brief Load VS.NET 2005 settings into global gVcPaths - * Version 8.0 - */ -static void LoadVs2005Settings(const String & sProductDir) -{ - // Access to registry - CRegKeyEx reg; - - // Root directory of Visual C - // eg, C:\Program Files\Microsoft Visual Studio 8\VC\ - if (gVcPaths.sVcBaseFolder.empty()) - gVcPaths.sVcBaseFolder = sProductDir; - - // Get root directory of Visual Studio - LPCTSTR VsBaseKey = _T("SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VS"); - String sVsRoot; - if (RegOpenMachine(reg, VsBaseKey)) - { - // eg, C:\Program Files\Microsoft Visual Studio 8\ - sVsRoot = reg.ReadString(_T("ProductDir"), _T("")); - reg.Close(); - } - - // Found MSVC .NET 2005, so grab resource compiler & linker - if (gVcPaths.sRCExe.empty()) - gVcPaths.sRCExe = gVcPaths.sVcBaseFolder + _T("bin\\rc.exe"); - if (gVcPaths.sLinkExe.empty()) - gVcPaths.sLinkExe = gVcPaths.sVcBaseFolder + _T("bin\\link.exe"); - - if (RegOpenMachine(reg, _T("SOFTWARE\\Microsoft\\VisualStudio\\8.0"))) - { - // eg, C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ - gVcPaths.sAdditionalPath = reg.ReadString(_T("InstallDir"), _T("")); - TrimPath(gVcPaths.sAdditionalPath); - } - - // Now also grab includes & libs - // The default installation ones are in HKLM - // so we just take the default installation ones - LPCTSTR bd71 = _T("SOFTWARE\\Microsoft\\VisualStudio\\7.1\\VC\\VC_OBJECTS_PLATFORM_INFO\\Win32\\Directories"); - if (RegOpenMachine(reg, bd71)) - { - if (gVcPaths.sIncludes.empty()) - { - gVcPaths.sIncludes = reg.ReadString(_T("Include Dirs"), _T("")); - string_replace(gVcPaths.sIncludes, _T("$(VCInstallDir)"), gVcPaths.sVcBaseFolder); - } - if (gVcPaths.sLibs.empty()) - { - gVcPaths.sLibs = reg.ReadString(_T("Library Dirs"), _T("")); - string_replace(gVcPaths.sLibs, _T("$(VCInstallDir)"), gVcPaths.sVcBaseFolder); - if (!sVsRoot.empty()) - { - // eg C:\Program Files\Microsoft Visual Studio 8\SDK\v1.1")); - String sFrameworkSdkDir = sVsRoot + _T("SDK\\v1.1"); - string_replace(gVcPaths.sLibs, _T("$(FrameworkSDKDir)"), sFrameworkSdkDir); - } - } - reg.Close(); - } -} - -/** - * @brief Load Visual Studio .NET 2003 settings into global gVcPaths - * Version 7.1 - */ -static void LoadVs2003Settings(const String & sProductDir) -{ - // Access to registry - CRegKeyEx reg; - - // Root directory of Visual C - // eg, C:\Program Files\Microsoft Visual Studio 8\VC\ - if (gVcPaths.sVcBaseFolder.empty()) - gVcPaths.sVcBaseFolder = sProductDir; - - // Get root directory of Visual Studio - LPCTSTR VsBaseKey = _T("SOFTWARE\\Microsoft\\VisualStudio\\7.1\\Setup\\VS"); - String sVsRoot; - if (RegOpenMachine(reg, VsBaseKey)) - { - // eg, C:\Program Files\Microsoft Visual Studio .NET 2003\ - sVsRoot = reg.ReadString(_T("ProductDir"), _T("")); - reg.Close(); - } - - // Found MSVC .NET 2003, so grab resource compiler & linker - if (gVcPaths.sRCExe.empty()) - gVcPaths.sRCExe = gVcPaths.sVcBaseFolder + _T("bin\\rc.exe"); - if (gVcPaths.sLinkExe.empty()) - gVcPaths.sLinkExe = gVcPaths.sVcBaseFolder + _T("bin\\link.exe"); - - if (RegOpenMachine(reg, _T("SOFTWARE\\Microsoft\\VisualStudio\\7.1"))) - { - // eg, C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\ - gVcPaths.sAdditionalPath = reg.ReadString(_T("InstallDir"), _T("")); - TrimPath(gVcPaths.sAdditionalPath); - } - - // Now also grab includes & libs - // The default installation ones are in HKLM - // The user customized ones are not in the registry, but off in a DAT file under - // ...\Local Settings\Application Data\Microsoft\VisualStudio\7.1 - // so we just take the default installation ones - LPCTSTR bd71 = _T("SOFTWARE\\Microsoft\\VisualStudio\\7.1\\VC\\VC_OBJECTS_PLATFORM_INFO\\Win32\\Directories"); - if (RegOpenMachine(reg, bd71)) - { - if (gVcPaths.sIncludes.empty()) - { - gVcPaths.sIncludes = reg.ReadString(_T("Include Dirs"), _T("")); - string_replace(gVcPaths.sIncludes, _T("$(VCInstallDir)"), gVcPaths.sVcBaseFolder); - } - if (gVcPaths.sLibs.empty()) - { - gVcPaths.sLibs = reg.ReadString(_T("Library Dirs"), _T("")); - string_replace(gVcPaths.sLibs, _T("$(VCInstallDir)"), gVcPaths.sVcBaseFolder); - if (!sVsRoot.empty()) - { - // eg C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1")); - String sFrameworkSdkDir = sVsRoot + _T("SDK\\v1.1"); - string_replace(gVcPaths.sLibs, _T("$(FrameworkSDKDir)"), sFrameworkSdkDir); - } - } - reg.Close(); - } -} - -/** - * @brief Load Visual Studio .NET (2002) settings into global gVcPaths - * Version 7.0 - */ -static void LoadVs2002Settings(const String & sProductDir) -{ - // Access to registry - CRegKeyEx reg; - - // Get root directory of Visual C - if (gVcPaths.sVcBaseFolder.empty()) - gVcPaths.sVcBaseFolder = sProductDir; - - // Found MSVC .NET, so grab resource compiler & linker - if (gVcPaths.sRCExe.empty()) - gVcPaths.sRCExe = gVcPaths.sVcBaseFolder + _T("bin\\rc.exe"); - if (gVcPaths.sLinkExe.empty()) - gVcPaths.sLinkExe = gVcPaths.sVcBaseFolder + _T("bin\\link.exe"); - - // Now also grab includes & libs - // The default installation ones are in HKLM - // The user customized ones are not in the registry, but off in a DAT file under - // ...\Local Settings\Application Data\Microsoft\VisualStudio\7.0 - // so we just take the default installation ones - LPCTSTR bd70 = _T("SOFTWARE\\Microsoft\\VisualStudio\\7.0\\VC\\VC_OBJECTS_PLATFORM_INFO\\Win32\\Directories"); - if (RegOpenMachine(reg, bd70)) - { - String fmwk = gVcPaths.sVcBaseFolder+_T("FrameworkSDK\\"); - if (gVcPaths.sIncludes.empty()) - { - gVcPaths.sIncludes = reg.ReadString(_T("Include Dirs"), _T("")); - string_replace(gVcPaths.sIncludes, _T("$(VCInstallDir)"), gVcPaths.sVcBaseFolder); - string_replace(gVcPaths.sIncludes, _T("$(FrameworkSDKDir)"), fmwk); - } - if (gVcPaths.sLibs.empty()) - { - gVcPaths.sLibs = reg.ReadString(_T("Library Dirs"), _T("")); - string_replace(gVcPaths.sLibs, _T("$(VCInstallDir)"), gVcPaths.sVcBaseFolder); - string_replace(gVcPaths.sLibs, _T("$(FrameworkSDKDir)"), fmwk); - } - reg.Close(); - } -} - -/** - * @brief Load Visual Studio 6 settings into global gVcPaths - * Version 6.0 - */ -static void LoadVs6Settings(const String & sProductDir) -{ - // Access to registry - CRegKeyEx reg; - - // Get root directory of Visual C - // eg, C:\Program Files\Microsoft Visual Studio\VC98 - if (gVcPaths.sVcBaseFolder.empty()) - gVcPaths.sVcBaseFolder = sProductDir; - - LPCTSTR Dev6Dirs = _T("Software\\Microsoft\\DevStudio\\6.0\\Directories"); - if (RegOpenUser(reg, Dev6Dirs)) - { - // eg, C:\Program Files\Microsoft Visual Studio\COMMON\MSDev98\Bin - String sVsDevBin = reg.ReadString(_T("Install Dirs"), _T("")); - if (gVcPaths.sRCExe.empty()) - gVcPaths.sRCExe = sVsDevBin + _T("\\rc.exe"); - } - - // Get linker - // eg, C:\Program Files\Microsoft Visual Studio\VC98\bin\link.exe - if (gVcPaths.sLinkExe.empty()) - gVcPaths.sLinkExe = gVcPaths.sVcBaseFolder + _T("\\bin\\link.exe"); - - // Now also grab includes & libs - LPCTSTR bd = _T("Software\\Microsoft\\DevStudio\\6.0\\Build System\\Components\\Platforms\\Win32 (x86)\\Directories"); - if (RegOpenUser(reg, bd)) - { - if (gVcPaths.sIncludes.empty()) - gVcPaths.sIncludes = reg.ReadString(_T("Include Dirs"), _T("")); - if (gVcPaths.sLibs.empty()) - gVcPaths.sLibs = reg.ReadString(_T("Library Dirs"), _T("")); - reg.Close(); - } -} - -/** - * @brief Return true if character is a directory separator slash - */ -static bool IsSlash(TCHAR ch) -{ - return ch == '\\' || ch == '/'; -} - -/** - * @brief Remove any trailing slashes. - * @param [in, out] sPath String to handle. - */ -static void TrimPath(String & sPath) -{ - if (sPath.length() && IsSlash(sPath[sPath.length() - 1])) - sPath = sPath.erase(sPath.length() - 1, 1); -} - -/** - * @brief Load string array of base product directories for all installed Visual Studio versions - */ -static void LoadVsBaseDirs(StringArray & VsBaseDirs) -{ - VsBaseDirs.clear(); - VsBaseDirs.resize(VS_COUNT); - - // Access to registry - CRegKeyEx reg; - - if (RegOpenMachine(reg, gVs80VcBaseDir)) - { - VsBaseDirs[VS_2005] = reg.ReadString(_T("ProductDir"), _T("")).c_str(); - reg.Close(); - } - if (RegOpenMachine(reg, gVs71VcBaseDir)) - { - VsBaseDirs[VS_2003] = reg.ReadString(_T("ProductDir"), _T("")).c_str(); - reg.Close(); - } - if (RegOpenMachine(reg, gVs70VcBaseDir)) - { - VsBaseDirs[VS_2002] = reg.ReadString(_T("ProductDir"), _T("")).c_str(); - reg.Close(); - } - if (RegOpenMachine(reg, gVs6VcBaseDir)) - { - VsBaseDirs[VS_6] = reg.ReadString(_T("ProductDir"), _T("")).c_str(); - reg.Close(); - } -} - -static BOOL MkDirEx(LPCTSTR filename) -{ - TCHAR tempPath[_MAX_PATH] = {0}; - LPTSTR p; - - _tcscpy(tempPath, filename); - if (*_tcsinc(filename)==_T(':')) - p=_tcschr(_tcsninc(tempPath,3),_T('\\')); - else if (*filename==_T('\\')) - p=_tcschr(_tcsinc(tempPath),_T('\\')); - else - p=tempPath; - if (p!=NULL) - for (; *p != _T('\0'); p = _tcsinc(p)) - { - if (*p == _T('\\')) - { - _tccpy(p, _T("\0")); - if (0 && _tcscmp(tempPath, _T(".")) == 0) - { - // Don't call CreateDirectory(".") - } - else - { - if (!MyCreateDirectoryIfNeeded(tempPath) - && !MyCreateDirectoryIfNeeded(tempPath)) - { - String str(_T("Failed to create folder ")); - str += tempPath; - str += _T("\n"); - OutputDebugStr(str.c_str()); - } - _tccpy(p, _T("\\")); - } - } - - } - - if (!MyCreateDirectoryIfNeeded(filename) - && !MyCreateDirectoryIfNeeded(filename)) - { - String str(_T("Failed to create folder ")); - str += filename; - str += _T("\n"); - OutputDebugStr(str.c_str()); - } - - bool fileExists = DoesFileExist(filename); - return fileExists; -} - -// Create directory (via Win32 API) -// if success, or already exists, return TRUE -// if failure, return FALSE -// (NB: Win32 CreateDirectory reports failure if already exists) -static BOOL MyCreateDirectoryIfNeeded(LPCTSTR lpPathName) -{ - LPSECURITY_ATTRIBUTES lpSecurityAttributes = NULL; - int rtn = CreateDirectory(lpPathName, lpSecurityAttributes); - if (!rtn) - { - int errnum = GetLastError(); - // Consider it success if directory already exists - if (errnum == ERROR_ALREADY_EXISTS) - return TRUE; - } - return rtn; -} - -static HANDLE RunIt(LPCTSTR szExeFile, LPCTSTR szArgs, BOOL bMinimized /*= TRUE*/, BOOL bNewConsole /*= FALSE*/) -{ - STARTUPINFO si; - PROCESS_INFORMATION procInfo; - - si.cb = sizeof(STARTUPINFO); - si.lpReserved=NULL; - si.lpDesktop = _T(""); - si.lpTitle = NULL; - si.dwFlags = STARTF_USESHOWWINDOW; - si.wShowWindow = (WORD)(SW_HIDE); - si.cbReserved2 = 0; - si.lpReserved2 = NULL; - - TCHAR args[4096]; - _stprintf(args,_T("\"%s\" %s"), szExeFile, szArgs); - if (CreateProcess(szExeFile, args, NULL, NULL, - FALSE, NORMAL_PRIORITY_CLASS|(bNewConsole? CREATE_NEW_CONSOLE:0), - NULL, _T(".\\"), &si, &procInfo)) - { - CloseHandle(procInfo.hThread); - return procInfo.hProcess; - } - - return INVALID_HANDLE_VALUE; -} - -static void SplitFilename(LPCTSTR path, TCHAR * folder, TCHAR * filename, TCHAR * ext) -{ - TCHAR spath[MAX_PATH] = {0}; - TCHAR sname[MAX_PATH] = {0}; - TCHAR sdrive[_MAX_DRIVE] = {0}; - TCHAR sdir[_MAX_PATH] = {0}; - TCHAR sext[MAX_PATH] = {0}; - - _tsplitpath(path, sdrive, sdir, sname, sext); - _tcscat(spath, sdrive); - _tcscat(spath, sdir); - - if (folder != NULL) - _tcscpy(folder, spath); - if (filename != NULL) - _tcscpy(filename, sname); - if (ext != NULL) - _tcscpy(ext, sext); -} diff --git a/Tools/MakeResDll/MakeResDll.dsp b/Tools/MakeResDll/MakeResDll.dsp deleted file mode 100755 index 89572ddbe..000000000 --- a/Tools/MakeResDll/MakeResDll.dsp +++ /dev/null @@ -1,155 +0,0 @@ -# Microsoft Developer Studio Project File - Name="MakeResDll" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=MakeResDll - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "MakeResDll.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "MakeResDll.mak" CFG="MakeResDll - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "MakeResDll - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "MakeResDll - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "MakeResDll - Win32 Release" - -# PROP BASE Use_MFC 2 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\BuildTmp\MakeResDll___Win32_Release" -# PROP Intermediate_Dir "..\..\BuildTmp\MakeResDll___Win32_Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\src\common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"..\..\Build\MergeRelease\MakeResDll.exe" - -!ELSEIF "$(CFG)" == "MakeResDll - Win32 Debug" - -# PROP BASE Use_MFC 2 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\BuildTmp\MakeResDll___Win32_Debug" -# PROP Intermediate_Dir "..\..\BuildTmp\MakeResDll___Win32_Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_AFXDLL" /Yu"stdafx.h" /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\src\common" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\..\Build\MergeDebug\MakeResDll.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "MakeResDll - Win32 Release" -# Name "MakeResDll - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\MakeResDll.cpp -# End Source File -# Begin Source File - -SOURCE=.\MakeResDll.rc -# End Source File -# Begin Source File - -SOURCE=..\..\Src\Common\RegKey.cpp -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.cpp -# ADD CPP /Yc"stdafx.h" -# End Source File -# Begin Source File - -SOURCE=..\..\Src\Common\UnicodeString.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\MakeResDll.h -# End Source File -# Begin Source File - -SOURCE=..\..\Src\Common\RegKey.h -# End Source File -# Begin Source File - -SOURCE=.\Resource.h -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.h -# End Source File -# Begin Source File - -SOURCE=..\..\Src\Common\UnicodeString.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# Begin Source File - -SOURCE=.\Merge.ico -# End Source File -# Begin Source File - -SOURCE=.\res\Merge.ico -# End Source File -# End Group -# Begin Source File - -SOURCE=.\Changes.txt -# End Source File -# Begin Source File - -SOURCE=.\readme.txt -# End Source File -# End Target -# End Project diff --git a/Tools/MakeResDll/MakeResDll.h b/Tools/MakeResDll/MakeResDll.h deleted file mode 100755 index 47cf4eb25..000000000 --- a/Tools/MakeResDll/MakeResDll.h +++ /dev/null @@ -1,12 +0,0 @@ - -#if !defined(AFX_MAKERESDLL_H__A0529477_F288_11D2_826F_00A024706EDC__INCLUDED_) -#define AFX_MAKERESDLL_H__A0529477_F288_11D2_826F_00A024706EDC__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 - -#include "resource.h" - - -#endif // !defined(AFX_MAKERESDLL_H__A0529477_F288_11D2_826F_00A024706EDC__INCLUDED_) diff --git a/Tools/MakeResDll/MakeResDll.rc b/Tools/MakeResDll/MakeResDll.rc deleted file mode 100755 index 1f7509957..000000000 --- a/Tools/MakeResDll/MakeResDll.rc +++ /dev/null @@ -1,246 +0,0 @@ -//Microsoft Developer Studio generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "windows.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE DISCARDABLE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE DISCARDABLE -BEGIN - "#include ""windows.h""\r\n" - "\0" -END - -3 TEXTINCLUDE DISCARDABLE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_VSVERSION DIALOG DISCARDABLE 0, 0, 186, 177 -STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -CAPTION "MakeResDll Visual Studio Version" -FONT 9, "‚l‚r ‚oƒSƒVƒbƒN" -BEGIN - DEFPUSHBUTTON "OK",IDOK,34,156,50,14 - PUSHBUTTON "Cancel",IDCANCEL,111,156,50,14 - GROUPBOX "Visual Studio Versions",IDC_VSTUDIO_GROUP,7,7,172,141 - CONTROL "Visual Studio .NET 2005",IDC_VS2005_BTN,"Button", - BS_AUTORADIOBUTTON,14,22,108,14 - EDITTEXT IDC_INSTALL_DIR_TEXT,14,129,155,13,ES_AUTOHSCROLL | - ES_READONLY - CONTROL "Visual Studio .NET 2003",IDC_VS2003_BTN,"Button", - BS_AUTORADIOBUTTON,14,39,108,14 - CONTROL "Visual Studio 6",IDC_VS6_BTN,"Button", - BS_AUTORADIOBUTTON,14,73,108,14 - CONTROL "Visual Studio .NET (2002)",IDC_VS2002_BTN,"Button", - BS_AUTORADIOBUTTON,14,56,108,14 - CONTROL "Visual Studio 5",IDC_VS5_BTN,"Button", - BS_AUTORADIOBUTTON,14,90,108,14 - LTEXT "Installation Path:",IDC_INSTALL_DIR_LABEL,15,113,70,10 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO DISCARDABLE -BEGIN - IDD_VSVERSION, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 179 - TOPMARGIN, 7 - BOTTOMMARGIN, 170 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDR_MAINFRAME ICON DISCARDABLE "Merge.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE DISCARDABLE -BEGIN - IDR_MAINFRAME "ResourceDLL Builder\n\nBuildR\n\n\nBuildResDll.Document\nBuildR Document" - IDS_BADBASEDIR "Please locate the Developer Studio main directory" - IDS_CHOOSEOUTDIR "Choose the output folder" - IDS_SELECTRC_CAPTION "Select an RC Script..." - IDS_SELECT_RCEXE_CAPTION "Please locate RC.EXE..." - IDS_SELECT_LINKEXE_CAPTION "Please locate LINK.EXE..." - IDS_CHECK_COMPILER_FMT "Checking compiler..." - IDS_CREATE_OUTDIR "Creating output folder..." - IDS_BUILD_RC "Compiling resources..." - IDS_LINK "Binding resources to final DLL..." - IDS_SUCCESS "Resource DLL created successfully as:" - IDS_CHECK_OBJ "Building ResDll.obj..." - IDS_CHECK_DEF "Building ResDll.def..." - IDS_ABORT "DLL was not created." - IDS_BAD_RC_PATH_FMT "Invalid RC compiler path: %1" - IDS_BAD_LINK_PATH_FMT "Invalid linker path: %1" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RC_FILTER "RC Scripts (*.rc)|*.rc||" - IDS_EXE_FILTER "Executable Files (*.exe)|*.exe||" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RESOURCE_SIZE_NO_MATCH - "Resource sizes don't match, unable to continue" - IDS_ERR_CREATE_RES_FILE "Unable to create resource file" - IDS_ERROR_MKDIR "Error creating directory: %1" - IDS_ERROR_MISSING_SWITCH_ARG - "Bad arguments, switch requires following argument: %1" - IDS_LAST_ARG_SHOULD_BE_RC "Last argument should be RC file: %1" - IDS_USAGE_TITLE "USAGE: MakeResDll [options] MyRcScript.rc" - IDS_USAGE_OPTIONS "OPTIONS:" - IDS_USAGE_SLASH_P "\t/p : Pause after build" - IDS_USAGE_SLASH_S "\t/s : Run silently" - IDS_USAGE_SLASH_B "\t/b : Batch mode (no message boxes on success)" - IDS_USAGE_SLASH_V "\t/v : Verbose output" - IDS_USAGE_SLASH_O "\t/o : Specify the output directory for the language DLL" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_USAGE_SLASH_R "\t/r : Specify the path to the resource compiler executable" - IDS_USAGE_SLASH_L "\t/l : Specify the path to the linker" - IDS_USAGE_SLASH_I "\t/i : Specify include paths" - IDS_USAGE_SLASH_Y "\t/y : Specify library paths" - IDS_USAGE_SLASH_G "\t/g : Specify the language ID" - IDS_MISSING_RC_FILE "RC file not found: %1" - IDS_NO_VS_FOUND "No versions of Visual Studio found" - IDS_ERROR_WRITING_PREF "Error writing preference to registry" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_PRESS_ANY_KEY "<< press ENTER to continue >>" - IDS_SUCCESS_FMT "The resource DLL was built successfully, and can be found in the following location:\r\n\r\n%1" -END - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - -///////////////////////////////////////////////////////////////////////////// -// Spanish (Castilian) (unknown sub-lang: 0x9) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESO) -#ifdef _WIN32 -LANGUAGE LANG_SPANISH, 0x9 -#pragma code_page(1252) -#endif //_WIN32 - -#ifndef _MAC -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,7,0 - PRODUCTVERSION 1,0,7,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "\0" - VALUE "CompanyName", "\0" - VALUE "FileDescription", "Compiler for WinMerge language DLLs\0" - VALUE "FileVersion", "1.0.7.0\0" - VALUE "InternalName", "MakeResDll\0" - VALUE "LegalCopyright", "Copyright © 2003-2006\0" - VALUE "LegalTrademarks", "\0" - VALUE "OriginalFilename", "MakeResDll.exe\0" - VALUE "PrivateBuild", "\0" - VALUE "ProductName", "WinMerge\0" - VALUE "ProductVersion", "1.0.7.0\0" - VALUE "SpecialBuild", "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -#endif // !_MAC - -#endif // Spanish (Castilian) (unknown sub-lang: 0x9) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/Tools/MakeResDll/Merge.ico b/Tools/MakeResDll/Merge.ico deleted file mode 100755 index a28fb45cf5618171ba09d033c3449373f6953ef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92854 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 YaL>N>YqamvPv`nR{dC&Lg5v-G0G;ZDLI3~& diff --git a/Tools/MakeResDll/StdAfx.cpp b/Tools/MakeResDll/StdAfx.cpp deleted file mode 100755 index 00215b34e..000000000 --- a/Tools/MakeResDll/StdAfx.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// stdafx.cpp : source file that includes just the standard includes -// MakeResDll.pch will be the pre-compiled header -// stdafx.obj will contain the pre-compiled type information - -#include "stdafx.h" -// Following files included from WinMerge/Src/Common -#include "RegKey.h" - -// TODO: reference any additional headers you need in STDAFX.H -// and not in this file - -// Get appropriate clipboard format for TCHAR text -int GetClipTcharTextFormat() -{ -#ifdef _UNICODE - return CF_UNICODETEXT; -#else - return CF_TEXT; -#endif // _UNICODE -} - -// Read-only open of registry key under HKEY_LOCAL_MACHINE -bool -RegOpenMachine(CRegKeyEx & reg, LPCTSTR key) -{ - return reg.OpenNoCreateWithAccess(HKEY_LOCAL_MACHINE, key, KEY_QUERY_VALUE) == ERROR_SUCCESS; -} - -// Read-only open of registry key under HKEY_CURRENT_USER -bool -RegOpenUser(CRegKeyEx & reg, LPCTSTR key) -{ - return reg.OpenNoCreateWithAccess(HKEY_CURRENT_USER, key, KEY_QUERY_VALUE) == ERROR_SUCCESS; -} - diff --git a/Tools/MakeResDll/StdAfx.h b/Tools/MakeResDll/StdAfx.h deleted file mode 100755 index a9562792c..000000000 --- a/Tools/MakeResDll/StdAfx.h +++ /dev/null @@ -1,31 +0,0 @@ -// stdafx.h : include file for standard system include files, -// or project specific include files that are used frequently, but -// are changed infrequently -// - -#if !defined(AFX_STDAFX_H__A0529471_F288_11D2_826F_00A024706EDC__INCLUDED_) -#define AFX_STDAFX_H__A0529471_F288_11D2_826F_00A024706EDC__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 - -#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers - -#include - -// TODO: reference additional headers your program requires here - -class CRegKeyEx; -bool RegOpenMachine(CRegKeyEx & reg, LPCTSTR key); -bool RegOpenUser(CRegKeyEx & reg, LPCTSTR key); - -enum VS_VERSION { VS_NONE=-1, VS_6, VS_2002, VS_2003, VS_2005, VS_COUNT }; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - - /** @brief Get appropriate clipboard format for TCHAR text, ie, CF_TEXT or CF_UNICODETEXT */ -int GetClipTcharTextFormat(); - -#endif // !defined(AFX_STDAFX_H__A0529471_F288_11D2_826F_00A024706EDC__INCLUDED_) diff --git a/Tools/MakeResDll/readme.txt b/Tools/MakeResDll/readme.txt deleted file mode 100755 index 316b6a1e2..000000000 --- a/Tools/MakeResDll/readme.txt +++ /dev/null @@ -1,45 +0,0 @@ -MakeResDll - -This program invokes a resource compiler and a linker to produce -a language DLL from an RC source file. - -It searches the registry to find, in order of preference: - Visual Studio .NET 2005 - Visual Studio .NET 2003 - Visual Studio .NET (2002) - Visual Studio 6 - Visual Studio 5 - -It reads paths from the registry to find the locations for -the RC compiler, the linker, and the include and library paths -(which it passes on the commandline when it calls the RC -compiler and linker). - -You may force it to use a particular version of MakeResDll by -invoking it with the /ui switch, which will bring up a dialog -allowing you to choose the version of Visual Studio desired. - -This actually simply sets the registry value "VcVersion" -under key HKCU\Software\\Thingamahoochie\\MakeResDll\\Settings -as follows: - MSVC5: VcVersion=5 - MSVC6: VcVersion=6 - MSVC.Net 2002: VcVersion=Net - MSVC.Net 2003: VcVersion=Net2003 - MSVC.Net 2005: VcVersion=Net2005 - -If you wish to override the paths used for some arcane reason, -these settings may be set -- the following example shows it -set to use the default locations for MSVC6: - -HKCU\Software\\Thingamahoochie\\MakeResDll\\Settings - VcBaseFolder = C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin - RCExe = C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\rc.exe - LinkExe = C:\Program Files\Microsoft Visual Studio\vc98\bin\link.exe - - -The paths used by the program were largely deduced by examining -the vcvars32.bat files that ship with the various versions, at, eg: - - C:\Program Files\Microsoft Visual Studio .NET\Common7\Tools\vsvars32.bat - C:\Program Files\Microsoft Visual Studio\VC98\Bin\vcvars32.bat diff --git a/Tools/MakeResDll/resource.h b/Tools/MakeResDll/resource.h deleted file mode 100755 index 5b55a30bd..000000000 --- a/Tools/MakeResDll/resource.h +++ /dev/null @@ -1,65 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. -// Used by MakeResDll.rc -// -#define IDS_HELLO 1 -#define IDD_VSVERSION 101 -#define IDR_MAINFRAME 128 -#define IDS_BADBASEDIR 129 -#define IDS_CHOOSEOUTDIR 130 -#define IDS_SELECTRC_CAPTION 131 -#define IDS_SELECT_RCEXE_CAPTION 132 -#define IDS_SELECT_LINKEXE_CAPTION 133 -#define IDS_CHECK_COMPILER_FMT 134 -#define IDS_CREATE_OUTDIR 135 -#define IDS_BUILD_RC 136 -#define IDS_LINK 137 -#define IDS_SUCCESS 138 -#define IDS_CHECK_OBJ 139 -#define IDS_CHECK_DEF 140 -#define IDS_ABORT 141 -#define IDS_BAD_RC_PATH_FMT 142 -#define IDS_BAD_LINK_PATH_FMT 143 -#define IDS_PRESS_ANY_KEY 144 -#define IDS_SUCCESS_FMT 145 -#define IDS_RC_FILTER 500 -#define IDS_EXE_FILTER 501 -#define IDS_RESOURCE_SIZE_NO_MATCH 868 -#define IDS_ERR_CREATE_RES_FILE 869 -#define IDS_ERROR_MKDIR 870 -#define IDS_ERROR_MISSING_SWITCH_ARG 871 -#define IDS_LAST_ARG_SHOULD_BE_RC 872 -#define IDS_USAGE_TITLE 873 -#define IDS_USAGE_OPTIONS 874 -#define IDS_USAGE_SLASH_P 875 -#define IDS_USAGE_SLASH_S 876 -#define IDS_USAGE_SLASH_B 877 -#define IDS_USAGE_SLASH_V 878 -#define IDS_USAGE_SLASH_O 879 -#define IDS_USAGE_SLASH_R 880 -#define IDS_USAGE_SLASH_L 881 -#define IDS_USAGE_SLASH_I 882 -#define IDS_USAGE_SLASH_Y 883 -#define IDS_USAGE_SLASH_G 884 -#define IDS_MISSING_RC_FILE 890 -#define IDS_NO_VS_FOUND 891 -#define IDS_ERROR_WRITING_PREF 892 -#define IDC_VSTUDIO_GROUP 1001 -#define IDC_VS2005_BTN 1003 -#define IDC_INSTALL_DIR_TEXT 1004 -#define IDC_VS2003_BTN 1005 -#define IDC_VS6_BTN 1006 -#define IDC_VS2002_BTN 1007 -#define IDC_VS5_BTN 1008 -#define IDC_INSTALL_DIR_LABEL 1009 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 102 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1010 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/Tools/Scripts/CreateRcFilesFromPoFiles.bat b/Tools/Scripts/CreateRcFilesFromPoFiles.bat deleted file mode 100644 index 983494186..000000000 --- a/Tools/Scripts/CreateRcFilesFromPoFiles.bat +++ /dev/null @@ -1,9 +0,0 @@ -@echo off -rem This batch file calls the script to creates the language RC files from the -rem language PO files. - -pushd "../../Src/Languages/" -cscript //nologo CreateRcFilesFromPoFiles.vbs -popd - -@echo on \ No newline at end of file -- 2.11.0