OSDN Git Service

heksedit - First step towards UI translation
authorJochen Tucht <jtuc@users.sourceforge.net>
Sat, 30 Aug 2008 17:40:22 +0000 (17:40 +0000)
committerJochen Tucht <jtuc@users.sourceforge.net>
Sat, 30 Aug 2008 17:40:22 +0000 (17:40 +0000)
51 files changed:
Externals/heksedit/ChooseDiffDlg.cpp
Externals/heksedit/CopyHexdumpDlg.cpp
Externals/heksedit/DllProxies.cpp [new file with mode: 0644]
Externals/heksedit/DllProxies.h [new file with mode: 0644]
Externals/heksedit/FillWithDlg.cpp
Externals/heksedit/FindDlg.cpp
Externals/heksedit/History.txt
Externals/heksedit/LangArray.cpp [new file with mode: 0644]
Externals/heksedit/LangArray.h [new file with mode: 0644]
Externals/heksedit/Languages/20080825T174325.CreateMasterPotFile [new file with mode: 0644]
Externals/heksedit/Languages/20080825T175125.UpdatePoFilesFromPotFile [new file with mode: 0644]
Externals/heksedit/Languages/CreateMasterPotFile.vbs [new file with mode: 0644]
Externals/heksedit/Languages/StringBlacklist.txt [new file with mode: 0644]
Externals/heksedit/Languages/UpdatePoFilesFromPotFile.vbs [new file with mode: 0644]
Externals/heksedit/Languages/heksedit.rc [new file with mode: 0644]
Externals/heksedit/OpenPartiallyDlg.cpp
Externals/heksedit/PDrive95.cpp
Externals/heksedit/PDrive95.h
Externals/heksedit/PDriveNT.cpp
Externals/heksedit/PhysicalDrive.cpp
Externals/heksedit/PhysicalDrive.h
Externals/heksedit/PreLink.bat [new file with mode: 0644]
Externals/heksedit/ShortcutsDlg.cpp
Externals/heksedit/Simparr.cpp
Externals/heksedit/Simparr.h
Externals/heksedit/UpgradeDlg.cpp
Externals/heksedit/VersionData.h [new file with mode: 0644]
Externals/heksedit/dllmain.cpp
Externals/heksedit/frhed.dsp
Externals/heksedit/frhed.rc
Externals/heksedit/frhed.vcproj
Externals/heksedit/gktools.cpp
Externals/heksedit/gtools.cpp
Externals/heksedit/gtools.h
Externals/heksedit/heksedit.dsp
Externals/heksedit/heksedit.h
Externals/heksedit/heksedit.rc
Externals/heksedit/heksedit.vcproj
Externals/heksedit/hexwnd.cpp
Externals/heksedit/hexwnd.h
Externals/heksedit/ido.cpp
Externals/heksedit/idt.cpp
Externals/heksedit/main.cpp
Externals/heksedit/precomp.h
Externals/heksedit/res/Toolbar.bmp [new file with mode: 0644]
Externals/heksedit/res/icon1.ico [new file with mode: 0644]
Externals/heksedit/resource.h
Externals/heksedit/shtools.cpp
Externals/heksedit/toolbar.cpp
Externals/heksedit/version.h
Externals/heksedit/version.rc [new file with mode: 0644]

index 4f882f2..79c7f52 100644 (file)
@@ -1,6 +1,5 @@
 #include "precomp.h"\r
 #include "resource.h"\r
-#include <shlwapi.h>\r
 #include "clipboard.h"\r
 #include "hexwnd.h"\r
 #include "hexwdlg.h"\r
@@ -8,10 +7,12 @@
 void ChooseDiffDlg::add_diff(HWND hwndList, int diff, int lower, int upper)\r
 {\r
        char buf[100];\r
-       sprintf(buf, "%d) 0x%x=%d to 0x%x=%d (%d bytes)", diff, lower, lower,\r
-               upper, upper, upper - lower + 1);\r
+       sprintf(buf, "%d) 0x%x=%n%d to 0x%x=%n%d (%d bytes)", diff,\r
+               lower, &lower, lower,\r
+               upper, &upper, upper,\r
+               upper - lower + 1);\r
        int i = SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)buf);\r
-       SendMessage(hwndList, LB_SETITEMDATA, i, lower);\r
+       SendMessage(hwndList, LB_SETITEMDATA, i, MAKELONG(lower, upper));\r
 }\r
 \r
 //-------------------------------------------------------------------\r
@@ -59,7 +60,6 @@ int ChooseDiffDlg::get_diffs(HWND hwndList, char *ps, int sl, char *pd, int dl)
 BOOL ChooseDiffDlg::OnInitDialog(HWND hDlg)\r
 {\r
        char szFileName[_MAX_PATH];\r
-       char szTitleName[_MAX_FNAME + _MAX_EXT];\r
        szFileName[0] = '\0';\r
        OPENFILENAME ofn;\r
        ZeroMemory(&ofn, sizeof ofn);\r
@@ -68,22 +68,22 @@ BOOL ChooseDiffDlg::OnInitDialog(HWND hDlg)
        ofn.lpstrFilter = "All Files (*.*)\0*.*\0\0";\r
        ofn.lpstrFile = szFileName;\r
        ofn.nMaxFile = _MAX_PATH;\r
-       ofn.lpstrFileTitle = szTitleName;\r
-       ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT;\r
        ofn.lpstrTitle = "Choose file to compare with";\r
-       if (GetOpenFileName(&ofn))\r
+       if (!GetOpenFileName(&ofn))\r
+               return FALSE;\r
+       int filehandle = _open(szFileName, _O_RDONLY|_O_BINARY);\r
+       if (filehandle == -1)\r
        {\r
-               int filehandle = _open(szFileName, _O_RDONLY|_O_BINARY,_S_IREAD|_S_IWRITE);\r
-               if (filehandle == -1)\r
-               {\r
-                       MessageBox(hDlg, "Error while opening file.", "Compare", MB_ICONERROR);\r
-                       EndDialog(hDlg, IDCANCEL);\r
-               }\r
-               else if (int filelen = _filelength(filehandle))\r
+               MessageBox(hDlg, "Error while opening file.", "Compare", MB_ICONERROR);\r
+               return FALSE;\r
+       }\r
+       BOOL bDone = FALSE;\r
+       if (int filelen = _filelength(filehandle))\r
+       {\r
+               int iDestFileLen = filelen;\r
+               int iSrcFileLen = DataArray.GetLength() - iCurByte;\r
+               if (char *cmpdata = new char[filelen])\r
                {\r
-                       int iDestFileLen = filelen;\r
-                       int iSrcFileLen = DataArray.GetLength() - iCurByte;\r
-                       char *cmpdata = new char[filelen];\r
                        // Read data.\r
                        if (_read(filehandle, cmpdata, filelen) != -1)\r
                        {\r
@@ -96,28 +96,27 @@ BOOL ChooseDiffDlg::OnInitDialog(HWND hDlg)
                                        sprintf(buf, "Remaining loaded data size: %d, size of file on disk: %d.", iSrcFileLen, iDestFileLen);\r
                                        SetDlgItemText(hDlg, IDC_STATIC2, buf);\r
                                        SendMessage(hwndList, LB_SETCURSEL, 0, 0);\r
+                                       bDone = TRUE;\r
                                }\r
                                else\r
                                {\r
                                        // No difference.\r
                                        MessageBox(hDlg, "Data matches exactly.", "Compare", MB_ICONINFORMATION);\r
-                                       EndDialog(hDlg, IDCANCEL);\r
                                }\r
                        }\r
                        else\r
                        {\r
                                MessageBox(hDlg, "Error while reading from file.", "Compare", MB_ICONERROR);\r
-                               EndDialog(hDlg, IDCANCEL);\r
                        }\r
                        delete[] cmpdata;\r
                }\r
-               _close(filehandle);\r
-       }\r
-       else\r
-       {\r
-               EndDialog(hDlg, IDCANCEL);\r
+               else\r
+               {\r
+                       MessageBox(hDlg, "Not enough memory.", "Compare", MB_ICONERROR);\r
+               }\r
        }\r
-       return TRUE;\r
+       _close(filehandle);\r
+       return bDone;\r
 }\r
 \r
 //-------------------------------------------------------------------\r
@@ -126,7 +125,9 @@ INT_PTR ChooseDiffDlg::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lPara
        switch (iMsg)\r
        {\r
        case WM_INITDIALOG:\r
-               return OnInitDialog(hDlg);\r
+               if (!OnInitDialog(hDlg))\r
+                       EndDialog(hDlg, IDCANCEL);\r
+               return TRUE;\r
        case WM_COMMAND:\r
                switch (wParam)\r
                {\r
@@ -167,15 +168,13 @@ INT_PTR ChooseDiffDlg::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lPara
                                if (i != -1)\r
                                {\r
                                        SendMessage(hwndList, LB_GETTEXT, i, (LPARAM)buf);\r
-                                       if (LPTSTR p = StrRChr(buf, 0, '('))\r
-                                       {\r
-                                               iCurByte += SendMessage(hwndList, LB_GETITEMDATA, i, 0);\r
-                                               iStartOfSelection = iCurByte;\r
-                                               iEndOfSelection = iCurByte + StrToInt(p + 1) - 1;\r
-                                               bSelected = TRUE;\r
-                                               adjust_view_for_selection();\r
-                                               repaint();\r
-                                       }\r
+                                       DWORD dw = SendMessage(hwndList, LB_GETITEMDATA, i, 0);\r
+                                       iStartOfSelection = iCurByte + StrToInt(buf + LOWORD(dw));\r
+                                       iEndOfSelection = iCurByte + StrToInt(buf + HIWORD(dw));\r
+                                       iCurByte = iStartOfSelection;\r
+                                       bSelected = TRUE;\r
+                                       adjust_view_for_selection();\r
+                                       repaint();\r
                                }\r
                        }\r
                        // fall through\r
index 9dd8a1d..f5e567f 100644 (file)
@@ -19,12 +19,8 @@ BOOL CopyHexdumpDlg::OnInitDialog(HWND hDlg)
        {\r
                // Assume selected area is to be hexdumped.\r
                // Make sure end of selection is greater than start of selection.\r
-//Pabs changed - line remove & insert - works better now for both exporting types\r
-               iCopyHexdumpDlgStart = iStartOfSelection ;\r
-               iCopyHexdumpDlgEnd = iEndOfSelection ;\r
-               if (iCopyHexdumpDlgEnd < iCopyHexdumpDlgStart)\r
-                       swap(iCopyHexdumpDlgStart, iCopyHexdumpDlgEnd);\r
-//end\r
+               iCopyHexdumpDlgStart = iGetStartOfSelection();\r
+               iCopyHexdumpDlgEnd = iGetEndOfSelection();\r
        }\r
        char buf[16];\r
        sprintf(buf, "%x", iCopyHexdumpDlgStart);\r
diff --git a/Externals/heksedit/DllProxies.cpp b/Externals/heksedit/DllProxies.cpp
new file mode 100644 (file)
index 0000000..4e0888a
--- /dev/null
@@ -0,0 +1,137 @@
+/*/DllProxies.cpp\r
+\r
+[The MIT license]\r
+\r
+Copyright (c) Jochen Neubeck\r
+\r
+Permission is hereby granted, free of charge, to any person obtaining a copy\r
+of this software and associated documentation files (the "Software"), to deal\r
+in the Software without restriction, including without limitation the rights\r
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+copies of the Software, and to permit persons to whom the Software is\r
+furnished to do so, subject to the following conditions:\r
+\r
+The above copyright notice and this permission notice shall be included in\r
+all copies or substantial portions of the Software.\r
+\r
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
+SOFTWARE.\r
+\r
+[ChangeLog]\r
+\r
+DATE:          BY:                                     DESCRIPTION:\r
+==========     ==================      ================================================\r
+2007-02-03     Jochen Neubeck          Created\r
+2008-08-24     Jochen Neubeck          FormatMessage\r
+*/\r
+#include "precomp.h"\r
+#include "DllProxies.h"\r
+\r
+// If MFC is unavailable, resort to FatalAppExit for exceptions.\r
+#ifndef _AFX\r
+#define AfxThrowOleDispatchException FatalAppExit\r
+#endif\r
+\r
+// TCHAR-aware function name decoration\r
+#ifdef _UNICODE\r
+#define AW "W"\r
+#else\r
+#define AW "A"\r
+#endif\r
+\r
+/**\r
+ * @brief Load a dll and import a number of functions.\r
+ */\r
+LPVOID DllProxy::Load()\r
+{\r
+       if (Names[0])\r
+       {\r
+               if (Names[1] == 0 || Names[1] == Names[0])\r
+                       return 0;\r
+               HMODULE handle = LoadLibraryA(Names[0]);\r
+               if (handle == 0)\r
+               {\r
+                       Names[1] = 0;\r
+                       return 0;\r
+               }\r
+               LPCSTR *export = Names;\r
+               *Names = 0;\r
+               while (LPCSTR name = *++export)\r
+               {\r
+                       *export = (LPCSTR)GetProcAddress(handle, name);\r
+                       if (*export == 0)\r
+                       {\r
+                               Names[0] = Names[1] = name;\r
+                               Names[2] = (LPCSTR)handle;\r
+                               return 0;\r
+                       }\r
+               }\r
+               *export = (LPCSTR)handle;\r
+       }\r
+       return this + 1;\r
+}\r
+\r
+/**\r
+ * @brief Load a dll and import a number of functions, or throw an exception.\r
+ */\r
+LPVOID DllProxy::EnsureLoad()\r
+{\r
+       if (!Load())\r
+       {\r
+               TCHAR buf[1024];\r
+               FormatMessage(buf);\r
+               AfxThrowOleDispatchException(0, buf);\r
+       }\r
+       return this + 1;\r
+}\r
+\r
+/**\r
+ * @brief Format an appropriate error message.\r
+ */\r
+void DllProxy::FormatMessage(LPTSTR buf)\r
+{\r
+       int cch = wsprintf(buf, _T("%hs"), Names[0]);\r
+       DWORD error = ERROR_MOD_NOT_FOUND;\r
+       if (Names[1])\r
+       {\r
+               buf[cch++] = '@';\r
+               cch += ::GetModuleFileName((HMODULE)Names[2], buf + cch, MAX_PATH);\r
+               error = ERROR_PROC_NOT_FOUND;\r
+       }\r
+       buf[cch++] = ':';\r
+       buf[cch++] = '\n';\r
+       ::FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, error, 0, buf + cch, MAX_PATH, 0);\r
+}\r
+\r
+/**\r
+ * @brief RAWIO32 dll proxy\r
+ */\r
+DllProxy::Instance<struct RAWIO32> RAWIO32 =\r
+{\r
+       "RAWIO32.DLL",\r
+       "ResetDisk",\r
+       "ReadPhysicalSector",\r
+       "WritePhysicalSector",\r
+       "ReadDiskGeometry",\r
+       "EI13GetDriveParameters",\r
+       "EI13ReadSector",\r
+       "EI13WriteSector",\r
+       (HMODULE)0\r
+};\r
+\r
+/**\r
+ * @brief IMAGEHLP dll proxy\r
+ */\r
+DllProxy::Instance<struct IMAGEHLP> IMAGEHLP =\r
+{\r
+       "IMAGEHLP.DLL",\r
+       "UnMapAndLoad",\r
+       "ImageRvaToVa",\r
+       "MapAndLoad",\r
+       (HMODULE)0\r
+};\r
diff --git a/Externals/heksedit/DllProxies.h b/Externals/heksedit/DllProxies.h
new file mode 100644 (file)
index 0000000..12e7e36
--- /dev/null
@@ -0,0 +1,65 @@
+struct DllProxy\r
+{\r
+       LPCSTR Names[1];\r
+       LPVOID Load() throw();\r
+       LPVOID EnsureLoad();\r
+       void FormatMessage(LPTSTR);\r
+       template<class T> struct Instance;\r
+};\r
+\r
+template<class T> struct DllProxy::Instance\r
+{\r
+       union\r
+       {\r
+               struct\r
+               {\r
+                       LPCSTR Names[sizeof(T) / sizeof(LPCSTR)];\r
+               } Names;\r
+               DllProxy Proxy;\r
+       };\r
+       HMODULE H;\r
+       operator T *() throw()\r
+       {\r
+               return (T *)Proxy.Load();\r
+       }\r
+       T *operator->()\r
+       {\r
+               return (T *)Proxy.EnsureLoad();\r
+       }\r
+};\r
+\r
+/**\r
+ * @brief RAWIO32 dll proxy\r
+ */\r
+struct SectorInfo;\r
+struct ExtDriveInfo;\r
+struct BlockInfo;\r
+\r
+struct RAWIO32\r
+{\r
+       DWORD(WINAPI*ResetDisk)(SectorInfo *);\r
+       DWORD(WINAPI*ReadPhysicalSector)(SectorInfo *, LPBYTE, DWORD);\r
+       DWORD(WINAPI*WritePhysicalSector)(SectorInfo *, LPBYTE, DWORD);\r
+       DWORD(WINAPI*ReadDiskGeometry)(SectorInfo *);\r
+       DWORD(WINAPI*EI13GetDriveParameters)(ExtDriveInfo *);\r
+       DWORD(WINAPI*EI13ReadSector)(BlockInfo *, LPBYTE, DWORD);\r
+       DWORD(WINAPI*EI13WriteSector)(BlockInfo *, LPBYTE, DWORD);\r
+       HMODULE H;\r
+};\r
+\r
+extern DllProxy::Instance<struct RAWIO32> RAWIO32;\r
+\r
+/**\r
+ * @brief IMAGEHLP dll proxy\r
+ */\r
+typedef struct _LOADED_IMAGE *PLOADED_IMAGE;\r
+\r
+struct IMAGEHLP\r
+{\r
+       BOOL(NTAPI*UnMapAndLoad)(PLOADED_IMAGE);\r
+       PVOID(NTAPI*ImageRvaToVa)(PIMAGE_NT_HEADERS, PVOID, ULONG, PIMAGE_SECTION_HEADER);\r
+       BOOL(NTAPI*MapAndLoad)(PSTR, PSTR, PLOADED_IMAGE, BOOL, BOOL);\r
+       HMODULE H;\r
+};\r
+\r
+extern DllProxy::Instance<struct IMAGEHLP> IMAGEHLP;\r
index 05a0a42..4a051ab 100644 (file)
@@ -260,9 +260,8 @@ INT_PTR FillWithDialog::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lPar
 \r
                                if (bSelected)\r
                                {\r
-                                       int x = swapxor(iStartOfSelection, iEndOfSelection);\r
-                                       iStartOfSelSetting = x ^ iStartOfSelection;\r
-                                       iEndOfSelSetting = x ^ iEndOfSelection;\r
+                                       iStartOfSelSetting = iGetStartOfSelection();\r
+                                       iEndOfSelSetting = iGetEndOfSelection();\r
                                }\r
                                else\r
                                {\r
@@ -332,23 +331,13 @@ INT_PTR FillWithDialog::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lPar
                                //prepare OPENFILENAME for the file open common dlg box\r
                                szFWFileName[0] = '\0';\r
                                OPENFILENAME ofn;\r
-                               ofn.lStructSize = sizeof (OPENFILENAME);\r
+                               ZeroMemory(&ofn, sizeof ofn);\r
+                               ofn.lStructSize = sizeof ofn;\r
                                ofn.hwndOwner = hDlg;\r
-                               ofn.hInstance = NULL;\r
                                ofn.lpstrFilter = "All Files (*.*)\0*.*\0\0";\r
-                               ofn.lpstrCustomFilter = NULL;\r
-                               ofn.nMaxCustFilter = 0;\r
-                               ofn.nFilterIndex = 0;\r
                                ofn.lpstrFile = szFWFileName;\r
                                ofn.nMaxFile = _MAX_PATH;\r
-                               ofn.lpstrFileTitle = NULL;\r
-                               ofn.lpstrInitialDir = NULL;\r
-                               ofn.lpstrTitle = NULL;\r
                                ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_FILEMUSTEXIST;\r
-                               ofn.lpstrDefExt = NULL;\r
-                               ofn.lCustData = 0L;\r
-                               ofn.lpfnHook = NULL;\r
-                               ofn.lpTemplateName = NULL;\r
                                //show open dlgbox and if file good save name & path in edit box\r
                                if (GetOpenFileName(&ofn))\r
                                        SetDlgItemText(hDlg, IDC_FN, ofn.lpstrFile);\r
index 46e9bb8..331c382 100644 (file)
@@ -22,36 +22,16 @@ INT_PTR FindDlg::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM)
                if (bSelected)\r
                {\r
                        // Get start offset and length (is at least =1) of selection.\r
-                       int sel_start, select_len;\r
-                       if (iEndOfSelection < iStartOfSelection)\r
-                       {\r
-                               sel_start = iEndOfSelection;\r
-                               select_len = iStartOfSelection - iEndOfSelection + 1;\r
-                       }\r
-                       else\r
+                       int sel_start = iGetStartOfSelection();\r
+                       int select_len = iGetEndOfSelection() - sel_start + 1;\r
+                       // Get the length of the bytecode representation of the selection (including zero-byte at end).\r
+                       int findlen = Text2BinTranslator::iBytes2BytecodeDestLen((char *)&DataArray[sel_start], select_len);\r
+                       if (findlen > iFindDlgBufLen)\r
                        {\r
-                               sel_start = iStartOfSelection;\r
-                               select_len = iEndOfSelection - iStartOfSelection + 1;\r
+                               MessageBox(hDlg, "Selection too large.", "Find", MB_ICONERROR);\r
+                               EndDialog(hDlg, IDCANCEL);\r
+                               return TRUE;\r
                        }\r
-\r
-                       // Get the length of the bytecode representation of the selection (including zero-byte at end).\r
-                       /*int findlen = */Text2BinTranslator::iBytes2BytecodeDestLen( (char*) &DataArray[sel_start], select_len );\r
-\r
-                       // New buffer length is at least FINDDLG_BUFLEN = 64K, bigger if findstring is bigger than 64K.\r
-                       // iFindDlgBufLen = max( FINDDLG_BUFLEN, findlen );\r
-\r
-                       // Signal dialogue function to display the text in the edit box.\r
-                       // iFindDlgLastLen = findlen;\r
-\r
-                       // Delete old buffer.\r
-                       // if( pcFindDlgBuffer != NULL )\r
-                       //      delete [] pcFindDlgBuffer;\r
-\r
-                       // Allocate new buffer.\r
-                       // pcFindDlgBuffer = new char[ iFindDlgBufLen ];\r
-                       // if( pcFindDlgBuffer == NULL )\r
-                       //      MessageBox( hwnd, "Could not allocate findstring buffer!", "Find ERROR", MB_OK | MB_ICONERROR );\r
-\r
                        // Translate the selection into bytecode and write it into the edit box buffer.\r
                        Text2BinTranslator::iTranslateBytesToBC(pcFindDlgBuffer, &DataArray[sel_start], select_len);\r
                }\r
@@ -61,7 +41,7 @@ INT_PTR FindDlg::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM)
                CheckDlgButton(hDlg, iFindDlgDirection == -1 ? IDC_RADIO1 : IDC_RADIO2, BST_CHECKED);\r
                CheckDlgButton(hDlg, IDC_CHECK1, iFindDlgMatchCase);\r
                CheckDlgButton(hDlg, IDC_CHECK4, iFindDlgUnicode);\r
-               return FALSE;\r
+               return TRUE;\r
 \r
        case WM_COMMAND:\r
                //GK16AUG2K\r
@@ -94,35 +74,28 @@ INT_PTR FindDlg::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM)
                                        int i;\r
                                        char (*cmp)(char) = iFindDlgMatchCase ? equal : lower_case;\r
 \r
-                                       SetCursor (LoadCursor (NULL, IDC_WAIT));\r
+                                       SetCursor(LoadCursor(NULL, IDC_WAIT));\r
                                        // Find forward.\r
                                        if (iFindDlgDirection == 1)\r
                                        {\r
-                                               i = find_bytes ((char*) &(DataArray[iCurByte + 1]), DataArray.GetLength() - iCurByte - 1, pcFindstring, destlen, 1, cmp);\r
+                                               i = find_bytes((char *)&DataArray[iCurByte + 1], DataArray.GetLength() - iCurByte - 1, pcFindstring, destlen, 1, cmp);\r
                                                if (i != -1)\r
                                                        iCurByte += i + 1;\r
                                        }\r
                                        // Find backward.\r
                                        else\r
                                        {\r
-                                               i = find_bytes( (char*) &(DataArray[0]),\r
-                                                       min( iCurByte + (destlen - 1), DataArray.GetLength() ),\r
-                                                       pcFindstring, destlen, -1, cmp );\r
+                                               i = find_bytes((char *)&DataArray[0],\r
+                                                       min(iCurByte + (destlen - 1), DataArray.GetLength()),\r
+                                                       pcFindstring, destlen, -1, cmp);\r
                                                if (i != -1)\r
                                                        iCurByte = i;\r
                                        }\r
-                                       SetCursor (LoadCursor (NULL, IDC_ARROW));\r
+                                       SetCursor(LoadCursor(NULL, IDC_ARROW));\r
 \r
                                        if (i != -1)\r
                                        {\r
-                                               // Caret will be vertically centered if line of found string is not visible.\r
-                                               /* OLD: ONLY SET CURSOR POSITION\r
-                                               if( iCurByte/iBytesPerLine < iVscrollPos || iCurByte/iBytesPerLine > iVscrollPos + cyBuffer )\r
-                                                       iVscrollPos = max( 0, iCurByte/iBytesPerLine-cyBuffer/2 );\r
-                                               adjust_vscrollbar();\r
-                                               */\r
-\r
-                                               // NEW: Select found interval.\r
+                                               // Select found interval.\r
                                                bSelected = TRUE;\r
                                                iStartOfSelection = iCurByte;\r
                                                iEndOfSelection = iCurByte + destlen - 1;\r
index 030578d..4f069d8 100644 (file)
@@ -1,6 +1,6 @@
 To find source-level changes use diff or a visual diff prog such as CSdiff (good for RTF files) or Araxis Merge\r
 \r
-version heksedit.dll 1.01b by Jochen Neubeck\r
+heksedit.dll by Jochen Neubeck\r
 - Compiles into a dll for use as a control in other applications\r
 - Thorough refactoring, plus a few fixes, plus probably a few bugs\r
 - Got rid of most global variables, mostly to support multiple instances per process\r
diff --git a/Externals/heksedit/LangArray.cpp b/Externals/heksedit/LangArray.cpp
new file mode 100644 (file)
index 0000000..829abb1
--- /dev/null
@@ -0,0 +1,451 @@
+#include "precomp.h"\r
+#include "simparr.h"\r
+#include "LangArray.h"\r
+#include "VersionData.h"\r
+\r
+/**\r
+ * @brief Remove prefix from the string.\r
+ * @param [in] text String from which to jump over prefix.\r
+ * @param [in] prefix Prefix string to jump over.\r
+ * @return String without the prefix.\r
+ * @note Function returns pointer to original string,\r
+ *  it does not allocate a new string.\r
+ */\r
+static char *EatPrefix(char *text, const char *prefix)\r
+{\r
+       if (int len = strlen(prefix))\r
+               if (_memicmp(text, prefix, len) == 0)\r
+                       return text + len;\r
+       return 0;\r
+}\r
+\r
+LangArray::StringData *LangArray::StringData::Create(const char *ps, size_t length)\r
+{\r
+       size_t cb = FIELD_OFFSET(StringData, data) + length + 1;\r
+       StringData *psd = reinterpret_cast<StringData *>(new char[cb]);\r
+       psd->refcount = 0;\r
+       memcpy(psd->data, ps, length);\r
+       psd->data[length] = '\0';\r
+       return psd;\r
+}\r
+\r
+char *LangArray::StringData::Share()\r
+{\r
+       ++refcount;\r
+       return data;\r
+}\r
+\r
+void LangArray::StringData::Unshare(char *data)\r
+{\r
+       data -= FIELD_OFFSET(StringData, data);\r
+       if (--reinterpret_cast<StringData *>(data)->refcount == 0)\r
+               delete [] data;\r
+}\r
+\r
+LangArray::LangArray()\r
+: m_hLangDll(0)\r
+, m_codepage(0)\r
+, m_langid(0)\r
+{\r
+}\r
+\r
+LangArray::~LangArray()\r
+{\r
+       ClearAll();\r
+}\r
+\r
+void LangArray::ExpandToSize()\r
+{\r
+       while (m_nUpperBound < m_nSize - 1)\r
+               m_pT[++m_nUpperBound] = 0;\r
+}\r
+\r
+void LangArray::ClearAll()\r
+{\r
+       while (m_nSize)\r
+               if (char *data = m_pT[--m_nSize])\r
+                       StringData::Unshare(data);\r
+       SimpleArray<char *>::ClearAll();\r
+}\r
+\r
+/**\r
+ * @brief Convert C style \\nnn, \\r, \\n, \\t etc into their indicated characters.\r
+ * @param [in] codepage Codepage to use in conversion.\r
+ * @param [in,out] s String to convert.\r
+ */\r
+static void unslash(unsigned codepage, char *p)\r
+{\r
+       char *q = p;\r
+       char c;\r
+       do\r
+       {\r
+               char *r = q + 1;\r
+               switch (c = *q)\r
+               {\r
+               case '\\':\r
+                       switch (c = *r++)\r
+                       {\r
+                       case 'a':\r
+                               c = '\a';\r
+                               break;\r
+                       case 'b':\r
+                               c = '\b';\r
+                               break;\r
+                       case 'f':\r
+                               c = '\f';\r
+                               break;\r
+                       case 'n':\r
+                               c = '\n';\r
+                               break;\r
+                       case 'r':\r
+                               c = '\r';\r
+                               break;\r
+                       case 't':\r
+                               c = '\t';\r
+                               break;\r
+                       case 'v':\r
+                               c = '\v';\r
+                               break;\r
+                       case 'x':\r
+                               *p = (char)strtol(r, &q, 16);\r
+                               break;\r
+                       default:\r
+                               *p = (char)strtol(r - 1, &q, 8);\r
+                               break;\r
+                       }\r
+                       if (q >= r)\r
+                               break;\r
+                       // fall through\r
+               default:\r
+                       *p = c;\r
+                       if ((*p & 0x80) && IsDBCSLeadByteEx(codepage, *p))\r
+                               *++p = *r++;\r
+                       q = r;\r
+               }\r
+               ++p;\r
+       } while (c != '\0');\r
+}\r
+\r
+BOOL LangArray::Load(HINSTANCE hMainInstance, LANGID langid)\r
+{\r
+       if (m_langid == langid)\r
+               return TRUE;\r
+       m_langid = langid;\r
+       ClearAll();\r
+       char buf[1024];\r
+       SimpleString *ps = 0;\r
+       SimpleString msgid;\r
+       SimpleArray<int> lines;\r
+       int unresolved = 0;\r
+       int mismatched = 0;\r
+       FILE *f = 0;\r
+       if (langid)\r
+       {\r
+               TCHAR path[MAX_PATH];\r
+               GetModuleFileName(hMainInstance, path, MAX_PATH);\r
+               LPTSTR name = PathFindFileName(path); \r
+               LPTSTR ext = PathFindExtension(name);\r
+               *ext = _T('\0');\r
+               wsprintf(ext + 1, _T("lng\\%s.lng"), name);\r
+               *ext = _T('.');\r
+               if (m_hLangDll == 0)\r
+               {\r
+                       m_hLangDll = LoadLibrary(path);\r
+                       if (m_hLangDll == 0)\r
+                               return FALSE;\r
+               }\r
+               const CVersionData *pvdMain = CVersionData::Load(hMainInstance);\r
+               if (pvdMain == 0)\r
+                       return FALSE;\r
+               const CVersionData *pvdLang = CVersionData::Load(m_hLangDll);\r
+               if (pvdLang == 0)\r
+                       return FALSE;\r
+               if (memcmp(pvdMain->Data(), pvdLang->Data(), FIELD_OFFSET(VS_FIXEDFILEINFO, dwProductVersionMS)))\r
+                       return FALSE;\r
+               HRSRC potfile = FindResource(m_hLangDll, _T("en-US.pot"), RT_RCDATA);\r
+               if (potfile == 0)\r
+                       return FALSE;\r
+               size_t size = SizeofResource(m_hLangDll, potfile);\r
+               const char *data = (const char *)LoadResource(m_hLangDll, potfile);\r
+               while (const char *eol = (const char *)memchr(data, '\n', size))\r
+               {\r
+                       size_t len = eol - data;\r
+                       if (len >= sizeof buf)\r
+                       {\r
+                               assert(FALSE);\r
+                               break;\r
+                       }\r
+                       memcpy(buf, data, len);\r
+                       buf[len++] = '\0';\r
+                       data += len;\r
+                       size -= len;\r
+                       if (char *p = EatPrefix(buf, "#:"))\r
+                       {\r
+                               if (char *q = strchr(p, ':'))\r
+                               {\r
+                                       int line = strtol(q + 1, &q, 10);\r
+                                       lines.Append(line);\r
+                                       ++unresolved;\r
+                               }\r
+                       }\r
+                       else if (EatPrefix(buf, "msgid "))\r
+                       {\r
+                               ps = &msgid;\r
+                       }\r
+                       if (ps)\r
+                       {\r
+                               char *p = strchr(buf, '"');\r
+                               char *q = strrchr(buf, '"');\r
+                               if (q > p)\r
+                               {\r
+                                       *q = '\0';\r
+                                       ps->AppendString(p + 1);\r
+                               }\r
+                               else\r
+                               {\r
+                                       ps = 0;\r
+                                       if (int i = lines.GetLength())\r
+                                       {\r
+                                               StringData *psd = StringData::Create(msgid, msgid.StrLen());\r
+                                               do\r
+                                               {\r
+                                                       int line = lines[--i];\r
+                                                       if (GetLength() <= line)\r
+                                                       {\r
+                                                               SetSize(line + 1);\r
+                                                               ExpandToSize();\r
+                                                       }\r
+                                                       SetAt(line, psd->Share());\r
+                                               } while (i);\r
+                                       }\r
+                                       lines.ClearAll();\r
+                                       msgid.Clear();\r
+                               }\r
+                       }\r
+               }\r
+               PathRemoveFileSpec(path);\r
+               name = PathAddBackslash(path);\r
+               // Look for a .po file that matches the given langid.\r
+               // Possible cases in order of precedence:\r
+               // (1) Country specific translation for given country, e.g. de-CH.po\r
+               // (2) Country specific translation to serve as default, e.g. de-DE.po\r
+               // (3) Country inspecific translation, e.g. de.po\r
+               do\r
+               {\r
+                       if (int i = GetLocaleInfo(langid, LOCALE_SISO639LANGNAME, name, 4))\r
+                       {\r
+                               int j = GetLocaleInfo(langid, LOCALE_SISO3166CTRYNAME, name + i, 4);\r
+                               name[--i] = '-';\r
+                               do\r
+                               {\r
+                                       strcpy(name + i + j, ".po");\r
+                                       f = fopen(path, "r");\r
+                                       if (j == 0 || SUBLANGID(langid) != SUBLANG_DEFAULT)\r
+                                               break;\r
+                                       j = 0;\r
+                               } while (f == 0);\r
+                       }\r
+                       if (SUBLANGID(langid) == SUBLANG_DEFAULT)\r
+                               break;\r
+                       langid = MAKELANGID(PRIMARYLANGID(langid), SUBLANG_DEFAULT);\r
+               } while (f == 0);\r
+       }\r
+       if (f == 0)\r
+       {\r
+               if (m_hLangDll)\r
+                       FreeLibrary(m_hLangDll);\r
+               m_hLangDll = 0;\r
+               return FALSE;\r
+       }\r
+       ps = 0;\r
+       msgid.ClearAll();\r
+       lines.ClearAll();\r
+       SimpleString msgstr;\r
+       SimpleString format;\r
+       SimpleString directive;\r
+       while (fgets(buf, sizeof buf, f))\r
+       {\r
+               if (char *p = EatPrefix(buf, "#:"))\r
+               {\r
+                       if (char *q = strchr(p, ':'))\r
+                       {\r
+                               int line = strtol(q + 1, &q, 10);\r
+                               if (line == 367)\r
+                                       line = line;\r
+                               lines.Append(line);\r
+                               --unresolved;\r
+                       }\r
+               }\r
+               else if (char *p = EatPrefix(buf, "#,"))\r
+               {\r
+                       StrTrim(p, " \t\r\n");\r
+                       format = p;\r
+               }\r
+               else if (char *p = EatPrefix(buf, "#."))\r
+               {\r
+                       StrTrim(p, " \t\r\n");\r
+                       directive = p;\r
+               }\r
+               else if (EatPrefix(buf, "msgid "))\r
+               {\r
+                       ps = &msgid;\r
+               }\r
+               else if (EatPrefix(buf, "msgstr "))\r
+               {\r
+                       ps = &msgstr;\r
+               }\r
+               if (ps)\r
+               {\r
+                       char *p = strchr(buf, '"');\r
+                       char *q = strrchr(buf, '"');\r
+                       if (q > p)\r
+                       {\r
+                               *q = '\0';\r
+                               ps->AppendString(p + 1);\r
+                       }\r
+                       else\r
+                       {\r
+                               ps = 0;\r
+                               if (msgstr.IsEmpty())\r
+                                       msgstr = msgid;\r
+                               unslash(m_codepage, msgstr);\r
+                               if (int i = lines.GetLength())\r
+                               {\r
+                                       StringData *psd = StringData::Create(msgstr, msgstr.StrLen());\r
+                                       do\r
+                                       {\r
+                                               int line = lines[--i];\r
+                                               if (GetLength() <= line)\r
+                                               {\r
+                                                       SetSize(line + 1);\r
+                                                       ExpandToSize();\r
+                                               }\r
+                                               char *data = GetAt(line);\r
+                                               if (data && strcmp(data, msgid) == 0)\r
+                                               {\r
+                                                       StringData::Unshare(data);\r
+                                                       SetAt(line, psd->Share());\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       ++mismatched;\r
+                                               }\r
+                                       } while (i);\r
+                               }\r
+                               lines.ClearAll();\r
+                               if (strcmp(directive, "Codepage") == 0)\r
+                               {\r
+                                       m_codepage = strtol(msgstr, &p, 10);\r
+                                       directive.Clear();\r
+                               }\r
+                               msgid.Clear();\r
+                               msgstr.Clear();\r
+                       }\r
+               }\r
+       }\r
+       fclose(f);\r
+       if (unresolved || mismatched)\r
+       {\r
+               ClearAll();\r
+               if (m_hLangDll)\r
+                       FreeLibrary(m_hLangDll);\r
+               m_hLangDll = 0;\r
+               return FALSE;\r
+       }\r
+       return TRUE;\r
+}\r
+\r
+BSTR LangArray::TranslateStringA(int line)\r
+{\r
+       BSTR t = 0;\r
+       if (line > 0 && line < GetLength())\r
+       {\r
+               if (char *s = GetAt(line))\r
+               {\r
+                       if (int len = strlen(s))\r
+                       {\r
+                               unsigned codepage = GetACP();\r
+                               if (m_codepage != codepage)\r
+                               {\r
+                                       // Attempt to convert to UI codepage\r
+                                       BSTR ws = SysAllocStringLen(0, len);\r
+                                       len = MultiByteToWideChar(m_codepage, 0, s, -1, ws, len + 1);\r
+                                       if (len)\r
+                                       {\r
+                                               SysReAllocStringLen(&ws, ws, len - 1);\r
+                                               len = WideCharToMultiByte(codepage, 0, ws, -1, 0, 0, 0, 0);\r
+                                               if (len)\r
+                                               {\r
+                                                       t = SysAllocStringByteLen(0, len - 1);\r
+                                                       WideCharToMultiByte(codepage, 0, ws, -1, (PSTR)t, len, 0, 0);\r
+                                               }\r
+                                       }\r
+                                       SysFreeString(ws);\r
+                               }\r
+                               else\r
+                               {\r
+                                       t = SysAllocStringByteLen(s, len);\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+       return t;\r
+}\r
+\r
+BSTR LangArray::TranslateStringW(int line)\r
+{\r
+       BSTR ws = 0;\r
+       if (line > 0 && line < GetLength())\r
+       {\r
+               if (char *s = GetAt(line))\r
+               {\r
+                       if (int len = strlen(s))\r
+                       {\r
+                               ws = SysAllocStringLen(0, len);\r
+                               len = MultiByteToWideChar(m_codepage, 0, s, -1, ws, len + 1);\r
+                               SysReAllocStringLen(&ws, ws, len - 1);\r
+                       }\r
+               }\r
+       }\r
+       return ws;\r
+}\r
+\r
+void LangArray::TranslateDialogA(HWND h)\r
+{\r
+       UINT gw = GW_CHILD;\r
+       do\r
+       {\r
+               TCHAR text[80];\r
+               ::GetWindowTextA(h, text, RTL_NUMBER_OF(text));\r
+               int line = 0;\r
+               if (LPTSTR p = _tcschr(text, _T(':')))\r
+                       line = _ttoi(p + 1);\r
+               if (BSTR t = TranslateStringA(line))\r
+               {\r
+                       ::SetWindowTextA(h, (PSTR)t);\r
+                       ::SysFreeString(t);\r
+               }\r
+               h = ::GetWindow(h, gw);\r
+               gw = GW_HWNDNEXT;\r
+       } while (h);\r
+}\r
+\r
+void LangArray::TranslateDialogW(HWND h)\r
+{\r
+       UINT gw = GW_CHILD;\r
+       do\r
+       {\r
+               WCHAR text[80];\r
+               ::GetWindowTextW(h, text, RTL_NUMBER_OF(text));\r
+               int line = 0;\r
+               if (LPWSTR p = wcschr(text, L':'))\r
+                       line = _wtoi(p + 1);\r
+               if (BSTR t = TranslateStringW(line))\r
+               {\r
+                       ::SetWindowTextW(h, t);\r
+                       ::SysFreeString(t);\r
+               }\r
+               h = ::GetWindow(h, gw);\r
+               gw = GW_HWNDNEXT;\r
+       } while (h);\r
+}\r
diff --git a/Externals/heksedit/LangArray.h b/Externals/heksedit/LangArray.h
new file mode 100644 (file)
index 0000000..ad5989c
--- /dev/null
@@ -0,0 +1,24 @@
+class LangArray : public SimpleArray<char *>\r
+{\r
+public:\r
+       struct StringData\r
+       {\r
+               int refcount;\r
+               char data[1];\r
+               static StringData *Create(const char *, size_t);\r
+               char *Share();\r
+               static void Unshare(char *);\r
+       };\r
+       HMODULE m_hLangDll;\r
+       unsigned m_codepage;\r
+       LANGID m_langid;\r
+       LangArray();\r
+       ~LangArray();\r
+       void ExpandToSize();\r
+       void ClearAll();\r
+       BOOL Load(HINSTANCE, LANGID);\r
+       BSTR TranslateStringA(int line);\r
+       BSTR TranslateStringW(int line);\r
+       void TranslateDialogA(HWND);\r
+       void TranslateDialogW(HWND);\r
+};\r
diff --git a/Externals/heksedit/Languages/20080825T174325.CreateMasterPotFile b/Externals/heksedit/Languages/20080825T174325.CreateMasterPotFile
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Externals/heksedit/Languages/20080825T175125.UpdatePoFilesFromPotFile b/Externals/heksedit/Languages/20080825T175125.UpdatePoFilesFromPotFile
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Externals/heksedit/Languages/CreateMasterPotFile.vbs b/Externals/heksedit/Languages/CreateMasterPotFile.vbs
new file mode 100644 (file)
index 0000000..a361bf8
--- /dev/null
@@ -0,0 +1,331 @@
+Option Explicit\r
+''\r
+' This script creates the master POT file (en-US.pot).\r
+'\r
+' Copyright (C) 2007 by Tim Gerundt\r
+' Released under the "GNU General Public License"\r
+'\r
+' ID line follows -- this is updated by SVN\r
+' $Id: CreateMasterPotFile.vbs 4974 2008-01-29 23:10:28Z gerundt $\r
+\r
+Const ForReading = 1\r
+\r
+Const NO_BLOCK = 0\r
+Const MENU_BLOCK = 1\r
+Const DIALOGEX_BLOCK = 2\r
+Const STRINGTABLE_BLOCK = 3\r
+Const VERSIONINFO_BLOCK = 4\r
+Const ACCELERATORS_BLOCK = 5\r
+Const TEXTINCLUDE_BLOCK = 6\r
+\r
+Dim oFSO, bRunFromCmd\r
+\r
+Set oFSO = CreateObject("Scripting.FileSystemObject")\r
+\r
+bRunFromCmd = LCase(oFSO.GetFileName(Wscript.FullName)) = "cscript.exe"\r
+\r
+Call Main\r
+\r
+''\r
+' ...\r
+Sub Main\r
+  Dim oStrings, sCodePage\r
+  Dim StartTime, EndTime, Seconds\r
+  Dim oFile, dDate, sBuild\r
+  \r
+  StartTime = Time\r
+  \r
+  InfoBox "Creating POT file from heksedit.rc...", 3\r
+  dDate = oFSO.GetFile("../heksedit.rc").DateLastModified\r
+  sBuild = FormatTimeStamp(dDate) & ".CreateMasterPotFile"\r
+  If Not oFSO.FileExists(sBuild) Then\r
+    Set oStrings = GetStringsFromRcFile("../heksedit.rc", sCodePage)\r
+    CreateMasterPotFile "en-US.pot", oStrings, sCodePage\r
+    For Each oFile In oFSO.GetFolder(".").Files 'For all files in the current folder...\r
+      Select Case UCase(oFSO.GetExtensionName(oFile.Name))\r
+      Case "CREATEMASTERPOTFILE"\r
+        oFile.Name = sBuild\r
+      End Select\r
+    Next\r
+    \r
+    EndTime = Time\r
+    Seconds = DateDiff("s", StartTime, EndTime)\r
+    \r
+    InfoBox "POT file created, after " & Seconds & " second(s).", 10\r
+  Else 'If update NOT necessary...\r
+    InfoBox "POT file already up-to-date.", 10\r
+  End If\r
+End Sub\r
+\r
+''\r
+' ...\r
+Class CString\r
+  Dim Comment, References, Context, Id, Str\r
+End Class\r
+\r
+''\r
+' ...\r
+Function GetStringsFromRcFile(ByVal sRcFilePath, ByRef sCodePage)\r
+  Dim oBlacklist, oStrings, oString, oRcFile, sLine, iLine\r
+  Dim sRcFileName, iBlockType, sReference, sString, sComment, sContext, oMatch, sTemp, sKey\r
+  Dim oLcFile, sLcLine, fContinuation\r
+\r
+  Set oBlacklist = GetStringBlacklist("StringBlacklist.txt")\r
+  \r
+  Set oStrings = CreateObject("Scripting.Dictionary")\r
+  \r
+  If (oFSO.FileExists(sRcFilePath) = True) Then 'If the RC file exists...\r
+    sRcFileName = oFSO.GetFileName(sRcFilePath)\r
+    iLine = 0\r
+    iBlockType = NO_BLOCK\r
+    sCodePage = ""\r
+    Set oRcFile = oFSO.OpenTextFile(sRcFilePath, ForReading)\r
+    Set oLcFile = oFSO.CreateTextFile("heksedit.rc", True)\r
+    Do Until oRcFile.AtEndOfStream = True 'For all lines...\r
+      sLcLine = oRcFile.ReadLine\r
+      sLine = Trim(sLcLine)\r
+      sLine = Replace(sLine, vbTab, " ")\r
+      iLine = iLine + 1\r
+      \r
+      sReference = sRcFileName & ":" & iLine\r
+      sString = ""\r
+      sComment = ""\r
+      sContext = ""\r
+      \r
+      If fContinuation Then\r
+        ' Nothing to do\r
+      ElseIf InStr(sLine, " TEXTINCLUDE") > 0 Then 'TEXTINCLUDE...\r
+        iBlockType = TEXTINCLUDE_BLOCK\r
+      ElseIf InStr(sLine, " MENU") > 0 And InStr(sLine, "IDR_") > 0 Then 'MENU...\r
+        iBlockType = MENU_BLOCK\r
+      ElseIf InStr(sLine, " DIALOG") > 0 Then 'DIALOG(EX)...\r
+        iBlockType = DIALOGEX_BLOCK\r
+      ElseIf InStr(sLine, "STRINGTABLE") > 0 Then 'STRINGTABLE...\r
+        iBlockType = STRINGTABLE_BLOCK\r
+      ElseIf InStr(sLine, " VERSIONINFO") > 0 Then 'VERSIONINFO...\r
+        iBlockType = VERSIONINFO_BLOCK\r
+      ElseIf InStr(sLine, " ACCELERATORS") > 0 Then 'ACCELERATORS...\r
+        iBlockType = ACCELERATORS_BLOCK\r
+      ElseIf InStr(sLine, " BITMAP ") > 0 Then 'BEGIN...\r
+        sLcLine = "//" & sLcLine\r
+        'IGNORE FOR SPEEDUP!\r
+      ElseIf (sLine = "BEGIN") Then 'BEGIN...\r
+        'IGNORE FOR SPEEDUP!\r
+      ElseIf (sLine = "END") Then 'END...\r
+        If (iBlockType = STRINGTABLE_BLOCK) Then 'If inside stringtable...\r
+          iBlockType = NO_BLOCK\r
+        End If\r
+      ElseIf (Left(sLine, 2) = "//") Then 'If comment line...\r
+        sLine = ""\r
+        'IGNORE FOR SPEEDUP!\r
+      ElseIf sLine <> "" Then 'If NOT empty line...\r
+        Select Case iBlockType\r
+          Case NO_BLOCK:\r
+            If FoundRegExpMatch(sLine, "LANGUAGE (LANG_\w*, SUBLANG_\w*)", oMatch) Then 'LANGUAGE...\r
+              sString = oMatch.SubMatches(0)\r
+              sComment = "LANGUAGE, SUBLANGUAGE"\r
+            ElseIf FoundRegExpMatch(sLine, "code_page\(([\d]+)\)", oMatch) Then 'code_page...\r
+              sString = oMatch.SubMatches(0)\r
+              sComment = "Codepage"\r
+              sCodePage = oMatch.SubMatches(0)\r
+            End If\r
+            \r
+          Case MENU_BLOCK, DIALOGEX_BLOCK, STRINGTABLE_BLOCK:\r
+            If InStr(sLine, """") > 0 Then 'If quote found (for speedup)...\r
+              '--------------------------------------------------------------------------------\r
+              ' Replace 1st string literal only - 2nd string literal specifies control class!\r
+              '--------------------------------------------------------------------------------\r
+              If FoundRegExpMatch(sLine, """((?:""""|[^""])*)""", oMatch) Then 'String...\r
+                sTemp = oMatch.SubMatches(0)\r
+                If (sTemp <> "") And (oBlacklist.Exists(sTemp) = False) Then 'If NOT blacklisted...\r
+                  sLcLine = Replace(sLcLine, """" & sTemp & """", """" & sReference & """", 1, 1)\r
+                  sString = Replace(sTemp, """""", "\""")\r
+                  If FoundRegExpMatch(sLine, "//#\. (.*?)$", oMatch) Then 'If found a comment for the translators...\r
+                    sComment = Trim(oMatch.SubMatches(0))\r
+                  ElseIf FoundRegExpMatch(sLine, "//msgctxt (.*?)$", oMatch) Then 'If found a context for the translation...\r
+                    sContext = Trim(oMatch.SubMatches(0))\r
+                    sComment = sContext\r
+                  End If\r
+                End If\r
+              End If\r
+            End If\r
+            \r
+          Case VERSIONINFO_BLOCK:\r
+            If FoundRegExpMatch(sLine, "BLOCK ""([0-9A-F]+)""", oMatch) Then 'StringFileInfo.Block...\r
+              sString = oMatch.SubMatches(0)\r
+              sComment = "StringFileInfo.Block"\r
+            ElseIf FoundRegExpMatch(sLine, "VALUE ""Comments"", ""(.*?)\\?0?""", oMatch) Then 'StringFileInfo.Comments...\r
+              sString = oMatch.SubMatches(0)\r
+              sComment = "You should use a string like ""Translated by "" followed by the translator names for this string. It is ONLY VISIBLE in the StringFileInfo.Comments property from the final resource file!"\r
+            ElseIf FoundRegExpMatch(sLine, "VALUE ""Translation"", (.*?)$", oMatch) Then 'VarFileInfo.Translation...\r
+              sString = oMatch.SubMatches(0)\r
+              sComment = "VarFileInfo.Translation"\r
+            End If\r
+            \r
+        End Select\r
+      End If\r
+      \r
+      If (sString <> "") Then\r
+        sKey = sContext & sString\r
+        Set oString = New CString\r
+        If (oStrings.Exists(sKey) = True) Then 'If the key is already used...\r
+          Set oString = oStrings(sKey)\r
+        End If\r
+        If (sComment <> "") Then\r
+          oString.Comment = sComment\r
+        End If\r
+        If (oString.References <> "") Then\r
+          oString.References = oString.References & vbTab & sReference\r
+        Else\r
+          oString.References = sReference\r
+        End If\r
+        oString.Context = sContext\r
+        oString.Id = sString\r
+        oString.Str = ""\r
+        \r
+        If (oStrings.Exists(sKey) = True) Then 'If the key is already used...\r
+          Set oStrings(sKey) = oString\r
+        Else 'If the key is NOT already used...\r
+          oStrings.Add sContext & sString, oString\r
+        End If\r
+      End If\r
+      If sLine = "#ifndef APSTUDIO_INVOKED" Then Exit Do\r
+      oLcFile.WriteLine sLcLine\r
+      fContinuation = sLine <> "" And InStr(",|", Right(sLine, 1)) <> 0\r
+    Loop\r
+    oLcFile.WriteLine "#include ""version.rc"""\r
+    oLcFile.WriteLine "en-US.pot RCDATA ""en-US.pot"""\r
+    oRcFile.Close\r
+    oLcFile.Close\r
+  End If\r
+  Set GetStringsFromRcFile = oStrings\r
+End Function\r
+\r
+''\r
+' ...\r
+Function GetStringBlacklist(ByVal sTxtFilePath)\r
+  Dim oBlacklist, oTxtFile, sLine\r
+  \r
+  Set oBlacklist = CreateObject("Scripting.Dictionary")\r
+  \r
+  If (oFSO.FileExists(sTxtFilePath) = True) Then 'If the blacklist file exists...\r
+    Set oTxtFile = oFSO.OpenTextFile(sTxtFilePath, ForReading)\r
+    Do Until oTxtFile.AtEndOfStream = True 'For all lines...\r
+      sLine = Trim(oTxtFile.ReadLine)\r
+      \r
+      If (sLine <> "") Then\r
+        If (oBlacklist.Exists(sLine) = False) Then 'If the key is NOT already used...\r
+          oBlacklist.Add sLine, True\r
+        End If\r
+      End If\r
+    Loop\r
+    oTxtFile.Close\r
+  End If\r
+  Set GetStringBlacklist = oBlacklist\r
+End Function\r
+\r
+''\r
+' ...\r
+Sub CreateMasterPotFile(ByVal sPotPath, ByVal oStrings, ByVal sCodePage)\r
+  Dim oPotFile, sKey, oString, aReferences, i\r
+  \r
+  Set oPotFile = oFSO.CreateTextFile(sPotPath, True)\r
+  \r
+  oPotFile.WriteLine "# This file is part of FRHED <http://winmerge.org/>"\r
+  oPotFile.WriteLine "# Released under the ""GNU General Public License"""\r
+  oPotFile.WriteLine "#"\r
+  oPotFile.WriteLine "# ID line follows -- this is updated by SVN"\r
+  oPotFile.WriteLine "# $" & "Id: " & "$"\r
+  oPotFile.WriteLine "#"\r
+  oPotFile.WriteLine "msgid """""\r
+  oPotFile.WriteLine "msgstr """""\r
+  oPotFile.WriteLine """Project-Id-Version: FRHED\n"""\r
+  oPotFile.WriteLine """Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=13216&atid=113216\n"""\r
+  oPotFile.WriteLine """POT-Creation-Date: " & GetPotCreationDate() & "\n"""\r
+  oPotFile.WriteLine """PO-Revision-Date: \n"""\r
+  oPotFile.WriteLine """Last-Translator: \n"""\r
+  oPotFile.WriteLine """Language-Team: English <winmerge-translate@lists.sourceforge.net>\n"""\r
+  oPotFile.WriteLine """MIME-Version: 1.0\n"""\r
+  oPotFile.WriteLine """Content-Type: text/plain; charset=CP" & sCodePage & "\n"""\r
+  oPotFile.WriteLine """Content-Transfer-Encoding: 8bit\n"""\r
+  oPotFile.WriteLine """X-Poedit-Language: English\n"""\r
+  oPotFile.WriteLine """X-Poedit-SourceCharset: CP" & sCodePage & "\n"""\r
+  oPotFile.WriteLine """X-Generator: CreateMasterPotFile.vbs\n"""\r
+  oPotFile.WriteLine\r
+  For Each sKey In oStrings.Keys 'For all strings...\r
+    Set oString = oStrings(sKey)\r
+    If (oString.Comment <> "") Then 'If comment exists...\r
+      oPotFile.WriteLine "#. " & oString.Comment\r
+    End If\r
+    aReferences = Split(oString.References, vbTab)\r
+    For i = LBound(aReferences) To UBound(aReferences) 'For all references...\r
+      oPotFile.WriteLine "#: " & aReferences(i)\r
+    Next\r
+    oPotFile.WriteLine "#, c-format"\r
+    If (oString.Context <> "") Then 'If context exists...\r
+      oPotFile.WriteLine "msgctxt """ & oString.Context & """"\r
+    End If\r
+    oPotFile.WriteLine "msgid """ & oString.Id & """"\r
+    oPotFile.WriteLine "msgstr """""\r
+    oPotFile.WriteLine\r
+  Next\r
+  oPotFile.Close\r
+End Sub\r
+\r
+''\r
+' ...\r
+Function FoundRegExpMatch(ByVal sString, ByVal sPattern, ByRef oMatchReturn)\r
+  Dim oRegExp, oMatches\r
+  \r
+  Set oRegExp = New RegExp\r
+  oRegExp.Pattern = sPattern\r
+  oRegExp.IgnoreCase = True\r
+  \r
+  Set oMatchReturn = Nothing\r
+  FoundRegExpMatch = False\r
+  If oRegExp.Test(sString) Then\r
+    Set oMatches = oRegExp.Execute(sString)\r
+    Set oMatchReturn = oMatches(0)\r
+    FoundRegExpMatch = True\r
+  End If\r
+End Function\r
+\r
+''\r
+' ...\r
+Function GetPotCreationDate()\r
+  Dim oNow, sYear, sMonth, sDay, sHour, sMinute\r
+  \r
+  oNow = Now()\r
+  sYear = Year(oNow)\r
+  sMonth = Month(oNow)\r
+  If (sMonth < 10) Then sMonth = "0" & sMonth\r
+  sDay = Day(oNow)\r
+  If (sDay < 10) Then sDay = "0" & sDay\r
+  sHour = Hour(oNow)\r
+  If (sHour < 10) Then sHour = "0" & sHour\r
+  sMinute = Minute(oNow)\r
+  If (sMinute < 10) Then sMinute = "0" & sMinute\r
+  \r
+  GetPotCreationDate = sYear & "-" & sMonth & "-" & sDay & " " & sHour & ":" & sMinute & "+0000"\r
+End Function\r
+\r
+''\r
+' ...\r
+Function FormatTimestamp(now)\r
+  ' Form an ISO 8601 compliant timestamp without separators. Don't care about timezones.\r
+  FormatTimestamp = Right("0000" & Year(now), 4) & Right("00" & Month(now), 2) & Right("00" & Day(now), 2) _\r
+    & "T" & Right("00" & Hour(now), 2) & Right("00" & Minute(now), 2) & Right("00" & Second(now), 2)\r
+End Function\r
+\r
+''\r
+' ...\r
+Function InfoBox(ByVal sText, ByVal iSecondsToWait)\r
+  Dim oShell\r
+  \r
+  If (bRunFromCmd = False) Then 'If run from command line...\r
+    Set oShell = Wscript.CreateObject("WScript.Shell")\r
+    InfoBox = oShell.Popup(sText, iSecondsToWait, Wscript.ScriptName, 64)\r
+  Else 'If NOT run from command line...\r
+    Wscript.Echo sText\r
+  End If\r
+End Function\r
diff --git a/Externals/heksedit/Languages/StringBlacklist.txt b/Externals/heksedit/Languages/StringBlacklist.txt
new file mode 100644 (file)
index 0000000..daf36c8
--- /dev/null
@@ -0,0 +1,11 @@
+(filter name)\r
+[VERSION COPYRIGHT GOES HERE]\r
+_HDR_POPUP_\r
+_ITEM_POPUP_\r
+_POPUP_\r
+<PlaceHolder>\r
+0\r
+0.00\r
+IDM_MRU\r
+MS Shell Dlg\r
+Version 1.0\r
diff --git a/Externals/heksedit/Languages/UpdatePoFilesFromPotFile.vbs b/Externals/heksedit/Languages/UpdatePoFilesFromPotFile.vbs
new file mode 100644 (file)
index 0000000..02a4a1c
--- /dev/null
@@ -0,0 +1,247 @@
+Option Explicit\r
+''\r
+' This script updates the language PO files from the master POT file.\r
+'\r
+' Copyright (C) 2007 by Tim Gerundt\r
+' Released under the "GNU General Public License"\r
+'\r
+' ID line follows -- this is updated by SVN\r
+' $Id: UpdatePoFilesFromPotFile.vbs 4974 2008-01-29 23:10:28Z gerundt $\r
+\r
+Const ForReading = 1\r
+\r
+Dim oFSO, bRunFromCmd\r
+\r
+Set oFSO = CreateObject("Scripting.FileSystemObject")\r
+\r
+bRunFromCmd = False\r
+If LCase(oFSO.GetFileName(Wscript.FullName)) = "cscript.exe" Then\r
+  bRunFromCmd = True\r
+End If\r
+\r
+Call Main\r
+\r
+''\r
+' ...\r
+Sub Main\r
+  Dim oFiles, oFile, sFile, sDir, bPotChanged\r
+  Dim oEnglishPotContent, oLanguagePoContent\r
+  Dim StartTime, EndTime, Seconds\r
+  Dim dDate, sBuild\r
+  \r
+  StartTime = Time\r
+  \r
+  InfoBox "Updating PO files from POT file...", 3\r
+  \r
+  sDir = oFSO.GetParentFolderName(Wscript.ScriptFullName)\r
+\r
+  dDate = oFSO.GetFile(sDir & "\en-US.pot").DateLastModified\r
+  sBuild = FormatTimeStamp(dDate) & ".UpdatePoFilesFromPotFile"\r
+\r
+  Set oEnglishPotContent = GetContentFromPoFile(sDir & "\en-US.pot")\r
+  If oEnglishPotContent.Count = 0 Then Err.Raise vbObjectError, "Sub Main", "Error reading content from en-US.pot"\r
+  Set oFiles = Wscript.Arguments\r
+  If oFiles.Count = 0 Then\r
+    Set oFiles = oFSO.GetFolder(".").Files\r
+    bPotChanged = Not oFSO.FileExists(sBuild)\r
+  Else\r
+    bPotChanged = True\r
+  End If\r
+  For Each oFile In oFiles 'For all languages...\r
+    sFile = CStr(oFile)\r
+    Select Case UCase(oFSO.GetExtensionName(sFile))\r
+    Case "UPDATEPOFILESFROMPOTFILE"\r
+      If oFile.Name <> sBuild Then oFile.Name = sBuild\r
+    Case "PO"\r
+      If bPotChanged Or GetArchiveBit(sFile) Then 'If update necessary...\r
+        If bRunFromCmd Then 'If run from command line...\r
+          Wscript.Echo oFSO.GetFileName(sFile)\r
+        End If\r
+        Set oLanguagePoContent = GetContentFromPoFile(sFile)\r
+        If oLanguagePoContent.Count > 0 Then 'If content exists...\r
+          CreateUpdatedPoFile sFile, oEnglishPotContent, oLanguagePoContent\r
+        End If\r
+        SetArchiveBit sFile, False\r
+      End If\r
+    End Select\r
+  Next\r
+  \r
+  EndTime = Time\r
+  Seconds = DateDiff("s", StartTime, EndTime)\r
+  \r
+  InfoBox "All PO files updated, after " & Seconds & " second(s).", 10\r
+End Sub\r
+\r
+''\r
+' ...\r
+Class CSubContent\r
+  Dim sMsgCtxt2, sMsgId2, sMsgStr2, sTranslatorComments, sExtractedComments, sReferences, sFlags\r
+End Class\r
+\r
+''\r
+' ...\r
+Function GetContentFromPoFile(ByVal sPoPath)\r
+  Dim oContent, oSubContent, oTextFile, sLine\r
+  Dim oMatch, iMsgStarted, sMsgCtxt, sMsgId\r
+  Dim reMsgCtxt, reMsgId, reMsgContinued\r
+\r
+  Set reMsgCtxt = New RegExp\r
+  reMsgCtxt.Pattern = "^msgctxt ""(.*)""$"\r
+  reMsgCtxt.IgnoreCase = True\r
+\r
+  Set reMsgId = New RegExp\r
+  reMsgId.Pattern = "^msgid ""(.*)""$"\r
+  reMsgId.IgnoreCase = True\r
+\r
+  Set reMsgContinued = New RegExp\r
+  reMsgContinued.Pattern = "^""(.*)""$"\r
+  reMsgContinued.IgnoreCase = True\r
+  \r
+  Set oContent = CreateObject("Scripting.Dictionary")\r
+  \r
+  iMsgStarted = 0\r
+  sMsgCtxt = ""\r
+  Set oSubContent = New CSubContent\r
+  Set oTextFile = oFSO.OpenTextFile(sPoPath, ForReading)\r
+  Do Until oTextFile.AtEndOfStream 'For all lines...\r
+    sLine = Trim(oTextFile.ReadLine)\r
+    If sLine <> "" Then 'If NOT empty line...\r
+      If Left(sLine, 1) <> "#" Then 'If NOT comment line...\r
+        If reMsgCtxt.Test(sLine) Then 'If "msgctxt"...\r
+          iMsgStarted = 1\r
+          Set oMatch = reMsgCtxt.Execute(sLine)(0)\r
+          sMsgCtxt = oMatch.SubMatches(0)\r
+          oSubContent.sMsgCtxt2 = sLine & vbCrLf\r
+        ElseIf reMsgId.Test(sLine) Then 'If "msgid"...\r
+          iMsgStarted = 2\r
+          Set oMatch = reMsgId.Execute(sLine)(0)\r
+          sMsgId = oMatch.SubMatches(0)\r
+          oSubContent.sMsgId2 = sLine & vbCrLf\r
+        ElseIf Left(sLine, 8) = "msgstr """ Then 'If "msgstr"...\r
+          iMsgStarted = 3\r
+          oSubContent.sMsgStr2 = sLine & vbCrLf\r
+        ElseIf reMsgContinued.Test(sLine) Then 'If "msgctxt", "msgid" or "msgstr" continued...\r
+          If iMsgStarted = 1 Then\r
+            sMsgCtxt = sMsgCtxt & oMatch.SubMatches(0)\r
+            oSubContent.sMsgCtxt2 = oSubContent.sMsgCtxt2 & sLine & vbCrLf\r
+          ElseIf iMsgStarted = 2 Then\r
+            Set oMatch = reMsgContinued.Execute(sLine)(0)\r
+            sMsgId = sMsgId & oMatch.SubMatches(0)\r
+            oSubContent.sMsgId2 = oSubContent.sMsgId2 & sLine & vbCrLf\r
+          ElseIf iMsgStarted = 3 Then\r
+            oSubContent.sMsgStr2 = oSubContent.sMsgStr2 & sLine & vbCrLf\r
+          End If\r
+        End If\r
+      Else 'If comment line...\r
+        iMsgStarted = -1\r
+        Select Case Left(sLine, 2)\r
+          Case "#." 'Extracted comment...\r
+            oSubContent.sExtractedComments = oSubContent.sExtractedComments & sLine & vbCrLf\r
+          Case "#:" 'Reference...\r
+            oSubContent.sReferences = oSubContent.sReferences & sLine & vbCrLf\r
+          Case "#," 'Flag...\r
+            oSubContent.sFlags = oSubContent.sFlags & sLine & vbCrLf\r
+          Case Else 'Translator comment...\r
+            oSubContent.sTranslatorComments = oSubContent.sTranslatorComments & sLine & vbCrLf\r
+        End Select\r
+      End If\r
+    ElseIf iMsgStarted <> 0 Then 'If empty line AND there is pending translation...\r
+      iMsgStarted = 0 'Don't process same translation twice\r
+      If sMsgId = "" Then sMsgId = "__head__"\r
+      oContent.Add sMsgCtxt & sMsgId, oSubContent\r
+      sMsgCtxt = ""\r
+      Set oSubContent = New CSubContent\r
+    End If\r
+  Loop\r
+  oTextFile.Close\r
+  Set GetContentFromPoFile = oContent\r
+End Function\r
+\r
+''\r
+' ...\r
+Sub CreateUpdatedPoFile(ByVal sPoPath, ByVal oEnglishPotContent, ByVal oLanguagePoContent)\r
+  Dim sBakPath, oPoFile, sKey, oEnglish, oLanguage\r
+  \r
+  '--------------------------------------------------------------------------------\r
+  ' Backup the old PO file...\r
+  '--------------------------------------------------------------------------------\r
+  sBakPath = sPoPath & ".bak"\r
+  If oFSO.FileExists(sBakPath) Then\r
+    oFSO.DeleteFile sBakPath\r
+  End If\r
+  oFSO.MoveFile sPoPath, sBakPath\r
+  '--------------------------------------------------------------------------------\r
+  \r
+  Set oPoFile = oFSO.CreateTextFile(sPoPath, True)\r
+  \r
+  Set oLanguage = oLanguagePoContent("__head__")\r
+  oPoFile.Write oLanguage.sTranslatorComments\r
+  oPoFile.Write oLanguage.sMsgId2\r
+  oPoFile.Write oLanguage.sMsgStr2\r
+  oPoFile.Write vbCrLf\r
+  For Each sKey In oEnglishPotContent.Keys 'For all English content...\r
+    If sKey <> "__head__" Then\r
+      Set oEnglish = oEnglishPotContent(sKey)\r
+      If oLanguagePoContent.Exists(sKey) Then 'If translation exists...\r
+        Set oLanguage = oLanguagePoContent(sKey)\r
+      Else 'If translation NOT exists...\r
+        Set oLanguage = oEnglish\r
+      End If\r
+      oPoFile.Write oLanguage.sTranslatorComments\r
+      oPoFile.Write oEnglish.sExtractedComments\r
+      oPoFile.Write oEnglish.sReferences\r
+      oPoFile.Write oLanguage.sFlags\r
+      oPoFile.Write oLanguage.sMsgCtxt2\r
+      oPoFile.Write oLanguage.sMsgId2\r
+      oPoFile.Write oLanguage.sMsgStr2\r
+      oPoFile.Write vbCrLf\r
+    End If\r
+  Next\r
+  oPoFile.Close\r
+End Sub\r
+\r
+''\r
+' ...\r
+Function FormatTimestamp(now)\r
+  ' Form an ISO 8601 compliant timestamp without separators. Don't care about timezones.\r
+  FormatTimestamp = Right("0000" & Year(now), 4) & Right("00" & Month(now), 2) & Right("00" & Day(now), 2) _\r
+    & "T" & Right("00" & Hour(now), 2) & Right("00" & Minute(now), 2) & Right("00" & Second(now), 2)\r
+End Function\r
+\r
+''\r
+' ...\r
+Function InfoBox(ByVal sText, ByVal iSecondsToWait)\r
+  Dim oShell\r
+  \r
+  If (bRunFromCmd = False) Then 'If run from command line...\r
+    Set oShell = Wscript.CreateObject("WScript.Shell")\r
+    InfoBox = oShell.Popup(sText, iSecondsToWait, Wscript.ScriptName, 64)\r
+  Else 'If NOT run from command line...\r
+    Wscript.Echo sText\r
+  End If\r
+End Function\r
+\r
+''\r
+' ...\r
+Function GetArchiveBit(ByVal sFilePath)\r
+  Dim oFile\r
+  GetArchiveBit = False\r
+  If oFSO.FileExists(sFilePath) Then 'If the file exists...\r
+    Set oFile = oFSO.GetFile(sFilePath)\r
+    If (oFile.Attributes And 32) = 32 Then 'If archive bit set...\r
+      GetArchiveBit = True\r
+    End If\r
+  End If\r
+End Function\r
+\r
+''\r
+' ...\r
+Sub SetArchiveBit(ByVal sFilePath, ByVal bValue)\r
+  Dim oFile\r
+  If oFSO.FileExists(sFilePath) Then 'If the file exists...\r
+    Set oFile = oFSO.GetFile(sFilePath)\r
+    If bValue Xor (oFile.Attributes And 32) = 32 Then 'If archive bit different...\r
+      oFile.Attributes = oFile.Attributes Xor 32\r
+    End If\r
+  End If\r
+End Sub\r
diff --git a/Externals/heksedit/Languages/heksedit.rc b/Externals/heksedit/Languages/heksedit.rc
new file mode 100644 (file)
index 0000000..ba5cde6
--- /dev/null
@@ -0,0 +1,1314 @@
+// Microsoft Visual C++ generated resource script.\r
+//\r
+#include "resource.h"\r
+\r
+#define APSTUDIO_READONLY_SYMBOLS\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 2 resource.\r
+//\r
+#include "winres.h"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#undef APSTUDIO_READONLY_SYMBOLS\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// English (U.S.) resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Menu\r
+//\r
+\r
+IDR_MAINMENU MENU \r
+BEGIN\r
+    POPUP "heksedit.rc:31"\r
+    BEGIN\r
+        MENUITEM "heksedit.rc:33",                IDM_NEW\r
+        MENUITEM "heksedit.rc:34",            IDM_OPEN\r
+        MENUITEM "heksedit.rc:35",   IDM_PARTIAL_OPEN\r
+        MENUITEM "heksedit.rc:36",               IDM_SAVE\r
+        MENUITEM "heksedit.rc:37",         IDM_SAVE_AS\r
+        MENUITEM "heksedit.rc:38", IDM_SAVESELAS\r
+        MENUITEM "heksedit.rc:39",       IDM_REVERT\r
+        MENUITEM "heksedit.rc:40", IDM_INSERTFILE\r
+        MENUITEM "heksedit.rc:41", IDM_DELETEFILE\r
+        MENUITEM "heksedit.rc:42",    IDM_NEW\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "heksedit.rc:44",       IDM_COPY_HEXDUMP\r
+        MENUITEM "heksedit.rc:45", IDM_OPEN_HEXDUMP\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "heksedit.rc:47",               IDM_EXIT\r
+        MENUITEM "IDM_MRU",                     IDM_MRU1\r
+        MENUITEM "IDM_MRU",                     IDM_MRU2\r
+        MENUITEM "IDM_MRU",                     IDM_MRU3\r
+        MENUITEM "IDM_MRU",                     IDM_MRU4\r
+        MENUITEM "IDM_MRU",                     IDM_MRU5\r
+        MENUITEM "IDM_MRU",                     IDM_MRU6\r
+        MENUITEM "IDM_MRU",                     IDM_MRU7\r
+        MENUITEM "IDM_MRU",                     IDM_MRU8\r
+        MENUITEM "IDM_MRU",                     IDM_MRU9\r
+    END\r
+    POPUP "heksedit.rc:58"\r
+    BEGIN\r
+        MENUITEM "heksedit.rc:60",              ID_DISK_OPEN_DRIVE\r
+        MENUITEM "heksedit.rc:61",                ID_DISK_CLOSEDRIVE\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "heksedit.rc:63",           ID_DISK_GOTOFIRSTTRACK\r
+        MENUITEM "heksedit.rc:64", ID_DISK_GOTONEXTTRACK\r
+        MENUITEM "heksedit.rc:65", \r
+                                                ID_DISK_GOTOPREVIOUSTRACK\r
+        MENUITEM "heksedit.rc:67",            ID_DISK_GOTOLASTTRACK\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "heksedit.rc:69",            ID_DISK_GOTOTRACK\r
+    END\r
+    POPUP "heksedit.rc:71"\r
+    BEGIN\r
+        MENUITEM "heksedit.rc:73",             IDM_EDIT_CUT\r
+        MENUITEM "heksedit.rc:74",            IDM_EDIT_COPY\r
+        MENUITEM "heksedit.rc:75",           IDM_EDIT_PASTE\r
+        MENUITEM "heksedit.rc:76", IDM_PASTE_WITH_DLG\r
+        MENUITEM "heksedit.rc:77", IDM_EDIT_MOVE_COPY\r
+        MENUITEM "heksedit.rc:78", IDM_EDIT_REVERSE\r
+        MENUITEM "heksedit.rc:79",          IDM_EDIT_APPEND\r
+        MENUITEM "heksedit.rc:80",                IDA_DELETEKEY\r
+        MENUITEM "heksedit.rc:81",         IDM_SELECT_ALL\r
+        MENUITEM "heksedit.rc:82",    IDM_SELECT_BLOCK\r
+        MENUITEM "heksedit.rc:83", IDM_FILL_WITH\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "heksedit.rc:85", IDM_CHANGE_MODE\r
+        MENUITEM "heksedit.rc:86", \r
+                                                IDA_INSERTMODETOGGLE\r
+        MENUITEM "heksedit.rc:88", IDM_EDIT_READONLYMODE\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "heksedit.rc:90",            IDM_FIND\r
+        MENUITEM "heksedit.rc:91",          IDM_REPLACE\r
+        MENUITEM "heksedit.rc:92",           IDM_FINDPREV\r
+        MENUITEM "heksedit.rc:93",               IDM_FINDNEXT\r
+        MENUITEM "heksedit.rc:94",           IDM_GO_TO\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "heksedit.rc:96", \r
+                                                IDM_EDIT_ENTERDECIMALVALUE\r
+        MENUITEM "heksedit.rc:98", IDM_EDIT_MANIPULATEBITS\r
+        MENUITEM "heksedit.rc:99", IDM_COMPARE\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "heksedit.rc:101", IDM_READFLOAT\r
+        MENUITEM "heksedit.rc:102", IDM_PROPERTIES\r
+        MENUITEM "heksedit.rc:103",   IDM_APPLYTEMPLATE\r
+        MENUITEM "heksedit.rc:104",     IDM_OPEN_TEXT\r
+    END\r
+    POPUP "heksedit.rc:106"\r
+    BEGIN\r
+        MENUITEM "heksedit.rc:108", IDM_SCROLL_LEFT\r
+        MENUITEM "heksedit.rc:109", IDM_SCROLL_RIGHT\r
+        MENUITEM "heksedit.rc:110",   IDM_SCROLL_UP\r
+        MENUITEM "heksedit.rc:111", IDM_SCROLL_DOWN\r
+        MENUITEM "heksedit.rc:112", IDM_SCROLL_PRIOR\r
+        MENUITEM "heksedit.rc:113", IDM_SCROLL_NEXT\r
+    END\r
+    POPUP "heksedit.rc:115"\r
+    BEGIN\r
+        MENUITEM "heksedit.rc:117",   IDM_VIEW_SETTINGS\r
+        POPUP "heksedit.rc:118"\r
+        BEGIN\r
+            MENUITEM "heksedit.rc:120",      IDM_TEXT_COLOR\r
+            MENUITEM "heksedit.rc:121", IDM_BK_COLOR\r
+            MENUITEM "heksedit.rc:122",  IDM_SEP_COLOR\r
+            MENUITEM "heksedit.rc:123", \r
+                                                    IDM_SELTEXT_COLOR\r
+            MENUITEM "heksedit.rc:125", \r
+                                                    IDM_SELBACK_COLOR\r
+            MENUITEM "heksedit.rc:127", IDM_BMK_COLOR\r
+            MENUITEM SEPARATOR\r
+            MENUITEM "heksedit.rc:129", \r
+                                                    IDM_RESET_COLORS\r
+            MENUITEM "heksedit.rc:131", \r
+                                                    IDM_ADOPT_COLOURS\r
+        END\r
+        MENUITEM "heksedit.rc:134",   IDM_CHARACTER_SET\r
+        MENUITEM "heksedit.rc:135",     IDM_BINARYMODE\r
+        MENUITEM "heksedit.rc:136", IDM_OLE_DRAG_DROP\r
+        MENUITEM "heksedit.rc:137",  IDM_MAKE_BACKUPS, CHECKED\r
+    END\r
+    POPUP "heksedit.rc:139"\r
+    BEGIN\r
+        MENUITEM "heksedit.rc:141",        IDM_CONTEXT, CHECKED\r
+        MENUITEM "heksedit.rc:142",    IDM_UNKNOWN, CHECKED\r
+        MENUITEM "heksedit.rc:143", IDM_DEFAULT, CHECKED\r
+        MENUITEM "heksedit.rc:144",     IDM_SAVEINI, CHECKED\r
+        MENUITEM "heksedit.rc:145",         IDM_CHANGEINST\r
+        MENUITEM "heksedit.rc:146",            IDM_REMOVE\r
+        MENUITEM "heksedit.rc:147",                 IDM_UPGRADE\r
+        MENUITEM "heksedit.rc:148",      IDM_SHORTCUTS\r
+    END\r
+    POPUP "heksedit.rc:150"\r
+    BEGIN\r
+        MENUITEM "heksedit.rc:152",    IDM_ADDBOOKMARK\r
+        MENUITEM "heksedit.rc:153",  IDM_REMOVE_BKM\r
+        MENUITEM "heksedit.rc:154", IDM_CLEARALL_BMK\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "heksedit.rc:156",                         IDM_BOOKMARK1\r
+        MENUITEM "heksedit.rc:157",                         IDM_BOOKMARK2\r
+        MENUITEM "heksedit.rc:158",                         IDM_BOOKMARK3\r
+        MENUITEM "heksedit.rc:159",                         IDM_BOOKMARK4\r
+        MENUITEM "heksedit.rc:160",                         IDM_BOOKMARK5\r
+        MENUITEM "heksedit.rc:161",                         IDM_BOOKMARK6\r
+        MENUITEM "heksedit.rc:162",                         IDM_BOOKMARK7\r
+        MENUITEM "heksedit.rc:163",                         IDM_BOOKMARK8\r
+        MENUITEM "heksedit.rc:164",                         IDM_BOOKMARK9\r
+    END\r
+    POPUP "heksedit.rc:166"\r
+    BEGIN\r
+        MENUITEM "heksedit.rc:168",   ID_MISC_GOTO_DLL_EXPORTS\r
+        MENUITEM "heksedit.rc:169",    ID_MISC_GOTO_DLL_IMPORTS\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "heksedit.rc:171",          ID_MISC_ENCODEDECODE\r
+    END\r
+    POPUP "heksedit.rc:173"\r
+    BEGIN\r
+        MENUITEM "heksedit.rc:175",         IDM_HELP_TOPICS\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "heksedit.rc:177",             IDM_ABOUT\r
+    END\r
+END\r
+\r
+IDR_CONTEXTMENU MENU \r
+BEGIN\r
+    POPUP "0"\r
+    BEGIN\r
+        MENUITEM "heksedit.rc:185",             IDM_EDIT_CUT\r
+        MENUITEM "heksedit.rc:186",            IDM_EDIT_COPY\r
+        MENUITEM "heksedit.rc:187",           IDM_EDIT_PASTE\r
+        MENUITEM "heksedit.rc:188",                IDA_DELETEKEY\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "heksedit.rc:190",            IDM_FIND\r
+        MENUITEM "heksedit.rc:191",          IDM_REPLACE\r
+        MENUITEM "heksedit.rc:192",               IDM_FINDNEXT\r
+        MENUITEM "heksedit.rc:193",           IDM_FINDPREV\r
+        MENUITEM "heksedit.rc:194",           IDM_GO_TO\r
+    END\r
+    POPUP "heksedit.rc:196"\r
+    BEGIN\r
+        MENUITEM "heksedit.rc:198",           ID_DISK_GOTOFIRSTTRACK\r
+        MENUITEM "heksedit.rc:199",           ID_DISK_GOTONEXTTRACK\r
+        MENUITEM "heksedit.rc:200",       ID_DISK_GOTOPREVIOUSTRACK\r
+        MENUITEM "heksedit.rc:201",            ID_DISK_GOTOLASTTRACK\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "heksedit.rc:203",            ID_DISK_GOTOTRACK\r
+    END\r
+END\r
+\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// TEXTINCLUDE\r
+//\r
+\r
+1 TEXTINCLUDE \r
+BEGIN\r
+    "resource.h\0"\r
+END\r
+\r
+2 TEXTINCLUDE \r
+BEGIN\r
+    "#include ""winres.h""\r\n"\r
+    "\0"\r
+END\r
+\r
+3 TEXTINCLUDE \r
+BEGIN\r
+    "#include ""version.rc""\r\n"\r
+    "\0"\r
+END\r
+\r
+#endif    // APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Accelerator\r
+//\r
+\r
+IDR_ACCELERATOR1 ACCELERATORS \r
+BEGIN\r
+    "A",            IDM_SELECT_ALL,         VIRTKEY, CONTROL, NOINVERT\r
+    "A",            IDM_ADOPT_COLOURS,      VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "B",            IDM_EDIT_MANIPULATEBITS, VIRTKEY, CONTROL, NOINVERT\r
+    "B",            IDM_BMK_COLOR,          VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "C",            IDM_EDIT_COPY,          VIRTKEY, CONTROL, NOINVERT\r
+    "D",            IDM_EDIT_ENTERDECIMALVALUE, VIRTKEY, CONTROL, NOINVERT\r
+    "D",            IDM_DELETEFILE,         VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "E",            IDM_SELECT_BLOCK,       VIRTKEY, CONTROL, NOINVERT\r
+    "F",            IDM_FIND,               VIRTKEY, CONTROL, NOINVERT\r
+    "F",            IDM_FILL_WITH,          VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "G",            IDM_GO_TO,              VIRTKEY, CONTROL, NOINVERT\r
+    "H",            IDM_REPLACE,            VIRTKEY, CONTROL, NOINVERT\r
+    "H",            IDM_OPEN_HEXDUMP,       VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "I",            IDM_VIEW_SETTINGS,      VIRTKEY, CONTROL, NOINVERT\r
+    "I",            IDM_INSERTFILE,         VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "J",            IDM_SAVE_AS,            VIRTKEY, CONTROL, NOINVERT\r
+    "K",            IDM_BK_COLOR,           VIRTKEY, CONTROL, NOINVERT\r
+    "K",            IDM_SELBACK_COLOR,      VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "L",            IDM_READFLOAT,          VIRTKEY, CONTROL, NOINVERT\r
+    "M",            IDM_COMPARE,            VIRTKEY, CONTROL, NOINVERT\r
+    "M",            IDM_EDIT_MOVE_COPY,     VIRTKEY, CONTROL, ALT, NOINVERT\r
+    "M",            IDM_MAKE_BACKUPS,       VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "N",            IDM_NEW,                VIRTKEY, CONTROL, NOINVERT\r
+    "O",            IDM_OPEN,               VIRTKEY, CONTROL, NOINVERT\r
+    "O",            IDM_OLE_DRAG_DROP,      VIRTKEY, CONTROL, ALT, NOINVERT\r
+    "O",            IDM_SAVESELAS,          VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "P",            IDM_EDIT_APPEND,        VIRTKEY, CONTROL, NOINVERT\r
+    "P",            IDM_PARTIAL_OPEN,       VIRTKEY, ALT, NOINVERT\r
+    "Q",            IDM_SEP_COLOR,          VIRTKEY, CONTROL, NOINVERT\r
+    "R",            IDM_CHARACTER_SET,      VIRTKEY, CONTROL, NOINVERT\r
+    "R",            IDM_EDIT_READONLYMODE,  VIRTKEY, ALT, NOINVERT\r
+    "R",            IDM_EDIT_REVERSE,       VIRTKEY, CONTROL, ALT, NOINVERT\r
+    "R",            IDM_REVERT,             VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "S",            IDM_SAVE,               VIRTKEY, CONTROL, NOINVERT\r
+    "S",            IDM_RESET_COLORS,       VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "T",            IDM_TEXT_COLOR,         VIRTKEY, CONTROL, NOINVERT\r
+    "T",            IDM_APPLYTEMPLATE,      VIRTKEY, ALT, NOINVERT\r
+    "T",            IDM_SELTEXT_COLOR,      VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "V",            IDM_EDIT_PASTE,         VIRTKEY, CONTROL, NOINVERT\r
+    "V",            IDM_PASTE_WITH_DLG,     VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    VK_BACK,        IDA_BACKSPACE,          VIRTKEY, NOINVERT\r
+    VK_DELETE,      IDA_DELETEKEY,          VIRTKEY, NOINVERT\r
+    VK_DOWN,        IDM_SCROLL_DOWN,        VIRTKEY, CONTROL, NOINVERT\r
+    VK_F1,          IDM_HELP_TOPICS,        VIRTKEY, NOINVERT\r
+    VK_F2,          IDM_INTERNALSTATUS,     VIRTKEY, NOINVERT\r
+    VK_F3,          IDM_FINDPREV,           VIRTKEY, NOINVERT\r
+    VK_F4,          IDM_FINDNEXT,           VIRTKEY, NOINVERT\r
+    VK_F5,          IDM_OPEN_TEXT,          VIRTKEY, NOINVERT\r
+    VK_INSERT,      IDA_INSERTMODETOGGLE,   VIRTKEY, NOINVERT\r
+    VK_LEFT,        IDM_SCROLL_LEFT,        VIRTKEY, CONTROL, NOINVERT\r
+    VK_NEXT,        IDM_SCROLL_NEXT,        VIRTKEY, CONTROL, NOINVERT\r
+    VK_NEXT,        ID_DISK_GOTONEXTTRACK,  VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    VK_PRIOR,       IDM_SCROLL_PRIOR,       VIRTKEY, CONTROL, NOINVERT\r
+    VK_PRIOR,       ID_DISK_GOTOPREVIOUSTRACK, VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    VK_RETURN,      IDM_PROPERTIES,         VIRTKEY, ALT, NOINVERT\r
+    VK_RIGHT,       IDM_SCROLL_RIGHT,       VIRTKEY, CONTROL, NOINVERT\r
+    VK_UP,          IDM_SCROLL_UP,          VIRTKEY, CONTROL, NOINVERT\r
+    "W",            IDM_ADDBOOKMARK,        VIRTKEY, CONTROL, NOINVERT\r
+    "W",            IDM_REMOVE_BKM,         VIRTKEY, ALT, NOINVERT\r
+    "W",            IDM_CLEARALL_BMK,       VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "X",            IDM_EDIT_CUT,           VIRTKEY, CONTROL, NOINVERT\r
+    "X",            IDM_NEW,                VIRTKEY, SHIFT, CONTROL, \r
+                                                    NOINVERT\r
+    "Y",            IDM_BINARYMODE,         VIRTKEY, CONTROL, NOINVERT\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Dialog\r
+//\r
+\r
+IDD_GOTODIALOG DIALOGEX 0, 0, 244, 66\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | \r
+    WS_SYSMENU\r
+CAPTION "heksedit.rc:332"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:335",\r
+                    IDC_STATIC,7,10,139,8\r
+    LTEXT           "heksedit.rc:337",\r
+                    IDC_STATIC,7,19,142,8\r
+    LTEXT           "heksedit.rc:339",IDC_STATIC,7,34,40,8\r
+    EDITTEXT        IDC_EDIT1,7,44,149,13,ES_AUTOHSCROLL\r
+    DEFPUSHBUTTON   "heksedit.rc:341",IDOK,187,20,50,14\r
+    PUSHBUTTON      "heksedit.rc:342",IDCANCEL,187,38,50,14\r
+END\r
+\r
+IDD_FINDDIALOG DIALOGEX 0, 0, 279, 138\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | \r
+    WS_SYSMENU\r
+CAPTION "heksedit.rc:348"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:351",\r
+                    IDC_STATIC,7,7,265,16\r
+    EDITTEXT        IDC_EDIT1,7,26,265,57,ES_MULTILINE | ES_AUTOVSCROLL\r
+    CONTROL         "heksedit.rc:354",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,7,87,53,10\r
+    CONTROL         "heksedit.rc:356",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,7,100,49,8\r
+    GROUPBOX        "heksedit.rc:358",IDC_STATIC,62,87,61,36\r
+    CONTROL         "heksedit.rc:359",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | \r
+                    WS_TABSTOP,71,98,25,10\r
+    CONTROL         "heksedit.rc:361",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,71,111,35,\r
+                    10\r
+    DEFPUSHBUTTON   "heksedit.rc:363",IDOK,222,100,50,14,WS_GROUP\r
+    PUSHBUTTON      "heksedit.rc:364",IDCANCEL,222,117,50,14\r
+END\r
+\r
+IDD_ABOUTDIALOG DIALOGEX 0, 0, 212, 191\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | \r
+    WS_CAPTION\r
+CAPTION "heksedit.rc:370"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    DEFPUSHBUTTON   "heksedit.rc:373",IDOK,80,171,50,14\r
+    ICON            32512,IDC_APPICON,7,9,20,20\r
+    LTEXT           "",IDC_STATIC1,37,7,167,66\r
+    LTEXT           "heksedit.rc:376",IDC_STATIC,5,71,20,8\r
+    EDITTEXT        IDC_EDIT1,6,81,198,25,ES_MULTILINE | ES_AUTOHSCROLL | \r
+                    ES_READONLY\r
+    EDITTEXT        IDC_EDIT2,22,121,167,12,ES_AUTOHSCROLL | ES_READONLY\r
+    GROUPBOX        "heksedit.rc:380",IDC_STATIC,6,111,198,52\r
+    PUSHBUTTON      "heksedit.rc:381",IDC_BUTTON1,\r
+                    30,140,150,14\r
+END\r
+\r
+IDD_HEXDUMPDIALOG DIALOGEX 0, 0, 163, 161\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:387"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:390",IDC_STATIC,7,\r
+                    7,128,8\r
+    LTEXT           "heksedit.rc:392",IDC_STATIC,7,17,72,8\r
+    EDITTEXT        IDC_EDIT1,6,25,149,12,ES_AUTOHSCROLL\r
+    LTEXT           "heksedit.rc:394",IDC_STATIC,7,40,\r
+                    111,8\r
+    EDITTEXT        IDC_EDIT2,7,49,149,13,ES_AUTOHSCROLL\r
+    GROUPBOX        "heksedit.rc:397",IDC_STATIC,7,69,88,40,WS_GROUP\r
+    CONTROL         "heksedit.rc:398",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_GROUP | WS_TABSTOP,14,80,55,10\r
+    CONTROL         "heksedit.rc:400",IDC_RADIO2,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,14,92,75,10\r
+    GROUPBOX        "heksedit.rc:402",IDC_STATIC,7,110,103,45,WS_GROUP\r
+    CONTROL         "heksedit.rc:403",IDC_EXPORTDISPLAY,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_GROUP,15,120,78,10\r
+    CONTROL         "heksedit.rc:405",IDC_EXPORTDIGITS,"Button",\r
+                    BS_AUTORADIOBUTTON,15,130,89,10\r
+    CONTROL         "heksedit.rc:407",IDC_EXPORTRTF,"Button",\r
+                    BS_AUTORADIOBUTTON,15,140,81,10\r
+    DEFPUSHBUTTON   "heksedit.rc:409",IDOK,105,70,50,14,WS_GROUP\r
+    PUSHBUTTON      "heksedit.rc:410",IDCANCEL,105,90,50,14\r
+END\r
+\r
+IDD_DECIMALDIALOG DIALOGEX 0, 0, 204, 111\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:415"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:418",IDC_STATIC,7,7,65,8\r
+    EDITTEXT        IDC_EDIT1,7,16,97,12,ES_AUTOHSCROLL\r
+    LTEXT           "heksedit.rc:420",IDC_STATIC,7,30,\r
+                    108,8\r
+    EDITTEXT        IDC_EDIT2,7,38,98,12,ES_AUTOHSCROLL\r
+    LTEXT           "heksedit.rc:423",IDC_STATIC,7,54,54,8\r
+    EDITTEXT        IDC_EDIT3,7,62,97,12,ES_AUTOHSCROLL\r
+    GROUPBOX        "heksedit.rc:425",IDC_STATIC,7,79,190,25\r
+    CONTROL         "heksedit.rc:426",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_GROUP,11,88,49,10\r
+    CONTROL         "heksedit.rc:428",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,\r
+                    63,88,57,10\r
+    CONTROL         "heksedit.rc:430",IDC_RADIO3,"Button",\r
+                    BS_AUTORADIOBUTTON,122,88,71,10\r
+    DEFPUSHBUTTON   "heksedit.rc:432",IDOK,147,39,50,14,WS_GROUP\r
+    PUSHBUTTON      "heksedit.rc:433",IDCANCEL,147,56,50,14\r
+END\r
+\r
+IDD_PASTEDIALOG DIALOGEX 0, 0, 291, 145\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:438"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:441",IDC_STATIC,7,7,76,8\r
+    EDITTEXT        IDC_EDIT1,7,18,277,65,ES_MULTILINE | WS_VSCROLL,\r
+                    WS_EX_TRANSPARENT\r
+    GROUPBOX        "heksedit.rc:444",IDC_STATIC,7,86,64,40\r
+    CONTROL         "heksedit.rc:445",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_GROUP | WS_TABSTOP,14,98,46,10\r
+    CONTROL         "heksedit.rc:447",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_TABSTOP,14,109,33,10\r
+    LTEXT           "heksedit.rc:449",IDC_STATIC,80,86,89,8\r
+    EDITTEXT        IDC_EDIT2,79,96,67,12,ES_AUTOHSCROLL\r
+    CONTROL         "heksedit.rc:451",IDC_CHECK1,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,80,115,122,10\r
+    LTEXT           "heksedit.rc:453",\r
+                    IDC_STATIC,7,129,160,8\r
+    EDITTEXT        IDC_EDIT3,168,126,60,12,ES_AUTOHSCROLL\r
+    DEFPUSHBUTTON   "heksedit.rc:456",IDOK,234,96,50,14\r
+    PUSHBUTTON      "heksedit.rc:457",IDCANCEL,234,112,50,14\r
+END\r
+\r
+IDD_CUTDIALOG DIALOGEX 0, 0, 169, 159\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:462"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:465",\r
+                    IDC_STATIC,7,7,157,8\r
+    EDITTEXT        IDC_EDIT1,7,16,136,12,ES_AUTOHSCROLL\r
+    GROUPBOX        "heksedit.rc:468",IDC_STATIC,7,33,155,81\r
+    CONTROL         "heksedit.rc:469",IDC_RADIO1,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,15,48,110,10\r
+    CONTROL         "heksedit.rc:471",IDC_RADIO2,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,15,80,89,10\r
+    EDITTEXT        IDC_EDIT2,16,59,136,12,ES_AUTOHSCROLL | WS_GROUP\r
+    EDITTEXT        IDC_EDIT3,15,91,136,12,ES_AUTOHSCROLL | WS_DISABLED | \r
+                    WS_GROUP\r
+    CONTROL         "heksedit.rc:476",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,7,120,65,10\r
+    DEFPUSHBUTTON   "heksedit.rc:478",IDOK,112,122,50,14\r
+    PUSHBUTTON      "heksedit.rc:479",IDCANCEL,112,138,50,14\r
+END\r
+\r
+IDD_COPYDIALOG DIALOGEX 0, 0, 158, 154\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:484"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:487",IDC_STATIC,7,7,86,8\r
+    LTEXT           "heksedit.rc:488",IDC_STATIC,7,20,72,8\r
+    EDITTEXT        IDC_EDIT1,7,29,130,13,ES_AUTOHSCROLL\r
+    GROUPBOX        "heksedit.rc:490",IDC_STATIC,7,51,144,73\r
+    CONTROL         "heksedit.rc:491",IDC_RADIO1,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,14,63,115,10\r
+    CONTROL         "heksedit.rc:493",IDC_RADIO2,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,13,93,95,10\r
+    EDITTEXT        IDC_EDIT2,14,73,130,13,ES_AUTOHSCROLL | WS_GROUP\r
+    EDITTEXT        IDC_EDIT3,14,103,130,13,ES_AUTOHSCROLL | WS_DISABLED | \r
+                    WS_GROUP\r
+    DEFPUSHBUTTON   "heksedit.rc:498",IDOK,25,131,50,14\r
+    PUSHBUTTON      "heksedit.rc:499",IDCANCEL,82,131,50,14\r
+END\r
+\r
+IDD_VIEWSETTINGSDIALOG DIALOGEX 0, 0, 229, 167\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:504"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:507",IDC_STATIC,7,7,\r
+                    110,8\r
+    EDITTEXT        IDC_EDIT1,7,16,68,12,ES_AUTOHSCROLL\r
+    CONTROL         "heksedit.rc:510",\r
+                    IDC_CHECK1,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | \r
+                    WS_TABSTOP,7,31,214,19\r
+    LTEXT           "heksedit.rc:513",\r
+                    IDC_STATIC,7,51,151,8\r
+    EDITTEXT        IDC_EDIT2,7,61,68,12,ES_AUTOHSCROLL\r
+    CONTROL         "heksedit.rc:516",IDC_CHECK2,\r
+                    "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,80,\r
+                    61,140,12\r
+    GROUPBOX        "heksedit.rc:519",IDC_STATIC,7,76,\r
+                    128,25,WS_GROUP\r
+    CONTROL         "heksedit.rc:521",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_GROUP | WS_TABSTOP,14,86,45,10\r
+    CONTROL         "heksedit.rc:523",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,65,86,37,\r
+                    10\r
+    CONTROL         "heksedit.rc:525",IDC_CHECK5,"Button",\r
+                    BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,106,128,10\r
+    LTEXT           "heksedit.rc:527",\r
+                    IDC_STATIC,7,122,133,8\r
+    EDITTEXT        IDC_EDIT3,7,132,214,13,ES_AUTOHSCROLL\r
+    DEFPUSHBUTTON   "heksedit.rc:530",IDOK,171,80,50,14\r
+    PUSHBUTTON      "heksedit.rc:531",IDCANCEL,171,97,50,14\r
+END\r
+\r
+IDD_APPENDDIALOG DIALOGEX 0, 0, 192, 46\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:536"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:539",IDC_STATIC,7,7,\r
+                    121,8\r
+    EDITTEXT        IDC_EDIT1,7,17,120,12,ES_AUTOHSCROLL | ES_NUMBER\r
+    DEFPUSHBUTTON   "heksedit.rc:542",IDOK,135,7,50,14\r
+    PUSHBUTTON      "heksedit.rc:543",IDCANCEL,135,24,50,14\r
+END\r
+\r
+IDD_MANIPBITSDIALOG DIALOGEX 0, 0, 257, 84\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:548"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:551",IDC_STATIC1,7,7,243,8\r
+    CONTROL         "heksedit.rc:552",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+                    7,18,30,10,WS_EX_STATICEDGE\r
+    CONTROL         "heksedit.rc:554",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+                    38,18,30,10,WS_EX_STATICEDGE\r
+    CONTROL         "heksedit.rc:556",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+                    69,18,30,10,WS_EX_STATICEDGE\r
+    CONTROL         "heksedit.rc:558",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+                    100,18,30,10,WS_EX_STATICEDGE\r
+    CONTROL         "heksedit.rc:560",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+                    130,18,30,10,WS_EX_STATICEDGE\r
+    CONTROL         "heksedit.rc:562",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+                    160,18,30,10,WS_EX_STATICEDGE\r
+    CONTROL         "heksedit.rc:564",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+                    190,18,30,10,WS_EX_STATICEDGE\r
+    CONTROL         "heksedit.rc:566",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+                    220,18,30,10,WS_EX_STATICEDGE\r
+    LTEXT           "heksedit.rc:568",IDC_STATIC,15,29,17,8\r
+    LTEXT           "heksedit.rc:569",IDC_STATIC,48,29,13,8\r
+    LTEXT           "heksedit.rc:570",IDC_STATIC,77,29,13,8\r
+    LTEXT           "heksedit.rc:571",IDC_STATIC,108,29,13,8\r
+    LTEXT           "heksedit.rc:572",IDC_STATIC,140,29,9,8\r
+    LTEXT           "heksedit.rc:573",IDC_STATIC,171,29,9,8\r
+    LTEXT           "heksedit.rc:574",IDC_STATIC,202,29,9,8\r
+    LTEXT           "heksedit.rc:575",IDC_STATIC,231,29,9,8\r
+    LTEXT           "heksedit.rc:576",IDC_STATIC2,7,43,243,8\r
+    DEFPUSHBUTTON   "heksedit.rc:577",IDOK,75,63,50,14\r
+    PUSHBUTTON      "heksedit.rc:578",IDCANCEL,132,63,50,14\r
+END\r
+\r
+IDD_CHARACTERSETDIALOG DIALOGEX 0, 0, 172, 81\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | \r
+    WS_SYSMENU\r
+CAPTION "heksedit.rc:584"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "heksedit.rc:587",IDC_STATIC,7,7,101,40\r
+    CONTROL         "heksedit.rc:588",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,\r
+                    25,19,33,10\r
+    CONTROL         "heksedit.rc:590",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,25,32,32,10\r
+    LTEXT           "heksedit.rc:591",IDC_STATIC,7,53,101,8\r
+    EDITTEXT        IDC_EDIT1,7,62,65,12,ES_AUTOHSCROLL | ES_NUMBER\r
+    DEFPUSHBUTTON   "heksedit.rc:593",IDOK,115,24,50,14\r
+    PUSHBUTTON      "heksedit.rc:594",IDCANCEL,115,41,50,14\r
+END\r
+\r
+IDD_CHOOSEDIFFDIALOG DIALOGEX 0, 0, 258, 231\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:599"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:602",IDC_STATIC2,7,7,244,8\r
+    LTEXT           "heksedit.rc:603",IDC_STATIC1,7,18,244,8\r
+    LISTBOX         IDC_LIST1,7,29,244,178,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | \r
+                    WS_TABSTOP\r
+    DEFPUSHBUTTON   "heksedit.rc:606",IDOK,7,210,50,14\r
+    PUSHBUTTON      "heksedit.rc:607",IDCANCEL,74,210,50,14\r
+    PUSHBUTTON      "heksedit.rc:608",IDCOPY,187,210,64,14\r
+END\r
+\r
+IDD_BINARYMODEDIALOG DIALOGEX 0, 0, 183, 58\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:613"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "heksedit.rc:616",IDC_STATIC,7,7,104,44\r
+    CONTROL         "heksedit.rc:617",IDC_RADIO1,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_GROUP,15,20,73,10\r
+    CONTROL         "heksedit.rc:619",IDC_RADIO2,"Button",\r
+                    BS_AUTORADIOBUTTON,15,34,83,10\r
+    DEFPUSHBUTTON   "heksedit.rc:621",IDOK,126,12,50,14,WS_GROUP\r
+    PUSHBUTTON      "heksedit.rc:622",IDCANCEL,126,29,50,14\r
+END\r
+\r
+IDD_SELECT_BLOCK_DIALOG DIALOGEX 0, 0, 207, 68\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:627"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:630",\r
+                    IDC_STATIC,7,7,134,8\r
+    EDITTEXT        IDC_EDIT1,7,17,134,12,ES_AUTOHSCROLL\r
+    LTEXT           "heksedit.rc:633",\r
+                    IDC_STATIC2,7,36,133,8\r
+    EDITTEXT        IDC_EDIT2,7,48,133,13,ES_AUTOHSCROLL\r
+    DEFPUSHBUTTON   "heksedit.rc:636",IDOK,150,18,50,14\r
+    PUSHBUTTON      "heksedit.rc:637",IDCANCEL,150,35,50,14\r
+END\r
+\r
+IDD_ADDBMK_DIALOG DIALOGEX 0, 0, 193, 65\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:642"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:645",IDC_STATIC,7,7,\r
+                    114,8\r
+    EDITTEXT        IDC_EDIT1,7,18,118,12,ES_AUTOHSCROLL\r
+    LTEXT           "heksedit.rc:648",IDC_STATIC,7,36,63,8\r
+    EDITTEXT        IDC_EDIT2,7,46,118,12,ES_AUTOHSCROLL\r
+    DEFPUSHBUTTON   "heksedit.rc:650",IDOK,136,16,50,14\r
+    PUSHBUTTON      "heksedit.rc:651",IDCANCEL,136,33,50,14\r
+END\r
+\r
+IDD_REMOVEBMK_DIALOG DIALOGEX 0, 0, 209, 167\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:656"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:659",IDC_STATIC,7,7,84,8\r
+    LISTBOX         IDC_LIST1,7,17,195,123,LBS_SORT | LBS_NOINTEGRALHEIGHT | \r
+                    WS_VSCROLL | WS_TABSTOP\r
+    DEFPUSHBUTTON   "heksedit.rc:662",IDOK,51,146,50,14\r
+    PUSHBUTTON      "heksedit.rc:663",IDCANCEL,109,146,50,14\r
+END\r
+\r
+IDD_OPEN_PARTIAL_DIALOG DIALOGEX 0, 0, 221, 135\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:668"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "heksedit.rc:671",IDC_STATIC,7,7,207,60\r
+    CONTROL         "heksedit.rc:672",\r
+                    IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,17,21,\r
+                    179,10\r
+    CONTROL         "heksedit.rc:675",IDC_RADIO2,"Button",\r
+                    BS_AUTORADIOBUTTON,17,50,64,10\r
+    EDITTEXT        IDC_EDIT1,28,31,134,12,ES_AUTOHSCROLL | WS_GROUP\r
+    LTEXT           "heksedit.rc:678",IDC_STATIC2,7,73,207,8\r
+    EDITTEXT        IDC_EDIT2,7,82,135,13,ES_AUTOHSCROLL\r
+    CONTROL         "heksedit.rc:680",\r
+                    IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,100,\r
+                    206,10\r
+    DEFPUSHBUTTON   "heksedit.rc:683",IDOK,55,115,50,14\r
+    PUSHBUTTON      "heksedit.rc:684",IDCANCEL,110,115,50,14\r
+END\r
+\r
+IDD_FASTPASTE_DIALOG DIALOGEX 0, 0, 267, 146\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:689"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "heksedit.rc:692",IDC_STATIC,7,7,64,35\r
+    CONTROL         "heksedit.rc:693",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_GROUP | WS_TABSTOP,14,18,46,10\r
+    CONTROL         "heksedit.rc:695",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_TABSTOP,14,30,33,10\r
+    LTEXT           "heksedit.rc:697",IDC_STATIC,80,7,89,8\r
+    EDITTEXT        IDC_EDIT2,79,17,67,12,ES_AUTOHSCROLL\r
+    CONTROL         "heksedit.rc:699",IDC_CHECK1,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,80,36,122,10\r
+    LTEXT           "heksedit.rc:701",\r
+                    IDC_STATIC,7,49,156,12,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_EDIT3,170,49,35,12,ES_AUTOHSCROLL\r
+    LTEXT           "heksedit.rc:704",IDC_STATIC,5,65,75,8\r
+    LISTBOX         IDC_LIST,5,75,255,35,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | \r
+                    WS_HSCROLL | WS_TABSTOP\r
+    LTEXT           "heksedit.rc:707",\r
+                    IDC_STATIC,5,115,255,25\r
+    DEFPUSHBUTTON   "heksedit.rc:709",IDOK,210,11,50,14\r
+    PUSHBUTTON      "heksedit.rc:710",IDCANCEL,210,28,50,14\r
+    PUSHBUTTON      "heksedit.rc:711",IDC_REFRESH,210,45,50,15\r
+END\r
+\r
+IDD_TMPL_RESULT_DIALOG DIALOGEX 0, 0, 304, 175\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:716"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:719",IDC_STATIC,7,7,96,8\r
+    EDITTEXT        IDC_EDIT1,7,17,290,132,ES_MULTILINE | ES_AUTOVSCROLL | \r
+                    ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL\r
+    DEFPUSHBUTTON   "heksedit.rc:722",IDOK,99,154,50,14\r
+    PUSHBUTTON      "heksedit.rc:723",IDCANCEL,154,154,50,14\r
+END\r
+\r
+IDD_REPLACEDIALOG DIALOGEX 0, 0, 208, 226\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:728"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:731",IDC_STATIC,7,7,34,8\r
+    EDITTEXT        IDC_TO_REPLACE_EDIT,7,16,194,62,ES_MULTILINE | \r
+                    ES_AUTOHSCROLL | WS_VSCROLL\r
+    PUSHBUTTON      "heksedit.rc:734",IDC_FINDNEXT_BUTTON,7,81,39,14\r
+    PUSHBUTTON      "heksedit.rc:735",IDC_FINDPREVIOUS_BUTTON,51,81,54,14\r
+    CONTROL         "heksedit.rc:736",IDC_MATCHCASE_CHECK,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,146,81,53,10\r
+    LTEXT           "heksedit.rc:738",IDC_STATIC,7,98,44,8\r
+    EDITTEXT        IDC_REPLACEWITH_EDIT,7,108,194,58,ES_AUTOHSCROLL\r
+    GROUPBOX        "heksedit.rc:740",IDC_STATIC,7,169,105,50\r
+    PUSHBUTTON      "heksedit.rc:741",IDC_FOLLOCC_BUTTON,13,180,90,\r
+                    14\r
+    PUSHBUTTON      "heksedit.rc:743",IDC_PREVOCC_BUTTON,14,196,89,\r
+                    14\r
+    CONTROL         "heksedit.rc:745",IDC_USETRANSLATION_CHECK,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,126,172,75,10\r
+    PUSHBUTTON      "heksedit.rc:747",IDC_REPLACE_BUTTON,148,186,53,14\r
+    PUSHBUTTON      "heksedit.rc:748",IDCANCEL,147,205,54,14\r
+END\r
+\r
+IDD_FILL_WITH DIALOGEX 0, 0, 382, 103\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:753"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:756",IDC_STATIC,5,5,56,8\r
+    COMBOBOX        IDC_TYPE,65,5,35,35,CBS_DROPDOWNLIST | WS_VSCROLL | \r
+                    WS_TABSTOP\r
+    LTEXT           "heksedit.rc:759",IDC_FILESTAT,105,5,14,12\r
+    EDITTEXT        IDC_FN,120,5,210,12,ES_AUTOHSCROLL | ES_READONLY\r
+    PUSHBUTTON      "heksedit.rc:761",IDC_BROWSE,335,5,40,15\r
+    LTEXT           "heksedit.rc:762",IDC_HEXSTAT,5,15,40,8\r
+    EDITTEXT        IDC_HEX,5,25,370,12,ES_AUTOHSCROLL\r
+    GROUPBOX        "heksedit.rc:764",IDC_STATIC,5,38,100,25\r
+    CONTROL         "heksedit.rc:765",IDC_EQ,"Button",BS_AUTORADIOBUTTON | BS_LEFT | \r
+                    BS_VCENTER | WS_GROUP,10,48,20,10\r
+    CONTROL         "heksedit.rc:767",IDC_OR,"Button",BS_AUTORADIOBUTTON | BS_LEFT | \r
+                    BS_VCENTER,30,48,21,10\r
+    CONTROL         "heksedit.rc:769",IDC_AND,"Button",BS_AUTORADIOBUTTON | BS_LEFT | \r
+                    BS_VCENTER,50,48,24,10\r
+    CONTROL         "heksedit.rc:771",IDC_XOR,"Button",BS_AUTORADIOBUTTON | BS_LEFT | \r
+                    BS_VCENTER,75,48,24,10\r
+    DEFPUSHBUTTON   "heksedit.rc:773",IDOK,165,45,50,15,WS_GROUP\r
+    PUSHBUTTON      "heksedit.rc:774",IDCANCEL,250,45,50,15\r
+    LTEXT           "heksedit.rc:775",IDC_STATIC,5,65,13,8\r
+    LTEXT           "heksedit.rc:776",IDC_STATIC,5,73,54,8\r
+    EDITTEXT        IDC_STS,5,84,55,12,ES_AUTOHSCROLL | ES_READONLY\r
+    LTEXT           "heksedit.rc:778",IDC_STATIC,65,73,52,8\r
+    EDITTEXT        IDC_ES,65,84,55,12,ES_AUTOHSCROLL | ES_READONLY\r
+    LTEXT           "heksedit.rc:780",IDC_STATIC,125,73,52,8\r
+    EDITTEXT        IDC_SS,125,84,55,12,ES_AUTOHSCROLL | ES_READONLY\r
+    LTEXT           "heksedit.rc:782",IDC_STATIC,185,\r
+                    65,60,18\r
+    EDITTEXT        IDC_SI,185,84,55,12,ES_AUTOHSCROLL | ES_READONLY\r
+    CTEXT           "heksedit.rc:785",IDC_STATIC,255,65,50,\r
+                    15\r
+    EDITTEXT        IDC_IFS,245,84,75,12,ES_AUTOHSCROLL | ES_READONLY\r
+    LTEXT           "heksedit.rc:788",IDC_STATIC,330,73,35,8\r
+    EDITTEXT        IDC_R,325,84,50,12,ES_AUTOHSCROLL | ES_READONLY\r
+END\r
+\r
+IDD_CHANGEINST DIALOGEX 0, 0, 247, 76\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:794"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:797",IDC_STATIC,5,5,105,\r
+                    15,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_EDIT1,150,5,25,15,ES_AUTOHSCROLL\r
+    CONTROL         "heksedit.rc:800",IDC_LINST,"msctls_updown32",UDS_SETBUDDYINT | \r
+                    UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,175,5,11,\r
+                    15\r
+    LTEXT           "heksedit.rc:803",\r
+                    IDC_STATIC,5,25,144,15,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_EDIT0,150,25,25,15,ES_AUTOHSCROLL\r
+    CONTROL         "heksedit.rc:806",IDC_SINST,"msctls_updown32",UDS_SETBUDDYINT | \r
+                    UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,175,25,\r
+                    11,15\r
+    DEFPUSHBUTTON   "heksedit.rc:809",IDOK,190,5,50,15\r
+    PUSHBUTTON      "heksedit.rc:810",IDCANCEL,190,25,50,15\r
+    LTEXT           "heksedit.rc:811",\r
+                    IDC_STATIC,5,45,235,25\r
+END\r
+\r
+IDD_ENCODE_DECODE_DIALOG DIALOGEX 0, 0, 236, 169\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:817"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:820",IDC_STATIC,4,4,172,8\r
+    LISTBOX         IDC_LIST1,4,16,172,108,LBS_SORT | LBS_NOINTEGRALHEIGHT | \r
+                    WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "heksedit.rc:823",IDC_STATIC,4,128,36,8\r
+    EDITTEXT        IDC_EDIT1,4,140,172,12,ES_AUTOHSCROLL\r
+    CONTROL         "heksedit.rc:825",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_GROUP,4,156,76,8\r
+    CONTROL         "heksedit.rc:827",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,100,156,\r
+                    76,8\r
+    DEFPUSHBUTTON   "heksedit.rc:829",IDOK,180,4,50,14,WS_GROUP\r
+    PUSHBUTTON      "heksedit.rc:830",IDCANCEL,180,20,50,14\r
+END\r
+\r
+IDD_OPEN_DRIVE_DIALOG DIALOGEX 0, 0, 236, 133\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:835"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LISTBOX         IDC_LIST1,4,4,172,124,LBS_SORT | LBS_NOINTEGRALHEIGHT | \r
+                    WS_VSCROLL | WS_TABSTOP\r
+    DEFPUSHBUTTON   "heksedit.rc:840",IDOK,180,4,50,14\r
+    PUSHBUTTON      "heksedit.rc:841",IDCANCEL,180,20,50,14\r
+END\r
+\r
+IDD_GOTO_TRACK_DIALOG DIALOGEX 0, 0, 244, 133\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | \r
+    WS_SYSMENU\r
+CAPTION "heksedit.rc:847"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:850",-1,4,4,168,12\r
+    EDITTEXT        IDC_EDIT3,4,20,172,80,ES_MULTILINE | ES_AUTOHSCROLL | \r
+                    ES_READONLY\r
+    LTEXT           "heksedit.rc:853",-1,4,104,38,8\r
+    EDITTEXT        IDC_EDIT1,4,114,100,13,ES_AUTOHSCROLL\r
+    DEFPUSHBUTTON   "heksedit.rc:855",IDOK,184,8,50,14\r
+    PUSHBUTTON      "heksedit.rc:856",IDCANCEL,184,26,50,14\r
+END\r
+\r
+IDD_SHORTCUTS DIALOGEX 0, 0, 217, 166\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:861"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:864",IDC_STATIC,5,5,86,8\r
+    CONTROL         "heksedit.rc:865",IDC_LIST,"SysListView32",LVS_REPORT | \r
+                    LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_TABSTOP,5,15,\r
+                    105,120,WS_EX_CLIENTEDGE\r
+    PUSHBUTTON      "heksedit.rc:868",\r
+                    IDC_FIND_AND_FIX,5,140,205,20,BS_CENTER | BS_VCENTER | \r
+                    BS_MULTILINE\r
+    LTEXT           "heksedit.rc:871",IDC_STATIC,115,5,55,8\r
+    PUSHBUTTON      "heksedit.rc:872",IDC_DESKTOP,115,15,40,15,BS_CENTER | \r
+                    BS_VCENTER | BS_MULTILINE\r
+    PUSHBUTTON      "heksedit.rc:874",IDC_START,160,15,50,15,BS_CENTER | \r
+                    BS_VCENTER | BS_MULTILINE\r
+    PUSHBUTTON      "heksedit.rc:876",IDC_SENDTO,115,35,40,15,BS_CENTER | \r
+                    BS_VCENTER | BS_MULTILINE\r
+    PUSHBUTTON      "heksedit.rc:878",IDC_PROGRAMS,160,35,50,15,BS_CENTER | \r
+                    BS_VCENTER | BS_MULTILINE\r
+    LTEXT           "heksedit.rc:880",IDC_STATIC,115,55,59,8\r
+    PUSHBUTTON      "heksedit.rc:881",IDC_ADD,115,65,45,20\r
+    PUSHBUTTON      "heksedit.rc:882",IDC_UPDATE,165,65,45,20,BS_CENTER | \r
+                    BS_VCENTER | BS_MULTILINE\r
+    PUSHBUTTON      "heksedit.rc:884",IDC_DELETE,115,90,45,20\r
+    PUSHBUTTON      "heksedit.rc:885",IDC_MOVE,165,90,45,20,BS_CENTER | BS_VCENTER | \r
+                    BS_MULTILINE\r
+    PUSHBUTTON      "heksedit.rc:887",IDC_RELOAD,115,115,45,20\r
+    DEFPUSHBUTTON   "heksedit.rc:888",IDCANCEL,165,115,45,20\r
+END\r
+\r
+IDD_UPGRADE DIALOGEX 0, 0, 377, 242\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:893"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:896",IDC_STATIC,5,5,36,8\r
+    CONTROL         "heksedit.rc:897",IDC_VERS,"SysListView32",LVS_REPORT | \r
+                    LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | \r
+                    WS_TABSTOP,5,15,115,80,WS_EX_CLIENTEDGE\r
+    LTEXT           "heksedit.rc:900",IDC_STATIC,125,5,40,8\r
+    CONTROL         "heksedit.rc:901",IDC_INSTS,"SysListView32",LVS_REPORT | \r
+                    LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | \r
+                    LVS_NOSORTHEADER | WS_TABSTOP,125,15,85,80,\r
+                    WS_EX_CLIENTEDGE\r
+    LTEXT           "heksedit.rc:905",IDC_STATIC,215,5,46,8\r
+    CONTROL         "heksedit.rc:906",IDC_INSTDATA,"SysListView32",LVS_REPORT | \r
+                    LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_TABSTOP,215,15,\r
+                    155,80,WS_EX_CLIENTEDGE\r
+    CONTROL         "heksedit.rc:909",IDC_LINKS,"SysListView32",LVS_REPORT | \r
+                    LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | \r
+                    WS_TABSTOP,5,100,110,90,WS_EX_CLIENTEDGE\r
+    CONTROL         "",IDC_DISPLAY,"Button",BS_OWNERDRAW | WS_DISABLED | \r
+                    WS_SYSMENU | WS_GROUP | WS_TABSTOP,120,100,115,90,\r
+                    WS_EX_DLGMODALFRAME\r
+    CONTROL         "heksedit.rc:915",IDC_MRU,"SysListView32",LVS_REPORT | \r
+                    LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | \r
+                    WS_TABSTOP,240,100,130,90,WS_EX_CLIENTEDGE\r
+    PUSHBUTTON      "heksedit.rc:918",IDC_COPY,5,195,75,15\r
+    PUSHBUTTON      "heksedit.rc:919",IDC_READ,95,195,75,15\r
+    PUSHBUTTON      "heksedit.rc:920",IDC_DELETE,185,195,75,15\r
+    DEFPUSHBUTTON   "heksedit.rc:921",IDCANCEL,275,195,75,15\r
+    CTEXT           "heksedit.rc:922",\r
+                    IDC_STATIC,45,215,270,25\r
+END\r
+\r
+IDD_MOVE_COPY DIALOGEX 0, 0, 163, 156\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:928"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:931",IDC_STATIC,5,15,97,8,\r
+                    SS_CENTERIMAGE\r
+    EDITTEXT        IDC_1STOFFSET,5,25,150,12,ES_AUTOHSCROLL | WS_GROUP\r
+    LTEXT           "heksedit.rc:934",IDC_STATIC,5,45,62,8,SS_NOTIFY | \r
+                    SS_CENTERIMAGE\r
+    CONTROL         "heksedit.rc:936",IDC_OTHEREND,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_GROUP | WS_TABSTOP,70,45,47,10\r
+    CONTROL         "heksedit.rc:938",IDC_LEN,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_TABSTOP,120,45,38,10\r
+    EDITTEXT        IDC_2NDDELIM,5,55,150,12,ES_AUTOHSCROLL | WS_GROUP\r
+    LTEXT           "heksedit.rc:941",IDC_STATIC,5,75,72,8,SS_NOTIFY | \r
+                    SS_CENTERIMAGE\r
+    LTEXT           "heksedit.rc:943",IDC_STATIC,5,85,28,8\r
+    CONTROL         "heksedit.rc:944",IDC_FORWARD,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,85,75,74,10\r
+    CONTROL         "heksedit.rc:946",IDC_FPOS,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_TABSTOP,35,85,35,10\r
+    CONTROL         "heksedit.rc:948",IDC_LPOS,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,70,85,71,10\r
+    EDITTEXT        IDC_MOVEMENT,5,96,150,12,ES_AUTOHSCROLL | WS_GROUP\r
+    LTEXT           "heksedit.rc:951",\r
+                    IDC_STATIC,5,115,150,18\r
+    DEFPUSHBUTTON   "heksedit.rc:953",IDOK,5,136,70,14\r
+    PUSHBUTTON      "heksedit.rc:954",IDCANCEL,90,136,65,14\r
+    LTEXT           "heksedit.rc:955",IDC_STATIC,5,5,34,8\r
+    CONTROL         "heksedit.rc:956",IDC_MOVE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,\r
+                    45,5,34,10\r
+    CONTROL         "heksedit.rc:958",IDC_COPY,"Button",BS_AUTORADIOBUTTON,80,5,32,10\r
+END\r
+\r
+IDD_DRAG_DROP DIALOGEX 0, 0, 202, 121\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:963"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    LTEXT           "heksedit.rc:966",-1,5,5,82,8\r
+    CONTROL         "heksedit.rc:967",IDC_LIST,"SysListView32",LVS_REPORT | \r
+                    LVS_SHOWSELALWAYS | LVS_NOCOLUMNHEADER | WS_TABSTOP,5,15,\r
+                    135,100,WS_EX_CLIENTEDGE\r
+    DEFPUSHBUTTON   "heksedit.rc:970",IDOK,145,15,50,15\r
+    PUSHBUTTON      "heksedit.rc:971",IDCANCEL,145,35,50,15\r
+    PUSHBUTTON      "heksedit.rc:972",IDC_UP,145,55,50,15\r
+    PUSHBUTTON      "heksedit.rc:973",IDC_DOWN,145,75,50,15\r
+    CONTROL         "heksedit.rc:974",IDC_MOVE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,\r
+                    145,95,34,10\r
+    CONTROL         "heksedit.rc:976",IDC_COPY,"Button",BS_AUTORADIOBUTTON,145,105,32,\r
+                    10\r
+END\r
+\r
+IDD_DRAG_DROP_OPTIONS DIALOGEX 0, 0, 312, 116\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "heksedit.rc:982"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
+BEGIN\r
+    GROUPBOX        "heksedit.rc:985",IDC_STATIC,5,0,145,75\r
+    CONTROL         "heksedit.rc:986",IDC_ENABLE_DROP,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,10,10,71,10\r
+    CONTROL         "heksedit.rc:988",IDC_ENABLE_DRAG,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,10,20,76,10\r
+    CONTROL         "heksedit.rc:990",IDC_EN_SD_DD,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,30,126,10\r
+    CONTROL         "heksedit.rc:992",IDC_EN_SD_SEL,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,40,124,10\r
+    CONTROL         "heksedit.rc:994",\r
+                    IDC_ALWAYS_CHOOSE,"Button",BS_AUTOCHECKBOX | BS_LEFT | \r
+                    BS_VCENTER | BS_MULTILINE | WS_TABSTOP,10,50,135,20\r
+    GROUPBOX        "heksedit.rc:997",IDC_STATIC,155,0,150,45\r
+    CONTROL         "heksedit.rc:998",IDC_DROP_CF_HDROP,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,165,10,132,10\r
+    CONTROL         "heksedit.rc:1000",IDC_DROP_BIN_DATA,\r
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_VCENTER | \r
+                    WS_TABSTOP,165,20,105,10\r
+    CONTROL         "heksedit.rc:1003",IDC_DROP_CF_TEXT,"Button",\r
+                    BS_AUTOCHECKBOX | BS_LEFT | BS_VCENTER | WS_TABSTOP,165,\r
+                    30,95,10\r
+    GROUPBOX        "heksedit.rc:1006",IDC_STATIC,155,45,150,65\r
+    CONTROL         "heksedit.rc:1007",IDC_DRAG_BIN_DATA,"Button",\r
+                    BS_AUTOCHECKBOX | BS_LEFT | BS_VCENTER | WS_GROUP | \r
+                    WS_TABSTOP,165,55,75,10\r
+    CONTROL         "heksedit.rc:1010",IDC_DRAG_CF_TEXT,"Button",\r
+                    BS_AUTOCHECKBOX | BS_LEFT | BS_VCENTER | WS_GROUP | \r
+                    WS_TABSTOP,165,65,76,10\r
+    CONTROL         "heksedit.rc:1013",IDC_TEXT_HEXDUMP,"Button",BS_AUTORADIOBUTTON | \r
+                    BS_LEFT | BS_VCENTER | WS_GROUP,175,75,46,10\r
+    CONTROL         "heksedit.rc:1015",IDC_TEXT_SPECIAL,"Button",\r
+                    BS_AUTORADIOBUTTON | BS_LEFT | BS_VCENTER,175,85,95,10\r
+    CONTROL         "heksedit.rc:1017",IDC_TEXT_DISPLAY,"Button",\r
+                    BS_AUTOCHECKBOX | BS_LEFT | BS_VCENTER | WS_GROUP | \r
+                    WS_TABSTOP,225,75,74,10\r
+    CONTROL         "heksedit.rc:1020",IDC_DRAG_RTF,\r
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_VCENTER | \r
+                    WS_GROUP | WS_TABSTOP,165,95,138,10\r
+    DEFPUSHBUTTON   "heksedit.rc:1023",IDOK,15,85,55,20\r
+    PUSHBUTTON      "heksedit.rc:1024",IDCANCEL,85,85,55,20\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// DESIGNINFO\r
+//\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+GUIDELINES DESIGNINFO \r
+BEGIN\r
+    IDD_GOTODIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 237\r
+        TOPMARGIN, 10\r
+        BOTTOMMARGIN, 59\r
+    END\r
+\r
+    IDD_FINDDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 272\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 131\r
+    END\r
+\r
+    IDD_ABOUTDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 205\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 192\r
+    END\r
+\r
+    IDD_HEXDUMPDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 156\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 154\r
+    END\r
+\r
+    IDD_DECIMALDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 197\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 104\r
+    END\r
+\r
+    IDD_PASTEDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 284\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 138\r
+    END\r
+\r
+    IDD_CUTDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 162\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 152\r
+    END\r
+\r
+    IDD_COPYDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 151\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 147\r
+    END\r
+\r
+    IDD_VIEWSETTINGSDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 221\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 160\r
+    END\r
+\r
+    IDD_APPENDDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 185\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 39\r
+    END\r
+\r
+    IDD_MANIPBITSDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 250\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 77\r
+    END\r
+\r
+    IDD_CHARACTERSETDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 165\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 74\r
+    END\r
+\r
+    IDD_CHOOSEDIFFDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 251\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 224\r
+    END\r
+\r
+    IDD_BINARYMODEDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 176\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 51\r
+    END\r
+\r
+    IDD_SELECT_BLOCK_DIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 200\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 61\r
+    END\r
+\r
+    IDD_ADDBMK_DIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 186\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 58\r
+    END\r
+\r
+    IDD_REMOVEBMK_DIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 202\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 160\r
+    END\r
+\r
+    IDD_OPEN_PARTIAL_DIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 214\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 128\r
+    END\r
+\r
+    IDD_FASTPASTE_DIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 260\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 139\r
+    END\r
+\r
+    IDD_TMPL_RESULT_DIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 297\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 168\r
+    END\r
+\r
+    IDD_REPLACEDIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 201\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 219\r
+    END\r
+\r
+    IDD_FILL_WITH, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 375\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 96\r
+    END\r
+\r
+    IDD_CHANGEINST, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 240\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 69\r
+    END\r
+\r
+    IDD_ENCODE_DECODE_DIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 229\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 162\r
+    END\r
+\r
+    IDD_OPEN_DRIVE_DIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 229\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 126\r
+    END\r
+\r
+    IDD_GOTO_TRACK_DIALOG, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 237\r
+        TOPMARGIN, 10\r
+        BOTTOMMARGIN, 126\r
+    END\r
+\r
+    IDD_MOVE_COPY, DIALOG\r
+    BEGIN\r
+        BOTTOMMARGIN, 140\r
+    END\r
+\r
+    IDD_DRAG_DROP, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 195\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 114\r
+    END\r
+\r
+    IDD_DRAG_DROP_OPTIONS, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 305\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 109\r
+    END\r
+END\r
+#endif    // APSTUDIO_INVOKED\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Bitmap\r
+//\r
+\r
+//IDB_TOOLBAR             BITMAP                  "res/Toolbar.bmp"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// String Table\r
+//\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDM_OPEN                "heksedit.rc:1281"\r
+    IDM_NEW                 "heksedit.rc:1282"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDM_SAVE                "heksedit.rc:1287"\r
+    IDM_FIND                "heksedit.rc:1288"\r
+    IDM_EDIT_COPY           "heksedit.rc:1289"\r
+    IDM_EDIT_PASTE          "heksedit.rc:1290"\r
+    IDM_HELP_TOPICS         "heksedit.rc:1291"\r
+    IDM_EDIT_CUT            "heksedit.rc:1292"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    IDM_REPLACE             "heksedit.rc:1297"\r
+END\r
+\r
+STRINGTABLE \r
+BEGIN\r
+    ID_DISK_GOTONEXTTRACK   "heksedit.rc:1302"\r
+    ID_DISK_GOTOPREVIOUSTRACK "heksedit.rc:1303"\r
+    ID_DISK_GOTOFIRSTTRACK  "heksedit.rc:1304"\r
+    ID_DISK_GOTOLASTTRACK   "heksedit.rc:1305"\r
+END\r
+\r
+#endif    // Englisch (USA) resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+\r
+#include "version.rc"\r
+en-US.pot RCDATA "en-US.pot"\r
index edf6d05..94aa2a7 100644 (file)
@@ -55,7 +55,7 @@ BOOL OpenPartiallyDlg::Apply(HWND hDlg)
                MessageBox(hDlg, "Too many bytes to load.", "Open partially", MB_ICONERROR);\r
                return FALSE;\r
        }\r
-       //int filehandle = _open(szFileName, _O_RDONLY|_O_BINARY, _S_IREAD|_S_IWRITE);\r
+       //int filehandle = _open(szFileName, _O_RDONLY|_O_BINARY);\r
        /*if (filehandle == -1)\r
        {\r
                char buf[500];\r
index 2c5d732..48d1213 100644 (file)
@@ -1,5 +1,6 @@
 #include "precomp.h"\r
 #include "pdrive95.h"\r
+#include "DllProxies.h"\r
 \r
 #define SIZE_OF_ONE_BLOCK 512\r
 #define SIZE_OF_ONE_BLOCKL 512L\r
@@ -26,16 +27,17 @@ typedef struct
 } MBR;\r
 \r
 // RAW functions\r
-LPFNResetDisk m_ResetDisk = NULL;\r
-LPFNReadPhysicalSector m_ReadPhysicalSector = NULL;\r
-LPFNWritePhysicalSector m_WritePhysicalSector = NULL;\r
-LPFNReadDiskGeometry m_ReadDiskGeometry = NULL;\r
-LPFNEI13GetDriveParameters m_EI13GetDriveParameters = NULL;\r
-LPFNEI13ReadSector m_EI13ReadSector = NULL;\r
-LPFNEI13WriteSector m_EI13WriteSector = NULL;\r
+struct RAWIO32 *P9xPhysicalDrive::RAWIO32 = 0;\r
 \r
 P9xPhysicalDrive::P9xPhysicalDrive()\r
 {\r
+       // Load the RAWIO32.DLL if not yet done\r
+       if (RAWIO32 == 0 && (RAWIO32 = ::RAWIO32) == 0)\r
+       {\r
+               TCHAR buf[1024];\r
+               ::RAWIO32.Proxy.FormatMessage(buf);\r
+               ::MessageBox(::GetActiveWindow(), buf, 0, MB_ICONSTOP);\r
+       }\r
        m_hDevice = 0;\r
 }\r
 \r
@@ -114,30 +116,9 @@ BOOL P9xPhysicalDrive::ReadPartitionInfoRecursive(DWORD dwSector,INT64 TotalOffs
 BOOL P9xPhysicalDrive::Open( int iDrive )\r
 {\r
        Close();\r
-       if( m_ResetDisk == NULL )\r
-       {\r
-               HINSTANCE hLibrary = (HINSTANCE)LoadLibrary( "RAWIO32.DLL" );\r
-               if( !hLibrary )\r
-               {\r
-                       printf("ERROR %s, unable to load RAWIO32.DLL.\n", (LPCSTR) GetLastErrorString() );\r
-                       return FALSE;\r
-               }\r
-\r
-       #define GETPROC(__NAME__) \\r
-               m_##__NAME__ = (LPFN##__NAME__) GetProcAddress(hLibrary,#__NAME__); \\r
-               if( !m_##__NAME__ ) { \\r
-                       printf("ERROR, missing export " #__NAME__ " IN DISKIO32.DLL\n" ); \\r
-                       return FALSE; \\r
-               }\r
-\r
-               GETPROC( ResetDisk )\r
-               GETPROC( ReadPhysicalSector )\r
-               GETPROC( WritePhysicalSector )\r
-               GETPROC( ReadDiskGeometry )\r
-               GETPROC( EI13GetDriveParameters )\r
-               GETPROC( EI13ReadSector )\r
-               GETPROC( EI13WriteSector )\r
-       }\r
+       // Cannot open if RAWIO32.DLL is not in place\r
+       if (RAWIO32 == 0)\r
+               return FALSE;\r
 \r
        TRACE("About to get geometry\n");\r
        m_bDriveNumber = (BYTE)(128 + iDrive);\r
@@ -186,7 +167,7 @@ BOOL P9xPhysicalDrive::GetDriveGeometry( DISK_GEOMETRY* lpDG )
        ZeroMemory(&edi,sizeof(edi));\r
        edi.drive = m_bDriveNumber;\r
 \r
-       if( m_EI13GetDriveParameters(&edi) > 0 )\r
+       if (RAWIO32->EI13GetDriveParameters(&edi) > 0)\r
        {\r
                lpDG->Cylinders.QuadPart = *(INT64*)&(edi.sectorsLo);\r
                lpDG->TracksPerCylinder = 1; //edi.heads;\r
@@ -198,7 +179,7 @@ BOOL P9xPhysicalDrive::GetDriveGeometry( DISK_GEOMETRY* lpDG )
        ZeroMemory(&si,sizeof(si));\r
        si.bDrive = m_bDriveNumber;\r
 \r
-       if( m_ReadDiskGeometry(&si) > 0 )\r
+       if (RAWIO32->ReadDiskGeometry(&si) > 0)\r
        {\r
                lpDG->Cylinders.QuadPart = si.wCylinder;\r
                lpDG->TracksPerCylinder = si.bHead;\r
@@ -215,7 +196,7 @@ BOOL P9xPhysicalDrive::ReadAbsolute( LPBYTE lpbMemory, DWORD dwSize, INT64 Secto
        *((INT64*)&(bi.scheiss[0])) = Sector;\r
        bi.count = (WORD) (dwSize / SIZE_OF_ONE_BLOCK);\r
 \r
-       if( m_EI13ReadSector (&bi, lpbMemory, dwSize) > 0 )\r
+       if (RAWIO32->EI13ReadSector(&bi, lpbMemory, dwSize) > 0)\r
                return TRUE;\r
 \r
 /* ***** NOT SUPPORTED *******\r
@@ -235,36 +216,32 @@ struct SectorInfo
        return FALSE;\r
 }\r
 \r
-BOOL P9xPhysicalDrive::GetDriveGeometryEx( DISK_GEOMETRY_EX* lpDG, DWORD dwSize )\r
+BOOL P9xPhysicalDrive::GetDriveGeometryEx(DISK_GEOMETRY_EX *, DWORD)\r
 {\r
-       UNREFERENCED_PARAMETER( lpDG );\r
-       UNREFERENCED_PARAMETER( dwSize );\r
        return FALSE;\r
 }\r
 \r
-BOOL P9xPhysicalDrive::GetDriveLayoutEx( LPBYTE lpbMemory, DWORD dwSize )\r
+BOOL P9xPhysicalDrive::GetDriveLayoutEx(LPBYTE, DWORD)\r
 {\r
-       UNREFERENCED_PARAMETER( lpbMemory );\r
-       UNREFERENCED_PARAMETER( dwSize );\r
        return FALSE;\r
 }\r
 \r
 BOOL P9xPhysicalDrive::GetDriveLayout( LPBYTE lpbMemory, DWORD dwSize )\r
 {\r
-       DWORD dwBytesRequired = sizeof(DRIVE_LAYOUT_INFORMATION) + sizeof(PARTITION_INFORMATION)*(m_PartitionInfo.m_lCount-1);\r
+       DWORD dwBytesRequired = sizeof(DRIVE_LAYOUT_INFORMATION) + sizeof(PARTITION_INFORMATION) * (m_PartitionInfo.Count - 1);\r
 \r
-       if( dwSize < dwBytesRequired )\r
+       if (dwSize < dwBytesRequired)\r
                return FALSE;\r
 \r
        PDRIVE_LAYOUT_INFORMATION pli = (PDRIVE_LAYOUT_INFORMATION) lpbMemory;\r
-       pli->PartitionCount = m_PartitionInfo.m_lCount;\r
+       pli->PartitionCount = m_PartitionInfo.Count;\r
        pli->Signature = 0;\r
        int index = 0;\r
-       ENUMERATE( &m_PartitionInfo, P9xPartitionInfo, pI )\r
+       LIST_ENTRY *Flink = &m_PartitionInfo;\r
+       while ((Flink = Flink->Flink) != &m_PartitionInfo)\r
        {\r
-               pli->PartitionEntry[index++] = pI->m_pi;\r
+               P9xPartitionInfo *pi = static_cast<P9xPartitionInfo *>(Flink);\r
+               pli->PartitionEntry[index++] = pi->m_pi;\r
        }\r
        return TRUE;\r
 }\r
-\r
-\r
index b02e9b9..4a01120 100644 (file)
@@ -11,32 +11,34 @@ http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
 \r
 class P9xPartitionInfo : public PNode\r
 {\r
-       public:\r
-               P9xPartitionInfo(PARTITION_INFORMATION* pi):m_pi(*pi){}\r
+public:\r
+       P9xPartitionInfo(PARTITION_INFORMATION* pi):m_pi(*pi){}\r
 \r
-               PARTITION_INFORMATION m_pi;\r
+       PARTITION_INFORMATION m_pi;\r
 };\r
 \r
 class P9xPhysicalDrive : public IPhysicalDrive\r
 {\r
-       public:\r
-               P9xPhysicalDrive();\r
-               virtual ~P9xPhysicalDrive();\r
-\r
-               //Path must look like this: "\\.\PhysicalDrive0" (of course, \ maps to \\, and \\ to \\\\)\r
-               BOOL Open( int iDrive );\r
-               void Close();\r
-               BOOL GetDriveGeometry( DISK_GEOMETRY* lpDG );\r
-               BOOL GetDriveGeometryEx( DISK_GEOMETRY_EX* lpDG, DWORD dwSize );\r
-               BOOL GetDriveLayout( LPBYTE lpbMemory, DWORD dwSize );\r
-               BOOL GetDriveLayoutEx( LPBYTE lpbMemory, DWORD dwSize );\r
-               BOOL ReadAbsolute( LPBYTE lpbMemory, DWORD dwSize, INT64 Sector );\r
-               BOOL IsOpen();\r
-               BOOL ReadPartitionInfoRecursive(DWORD dwSector,INT64 TotalOffset,int depth = 0);\r
-\r
-               HANDLE m_hDevice;\r
-               BYTE m_bDriveNumber;\r
-               PList m_PartitionInfo;\r
+public:\r
+       P9xPhysicalDrive();\r
+       virtual ~P9xPhysicalDrive();\r
+\r
+       //Path must look like this: "\\.\PhysicalDrive0" (of course, \ maps to \\, and \\ to \\\\)\r
+       BOOL Open( int iDrive );\r
+       void Close();\r
+       BOOL GetDriveGeometry( DISK_GEOMETRY* lpDG );\r
+       BOOL GetDriveGeometryEx( DISK_GEOMETRY_EX* lpDG, DWORD dwSize );\r
+       BOOL GetDriveLayout( LPBYTE lpbMemory, DWORD dwSize );\r
+       BOOL GetDriveLayoutEx( LPBYTE lpbMemory, DWORD dwSize );\r
+       BOOL ReadAbsolute( LPBYTE lpbMemory, DWORD dwSize, INT64 Sector );\r
+       BOOL IsOpen();\r
+       BOOL ReadPartitionInfoRecursive(DWORD dwSector,INT64 TotalOffset,int depth = 0);\r
+\r
+       HANDLE m_hDevice;\r
+       BYTE m_bDriveNumber;\r
+       PList m_PartitionInfo;\r
+private:\r
+       static struct RAWIO32 *RAWIO32;\r
 };\r
 \r
 #endif // PDrive95_h\r
index 48eeb8a..ff5411d 100644 (file)
@@ -1,7 +1,6 @@
 #include "precomp.h"\r
 #include "physicaldrive.h"\r
 #include "PDriveNT.h"\r
-#include <assert.h>\r
 \r
 BOOL PNtPhysicalDrive::GetDriveLayout( LPBYTE lpbMemory, DWORD dwSize )\r
 {\r
index 8b197ab..8eb503b 100644 (file)
@@ -1,6 +1,5 @@
 #include "precomp.h"\r
 #include "physicaldrive.h"\r
-#include <assert.h>\r
 #include "pdrive95.h"\r
 #include "pdrivent.h"\r
 \r
@@ -21,26 +20,26 @@ IPhysicalDrive *CreatePhysicalDriveInstance()
        return 0;\r
 }\r
 \r
-PString PartitionInfo::GetNameAsString()\r
+LPTSTR PartitionInfo::GetNameAsString(LPTSTR szFormat)\r
 {\r
-       CHAR szFormat[80];\r
-\r
-       if( m_bIsPartition )\r
-               sprintf( szFormat, "Drive %d, Partition %d (%s)", (m_dwDrive+1), (m_dwPartition+1), (LPCSTR) GetSizeAsString() );\r
+       if (m_bIsPartition)\r
+               _stprintf(szFormat, _T("Drive %d, Partition %d (%s)"), m_dwDrive + 1, m_dwPartition + 1, GetSizeAsString());\r
        else\r
-               sprintf( szFormat, "Drive %d (%s)", (m_dwDrive+1), (LPCSTR) GetSizeAsString() );\r
-       return PString(szFormat);\r
+               _stprintf(szFormat, _T("Drive %d (%s)"), m_dwDrive + 1, GetSizeAsString());\r
+       return szFormat;\r
 }\r
 \r
-PString PartitionInfo::GetSizeAsString()\r
+LPTSTR PartitionInfo::GetSizeAsString(LPTSTR szFormat)\r
 {\r
        double SizeInMB = (double) m_PartitionLength;\r
        SizeInMB /= (1000*1000);\r
        double SizeInGB = SizeInMB;\r
        SizeInGB /= (1000);\r
-       if( SizeInGB > 1.0 )\r
-               return PString( 0, "%.2f GB", SizeInGB );\r
-       return PString( 0, "%.2f MB", SizeInMB );\r
+       if( SizeInGB >= 1.0 )\r
+               _stprintf(szFormat, _T("%.2f GB"), SizeInGB);\r
+       else\r
+               _stprintf(szFormat, _T("%.2f MB"), SizeInMB);\r
+       return szFormat;\r
 }\r
 \r
 void IPhysicalDrive::GetPartitionInfo(PList* lpList)\r
index 0672597..72b6838 100644 (file)
@@ -15,8 +15,8 @@ public:
        INT64 m_StartingSector;\r
        INT64 m_PartitionLength;\r
 \r
-       PString GetNameAsString();\r
-       PString GetSizeAsString();\r
+       LPTSTR GetNameAsString(LPTSTR = PString<80>());\r
+       LPTSTR GetSizeAsString(LPTSTR = PString<80>());\r
 };\r
 \r
 \r
diff --git a/Externals/heksedit/PreLink.bat b/Externals/heksedit/PreLink.bat
new file mode 100644 (file)
index 0000000..5e1d2a5
--- /dev/null
@@ -0,0 +1,12 @@
+cd\r
+echo %0\r
+echo $(IntDir) = %1\r
+echo $(TargetPath) = %2\r
+cd Languages\r
+cscript CreateMasterPotFile.vbs\r
+cscript UpdatePoFilesFromPotFile.vbs\r
+cd ..\r
+rc /fo%1\lang.res /i.. Languages\heksedit.rc\r
+mkdir %2\..\heksedit.lng\r
+link /DLL /NOENTRY /MACHINE:IX86 /OUT:%2\..\heksedit.lng\heksedit.lng %1\lang.res\r
+copy Languages\*.po %2\..\heksedit.lng\r
index 4bbb062..2acc54b 100644 (file)
@@ -1,5 +1,4 @@
 #include "precomp.h"\r
-#include <shlwapi.h>\r
 #include "shtools.h"\r
 #include "resource.h"\r
 #include "hexwnd.h"\r
index 3635f12..3d5a9f0 100644 (file)
@@ -5,7 +5,7 @@
 #include "simparr.h"\r
 \r
 //-------------------------------------------------------------------\r
-int SimpleString::AppendString( char* ps )\r
+int SimpleString::AppendString( const char* ps )\r
 {\r
        if( m_nUpperBound == -1 )\r
                return SetToString( ps );\r
@@ -17,28 +17,28 @@ int SimpleString::AppendString( char* ps )
 }\r
 \r
 //-------------------------------------------------------------------\r
-int SimpleString::SetToString( char* ps )\r
+int SimpleString::SetToString( const char* ps )\r
 {\r
        Clear();\r
        return AppendString( ps );\r
 }\r
 \r
 //-------------------------------------------------------------------\r
-char* SimpleString::operator=( char* ps )\r
+SimpleString& SimpleString::operator=( const char* ps )\r
 {\r
        SetToString( ps );\r
-       return ps;\r
+       return *this;\r
 }\r
 \r
 //-------------------------------------------------------------------\r
-SimpleString& SimpleString::operator=( SimpleString str )\r
+SimpleString& SimpleString::operator=( const SimpleString &str )\r
 {\r
        SetToString( &str[0] );\r
        return *this;\r
 }\r
 \r
 //-------------------------------------------------------------------\r
-char* SimpleString::operator+=( char* ps )\r
+SimpleString& SimpleString::operator+=( const char* ps )\r
 {\r
        if( m_nUpperBound == -1 )\r
                SetToString( ps );\r
@@ -46,7 +46,7 @@ char* SimpleString::operator+=( char* ps )
        {\r
                InsertAtGrow( m_nUpperBound, ps, 0, strlen( ps ) );\r
        }\r
-       return ps;\r
+       return *this;\r
 }\r
 \r
 //-------------------------------------------------------------------\r
@@ -67,7 +67,7 @@ SimpleString::SimpleString()
 }\r
 \r
 //-------------------------------------------------------------------\r
-SimpleString::SimpleString( char* ps )\r
+SimpleString::SimpleString( const char* ps )\r
 {\r
        // Create a SimpleString from a normal char array-string.\r
        m_nGrowBy = 64;\r
@@ -83,7 +83,7 @@ void SimpleString::Clear()
 }\r
 \r
 //-------------------------------------------------------------------\r
-SimpleString SimpleString::operator+( SimpleString& str1 )\r
+SimpleString SimpleString::operator+( const SimpleString& str1 )\r
 {\r
        SimpleString t1;\r
        t1.SetToString( m_pT );\r
@@ -98,7 +98,7 @@ int SimpleString::IsEmpty()
 }\r
 \r
 //-------------------------------------------------------------------\r
-SimpleString operator+( SimpleString ps1, char* ps2 )\r
+SimpleString operator+( const SimpleString &ps1, const char* ps2 )\r
 {\r
        SimpleString s1;\r
        s1 += ps1;\r
@@ -107,7 +107,7 @@ SimpleString operator+( SimpleString ps1, char* ps2 )
 }\r
 \r
 //-------------------------------------------------------------------\r
-SimpleString operator+( char* ps1, SimpleString ps2 )\r
+SimpleString operator+( const char* ps1, const SimpleString &ps2 )\r
 {\r
        SimpleString s1;\r
        s1 += ps1;\r
index 6816b67..a11e44c 100644 (file)
@@ -20,16 +20,20 @@ public:
        {\r
                return m_pT;\r
        }\r
+       operator const T*() const\r
+       {\r
+               return m_pT;\r
+       }\r
        int InsertAt(int nIndex, T argT, int nCount = 1);\r
-       void InsertAtRef(int nIndex, T& argT, int nCount = 1);\r
+       void InsertAtRef(int nIndex, const T& argT, int nCount = 1);\r
        int InsertAtGrow(int nIndex, T argT, int nCount = 1);\r
-       void InsertAtGrowRef(int nIndex, T& argT, int nCount = 1);\r
-       int InsertAtGrow (int nIndex, T* pT, int nSrcIndex, int nCount);\r
+       void InsertAtGrowRef(int nIndex, const T& argT, int nCount = 1);\r
+       int InsertAtGrow (int nIndex, const T* pT, int nSrcIndex, int nCount);\r
        int RemoveAt(int nIndex, int nCount = 1);\r
        void SetAtGrow(int nIndex, T argT);\r
-       int SetAtGrowRef(int nIndex, T& argT);\r
+       int SetAtGrowRef(int nIndex, const T& argT);\r
        void SetAt(int nIndex, T argT);\r
-       void SetAtRef(int nIndex, T& argT);\r
+       void SetAtRef(int nIndex, const T& argT);\r
        T GetAt(int nIndex);\r
        T& GetRefAt(int nIndex);\r
        int GetSize();\r
@@ -41,11 +45,11 @@ public:
        T& operator[](int nIndex) {return m_pT[nIndex];}\r
        SimpleArray<T>& operator=(SimpleArray<T>& spa);\r
        void ClearAll();\r
-       int blContainsRef(T& argT);\r
+       int blContainsRef(const T& argT);\r
        int blContains(T argT);\r
        int nContainsAt(T argT);\r
        int blIsEmpty();\r
-       void AppendRef(T& argT);\r
+       void AppendRef(const T& argT);\r
        void Append(T argT);\r
        void Exchange(int nIndex1, int nIndex2);\r
        int blCompare(SimpleArray<T>& spa);\r
@@ -55,8 +59,8 @@ public:
        void SetUpperBound(int upbnd);\r
        int AppendArray( T* pSrc, int srclen );\r
        int ExpandToSize();\r
-       int CopyFrom( int index, T* pSrc, int srclen );\r
-       int Replace( int ToReplaceIndex, int ToReplaceLength, T* pReplaceWith, int ReplaceWithLength );\r
+       int CopyFrom( int index, const T* pSrc, int srclen );\r
+       int Replace( int ToReplaceIndex, int ToReplaceLength, const T* pReplaceWith, int ReplaceWithLength );\r
 \r
 protected:\r
        int AddSpace (int nExtend);\r
@@ -143,7 +147,7 @@ template<class T> inline int SimpleArray<T>::InsertAtGrow(int nIndex, T argT, in
 }\r
 \r
 //-------------------------------------------------------------------\r
-template<class T> inline int SimpleArray<T>::InsertAtGrow (int nIndex, T* pT, int nSrcIndex, int nCount)\r
+template<class T> inline int SimpleArray<T>::InsertAtGrow (int nIndex, const T* pT, int nSrcIndex, int nCount)\r
 {\r
        if(nIndex<0 || nCount<1)\r
                return FALSE;\r
@@ -176,7 +180,7 @@ template<class T> inline int SimpleArray<T>::InsertAtGrow (int nIndex, T* pT, in
 }\r
 \r
 //-------------------------------------------------------------------\r
-template<class T> inline void SimpleArray<T>::InsertAtGrowRef(int nIndex, T& argT, int nCount)\r
+template<class T> inline void SimpleArray<T>::InsertAtGrowRef(int nIndex, const T& argT, int nCount)\r
 {\r
        if(nIndex<0 || nCount<1) return;\r
        int i;\r
@@ -236,7 +240,7 @@ template<class T> inline int SimpleArray<T>::InsertAt( int nIndex, T argT, int n
 }\r
 \r
 //-------------------------------------------------------------------\r
-template<class T> inline void SimpleArray<T>::InsertAtRef(int nIndex, T& argT, int nCount)\r
+template<class T> inline void SimpleArray<T>::InsertAtRef(int nIndex, const T& argT, int nCount)\r
 {\r
        if(nIndex < 0 || nIndex > m_nUpperBound)\r
                return;\r
@@ -290,7 +294,7 @@ template<class T> inline void SimpleArray<T>::SetAtGrow(int nIndex, T argT)
 }\r
 \r
 //-------------------------------------------------------------------\r
-template<class T> inline int SimpleArray<T>::SetAtGrowRef(int nIndex, T& argT)\r
+template<class T> inline int SimpleArray<T>::SetAtGrowRef(int nIndex, const T& argT)\r
 {\r
        if(nIndex < 0)\r
                return FALSE;\r
@@ -319,7 +323,7 @@ template<class T> inline void SimpleArray<T>::SetAt(int nIndex, T argT)
 }\r
 \r
 //-------------------------------------------------------------------\r
-template<class T> inline void SimpleArray<T>::SetAtRef(int nIndex, T& argT)\r
+template<class T> inline void SimpleArray<T>::SetAtRef(int nIndex, const T& argT)\r
 {\r
        if(nIndex >= 0 && nIndex < m_nSize)\r
        {\r
@@ -436,7 +440,7 @@ template<class T> inline void SimpleArray<T>::ClearAll()
 }\r
 \r
 //-------------------------------------------------------------------\r
-template<class T> inline int SimpleArray<T>::blContainsRef(T& argT)\r
+template<class T> inline int SimpleArray<T>::blContainsRef(const T& argT)\r
 {\r
        int i;\r
        for(i = 0; i <= m_nUpperBound; i++)\r
@@ -475,13 +479,14 @@ template<class T> inline SimpleArray<T>& SimpleArray<T>::operator=( SimpleArray<
                // If this array is not empty then delete it.\r
                ClearAll();\r
                // Allocate memory.\r
-               m_pT = new T[ m_nSize ];\r
+               int nSize = spa.m_nUpperBound + 1;\r
+               m_pT = new T[ nSize ];\r
                // Copy the valid elements.\r
                if( m_pT != NULL )\r
                {\r
                        // This array now is just large enough to contain the valid elements of spa.\r
                        m_nUpperBound = spa.m_nUpperBound;\r
-                       m_nSize = m_nUpperBound + 1;\r
+                       m_nSize = nSize;\r
                        // GrowBy rate is also copied.\r
                        m_nGrowBy = spa.m_nGrowBy;\r
                        int k;\r
@@ -494,7 +499,7 @@ template<class T> inline SimpleArray<T>& SimpleArray<T>::operator=( SimpleArray<
 }\r
 \r
 //-------------------------------------------------------------------\r
-template<class T> inline void SimpleArray<T>::AppendRef(T& argT)\r
+template<class T> inline void SimpleArray<T>::AppendRef(const T& argT)\r
 {\r
        SetAt(m_nUpperBound+1, argT);\r
 }\r
@@ -601,7 +606,7 @@ template<class T> inline int SimpleArray<T>::ExpandToSize()
 }\r
 \r
 //-------------------------------------------------------------------\r
-template<class T> inline int SimpleArray<T>::CopyFrom( int index, T* pSrc, int srclen )\r
+template<class T> inline int SimpleArray<T>::CopyFrom( int index, const T* pSrc, int srclen )\r
 {\r
        if( m_nSize - index >= srclen )\r
        {\r
@@ -618,7 +623,7 @@ template<class T> inline int SimpleArray<T>::CopyFrom( int index, T* pSrc, int s
 }\r
 \r
 //-------------------------------------------------------------------\r
-template<class T> inline int SimpleArray<T>::Replace( int ToReplaceIndex, int ToReplaceLength, T* pReplaceWith, int ReplaceWithLength )\r
+template<class T> inline int SimpleArray<T>::Replace( int ToReplaceIndex, int ToReplaceLength, const T* pReplaceWith, int ReplaceWithLength )\r
 {\r
        if( m_pT != NULL && ToReplaceLength > 0 )\r
        {\r
@@ -679,19 +684,19 @@ class SimpleString : public SimpleArray<char>
 {\r
 public:\r
        int IsEmpty();\r
-       SimpleString operator+( SimpleString& str1 );\r
+       SimpleString operator+( const SimpleString& str1 );\r
        SimpleString();\r
-       SimpleString( char* ps );\r
-       int AppendString( char* ps );\r
-       int SetToString( char* ps );\r
-       char* operator=( char* ps );\r
-       SimpleString& operator=( SimpleString str );\r
-       char* operator+=( char* ps );\r
+       SimpleString( const char* ps );\r
+       int AppendString( const char* ps );\r
+       int SetToString( const char* ps );\r
+       SimpleString& operator=( const char* ps );\r
+       SimpleString& operator=( const SimpleString &str );\r
+       SimpleString& operator+=( const char* ps );\r
        int StrLen();\r
        void Clear();\r
 };\r
 \r
-SimpleString operator+( SimpleString ps1, char* ps2 );\r
-SimpleString operator+( char* ps1, SimpleString ps2 );\r
+SimpleString operator+( const SimpleString &ps1, const char* ps2 );\r
+SimpleString operator+( const char* ps1, const SimpleString &ps2 );\r
 \r
 #endif // simplearr_h\r
index a423ef1..6d1ec3d 100644 (file)
@@ -1,6 +1,5 @@
 #include "precomp.h"\r
 #include "resource.h"\r
-#include <shlwapi.h>\r
 #include "regtools.h"\r
 #include "hexwnd.h"\r
 #include "hexwdlg.h"\r
@@ -20,7 +19,6 @@ BOOL UpgradeDlg::OnInitDialog(HWND hw)
 {\r
        int i;\r
        HKEY hk;\r
-       //LONG res;\r
        char subkeynam[_MAX_PATH+1];\r
        LVITEM item;\r
        ZeroMemory(&item,sizeof(LVITEM));\r
diff --git a/Externals/heksedit/VersionData.h b/Externals/heksedit/VersionData.h
new file mode 100644 (file)
index 0000000..db40cfb
--- /dev/null
@@ -0,0 +1,57 @@
+/*/VersionData.h\r
+This code has been released into the public domain and may be used\r
+for any purposes whatsoever without acknowledgment.\r
+*/\r
+\r
+class CVersionData\r
+{\r
+private:\r
+       // Disallow construction\r
+       CVersionData();\r
+public:\r
+       WORD   wLength;\r
+       WORD   wValueLength;\r
+       WORD   wType;\r
+       WCHAR  szKey[1];\r
+       const WCHAR *Data() const\r
+       {\r
+               if (this)\r
+               {\r
+                       const WCHAR *p = szKey + lstrlenW(szKey) + 1;\r
+                       return (const WCHAR *)((UINT_PTR) p + 3U & ~3U);\r
+               }\r
+               return 0;\r
+       }\r
+       const CVersionData *First() const\r
+       {\r
+               if (this)\r
+               {\r
+                       return (const CVersionData *)((UINT_PTR)Data() + wValueLength + 3U & ~3U);\r
+               }\r
+               return 0;\r
+       }\r
+       const CVersionData *Next() const\r
+       {\r
+               if (this)\r
+               {\r
+                       return (const CVersionData *)((UINT_PTR)this + wLength + 3U & ~3U);\r
+               }\r
+               return 0;\r
+       }\r
+       const CVersionData *Find(LPCWSTR szKey) const\r
+       {\r
+               const CVersionData *p = First();\r
+               while (p < Next())\r
+               {\r
+                       if (szKey == 0 || StrCmpW(szKey, p->szKey) == 0)\r
+                               return p;\r
+                       p = p->Next();\r
+               }\r
+               return 0;\r
+       }\r
+       static const CVersionData *Load(HMODULE hModule = 0, LPCTSTR lpszRes = MAKEINTRESOURCE(VS_VERSION_INFO))\r
+       {\r
+               HRSRC hRes = FindResource(hModule, lpszRes, RT_VERSION);\r
+               return (const CVersionData *)LoadResource(hModule, hRes);\r
+       }\r
+};\r
index 125e2cd..efec120 100644 (file)
@@ -6,9 +6,18 @@
 #include "hexwnd.h"\r
 \r
 HINSTANCE hMainInstance;\r
-LRESULT CALLBACK HexWndProc (HWND, UINT, WPARAM, LPARAM);\r
+LRESULT CALLBACK HexWndProc(HWND, UINT, WPARAM, LPARAM);\r
+\r
+static const char szHexClassA[] = "hekseditA_"\r
+       SHARPEN(A,FRHED_MAJOR_VERSION) "."\r
+       SHARPEN(A,FRHED_MINOR_VERSION) "."\r
+       SHARPEN(A,FRHED_SUB_RELEASE_NO);\r
+\r
+static const WCHAR szHexClassW[] = L"hekseditW_"\r
+       SHARPEN(W,FRHED_MAJOR_VERSION) L"."\r
+       SHARPEN(W,FRHED_MINOR_VERSION) L"."\r
+       SHARPEN(W,FRHED_SUB_RELEASE_NO);\r
 \r
-static const char szHexClass[] = "frhed hexclass";\r
 //--------------------------------------------------------------------------------------------\r
 // WinMain: the starting point.\r
 BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)\r
@@ -16,15 +25,21 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)
        if (dwReason == DLL_PROCESS_ATTACH)\r
        {\r
                hMainInstance = hInstance;\r
-               WNDCLASSEX wndclass;\r
-               Zero(wndclass);\r
-               wndclass.cbSize = sizeof(wndclass);\r
-               wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS;\r
-               wndclass.lpfnWndProc = HexWndProc;\r
-               wndclass.hInstance = hInstance;\r
-               wndclass.hCursor = 0;\r
-               wndclass.lpszClassName = szHexClass;\r
-               RegisterClassEx(&wndclass);\r
+               union\r
+               {\r
+                       WNDCLASSEXA a;\r
+                       WNDCLASSEXW w;\r
+               } wndclass;\r
+               ZeroMemory(&wndclass, sizeof wndclass);\r
+               wndclass.a.cbSize = sizeof wndclass;\r
+               wndclass.a.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS;\r
+               wndclass.a.lpfnWndProc = HexWndProc;\r
+               wndclass.a.hInstance = hInstance;\r
+               wndclass.a.hCursor = 0;\r
+               wndclass.a.lpszClassName = szHexClassA;\r
+               RegisterClassExA(&wndclass.a);\r
+               wndclass.w.lpszClassName = szHexClassW;\r
+               RegisterClassExW(&wndclass.w);\r
                return TRUE;\r
        }\r
        return FALSE;\r
@@ -36,7 +51,7 @@ LRESULT CALLBACK HexWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
        if (iMsg == WM_NCCREATE)\r
                SetWindowLong(hwnd, GWL_USERDATA, (LONG)new HexEditorWindow);\r
        HexEditorWindow *pHexWnd = (HexEditorWindow *)GetWindowLong(hwnd, GWL_USERDATA);\r
-       LRESULT lResult = pHexWnd->OnWndMsg( hwnd, iMsg, wParam, lParam );\r
+       LRESULT lResult = pHexWnd->OnWndMsg(hwnd, iMsg, wParam, lParam);\r
        if (iMsg == WM_NCDESTROY)\r
                delete pHexWnd;\r
        return lResult;\r
index 85934d5..3e1ef7a 100644 (file)
@@ -111,15 +111,7 @@ SOURCE=.\toolbar.cpp
 # PROP Default_Filter "h;hpp;hxx;hm;inl"\r
 # Begin Source File\r
 \r
-SOURCE=.\BinTrans.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\gktools.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\gtools.h\r
+SOURCE=.\heksedit.h\r
 # End Source File\r
 # Begin Source File\r
 \r
@@ -127,50 +119,10 @@ SOURCE=.\hexwnd.h
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=.\ido.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\ids.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\idt.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\ntdiskspec.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\PDrive95.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\PDriveNT.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\PhysicalDrive.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\PMemoryBlock.h\r
-# End Source File\r
-# Begin Source File\r
-\r
 SOURCE=.\precomp.h\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\RAWIO32\RAWIO32.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\Simparr.h\r
-# End Source File\r
-# Begin Source File\r
-\r
 SOURCE=.\toolbar.h\r
 # End Source File\r
 # Begin Source File\r
@@ -187,32 +139,12 @@ SOURCE=.\frhed.rc
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=.\icon1.ico\r
+SOURCE=.\res\icon1.ico\r
 # End Source File\r
 # Begin Source File\r
 \r
 SOURCE=.\resource.h\r
 # End Source File\r
 # End Group\r
-# Begin Group "Text Files"\r
-\r
-# PROP Default_Filter "txt"\r
-# Begin Source File\r
-\r
-SOURCE=.\Bugs.txt\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\History.txt\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\Readme.txt\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\Todo.txt\r
-# End Source File\r
-# End Group\r
 # End Target\r
 # End Project\r
index cda6f20..8efdee4 100644 (file)
 #undef APSTUDIO_READONLY_SYMBOLS\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
-// Deutsch (Deutschland) resources\r
+// Englisch (USA) resources\r
 \r
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
 #ifdef _WIN32\r
-LANGUAGE LANG_GERMAN, SUBLANG_GERMAN\r
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
 #pragma code_page(1252)\r
 #endif //_WIN32\r
 \r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Menu\r
-//\r
-\r
 #ifdef APSTUDIO_INVOKED\r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
@@ -45,57 +40,12 @@ END
 \r
 3 TEXTINCLUDE DISCARDABLE \r
 BEGIN\r
-    "\r\n"\r
+    "#include ""version.rc""\r\n"\r
     "\0"\r
 END\r
 \r
 #endif    // APSTUDIO_INVOKED\r
 \r
-#ifndef _MAC\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Version\r
-//\r
-\r
-VS_VERSION_INFO VERSIONINFO\r
- FILEVERSION 1,0,0,0\r
- PRODUCTVERSION 1,0,0,0\r
- FILEFLAGSMASK 0x3fL\r
-#ifdef _DEBUG\r
- FILEFLAGS 0x21L\r
-#else\r
- FILEFLAGS 0x20L\r
-#endif\r
- FILEOS 0x40004L\r
- FILETYPE 0x1L\r
- FILESUBTYPE 0x0L\r
-BEGIN\r
-    BLOCK "StringFileInfo"\r
-    BEGIN\r
-        BLOCK "040704b0"\r
-        BEGIN\r
-            VALUE "Comments", "Homepage: http://www.kibria.de, http://zip.to/pabs3\0"\r
-            VALUE "CompanyName", "(c) Raihan Kibria 2000\0"\r
-            VALUE "FileDescription", "frhed - free hex editor 1.1.0\0"\r
-            VALUE "FileVersion", "1, 1, 0\0"\r
-            VALUE "InternalName", "frhed\0"\r
-            VALUE "LegalCopyright", "GNU General Public License v2.0\0"\r
-            VALUE "LegalTrademarks", "\0"\r
-            VALUE "OriginalFilename", "frhed.exe\0"\r
-            VALUE "PrivateBuild", "\0"\r
-            VALUE "ProductName", "frhed\0"\r
-            VALUE "ProductVersion", "1, 1, 0\0"\r
-            VALUE "SpecialBuild", "\0"\r
-        END\r
-    END\r
-    BLOCK "VarFileInfo"\r
-    BEGIN\r
-        VALUE "Translation", 0x407, 1200\r
-    END\r
-END\r
-\r
-#endif    // !_MAC\r
-\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
@@ -104,9 +54,8 @@ END
 \r
 // Icon with lowest ID value placed first to ensure application icon\r
 // remains consistent on all systems.\r
-IDI_ICON1               ICON    DISCARDABLE     "icon1.ico"\r
-\r
-#endif    // Deutsch (Deutschland) resources\r
+IDI_ICON1               ICON    DISCARDABLE     "res/icon1.ico"\r
+#endif    // Englisch (USA) resources\r
 /////////////////////////////////////////////////////////////////////////////\r
 \r
 \r
@@ -116,7 +65,7 @@ IDI_ICON1               ICON    DISCARDABLE     "icon1.ico"
 //\r
 // Generated from the TEXTINCLUDE 3 resource.\r
 //\r
-\r
+#include "version.rc"\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 #endif    // not APSTUDIO_INVOKED\r
index e0ff513..b52051b 100644 (file)
@@ -13,8 +13,8 @@
        <Configurations>\r
                <Configuration\r
                        Name="Release|Win32"\r
-                       OutputDirectory=".\../../Build/MergeRelease"\r
-                       IntermediateDirectory=".\../../BuildTmp/frhed/Release"\r
+                       OutputDirectory=".\..\..\Build\heksedit\$(ConfigurationName)"\r
+                       IntermediateDirectory=".\..\..\BuildTmp\frhed\$(ConfigurationName)"\r
                        ConfigurationType="1"\r
                        UseOfMFC="0"\r
                        ATLMinimizesCRunTimeLibraryUsage="FALSE">\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
+                               StringPooling="TRUE"\r
+                               ExceptionHandling="FALSE"\r
                                RuntimeLibrary="2"\r
                                UsePrecompiledHeader="3"\r
                                PrecompiledHeaderThrough="precomp.h"\r
-                               PrecompiledHeaderFile=".\../../BuildTmp/frhed/Release/frhed.pch"\r
-                               AssemblerListingLocation=".\../../BuildTmp/frhed/Release/"\r
-                               ObjectFile=".\../../BuildTmp/frhed/Release/"\r
-                               ProgramDataBaseFileName=".\../../BuildTmp/frhed/Release/"\r
+                               PrecompiledHeaderFile=".\..\..\BuildTmp\frhed\$(ConfigurationName)\frhed.pch"\r
+                               AssemblerListingLocation=".\..\..\BuildTmp\frhed\$(ConfigurationName)\"\r
+                               ObjectFile=".\..\..\BuildTmp\frhed\$(ConfigurationName)\"\r
+                               ProgramDataBaseFileName=".\..\..\BuildTmp\frhed\$(ConfigurationName)\"\r
                                BrowseInformation="1"\r
                                WarningLevel="3"\r
                                SuppressStartupBanner="TRUE"/>\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="version.lib comctl32.lib wininet.lib odbc32.lib odbccp32.lib shlwapi.lib"\r
-                               OutputFile="../../Build/heksedit/Release/frhed.exe"\r
+                               OutputFile="..\..\Build\heksedit\$(ConfigurationName)\frhed.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
-                               ProgramDatabaseFile="../../Build/heksedit/Release/frhed.pdb"\r
+                               ProgramDatabaseFile="..\..\Build\heksedit\$(ConfigurationName)\frhed.pdb"\r
                                SubSystem="2"\r
                                TargetMachine="1"/>\r
                        <Tool\r
@@ -49,7 +51,7 @@
                                MkTypLibCompatible="TRUE"\r
                                SuppressStartupBanner="TRUE"\r
                                TargetEnvironment="1"\r
-                               TypeLibraryName=".\../../Build/MergeRelease/frhed.tlb"\r
+                               TypeLibraryName=".\..\..\Build\heksedit\$(ConfigurationName)\frhed.tlb"\r
                                HeaderFileName=""/>\r
                        <Tool\r
                                Name="VCPostBuildEventTool"/>\r
@@ -74,8 +76,8 @@
                </Configuration>\r
                <Configuration\r
                        Name="Debug|Win32"\r
-                       OutputDirectory=".\../../Build/MergeDebug"\r
-                       IntermediateDirectory=".\../../BuildTmp/frhed/Debug"\r
+                       OutputDirectory=".\..\..\Build\heksedit\$(ConfigurationName)"\r
+                       IntermediateDirectory=".\..\..\BuildTmp\frhed\$(ConfigurationName)"\r
                        ConfigurationType="1"\r
                        UseOfMFC="0"\r
                        ATLMinimizesCRunTimeLibraryUsage="FALSE">\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
+                               StringPooling="TRUE"\r
+                               ExceptionHandling="FALSE"\r
                                RuntimeLibrary="3"\r
                                UsePrecompiledHeader="3"\r
                                PrecompiledHeaderThrough="precomp.h"\r
-                               PrecompiledHeaderFile=".\../../BuildTmp/frhed/Debug/frhed.pch"\r
-                               AssemblerListingLocation=".\../../BuildTmp/frhed/Debug/"\r
-                               ObjectFile=".\../../BuildTmp/frhed/Debug/"\r
-                               ProgramDataBaseFileName=".\../../BuildTmp/frhed/Debug/"\r
+                               PrecompiledHeaderFile=".\..\..\BuildTmp\frhed\$(ConfigurationName)\frhed.pch"\r
+                               AssemblerListingLocation=".\..\..\BuildTmp\frhed\$(ConfigurationName)\"\r
+                               ObjectFile=".\..\..\BuildTmp\frhed\$(ConfigurationName)\"\r
+                               ProgramDataBaseFileName=".\..\..\BuildTmp\frhed\$(ConfigurationName)\"\r
                                BrowseInformation="1"\r
                                WarningLevel="3"\r
                                SuppressStartupBanner="TRUE"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="imagehlp.lib version.lib comctl32.lib wininet.lib odbc32.lib odbccp32.lib shlwapi.lib"\r
-                               OutputFile="../../Build/heksedit/Debug/frhed.exe"\r
+                               OutputFile="..\..\Build\heksedit\$(ConfigurationName)\frhed.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                GenerateDebugInformation="TRUE"\r
-                               ProgramDatabaseFile="../../Build/heksedit/Debug/frhed.pdb"\r
+                               ProgramDatabaseFile="..\..\Build\heksedit\$(ConfigurationName)\frhed.pdb"\r
                                SubSystem="2"\r
                                TargetMachine="1"/>\r
                        <Tool\r
                                MkTypLibCompatible="TRUE"\r
                                SuppressStartupBanner="TRUE"\r
                                TargetEnvironment="1"\r
-                               TypeLibraryName=".\../../Build/MergeDebug/frhed.tlb"\r
+                               TypeLibraryName=".\..\..\Build\heksedit\$(ConfigurationName)\frhed.tlb"\r
                                HeaderFileName=""/>\r
                        <Tool\r
                                Name="VCPostBuildEventTool"/>\r
                        Name="Header Files"\r
                        Filter="h;hpp;hxx;hm;inl">\r
                        <File\r
-                               RelativePath="BinTrans.h">\r
-                       </File>\r
-                       <File\r
-                               RelativePath="gktools.h">\r
-                       </File>\r
-                       <File\r
-                               RelativePath="gtools.h">\r
-                       </File>\r
-                       <File\r
                                RelativePath="hexwnd.h">\r
                        </File>\r
                        <File\r
-                               RelativePath="ido.h">\r
-                       </File>\r
-                       <File\r
-                               RelativePath="ids.h">\r
-                       </File>\r
-                       <File\r
-                               RelativePath="idt.h">\r
-                       </File>\r
-                       <File\r
-                               RelativePath="ntdiskspec.h">\r
-                       </File>\r
-                       <File\r
-                               RelativePath="PDrive95.h">\r
-                       </File>\r
-                       <File\r
-                               RelativePath="PDriveNT.h">\r
-                       </File>\r
-                       <File\r
-                               RelativePath="PhysicalDrive.h">\r
-                       </File>\r
-                       <File\r
-                               RelativePath="PMemoryBlock.h">\r
-                       </File>\r
-                       <File\r
                                RelativePath="precomp.h">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\RAWIO32\RAWIO32.h">\r
-                       </File>\r
-                       <File\r
-                               RelativePath="Simparr.h">\r
-                       </File>\r
-                       <File\r
                                RelativePath="toolbar.h">\r
                        </File>\r
                        <File\r
                                RelativePath="resource.h">\r
                        </File>\r
                </Filter>\r
-               <Filter\r
-                       Name="Text Files"\r
-                       Filter="txt">\r
-                       <File\r
-                               RelativePath="Bugs.txt">\r
-                       </File>\r
-                       <File\r
-                               RelativePath="History.txt">\r
-                       </File>\r
-                       <File\r
-                               RelativePath="Readme.txt">\r
-                       </File>\r
-                       <File\r
-                               RelativePath="Todo.txt">\r
-                       </File>\r
-               </Filter>\r
        </Files>\r
        <Globals>\r
        </Globals>\r
index 4ef1a2c..eb1c851 100644 (file)
@@ -1,4 +1,5 @@
 #include "precomp.h"\r
+#include "DllProxies.h"\r
 #include <imagehlp.h>\r
 #include <ctype.h>\r
 #include "resource.h"\r
 \r
 static PList PartitionInfoList;\r
 \r
-typedef BOOL (__stdcall* LPFNUnMapAndLoad)( PLOADED_IMAGE LoadedImage );\r
-typedef PVOID (__stdcall* LPFNImageRvaToVa)(\r
-       IN PIMAGE_NT_HEADERS NtHeaders,\r
-       IN PVOID Base,\r
-       IN ULONG Rva,\r
-       IN OUT PIMAGE_SECTION_HEADER *LastRvaSection\r
-);\r
-\r
-typedef BOOL (__stdcall* LPFNMapAndLoad)(\r
-       PSTR ImageName,\r
-       PSTR DllPath,\r
-       PLOADED_IMAGE LoadedImage,\r
-       BOOL DotDll,\r
-       BOOL ReadOnly\r
-);\r
-\r
-LPFNMapAndLoad fMapAndLoad = 0;\r
-LPFNImageRvaToVa fImageRvaToVa = 0;\r
-LPFNUnMapAndLoad fUnMapAndLoad = 0;\r
-\r
-BOOL CanUseImagehelpDll()\r
-{\r
-       if( fUnMapAndLoad && fMapAndLoad && fImageRvaToVa )\r
-               return TRUE;\r
-\r
-       HMODULE hModule = LoadLibrary( "IMAGEHLP.DLL" );\r
-       if( hModule )\r
-       {\r
-               fMapAndLoad = (LPFNMapAndLoad) GetProcAddress( hModule, "MapAndLoad" );\r
-               fImageRvaToVa = (LPFNImageRvaToVa) GetProcAddress( hModule, "ImageRvaToVa" );\r
-               fUnMapAndLoad = (LPFNUnMapAndLoad) GetProcAddress( hModule, "UnMapAndLoad" );\r
-\r
-               return fUnMapAndLoad && fMapAndLoad && fImageRvaToVa;\r
-       }\r
-       return FALSE;\r
-}\r
-\r
-#define IRTV(x) fImageRvaToVa( li.FileHeader, li.MappedAddress, (DWORD)x, 0 )\r
-\r
 BOOL WINAPI GetDllExportNames( LPCSTR pszFilename, ULONG* lpulOffset, ULONG* lpulSize )\r
 {\r
-       if( !CanUseImagehelpDll() )\r
+       struct IMAGEHLP *IMAGEHLP = ::IMAGEHLP;\r
+       if (IMAGEHLP == 0)\r
                return FALSE;\r
 \r
        LOADED_IMAGE li;\r
-       if( !fMapAndLoad( (LPSTR) pszFilename, NULL, &li, TRUE, TRUE ) )\r
-               return FALSE;\r
-\r
-       PIMAGE_EXPORT_DIRECTORY pExpDir = (PIMAGE_EXPORT_DIRECTORY)(li.FileHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);\r
-       if( !pExpDir )\r
+       if (!IMAGEHLP->MapAndLoad((LPSTR)pszFilename, NULL, &li, TRUE, TRUE))\r
                return FALSE;\r
 \r
-       pExpDir = (PIMAGE_EXPORT_DIRECTORY)IRTV(pExpDir);\r
-       if( !pExpDir->NumberOfNames )\r
-               return FALSE;\r
-\r
-       PDWORD* pExpNames = (LPDWORD*) pExpDir->AddressOfNames;\r
-       pExpNames = (LPDWORD*)IRTV(pExpNames);\r
-       ULONG ulStart = (ULONG) IRTV(*pExpNames);\r
-       *lpulOffset = ulStart - (ULONG) li.MappedAddress;\r
-       pExpNames += pExpDir->NumberOfNames-1;\r
-       ULONG ulStop = (ULONG) IRTV(*pExpNames);\r
-       *lpulSize = ulStop - ulStart + strlen((LPCSTR)ulStop);  // hihi\r
-\r
-       fUnMapAndLoad( &li );\r
-       return TRUE;\r
+       BOOL bDone = FALSE;\r
+       if (DWORD dw = li.FileHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress)\r
+       {\r
+               PIMAGE_EXPORT_DIRECTORY pExpDir = (PIMAGE_EXPORT_DIRECTORY)\r
+                       IMAGEHLP->ImageRvaToVa(li.FileHeader, li.MappedAddress, dw, 0);\r
+               DWORD firstName = pExpDir->Name;\r
+               DWORD lastName = pExpDir->Name;\r
+               if (pExpDir->NumberOfNames)\r
+               {\r
+                       DWORD *pExpNames = (DWORD *)\r
+                               IMAGEHLP->ImageRvaToVa(li.FileHeader, li.MappedAddress, pExpDir->AddressOfNames, 0);\r
+                       pExpNames += pExpDir->NumberOfNames - 1;\r
+                       lastName = *pExpNames;\r
+               }\r
+               *lpulOffset = firstName;\r
+               char *name = (char *)\r
+                       IMAGEHLP->ImageRvaToVa(li.FileHeader, li.MappedAddress, lastName, 0);\r
+               *lpulSize = lastName + strlen(name) + 1 - firstName;\r
+               bDone = TRUE;\r
+       }\r
+       IMAGEHLP->UnMapAndLoad(&li);\r
+       return bDone;\r
 }\r
 \r
-// structures are undocumented\r
-typedef struct\r
-{\r
-       // Addr +0 = start of import declaration\r
-       // Addr +1,+2 are -1 always\r
-       // Addr +3 = virtual name-of-dll\r
-       // Addr +4 = ???\r
-       ULONG Addr[5];\r
-} IMPS0;\r
-\r
 BOOL WINAPI GetDllImportNames( LPCSTR pszFilename, ULONG* lpulOffset, ULONG* lpulSize )\r
 {\r
-       if( !CanUseImagehelpDll() )\r
+       struct IMAGEHLP *IMAGEHLP = ::IMAGEHLP;\r
+       if (IMAGEHLP == 0)\r
                return FALSE;\r
 \r
        LOADED_IMAGE li;\r
-       if( !fMapAndLoad( (LPSTR) pszFilename, NULL, &li, TRUE, TRUE ) )\r
+       if (!IMAGEHLP->MapAndLoad((LPSTR)pszFilename, NULL, &li, TRUE, TRUE))\r
                return FALSE;\r
 \r
-       PVOID pExpDir = (LPVOID)(li.FileHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);\r
-       if( !pExpDir )\r
-               return FALSE;\r
-\r
-       IMPS0* p = (IMPS0*)IRTV(pExpDir);\r
-       pExpDir = (PVOID)IRTV(p->Addr[0]);\r
-       pExpDir = (PVOID)IRTV(*(ULONG*)pExpDir);\r
-       *lpulOffset = (ULONG)pExpDir - (ULONG) li.MappedAddress;\r
-\r
-       LPBYTE lpbEnd = (LPBYTE) pExpDir;\r
-       while(!( !lpbEnd[0] && !lpbEnd[1] && !lpbEnd[2] && !lpbEnd[3] ))\r
+       BOOL bDone = FALSE;\r
+       if (DWORD dw = li.FileHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress)\r
        {\r
-               lpbEnd++;\r
+               IMAGE_IMPORT_DESCRIPTOR *pDescriptor = (IMAGE_IMPORT_DESCRIPTOR *)\r
+                       IMAGEHLP->ImageRvaToVa(li.FileHeader, li.MappedAddress, dw, 0);\r
+               DWORD lower = ULONG_MAX;\r
+               DWORD upper = 0;\r
+               while (pDescriptor->FirstThunk)\r
+               {\r
+                       if (lower > pDescriptor->Name) //OriginalFirstThunk)\r
+                               lower = pDescriptor->Name; //OriginalFirstThunk;\r
+                       char *name = (char *)\r
+                               IMAGEHLP->ImageRvaToVa(li.FileHeader, li.MappedAddress, pDescriptor->Name, 0);\r
+                       DWORD end = pDescriptor->Name + strlen(name) + 1;\r
+                       if (upper < end)\r
+                               upper = end;\r
+                       DWORD *pEntry = (DWORD *)\r
+                               IMAGEHLP->ImageRvaToVa(li.FileHeader, li.MappedAddress, pDescriptor->FirstThunk, 0);\r
+                       IMAGE_THUNK_DATA *pThunk = (IMAGE_THUNK_DATA *)\r
+                               IMAGEHLP->ImageRvaToVa(li.FileHeader, li.MappedAddress, pDescriptor->OriginalFirstThunk, 0);\r
+                       while (pThunk->u1.Function)\r
+                       {\r
+                               if ((*pEntry & 0x80000000) == 0)\r
+                               {\r
+                                       IMAGE_IMPORT_BY_NAME *pImport = (IMAGE_IMPORT_BY_NAME *)\r
+                                               IMAGEHLP->ImageRvaToVa(li.FileHeader, li.MappedAddress, *pEntry, 0);\r
+                                       DWORD end = *pEntry + sizeof(IMAGE_IMPORT_BY_NAME) + strlen((char *)pImport->Name);\r
+                                       if (lower > *pEntry)\r
+                                               lower = *pEntry;\r
+                                       if (upper < end)\r
+                                               upper = end;\r
+                               }\r
+                               ++pThunk;\r
+                               ++pEntry;\r
+                       }\r
+                       ++pDescriptor;\r
+               }\r
+               if (lower < upper)\r
+               {\r
+                       *lpulOffset = lower;\r
+                       *lpulSize = upper - lower;\r
+                       bDone = TRUE;\r
+               }\r
        }\r
-       *lpulSize = (ULONG)lpbEnd - (ULONG) pExpDir;\r
-\r
-       fUnMapAndLoad( &li );\r
-       return TRUE;\r
+       IMAGEHLP->UnMapAndLoad(&li);\r
+       return bDone;\r
 }\r
 \r
 void WINAPI XorEncoder( MEMORY_CODING* p )\r
@@ -223,7 +209,7 @@ INT_PTR OpenDriveDialog::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM)
        {\r
        case WM_INITDIALOG:\r
                {\r
-                       HWND hListbox = GetDlgItem(hDlg, IDC_LIST1);\r
+                       ShowWindow(hDlg, SW_SHOW);\r
                        if (PartitionInfoList.IsEmpty())\r
                        {\r
                                if (IPhysicalDrive *Drive = CreatePhysicalDriveInstance())\r
@@ -232,8 +218,11 @@ INT_PTR OpenDriveDialog::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM)
                                        delete Drive;\r
                                }\r
                        }\r
-                       ENUMERATE(&PartitionInfoList, PartitionInfo, pi)\r
+                       HWND hListbox = GetDlgItem(hDlg, IDC_LIST1);\r
+                       LIST_ENTRY *Flink = &PartitionInfoList;\r
+                       while ((Flink = Flink->Flink) != &PartitionInfoList)\r
                        {\r
+                               PartitionInfo *pi = static_cast<PartitionInfo *>(Flink);\r
                                int i = SendMessage(hListbox, LB_ADDSTRING, 0, (LPARAM)(LPCSTR)pi->GetNameAsString());\r
                                SendMessage(hListbox, LB_SETITEMDATA, i, (LPARAM)pi);\r
                        }\r
index 9a9f901..e95ea0f 100644 (file)
@@ -1,11 +1,8 @@
 #include "precomp.h"\r
-#include <stdarg.h>\r
-#include <ctype.h>\r
 \r
 PList::PList()\r
+: Count(0)\r
 {\r
-       m_pHead = m_pTail = 0;\r
-       m_lCount = 0;\r
 }\r
 \r
 PList::~PList()\r
@@ -13,328 +10,20 @@ PList::~PList()
        DeleteContents();\r
 }\r
 \r
-bool PList::DeleteContents()\r
+void PList::DeleteContents()\r
 {\r
-       while( m_pHead )\r
-       {\r
-               PNode* pNext = m_pHead->m_pNext;\r
-               m_pHead->m_pNext = 0;\r
-               delete m_pHead;\r
-               m_pHead = pNext;\r
-       }\r
-       m_pHead = m_pTail = 0;\r
-       m_lCount = 0;\r
-       return true;\r
-}\r
-\r
-bool PList::RemoveContents()\r
-{\r
-       while( m_pHead )\r
-       {\r
-               PNode* pNext = m_pHead->m_pNext;\r
-               m_pHead->m_pNext = m_pHead->m_pPrevious = 0;\r
-               m_pHead = pNext;\r
-       }\r
-       m_pHead = m_pTail = 0;\r
-       m_lCount = 0;\r
-       return  true;\r
-}\r
-\r
-bool PList::Contains( PNode* p )\r
-{\r
-       bool bSuccess = false;\r
-       if( p != 0 )\r
-       {\r
-               for( PNode* q = m_pHead; q; q = q->m_pNext )\r
-               {\r
-                       if( q == p )\r
-                       {\r
-                               bSuccess = true;\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-       return bSuccess;\r
-}\r
-\r
-bool PList::AddHead( PNode* p )\r
-{\r
-       p->m_pPrevious = 0;\r
-       m_lCount++;\r
-\r
-       if( !m_pHead )\r
-       {\r
-               m_pHead = m_pTail = p;\r
-               p->m_pNext = 0;\r
-       }\r
-       else\r
-       {\r
-               p->m_pNext = m_pHead;\r
-               m_pHead->m_pPrevious = p;\r
-               m_pHead = p;\r
-       }\r
-       return true;\r
-}\r
-\r
-bool PList::AddTail( PNode* p )\r
-{\r
-       if( !m_pTail )\r
-       {\r
-               m_pHead = m_pTail = p;\r
-               p->m_pNext = 0;\r
-               m_lCount = 1;\r
-       }\r
-       else\r
-       {\r
-               m_lCount++;\r
-               p->m_pNext = 0;\r
-               p->m_pPrevious = m_pTail;\r
-               m_pTail->m_pNext = p;\r
-               m_pTail = p;\r
-       }\r
-       return true;\r
-}\r
-\r
-bool PList::InsertBefore( PNode* p, PNode* q )\r
-{\r
-       if( !q )\r
-               return AddTail( p );\r
-\r
-       if( !q->m_pPrevious )\r
-               return AddHead( p );\r
-\r
-       ++m_lCount;\r
-       p->m_pPrevious = q->m_pPrevious;\r
-       p->m_pPrevious->m_pNext = p;\r
-       q->m_pPrevious = p;\r
-       p->m_pNext = q;\r
-       return true;\r
-}\r
-\r
-bool PList::InsertAfter( PNode* p, PNode* q )\r
-{\r
-       if( !q )\r
-               return AddHead( p );\r
-\r
-       if( !q->m_pNext )\r
-               return AddTail( p );\r
-\r
-       return InsertBefore( p, q->m_pNext );\r
-}\r
-\r
-void PList::Delete( PNode* p )\r
-{\r
-       Remove( p );\r
-       delete p;\r
-}\r
-\r
-void PList::Remove( PNode* p )\r
-{\r
-       m_lCount--;\r
-\r
-       if( m_pHead == p )\r
-               m_pHead = p->m_pNext;\r
-\r
-       if( m_pTail == p )\r
-               m_pTail = p->m_pPrevious;\r
-\r
-       if( p->m_pNext )\r
-               p->m_pNext->m_pPrevious = p->m_pPrevious;\r
-\r
-       if( p->m_pPrevious )\r
-               p->m_pPrevious->m_pNext = p->m_pNext;\r
-\r
-       p->m_pNext = p->m_pPrevious = 0;\r
-}\r
-\r
-bool PList::IsEmpty()\r
-{\r
-       return m_pHead ? false : true;\r
-}\r
-\r
-PNode* PList::Find( long lZeroBasedIndex )\r
-{\r
-       long lIndex = 0;\r
-       for( PNode* p = m_pHead; p; p = p->m_pNext )\r
-               if( lIndex++ == lZeroBasedIndex )\r
-                       return p;\r
-\r
-       return 0;\r
-}\r
-\r
-bool PList::Merge( PList& s )\r
-{\r
-       while( s.m_pHead )\r
-       {\r
-               PNode* pNode = s.m_pHead;\r
-               s.Remove( s.m_pHead );\r
-               AddTail( pNode );\r
-       }\r
-       return true;\r
-}\r
-\r
-//Reduce if your crap OS cannot handle tit - it ;(\r
-#define BUFFERSIZE_FOR_SPRINTF 10480\r
-\r
-PString::PString()\r
-{\r
-       m_iStringLength = 0;\r
-       m_lpszData = 0;\r
-}\r
-\r
-inline void PString::CopyStringData(const char* lpszFrom)\r
-{\r
-       if( lpszFrom )\r
-       {\r
-               m_iStringLength = strlen( lpszFrom )+1;\r
-               if( m_iStringLength < sizeof(m_szFixedBuffer) )\r
-               {\r
-                       m_lpszData = m_szFixedBuffer;\r
-                       strcpy( m_lpszData, lpszFrom );\r
-               }\r
-               else if( m_iStringLength > 0 )\r
-               {\r
-                       m_lpszData = new char[ m_iStringLength ];\r
-                       if( m_lpszData != 0 )\r
-                               strcpy( m_lpszData, lpszFrom );\r
-                       else m_iStringLength = 0;\r
-               }\r
-               else m_lpszData = 0;\r
-       }\r
-       else\r
-       {\r
-               m_lpszData = 0;\r
-               m_iStringLength = 0;\r
-       }\r
-}\r
-\r
-inline void PString::DeleteStringData()\r
-{\r
-       if( (m_lpszData != m_szFixedBuffer) && m_lpszData )\r
-               delete m_lpszData;\r
-       m_lpszData = 0;\r
-       m_iStringLength = 0;\r
+       while (Flink != this)\r
+               delete static_cast<PNode *>(Flink);\r
+       Count = 0;\r
 }\r
 \r
-\r
-void PString::Append( LPCSTR pString, DWORD dwSize )\r
+void PList::AddTail(PNode *p)\r
 {\r
-       // *NOT* optimized\r
-\r
-       DWORD dwCombinedLength = m_iStringLength + dwSize;\r
-       if( dwCombinedLength && dwSize )\r
-       {\r
-               char* lpszData = new char[ dwCombinedLength + 2 ];\r
-               if( m_lpszData && m_iStringLength )\r
-                       strcpy( lpszData, m_lpszData );\r
-               strncpy( lpszData+m_iStringLength, pString, dwSize );\r
-               lpszData[dwCombinedLength] = 0;\r
-               DeleteStringData();\r
-               CopyStringData(lpszData);\r
-               delete lpszData;\r
-\r
-       }\r
-}\r
-\r
-\r
-PString::PString( const char* lpszArgument )\r
-{\r
-       CopyStringData( lpszArgument );\r
-}\r
-\r
-PString::PString( const PString& objectSrc )\r
-{\r
-       CopyStringData( objectSrc.m_lpszData );\r
-}\r
-\r
-PString::PString( int, const char* szFormat, ... )\r
-{\r
-       if( szFormat )\r
-       {\r
-               char buffer[BUFFERSIZE_FOR_SPRINTF];\r
-               va_list argptr;\r
-               va_start( argptr, szFormat );\r
-               ::vsprintf(buffer,szFormat,argptr);\r
-               buffer[BUFFERSIZE_FOR_SPRINTF-1]=0;\r
-               CopyStringData( buffer );\r
-       }\r
-       else\r
-       {\r
-               m_iStringLength = 0;\r
-               m_lpszData = 0;\r
-       }\r
-}\r
-\r
-PString::~PString()\r
-{\r
-       DeleteStringData();\r
-}\r
-\r
-void PString::sprintf( const char* szFormat, ... )\r
-{\r
-       DeleteStringData();\r
-       m_lpszData = 0;\r
-       m_iStringLength = 0;\r
-       if( szFormat )\r
-       {\r
-               char buffer[BUFFERSIZE_FOR_SPRINTF];\r
-               va_list argptr;\r
-               va_start( argptr, szFormat );\r
-               ::vsprintf(buffer,szFormat,argptr);\r
-               buffer[BUFFERSIZE_FOR_SPRINTF-1]=0;\r
-               CopyStringData( buffer );\r
-       }\r
-}\r
-\r
-void PString::vsprintf( const char* szFormat, va_list args )\r
-{\r
-       DeleteStringData();\r
-       m_lpszData = 0;\r
-       m_iStringLength = 0;\r
-       if( szFormat )\r
-       {\r
-               char buffer[BUFFERSIZE_FOR_SPRINTF];\r
-               ::vsprintf(buffer,szFormat,args);\r
-               buffer[BUFFERSIZE_FOR_SPRINTF-1]=0;\r
-               CopyStringData( buffer );\r
-       }\r
-}\r
-\r
-PString& PString::operator=( const char* objectSrc )\r
-{\r
-       if( objectSrc != m_lpszData )\r
-       {\r
-               DeleteStringData();\r
-               CopyStringData( objectSrc );\r
-       }\r
-       return *this;\r
-}\r
-\r
-PString& PString::operator=( PString& objectSrc )\r
-{\r
-       if( this != &objectSrc )\r
-       {\r
-               DeleteStringData();\r
-               CopyStringData( objectSrc.m_lpszData );\r
-       }\r
-       return *this;\r
-}\r
-\r
-PString GetLastErrorString()\r
-{\r
-       PString strResult;\r
-       LPVOID lpMsgBuf = NULL;\r
-\r
-       if( FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,\r
-               GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ) && lpMsgBuf )\r
-       {\r
-               strResult = (LPCSTR) lpMsgBuf;\r
-               LocalFree( lpMsgBuf );\r
-               LPSTR p = strResult;\r
-               while( isspace(p[strlen(p)-1]) )\r
-                       p[strlen(p)-1] = 0;\r
-       }\r
-       return strResult;\r
+       p->Flink = Blink->Flink;\r
+       p->Blink = Blink;\r
+       Blink->Flink = p;\r
+       Blink = p;\r
+       ++Count;\r
 }\r
 \r
 void TRACE(const char* pszFormat,...)\r
index 97e43a0..228c030 100644 (file)
@@ -1,97 +1,45 @@
 #ifndef gtools_h\r
 #define gtools_h\r
 \r
-#define THIS_BASED_ADDRESS(__MEMBERVARIABLE__) \\r
-       (LPBYTE)(((LPBYTE)(&(__MEMBERVARIABLE__)))-((LPBYTE)this))\r
-\r
-#define ENUMERATE(l,c,o) for(c* o=(c*)((PList*)(l))->m_pHead;o;o=(c*)((PNode*)o)->m_pNext)\r
-#define ENUMERATE_BACKWARDS(l,c,o) for(c* o=(c*)((PList*)(l))->m_pTail;o;o=(c*)((PNode*)o)->m_pPrevious )\r
-#define ENUMERATE_POINTER(l,c,o) for(o=(c*)((PList*)(l))->m_pHead;o;o=(c*)((PNode*)o)->m_pNext)\r
-#define ENUMERATE_POINTER_BACKWARDS(l,c,o) for(o=(c*)((PList*)(l))->m_pTail;o;o=(c*)((PNode*)o)->m_pPrevious)\r
-\r
-class PNode\r
+class PNode : public LIST_ENTRY\r
 {\r
 public:\r
-       PNode(): m_pNext(0), m_pPrevious(0) { }\r
-\r
-       virtual ~PNode() { }\r
-\r
-       PNode* m_pNext;\r
-       PNode* m_pPrevious;\r
+       PNode()\r
+       {\r
+               Flink = Blink = this;\r
+       }\r
+       virtual ~PNode()\r
+       {\r
+               Blink->Flink = Flink;\r
+               Flink->Blink = Blink;\r
+       }\r
+private:\r
+       PNode(const PNode &); // disallow copy construction\r
+       void operator=(const PNode &); // disallow assignment\r
 };\r
 \r
-typedef unsigned long ULONG;\r
-\r
 class PList : public PNode\r
 {\r
 public:\r
        PList();\r
        virtual ~PList();\r
-       virtual bool DeleteContents();\r
-       virtual bool RemoveContents();\r
-       PNode* Find( long lZeroBasedIndex );\r
-       bool Contains(PNode* pNode);\r
-       bool AddHead(PNode* pNode);\r
-       bool AddTail(PNode* pNode);\r
-       void Remove(PNode* pNode);\r
-       void Delete(PNode* pNode);\r
-       bool InsertBefore(PNode *pInsert,PNode* pBeforeThis);\r
-       bool InsertAfter(PNode* pInsert, PNode* pAfterThis);\r
-       bool Swap(PNode* pNodeA,PNode* pNodeB);\r
-       bool Move(PNode* pNodeA,PNode* pNodeB);\r
-       bool IsEmpty();\r
-       bool Merge( PList& objectSource );\r
-\r
-       PNode* m_pHead;\r
-       PNode* m_pTail;\r
-       long m_lCount;\r
+       void AddTail(PNode *);\r
+       bool IsEmpty()\r
+       {\r
+               return Flink == this;\r
+       }\r
+       void DeleteContents();\r
+       long Count;\r
 };\r
 \r
-class PString : public PNode\r
+template<size_t n>\r
+class PString\r
 {\r
+       TCHAR buffer[n];\r
 public:\r
-       PString();\r
-       PString( const char* szFormat );\r
-       PString( int, const char* szFormat, ... );\r
-       PString( const PString& objectSrc );\r
-       virtual ~PString();\r
-       void sprintf( const char* szFormat, ... );\r
-       void vsprintf( const char* szFormat, va_list args );\r
-       PString& operator=( const char* objectSrc );\r
-       PString& operator=( PString& objectSrc );\r
-\r
-       void Append( LPCSTR pString, DWORD dwSize );\r
-\r
-       inline operator char*()\r
-       {\r
-               return m_lpszData;\r
-       }\r
-\r
-       /*inline operator const char*() const\r
-       {\r
-               return m_lpszData;\r
-       }*/\r
-\r
-       inline int GetLength()\r
-       {\r
-               return m_iStringLength;\r
-       }\r
-\r
-protected:\r
-       void DeleteStringData();\r
-       void CopyStringData(const char* lpszFrom);\r
-\r
-       int m_iStringLength;\r
-       char* m_lpszData;\r
-       char m_szFixedBuffer[256];\r
+       operator LPTSTR() { return buffer; }\r
 };\r
 \r
-#define IsEmptyString(x) (!(x)||!*(x))\r
-PString GetLastErrorString();\r
-\r
-\r
 void TRACE(const char* pszFormat,...);\r
 \r
-\r
 #endif // gtools_h\r
-\r
index 29adf83..8d5b179 100644 (file)
@@ -4,7 +4,7 @@
 \r
 # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
 \r
-CFG=heksedit - Win32 Release\r
+CFG=heksedit - Win32 Debug\r
 !MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE\r
 !MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl\r
 !MESSAGE \r
@@ -13,7 +13,7 @@ CFG=heksedit - Win32 Release
 !MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben\r
 !MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:\r
 !MESSAGE \r
-!MESSAGE NMAKE /f "heksedit.mak" CFG="heksedit - Win32 Release"\r
+!MESSAGE NMAKE /f "heksedit.mak" CFG="heksedit - Win32 Debug"\r
 !MESSAGE \r
 !MESSAGE Für die Konfiguration stehen zur Auswahl:\r
 !MESSAGE \r
@@ -55,6 +55,12 @@ 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:windows /dll /machine:I386\r
 # ADD LINK32 version.lib comctl32.lib wininet.lib shlwapi.lib 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:windows /dll /machine:I386\r
 # SUBTRACT LINK32 /pdb:none\r
+# Begin Special Build Tool\r
+IntDir=.\../../BuildTmp/heksedit/Release\r
+TargetPath=\svnroot2\trunk\Build\heksedit\Release\heksedit.dll\r
+SOURCE="$(InputPath)"\r
+PreLink_Cmds=PreLink.bat $(IntDir) $(TargetPath)\r
+# End Special Build Tool\r
 \r
 !ELSEIF  "$(CFG)" == "heksedit - Win32 Debug"\r
 \r
@@ -82,6 +88,12 @@ 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:windows /dll /debug /machine:I386 /pdbtype:sept\r
 # ADD LINK32 imagehlp.lib version.lib comctl32.lib wininet.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /pdbtype:sept\r
 # SUBTRACT LINK32 /nodefaultlib\r
+# Begin Special Build Tool\r
+IntDir=.\../../BuildTmp/heksedit/Debug\r
+TargetPath=\svnroot2\trunk\Build\heksedit\Debug\heksedit.dll\r
+SOURCE="$(InputPath)"\r
+PreLink_Cmds=PreLink.bat $(IntDir) $(TargetPath)\r
+# End Special Build Tool\r
 \r
 !ENDIF \r
 \r
@@ -134,6 +146,10 @@ SOURCE=.\dllmain.cpp
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=.\DllProxies.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\EnterDecimalValueDlg.cpp\r
 # End Source File\r
 # Begin Source File\r
@@ -186,6 +202,10 @@ SOURCE=.\InvokeHtmlHelp.cpp
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=.\LangArray.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\LoadHexFile.cpp\r
 # End Source File\r
 # Begin Source File\r
@@ -271,6 +291,10 @@ SOURCE=.\clipboard.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=.\DllProxies.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\gktools.h\r
 # End Source File\r
 # Begin Source File\r
@@ -307,6 +331,10 @@ SOURCE=.\idt.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=.\LangArray.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\LoadHexFile.h\r
 # End Source File\r
 # Begin Source File\r
@@ -361,6 +389,10 @@ SOURCE=.\UpgradeDlg.h
 \r
 SOURCE=.\version.h\r
 # End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\VersionData.h\r
+# End Source File\r
 # End Group\r
 # Begin Group "Resource Files"\r
 \r
index 1c8409f..2e09822 100644 (file)
@@ -1,3 +1,6 @@
+// This is frhed vCURRENT_VERSION.SUB_RELEASE_NO\r
+#include "version.h"\r
+\r
 class IHexEditorWindow\r
 {\r
 public:\r
@@ -58,4 +61,5 @@ public:
        virtual void STDMETHODCALLTYPE CMD_edit_clear() = 0;\r
        virtual BOOL STDMETHODCALLTYPE select_next_diff(BOOL bFromStart) = 0;\r
        virtual BOOL STDMETHODCALLTYPE select_prev_diff(BOOL bFromEnd) = 0;\r
+       virtual BOOL STDMETHODCALLTYPE load_lang(LANGID) = 0;\r
 };\r
index f839940..b8d4c94 100644 (file)
@@ -1,4 +1,4 @@
-//Microsoft Developer Studio generated resource script.\r
+// Microsoft Visual C++ generated resource script.\r
 //\r
 #include "resource.h"\r
 \r
 #undef APSTUDIO_READONLY_SYMBOLS\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
-// Deutsch (Deutschland) resources\r
+// English (U.S.) resources\r
 \r
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
 #ifdef _WIN32\r
-LANGUAGE LANG_GERMAN, SUBLANG_GERMAN\r
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
 #pragma code_page(1252)\r
 #endif //_WIN32\r
 \r
@@ -26,7 +26,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
 // Menu\r
 //\r
 \r
-IDR_MAINMENU MENU DISCARDABLE \r
+IDR_MAINMENU MENU \r
 BEGIN\r
     POPUP "&File"\r
     BEGIN\r
@@ -174,11 +174,11 @@ BEGIN
     BEGIN\r
         MENUITEM "&Help topics...\tF1",         IDM_HELP_TOPICS\r
         MENUITEM SEPARATOR\r
-        MENUITEM "&About heksedit...",          IDM_ABOUT\r
+        MENUITEM "&About frhed...",             IDM_ABOUT\r
     END\r
 END\r
 \r
-IDR_CONTEXTMENU MENU DISCARDABLE \r
+IDR_CONTEXTMENU MENU \r
 BEGIN\r
     POPUP "0"\r
     BEGIN\r
@@ -211,20 +211,20 @@ END
 // TEXTINCLUDE\r
 //\r
 \r
-1 TEXTINCLUDE DISCARDABLE \r
+1 TEXTINCLUDE \r
 BEGIN\r
     "resource.h\0"\r
 END\r
 \r
-2 TEXTINCLUDE DISCARDABLE \r
+2 TEXTINCLUDE \r
 BEGIN\r
     "#include ""winres.h""\r\n"\r
     "\0"\r
 END\r
 \r
-3 TEXTINCLUDE DISCARDABLE \r
+3 TEXTINCLUDE \r
 BEGIN\r
-    "\r\n"\r
+    "#include ""version.rc""\r\n"\r
     "\0"\r
 END\r
 \r
@@ -236,7 +236,7 @@ END
 // Accelerator\r
 //\r
 \r
-IDR_ACCELERATOR1 ACCELERATORS DISCARDABLE \r
+IDR_ACCELERATOR1 ACCELERATORS \r
 BEGIN\r
     "A",            IDM_SELECT_ALL,         VIRTKEY, CONTROL, NOINVERT\r
     "A",            IDM_ADOPT_COLOURS,      VIRTKEY, SHIFT, CONTROL, \r
@@ -326,10 +326,11 @@ END
 // Dialog\r
 //\r
 \r
-IDD_GOTODIALOG DIALOG DISCARDABLE  0, 0, 244, 66\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_GOTODIALOG DIALOGEX 0, 0, 244, 66\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | \r
+    WS_SYSMENU\r
 CAPTION "Go to"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Start with ""+"" or ""-"" (minus) for relative jump.",\r
                     IDC_STATIC,7,10,139,8\r
@@ -341,10 +342,11 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,187,38,50,14\r
 END\r
 \r
-IDD_FINDDIALOG DIALOG DISCARDABLE  0, 0, 279, 138\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_FINDDIALOG DIALOGEX 0, 0, 279, 138\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | \r
+    WS_SYSMENU\r
 CAPTION "Find"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Find what: (please refer to the online help's Using the Special Syntax section for searching for binary values)",\r
                     IDC_STATIC,7,7,265,16\r
@@ -362,32 +364,28 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,222,117,50,14\r
 END\r
 \r
-IDD_ABOUTDIALOG DIALOG DISCARDABLE  0, 0, 212, 229\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION\r
-CAPTION "About heksedit"\r
-FONT 8, "MS Sans Serif"\r
+IDD_ABOUTDIALOG DIALOGEX 0, 0, 212, 191\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | \r
+    WS_CAPTION\r
+CAPTION "About frhed"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
-    DEFPUSHBUTTON   "OK",IDOK,80,212,50,14\r
-    CTEXT           "heksedit 0.00",IDC_ST_VERSION,6,6,198,8\r
-    CTEXT           "A humble effort by Jochen Neubeck\nto create a dll version of Raihan Kibria's frhed\nfor use as a control in other applications",\r
-                    IDC_STATIC,6,20,198,24\r
-    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,6,54,198,1\r
-    ICON            109,IDC_STATIC,7,66,20,20\r
-    LTEXT           "frhed - free hex editor for 32-bit Windows\nVersion 1.1.xxx\n(c) Raihan Kibria 2002\nFill with by Pabs Dec 1999\r\nDisk-Access, Code/Decode Extension and some other bits by Gerson Kurz.",\r
-                    IDC_STATIC1,36,64,167,53\r
-    LTEXT           "eMail:",IDC_STATIC,5,112,20,8\r
-    EDITTEXT        IDC_EDIT1,6,122,198,25,ES_MULTILINE | ES_AUTOHSCROLL | \r
+    DEFPUSHBUTTON   "OK",IDOK,80,171,50,14\r
+    ICON            32512,IDC_APPICON,7,9,20,20\r
+    LTEXT           "",IDC_STATIC1,37,7,167,66\r
+    LTEXT           "eMail:",IDC_STATIC,5,71,20,8\r
+    EDITTEXT        IDC_EDIT1,6,81,198,25,ES_MULTILINE | ES_AUTOHSCROLL | \r
                     ES_READONLY\r
-    GROUPBOX        "Homepage",IDC_STATIC,6,152,198,52\r
-    EDITTEXT        IDC_EDIT2,22,162,167,12,ES_AUTOHSCROLL | ES_READONLY\r
+    EDITTEXT        IDC_EDIT2,22,121,167,12,ES_AUTOHSCROLL | ES_READONLY\r
+    GROUPBOX        "Homepage",IDC_STATIC,6,111,198,52\r
     PUSHBUTTON      "Open frhed's homepage in Internet browser",IDC_BUTTON1,\r
-                    30,181,150,14\r
+                    30,140,150,14\r
 END\r
 \r
-IDD_HEXDUMPDIALOG DIALOG DISCARDABLE  0, 0, 163, 161\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_HEXDUMPDIALOG DIALOGEX 0, 0, 163, 161\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Export hexdump"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Use hexadecimal notation without prefix.",IDC_STATIC,7,\r
                     7,128,8\r
@@ -412,10 +410,10 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,105,90,50,14\r
 END\r
 \r
-IDD_DECIMALDIALOG DIALOG DISCARDABLE  0, 0, 204, 111\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_DECIMALDIALOG DIALOGEX 0, 0, 204, 111\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Enter decimal value"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Enter decimal value:",IDC_STATIC,7,7,65,8\r
     EDITTEXT        IDC_EDIT1,7,16,97,12,ES_AUTOHSCROLL\r
@@ -436,9 +434,9 @@ BEGIN
 END\r
 \r
 IDD_PASTEDIALOG DIALOGEX 0, 0, 291, 145\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Paste with dialogue"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Clipboard content (text):",IDC_STATIC,7,7,76,8\r
     EDITTEXT        IDC_EDIT1,7,18,277,65,ES_MULTILINE | WS_VSCROLL,\r
@@ -459,10 +457,10 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,234,112,50,14\r
 END\r
 \r
-IDD_CUTDIALOG DIALOG DISCARDABLE  0, 0, 169, 159\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_CUTDIALOG DIALOGEX 0, 0, 169, 159\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Cut"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Start cutting at offset: (prefix offsets with x for hex)",\r
                     IDC_STATIC,7,7,157,8\r
@@ -481,10 +479,10 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,112,138,50,14\r
 END\r
 \r
-IDD_COPYDIALOG DIALOG DISCARDABLE  0, 0, 158, 154\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_COPYDIALOG DIALOGEX 0, 0, 158, 154\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Copy"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Prefix offsets with x for hex.",IDC_STATIC,7,7,86,8\r
     LTEXT           "Start copying at offset:",IDC_STATIC,7,20,72,8\r
@@ -501,10 +499,10 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,82,131,50,14\r
 END\r
 \r
-IDD_VIEWSETTINGSDIALOG DIALOG DISCARDABLE  0, 0, 229, 167\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_VIEWSETTINGSDIALOG DIALOGEX 0, 0, 229, 167\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "View Settings"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Number of bytes to display per line:",IDC_STATIC,7,7,\r
                     110,8\r
@@ -533,10 +531,10 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,171,97,50,14\r
 END\r
 \r
-IDD_APPENDDIALOG DIALOG DISCARDABLE  0, 0, 192, 46\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_APPENDDIALOG DIALOGEX 0, 0, 192, 46\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Append"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Append how many bytes to end of file:",IDC_STATIC,7,7,\r
                     121,8\r
@@ -546,9 +544,9 @@ BEGIN
 END\r
 \r
 IDD_MANIPBITSDIALOG DIALOGEX 0, 0, 257, 84\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Manipulate bits"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "statictext",IDC_STATIC1,7,7,243,8\r
     CONTROL         "Bit 7",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
@@ -580,25 +578,26 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,132,63,50,14\r
 END\r
 \r
-IDD_CHARACTERSETDIALOG DIALOG DISCARDABLE  0, 0, 172, 81\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_CHARACTERSETDIALOG DIALOGEX 0, 0, 172, 81\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | \r
+    WS_SYSMENU\r
 CAPTION "Character Set"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     GROUPBOX        "Choose character set",IDC_STATIC,7,7,101,40\r
     CONTROL         "ANSI",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,\r
                     25,19,33,10\r
     CONTROL         "OEM",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,25,32,32,10\r
-    LTEXT           "Font size in points:",IDC_STATIC,7,53,59,8\r
+    LTEXT           "Font size in points:",IDC_STATIC,7,53,101,8\r
     EDITTEXT        IDC_EDIT1,7,62,65,12,ES_AUTOHSCROLL | ES_NUMBER\r
     DEFPUSHBUTTON   "OK",IDOK,115,24,50,14\r
     PUSHBUTTON      "Cancel",IDCANCEL,115,41,50,14\r
 END\r
 \r
-IDD_CHOOSEDIFFDIALOG DIALOG DISCARDABLE  0, 0, 258, 231\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_CHOOSEDIFFDIALOG DIALOGEX 0, 0, 258, 231\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Choose area of difference to display"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "file_sizes",IDC_STATIC2,7,7,244,8\r
     LTEXT           "number_of_diffs",IDC_STATIC1,7,18,244,8\r
@@ -609,10 +608,10 @@ BEGIN
     PUSHBUTTON      "Copy above list",IDCOPY,187,210,64,14\r
 END\r
 \r
-IDD_BINARYMODEDIALOG DIALOG DISCARDABLE  0, 0, 183, 58\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_BINARYMODEDIALOG DIALOGEX 0, 0, 183, 58\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Binary mode setting"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     GROUPBOX        "Choose binary mode",IDC_STATIC,7,7,104,44\r
     CONTROL         "Little-endian (Intel)",IDC_RADIO1,"Button",\r
@@ -623,10 +622,10 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,126,29,50,14\r
 END\r
 \r
-IDD_SELECT_BLOCK_DIALOG DIALOG DISCARDABLE  0, 0, 207, 68\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_SELECT_BLOCK_DIALOG DIALOGEX 0, 0, 207, 68\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Select block"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Offset of start of selection: (prefix x for hex)",\r
                     IDC_STATIC,7,7,134,8\r
@@ -638,10 +637,10 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,150,35,50,14\r
 END\r
 \r
-IDD_ADDBMK_DIALOG DIALOG DISCARDABLE  0, 0, 193, 65\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_ADDBMK_DIALOG DIALOGEX 0, 0, 193, 65\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Add bookmark"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Offset of bookmark: (prefix x for hex)",IDC_STATIC,7,7,\r
                     114,8\r
@@ -652,10 +651,10 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,136,33,50,14\r
 END\r
 \r
-IDD_REMOVEBMK_DIALOG DIALOG DISCARDABLE  0, 0, 209, 167\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_REMOVEBMK_DIALOG DIALOGEX 0, 0, 209, 167\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Remove bookmark"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Remove which bookmark:",IDC_STATIC,7,7,84,8\r
     LISTBOX         IDC_LIST1,7,17,195,123,LBS_SORT | LBS_NOINTEGRALHEIGHT | \r
@@ -664,10 +663,10 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,109,146,50,14\r
 END\r
 \r
-IDD_OPEN_PARTIAL_DIALOG DIALOG DISCARDABLE  0, 0, 221, 135\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_OPEN_PARTIAL_DIALOG DIALOGEX 0, 0, 221, 135\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Open partially"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     GROUPBOX        "Start opening partially...",IDC_STATIC,7,7,207,60\r
     CONTROL         "At offset relative to beginning of file: (prefix x for hex)",\r
@@ -685,10 +684,10 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,110,115,50,14\r
 END\r
 \r
-IDD_FASTPASTE_DIALOG DIALOG DISCARDABLE  0, 0, 267, 146\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_FASTPASTE_DIALOG DIALOGEX 0, 0, 267, 146\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Paste"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     GROUPBOX        "Paste mode",IDC_STATIC,7,7,64,35\r
     CONTROL         "Overwrite",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | \r
@@ -712,10 +711,10 @@ BEGIN
     PUSHBUTTON      "Refresh",IDC_REFRESH,210,45,50,15\r
 END\r
 \r
-IDD_TMPL_RESULT_DIALOG DIALOG DISCARDABLE  0, 0, 304, 175\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_TMPL_RESULT_DIALOG DIALOGEX 0, 0, 304, 175\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Template"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Result of template application:",IDC_STATIC,7,7,96,8\r
     EDITTEXT        IDC_EDIT1,7,17,290,132,ES_MULTILINE | ES_AUTOVSCROLL | \r
@@ -724,10 +723,10 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,154,154,50,14\r
 END\r
 \r
-IDD_REPLACEDIALOG DIALOG DISCARDABLE  0, 0, 208, 226\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_REPLACEDIALOG DIALOGEX 0, 0, 208, 226\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Replace"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Find what:",IDC_STATIC,7,7,34,8\r
     EDITTEXT        IDC_TO_REPLACE_EDIT,7,16,194,62,ES_MULTILINE | \r
@@ -749,10 +748,10 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,147,205,54,14\r
 END\r
 \r
-IDD_FILL_WITH DIALOG DISCARDABLE  0, 0, 382, 103\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_FILL_WITH DIALOGEX 0, 0, 382, 103\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Dialog"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Fill selection with:",IDC_STATIC,5,5,56,8\r
     COMBOBOX        IDC_TYPE,65,5,35,35,CBS_DROPDOWNLIST | WS_VSCROLL | \r
@@ -790,10 +789,10 @@ BEGIN
     EDITTEXT        IDC_R,325,84,50,12,ES_AUTOHSCROLL | ES_READONLY\r
 END\r
 \r
-IDD_CHANGEINST DIALOG DISCARDABLE  0, 0, 247, 76\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_CHANGEINST DIALOGEX 0, 0, 247, 76\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Change Instance"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Load the following instance data:",IDC_STATIC,5,5,105,\r
                     15,SS_CENTERIMAGE\r
@@ -813,10 +812,10 @@ BEGIN
                     IDC_STATIC,5,45,235,25\r
 END\r
 \r
-IDD_ENCODE_DECODE_DIALOG DIALOG DISCARDABLE  0, 0, 236, 169\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_ENCODE_DECODE_DIALOG DIALOGEX 0, 0, 236, 169\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Encode / Decode Data"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Algorithms:",IDC_STATIC,4,4,172,8\r
     LISTBOX         IDC_LIST1,4,16,172,108,LBS_SORT | LBS_NOINTEGRALHEIGHT | \r
@@ -831,10 +830,10 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,180,20,50,14\r
 END\r
 \r
-IDD_OPEN_DRIVE_DIALOG DIALOG DISCARDABLE  0, 0, 236, 133\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_OPEN_DRIVE_DIALOG DIALOGEX 0, 0, 236, 133\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Open Drive"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LISTBOX         IDC_LIST1,4,4,172,124,LBS_SORT | LBS_NOINTEGRALHEIGHT | \r
                     WS_VSCROLL | WS_TABSTOP\r
@@ -842,10 +841,11 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,180,20,50,14\r
 END\r
 \r
-IDD_GOTO_TRACK_DIALOG DIALOG DISCARDABLE  0, 0, 244, 133\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_GOTO_TRACK_DIALOG DIALOGEX 0, 0, 244, 133\r
+STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | \r
+    WS_SYSMENU\r
 CAPTION "Go to Track"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Drive Information:",-1,4,4,168,12\r
     EDITTEXT        IDC_EDIT3,4,20,172,80,ES_MULTILINE | ES_AUTOHSCROLL | \r
@@ -857,9 +857,9 @@ BEGIN
 END\r
 \r
 IDD_SHORTCUTS DIALOGEX 0, 0, 217, 166\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Shortcuts"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Paths of shortcuts to frhed:",IDC_STATIC,5,5,86,8\r
     CONTROL         "Links to frhed",IDC_LIST,"SysListView32",LVS_REPORT | \r
@@ -889,9 +889,9 @@ BEGIN
 END\r
 \r
 IDD_UPGRADE DIALOGEX 0, 0, 377, 242\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Upgrade"\r
-FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Version list:",IDC_STATIC,5,5,36,8\r
     CONTROL         "Versions",IDC_VERS,"SysListView32",LVS_REPORT | \r
@@ -923,10 +923,10 @@ BEGIN
                     IDC_STATIC,45,215,270,25\r
 END\r
 \r
-IDD_MOVE_COPY DIALOG DISCARDABLE  0, 0, 163, 156\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_MOVE_COPY DIALOGEX 0, 0, 163, 156\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Move/Copy bytes"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Offset of one end of the block:",IDC_STATIC,5,15,97,8,\r
                     SS_CENTERIMAGE\r
@@ -959,9 +959,9 @@ BEGIN
 END\r
 \r
 IDD_DRAG_DROP DIALOGEX 0, 0, 202, 121\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Drag-drop"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     LTEXT           "Clipboard format[s] to use:",-1,5,5,82,8\r
     CONTROL         "List1",IDC_LIST,"SysListView32",LVS_REPORT | \r
@@ -977,10 +977,10 @@ BEGIN
                     10\r
 END\r
 \r
-IDD_DRAG_DROP_OPTIONS DIALOG DISCARDABLE  0, 0, 312, 116\r
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+IDD_DRAG_DROP_OPTIONS DIALOGEX 0, 0, 312, 116\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "OLE Drag-drop options"\r
-FONT 8, "MS Sans Serif"\r
+FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
 BEGIN\r
     GROUPBOX        "General",IDC_STATIC,5,0,145,75\r
     CONTROL         "Enable drop input",IDC_ENABLE_DROP,"Button",\r
@@ -1031,7 +1031,7 @@ END
 //\r
 \r
 #ifdef APSTUDIO_INVOKED\r
-GUIDELINES DESIGNINFO DISCARDABLE \r
+GUIDELINES DESIGNINFO \r
 BEGIN\r
     IDD_GOTODIALOG, DIALOG\r
     BEGIN\r
@@ -1054,7 +1054,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 205\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 222\r
+        BOTTOMMARGIN, 192\r
     END\r
 \r
     IDD_HEXDUMPDIALOG, DIALOG\r
@@ -1264,72 +1264,25 @@ BEGIN
 END\r
 #endif    // APSTUDIO_INVOKED\r
 \r
-\r
-#ifndef _MAC\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Version\r
-//\r
-\r
-VS_VERSION_INFO VERSIONINFO\r
- FILEVERSION 1,1,0,0\r
- PRODUCTVERSION 1,1,0,0\r
- FILEFLAGSMASK 0x3fL\r
-#ifdef _DEBUG\r
- FILEFLAGS 0x23L\r
-#else\r
- FILEFLAGS 0x22L\r
-#endif\r
- FILEOS 0x40004L\r
- FILETYPE 0x1L\r
- FILESUBTYPE 0x0L\r
-BEGIN\r
-    BLOCK "StringFileInfo"\r
-    BEGIN\r
-        BLOCK "040704b0"\r
-        BEGIN\r
-            VALUE "Comments", "Homepage: http://www.kibria.de, http://zip.to/pabs3\0"\r
-            VALUE "CompanyName", "(c) Raihan Kibria 2000\0"\r
-            VALUE "FileDescription", "heksedit - free hex editor dll 1.1.0\0"\r
-            VALUE "FileVersion", "1, 1, 0\0"\r
-            VALUE "InternalName", "heksedit\0"\r
-            VALUE "LegalCopyright", "GNU General Public License v2.0\0"\r
-            VALUE "LegalTrademarks", "\0"\r
-            VALUE "OriginalFilename", "heksedit.dll\0"\r
-            VALUE "PrivateBuild", "\0"\r
-            VALUE "ProductName", "frhed\0"\r
-            VALUE "ProductVersion", "1, 1, 0\0"\r
-            VALUE "SpecialBuild", "\0"\r
-        END\r
-    END\r
-    BLOCK "VarFileInfo"\r
-    BEGIN\r
-        VALUE "Translation", 0x407, 1200\r
-    END\r
-END\r
-\r
-#endif    // !_MAC\r
-\r
-\r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
 // Bitmap\r
 //\r
 \r
-IDB_TOOLBAR             BITMAP  DISCARDABLE     "Toolbar.bmp"\r
+IDB_TOOLBAR             BITMAP                  "res/Toolbar.bmp"\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
 // String Table\r
 //\r
 \r
-STRINGTABLE DISCARDABLE \r
+STRINGTABLE \r
 BEGIN\r
     IDM_OPEN                "Open"\r
     IDM_NEW                 "New"\r
 END\r
 \r
-STRINGTABLE DISCARDABLE \r
+STRINGTABLE \r
 BEGIN\r
     IDM_SAVE                "Save"\r
     IDM_FIND                "Find"\r
@@ -1339,12 +1292,12 @@ BEGIN
     IDM_EDIT_CUT            "Cut"\r
 END\r
 \r
-STRINGTABLE DISCARDABLE \r
+STRINGTABLE \r
 BEGIN\r
     IDM_REPLACE             "Replace"\r
 END\r
 \r
-STRINGTABLE DISCARDABLE \r
+STRINGTABLE \r
 BEGIN\r
     ID_DISK_GOTONEXTTRACK   "Goto next sector"\r
     ID_DISK_GOTOPREVIOUSTRACK "Goto previous sector"\r
@@ -1352,7 +1305,7 @@ BEGIN
     ID_DISK_GOTOLASTTRACK   "Goto last sector"\r
 END\r
 \r
-#endif    // Deutsch (Deutschland) resources\r
+#endif    // Englisch (USA) resources\r
 /////////////////////////////////////////////////////////////////////////////\r
 \r
 \r
@@ -1362,7 +1315,7 @@ END
 //\r
 // Generated from the TEXTINCLUDE 3 resource.\r
 //\r
-\r
+#include "version.rc"\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 #endif    // not APSTUDIO_INVOKED\r
index 7ccfeb6..aa9309a 100644 (file)
@@ -13,8 +13,8 @@
        <Configurations>\r
                <Configuration\r
                        Name="Debug|Win32"\r
-                       OutputDirectory="..\..\Build\Heksedit\Debug"\r
-                       IntermediateDirectory="..\..\BuildTmp\heksedit\Debug"\r
+                       OutputDirectory=".\..\..\Build\heksedit\$(ConfigurationName)"\r
+                       IntermediateDirectory=".\..\..\BuildTmp\heksedit\$(ConfigurationName)"\r
                        ConfigurationType="2"\r
                        UseOfMFC="0"\r
                        ATLMinimizesCRunTimeLibraryUsage="FALSE">\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
+                               StringPooling="TRUE"\r
+                               ExceptionHandling="FALSE"\r
                                RuntimeLibrary="3"\r
                                UsePrecompiledHeader="3"\r
                                PrecompiledHeaderThrough="precomp.h"\r
-                               PrecompiledHeaderFile=".\../../BuildTmp/heksedit/Debug/heksedit.pch"\r
-                               AssemblerListingLocation=".\../../BuildTmp/heksedit/Debug/"\r
-                               ObjectFile=".\../../BuildTmp/heksedit/Debug/"\r
-                               ProgramDataBaseFileName=".\../../BuildTmp/heksedit/Debug/"\r
+                               PrecompiledHeaderFile=".\..\..\BuildTmp\heksedit\$(ConfigurationName)\heksedit.pch"\r
+                               AssemblerListingLocation=".\..\..\BuildTmp\heksedit\$(ConfigurationName)\"\r
+                               ObjectFile=".\..\..\BuildTmp\heksedit\$(ConfigurationName)\"\r
+                               ProgramDataBaseFileName=".\..\..\BuildTmp\heksedit\$(ConfigurationName)\"\r
                                BrowseInformation="1"\r
                                WarningLevel="3"\r
                                SuppressStartupBanner="TRUE"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="imagehlp.lib version.lib comctl32.lib wininet.lib odbc32.lib odbccp32.lib shlwapi.lib"\r
-                               OutputFile="../../Build/heksedit/Debug/heksedit.dll"\r
+                               OutputFile="..\..\Build\heksedit\$(ConfigurationName)\heksedit.dll"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                GenerateDebugInformation="TRUE"\r
-                               ProgramDatabaseFile="../../Build/heksedit/Debug/heksedit.pdb"\r
+                               ProgramDatabaseFile="..\..\Build\heksedit\$(ConfigurationName)\heksedit.pdb"\r
                                SubSystem="2"\r
-                               ImportLibrary=".\../../Build/MergeDebug/heksedit.lib"\r
+                               ImportLibrary=".\..\..\Build\heksedit\$(ConfigurationName)\heksedit.lib"\r
                                TargetMachine="1"/>\r
                        <Tool\r
                                Name="VCMIDLTool"\r
@@ -52,7 +54,7 @@
                                MkTypLibCompatible="TRUE"\r
                                SuppressStartupBanner="TRUE"\r
                                TargetEnvironment="1"\r
-                               TypeLibraryName=".\../../Build/MergeDebug/heksedit.tlb"\r
+                               TypeLibraryName=".\..\..\Build\heksedit\$(ConfigurationName)\heksedit.tlb"\r
                                HeaderFileName=""/>\r
                        <Tool\r
                                Name="VCPostBuildEventTool"\r
@@ -60,7 +62,8 @@
                        <Tool\r
                                Name="VCPreBuildEventTool"/>\r
                        <Tool\r
-                               Name="VCPreLinkEventTool"/>\r
+                               Name="VCPreLinkEventTool"\r
+                               CommandLine="PreLink.bat $(IntDir) $(TargetPath)"/>\r
                        <Tool\r
                                Name="VCResourceCompilerTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
@@ -78,8 +81,8 @@
                </Configuration>\r
                <Configuration\r
                        Name="Release|Win32"\r
-                       OutputDirectory="..\..\Build\Heksedit\Release"\r
-                       IntermediateDirectory="..\..\BuildTmp\heksedit\Release"\r
+                       OutputDirectory=".\..\..\Build\heksedit\$(ConfigurationName)"\r
+                       IntermediateDirectory=".\..\..\BuildTmp\heksedit\$(ConfigurationName)"\r
                        ConfigurationType="2"\r
                        UseOfMFC="0"\r
                        ATLMinimizesCRunTimeLibraryUsage="FALSE">\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
+                               StringPooling="TRUE"\r
+                               ExceptionHandling="FALSE"\r
                                RuntimeLibrary="2"\r
                                UsePrecompiledHeader="3"\r
                                PrecompiledHeaderThrough="precomp.h"\r
-                               PrecompiledHeaderFile=".\../../BuildTmp/heksedit/Release/heksedit.pch"\r
-                               AssemblerListingLocation=".\../../BuildTmp/heksedit/Release/"\r
-                               ObjectFile=".\../../BuildTmp/heksedit/Release/"\r
-                               ProgramDataBaseFileName=".\../../BuildTmp/heksedit/Release/"\r
+                               PrecompiledHeaderFile=".\..\..\BuildTmp\heksedit\$(ConfigurationName)\heksedit.pch"\r
+                               AssemblerListingLocation=".\..\..\BuildTmp\heksedit\$(ConfigurationName)\"\r
+                               ObjectFile=".\..\..\BuildTmp\heksedit\$(ConfigurationName)\"\r
+                               ProgramDataBaseFileName=".\..\..\BuildTmp\heksedit\$(ConfigurationName)\"\r
                                BrowseInformation="1"\r
                                WarningLevel="3"\r
                                SuppressStartupBanner="TRUE"/>\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="version.lib comctl32.lib wininet.lib shlwapi.lib odbc32.lib odbccp32.lib"\r
-                               OutputFile="../../Build/heksedit/Release/heksedit.dll"\r
+                               OutputFile="..\..\Build\heksedit\$(ConfigurationName)\heksedit.dll"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
-                               ProgramDatabaseFile="../../Build/heksedit/Release/heksedit.pdb"\r
+                               ProgramDatabaseFile="..\..\Build\heksedit\$(ConfigurationName)\heksedit.pdb"\r
                                SubSystem="2"\r
-                               ImportLibrary=".\../../Build/MergeRelease/heksedit.lib"\r
+                               ImportLibrary=".\..\..\Build\heksedit\$(ConfigurationName)\heksedit.lib"\r
                                TargetMachine="1"/>\r
                        <Tool\r
                                Name="VCMIDLTool"\r
                                MkTypLibCompatible="TRUE"\r
                                SuppressStartupBanner="TRUE"\r
                                TargetEnvironment="1"\r
-                               TypeLibraryName=".\../../Build/MergeRelease/heksedit.tlb"\r
+                               TypeLibraryName=".\..\..\Build\heksedit\$(ConfigurationName)\heksedit.tlb"\r
                                HeaderFileName=""/>\r
                        <Tool\r
                                Name="VCPostBuildEventTool"\r
                        <Tool\r
                                Name="VCPreBuildEventTool"/>\r
                        <Tool\r
-                               Name="VCPreLinkEventTool"/>\r
+                               Name="VCPreLinkEventTool"\r
+                               CommandLine="PreLink.bat $(IntDir) $(TargetPath)"/>\r
                        <Tool\r
                                Name="VCResourceCompilerTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                        <File\r
+                               RelativePath=".\DllProxies.cpp">\r
+                       </File>\r
+                       <File\r
                                RelativePath="EnterDecimalValueDlg.cpp">\r
                                <FileConfiguration\r
                                        Name="Debug|Win32">\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                        <File\r
+                               RelativePath=".\LangArray.cpp">\r
+                       </File>\r
+                       <File\r
                                RelativePath="LoadHexFile.cpp">\r
                                <FileConfiguration\r
                                        Name="Debug|Win32">\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                UsePrecompiledHeader="1"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                UsePrecompiledHeader="1"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                                <FileConfiguration\r
                                        <Tool\r
                                                Name="VCCLCompilerTool"\r
                                                Optimization="0"\r
-                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;$(NoInherit)"\r
+                                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"\r
                                                BrowseInformation="1"/>\r
                                </FileConfiguration>\r
                        </File>\r
                                RelativePath="clipboard.h">\r
                        </File>\r
                        <File\r
+                               RelativePath=".\DllProxies.h">\r
+                       </File>\r
+                       <File\r
                                RelativePath="gktools.h">\r
                        </File>\r
                        <File\r
                                RelativePath="idt.h">\r
                        </File>\r
                        <File\r
-                               RelativePath="LoadHexFile.h">\r
+                               RelativePath=".\LangArray.h">\r
                        </File>\r
                        <File\r
-                               RelativePath="ntdiskspec.h">\r
+                               RelativePath="LoadHexFile.h">\r
                        </File>\r
                        <File\r
                                RelativePath="PDrive95.h">\r
                        <File\r
                                RelativePath="version.h">\r
                        </File>\r
+                       <File\r
+                               RelativePath=".\VersionData.h">\r
+                       </File>\r
                </Filter>\r
                <Filter\r
                        Name="Resource Files"\r
index 262c06d..157e6c2 100644 (file)
@@ -2,10 +2,7 @@
 // Frhed main definition file.\r
 #include "precomp.h"\r
 #include "resource.h"\r
-#include <shlwapi.h>\r
-#include <assert.h>\r
-#include <ctype.h>\r
-#include "toolbar.h"\r
+#include "VersionData.h"\r
 #include "hexwnd.h"\r
 #include "hexwdlg.h"\r
 #include "shtools.h"\r
@@ -15,6 +12,7 @@
 #include "clipboard.h"\r
 #include "BinTrans.h"\r
 #include "LoadHexFile.h"\r
+#include "LangArray.h"\r
 \r
 /*In the following headers:\r
        ULONG m_cRefCount; //The reference count that all objects based on IUnknown must have\r
@@ -25,7 +23,7 @@
 #include "ids.h"\r
 #include "ido.h"\r
 \r
-static const char appname[] = "heksedit";\r
+static const char appname[] = "frhed";\r
 \r
 //CF_RTF defined in Richedit.h, but we don't include it cause that would be overkill\r
 #ifndef CF_RTF\r
@@ -37,7 +35,12 @@ const CLIPFORMAT CF_RICH_TEXT_FORMAT = (CLIPFORMAT)RegisterClipboardFormat(CF_RT
 \r
 BOOL ShowHtmlHelp(UINT uCommand, DWORD dwData, HWND hParentWindow);\r
 \r
-//unsigned int iStartPL, iNumBytesPl, iPLFileLen, bShowFileStatsPL;\r
+int HexEditorWindow::MouseOpDist = GetProfileInt("Windows", "DragMinDist", DD_DEFDRAGMINDIST);\r
+int HexEditorWindow::MouseOpDelay = GetProfileInt("Windows", "DragDelay", DD_DEFDRAGDELAY);\r
+//We use the size of the font instead\r
+//int HexEditorWindow::ScrollInset = GetProfileInt("Windows", "DragScrollInset", DD_DEFSCROLLINSET);\r
+int HexEditorWindow::ScrollDelay = GetProfileInt("Windows", "DragScrollDelay", DD_DEFSCROLLDELAY);\r
+int HexEditorWindow::ScrollInterval = GetProfileInt("Windows", "DragScrollInterval", DD_DEFSCROLLINTERVAL);\r
 \r
 int HexEditorWindow::iPasteAsText = 0;\r
 int HexEditorWindow::iPasteTimes = 1;\r
@@ -75,13 +78,6 @@ HexEditorWindow::HexEditorWindow()
        bCenterCaret = FALSE;\r
        bMakeBackups = 0;\r
 \r
-       MouseOpDist = GetProfileInt( "Windows", "DragMinDist", DD_DEFDRAGMINDIST );\r
-       MouseOpDelay = GetProfileInt( "Windows", "DragDelay", DD_DEFDRAGDELAY );\r
-       //We use the size of the font instead\r
-       //ScrollInset = GetProfileInt( "Windows", "DragScrollInset", DD_DEFSCROLLINSET );\r
-       ScrollDelay = GetProfileInt( "Windows", "DragScrollDelay", DD_DEFSCROLLDELAY );\r
-       ScrollInterval = GetProfileInt( "Windows", "DragScrollInterval", DD_DEFSCROLLINTERVAL );\r
-\r
        enable_drop = TRUE;\r
        enable_drag = TRUE;\r
        enable_scroll_delay_dd = TRUE;\r
@@ -218,48 +214,52 @@ int HexEditorWindow::translate_accelerator(MSG *pMsg)
        return TranslateAccelerator(hwnd, hAccel, pMsg);\r
 }\r
 \r
+static LangArray langArray;\r
+\r
+BOOL HexEditorWindow::load_lang(LANGID langid)\r
+{\r
+       return langArray.Load(hMainInstance, langid);\r
+}\r
+\r
 //--------------------------------------------------------------------------------------------\r
 int HexEditorWindow::load_file(const char *fname)\r
 {\r
        WaitCursor wc;\r
        int bLoaded = FALSE;\r
-       if (file_is_loadable(fname))\r
+       int filehandle = _open(fname, _O_RDONLY|_O_BINARY);\r
+       if (filehandle != -1)\r
        {\r
-               int filehandle = _open (fname,_O_RDONLY|_O_BINARY,_S_IREAD|_S_IWRITE);\r
-               if (filehandle != -1)\r
+               int filelen = _filelength(filehandle);\r
+               DataArray.ClearAll();\r
+               // Try to allocate memory for the file.\r
+               if (DataArray.SetSize(filelen))\r
                {\r
-                       int filelen = _filelength(filehandle);\r
-                       DataArray.ClearAll();\r
-                       // Try to allocate memory for the file.\r
-                       if (DataArray.SetSize(filelen))\r
+                       DataArray.ExpandToSize();\r
+                       // If read-only mode on opening is enabled or the file is read only:\r
+                       bReadOnly = bOpenReadOnly || -1 == _access(fname, 02); //Pabs added call to _access\r
+                       // Load the file.\r
+                       if (filelen == 0 || _read(filehandle, DataArray, filelen) != -1)\r
                        {\r
-                               DataArray.ExpandToSize();\r
-                               // If read-only mode on opening is enabled or the file is read only:\r
-                               bReadOnly = bOpenReadOnly || -1 == _access(fname, 02); //Pabs added call to _access\r
-                               // Load the file.\r
-                               if (filelen == 0 || _read(filehandle, DataArray, filelen) != -1)\r
-                               {\r
-                                       // This is an empty file. Don't need to read anything.\r
-                                       GetLongPathNameWin32(fname, filename);\r
-                                       bLoaded = TRUE;\r
-                               }\r
-                               else\r
-                               {\r
-                                       MessageBox(hwnd, "Error while reading from file.", "Load error", MB_ICONERROR);\r
-                               }\r
+                               // This is an empty file. Don't need to read anything.\r
+                               GetLongPathNameWin32(fname, filename);\r
+                               bLoaded = TRUE;\r
                        }\r
                        else\r
                        {\r
-                               MessageBox(hwnd, "Not enough memory to load file.", "Load error", MB_ICONERROR);\r
+                               MessageBox(hwnd, "Error while reading from file.", "Load error", MB_ICONERROR);\r
                        }\r
-                       _close(filehandle);\r
                }\r
                else\r
                {\r
-                       char buf[500];\r
-                       sprintf(buf, "Error code 0x%x occured while opening file %s.", errno, fname);\r
-                       MessageBox(hwnd, buf, "Load error", MB_ICONERROR);\r
+                       MessageBox(hwnd, "Not enough memory to load file.", "Load error", MB_ICONERROR);\r
                }\r
+               _close(filehandle);\r
+       }\r
+       else\r
+       {\r
+               char buf[500];\r
+               sprintf(buf, "Error code 0x%x occured while opening file %s.", errno, fname);\r
+               MessageBox(hwnd, buf, "Load error", MB_ICONERROR);\r
        }\r
        if (bLoaded)\r
        {\r
@@ -283,20 +283,17 @@ int HexEditorWindow::load_file(const char *fname)
 }\r
 \r
 //--------------------------------------------------------------------------------------------\r
-int HexEditorWindow::file_is_loadable (const char* fname)\r
+int HexEditorWindow::file_is_loadable(const char *fname)\r
 {\r
-       int filehandle;\r
-       if ((filehandle = _open (fname,_O_RDONLY|_O_BINARY,_S_IREAD|_S_IWRITE)) != -1)\r
-       {\r
-               _close (filehandle);\r
-               return TRUE;\r
-       }\r
-       else\r
+       int filehandle = _open(fname, _O_RDONLY|_O_BINARY);\r
+       if (filehandle == -1)\r
                return FALSE;\r
+       _close(filehandle);\r
+       return TRUE;\r
 }\r
 \r
 //--------------------------------------------------------------------------------------------\r
-int HexEditorWindow::at_window_create (HWND hw, HINSTANCE hI)\r
+int HexEditorWindow::at_window_create(HWND hw, HINSTANCE hI)\r
 {\r
        hwnd = hw;\r
        hInstance = hI;\r
@@ -311,14 +308,12 @@ int HexEditorWindow::at_window_create (HWND hw, HINSTANCE hI)
        iCurNibble = 0;\r
 \r
        target = new CDropTarget(*this);\r
-       if( target )\r
+       if (target)\r
        {\r
-               CoLockObjectExternal( target, TRUE, FALSE );\r
-               if( enable_drop )\r
-                       RegisterDragDrop( hwnd, target );\r
+               CoLockObjectExternal(target, TRUE, FALSE);\r
+               if (enable_drop)\r
+                       RegisterDragDrop(hwnd, target);\r
        }\r
-       if( !target || !enable_drop || ( enable_drop && prefer_CF_HDROP ) )\r
-               DragAcceptFiles( hwnd, TRUE ); // Accept files dragged into window.\r
        return TRUE;\r
 }\r
 \r
@@ -477,19 +472,18 @@ int HexEditorWindow::snap_caret()
        int adjusth = 0;\r
        int adjustv = 0;\r
 \r
-       int column;\r
-\r
+       int col = iMaxOffsetLen + iByteSpace;\r
        if (bSelecting ? area == AREA_BYTES : iEnteringMode == BYTES)\r
-               column = BYTES_LOGICAL_COLUMN;\r
+               col += (iCurByte % iBytesPerLine) * 3 + iCurNibble; //BYTES_LOGICAL_COLUMN;\r
        else\r
-               column = CHARS_LOGICAL_COLUMN;\r
+               col += iBytesPerLine * 3 + iCharSpace + iCurByte % iBytesPerLine; //CHARS_LOGICAL_COLUMN;\r
 \r
-       if (column >= iHscrollPos + cxBuffer)\r
+       if (col >= iHscrollPos + cxBuffer)\r
        {\r
-               iHscrollPos = column - (cxBuffer - 1);\r
+               iHscrollPos = col - (cxBuffer - 1);\r
                adjusth = 1;\r
        }\r
-       else if (column < iHscrollPos)\r
+       else if (col < iHscrollPos)\r
        {\r
                iHscrollPos = column;\r
                adjusth = 1;\r
@@ -501,15 +495,15 @@ int HexEditorWindow::snap_caret()
                repall = 1;\r
        }\r
 \r
-       int line = iCurByte / iBytesPerLine;\r
-       if (line < iVscrollPos)\r
+       int row = iCurByte / iBytesPerLine;\r
+       if (row < iVscrollPos)\r
        {\r
-               iVscrollPos = line;\r
+               iVscrollPos = row;\r
                adjustv = 1;\r
        }\r
-       else if (line >= iVscrollPos + cyBuffer)\r
+       else if (row >= iVscrollPos + cyBuffer)\r
        {\r
-               iVscrollPos = line - (cyBuffer - 1);\r
+               iVscrollPos = row - (cyBuffer - 1);\r
                if (iVscrollPos < 0)\r
                        iVscrollPos = 0;\r
                adjustv = 1;\r
@@ -914,7 +908,7 @@ void HexEditorWindow::hscroll(int cmd)
 int HexEditorWindow::paint()\r
 {\r
        PAINTSTRUCT ps;\r
-       HDC hdc = BeginPaint (hwnd, &ps);\r
+       HDC hdc = BeginPaint(hwnd, &ps);\r
        //-------------------------------------------------------\r
        HideCaret (hwnd);\r
        // Delete remains of last position.\r
@@ -922,7 +916,7 @@ int HexEditorWindow::paint()
        int b = iVscrollPos + ps.rcPaint.bottom / cyChar;\r
        if (b >= iNumlines)\r
                b = iNumlines - 1;\r
-       int iBkColor = PALETTERGB (GetRValue(iBkColorValue),GetGValue(iBkColorValue),GetBValue(iBkColorValue));\r
+       int iBkColor = PALETTERGB(GetRValue(iBkColorValue), GetGValue(iBkColorValue), GetBValue(iBkColorValue));\r
        RECT rc;\r
        HBRUSH hbr = CreateSolidBrush(iBkColor);\r
        // Delete lower border if there are empty lines on screen.\r
@@ -954,18 +948,18 @@ int HexEditorWindow::paint()
        SelectObject(hdc, oldpen);\r
        DeleteObject(sep_pen);\r
        SelectObject(hdc, oldfont);\r
-       ShowCaret (hwnd);\r
-       EndPaint (hwnd, &ps);\r
+       ShowCaret(hwnd);\r
+       EndPaint(hwnd, &ps);\r
        return 0;\r
 }\r
 \r
 //--------------------------------------------------------------------------------------------\r
 // Receives WM_COMMAND messages and passes either them to their handler functions or\r
 // processes them here.\r
-int HexEditorWindow::command(int cmd)\r
+void HexEditorWindow::command(int cmd)\r
 {\r
        if (!queryCommandEnabled(cmd))\r
-               return 0;\r
+               return;\r
        HMENU hMenu = GetMenu(hwndMain);\r
        switch (cmd)\r
        {\r
@@ -1020,7 +1014,7 @@ int HexEditorWindow::command(int cmd)
                int res,r,r0;r=r0=0;//r&r0 used to determine if the user has removed all frhed data\r
                res = MessageBox(hwnd, "Are you sure you want to remove frhed ?", "Remove frhed", MB_YESNO);\r
                if (res != IDYES)\r
-                       return 0;\r
+                       return;\r
                //Can assume registry data exists\r
                res = linkspresent();\r
                if (res)\r
@@ -1142,56 +1136,65 @@ int HexEditorWindow::command(int cmd)
                static_cast<dialog<ChangeInstDlg>*>(this)->DoModal(hwnd);\r
                break;\r
        case IDM_CONTEXT:\r
-               if(MF_CHECKED==GetMenuState(hMenu,IDM_CONTEXT,0)){\r
-                       RegDeleteKey( HKEY_CLASSES_ROOT, "*\\shell\\Open in frhed\\command" ); //WinNT requires the key to have no subkeys\r
-                       RegDeleteKey( HKEY_CLASSES_ROOT, "*\\shell\\Open in frhed" );\r
+               if (MF_CHECKED == GetMenuState(hMenu, IDM_CONTEXT, 0))\r
+               {\r
+                       RegDeleteKey(HKEY_CLASSES_ROOT, "*\\shell\\Open in frhed\\command"); //WinNT requires the key to have no subkeys\r
+                       RegDeleteKey(HKEY_CLASSES_ROOT, "*\\shell\\Open in frhed");\r
                }\r
-               else{\r
+               else\r
+               {\r
                        HKEY key1;\r
-                       LONG res = RegCreateKey( HKEY_CLASSES_ROOT,\r
+                       LONG res = RegCreateKey(HKEY_CLASSES_ROOT,\r
                                "*\\shell\\Open in frhed\\command",\r
-                               &key1 );\r
-                       if( res == ERROR_SUCCESS ){\r
-                               char cmd[_MAX_PATH];\r
-                               strcpy(cmd, _pgmptr );\r
-                               strcat(cmd," %1");\r
-                               RegSetValue( key1, NULL, REG_SZ, cmd, strlen(cmd));\r
+                               &key1);\r
+                       if (res == ERROR_SUCCESS)\r
+                       {\r
+                               char cmd[MAX_PATH];\r
+                               int len = sprintf(cmd, "%s %%1", _pgmptr);\r
+                               RegSetValue(key1, NULL, REG_SZ, cmd, len);\r
                        }\r
                }\r
                break;\r
        case IDM_UNKNOWN:\r
-               if(MF_CHECKED==GetMenuState(hMenu,IDM_UNKNOWN,0)){\r
+               if (MF_CHECKED == GetMenuState(hMenu, IDM_UNKNOWN, 0))\r
+               {\r
                        HKEY hk;\r
-                       RegDeleteKey( HKEY_CLASSES_ROOT, "Unknown\\shell\\Open in frhed\\command" ); //WinNT requires the key to have no subkeys\r
-                       RegDeleteKey( HKEY_CLASSES_ROOT, "Unknown\\shell\\Open in frhed" );\r
-                       if(ERROR_SUCCESS==RegOpenKey(HKEY_CLASSES_ROOT,"Unknown\\shell",&hk)){\r
-                               RegDeleteValue(hk,NULL);\r
+                       RegDeleteKey(HKEY_CLASSES_ROOT, "Unknown\\shell\\Open in frhed\\command"); //WinNT requires the key to have no subkeys\r
+                       RegDeleteKey(HKEY_CLASSES_ROOT, "Unknown\\shell\\Open in frhed");\r
+                       if (ERROR_SUCCESS == RegOpenKey(HKEY_CLASSES_ROOT, "Unknown\\shell", &hk))\r
+                       {\r
+                               RegDeleteValue(hk, NULL);\r
                                RegCloseKey(hk);\r
                        }\r
                }\r
-               else{\r
+               else\r
+               {\r
                        HKEY key1;\r
-                       LONG res = RegCreateKey( HKEY_CLASSES_ROOT,\r
+                       LONG res = RegCreateKey(HKEY_CLASSES_ROOT,\r
                                "Unknown\\shell\\Open in frhed\\command",\r
-                               &key1 );\r
-                       if( res == ERROR_SUCCESS ){\r
-                               char cmd[_MAX_PATH];\r
-                               strcpy(cmd, _pgmptr );\r
-                               strcat(cmd," %1");\r
-                               RegSetValue( key1, NULL, REG_SZ, cmd, strlen(cmd));\r
+                               &key1);\r
+                       if (res == ERROR_SUCCESS)\r
+                       {\r
+                               char cmd[MAX_PATH];\r
+                               int len = sprintf(cmd, "%s %%1", _pgmptr);\r
+                               RegSetValue(key1, NULL, REG_SZ, cmd, len);\r
                        }\r
                }\r
                break;\r
        case IDM_DEFAULT:\r
-               if(MF_CHECKED==GetMenuState(hMenu,IDM_DEFAULT,0)){\r
+               if (MF_CHECKED == GetMenuState(hMenu, IDM_DEFAULT, 0))\r
+               {\r
                        HKEY hk;\r
-                       if(ERROR_SUCCESS==RegOpenKey(HKEY_CLASSES_ROOT,"Unknown\\shell",&hk)){\r
-                               RegDeleteValue(hk,NULL);\r
+                       if (ERROR_SUCCESS == RegOpenKey(HKEY_CLASSES_ROOT, "Unknown\\shell", &hk))\r
+                       {\r
+                               RegDeleteValue(hk, NULL);\r
                                RegCloseKey(hk);\r
                        }\r
                }\r
                else\r
-                       RegSetValue( HKEY_CLASSES_ROOT, "Unknown\\shell", REG_SZ, "Open in frhed", 13);\r
+               {\r
+                       RegSetValue(HKEY_CLASSES_ROOT, "Unknown\\shell", REG_SZ, "Open in frhed", 13);\r
+               }\r
                break;\r
 //end\r
        case IDM_REPLACE:\r
@@ -1213,7 +1216,7 @@ int HexEditorWindow::command(int cmd)
                break;\r
 \r
        case IDM_BMK_COLOR:\r
-               CMD_color_settings( &iBmkColor );\r
+               CMD_color_settings(&iBmkColor);\r
                break;\r
 \r
        case IDM_RESET_COLORS:\r
@@ -1221,11 +1224,8 @@ int HexEditorWindow::command(int cmd)
                break;\r
 \r
        case IDM_EDIT_READONLYMODE:\r
-               if( bReadOnly == FALSE )\r
-                       bReadOnly = TRUE;\r
-               else\r
-                       bReadOnly = FALSE;\r
-               resize_window();\r
+               bReadOnly = !bReadOnly;\r
+               set_wnd_title();\r
                break;\r
 \r
        case IDM_APPLYTEMPLATE:\r
@@ -1273,53 +1273,43 @@ int HexEditorWindow::command(int cmd)
 \r
        case IDM_READFLOAT:\r
                {\r
-//Pabs optimized - since sprintf returns the string len we can use a pointer, save 46 bytes & not call strcat so many times\r
-                       char buf[500],* buf2 = buf;\r
-                       buf[0] = 0;\r
-                       float floatval;//Pabs replaced 4 with sizeof(floatval)\r
-                       if (DataArray.GetLength()-iCurByte >= sizeof(floatval))\r
+                       char buf[500];\r
+                       char *buf2 = buf;\r
+                       buf[0] = '\0';\r
+                       union\r
+                       {\r
+                               float fval;\r
+                               double dval;\r
+                               BYTE bytes[1];\r
+                       } u;\r
+                       int iBytesAhead = DataArray.GetLength() - iCurByte;\r
+                       if (iBytesAhead >= sizeof u.fval)\r
                        {\r
                                // Space enough for float.\r
-                               if (iBinaryMode == LITTLEENDIAN_MODE)\r
-                               {\r
-                                       floatval = *((float*)&(DataArray[iCurByte]));\r
-                               }\r
-                               else // BIGENDIAN_MODE\r
-                               {\r
-                                       char* pf = (char*) &floatval;\r
-                                       int i;//Pabs replaced 4 with sizeof(floatval)\r
-                                       for (i=0; i<sizeof(floatval); i++)//Pabs replaced 3 with sizeof(floatval)-1\r
-                                               pf[i] = DataArray[iCurByte+(int)sizeof(floatval)-1-i];\r
-                               }\r
-                               buf2 += sprintf (buf2, "float size value:\n%f\n", floatval);\r
+                               memcpy(&u, &DataArray[iCurByte], sizeof u.fval);\r
+                               if (iBinaryMode != LITTLEENDIAN_MODE) // BIGENDIAN_MODE\r
+                                       reverse_bytes(u.bytes, u.bytes + sizeof u.fval - 1);\r
+                               buf2 += sprintf(buf2, "float size value:\n%g\n", u.fval);\r
                        }\r
                        else\r
-                               buf2 += sprintf (buf2, "Not enough space for float size value.\n");\r
-                       double dval;//Pabs replaced 8 with sizeof(dval) - portability\r
-                       if (DataArray.GetLength()-iCurByte >= sizeof(dval))\r
+                       {\r
+                               buf2 += sprintf(buf2, "Not enough space for float size value.\n");\r
+                       }\r
+                       if (iBytesAhead >= sizeof u.dval)\r
                        {\r
                                // Space enough for double.\r
-                               if (iBinaryMode == LITTLEENDIAN_MODE)\r
-                               {\r
-                                       dval = *((double*)&(DataArray[iCurByte]));\r
-                               }\r
-                               else // BIGENDIAN_MODE\r
-                               {\r
-                                       char* pd = (char*) &dval;\r
-                                       int i;//Pabs replaced 8 with sizeof(dval) - portability\r
-                                       for (i=0; i<sizeof(dval); i++)//Pabs replaced 7 with (int)sizeof(dval)-1 - portability\r
-                                               pd[i] = DataArray[iCurByte+(int)sizeof(dval)-1-i];\r
-                               }\r
-                               buf2 += sprintf (buf2, "\ndouble size value:\n%g\n", dval);\r
+                               memcpy(&u, &DataArray[iCurByte], sizeof u.dval);\r
+                               if (iBinaryMode != LITTLEENDIAN_MODE) // BIGENDIAN_MODE\r
+                                       reverse_bytes(u.bytes, u.bytes + sizeof u.dval - 1);\r
+                               buf2 += sprintf(buf2, "\ndouble size value:\n%g\n", u.dval);\r
                        }\r
                        else\r
                        {\r
-                               buf2 += sprintf (buf2, "\nNot enough space for double size value.\n");\r
-//end\r
-                       }//Pabs replaced NULL w hwnd\r
+                               buf2 += sprintf(buf2, "\nNot enough space for double size value.\n");\r
+                       }\r
                        MessageCopyBox(hwnd, buf, "Floating point values", MB_ICONINFORMATION);\r
-                       break;//end\r
                }\r
+               break;\r
 \r
        case IDM_PROPERTIES:\r
                CMD_properties();\r
@@ -1334,7 +1324,7 @@ int HexEditorWindow::command(int cmd)
                break;\r
 \r
        case IDA_INSERTMODETOGGLE:\r
-               CMD_toggle_insertmode ();\r
+               CMD_toggle_insertmode();\r
                break;\r
 \r
        case IDA_DELETEKEY:\r
@@ -1342,7 +1332,7 @@ int HexEditorWindow::command(int cmd)
                break;\r
 \r
        case IDM_CHARACTER_SET:\r
-               CMD_character_set ();\r
+               CMD_character_set();\r
                break;\r
 \r
        case IDM_EDIT_MANIPULATEBITS:\r
@@ -1354,78 +1344,65 @@ int HexEditorWindow::command(int cmd)
                break;\r
 \r
        case IDM_SELTEXT_COLOR:\r
-               CMD_color_settings( &iSelTextColorValue );\r
+               CMD_color_settings(&iSelTextColorValue);\r
                break;\r
 \r
        case IDM_SELBACK_COLOR:\r
-               CMD_color_settings( &iSelBkColorValue );\r
+               CMD_color_settings(&iSelBkColorValue);\r
                break;\r
 \r
        case IDM_SEP_COLOR:\r
-               CMD_color_settings (&iSepColorValue);\r
+               CMD_color_settings(&iSepColorValue);\r
                break;\r
 \r
        case IDM_TEXT_COLOR:\r
-               CMD_color_settings (&iTextColorValue);\r
+               CMD_color_settings(&iTextColorValue);\r
                break;\r
 \r
        case IDM_BK_COLOR:\r
-               CMD_color_settings (&iBkColorValue);\r
+               CMD_color_settings(&iBkColorValue);\r
                break;\r
 \r
        case IDM_VIEW_SETTINGS:\r
-               CMD_view_settings ();\r
+               CMD_view_settings();\r
                break;\r
 \r
+#ifdef _DEBUG\r
        case IDM_INTERNALSTATUS:\r
                {\r
-                       // Remove break for internal information on F2.\r
-//Pabs inserted\r
-#ifndef _DEBUG\r
-                       break;\r
-#endif\r
-//end\r
-//Pabs optimized - since sprintf returns the string len we can use a pointer, save 296 bytes & not call strcat so many times\r
-                       /*Used to do this\r
-                       char buf[4000], buf2[300];\r
-                       for each bit of status info{\r
-                               sprintf (buf2, "<status string>\n", <status data>);\r
-                               strcat(buf,buf2);\r
-                       }*/\r
-                       char buf[4000],* buf2 = buf;\r
-                       buf2 += sprintf (buf2, "Data length: %d\n", DataArray.GetLength ());\r
-                       buf2 += sprintf (buf2, "Upper Bound: %d\n", DataArray.GetUpperBound ());\r
-                       buf2 += sprintf (buf2, "Data size: %d\n", DataArray.GetSize ());\r
-                       buf2 += sprintf (buf2, "cxChar: %d\n", cxChar );\r
-                       buf2 += sprintf (buf2, "cyChar: %d\n", cyChar );\r
-                       buf2 += sprintf (buf2, "iNumlines: %d\n", iNumlines);\r
-                       buf2 += sprintf (buf2, "iVscrollPos: %d\n", iVscrollPos);\r
-                       buf2 += sprintf (buf2, "iCurByte: %d\n", iCurByte);\r
-                       buf2 += sprintf (buf2, "cyBuffer: %d\n", cyBuffer );\r
-//Pabs inserted\r
-                       buf2 += sprintf (buf2, "cxBuffer: %d\n", cxBuffer );\r
-//end\r
-                       buf2 += sprintf (buf2, "iMRU_count: %d\n", iMRU_count);\r
+                       char buf[4000];\r
+                       char *buf2 = buf;\r
+                       buf2 += sprintf(buf2, "Data length: %d\n", DataArray.GetLength());\r
+                       buf2 += sprintf(buf2, "Upper Bound: %d\n", DataArray.GetUpperBound());\r
+                       buf2 += sprintf(buf2, "Data size: %d\n", DataArray.GetSize());\r
+                       buf2 += sprintf(buf2, "cxChar: %d\n", cxChar);\r
+                       buf2 += sprintf(buf2, "cyChar: %d\n", cyChar);\r
+                       buf2 += sprintf(buf2, "iNumlines: %d\n", iNumlines);\r
+                       buf2 += sprintf(buf2, "iVscrollPos: %d\n", iVscrollPos);\r
+                       buf2 += sprintf(buf2, "iCurByte: %d\n", iCurByte);\r
+                       buf2 += sprintf(buf2, "cyBuffer: %d\n", cyBuffer);\r
+                       buf2 += sprintf(buf2, "cxBuffer: %d\n", cxBuffer);\r
+                       buf2 += sprintf(buf2, "iMRU_count: %d\n", iMRU_count);\r
                        int i;\r
-                       for (i=0; i<MRUMAX; i++)\r
+                       for (i = 0 ; i < MRUMAX ; i++)\r
                        {\r
-                               buf2 += sprintf (buf2, "MRU %d=%s\n", i, &(strMRU[i][0]));\r
-//end\r
-                       }//Pabs replaced NULL w hwnd\r
-                       MessageBox (hwnd, buf, "Internal status", MB_OK);\r
-                       break;//end\r
+                               buf2 += sprintf(buf2, "MRU %d=%s\n", i + 1, strMRU[i]);\r
+                       }\r
+                       MessageBox(hwnd, buf, "Internal status", MB_OK);\r
                }\r
+               break;\r
+#endif\r
 \r
        case IDM_EDIT_CUT:\r
                CMD_edit_cut();\r
                break;\r
 \r
        case IDM_HELP_TOPICS:\r
-               ShowHtmlHelp ( HELP_CONTENTS, 0, hwnd);\r
+               ShowHtmlHelp(HELP_CONTENTS, 0, hwnd);\r
                break;\r
 \r
        case IDM_EDIT_ENTERDECIMALVALUE:\r
-               CMD_edit_enterdecimalvalue ();\r
+               CMD_edit_enterdecimalvalue();\r
                break;\r
 \r
        case IDM_COPY_HEXDUMP:\r
@@ -1445,7 +1422,7 @@ int HexEditorWindow::command(int cmd)
                break;\r
 \r
        case IDM_ABOUT:\r
-               DialogBox(hInstance, MAKEINTRESOURCE(IDD_ABOUTDIALOG), hwnd, AboutDlgProc);\r
+               ShowModalDialog(IDD_ABOUTDIALOG, hwnd, AboutDlgProc, this);\r
                break;\r
 \r
        case IDM_FIND:\r
@@ -1468,70 +1445,28 @@ int HexEditorWindow::command(int cmd)
                CMD_save();\r
                break;\r
 \r
-       case IDM_EXIT:\r
-               SendMessage (hwnd, WM_CLOSE, 0, 0);\r
+       case IDM_SCROLL_PRIOR:\r
+               vscroll(SB_PAGEUP);\r
                break;\r
 \r
-       case IDM_SCROLL_PRIOR:{\r
-               int icl = iVscrollPos;\r
-               iVscrollPos-=cyBuffer;\r
-               if (iVscrollPos < 0)\r
-                       iVscrollPos = 0;\r
-               if (icl != iVscrollPos){\r
-                       adjust_vscrollbar ();\r
-                       repaint ();\r
-               }\r
-       }\r
-       break;\r
-\r
-       case IDM_SCROLL_NEXT:{\r
-               int icl = iVscrollPos;\r
-               iVscrollPos+=cyBuffer;\r
-               if (iVscrollPos > iNumlines-cyBuffer)\r
-                       iVscrollPos=iNumlines-cyBuffer;\r
-               if (iVscrollPos < 0)\r
-                       iVscrollPos=0;\r
-               if (icl != iVscrollPos){\r
-                       adjust_vscrollbar();\r
-                       repaint();\r
-               }\r
-       }\r
-       break;\r
+       case IDM_SCROLL_NEXT:\r
+               vscroll(SB_PAGEDOWN);\r
+               break;\r
 \r
        case IDM_SCROLL_UP:\r
-               if (iVscrollPos > 0)\r
-               {\r
-                       iVscrollPos--;\r
-                       adjust_vscrollbar ();\r
-                       repaint ();\r
-               }\r
+               vscroll(SB_LINEUP);\r
                break;\r
 \r
        case IDM_SCROLL_DOWN:\r
-               if (iVscrollPos < iNumlines-cyBuffer)\r
-               {\r
-                       iVscrollPos++;\r
-                       adjust_vscrollbar ();\r
-                       repaint ();\r
-               }\r
+               vscroll(SB_LINEDOWN);\r
                break;\r
 \r
        case IDM_SCROLL_LEFT:\r
-               if (iHscrollPos > 0)\r
-               {\r
-                       iHscrollPos--;\r
-                       adjust_hscrollbar ();\r
-                       repaint ();\r
-               }\r
+               hscroll(SB_LINELEFT);\r
                break;\r
 \r
        case IDM_SCROLL_RIGHT:\r
-               if (iHscrollPos < iGetCharsPerLine() - cxBuffer)\r
-               {\r
-                       iHscrollPos++;\r
-                       adjust_hscrollbar ();\r
-                       repaint();\r
-               }\r
+               hscroll(SB_LINERIGHT);\r
                break;\r
 \r
        case IDM_OPEN:\r
@@ -1575,23 +1510,21 @@ int HexEditorWindow::command(int cmd)
                break;\r
 \r
        default:\r
-               {//Pabs replaced NULL w hwnd\r
+               {\r
                        char buf[500];\r
-                       sprintf (buf, "Unknown COMMAND-ID %d.", cmd);\r
-                       MessageBox (hwnd, buf, "frhed ERROR", MB_OK);\r
-               }//end\r
+                       sprintf(buf, "Unknown COMMAND-ID %d.", cmd);\r
+                       MessageBox(hwnd, buf, "frhed ERROR", MB_OK);\r
+               }\r
                break;\r
        }\r
-       return 0;\r
 }\r
 \r
-\r
 //--------------------------------------------------------------------------------------------\r
-int HexEditorWindow::destroy_window ()\r
+int HexEditorWindow::destroy_window()\r
 {\r
-       DragAcceptFiles(hwnd,FALSE);\r
        RevokeDragDrop(hwnd);\r
-       if (target) CoLockObjectExternal(target, FALSE, TRUE);\r
+       if (target)\r
+               CoLockObjectExternal(target, FALSE, TRUE);\r
        return 0;\r
 }\r
 \r
@@ -2042,10 +1975,12 @@ void HexEditorWindow::print_line(HDC hdc, int line, HBRUSH hbr)
        int i = sprintf(linbuf, "%*.*x", iMinOffsetLen, iMinOffsetLen, bPartialStats ? startpos + iPartialOffset : startpos);\r
        memset(linbuf + i, ' ', m - i);\r
 \r
-       SetTextColor (hdc, iTextColor);\r
-       SetBkColor (hdc, iBkColor);\r
+       SetTextColor(hdc, iTextColor);\r
+       SetBkColor(hdc, iBkColor);\r
        print_text(hdc, x, y, linbuf, m);\r
 \r
+       RECT r;\r
+\r
        x += m;\r
        int z = x + (iByteSpace + 1) * iBytesPerLine + iCharSpace;\r
 \r
@@ -2085,24 +2020,20 @@ void HexEditorWindow::print_line(HDC hdc, int line, HBRUSH hbr)
                                u = '.';\r
                        }\r
                }\r
-               else if (i > length)\r
-               {\r
-                       linbuf[0] = linbuf[1] = ' ';\r
-               }\r
                else\r
                {\r
-                       linbuf[0] = linbuf[1] = '_';\r
+                       linbuf[0] = linbuf[1] = i == length ? '_' : ' ';\r
                }\r
                bool bDiff = i < length && i < sibling_length && buffer[i] != sibling_buffer[i];\r
                if (bSelected && i >= iSelLower && i <= iSelUpper)\r
                {\r
-                       SetTextColor (hdc, bDiff ? iSelDiffTextColor : iSelTextColor);\r
-                       SetBkColor (hdc, bDiff ? iSelDiffBkColor : iSelBkColor);\r
+                       SetTextColor(hdc, bDiff ? iSelDiffTextColor : iSelTextColor);\r
+                       SetBkColor(hdc, bDiff ? iSelDiffBkColor : iSelBkColor);\r
                }\r
                else\r
                {\r
-                       SetTextColor (hdc, bDiff ? iDiffTextColor : iTextColor);\r
-                       SetBkColor (hdc, bDiff ? iDiffBkColor : iBkColor);\r
+                       SetTextColor(hdc, bDiff ? iDiffTextColor : iTextColor);\r
+                       SetBkColor(hdc, bDiff ? iDiffBkColor : iBkColor);\r
                }\r
                m = iByteSpace;\r
                if (i < endpos)\r
@@ -2115,27 +2046,24 @@ void HexEditorWindow::print_line(HDC hdc, int line, HBRUSH hbr)
 \r
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
        // Separators.\r
-       for (i = 0; i <= iBytesPerLine / 4 ; i++)\r
+       r.top = (line - iVscrollPos) * cyChar;\r
+       r.bottom = r.top + cyChar;\r
+       for (i = 0 ; i <= iBytesPerLine ; i += 4)\r
        {\r
-//Pabs replaced "iOffsetLen" with "iMaxOffsetLen"\r
-               m = (iMaxOffsetLen+iByteSpace)*cxChar - cxChar/2 + 3*cxChar*4*i - cxChar*iHscrollPos;\r
-//end\r
-               MoveToEx (hdc, m, (line-iVscrollPos)*cyChar, NULL);\r
-               LineTo (hdc, m, (line-iVscrollPos+1)*cyChar);\r
+               r.left = r.right = (iMaxOffsetLen + iByteSpace - iHscrollPos + i * 3) * cxChar - cxChar / 2;\r
+               Polyline(hdc, (LPPOINT)&r, 2);\r
        }\r
        // Separator for chars.\r
-       m = CHARSTART*cxChar - cxChar*iHscrollPos - 2;\r
-       MoveToEx (hdc, m, (line-iVscrollPos)*cyChar, NULL);\r
-       LineTo (hdc, m, (line-iVscrollPos+1)*cyChar);\r
+       r.left = r.right = (iMaxOffsetLen + iByteSpace - iHscrollPos + iBytesPerLine * 3 + iCharSpace) * cxChar - cxChar / 2 - 1;\r
+       Polyline(hdc, (LPPOINT)&r, 2);\r
        // Second separator.\r
-       MoveToEx (hdc, m+2, (line-iVscrollPos)*cyChar, NULL);\r
-       LineTo (hdc, m+2, (line-iVscrollPos+1)*cyChar);\r
+       OffsetRect(&r, 2, 0);\r
+       Polyline(hdc, (LPPOINT)&r, 2);\r
 \r
        // Print bookmark indicators.\r
        // Are there bookmarks in this line?\r
        int el = startpos + iBytesPerLine - 1;\r
        int chpos;\r
-       RECT r;\r
        // Brush for bookmark borders.\r
        for( i = 0; i < iBmkCount; i++ )\r
        {\r
@@ -2170,29 +2098,32 @@ void HexEditorWindow::print_line(HDC hdc, int line, HBRUSH hbr)
 \r
 //--------------------------------------------------------------------------------------------\r
 // Set horizontal scroll position so that caret is visible.\r
-void HexEditorWindow::adjust_view_for_caret ()\r
+void HexEditorWindow::adjust_view_for_caret()\r
 {\r
-       int log_column;\r
+       int col = iMaxOffsetLen + iByteSpace;\r
        if (iEnteringMode == BYTES)\r
-               log_column = BYTES_LOGICAL_COLUMN;\r
+               col += (iCurByte % iBytesPerLine) * 3 + iCurNibble; //BYTES_LOGICAL_COLUMN;\r
        else\r
-               log_column = CHARS_LOGICAL_COLUMN;\r
+               col += iBytesPerLine * 3 + iCharSpace + iCurByte % iBytesPerLine; //CHARS_LOGICAL_COLUMN;\r
 \r
 //Pabs changed to put cursor in center of screen\r
-       if ( log_column >= iHscrollPos + cxBuffer\r
-         || log_column < iHscrollPos )\r
-               iHscrollPos = log_column - cxBuffer/2;\r
+       if ( col < iHscrollPos\r
+         || col >= iHscrollPos + cxBuffer )\r
+               iHscrollPos = col - cxBuffer / 2;\r
        if( iHscrollPos > iHscrollMax - cxBuffer + 1 )\r
                iHscrollPos = iHscrollMax - cxBuffer + 1;\r
-       if( iHscrollPos < 0 ) iHscrollPos = 0;\r
-       adjust_hscrollbar ();\r
-       if( BYTELINE < iVscrollPos\r
-        || BYTELINE > iVscrollPos + cyBuffer - 1 )\r
-               iVscrollPos = BYTELINE - cyBuffer/2;\r
+       if( iHscrollPos < 0 )\r
+               iHscrollPos = 0;\r
+       adjust_hscrollbar();\r
+       int row = iCurByte / iBytesPerLine;\r
+       if( row < iVscrollPos\r
+        || row >= iVscrollPos + cyBuffer )\r
+               iVscrollPos = row - cyBuffer / 2;\r
        if( iVscrollPos > iVscrollMax - cyBuffer + 1 )\r
                iVscrollPos = iVscrollMax - cyBuffer + 1;\r
-       if( iVscrollPos < 0 ) iVscrollPos = 0;\r
-       adjust_vscrollbar ();\r
+       if( iVscrollPos < 0 )\r
+               iVscrollPos = 0;\r
+       adjust_vscrollbar();\r
 //end\r
 }\r
 \r
@@ -2359,7 +2290,6 @@ int HexEditorWindow::initmenupopup(WPARAM w, LPARAM l)
 // Handler on window closing.\r
 int HexEditorWindow::close(const char *caption)\r
 {\r
-//Pabs changed - restructured so that help file is always closed on exit & the user can save&exit, exit | not exit if file changed\r
        if (iFileChanged)\r
        {\r
                int res = MessageBox(hwnd, "Do you want to save your changes?",\r
@@ -2368,15 +2298,6 @@ int HexEditorWindow::close(const char *caption)
                        //User doesn't want to quit or User wants to save and the save was unsuccessful\r
                        return 0;//Don't exit\r
        }\r
-//     else\r
-//     {\r
-       // If help was open close it.\r
-//     ShowHtmlHelp(HELP_QUIT, 0, hwnd);\r
-//     }\r
-//end\r
-\r
-       // Destroy window.\r
-//     DestroyWindow( hwnd );\r
        return 1;\r
 }\r
 \r
@@ -2386,41 +2307,24 @@ BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM)
        switch (iMsg)\r
        {\r
        case WM_INITDIALOG:\r
-               if (HRSRC hRes = ::FindResource(hMainInstance, MAKEINTRESOURCE(VS_VERSION_INFO), RT_VERSION))\r
-               {\r
-                       struct VersionData\r
-                       { \r
-                               WORD wLength; \r
-                               WORD wValueLength; \r
-                               WORD wType;\r
-                               WCHAR szKey[sizeof"VS_VERSION_INFO"];\r
-                               VS_FIXEDFILEINFO FixedFileInfo;\r
-                       };\r
-                       C_ASSERT(sizeof(struct VersionData) % sizeof(int) == 0);\r
-                       if (struct VersionData *pRes = (struct VersionData *)::LoadResource(hMainInstance, hRes))\r
-                       {\r
-                               TCHAR szVersion[40];\r
-                               int cch = wsprintf(szVersion, TEXT("heksedit %u.%02u"), UINT HIWORD(pRes->FixedFileInfo.dwFileVersionMS), UINT LOWORD(pRes->FixedFileInfo.dwFileVersionMS));\r
-                               if (pRes->FixedFileInfo.dwFileFlags & VS_FF_PRERELEASE)\r
-                                       szVersion[cch++] = 'b';\r
-                               if (pRes->FixedFileInfo.dwFileFlags & VS_FF_DEBUG)\r
-                                       szVersion[cch++] = 'D';\r
-                               szVersion[cch] = '\0';\r
-                               ::SetDlgItemText(hDlg, IDC_ST_VERSION, szVersion);\r
-                       }\r
-               }\r
+               TranslateDialog(hDlg);\r
                // Set the version information.\r
                SetDlgItemText(hDlg, IDC_STATIC1,\r
                        "frhed - free hex editor for 32-bit Windows\nVersion "CURRENT_VERSION"."\r
-                       SUB_RELEASE_NO "\n(c) Raihan Kibria 2000"\r
+                       SUB_RELEASE_NO"\n(c) Raihan Kibria 2000"\r
                        "\nFill with by Pabs Dec 1999"\r
-                       "\nDisk-Access, Code/Decode Extension and some other bits by Gerson Kurz.");\r
+                       "\nDisk-Access, Code/Decode Extension and some other bits by Gerson Kurz."\r
+                       "\nDLL interface by Jochen Neubeck.");\r
                // Set the email-addresses.\r
                SetDlgItemText(hDlg, IDC_EDIT1,\r
                        "rkibria@hrz1.hrz.tu-darmstadt.de"\r
                        "\r\nPabs: pabs3@zip.to");\r
                // Set the homepage URL.\r
                SetDlgItemText(hDlg, IDC_EDIT2, "http://www.kibria.de");\r
+               // Set the icon.\r
+               if (HWND hwndParent = GetParent(hDlg))\r
+                       if (DWORD dwIcon = GetClassLong(hwndParent, GCL_HICON))\r
+                               SendDlgItemMessage(hDlg, IDC_APPICON, STM_SETICON, dwIcon, 0);\r
                return TRUE;\r
 \r
        case WM_COMMAND:\r
@@ -2434,7 +2338,7 @@ BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM)
                case IDC_BUTTON1:\r
                        {\r
                                HINSTANCE hi = ShellExecute(hDlg, "open", "http://www.kibria.de", 0, NULL, SW_SHOWNORMAL);\r
-                               if ((UINT)hi <= 32)\r
+                               if ((UINT)hi <= HINSTANCE_ERROR)\r
                                        MessageBox(hDlg, "Could not call browser.", "Go to homepage", MB_ICONERROR);\r
                        }\r
                }\r
@@ -2588,19 +2492,19 @@ int HexEditorWindow::mousemove(int xPos, int yPos)
 \r
        if (bLButtonDown)\r
        {\r
-\r
                if (bSelecting)\r
                {\r
                        fix_scroll_timers(xPos, yPos);\r
 \r
                        int lastbyte = DataArray.GetUpperBound();\r
-                       if( new_pos > lastbyte ) new_pos = lastbyte;\r
-                       if( iEndOfSelection != new_pos )\r
+                       if (new_pos > lastbyte)\r
+                               new_pos = lastbyte;\r
+                       if (iEndOfSelection != new_pos)\r
                        {\r
                                bSelected = TRUE;\r
                                int oeos = iEndOfSelection;\r
                                iEndOfSelection = new_pos;\r
-                               repaint(oeos/iBytesPerLine,new_pos/iBytesPerLine);\r
+                               repaint(oeos / iBytesPerLine, new_pos / iBytesPerLine);\r
                        }\r
                }\r
                /*else if (bPullScrolling)\r
@@ -2622,7 +2526,9 @@ int HexEditorWindow::mousemove(int xPos, int yPos)
        else\r
        {\r
                SetCursor(LoadCursor(NULL,\r
-                       enable_drag && bSelected && IN_BOUNDS(new_pos, iStartOfSelection, iEndOfSelection) ?\r
+                       enable_drag && bSelected &&\r
+                       new_pos >= iGetStartOfSelection() &&\r
+                       new_pos <= iGetEndOfSelection() ?\r
                        IDC_ARROW : IDC_IBEAM));\r
        }\r
 \r
@@ -3075,14 +2981,13 @@ int HexEditorWindow::CMD_copy_hexdump(int iCopyHexdumpMode, int iCopyHexdumpType
        }\r
        else\r
                return 0;\r
-       if(mem)\r
+       if (mem)\r
                return 1;\r
        if (iCopyHexdumpMode == 0)\r
        {\r
                // to file.\r
                char szFileName[_MAX_PATH];\r
-               char szTitleName[_MAX_FNAME + _MAX_EXT];\r
-               strcpy (szFileName, "hexdump.txt");\r
+               strcpy(szFileName, "hexdump.txt");\r
                HGLOBAL hg = NULL;\r
                if( iCopyHexdumpType == IDC_EXPORTRTF ){\r
                        hg = (HGLOBAL)pMem;\r
@@ -3096,42 +3001,27 @@ int HexEditorWindow::CMD_copy_hexdump(int iCopyHexdumpMode, int iCopyHexdumpType
 \r
                // to file.\r
                OPENFILENAME ofn;\r
-               ofn.lStructSize = sizeof (OPENFILENAME);\r
+               ZeroMemory(&ofn, sizeof ofn);\r
+               ofn.lStructSize = sizeof ofn;\r
                ofn.hwndOwner = hwnd;\r
-               ofn.hInstance = NULL;\r
                ofn.lpstrFilter = "All Files (*.*)\0*.*\0\0";\r
-               ofn.lpstrCustomFilter = NULL;\r
-               ofn.nMaxCustFilter = 0;\r
-               ofn.nFilterIndex = 0;\r
                ofn.lpstrFile = szFileName;\r
                ofn.nMaxFile = _MAX_PATH;\r
-               ofn.lpstrFileTitle = szTitleName;\r
-               ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT;\r
-               ofn.lpstrInitialDir = NULL;\r
-               ofn.lpstrTitle = NULL;\r
                ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;\r
-               ofn.nFileOffset = 0;\r
-               ofn.nFileExtension = 0;\r
-               ofn.lpstrDefExt = NULL;\r
-               ofn.lCustData = 0L;\r
-               ofn.lpfnHook = NULL;\r
-               ofn.lpTemplateName = NULL;\r
-               if (GetSaveFileName (&ofn))\r
+               if (GetSaveFileName(&ofn))\r
                {\r
-                       int filehandle;\r
-                       if ((filehandle = _open (szFileName, _O_RDWR|_O_CREAT|_O_TRUNC|_O_BINARY,_S_IREAD|_S_IWRITE)) != -1)\r
+                       int filehandle = _open(szFileName, _O_RDWR|_O_CREAT|_O_TRUNC|_O_BINARY, _S_IREAD|_S_IWRITE);\r
+                       if (filehandle != -1)\r
                        {\r
                                // Write file.\r
-                               if ((_write (filehandle, pMem, buflen-1)) != -1)\r
-                               {//Pabs replaced NULL w hwnd\r
-                                       MessageBox (hwnd, "Hexdump saved.", "Export hexdump", MB_ICONINFORMATION);\r
-                               }\r
+                               if (_write(filehandle, pMem, buflen - 1) != -1)\r
+                                       MessageBox(hwnd, "Hexdump saved.", "Export hexdump", MB_ICONINFORMATION);\r
                                else\r
-                                       MessageBox (hwnd, "Could not save Hexdump.", "Export hexdump", MB_ICONERROR);\r
-                               _close (filehandle);\r
+                                       MessageBox(hwnd, "Could not save Hexdump.", "Export hexdump", MB_ICONERROR);\r
+                               _close(filehandle);\r
                        }\r
                        else\r
-                               MessageBox (hwnd, "Could not save Hexdump.", "Export hexdump", MB_ICONERROR);\r
+                               MessageBox(hwnd, "Could not save Hexdump.", "Export hexdump", MB_ICONERROR);\r
                }//end\r
                if (iCopyHexdumpType == IDC_EXPORTRTF)\r
                {\r
@@ -3197,7 +3087,7 @@ void HexEditorWindow::CMD_edit_enterdecimalvalue()
 // Return: Length of resulting string.\r
 // ppd = pointer to pointer to result, must be delete[]-ed later.\r
 // If the input string was empty, no translated array is created and zero is returned.\r
-int HexEditorWindow::create_bc_translation (char** ppd, char* src, int srclen)\r
+int HexEditorWindow::create_bc_translation(char **ppd, char *src, int srclen)\r
 {\r
        int destlen = Text2BinTranslator::iLengthOfTransToBin(src, srclen);\r
        if (destlen > 0)\r
@@ -3268,35 +3158,22 @@ int HexEditorWindow::CMD_new(const char *title)
 //-------------------------------------------------------------------\r
 int HexEditorWindow::CMD_save_as()\r
 {\r
-       char szFileName[_MAX_PATH] = "";\r
-       char szTitleName[_MAX_FNAME + _MAX_EXT] = "";\r
+       char szFileName[_MAX_PATH];\r
+       szFileName[0] = '\0';\r
        if (Drive == 0)\r
                strcpy(szFileName, filename);\r
        OPENFILENAME ofn;\r
-       ofn.lStructSize = sizeof (OPENFILENAME);\r
+       ZeroMemory(&ofn, sizeof ofn);\r
+       ofn.lStructSize = sizeof ofn;\r
        ofn.hwndOwner = hwnd;\r
-       ofn.hInstance = NULL;\r
        ofn.lpstrFilter = "All Files (*.*)\0*.*\0\0";\r
-       ofn.lpstrCustomFilter = NULL;\r
-       ofn.nMaxCustFilter = 0;\r
-       ofn.nFilterIndex = 0;\r
        ofn.lpstrFile = szFileName;\r
        ofn.nMaxFile = _MAX_PATH;\r
-       ofn.lpstrFileTitle = szTitleName;\r
-       ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT;\r
-       ofn.lpstrInitialDir = NULL;\r
-       ofn.lpstrTitle = NULL;\r
        ofn.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;\r
-       ofn.nFileOffset = 0;\r
-       ofn.nFileExtension = 0;\r
-       ofn.lpstrDefExt = NULL;\r
-       ofn.lCustData = 0L;\r
-       ofn.lpfnHook = NULL;\r
-       ofn.lpTemplateName = NULL;\r
        if (!GetSaveFileName(&ofn))\r
                return 0;\r
        WaitCursor w1;\r
-       int filehandle = _open(szFileName, _O_RDWR|_O_CREAT|_O_TRUNC|_O_BINARY,_S_IREAD|_S_IWRITE);\r
+       int filehandle = _open(szFileName, _O_RDWR|_O_CREAT|_O_TRUNC|_O_BINARY, _S_IREAD|_S_IWRITE);\r
        if (filehandle == -1)\r
        {\r
                MessageBox(hwnd, "Could not save file.", "Save as", MB_ICONERROR);\r
@@ -3354,7 +3231,7 @@ int HexEditorWindow::CMD_save()
        // File is partially loaded => must be saved partially or saved as.\r
        if (bPartialOpen)\r
        {\r
-               int filehandle = _open (filename, _O_RDWR|_O_BINARY,_S_IREAD|_S_IWRITE);\r
+               int filehandle = _open(filename, _O_RDWR|_O_BINARY);\r
                if (filehandle == -1)\r
                {\r
                        MessageBox(hwnd, "Could not save partially opened file.", "Save", MB_ICONERROR);\r
@@ -3417,15 +3294,15 @@ int HexEditorWindow::CMD_save()
                return done;\r
        }\r
 \r
-       int filehandle = _open(filename, _O_RDWR|_O_CREAT|_O_TRUNC|_O_BINARY,_S_IREAD|_S_IWRITE);\r
+       int filehandle = _open(filename, _O_RDWR|_O_CREAT|_O_TRUNC|_O_BINARY, _S_IREAD|_S_IWRITE);\r
        if (filehandle == -1)\r
        {\r
-               MessageBox (hwnd, "Could not save file.", "Save", MB_ICONERROR);\r
+               MessageBox(hwnd, "Could not save file.", "Save", MB_ICONERROR);\r
                return 0;\r
        }\r
        if (_write(filehandle, DataArray, DataArray.GetLength()) == -1)\r
        {\r
-               MessageBox (hwnd, "Could not write data to file.", "Save", MB_ICONERROR);\r
+               MessageBox(hwnd, "Could not write data to file.", "Save", MB_ICONERROR);\r
        }\r
        else\r
        {\r
@@ -3446,29 +3323,15 @@ void HexEditorWindow::CMD_open()
        if (!close("Open"))\r
                return;\r
        char szFileName[_MAX_PATH];\r
-       char szTitleName[_MAX_FNAME + _MAX_EXT];\r
        szFileName[0] = '\0';\r
        OPENFILENAME ofn;\r
-       ofn.lStructSize = sizeof (OPENFILENAME);\r
+       ZeroMemory(&ofn, sizeof ofn);\r
+       ofn.lStructSize = sizeof ofn;\r
        ofn.hwndOwner = hwnd;\r
-       ofn.hInstance = NULL;\r
        ofn.lpstrFilter = "All Files (*.*)\0*.*\0\0";\r
-       ofn.lpstrCustomFilter = NULL;\r
-       ofn.nMaxCustFilter = 0;\r
-       ofn.nFilterIndex = 0;\r
        ofn.lpstrFile = szFileName;\r
        ofn.nMaxFile = _MAX_PATH;\r
-       ofn.lpstrFileTitle = szTitleName;\r
-       ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT;\r
-       ofn.lpstrInitialDir = NULL;\r
-       ofn.lpstrTitle = NULL;\r
        ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;\r
-       ofn.nFileOffset = 0;\r
-       ofn.nFileExtension = 0;\r
-       ofn.lpstrDefExt = NULL;\r
-       ofn.lCustData = 0L;\r
-       ofn.lpfnHook = NULL;\r
-       ofn.lpTemplateName = NULL;\r
        if (GetOpenFileName(&ofn))\r
                load_file(szFileName);\r
 }\r
@@ -3478,6 +3341,7 @@ void HexEditorWindow::adjust_view_for_selection()
 {\r
        if( bSelected )\r
        {\r
+               int iCharStart = iMaxOffsetLen + iByteSpace + iBytesPerLine * 3 + iCharSpace;\r
 //Pabs changed to put selection in center of screen\r
                int iStartOfSelSetting = iStartOfSelection;\r
                int iEndOfSelSetting = iEndOfSelection;\r
@@ -3496,8 +3360,8 @@ void HexEditorWindow::adjust_view_for_selection()
                }\r
                else\r
                {\r
-                       soscol = CHARSTART + ( iStartOfSelSetting % iBytesPerLine );\r
-                       eoscol = CHARSTART + ( iEndOfSelSetting % iBytesPerLine );\r
+                       soscol = iCharStart + iStartOfSelSetting % iBytesPerLine;\r
+                       eoscol = iCharStart + iEndOfSelSetting % iBytesPerLine;\r
                        maxcols = iBytesPerLine;\r
                }\r
 \r
@@ -3527,8 +3391,8 @@ void HexEditorWindow::adjust_view_for_selection()
                                        maxcol = iMaxOffsetLen + iByteSpace + ( iBytesPerLine - 1 ) * 3 + 2;\r
                                }\r
                                else{\r
-                                       mincol = CHARSTART;\r
-                                       maxcol = CHARSTART + iBytesPerLine;\r
+                                       mincol = iCharStart;\r
+                                       maxcol = iCharStart + iBytesPerLine;\r
                                }\r
                        }\r
                        iHscrollPos = mincol - (cxBuffer - (maxcol-mincol) )/2;\r
@@ -3554,7 +3418,7 @@ void HexEditorWindow::CMD_view_settings()
 \r
 //-------------------------------------------------------------------\r
 // Change the color indicated by pColor.\r
-void HexEditorWindow::CMD_color_settings (COLORREF* pColor)\r
+void HexEditorWindow::CMD_color_settings(COLORREF *pColor)\r
 {\r
        CHOOSECOLOR cc;\r
        COLORREF crCustColors[16];\r
@@ -3642,18 +3506,13 @@ void HexEditorWindow::read_ini_data(char *key)
 \r
                res = RegQueryValueEx( key1, "iMRU_count", NULL, NULL, (BYTE*) &iMRU_count, &datasize );\r
                int i;\r
-               char fname[64];\r
-               for( i = 1; i <= MRUMAX; i++ )\r
+               for (i = 0 ; i < MRUMAX ; i++)\r
                {\r
-                       sprintf( fname, "MRU_File%d", i );\r
-                       datasize = _MAX_PATH + 1;\r
-                       res = RegQueryValueEx( key1, fname, NULL, NULL, (BYTE*) &szPath, &datasize );\r
-                       strcpy( &( strMRU[i-1][0] ), szPath );\r
+                       char fname[64];\r
+                       sprintf(fname, "MRU_File%d", i + 1);\r
+                       datasize = _MAX_PATH;\r
+                       res = RegQueryValueEx(key1, fname, NULL, NULL, (BYTE*) strMRU[i], &datasize);\r
                }\r
-\r
-               // if( res != ERROR_SUCCESS )//Pabs replaced NULL w hwnd\r
-               //      MessageBox( hwnd, "Could not read value", appname, MB_OK );\r
-\r
                // Close registry.\r
                RegCloseKey(key1);\r
        }\r
@@ -4230,32 +4089,18 @@ void HexEditorWindow::CMD_open_partially()
        if (!close("Open partially"))\r
                return;\r
        char szFileName[_MAX_PATH];\r
-       char szTitleName[_MAX_FNAME + _MAX_EXT];\r
        szFileName[0] = '\0';\r
        OPENFILENAME ofn;\r
-       ofn.lStructSize = sizeof (OPENFILENAME);\r
+       ZeroMemory(&ofn, sizeof ofn);\r
+       ofn.lStructSize = sizeof ofn;\r
        ofn.hwndOwner = hwnd;\r
-       ofn.hInstance = NULL;\r
        ofn.lpstrFilter = "All Files (*.*)\0*.*\0\0";\r
-       ofn.lpstrCustomFilter = NULL;\r
-       ofn.nMaxCustFilter = 0;\r
-       ofn.nFilterIndex = 0;\r
        ofn.lpstrFile = szFileName;\r
        ofn.nMaxFile = _MAX_PATH;\r
-       ofn.lpstrFileTitle = szTitleName;\r
-       ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT;\r
-       ofn.lpstrInitialDir = NULL;\r
-       ofn.lpstrTitle = NULL;\r
        ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;\r
-       ofn.nFileOffset = 0;\r
-       ofn.nFileExtension = 0;\r
-       ofn.lpstrDefExt = NULL;\r
-       ofn.lCustData = 0L;\r
-       ofn.lpfnHook = NULL;\r
-       ofn.lpTemplateName = NULL;\r
        if (!GetOpenFileName(&ofn))\r
                return;\r
-       OpenPartiallyDlg::filehandle = _open(szFileName,_O_RDONLY|_O_BINARY,_S_IREAD|_S_IWRITE);\r
+       OpenPartiallyDlg::filehandle = _open(szFileName, _O_RDONLY|_O_BINARY);\r
        if (OpenPartiallyDlg::filehandle == -1)\r
        {\r
                char buf[500];\r
@@ -4335,7 +4180,7 @@ void HexEditorWindow::dropfiles(HDROP hDrop)
        UINT i = 0;\r
        if (numfiles > 1)\r
        {\r
-               i = DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_REMOVEBMK_DIALOG), hwnd, MultiDropDlgProc, (LPARAM)hDrop);\r
+               i = ShowModalDialog(IDD_REMOVEBMK_DIALOG, hwnd, MultiDropDlgProc, hDrop);\r
                if (i >= numfiles)\r
                {\r
                        DragFinish(hDrop);\r
@@ -4386,29 +4231,16 @@ void HexEditorWindow::CMD_apply_template()
        }\r
        // Get name of template file.\r
        char szTemplateName[_MAX_PATH];\r
-       char szTitleName[_MAX_FNAME + _MAX_EXT];\r
        szTemplateName[0] = '\0';\r
        OPENFILENAME ofn;\r
-       ofn.lStructSize = sizeof (OPENFILENAME);\r
+       ZeroMemory(&ofn, sizeof ofn);\r
+       ofn.lStructSize = sizeof ofn;\r
        ofn.hwndOwner = hwnd;\r
-       ofn.hInstance = NULL;\r
        ofn.lpstrFilter = "Template files (*.tpl)\0*.tpl\0\0";\r
-       ofn.lpstrCustomFilter = NULL;\r
-       ofn.nMaxCustFilter = 0;\r
-       ofn.nFilterIndex = 0;\r
        ofn.lpstrFile = szTemplateName;\r
        ofn.nMaxFile = _MAX_PATH;\r
-       ofn.lpstrFileTitle = szTitleName;\r
-       ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT;\r
-       ofn.lpstrInitialDir = NULL;\r
        ofn.lpstrTitle = "Choose template file";\r
        ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;\r
-       ofn.nFileOffset = 0;\r
-       ofn.nFileExtension = 0;\r
-       ofn.lpstrDefExt = NULL;\r
-       ofn.lCustData = 0L;\r
-       ofn.lpfnHook = NULL;\r
-       ofn.lpTemplateName = NULL;\r
        if (GetOpenFileName(&ofn))\r
        {\r
                // szTemplateName contains name of chosen tpl file.\r
@@ -4420,7 +4252,7 @@ void HexEditorWindow::CMD_apply_template()
 void HexEditorWindow::apply_template(char *pcTemplate)\r
 {\r
        // Load template file.\r
-       int filehandle = _open(pcTemplate, _O_RDONLY|_O_BINARY, _S_IREAD|_S_IWRITE);\r
+       int filehandle = _open(pcTemplate, _O_RDONLY|_O_BINARY);\r
        if (filehandle == -1)\r
        {\r
                char buf[500];\r
@@ -4453,7 +4285,7 @@ void HexEditorWindow::apply_template(char *pcTemplate)
                        TplResult.Append('\0');\r
                        // Display template data.\r
                        char *pcTmplText = TplResult;\r
-                       DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_TMPL_RESULT_DIALOG), hwnd, TmplDisplayDlgProc, (LPARAM)pcTmplText);\r
+                       ShowModalDialog(IDD_TMPL_RESULT_DIALOG, hwnd, TmplDisplayDlgProc, pcTmplText);\r
                }\r
                else//Pabs replaced NULL w hwnd\r
                        MessageBox(hwnd, "Template file could not be loaded.", "Template error", MB_ICONERROR);\r
@@ -4822,11 +4654,28 @@ HRESULT HexEditorWindow::ResolveIt(LPCSTR lpszLinkFile, LPSTR lpszPath)
        return ::ResolveIt(hwndMain, lpszLinkFile, lpszPath);\r
 }\r
 \r
+void NTAPI TranslateDialog(HWND hwnd)\r
+{\r
+       if (IsWindowUnicode(hwnd))\r
+               langArray.TranslateDialogW(hwnd);\r
+       else\r
+               langArray.TranslateDialogA(hwnd);\r
+}\r
+\r
+INT_PTR NTAPI ShowModalDialog(UINT idd, HWND hwnd, DLGPROC dlgproc, LPVOID param)\r
+{\r
+       HINSTANCE hinst = langArray.m_hLangDll ? langArray.m_hLangDll : hMainInstance;\r
+       return IsWindowUnicode(hwnd)\r
+       ? DialogBoxParamW(hinst, MAKEINTRESOURCEW(idd), hwnd, dlgproc, (LPARAM)param)\r
+       : DialogBoxParamA(hinst, MAKEINTRESOURCEA(idd), hwnd, dlgproc, (LPARAM)param);\r
+}\r
+\r
 //-------------------------------------------------------------------\r
 void HexEditorWindow::CMD_colors_to_default()\r
-{//Pabs replaced NULL w hwnd\r
-       if( MessageBox( hwnd, "Really reset colors to default values?", appname, MB_YESNO | MB_ICONQUESTION ) == IDYES )\r
-       {//end\r
+{\r
+       if (MessageBox(hwnd, "Really reset colors to default values?",\r
+                       appname, MB_YESNO | MB_ICONQUESTION) == IDYES)\r
+       {\r
                iBmkColor = RGB( 255, 0, 0 );\r
                iSelBkColorValue = RGB( 255, 255, 0 );\r
                iSelTextColorValue = RGB( 0, 0, 0 );\r
@@ -4838,7 +4687,6 @@ void HexEditorWindow::CMD_colors_to_default()
        }\r
 }\r
 \r
-\r
 void HexEditorWindow::CMD_GotoDllExports()\r
 {\r
        ULONG ulOffset, ulSize;\r
@@ -5016,29 +4864,19 @@ void HexEditorWindow::CMD_findnext()
        if (FindDlg::pcFindDlgBuffer)\r
        {\r
                // There is a findstring. Create its translation.\r
-               charpcFindstring;\r
+               char *pcFindstring;\r
                int srclen = strlen(FindDlg::pcFindDlgBuffer);\r
                if (int destlen = create_bc_translation(&pcFindstring, FindDlg::pcFindDlgBuffer, srclen))\r
                {\r
                        SetCursor(LoadCursor(NULL, IDC_WAIT));\r
-                       int i = find_bytes(\r
-                               (char *)&DataArray[iCurByte + 1],\r
+                       int i = find_bytes((char *)&DataArray[iCurByte + 1],\r
                                DataArray.GetLength() - iCurByte - 1,\r
                                pcFindstring, destlen, 1,\r
                                FindDlg::iFindDlgMatchCase ? equal : lower_case);\r
-                       if (i != -1)\r
-                               iCurByte += i + 1;\r
-\r
                        SetCursor(LoadCursor(NULL, IDC_ARROW));\r
-                       if( i != -1 )\r
+                       if (i != -1)\r
                        {\r
-                               /* OLD\r
-                               // Caret will be vertically centered if line of found string is not visible.\r
-                               if( iCurByte/iBytesPerLine < iVscrollPos || iCurByte/iBytesPerLine > iVscrollPos + cyBuffer )\r
-                                       iVscrollPos = max( 0, iCurByte/iBytesPerLine-cyBuffer/2 );\r
-                               adjust_vscrollbar();\r
-                               */\r
-\r
+                               iCurByte += i + 1;\r
                                bSelected = TRUE;\r
                                iStartOfSelection = iCurByte;\r
                                iEndOfSelection = iCurByte + destlen - 1;\r
@@ -5046,8 +4884,9 @@ void HexEditorWindow::CMD_findnext()
                                repaint();\r
                        }\r
                        else\r
+                       {\r
                                MessageBox(hwnd, "Could not find any more occurances.", "Find next", MB_ICONERROR);\r
-\r
+                       }\r
                        delete [] pcFindstring;\r
                }\r
                else\r
@@ -5104,32 +4943,23 @@ void HexEditorWindow::CMD_findprev()
        if (FindDlg::pcFindDlgBuffer)\r
        {\r
                // There is a findstring. Create its translation.\r
-               charpcFindstring;\r
+               char *pcFindstring;\r
                int srclen = strlen(FindDlg::pcFindDlgBuffer);\r
                if (int destlen = create_bc_translation(&pcFindstring, FindDlg::pcFindDlgBuffer, srclen))\r
                {\r
-                       SetCursor( LoadCursor( NULL, IDC_WAIT ) );\r
+                       SetCursor(LoadCursor(NULL, IDC_WAIT));\r
                        // Search the array starting at index 0 to the current byte,\r
                        // plus the findstring-length minus 1. If\r
                        // you are somewhere in the middle of the findstring with the caret\r
                        // and you choose "find previous" you usually want to find the beginning\r
                        // of the findstring in the file.\r
-                       int i = find_bytes((char *) &DataArray[0],\r
-                               min( iCurByte + (destlen - 1), DataArray.GetLength() ),\r
+                       int i = find_bytes((char *)&DataArray[0],\r
+                               min(iCurByte + (destlen - 1), DataArray.GetLength()),\r
                                pcFindstring, destlen, -1, FindDlg::iFindDlgMatchCase ? equal : lower_case);\r
+                       SetCursor(LoadCursor(NULL, IDC_ARROW));\r
                        if (i != -1)\r
-                               iCurByte = i;\r
-\r
-                       SetCursor( LoadCursor( NULL, IDC_ARROW ) );\r
-                       if( i != -1 )\r
                        {\r
-                               /* OLD\r
-                               // Caret will be vertically centered if line of found string is not visible.\r
-                               if( iCurByte/iBytesPerLine < iVscrollPos || iCurByte/iBytesPerLine > iVscrollPos + cyBuffer )\r
-                                       iVscrollPos = max( 0, iCurByte/iBytesPerLine-cyBuffer/2 );\r
-                               adjust_vscrollbar();\r
-                               */\r
-\r
+                               iCurByte = i;\r
                                bSelected = TRUE;\r
                                iStartOfSelection = iCurByte;\r
                                iEndOfSelection = iCurByte + destlen - 1;\r
@@ -5137,7 +4967,9 @@ void HexEditorWindow::CMD_findprev()
                                repaint();\r
                        }\r
                        else\r
+                       {\r
                                MessageBox(hwnd, "Could not find any more occurances.", "Find previous", MB_ICONERROR);\r
+                       }\r
                        delete [] pcFindstring;\r
                }\r
                else\r
@@ -5192,11 +5024,11 @@ int HexEditorWindow::OnWndMsg( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lPara
                break;\r
 \r
        case WM_LBUTTONDOWN:\r
-               lbuttondown( wParam, LOWORD( lParam ), HIWORD( lParam ) );\r
+               lbuttondown(wParam, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\r
                break;\r
 \r
        case WM_LBUTTONUP:\r
-               lbuttonup( LOWORD( lParam ), HIWORD( lParam ) );\r
+               lbuttonup(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\r
                break;\r
 \r
        // GK20AUG2K\r
@@ -5205,15 +5037,15 @@ int HexEditorWindow::OnWndMsg( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lPara
                break;\r
 \r
        case WM_MOUSEMOVE:\r
-               mousemove( (int) (short) LOWORD( lParam ), (int) (short) HIWORD( lParam ) );\r
+               mousemove(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));\r
                break;\r
 \r
        case WM_KEYDOWN:\r
-               keydown( wParam );\r
+               keydown(wParam);\r
                break;\r
 \r
        case WM_CHAR:\r
-               character( (char) wParam );\r
+               character((char)wParam);\r
                break;\r
 \r
        case WM_VSCROLL:\r
@@ -5229,7 +5061,7 @@ int HexEditorWindow::OnWndMsg( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lPara
                return 0;\r
 \r
        case WM_COMMAND:\r
-               command( LOWORD( wParam ) );\r
+               command(LOWORD(wParam));\r
                break;\r
 \r
        case WM_TIMER:\r
@@ -5240,7 +5072,7 @@ int HexEditorWindow::OnWndMsg( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lPara
                destroy_window();\r
                break;\r
        }\r
-       return DefWindowProc (hwnd, iMsg, wParam, lParam);\r
+       return DefWindowProc(hwnd, iMsg, wParam, lParam);\r
 }\r
 \r
 //Pabs changed - removed CMD_explorersettings\r
@@ -5345,7 +5177,7 @@ void HexEditorWindow::CMD_revert()
        }\r
        if (bPartialOpen)\r
        {\r
-               int filehandle = _open (filename,_O_RDONLY|_O_BINARY,_S_IREAD|_S_IWRITE);\r
+               int filehandle = _open(filename, _O_RDONLY|_O_BINARY);\r
                if (filehandle != -1)\r
                {\r
                        _lseek(filehandle, iPartialOffset, 0);\r
@@ -5405,29 +5237,15 @@ void HexEditorWindow::CMD_deletefile()
 void HexEditorWindow::CMD_insertfile()\r
 {\r
        char szFileName[_MAX_PATH];\r
-       char szTitleName[_MAX_FNAME + _MAX_EXT];\r
        szFileName[0] = '\0';\r
        OPENFILENAME ofn;\r
-       ofn.lStructSize = sizeof (OPENFILENAME);\r
+       ZeroMemory(&ofn, sizeof ofn);\r
+       ofn.lStructSize = sizeof ofn;\r
        ofn.hwndOwner = hwnd;\r
-       ofn.hInstance = NULL;\r
        ofn.lpstrFilter = "All Files (*.*)\0*.*\0\0";\r
-       ofn.lpstrCustomFilter = NULL;\r
-       ofn.nMaxCustFilter = 0;\r
-       ofn.nFilterIndex = 0;\r
        ofn.lpstrFile = szFileName;\r
        ofn.nMaxFile = _MAX_PATH;\r
-       ofn.lpstrFileTitle = szTitleName;\r
-       ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT;\r
-       ofn.lpstrInitialDir = NULL;\r
-       ofn.lpstrTitle = NULL;\r
        ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;\r
-       ofn.nFileOffset = 0;\r
-       ofn.nFileExtension = 0;\r
-       ofn.lpstrDefExt = NULL;\r
-       ofn.lCustData = 0L;\r
-       ofn.lpfnHook = NULL;\r
-       ofn.lpTemplateName = NULL;\r
        if (!GetOpenFileName(&ofn))\r
                return;\r
        // RK: don't allow inserting same file we're editing right now.\r
@@ -5520,53 +5338,31 @@ void HexEditorWindow::CMD_insertfile()
 void HexEditorWindow::CMD_saveselas()\r
 {\r
        char szFileName[_MAX_PATH];\r
-       char szTitleName[_MAX_FNAME + _MAX_EXT];\r
+       szFileName[0] = '\0';\r
        OPENFILENAME ofn;\r
-       szTitleName[0] = szFileName[0] = '\0';\r
-       ofn.lStructSize = sizeof (OPENFILENAME);\r
+       ZeroMemory(&ofn, sizeof ofn);\r
+       ofn.lStructSize = sizeof ofn;\r
        ofn.hwndOwner = hwnd;\r
-       ofn.hInstance = NULL;\r
        ofn.lpstrFilter = "All Files (*.*)\0*.*\0\0";\r
-       ofn.lpstrCustomFilter = NULL;\r
-       ofn.nMaxCustFilter = 0;\r
-       ofn.nFilterIndex = 0;\r
        ofn.lpstrFile = szFileName;\r
        ofn.nMaxFile = _MAX_PATH;\r
-       ofn.lpstrFileTitle = szTitleName;\r
-       ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT;\r
-       ofn.lpstrInitialDir = NULL;\r
-       ofn.lpstrTitle = NULL;\r
        ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;\r
-       ofn.nFileOffset = 0;\r
-       ofn.nFileExtension = 0;\r
-       ofn.lpstrDefExt = NULL;\r
-       ofn.lCustData = 0L;\r
-       ofn.lpfnHook = NULL;\r
-       ofn.lpTemplateName = NULL;\r
        if (GetSaveFileName(&ofn))\r
        {\r
                const char *complain = "Could not save file.";\r
-               int filehandle = _open(szFileName, _O_RDWR|_O_CREAT|_O_TRUNC|_O_BINARY,_S_IREAD|_S_IWRITE);\r
+               int filehandle = _open(szFileName, _O_RDWR|_O_CREAT|_O_TRUNC|_O_BINARY, _S_IREAD|_S_IWRITE);\r
                if (filehandle != -1)\r
                {\r
-                       SetCursor (LoadCursor (NULL, IDC_WAIT));\r
-                       int iStartOfSelSetting;\r
-                       int iEndOfSelSetting;\r
+                       WaitCursor wc;\r
+                       int lower = 0;\r
+                       int upper = DataArray.GetUpperBound();\r
                        if (bSelected)\r
                        {\r
-                               iStartOfSelSetting = iStartOfSelection;\r
-                               iEndOfSelSetting = iEndOfSelection;\r
+                               lower = iGetStartOfSelection();\r
+                               upper = iGetEndOfSelection();\r
                        }\r
-                       else\r
-                       {\r
-                               iStartOfSelSetting = 0;\r
-                               iEndOfSelSetting = DataArray.GetUpperBound();\r
-                       }\r
-                       if (iStartOfSelSetting > iEndOfSelSetting)\r
-                               swap(iStartOfSelSetting, iEndOfSelSetting);\r
-                       if (_write(filehandle, &DataArray[iStartOfSelSetting], iEndOfSelSetting - iStartOfSelSetting + 1) != -1)\r
+                       if (_write(filehandle, &DataArray[lower], upper - lower + 1) != -1)\r
                                complain = 0;\r
-                       SetCursor (LoadCursor (NULL, IDC_ARROW));\r
                        _close(filehandle);\r
                }\r
                if (complain)\r
@@ -5689,29 +5485,15 @@ void HexEditorWindow::CMD_open_hexdump()
                //Import from file\r
                //Initialize the struct\r
                char szFileName[_MAX_PATH];\r
-               char szTitleName[_MAX_FNAME + _MAX_EXT];\r
                szFileName[0] = '\0';\r
                OPENFILENAME ofn;\r
-               ofn.lStructSize = sizeof (OPENFILENAME);\r
+               ZeroMemory(&ofn, sizeof ofn);\r
+               ofn.lStructSize = sizeof ofn;\r
                ofn.hwndOwner = hwnd;\r
-               ofn.hInstance = NULL;\r
                ofn.lpstrFilter = "Hex Dump files(*.txt,*.hex)\0*.txt;*.hex\0All Files (*.*)\0*.*\0";\r
-               ofn.lpstrCustomFilter = NULL;\r
-               ofn.nMaxCustFilter = 0;\r
-               ofn.nFilterIndex = 0;\r
                ofn.lpstrFile = szFileName;\r
                ofn.nMaxFile = _MAX_PATH;\r
-               ofn.lpstrFileTitle = szTitleName;\r
-               ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT;\r
-               ofn.lpstrInitialDir = NULL;\r
-               ofn.lpstrTitle = NULL;\r
                ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;\r
-               ofn.nFileOffset = 0;\r
-               ofn.nFileExtension = 0;\r
-               ofn.lpstrDefExt = NULL;\r
-               ofn.lCustData = 0L;\r
-               ofn.lpfnHook = NULL;\r
-               ofn.lpTemplateName = NULL;\r
                if (!GetOpenFileName(&ofn))\r
                        return;\r
                //Set up variables for the function\r
@@ -6079,7 +5861,8 @@ void HexEditorWindow::status_bar_click(bool left)
                                        {\r
                                                //In bits section\r
                                                //Find the end of " Bits="\r
-                                               for ( ; i < len && st[i] != '=' ; i++);\r
+                                               while (i < len && st[i] != '=')\r
+                                                       ++i;\r
 \r
                                                //Are we in the actual bits or " Bits="\r
                                                if (cn <= i)\r
@@ -6096,7 +5879,6 @@ void HexEditorWindow::status_bar_click(bool left)
                                                        len = i + 1;\r
                                                        GetTextExtentPoint32(dc, text, len, &s);\r
                                                        r = rt.left + s.cx;\r
-\r
                                                        //Flip the equivalent of a "bit"\r
                                                        for (i = 0 ; i < 7 ; i++)\r
                                                        {\r
@@ -6104,21 +5886,19 @@ void HexEditorWindow::status_bar_click(bool left)
                                                                if (p.x <= r + s.cx + 1)\r
                                                                        break;\r
                                                        }\r
-                                                       if (st[i] == '0')\r
-                                                               st[i] = '1';\r
-                                                       else if (st[i] == '1')\r
-                                                               st[i] = '0';\r
-\r
+                                                       st[i] ^= '0' ^ '1';\r
                                                        //Assemble all the "bits"\r
-                                                       DataArray[iCurByte] = 0x00;\r
-                                                       for( i = 0; i < 8; i++){\r
-                                                               if( st[i] == '1' ) DataArray[iCurByte] |= 0x01;\r
-                                                               if( i < 7 ) DataArray[iCurByte] <<= 1;\r
+                                                       BYTE c = 0x00;\r
+                                                       for (i = 0 ; i < 8 ; i++)\r
+                                                       {\r
+                                                               c <<= 1;\r
+                                                               if (st[i] == '1')\r
+                                                                       c |= 0x01;\r
                                                        }\r
-\r
+                                                       DataArray[iCurByte] = c;\r
                                                        //Redraw the data & status bar etc\r
                                                        bFilestatusChanged = iFileChanged = TRUE;\r
-                                                       repaint(BYTELINE);\r
+                                                       repaint(iCurByte / iBytesPerLine);\r
 \r
                                                }//In actual bits\r
                                        }//In bits section\r
@@ -6648,7 +6428,8 @@ HGLOBAL HexEditorWindow::RTF_hexdump(int start, int end, DWORD* plen){
                        //If the current line contains a bookmark\r
                        else for (bi = 0 ; bi < iBmkCount ; bi++)\r
                        {\r
-                               if (IN_BOUNDS(pbmkList[i].offset, l, l + iBytesPerLine - 1))\r
+                               int offset = pbmkList[i].offset;\r
+                               if (offset >= l && offset < l + iBytesPerLine)\r
                                {\r
                                        highlights_in_this_line = true;\r
                                        break;\r
index 9dfa13f..7cc55ae 100644 (file)
@@ -3,9 +3,15 @@
 \r
 #include "IDT.h"\r
 \r
-// This is frhed vCURRENT_VERSION.SUB_RELEASE_NO\r
-#include "version.h"\r
 #include "heksedit.h"\r
+\r
+#define SHARPEN_A(X) #X\r
+#define SHARPEN_W(X) L#X\r
+#define SHARPEN(T,X) SHARPEN_##T(X)\r
+\r
+#define CURRENT_VERSION SHARPEN(A,FRHED_MAJOR_VERSION) "." SHARPEN(A,FRHED_MINOR_VERSION)\r
+#define SUB_RELEASE_NO SHARPEN(A,FRHED_SUB_RELEASE_NO)\r
+\r
 #include "PhysicalDrive.h"\r
 #include "PMemoryBlock.h"\r
 \r
@@ -17,10 +23,8 @@ BOOL CALLBACK TmplDisplayDlgProc(HWND, UINT, WPARAM, LPARAM);
 \r
 //--------------------------------------------------------------------------------------------\r
 \r
-#define swapxor(x, y) ((x) < (y) ? 0 : (x) ^ (y))\r
-#define bitval(base,pos) ((base)[(pos)/8]&(1<<((pos)%8)))\r
 #define ANSI_SET ANSI_FIXED_FONT\r
-#define OEM_SET  OEM_FIXED_FONT\r
+#define OEM_SET OEM_FIXED_FONT\r
 #define LITTLEENDIAN_MODE 0\r
 #define BIGENDIAN_MODE 1\r
 #define SCROLL_TIMER_ID 1\r
@@ -31,7 +35,6 @@ BOOL CALLBACK TmplDisplayDlgProc(HWND, UINT, WPARAM, LPARAM);
 #define BMKTEXTMAX 256\r
 #define TPL_TYPE_MAXLEN 16\r
 #define TPL_NAME_MAXLEN 128\r
-#define FINDDLG_BUFLEN (64*1024)\r
 \r
 typedef struct\r
 {\r
@@ -43,10 +46,10 @@ typedef struct
 // Global variables.\r
 #include "simparr.h"\r
 \r
-HRESULT ResolveIt( HWND hwnd, LPCSTR lpszLinkFile, LPSTR lpszPath );\r
 //--------------------------------------------------------------------------------------------\r
 enum ClickArea { AREA_NONE, AREA_OFFSETS, AREA_BYTES, AREA_CHARS };\r
 enum SCROLL_TYPE { SCROLL_NONE, SCROLL_BACK, SCROLL_FORWARD };\r
+enum EnteringMode { BYTES, CHARS };\r
 \r
 class hexfile_stream;\r
 class load_hexfile_0;\r
@@ -124,14 +127,9 @@ public:
        void set_drag_caret(long x, long y, bool Copying, bool Overwrite );\r
        void fix_scroll_timers(long x, long y);\r
        void kill_scroll_timers();\r
-       int lbd_pos; //ClickArea lbd_area;\r
+       int lbd_pos;\r
        int nibblenum, bytenum, column, line, new_pos, old_pos, old_col, old_row;\r
        int bMouseOpDelayTimerSet;\r
-       //int ScrollInset;\r
-       int ScrollDelay;\r
-       int ScrollInterval;\r
-       int MouseOpDist;\r
-       int MouseOpDelay;\r
        SCROLL_TYPE prev_vert;\r
        SCROLL_TYPE prev_horz;\r
 \r
@@ -151,7 +149,7 @@ public:
        void apply_template_on_memory( char* pcTpl, int tpl_len, SimpleArray<char>& ResultArray );\r
        void apply_template(char *pcTemplate);\r
        void CMD_apply_template();\r
-       void dropfiles(HDROP);\r
+       virtual void STDMETHODCALLTYPE dropfiles(HDROP);\r
        void CMD_open_partially();\r
        void CMD_clear_all_bmk();\r
        void CMD_remove_bkm();\r
@@ -225,6 +223,7 @@ public:
        Settings *STDMETHODCALLTYPE get_settings();\r
        Status *STDMETHODCALLTYPE get_status();\r
        int STDMETHODCALLTYPE translate_accelerator(MSG *);\r
+       BOOL STDMETHODCALLTYPE load_lang(LANGID);\r
 \r
        virtual int STDMETHODCALLTYPE load_file(const char* fname);\r
        int file_is_loadable(const char* fname);\r
@@ -238,10 +237,10 @@ public:
        void vscroll(int cmd);\r
        void hscroll(int cmd);\r
        int paint();\r
-       int command(int cmd);\r
+       virtual void STDMETHODCALLTYPE command(int cmd);\r
        int destroy_window();\r
        virtual void STDMETHODCALLTYPE set_wnd_title();\r
-       void set_caret_pos ();\r
+       void set_caret_pos();\r
        void print_text(HDC hdc, int x, int y, char *pch, int cch);\r
        virtual HRESULT STDMETHODCALLTYPE ResolveIt(LPCSTR lpszLinkFile, LPSTR lpszPath);\r
 \r
@@ -257,6 +256,10 @@ protected:
 //Pabs inserted\r
        int bMakeBackups;//Backup the file when saving\r
 //end\r
+       static int ScrollDelay;\r
+       static int ScrollInterval;\r
+       static int MouseOpDist;\r
+       static int MouseOpDelay;\r
        static SimpleString TexteditorName;\r
        static SimpleString EncodeDlls;\r
        static int iPasteAsText;\r
@@ -267,7 +270,7 @@ protected:
        int iBmkCount;\r
        bookmark pbmkList[BMKMAX];\r
        int iMRU_count;\r
-       char strMRU[MRUMAX][_MAX_PATH+1];\r
+       char strMRU[MRUMAX][_MAX_PATH];\r
        int bFilestatusChanged;\r
        int bScrollTimerSet;\r
        int iMouseX, iMouseY;\r
@@ -297,6 +300,9 @@ protected:
 \r
 void reverse_bytes(BYTE *, BYTE *);\r
 \r
+void NTAPI TranslateDialog(HWND);\r
+INT_PTR NTAPI ShowModalDialog(UINT, HWND, DLGPROC, LPVOID);\r
+\r
 class WaitCursor\r
 {\r
 private:\r
@@ -318,13 +324,16 @@ class dialog : public T
        static INT_PTR CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)\r
        {\r
                if (uMsg == WM_INITDIALOG)\r
+               {\r
                        SetWindowLong(hWnd, DWL_USER, lParam);\r
+                       TranslateDialog(hWnd);\r
+               }\r
                return ((T *)GetWindowLong(hWnd, DWL_USER))->DlgProc(hWnd, uMsg, wParam, lParam);\r
        }\r
 public:\r
        INT_PTR DoModal(HWND hWnd)\r
        {\r
-               return DialogBoxParam(hMainInstance, MAKEINTRESOURCE(IDD), hWnd, DlgProc, (LPARAM)this);\r
+               return ShowModalDialog(IDD, hWnd, DlgProc, this);\r
        }\r
 };\r
 \r
@@ -335,25 +344,6 @@ template<class T> inline void swap(T& x, T& y)
        y = temp;\r
 }\r
 \r
-//--------------------------------------------------------------------------------------------\r
-// MAKROS\r
-//Pabs replaced iOffsetLen w iMaxOffsetLen\r
-#define CHARSTART (iMaxOffsetLen + iByteSpace + iBytesPerLine * 3 + iCharSpace)\r
-#define BYTEPOS (iCurByte % iBytesPerLine)\r
-#define BYTELINE (iCurByte / iBytesPerLine)\r
-#define BYTES_LOGICAL_COLUMN (iMaxOffsetLen + iByteSpace + BYTEPOS * 3 + iCurNibble)\r
-//end\r
-#define CHARS_LOGICAL_COLUMN (CHARSTART + BYTEPOS)\r
-#define STARTSELECTION_LINE (iStartOfSelection / iBytesPerLine)\r
-#define ENDSELECTION_LINE (iEndOfSelection / iBytesPerLine)\r
-#define IN_BOUNDS( i, a, b ) ( ( i >= a && i <= b ) || ( i >= b && i <= a ) )\r
-#define BYTES 0 // for EnteringMode\r
-#define CHARS 1\r
-#define WM_F1DOWN (WM_USER+1)\r
-\r
-//============================================================================================\r
-// The main window object.\r
-\r
 extern HINSTANCE hMainInstance;\r
 extern int iMovePos;\r
 enum OPTYP { OPTYP_MOVE, OPTYP_COPY };\r
index fc7ab0c..52566a6 100644 (file)
@@ -1,7 +1,6 @@
 #include "precomp.h"\r
 #include "ido.h"\r
 #include "hexwnd.h"\r
-#include <shlwapi.h>\r
 \r
 /*The #ifndef __CYGWIN__s are there because cygwin/mingw doesn't yet have\r
 certain APIs in their import libraries. Specifically _wremove, _wopen & GetEnhMetaFileBits.*/\r
index d5ca632..dd683ca 100644 (file)
@@ -35,7 +35,7 @@ INT_PTR DragDropDlg::DlgProc(HWND h, UINT m, WPARAM w, LPARAM l)
                        if (numformatetcs && formatetcs)\r
                        {\r
                                LVCOLUMN col;\r
-                               Zero(col);\r
+                               ZeroMemory(&col, sizeof col);\r
                                ListView_InsertColumn(list, 0, &col);\r
                                char szFormatName[100];\r
                                UINT i;\r
@@ -105,26 +105,26 @@ INT_PTR DragDropDlg::DlgProc(HWND h, UINT m, WPARAM w, LPARAM l)
                {\r
                case IDOK:\r
                        {\r
-                               effect = IsDlgButtonChecked( h, IDC_MOVE ) ? false : true;\r
+                               effect = !IsDlgButtonChecked(h, IDC_MOVE);\r
                                HWND list = GetDlgItem(h, IDC_LIST);\r
                                numformats = ListView_GetSelectedCount(list);\r
-                               if( numformats ){\r
-                                       for(;;)\r
+                               if (numformats)\r
+                               {\r
+                                       formats = (UINT*)malloc(numformats * sizeof *formats);\r
+                                       if (formats == 0)\r
                                        {\r
-                                               formats = (UINT*)malloc( numformats*sizeof(*formats) );\r
-                                               if(formats) break;\r
-                                               numformats--; //numformats/=2; //Or this\r
+                                               MessageBox(h, "Not enough memory", "Drag-drop", MB_ICONERROR);\r
+                                               return TRUE;\r
                                        }\r
-                                       if( formats ){\r
-                                               LVITEM temp;\r
-                                               Zero(temp);\r
-                                               temp.mask = LVIF_PARAM;\r
-                                               temp.iItem = -1;\r
-                                               for( UINT i = 0; i < numformats; i++ ){\r
-                                                       temp.iItem = ListView_GetNextItem(list, temp.iItem, LVNI_SELECTED);\r
-                                                       ListView_GetItem(list,&temp);\r
-                                                       formats[i] = temp.lParam;\r
-                                               }\r
+                                       LVITEM temp;\r
+                                       ZeroMemory(&temp, sizeof temp);\r
+                                       temp.mask = LVIF_PARAM;\r
+                                       temp.iItem = -1;\r
+                                       for (UINT i = 0 ; i < numformats ; i++)\r
+                                       {\r
+                                               temp.iItem = ListView_GetNextItem(list, temp.iItem, LVNI_SELECTED);\r
+                                               ListView_GetItem(list, &temp);\r
+                                               formats[i] = temp.lParam;\r
                                        }\r
                                }\r
                                EndDialog (h, 1);\r
@@ -138,8 +138,7 @@ INT_PTR DragDropDlg::DlgProc(HWND h, UINT m, WPARAM w, LPARAM l)
                        {\r
                                HWND list = GetDlgItem(h, IDC_LIST);\r
                                LVITEM item[2];\r
-                               Zero(item[0]);\r
-                               Zero(item[1]);\r
+                               ZeroMemory(item, sizeof item);\r
                                //If anyone knows a better way to swap two items please send a patch\r
                                item[0].iItem = ListView_GetNextItem(list, (UINT)-1, LVNI_SELECTED);\r
                                if(item[0].iItem==-1) item[0].iItem = ListView_GetNextItem(list, (UINT)-1, LVNI_FOCUSED);\r
@@ -652,12 +651,11 @@ STDMETHODIMP CDropTarget::Drop( IDataObject* pDataObject, DWORD grfKeyState, POI
                                //Get data\r
                                switch( stm.tymed ){\r
                                        case TYMED_HGLOBAL:{\r
-                                               LPVOID pmem = GlobalLock( stm.hGlobal );\r
-                                               if( pmem ){\r
-                                                       try{ memcpy( data, pmem, len ); }\r
-                                                       catch(...){}\r
+                                               if (LPVOID pmem = GlobalLock(stm.hGlobal))\r
+                                               {\r
+                                                       memcpy(data, pmem, len);\r
                                                        gotdata = true;\r
-                                                       GlobalUnlock( stm.hGlobal );\r
+                                                       GlobalUnlock(stm.hGlobal);\r
                                                }\r
                                        } break;\r
 #ifndef __CYGWIN__\r
@@ -691,15 +689,12 @@ STDMETHODIMP CDropTarget::Drop( IDataObject* pDataObject, DWORD grfKeyState, POI
                                                }\r
                                        } break;//HBITMAP\r
                                        case TYMED_MFPICT:{\r
-                                               METAFILEPICT*pMFP=(METAFILEPICT*)GlobalLock( stm.hMetaFilePict );\r
-                                               if( pMFP ){\r
-                                                       try{\r
-                                                               memcpy( data, pMFP, sizeof(*pMFP) );\r
-                                                               GetMetaFileBitsEx( pMFP->hMF, len - sizeof(*pMFP), &data[sizeof(*pMFP)] );\r
-                                                               GlobalUnlock( stm.hMetaFilePict );\r
-                                                               gotdata = true;\r
-                                                       }\r
-                                                       catch(...){}\r
+                                               if (METAFILEPICT *pMFP = (METAFILEPICT *)GlobalLock(stm.hMetaFilePict))\r
+                                               {\r
+                                                       memcpy(data, pMFP, sizeof *pMFP);\r
+                                                       GetMetaFileBitsEx( pMFP->hMF, len - sizeof(*pMFP), &data[sizeof(*pMFP)] );\r
+                                                       GlobalUnlock( stm.hMetaFilePict );\r
+                                                       gotdata = true;\r
                                                }\r
                                        } break;//HMETAFILE\r
 #ifndef __CYGWIN__\r
@@ -736,9 +731,9 @@ STDMETHODIMP CDropTarget::Drop( IDataObject* pDataObject, DWORD grfKeyState, POI
                                                len = *(DWORD*)data;\r
                                                DataToInsert += 4;\r
                                        } else if( fe.cfFormat == CF_TEXT || fe.cfFormat == CF_OEMTEXT ){\r
-                                               try { len = strlen( (char*)data ); } catch(...){}\r
+                                               len = strlen( (char*)data );\r
                                        } else if( fe.cfFormat == CF_UNICODETEXT ){\r
-                                               try { len = sizeof(wchar_t)*wcslen( (wchar_t*)data ); } catch(...){}\r
+                                               len = sizeof(wchar_t)*wcslen( (wchar_t*)data );\r
                                        }\r
 \r
                                        //Insert/overwrite data into DataArray\r
index 7104e0b..a08641a 100644 (file)
@@ -7,10 +7,22 @@
 #include "toolbar.h"\r
 \r
 static const char szMainClass[] = "frhed wndclass";\r
-static const char szHexClass[] = "frhed hexclass";\r
+static const char szHexClassA[] = "hekseditA_" CURRENT_VERSION "." SUB_RELEASE_NO;\r
+static const char szHexClassW[] = "hekseditW_" CURRENT_VERSION "." SUB_RELEASE_NO;\r
 \r
 HINSTANCE hMainInstance;\r
-LRESULT CALLBACK MainWndProc (HWND, UINT, WPARAM, LPARAM);\r
+LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);\r
+\r
+static BOOL NTAPI IsNT()\r
+{\r
+       OSVERSIONINFO osvi;\r
+       ZeroMemory(&osvi, sizeof osvi);\r
+       osvi.dwOSVersionInfoSize = sizeof osvi;\r
+       if (!GetVersionEx(&osvi))\r
+               osvi.dwPlatformId = 0;\r
+       return osvi.dwPlatformId == VER_PLATFORM_WIN32_NT;\r
+}\r
+\r
 \r
 static BOOL CALLBACK WndEnumProcCountInstances(HWND hwnd, LPARAM lParam)\r
 {\r
@@ -32,6 +44,7 @@ static HexEditorWindow *pHexWnd = 0;
 \r
 int WINAPI WinMain(HINSTANCE hIconInstance, HINSTANCE, char *szCmdLine, int)\r
 {\r
+       OleInitialize(NULL);\r
        InitCommonControls();\r
 \r
        hMainInstance = LoadLibrary("heksedit.dll");\r
@@ -41,7 +54,7 @@ int WINAPI WinMain(HINSTANCE hIconInstance, HINSTANCE, char *szCmdLine, int)
        MSG msg;\r
 \r
        WNDCLASS wndclass;\r
-       Zero(wndclass);\r
+       ZeroMemory(&wndclass, sizeof wndclass);\r
 \r
        //Register the main window class\r
        wndclass.style = CS_HREDRAW | CS_VREDRAW;\r
@@ -54,8 +67,6 @@ int WINAPI WinMain(HINSTANCE hIconInstance, HINSTANCE, char *szCmdLine, int)
 \r
        RegisterClass(&wndclass);\r
 \r
-       OleInitialize(NULL);\r
-\r
        int iInstCount = 0;\r
        EnumWindows(WndEnumProcCountInstances, (LPARAM)&iInstCount);\r
 \r
@@ -85,7 +96,7 @@ int WINAPI WinMain(HINSTANCE hIconInstance, HINSTANCE, char *szCmdLine, int)
        ShowWindow(hwndMain, pHexWnd->iWindowShowCmd);\r
        UpdateWindow(hwndMain);\r
 \r
-       if (szCmdLine != NULL && strlen(szCmdLine) != 0)\r
+       if (*szCmdLine != '\0')\r
        {\r
                // Command line not empty: open a file on startup.\r
                char *p = szCmdLine;\r
@@ -126,7 +137,7 @@ int WINAPI WinMain(HINSTANCE hIconInstance, HINSTANCE, char *szCmdLine, int)
                if (SUCCEEDED(hres))\r
                {\r
                        // Trying to open a link file: decision by user required.\r
-                       int ret = MessageBox( hwndMain,\r
+                       int ret = MessageBox(hwndMain,\r
                                "You are trying to open a link file.\n"\r
                                "Click on Yes if you want to open the file linked to,\n"\r
                                "or click on No if you want to open the link file itself.\n"\r
@@ -148,7 +159,8 @@ int WINAPI WinMain(HINSTANCE hIconInstance, HINSTANCE, char *szCmdLine, int)
                {\r
                        pHexWnd->load_file(szCmdLine);\r
                }\r
-               if (dwEnd) pHexWnd->CMD_setselection(dwStart, dwEnd);\r
+               if (dwEnd)\r
+                       pHexWnd->CMD_setselection(dwStart, dwEnd);\r
        }\r
 \r
        while (GetMessage(&msg, NULL, 0, 0))\r
@@ -160,45 +172,55 @@ int WINAPI WinMain(HINSTANCE hIconInstance, HINSTANCE, char *szCmdLine, int)
                }\r
        }\r
 \r
+       FreeLibrary(hMainInstance);\r
        OleUninitialize();\r
-\r
+       _CrtDumpMemoryLeaks();\r
        return msg.wParam;\r
 }\r
 \r
 //--------------------------------------------------------------------------------------------\r
 // The main window procedure.\r
-LRESULT CALLBACK MainWndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam )\r
+LRESULT CALLBACK MainWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)\r
 {\r
-       switch (iMsg) {\r
-               case WM_CREATE:\r
-                       hwndMain = hwnd;\r
-                       DragAcceptFiles(hwnd, TRUE); // Accept files dragged into main window.\r
-                       hwndToolBar = CreateTBar(hwnd, hMainInstance);\r
-                       hwndHex = CreateWindowEx(WS_EX_CLIENTEDGE, szHexClass, 0,\r
-                               WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL,\r
-                               10, 10, 100, 100, hwnd, 0, hMainInstance, 0);\r
-                       pHexWnd = (HexEditorWindow *)GetWindowLong(hwndHex, GWL_USERDATA);\r
-                       hwndStatusBar = CreateStatusWindow(\r
-                               CCS_BOTTOM | WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP,\r
-                               "Ready", hwnd, 2);\r
-                       pHexWnd->hwndMain = hwnd;\r
-                       pHexWnd->hwndToolBar = hwndToolBar;\r
-                       pHexWnd->hwndStatusBar = hwndStatusBar;\r
-                       pHexWnd->bSaveIni = TRUE;\r
-                       pHexWnd->bCenterCaret = TRUE;\r
-                       pHexWnd->set_wnd_title();\r
+       switch (iMsg)\r
+       {\r
+       case WM_CREATE:\r
+               hwndMain = hwnd;\r
+               DragAcceptFiles(hwnd, TRUE); // Accept files dragged into main window.\r
+               hwndToolBar = CreateTBar(hwnd, hMainInstance);\r
+               hwndHex = CreateWindowEx(WS_EX_CLIENTEDGE,\r
+                       IsNT() ? szHexClassW : szHexClassA, 0,\r
+                       WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL,\r
+                       10, 10, 100, 100, hwnd, 0, hMainInstance, 0);\r
+               pHexWnd = (HexEditorWindow *)GetWindowLong(hwndHex, GWL_USERDATA);\r
+               hwndStatusBar = CreateStatusWindow(\r
+                       CCS_BOTTOM | WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP,\r
+                       "Ready", hwnd, 2);\r
+               pHexWnd->hwndMain = hwnd;\r
+               pHexWnd->hwndToolBar = hwndToolBar;\r
+               pHexWnd->hwndStatusBar = hwndStatusBar;\r
+               pHexWnd->bSaveIni = TRUE;\r
+               pHexWnd->bCenterCaret = TRUE;\r
+               pHexWnd->set_wnd_title();\r
+               return 0;\r
+       case WM_COMMAND:\r
+               pHexWnd->command(LOWORD(wParam));\r
+               break;\r
+       case WM_DROPFILES:\r
+               pHexWnd->dropfiles(reinterpret_cast<HDROP>(wParam));\r
+               break;\r
+       case WM_SETFOCUS:\r
+               SetFocus(hwndHex);\r
+               break;\r
+       case WM_CLOSE: \r
+               if (!pHexWnd->close())\r
                        return 0;\r
-               case WM_COMMAND: return SendMessage(hwndHex, iMsg, wParam, lParam);\r
-               case WM_SETFOCUS: SetFocus(hwndHex); break;\r
-               case WM_CLOSE: \r
-                       if (!pHexWnd->close())\r
-                               return 0;\r
-                       break;\r
-               //return SendMessage(hwndHex, iMsg, wParam, lParam);\r
-               case WM_INITMENUPOPUP: pHexWnd->initmenupopup( wParam, lParam ); return 0;\r
-               case WM_DROPFILES: return SendMessage(hwndHex, iMsg, wParam, lParam);\r
-\r
-               case WM_SIZE:{\r
+               break;\r
+       case WM_INITMENUPOPUP:\r
+               pHexWnd->initmenupopup(wParam, lParam);\r
+               break;\r
+       case WM_SIZE:\r
+               {\r
                        SendMessage(hwndStatusBar, WM_SIZE, 0 , 0); //Moves status bar back to the bottom\r
                        SendMessage(hwndToolBar, WM_SIZE, 0 , 0); //Moves tool bar back to the top\r
 \r
@@ -215,46 +237,35 @@ LRESULT CALLBACK MainWndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam
                        int iToolbarHeight = rect.bottom - rect.top;\r
                        GetClientRect(hwndStatusBar, &rect);\r
                        MoveWindow(hwndHex, 0, iToolbarHeight, LOWORD(lParam), HIWORD(lParam)-rect.bottom-iToolbarHeight, TRUE);\r
-                       break;\r
                }\r
-\r
-               case WM_NOTIFY:{\r
-                       //See if someone sent us invalid data\r
-                       HWND h;\r
-                       UINT code;\r
-                       try{\r
-                               //Attempt to dereference\r
-                               NMHDR& pn = *(NMHDR*)lParam;\r
-                               h = pn.hwndFrom;\r
-                               code = pn.code;\r
-                       }\r
-                       catch(...){ return 0; }\r
-\r
-                       if (h == hwndStatusBar)\r
+               break;\r
+       case WM_NOTIFY:\r
+               {\r
+                       NMHDR *pn = (NMHDR *)lParam;\r
+                       HWND hwndFrom = pn->hwndFrom;\r
+                       UINT code = pn->code;\r
+                       if (hwndFrom == hwndStatusBar)\r
                        {\r
-                               if(code == NM_CLICK || code == NM_RCLICK)\r
+                               if (code == NM_CLICK || code == NM_RCLICK)\r
                                        pHexWnd->status_bar_click(code == NM_CLICK);\r
                        }\r
-                       else if (h == hwndToolBar)\r
+                       else if (hwndFrom == hwndToolBar)\r
                        {\r
-                               if (code == TBN_GETINFOTIPA || code == TBN_GETINFOTIPW)\r
+                               if (code == TBN_GETINFOTIPA)\r
                                {\r
-                                       try{\r
-                                               if(code == TBN_GETINFOTIPA){\r
-                                                       NMTBGETINFOTIPA& pi = *(NMTBGETINFOTIPA*) lParam;\r
-                                                       LoadStringA(hMainInstance,pi.iItem,pi.pszText,pi.cchTextMax);\r
-                                               } else {\r
-                                                       NMTBGETINFOTIPW& pi = *(NMTBGETINFOTIPW*) lParam;\r
-                                                       LoadStringW(hMainInstance,pi.iItem,pi.pszText,pi.cchTextMax);\r
-                                               }\r
-                                       }\r
-                                       catch(...){}\r
+                                       NMTBGETINFOTIPA *pi = (NMTBGETINFOTIPA *)lParam;\r
+                                       LoadStringA(hMainInstance, pi->iItem, pi->pszText, pi->cchTextMax);\r
+                               }\r
+                               else if (code == TBN_GETINFOTIPW)\r
+                               {\r
+                                       NMTBGETINFOTIPW *pi = (NMTBGETINFOTIPW *)lParam;\r
+                                       LoadStringW(hMainInstance, pi->iItem, pi->pszText, pi->cchTextMax);\r
                                }\r
                        }\r
                }\r
-               return 0;\r
-\r
-               case WM_DESTROY: {\r
+               break;\r
+       case WM_DESTROY:\r
+               {\r
                        // Store window position for next startup.\r
                        WINDOWPLACEMENT wndpl;\r
                        wndpl.length = sizeof(WINDOWPLACEMENT);\r
@@ -268,21 +279,7 @@ LRESULT CALLBACK MainWndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam
                        DragAcceptFiles(hwndMain, FALSE);\r
                        PostQuitMessage(0);\r
                }\r
-               return 0;\r
-\r
+               break;\r
        }\r
        return DefWindowProc(hwnd, iMsg, wParam, lParam );\r
 }\r
-\r
-// The hex window procedure.\r
-/*LRESULT CALLBACK HexWndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam )\r
-{\r
-       if (iMsg == WM_NCCREATE)\r
-               SetWindowLong(hwnd, GWL_USERDATA, (LONG)new HexEditorWindow);\r
-       HexEditorWindow *pHexWnd = (HexEditorWindow *)GetWindowLong(hwnd, GWL_USERDATA);\r
-       LRESULT lResult = pHexWnd->OnWndMsg( hwnd, iMsg, wParam, lParam );\r
-       if (iMsg == WM_NCDESTROY)\r
-               delete pHexWnd;\r
-       return lResult;\r
-}*/\r
-//============================================================================================\r
index 2d90638..99791f7 100644 (file)
@@ -1,5 +1,9 @@
 #define _WIN32_WINNT 0x0501\r
 #include <windows.h>\r
+#include <windowsx.h>\r
+#include <crtdbg.h>\r
+#include <assert.h>\r
+#include <tchar.h>\r
 #include <io.h>\r
 #include <fcntl.h>\r
 #include <sys/stat.h>\r
@@ -7,8 +11,7 @@
 #include <string.h>\r
 #include <stdio.h>\r
 #include <commctrl.h>\r
-#include <objbase.h>\r
+#include <shlwapi.h>\r
 #include <shlobj.h>\r
 #include <limits.h>\r
 #include "gtools.h"\r
-#define Zero(a) memset(&(a),0,sizeof(a))\r
diff --git a/Externals/heksedit/res/Toolbar.bmp b/Externals/heksedit/res/Toolbar.bmp
new file mode 100644 (file)
index 0000000..2285cae
Binary files /dev/null and b/Externals/heksedit/res/Toolbar.bmp differ
diff --git a/Externals/heksedit/res/icon1.ico b/Externals/heksedit/res/icon1.ico
new file mode 100644 (file)
index 0000000..35a6307
Binary files /dev/null and b/Externals/heksedit/res/icon1.ico differ
index 9f2ab82..2045f53 100644 (file)
@@ -1,5 +1,5 @@
 //{{NO_DEPENDENCIES}}\r
-// Microsoft Developer Studio generated include file.\r
+// Microsoft Visual C++ generated include file.\r
 // Used by heksedit.rc\r
 //\r
 #define IDC_UP                          100\r
@@ -85,7 +85,6 @@
 #define IDC_STATIC4                     169\r
 #define IDC_BUTTON1                     170\r
 #define IDC_FINDNEXT_BUTTON             171\r
-#define IDC_ST_VERSION                  171\r
 #define IDC_TYPE                        172\r
 #define IDC_FINDPREVIOUS_BUTTON         173\r
 #define IDC_BROWSE                      174\r
 #define IDC_TEXT_DISPLAY                1079\r
 #define IDC_ENABLE_DROP                 1080\r
 #define IDC_EXPORTDIGITS                1081\r
+#define IDC_APPICON                     1082\r
 #define IDM_OLE_DRAG_DROP               40142\r
 \r
 // Next default values for new objects\r
 #define _APS_NO_MFC                     1\r
 #define _APS_NEXT_RESOURCE_VALUE        145\r
 #define _APS_NEXT_COMMAND_VALUE         40143\r
-#define _APS_NEXT_CONTROL_VALUE         1082\r
+#define _APS_NEXT_CONTROL_VALUE         1083\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
index 3661f0f..99cdf51 100644 (file)
@@ -1,5 +1,4 @@
 #include "precomp.h"\r
-#include <shlwapi.h>\r
 #include "shtools.h"\r
 /*Pabs inserted func\r
 Create link files for registry menu\r
index 7b36873..5c89d44 100644 (file)
@@ -28,23 +28,6 @@ TBBUTTON tbButtons[] = // Array defining the toolbar buttons
        { 12, ID_DISK_GOTOLASTTRACK,     0,               TBSTYLE_BUTTON, 0, 0 }\r
 };\r
 \r
-/*LRESULT HexEditorWindow::SetTooltipText(LPTOOLTIPTEXT lpToolTipText)\r
-{\r
-       UNREFERENCED_PARAMETER( hWnd );\r
-       static char szBuffer[64];\r
-       if ((lpToolTipText->hdr.code == TTN_NEEDTEXTA) ||\r
-               (lpToolTipText->hdr.code == TTN_NEEDTEXTW))\r
-       {\r
-               LoadString(hMainInstance,\r
-               lpToolTipText->hdr.idFrom, // string ID == command ID\r
-               szBuffer,\r
-               sizeof(szBuffer));\r
-\r
-               lpToolTipText->lpszText = szBuffer;\r
-       }\r
-       return 0;\r
-}*/\r
-\r
 HWND CreateTBar(HWND hWnd, HINSTANCE hInst)\r
 {\r
        HWND hwndToolBar = CreateToolbarEx(hWnd,\r
index 63dcf05..10e35cd 100644 (file)
@@ -1,2 +1,3 @@
-#define CURRENT_VERSION "1.1"\r
-#define SUB_RELEASE_NO "0"\r
+#define FRHED_MAJOR_VERSION 1\r
+#define FRHED_MINOR_VERSION 2\r
+#define FRHED_SUB_RELEASE_NO 1\r
diff --git a/Externals/heksedit/version.rc b/Externals/heksedit/version.rc
new file mode 100644 (file)
index 0000000..7487748
--- /dev/null
@@ -0,0 +1,45 @@
+#include "version.h"\r
+\r
+#define SHARPEN_A(X) #X\r
+#define SHARPEN_W(X) L#X\r
+#define SHARPEN(T,X) SHARPEN_##T(X)\r
+\r
+#define CURRENT_VERSION SHARPEN(A,FRHED_MAJOR_VERSION) "." SHARPEN(A,FRHED_MINOR_VERSION)\r
+#define SUB_RELEASE_NO SHARPEN(A,FRHED_SUB_RELEASE_NO)\r
+\r
+VS_VERSION_INFO VERSIONINFO\r
+ FILEVERSION FRHED_MAJOR_VERSION,FRHED_MINOR_VERSION,FRHED_SUB_RELEASE_NO,0\r
+ PRODUCTVERSION FRHED_MAJOR_VERSION,FRHED_MINOR_VERSION,FRHED_SUB_RELEASE_NO,0\r
+ FILEFLAGSMASK 0x3fL\r
+#ifdef _DEBUG\r
+ FILEFLAGS 0x21L\r
+#else\r
+ FILEFLAGS 0x20L\r
+#endif\r
+ FILEOS 0x40004L\r
+ FILETYPE 0x1L\r
+ FILESUBTYPE 0x0L\r
+BEGIN\r
+    BLOCK "StringFileInfo"\r
+    BEGIN\r
+        BLOCK "040904e4"\r
+        BEGIN\r
+            VALUE "Comments", "Homepage: http://www.kibria.de, http://zip.to/pabs3\0"\r
+            VALUE "CompanyName", "(c) Raihan Kibria 2000\0"\r
+            VALUE "FileDescription", "frhed - free hex editor " CURRENT_VERSION "." SUB_RELEASE_NO\r
+            VALUE "FileVersion", CURRENT_VERSION "." SUB_RELEASE_NO\r
+            VALUE "InternalName", "frhed\0"\r
+            VALUE "LegalCopyright", "GNU General Public License v2.0\0"\r
+            VALUE "LegalTrademarks", "\0"\r
+            VALUE "OriginalFilename", "frhed.exe\0"\r
+            VALUE "PrivateBuild", "\0"\r
+            VALUE "ProductName", "frhed\0"\r
+            VALUE "ProductVersion", CURRENT_VERSION "." SUB_RELEASE_NO\r
+            VALUE "SpecialBuild", "\0"\r
+        END\r
+    END\r
+    BLOCK "VarFileInfo"\r
+    BEGIN\r
+        VALUE "Translation", 0x409, 1252\r
+    END\r
+END\r