windows xp下的NOTEPAD用最新x86插件转换的结果
2013-07-25 15:57
417 查看
windows xp下的NOTEPAD用最新ida x86 1.8插件转换的结果
转换结果非常理想文字限制发一半吧!
大老
博客:http://blog.sina.com.cn/dalao
网站: http://www.40440.cn
qq:79234668
201307
以下是转换结果
/* This file has been generated by the Hex-Rays decompiler.
Copyright (c) 2007-2013 Hex-Rays <info@hex-rays.com>
Detected compiler: Visual C++
*/
#include <windows.h>
#include <defs.h>
//-------------------------------------------------------------------------
// Function declarations
#define __thiscall __cdecl // Test compile in C mode
#define __thiscall __cdecl // Test compile in C mode
HGLOBAL __cdecl FreeGlobal();
LONG __thiscall SetPageSetupDefaults(void *this);
int __stdcall NPSize(int nWidth, int); // idb
int __stdcall NpSaveDialogHookProc(HWND hWndParent, int, HWND hWnd, int); // idb
LRESULT __stdcall GotoAndScrollInView(int a1);
LPWSTR __stdcall SkipProgramName(WCHAR *lpsz);
LRESULT __stdcall UpdateStatusBar(int a1);
LRESULT __stdcall WinEventFunc(int a1, int a2, int a3, int a4, int a5, int a6, int a7);
const WCHAR *__stdcall PFileInPath(LPCWSTR lpsz);
DWORD __stdcall NpResetMenu(HWND hWndNewOwner);
signed int __stdcall MergeStrings(int a1, int a2, int a3);
int __stdcall AlertBox(HWND hWnd, LPCWSTR lpCaption, LPCWSTR lpText, LPCWSTR lpString, UINT uType); // idb
DWORD __cdecl SignalCommDlgError();
__int32 __stdcall ReplaceSel(int a1);
signed int __stdcall GotoDlgProc(HWND hWnd, int a2, HWND a3, int a4);
int __stdcall fDetermineFileType(int lpv, int iSize);
HRESULT __stdcall StringCopyWorkerW(STRSAFE_LPWSTR pszDest, size_t cchDest, size_t *pcchNewDestLength, STRSAFE_PCNZWCH pszSrc, size_t cchToCopy);
signed int __stdcall NpOpenDialogHookProc(DWORD hDlg, int a2, DWORD hWndMain, int a4);
signed int __stdcall CheckSave(int a1);
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);
int __stdcall SetTitle(LPCWSTR pcchNewDestLength); // idb
signed int __stdcall NPCommand(WPARAM hWnd, unsigned __int16 a2, int a3);
signed int __cdecl FileDragOpen();
void __stdcall doDrop(HDROP hDrop, HWND hWnd);
signed int __stdcall NPWndProc(HWND hWnd, UINT Msg, WPARAM hDrop, __int32 a4);
LSTATUS __stdcall RegWriteInt(HKEY hKey, LPCWSTR lpValueName, BYTE Data);
LSTATUS __stdcall RegWriteString(HKEY hKey, LPCWSTR lpValueName, LPCWSTR lpData);
int __stdcall RegGetInt(HKEY hKey, LPCWSTR lpValueName, int); // idb
LSTATUS __stdcall RegGetString(HKEY Type, LPCWSTR lpValueName, const void *a3, LPBYTE lpData, DWORD cbData);
LSTATUS __cdecl SaveGlobals();
LSTATUS __cdecl GetGlobals();
// signed int __usercall sub_1003F4C(WCHAR **a1, unsigned __int16 *a2);
LPCWSTR __stdcall GetFileName(LPWSTR lpFileName, LPCWSTR lpString2);
HLOCAL __stdcall SizeStrings(HINSTANCE hInstance);
HLOCAL __stdcall InitStrings(HINSTANCE hInstance);
int __stdcall SkipBlanks(int a1);
signed int __stdcall ProcessSetupOption(WCHAR **a1);
signed int __stdcall ProcessShellOptions(WCHAR **a1, int nCmdShow);
HFILTER __stdcall CreateFilter();
int __stdcall EnumProc(int a1, int a2, int a3, int a4);
// BOOL __usercall sub_10044D7(HINSTANCE a1);
signed int __stdcall NPInit(HINSTANCE hInstance, int a2, __int32 a3, int nCmdShow);
void __stdcall ReverseEndian(int a1, int a2, int a3);
int __stdcall AnsiWriteFile(HANDLE hFile, UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar); // idb
LRESULT __cdecl ClearFmt();
LRESULT __cdecl RestoreFmt();
__int32 __stdcall New(int a1);
WCHAR *__stdcall AddExt(LPCWSTR lpString1);
int __stdcall AlertUser_FileFail(LPCWSTR lpString); // idb
int __stdcall SaveFile(HWND hWnd, LPCWSTR lpString, LPCWSTR lpBuffer); // idb
int __stdcall LoadFile(LPCWSTR lpString, int); // idb
const wchar_t *__stdcall ReverseScan(const WCHAR *a1, const wchar_t *a2, LPCWSTR Str2, int a4);
int __stdcall ForwardScan(wchar_t *lpString1, LPCWSTR Str2, int); // idb
int __stdcall Search(LPCWSTR Str2); // idb
int __stdcall NpReCreate(DWORD hWnd); // idb
BOOL __stdcall AbortProc(int a1, int a2);
int __stdcall GetResolutions(HDC hdc); // idb
HDC __cdecl GetPrinterDCviaDialog();
BOOL __cdecl DestroyAbortWnd();
int __stdcall PageSetupHookProc(HWND hDlg, int, HWND hWndMain, int); // idb
int *__stdcall TranslateString(int a1);
signed int __cdecl GetPrinterDC();
signed int __cdecl GetNonDefPrinterDC();
signed int __stdcall AbortDlgProc(HWND hWnd, int a2, int a3, int a4);
int __stdcall PrintHeaderFooter(HDC hdc, int y); // idb
signed int __stdcall NpPrintGivenDC(HDC a1);
signed int __stdcall NpPrint(int a1);
int __stdcall PrintIt(int a1);
LRESULT __stdcall InsertDateTime(int a1);
signed int __stdcall IsTextUTF8(int a1, int a2);
BOOL __stdcall IsInputTextUnicode(const void *lpv, int iSize);
int __cdecl __security_init_cookie();
// BOOL __usercall __report_gsfailure(int a1, int a2, int a3, int a4, int a5, int a6);
int __stdcall sub_100725F(LPBYTE lpData); // idb
HWND __stdcall HtmlHelpA(HWND hwndCaller, LPCSTR pszFile, UINT uCommand, DWORD_PTR dwData);
// BOOL __stdcall ClosePrinter(HANDLE hPrinter);
// BOOL __stdcall GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded);
// BOOL __stdcall OpenPrinterW(LPWSTR pPrinterName, LPHANDLE phPrinter, LPPRINTER_DEFAULTSW pDefault);
int __cdecl WinMainCRTStartup();
// int __cdecl _initterm(_DWORD, _DWORD); weak
unsigned int __cdecl _setdefaultprecision();
int __cdecl _setargv();
// unsigned int __cdecl _controlfp(unsigned int NewValue, unsigned int Mask);
//-------------------------------------------------------------------------
// Data declarations
// extern int __acmdln; weak
// extern int __adjust_fdiv; weak
int s_SaveAsHelpIDs[6] = { 257, 1002, 259, 1002, 0, 0 }; // weak
int s_GotoHelpIDs[4] = { 258, 1003, 0, 0 }; // weak
const WCHAR szOtherStuff = 0u; // idb
int s_PageSetupHelpIDs[10] = { 32, 1001, 30, 1001, 33, 1000, 31, 1000, 0, 0 }; // weak
const WCHAR word_1001840 = 8206u; // idb
int dword_1001844 = 8207; // weak
char ValueName[8] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' }; // idb
_UNKNOWN __xc_a; // weak
_UNKNOWN __xc_z; // weak
_UNKNOWN __xi_a; // weak
_UNKNOWN __xi_z; // weak
BYTE iPointSize = 120u; // idb
int fUntitled = 1; // weak
int g_ftOpenedAs = 4294967295; // idb
LPCWSTR szDiskError = (LPCWSTR)1; // idb
LPCWSTR szFNF = (LPCWSTR)2; // idb
LPCWSTR szSCBC = (LPCWSTR)3; // idb
LPCWSTR szUntitled = (LPCWSTR)4; // idb
LPCWSTR szNpTitle = (LPCWSTR)5; // idb
LPCWSTR szCFS = (LPCWSTR)6; // idb
LPCWSTR szErrSpace = (LPCWSTR)7; // idb
LPCWSTR szFTL = (LPCWSTR)8; // idb
LPCWSTR szNN = (LPCWSTR)9; // idb
LPCWSTR szCP = (LPCWSTR)0xC; // idb
int szNVF = 13; // weak
LPCWSTR szCREATEERR = (LPCWSTR)0xE; // idb
LPCWSTR szNoWW = (LPCWSTR)0xF; // idb
int szMerge = 16; // weak
LPCWSTR szHelpFile = (LPCWSTR)0x11;
LPCWSTR szAnsiText = (LPCWSTR)0x14; // idb
LPCWSTR szAllFiles = (LPCWSTR)0x15; // idb
int szOpenCaption = 22; // weak
int szSaveCaption = 23; // weak
int szCannotQuit = 24; // weak
LPCWSTR szLoadDrvFail = (LPCWSTR)0x19; // idb
int szACCESSDENY = 26; // weak
LPCWSTR szErrUnicode = (LPCWSTR)0x1B; // idb
LPCWSTR szFontTooBig = (LPCWSTR)0x1C; // idb
wchar_t *szCommDlgErr = (wchar_t *)0x1D; // idb
LPCWSTR szLineError = (LPCWSTR)0x1E; // idb
LPCWSTR szLineTooLarge = (LPCWSTR)0x1F; // idb
LPARAM szFtAnsi = 32; // idb
LPARAM szFtUnicode = 33; // idb
LPARAM szFtUnicodeBe = 34; // idb
LPARAM szFtUtf8 = 35; // idb
wchar_t *szCurrentPage = (wchar_t *)0x24; // idb
wchar_t *szLineCol = (wchar_t *)0x25; // idb
int rgsz[9] =
{
16814132,
16814136,
16814140,
16814144,
16814156,
16814152,
16814148,
16814160,
16814164
}; // weak
__int16 *off_100919C = &szOtherStuff; // weak
int maperror[] = { 65535 }; // weak
int *off_10091A4 = &szErrSpace; // weak
_UNKNOWN BOM_UTF8; // weak
_UNKNOWN unk_10091E4; // weak
_UNKNOWN unk_10091E8; // weak
const WCHAR szFormattedDate = 89u; // idb
const WCHAR szFormattedTime = 89u; // idb
int __security_cookie_complement = 4294919359; // weak
int __security_cookie = 47936; // weak
int __defaultmatherr = 1; // weak
int dword_1009620 = 0; // weak
int dword_1009624 = 0; // weak
const WCHAR FileName = 0u; // idb
HWND hwndNP; // idb
HWND hwndStatus; // idb
HWND hwndEdit; // idb
HWND hDlgFind; // idb
BYTE fStatus; // idb
int fLastStatus; // weak
int dwEmSetHandle; // weak
int fRunBySetup; // weak
WPARAM fWrap; // idb
int fInSaveAsDlg; // weak
BYTE fMLE_is_broken; // idb
WPARAM dwCurrentSelectionStart; // idb
LPARAM dwCurrentSelectionEnd; // idb
const WCHAR String2; // idb
int nHeight; // idb
int nWidth; // idb
int X; // idb
int Y; // idb
int dword_1009A80; // idb
BYTE Data; // idb
LPARAM lParam; // idb
WPARAM wParam; // idb
int fCase; // idb
int fReverse; // weak
HMENU hMenu; // idb
HWND (__stdcall *pHtmlHelpA)(HWND, const char *, unsigned int, unsigned __int32); // weak
int dword_1009AA4; // weak
HMODULE hModule; // idb
int _dowildcard; // weak
int _newmode; // weak
int _commode; // weak
int _fmode;
int iPageNum; // weak
int dxRight; // weak
int dxLeft; // idb
int dyBottom; // weak
int dyTop; // weak
int yPhysOff; // weak
int xPhysOff; // weak
int yPhysRes; // idb
int xPhysRes; // idb
int yPixInch; // weak
int yPrintRes; // weak
int xPrintRes; // weak
struct _SYSTEMTIME PrintTime; // idb
wchar_t chBuff; // idb
const WCHAR word_1009D08; // idb
const WCHAR word_1009F10; // idb
struct tagPOINT rtMargin; // idb
int dword_100A128; // weak
int dword_100A12C; // weak
int yPrintChar; // weak
int fAbort; // weak
HWND hAbortDlgWnd; // idb
int tabSize; // weak
WCHAR szPrinterName; // idb
const WCHAR chPageTextTemp; // idb
const WCHAR word_100A390; // idb
WCHAR chPageText; // idb
WCHAR String1; // idb
HANDLE fp; // idb
int wHlpMsg; // weak
int wFRMsg; // weak
struct tagPSDW g_PageSetupDlg; // idb
struct tagFINDREPLACEW FR; // idb
int g_ftSaveAs; // weak
_UNKNOWN szSaveFilterSpec; // weak
_UNKNOWN szOpenFilterSpec; // weak
struct tagOFNW OFN; // idb
HACCEL hAccel; // idb
HMENU hSysMenuSetup; // idb
int dyStatus; // weak
_UNKNOWN szReplace; // weak
const WCHAR szSearch; // idb
const WCHAR szFileName; // idb
LOGFONTW FontStruct; // idb
HGDIOBJ hFont; // idb
HINSTANCE hInstanceNP; // idb
HCURSOR hWaitCursor; // idb
HCURSOR hStdCursor; // idb
HLOCAL hEdit; // idb
__int16 chMerge; // weak
int lGotoLine; // weak
int __onexitend; // weak
int __onexitbegin; // weak
int _adjust_fdiv; // weak
//----- (01001929) --------------------------------------------------------
HGLOBAL __cdecl FreeGlobal()
{
HGLOBAL result; // eax@3
if ( g_PageSetupDlg.hDevMode )
GlobalFree(g_PageSetupDlg.hDevMode);
result = g_PageSetupDlg.hDevNames;
if ( g_PageSetupDlg.hDevNames )
result = GlobalFree(g_PageSetupDlg.hDevNames);
g_PageSetupDlg.hDevMode = 0;
g_PageSetupDlg.hDevNames = 0;
return result;
}
//----- (0100195D) --------------------------------------------------------
LONG __thiscall SetPageSetupDefaults(void *this)
{
LONG result; // eax@2
void *LCData; // [sp+0h] [bp-4h]@1
LCData = this;
g_PageSetupDlg.lpfnPageSetupHook = (LPPAGESETUPHOOK)PageSetupHookProc;
g_PageSetupDlg.lpPageSetupTemplateName = (LPCWSTR)12;
GetLocaleInfoW(0x400u, 0xDu, (LPWSTR)&LCData, 2);
if ( (_WORD)LCData == 49 )
{
g_PageSetupDlg.rtMargin.top = 1000;
g_PageSetupDlg.rtMargin.bottom = 1000;
g_PageSetupDlg.Flags = 40966;
result = 750;
}
else
{
g_PageSetupDlg.rtMargin.top = 2500;
g_PageSetupDlg.rtMargin.bottom = 2500;
g_PageSetupDlg.Flags = 40970;
result = 2000;
}
g_PageSetupDlg.rtMargin.left = result;
g_PageSetupDlg.rtMargin.right = result;
return result;
}
//----- (010019E0) --------------------------------------------------------
BOOL __stdcall NPSize(int nWidth, int a2)
{
InvalidateRect(hwndEdit, 0, 1);
return MoveWindow(hwndEdit, 0, 0, nWidth, a2 - (*(_DWORD *)&fStatus != 0 ? dyStatus : 0), 1);
}
// 100A6E0: using guessed type int dyStatus;
//----- (01001A28) --------------------------------------------------------
signed int __stdcall NpSaveDialogHookProc(HWND hWndParent, int a2, HWND hWnd, int a4)
{
LPARAM v4; // ecx@6
HWND v5; // esi@13
int v6; // eax@15
int v7; // eax@18
struct tagPOINT Point; // [sp+4h] [bp-8h]@14
if ( a2 == 83 )
{
v7 = GetDlgCtrlID(*(HWND *)(a4 + 12));
if ( v7 != 257 && v7 != 259 )
return 0;
WinHelpW(*(HWND *)(a4 + 12), szHelpFile, 0xCu, (ULONG_PTR)s_SaveAsHelpIDs);
}
else
{
if ( a2 != 123 )
{
if ( a2 == 272 )
{
SendDlgItemMessageW(hWndParent, 257, 0x143u, 0, szFtAnsi);
SendDlgItemMessageW(hWndParent, 257, 0x143u, 0, szFtUnicode);
SendDlgItemMessageW(hWndParent, 257, 0x143u, 0, szFtUnicodeBe);
SendDlgItemMessageW(hWndParent, 257, 0x143u, 0, szFtUtf8);
v4 = szFtAnsi;
g_ftSaveAs = g_ftOpenedAs;
switch ( g_ftOpenedAs )
{
case 1:
v4 = szFtUnicode;
break;
case 2:
v4 = szFtUnicodeBe;
break;
case 3:
v4 = szFtUtf8;
break;
}
SendDlgItemMessageW(hWndParent, 257, 0x14Du, 0xFFFFFFFF, v4);
}
else if ( a2 == 273 )
{
g_ftSaveAs = SendDlgItemMessageW(hWndParent, 257, 0x147u, 0, 0);
}
return 0;
}
v5 = hWnd;
if ( hWndParent == hWnd )
{
GetCursorPos(&Point);
ScreenToClient(hWndParent, &Point);
v5 = ChildWindowFromPoint(hWndParent, Point);
}
v6 = GetDlgCtrlID(v5);
if ( v6 != 257 && v6 != 259 )
return 0;
WinHelpW(v5, szHelpFile, 0xAu, (ULONG_PTR)s_SaveAsHelpIDs);
}
return 1;
}
// 100136C: using guessed type int s_SaveAsHelpIDs[6];
// 100A528: using guessed type int g_ftSaveAs;
//----- (01001B99) --------------------------------------------------------
LRESULT __stdcall GotoAndScrollInView(int a1)
{
LRESULT result; // eax@1
result = SendMessageW(hwndEdit, 0xBBu, a1 - 1, 0);
if ( result != -1 )
{
SendMessageW(hwndEdit, 0xB1u, result, result);
result = SendMessageW(hwndEdit, 0xB7u, 0, 0);
}
return result;
}
//----- (01001BE8) --------------------------------------------------------
LPWSTR __stdcall SkipProgramName(WCHAR *lpsz)
{
LPWSTR result; // eax@1
int v2; // esi@1
const WCHAR v3; // cx@8
result = lpsz;
v2 = 0;
while ( 1 )
{
v3 = *result;
if ( !*result || (v3 == 32 || v3 == 9) && !v2 )
break;
if ( v3 == 34 )
v2 = v2 == 0;
result = CharNextW(result);
}
while ( *result == 32 || *result == 9 )
++result;
return result;
}
//----- (01001C42) --------------------------------------------------------
LRESULT __stdcall UpdateStatusBar(int a1)
{
WPARAM v1; // eax@1
int v2; // edi@1
LRESULT result; // eax@1
unsigned int v4; // ebx@1
LPARAM lParam; // [sp+Ch] [bp-10Ch]@1
WPARAM wParam; // [sp+10h] [bp-108h]@1
wchar_t Dest; // [sp+14h] [bp-104h]@4
__int16 v8; // [sp+112h] [bp-6h]@4
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
v1 = SendMessageW(hwndEdit, 0xC9u, wParam, 0);
v2 = v1 + 1;
result = SendMessageW(hwndEdit, 0xBBu, v1, 0);
v4 = wParam - result + 1;
if ( a1 || v4 != dword_1009624 || v2 != dword_1009620 )
{
__snwprintf(&Dest, 0x7Fu, szLineCol, v2, wParam - result + 1);
result = (LRESULT)hwndStatus;
v8 = 0;
if ( hwndStatus )
result = SendMessageW(hwndStatus, 0x40Bu, 1u, (LPARAM)&Dest);
}
dword_1009620 = v2;
dword_1009624 = v4;
return result;
}
// 1009620: using guessed type int dword_1009620;
// 1009624: using guessed type int dword_1009624;
//----- (01001D1C) --------------------------------------------------------
LRESULT __stdcall WinEventFunc(int a1, int a2, int a3, int a4, int a5, int a6, int a7)
{
return UpdateStatusBar(0);
}
//----- (01001D2B) --------------------------------------------------------
const WCHAR *__stdcall PFileInPath(LPCWSTR lpsz)
{
const WCHAR v1; // cx@1
const WCHAR *v2; // edi@1
const WCHAR *v3; // eax@1
v1 = *lpsz;
v2 = lpsz;
v3 = lpsz;
if ( *lpsz )
{
do
{
if ( v1 == 58 || v1 == 92 )
v2 = v3;
v3 = CharNextW(v3);
v1 = *v3;
}
while ( *v3 );
if ( v2 != lpsz )
++v2;
}
return v2;
}
//----- (01001D73) --------------------------------------------------------
DWORD __stdcall NpResetMenu(HWND hWndNewOwner)
{
HMENU v1; // ebx@1
UINT v2; // ST0C_4@1
HMENU v3; // eax@1
UINT v4; // ST0C_4@1
HMENU v5; // eax@1
UINT v6; // ST0C_4@1
HMENU v7; // eax@1
HMENU v8; // eax@1
HMENU v9; // eax@3
UINT v10; // ST0C_4@6
HMENU v11; // eax@6
UINT v12; // ST0C_4@8
HMENU v13; // eax@8
UINT v14; // ST0C_4@8
HMENU v15; // eax@8
UINT v16; // ST0C_4@8
HMENU v17; // eax@8
UINT v18; // ST0C_4@8
HMENU v19; // eax@8
UINT v20; // ST0C_4@8
HMENU v21; // eax@8
UINT v22; // ST0C_4@8
HMENU v23; // eax@8
LPARAM lParam; // [sp+Ch] [bp-10h]@1
WPARAM wParam; // [sp+10h] [bp-Ch]@1
int v27; // [sp+14h] [bp-8h]@1
UINT uEnable; // [sp+18h] [bp-4h]@1
v27 = 0;
v1 = GetMenu(hwndNP);
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
v2 = wParam == lParam;
uEnable = wParam == lParam;
v3 = GetSubMenu(v1, 1);
EnableMenuItem(v3, 0x300u, v2);
v4 = uEnable;
v5 = GetSubMenu(v1, 1);
EnableMenuItem(v5, 0x301u, v4);
v6 = uEnable;
v7 = GetSubMenu(v1, 1);
EnableMenuItem(v7, 0x303u, v6);
v8 = GetSubMenu(v1, 1);
if ( GetMenuState(v8, 0x19u, 0) == 1 && uEnable == 1 )
{
v9 = GetSubMenu(v1, 1);
EnableMenuItem(v9, 0x19u, 0);
}
if ( OpenClipboard(hWndNewOwner) )
{
v27 = IsClipboardFormatAvailable(1u);
CloseClipboard();
}
v10 = v27 == 0;
v11 = GetSubMenu(v1, 1);
EnableMenuItem(v11, 0x302u, v10);
uEnable = 1;
if ( SendMessageW(hwndEdit, 0xEu, 0, 0) )
uEnable = 0;
v12 = uEnable;
v13 = GetSubMenu(v1, 1);
EnableMenuItem(v13, 0x15u, v12);
v14 = uEnable;
v15 = GetSubMenu(v1, 1);
EnableMenuItem(v15, 0x16u, v14);
v16 = fWrap != 0;
v17 = GetSubMenu(v1, 1);
EnableMenuItem(v17, 0x18u, v16);
v18 = SendMessageW(hwndEdit, 0xC6u, 0, 0) == 0;
v19 = GetSubMenu(v1, 1);
EnableMenuItem(v19, 0x10u, v18);
v20 = fWrap != 0 ? 8 : 0;
v21 = GetSubMenu(v1, 2);
CheckMenuItem(v21, 0x20u, v20);
v22 = *(_DWORD *)&fStatus != 0 ? 8 : 0;
v23 = GetSubMenu(v1, 3);
return CheckMenuItem(v23, 0x1Bu, v22);
}
//----- (01001F02) --------------------------------------------------------
signed int __stdcall MergeStrings(int a1, int a2, int a3)
{
int v3; // ecx@1
int v4; // eax@1
__int16 v5; // dx@2
int v6; // esi@4
int v8; // ecx@9
__int16 v9; // dx@10
v3 = a1;
v4 = a3;
while ( *(_WORD *)v3 != chMerge )
{
*(_WORD *)v4 = *(_WORD *)v3;
v5 = *(_WORD *)v3;
v4 += 2;
v3 += 2;
if ( !v5 )
return 0;
}
v6 = a2;
if ( a2 )
{
while ( *(_WORD *)v6 )
{
*(_WORD *)v4 = *(_WORD *)v6;
v4 += 2;
v6 += 2;
}
}
v8 = v3 + 4;
do
{
v9 = *(_WORD *)v8;
*(_WORD *)v4 = *(_WORD *)v8;
v4 += 2;
v8 += 2;
}
while ( v9 );
return 1;
}
// 100AB90: using guessed type __int16 chMerge;
//----- (01001F70) --------------------------------------------------------
int __stdcall AlertBox(HWND hWnd, LPCWSTR lpCaption, LPCWSTR lpText, LPCWSTR lpString, UINT uType)
{
int v5; // edi@2
int v6; // eax@4
int v7; // eax@4
const WCHAR *v8; // esi@4
int v9; // edi@5
if ( lpString )
v5 = lstrlenW(lpString);
else
v5 = 0;
v6 = lstrlenW(lpText);
v7 = (int)LocalAlloc(0x40u, 2 * (v5 + v6) + 2);
v8 = (const WCHAR *)v7;
if ( v7 )
{
MergeStrings((int)lpText, (int)lpString, v7);
v9 = MessageBoxW(hWnd, v8, lpCaption, uType);
LocalFree((HLOCAL)v8);
}
else
{
v9 = MessageBoxW(hWnd, lpText, lpCaption, uType);
}
return v9;
}
//----- (01001FF0) --------------------------------------------------------
DWORD __cdecl SignalCommDlgError()
{
DWORD result; // eax@1
wchar_t *v1; // ecx@2
unsigned int v2; // edx@2
wchar_t Dest; // [sp+0h] [bp-194h]@7
result = CommDlgExtendedError();
if ( result )
{
v1 = 0;
v2 = 0;
do
{
if ( result == maperror[v2] )
v1 = (wchar_t *)*(&off_10091A4)[v2];
v2 += 2;
}
while ( v2 < 16 );
if ( !v1 )
{
__snwprintf(&Dest, 0xC7u, szCommDlgErr, result);
v1 = &Dest;
}
if ( *v1 )
MessageBoxW(hwndNP, v1, szNN, 0x1010u);
result = 1;
}
return result;
}
// 10091A0: using guessed type int maperror[];
// 10091A4: using guessed type int *off_10091A4;
//----- (0100207F) --------------------------------------------------------
__int32 __stdcall ReplaceSel(int a1)
{
__int32 result; // eax@1
__int32 v2; // edi@2
WPARAM v3; // eax@3
void *hMem; // [sp+8h] [bp-14h]@1
int v5; // [sp+Ch] [bp-10h]@1
LPARAM lParam; // [sp+10h] [bp-Ch]@1
WPARAM wParam; // [sp+14h] [bp-8h]@1
size_t cchCount1; // [sp+18h] [bp-4h]@1
v5 = lstrlenW(FR.lpstrReplaceWith);
cchCount1 = lstrlenW(FR.lpstrFindWhat);
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
result = SendMessageW(hwndEdit, 0xBDu, 0, 0);
hMem = (void *)result;
if ( result )
{
result = (__int32)LocalLock((HLOCAL)result);
v2 = result;
if ( result )
{
v3 = wParam;
if ( lParam - wParam != cchCount1 )
return LocalUnlock(hMem);
if ( fCase )
{
if ( !_wcsncmp(FR.lpstrFindWhat, (const wchar_t *)(v2 + 2 * wParam), cchCount1) )
goto LABEL_9;
if ( fCase )
return LocalUnlock(hMem);
v3 = wParam;
}
if ( CompareStringW(0x400u, 0x10001001u, FR.lpstrFindWhat, cchCount1, (PCNZWCH)(v2 + 2 * v3), cchCount1) == 2 )
{
LABEL_9:
SendMessageW(hwndEdit, 0xC2u, 1u, (LPARAM)FR.lpstrReplaceWith);
SendMessageW(hwndEdit, 0xB1u, wParam, wParam + v5);
if ( a1 )
SendMessageW(hwndEdit, 0xB7u, 0, 0);
return LocalUnlock(hMem);
}
return LocalUnlock(hMem);
}
}
return result;
}
//----- (010021A6) --------------------------------------------------------
signed int __stdcall GotoDlgProc(HWND hWnd, int a2, HWND a3, int a4)
{
LRESULT v5; // eax@11
LRESULT v6; // eax@14
HWND v7; // eax@15
HWND v8; // edi@15
LONG v9; // eax@15
LRESULT v10; // eax@15
LPARAM lParam; // [sp+Ch] [bp-D4h]@15
WPARAM wParam; // [sp+10h] [bp-D0h]@15
WCHAR SrcStr; // [sp+14h] [bp-CCh]@11
if ( a2 == 83 )
{
WinHelpW(*(HWND *)(a4 + 12), szHelpFile, 0xCu, (ULONG_PTR)s_GotoHelpIDs);
return 0;
}
if ( a2 == 123 )
{
WinHelpW(a3, szHelpFile, 0xAu, (ULONG_PTR)s_GotoHelpIDs);
return 0;
}
if ( a2 == 272 )
{
v7 = GetDlgItem(hWnd, 258);
v8 = v7;
v9 = GetWindowLongW(v7, -16);
SetWindowLongW(v8, -16, v9 | 0x2000);
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
v10 = SendMessageW(hwndEdit, 0xC9u, wParam, 0);
_wsprintfW(&SrcStr, L"%d", v10 + 1);
SetDlgItemTextW(hWnd, 258, &SrcStr);
SetFocus(hWnd);
return 1;
}
if ( a2 != 273 )
return 0;
if ( (unsigned __int16)a3 == 1 )
{
GetDlgItemTextW(hWnd, 258, &SrcStr, 100);
FoldStringW(0x80u, &SrcStr, -1, &SrcStr, 100);
lGotoLine = __wtol(&SrcStr);
v5 = SendMessageW(hwndEdit, 0xBBu, lGotoLine - 1, 0);
if ( !lGotoLine || v5 == -1 )
{
MessageBoxW(hWnd, szLineTooLarge, szLineError, 0);
v6 = SendMessageW(hwndEdit, 0xBAu, 0, 0);
_wsprintfW(&SrcStr, L"%d", v6);
SetDlgItemTextW(hWnd, 258, &SrcStr);
SetFocus(hWnd);
return 0;
}
EndDialog(hWnd, 0);
return 1;
}
if ( (unsigned __int16)a3 == 2 )
{
EndDialog(hWnd, 1);
return 1;
}
if ( (unsigned __int16)a3 == 258 )
return 1;
return 0;
}
// 1001384: using guessed type int s_GotoHelpIDs[4];
// 100AB94: using guessed type int lGotoLine;
//----- (0100239D) --------------------------------------------------------
int __stdcall fDetermineFileType(int lpv, int iSize)
{
int result; // eax@1
int v3; // ecx@2
result = 0;
if ( (unsigned int)iSize <= 1 )
return result;
v3 = *(_WORD *)lpv;
if ( v3 == 48111 )
{
if ( (unsigned int)iSize <= 2 || *(_BYTE *)(lpv + 2) != -65 )
return result;
return 3;
}
if ( v3 == 65279 )
return 1;
if ( v3 == 65534 )
return 2;
if ( IsInputTextUnicode((const void *)lpv, iSize) )
return 1;
return IsTextUTF8(lpv, iSize) != 0 ? 3 : 0;
}
//----- (01002409) --------------------------------------------------------
HRESULT __stdcall StringCopyWorkerW(STRSAFE_LPWSTR pszDest, size_t cchDest, size_t *pcchNewDestLength, STRSAFE_PCNZWCH pszSrc, size_t cchToCopy)
{
HRESULT result; // eax@1
STRSAFE_LPWSTR v6; // edx@3
size_t *v7; // esi@3
result = 0;
if ( cchDest )
{
v6 = pszDest;
v7 = pcchNewDestLength;
do
{
if ( !*(_WORD *)v7 )
break;
*v6 = *(_WORD *)v7;
++v6;
v7 = (size_t *)((char *)v7 + 2);
--cchDest;
}
while ( cchDest );
if ( !cchDest )
{
--v6;
result = -2147024774;
}
*v6 = 0;
}
else
{
result = -2147024809;
}
return result;
}
// 1002409: inconsistent function type and number of purged bytes
//----- (01002452) --------------------------------------------------------
signed int __stdcall NpOpenDialogHookProc(DWORD hDlg, int a2, DWORD hWndMain, int a4)
{
HWND v4; // ebx@1
LPARAM v5; // ecx@7
int v6; // eax@16
int v8; // eax@20
HWND v9; // eax@24
HANDLE v10; // eax@26
int v11; // eax@29
LPARAM v12; // ecx@29
int v13; // eax@29
int v14; // eax@30
struct tagPOINT Point; // [sp+Ch] [bp-61Ch]@15
HANDLE hObject; // [sp+14h] [bp-614h]@26
DWORD iSize; // [sp+18h] [bp-610h]@1
char Buffer; // [sp+1Ch] [bp-60Ch]@27
LPARAM String1; // [sp+41Ch] [bp-20Ch]@24
v4 = (HWND)hWndMain;
iSize = hDlg;
if ( a2 == 78 )
{
if ( *(_DWORD *)(a4 + 8) == -602 )
{
v9 = GetParent((HWND)hDlg);
if ( SendMessageW(v9, 0x465u, 0x104u, (LPARAM)&String1) > 0 )
{
if ( lstrcmpiW((LPCWSTR)&String1, &String2) )
{
v10 = CreateFileW((LPCWSTR)&String1, 0x80000000, 1u, 0, 3u, 0x80u, 0);
hObject = v10;
if ( v10 != (HANDLE)-1 )
{
if ( ReadFile(v10, &Buffer, 0x400u, &iSize, 0) > 0 && iSize )
{
v11 = fDetermineFileType((int)&Buffer, iSize);
v12 = szFtAnsi;
g_ftOpenedAs = v11;
v13 = v11 - 1;
if ( v13 )
{
v14 = v13 - 1;
if ( v14 )
{
if ( v14 == 1 )
v12 = szFtUtf8;
}
else
{
v12 = szFtUnicodeBe;
}
}
else
{
v12 = szFtUnicode;
}
SendDlgItemMessageW((HWND)hDlg, 257, 0x14Du, 0xFFFFFFFF, v12);
lstrcpyW((LPWSTR)&String2, (LPCWSTR)&String1);
}
CloseHandle(hObject);
}
}
}
}
return 0;
}
if ( a2 != 83 )
{
if ( a2 != 123 )
{
if ( a2 == 272 )
{
SendDlgItemMessageW((HWND)hDlg, 257, 0x143u, 0, szFtAnsi);
SendDlgItemMessageW((HWND)iSize, 257, 0x143u, 0, szFtUnicode);
SendDlgItemMessageW((HWND)iSize, 257, 0x143u, 0, szFtUnicodeBe);
SendDlgItemMessageW((HWND)iSize, 257, 0x143u, 0, szFtUtf8);
v5 = szFtAnsi;
switch ( g_ftOpenedAs )
{
case 1:
v5 = szFtUnicode;
break;
case 2:
v5 = szFtUnicodeBe;
break;
case 3:
v5 = szFtUtf8;
break;
}
SendDlgItemMessageW((HWND)iSize, 257, 0x14Du, 0xFFFFFFFF, v5);
}
else if ( a2 == 273 )
{
g_ftOpenedAs = SendDlgItemMessageW((HWND)hDlg, 257, 0x147u, 0, 0);
}
return 0;
}
if ( hDlg == hWndMain )
{
GetCursorPos(&Point);
ScreenToClient((HWND)hDlg, &Point);
v4 = ChildWindowFromPoint((HWND)hDlg, Point);
}
v6 = GetDlgCtrlID(v4);
if ( v6 != 257 && v6 != 259 )
return 0;
WinHelpW(v4, szHelpFile, 0xAu, (ULONG_PTR)s_SaveAsHelpIDs);
return 1;
}
v8 = GetDlgCtrlID(*(HWND *)(a4 + 12));
if ( v8 == 257 || v8 == 259 )
{
WinHelpW(*(HWND *)(a4 + 12), szHelpFile, 0xCu, (ULONG_PTR)s_SaveAsHelpIDs);
return 1;
}
return 0;
}
// 100136C: using guessed type int s_SaveAsHelpIDs[6];
//----- (0100270F) --------------------------------------------------------
signed int __stdcall CheckSave(int a1)
{
const WCHAR *v1; // eax@4
int v3; // [sp+Ch] [bp-210h]@1
WCHAR String2; // [sp+10h] [bp-20Ch]@1
char v5; // [sp+12h] [bp-20Ah]@1
__int16 v6; // [sp+216h] [bp-6h]@1
String2 = 0;
memset(&v5, 0, 0x204u);
v6 = 0;
v3 = 1;
if ( fUntitled && !SendMessageW(hwndEdit, 0xEu, 0, 0) )
return 1;
if ( SendMessageW(hwndEdit, 0xB8u, 0, 0) )
{
v1 = szUntitled;
if ( !fUntitled )
v1 = &szFileName;
fInSaveAsDlg = 1;
v3 = AlertBox(hwndNP, szNN, szSCBC, v1, (a1 != 0 ? 0x1000 : 0) | 0x33);
fInSaveAsDlg = 0;
if ( v3 == 6 )
{
if ( fUntitled )
{
lstrcpyW(&String2, L"*.txt");
goto LABEL_15;
}
g_ftSaveAs = g_ftOpenedAs;
if ( SaveFile(hwndNP, &szFileName, 0) )
return 1;
lstrcpyW(&String2, &szFileName);
LABEL_15:
while ( 1 )
{
OFN.lpstrFile = &String2;
fInSaveAsDlg = 1;
OFN.nFilterIndex = 1;
OFN.lpstrDefExt = L"txt";
OFN.lpstrFilter = (LPCWSTR)&szSaveFilterSpec;
OFN.lpfnHook = (LPOFNHOOKPROC)NpSaveDialogHookProc;
OFN.lpTemplateName = L"NpEncodingDialog";
OFN.Flags = 8947814;
OFN.lpstrTitle = (LPCWSTR)szSaveCaption;
if ( !GetSaveFileNameW(&OFN) )
break;
lstrcpyW(&String2, OFN.lpstrFile);
if ( SaveFile(hwndNP, &String2, (LPCWSTR)1) )
{
lstrcpyW((LPWSTR)&szFileName, &String2);
g_ftOpenedAs = g_ftSaveAs;
goto LABEL_18;
}
lstrcpyW(&String2, &szFileName);
}
v3 = 2;
if ( CommDlgExtendedError() )
MessageBoxW(hwndNP, szErrSpace, szNN, 0x1010u);
LABEL_18:
fInSaveAsDlg = 0;
}
}
return v3 != 2;
}
// 10013A0: using guessed type wchar_t aNpencodingdial[17];
// 10013C4: using guessed type wchar_t aTxt[4];
// 100901C: using guessed type int fUntitled;
// 1009090: using guessed type int szSaveCaption;
// 1009854: using guessed type int fInSaveAsDlg;
// 100A528: using guessed type int g_ftSaveAs;
//----- (01002936) --------------------------------------------------------
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
WCHAR *v4; // edi@1
int v5; // eax@1
FARPROC v6; // eax@1
__int32 v7; // eax@3
DWORD v8; // eax@5
HWINEVENTHOOK v9; // ebx@5
struct tagMSG Msg; // [sp+8h] [bp-20h]@4
FARPROC v12; // [sp+24h] [bp-4h]@1
v4 = GetCommandLineW();
v5 = GetSystemMetrics(41);
v6 = GetProcAddress((HMODULE)v5, "RegisterPenApp");
v12 = v6;
if ( v6 )
((void (__stdcall *)(_DWORD, _DWORD))v6)(1, 1);
v7 = (__int32)SkipProgramName(v4);
if ( NPInit(hInstance, (int)hPrevInstance, v7, nShowCmd) )
{
v8 = GetCurrentProcessId();
v9 = SetWinEventHook(0x800Bu, 0x800Bu, 0, (WINEVENTPROC)WinEventFunc, v8, 0, 0);
while ( GetMessageW(&Msg, 0, 0, 0) )
{
if ( Msg.message == 80 )
PostMessageW(hwndNP, 0x8001u, 0, 0);
if ( (!hDlgFind || !IsDialogMessageW(hDlgFind, &Msg)) && !TranslateAcceleratorW(hwndNP, hAccel, &Msg) )
{
TranslateMessage(&Msg);
DispatchMessageW(&Msg);
}
}
FreeGlobal();
LocalFree(hEdit);
if ( v9 )
UnhookWinEvent(v9);
}
else
{
Msg.wParam = 0;
}
if ( v12 )
((void (__stdcall *)(_DWORD, _DWORD))v12)(1, 0);
return Msg.wParam;
}
//----- (01002A55) --------------------------------------------------------
BOOL __stdcall SetTitle(LPCWSTR pcchNewDestLength)
{
HANDLE v1; // edi@3
WORD v2; // si@4
const wchar_t *v4; // [sp+0h] [bp-7D0h]@0
size_t v5; // [sp+4h] [bp-7CCh]@0
struct _WIN32_FIND_DATAW FindFileData; // [sp+8h] [bp-7C8h]@3
const WCHAR v7; // [sp+258h] [bp-578h]@4
wchar_t String; // [sp+460h] [bp-370h]@2
wchar_t lParam; // [sp+6CCh] [bp-104h]@1
char v10; // [sp+6CEh] [bp-102h]@1
__int16 v11; // [sp+7CAh] [bp-6h]@1
lParam = 0;
memset(&v10, 0, 0xFCu);
v11 = 0;
if ( lstrcmpW(pcchNewDestLength, szUntitled) )
{
GetFileAttributesW(pcchNewDestLength);
v1 = FindFirstFileW(pcchNewDestLength, &FindFileData);
if ( v1 == (HANDLE)-1 )
{
v2 = 260;
StringCopyWorkerW((STRSAFE_LPWSTR)&v7, 0x104u, (size_t *)pcchNewDestLength, v4, v5);
}
else
{
v2 = 260;
StringCopyWorkerW((STRSAFE_LPWSTR)&v7, 0x104u, (size_t *)FindFileData.cFileName, v4, v5);
FindClose(v1);
}
GetFileTitleW(&v7, &String, v2);
}
else
{
StringCopyWorkerW(&String, 0x136u, (size_t *)szUntitled, v4, v5);
}
__snwprintf(&lParam, 0x7Fu, szLineCol, 1, 1);
if ( hwndStatus )
SendMessageW(hwndStatus, 0x40Bu, 1u, (LPARAM)&lParam);
lstrcatW(&String, szNpTitle);
return SetWindowTextW(hwndNP, &String);
}
//----- (01002B87) --------------------------------------------------------
signed int __stdcall NPCommand(WPARAM hWnd, unsigned __int16 a2, int a3)
{
int v4; // ebx@23
HANDLE v5; // edi@24
DWORD v6; // eax@30
HMENU v7; // ebx@51
LPARAM v8; // eax@51
HMENU v9; // eax@51
HWND v10; // eax@55
HWND v11; // eax@57
HDC v12; // ebx@67
int v13; // eax@68
HFONT v14; // edi@69
int v15; // eax@72
HMENU v16; // eax@78
HMENU v17; // edi@78
HMENU v18; // eax@78
HMENU v19; // eax@79
HMENU v20; // eax@79
HWND v21; // eax@84
HWND v22; // eax@91
HICON v23; // eax@94
HWND v24; // [sp-10h] [bp-27Ch]@40
HWND v25; // [sp-10h] [bp-27Ch]@42
UINT v26; // [sp-Ch] [bp-278h]@40
UINT v27; // [sp-Ch] [bp-278h]@42
WPARAM v28; // [sp-8h] [bp-274h]@40
UINT v29; // [sp-8h] [bp-274h]@51
struct tagCHOOSEFONTW v30; // [sp+Ch] [bp-260h]@68
LPARAM lParam; // [sp+48h] [bp-224h]@90
struct tagRECT Rect; // [sp+4Ch] [bp-220h]@81
WPARAM wParam; // [sp+5Ch] [bp-210h]@1
WCHAR String2; // [sp+60h] [bp-20Ch]@1
char v35; // [sp+62h] [bp-20Ah]@1
__int16 v36; // [sp+266h] [bp-6h]@1
String2 = 0;
memset(&v35, 0, 0x204u);
v36 = 0;
wParam = hWnd;
if ( (signed int)a2 > 64 )
{
if ( a2 == 65 )
{
v23 = LoadIconW(hInstanceNP, (LPCWSTR)2);
ShellAboutW(hwndNP, szNN, &szOtherStuff, v23);
return 1;
}
if ( (signed int)a2 <= 767 )
return 0;
if ( (signed int)a2 > 769 )
{
if ( a2 == 770 )
{
LABEL_91:
v22 = GetFocus();
if ( v22 != hwndEdit && v22 != hwndNP )
return 1;
v27 = a2;
v25 = hwndEdit;
goto LABEL_43;
}
if ( a2 != 771 )
return 0;
}
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
if ( wParam == lParam )
return 1;
goto LABEL_91;
}
if ( a2 == 64 )
{
v21 = GetDesktopWindow();
HtmlHelpA(v21, "notepad.chm", 0, 0);
return 1;
}
if ( (signed int)a2 > 21 )
{
if ( (signed int)a2 > 26 )
{
if ( a2 == 27 )
{
GetClientRect(hwndNP, &Rect);
if ( *(_DWORD *)&fStatus )
{
*(_DWORD *)&fStatus = 0;
ShowWindow(hwndStatus, 0);
NPSize(Rect.right - Rect.left, Rect.bottom - Rect.top);
}
else
{
*(_DWORD *)&fStatus = 1;
NPSize(Rect.right - Rect.left, Rect.bottom - Rect.top);
UpdateStatusBar(1);
ShowWindow(hwndStatus, 5);
}
return 1;
}
if ( a2 != 32 )
{
if ( a2 != 33 )
return 0;
v12 = GetDC(0);
if ( v12 )
{
v30.lStructSize = 60;
v30.hwndOwner = (HWND)wParam;
v30.lpLogFont = &FontStruct;
v13 = GetDeviceCaps(v12, 90);
FontStruct.lfHeight = -MulDiv(*(int *)&iPointSize, v13, 720);
v30.Flags = 16777281;
v30.rgbColors = 0;
v30.lCustData = 0;
v30.lpfnHook = 0;
v30.lpTemplateName = 0;
v30.hInstance = 0;
v30.lpszStyle = 0;
v30.nFontType = 0x2000;
v30.nSizeMin = 0;
v30.nSizeMax = 0;
ReleaseDC(0, v12);
if ( ChooseFontW(&v30) )
{
SetCursor(hWaitCursor);
v14 = CreateFontIndirectW(&FontStruct);
if ( v14 )
{
DeleteObject(hFont);
hFont = v14;
SendMessageW(hwndEdit, 0x30u, (WPARAM)v14, 1);
*(_DWORD *)&iPointSize = v30.iPointSize;
}
SetCursor(hStdCursor);
}
}
return 1;
}
v15 = -(fWrap != 0);
if ( NpReCreate((v15 & 0x100000) + 1344274692) )
fWrap = fWrap == 0;
else
MessageBoxW(hwndNP, szNoWW, szNN, 0x30u);
if ( !fWrap )
{
v19 = GetMenu(hwndNP);
v20 = GetSubMenu(v19, 3);
EnableMenuItem(v20, 0x1Bu, 0);
if ( !fLastStatus )
return 1;
v28 = 27;
v26 = 273;
v24 = (HWND)wParam;
goto LABEL_41;
}
fLastStatus = *(_DWORD *)&fStatus;
if ( *(_DWORD *)&fStatus )
SendMessageW((HWND)wParam, 0x111u, 0x1Bu, 0);
v16 = GetMenu(hwndNP);
v17 = v16;
v18 = GetSubMenu(v16, 3);
CheckMenuItem(v18, 0x1Bu, 0);
v29 = 27;
v9 = GetSubMenu(v17, 3);
}
else
{
if ( a2 == 26 )
{
InsertDateTime(0);
return 1;
}
if ( a2 == 22 )
{
if ( szSearch )
{
Search(&szSearch);
return 1;
}
LABEL_61:
v10 = hDlgFind;
if ( !hDlgFind )
{
FR.Flags = 65537;
FR.lpstrReplaceWith = 0;
FR.wReplaceWithLen = 0;
FR.lpstrFindWhat = (LPWSTR)&szSearch;
FR.wFindWhatLen = 128;
v11 = FindTextW(&FR);
goto LABEL_58;
}
goto LABEL_56;
}
if ( a2 == 23 )
{
v10 = hDlgFind;
if ( !hDlgFind )
{
FR.Flags = 65552;
FR.lpstrReplaceWith = (LPWSTR)&szReplace;
FR.wReplaceWithLen = 128;
FR.lpstrFindWhat = (LPWSTR)&szSearch;
FR.wFindWhatLen = 128;
v11 = ReplaceTextW(&FR);
LABEL_58:
hDlgFind = v11;
return 1;
}
LABEL_56:
SetFocus(v10);
return 1;
}
if ( a2 == 24 )
{
if ( !DialogBoxParamW(hInstanceNP, (LPCWSTR)0xE, hwndNP, (DLGPROC)GotoDlgProc, 0) )
GotoAndScrollInView(lGotoLine);
return 1;
}
if ( a2 != 25 )
return 0;
v7 = GetMenu(hwndNP);
v8 = SendMessageW(hwndEdit, 0xEu, 0, 0);
SendMessageW(hwndEdit, 0xB1u, 0, v8);
SendMessageW(hwndEdit, 0xB7u, 0, 0);
v29 = 25;
v9 = GetSubMenu(v7, 1);
}
EnableMenuItem(v9, v29, 1u);
return 1;
}
if ( a2 == 21 )
goto LABEL_61;
if ( (signed int)a2 > 5 )
{
if ( a2 == 6 )
{
PrintIt(0);
return 1;
}
if ( a2 != 7 )
{
if ( a2 == 15 )
return 1;
if ( a2 != 16 )
return 0;
v28 = 0;
v26 = 199;
v24 = hwndEdit;
LABEL_41:
SendMessageW(v24, v26, v28, 0);
return 1;
}
v27 = 16;
v25 = (HWND)hWnd;
LABEL_43:
PostMessageW(v25, v27, 0, 0);
return 1;
}
if ( a2 == 5 )
{
while ( !PageSetupDlgW(&g_PageSetupDlg) )
{
v6 = CommDlgExtendedError();
if ( v6 != 4107 && v6 != 4105 && v6 != 4108 )
goto LABEL_27;
FreeGlobal();
g_PageSetupDlg.hDevNames = 0;
g_PageSetupDlg.hDevMode = 0;
}
lstrcpyW(&chPageText, &chPageTextTemp);
lstrcpyW(&String1, &word_100A390);
return 1;
}
if ( a2 == 1 )
{
New(1);
}
else
{
if ( a2 == 2 )
{
if ( CheckSave(0) )
{
v4 = g_ftOpenedAs;
OFN.lpstrFile = &String2;
lstrcpyW(&String2, L"*.txt");
OFN.lpstrTitle = (LPCWSTR)szOpenCaption;
OFN.lpstrFilter = (LPCWSTR)&szOpenFilterSpec;
OFN.lpstrDefExt = L"txt";
OFN.Flags = 8917092;
OFN.nFilterIndex = 1;
OFN.lpTemplateName = L"NpEncodingDialog";
OFN.lpfnHook = (LPOFNHOOKPROC)NpOpenDialogHookProc;
if ( GetOpenFileNameW(&OFN) )
{
v5 = fp;
fp = CreateFileW(&String2, 0x80000000, 3u, 0, 3u, 0x80u, 0);
if ( !LoadFile(&String2, g_ftOpenedAs) )
{
fp = v5;
g_ftOpenedAs = v4;
}
}
else
{
g_ftOpenedAs = v4;
LABEL_27:
SignalCommDlgError();
}
}
return 1;
}
if ( a2 != 3 )
{
if ( a2 != 4 )
return 0;
goto LABEL_14;
}
g_ftSaveAs = g_ftOpenedAs;
if ( fUntitled || !SaveFile(hwndNP, &szFileName, 0) )
{
LABEL_14:
OFN.lpstrFile = &String2;
OFN.lpstrTitle = (LPCWSTR)szSaveCaption;
OFN.Flags = 8947814;
OFN.lpTemplateName = L"NpEncodingDialog";
OFN.lpfnHook = (LPOFNHOOKPROC)NpSaveDialogHookProc;
OFN.lpstrFilter = (LPCWSTR)&szSaveFilterSpec;
OFN.lpstrDefExt = L"txt";
if ( fUntitled )
lstrcpyW(&String2, L"*.txt");
else
lstrcpynW(&String2, &szFileName, 260);
fInSaveAsDlg = 1;
OFN.nFilterIndex = 1;
if ( GetSaveFileNameW(&OFN) )
{
if ( SaveFile((HWND)wParam, &String2, (LPCWSTR)1) )
{
lstrcpynW((LPWSTR)&szFileName, &String2, 260);
g_ftOpenedAs = g_ftSaveAs;
}
}
else
{
SignalCommDlgError();
}
fInSaveAsDlg = 0;
return 1;
}
}
return 1;
}
// 10013A0: using guessed type wchar_t aNpencodingdial[17];
// 10013C4: using guessed type wchar_t aTxt[4];
// 100901C: using guessed type int fUntitled;
// 100908C: using guessed type int szOpenCaption;
// 1009090: using guessed type int szSaveCaption;
// 1009844: using guessed type int fLastStatus;
// 1009854: using guessed type int fInSaveAsDlg;
// 100A528: using guessed type int g_ftSaveAs;
// 100AB94: using guessed type int lGotoLine;
//----- (0100337E) --------------------------------------------------------
signed int __cdecl FileDragOpen()
{
HANDLE v0; // edi@1
signed int result; // eax@1
v0 = fp;
result = CheckSave(0);
if ( result )
{
fp = CreateFileW(&FileName, 0x80000000, 3u, 0, 3u, 0x80u, 0);
if ( fp == (HANDLE)-1 )
{
result = AlertUser_FileFail(&FileName);
}
else
{
result = LoadFile(&FileName, -1);
if ( result )
return result;
}
fp = v0;
}
return result;
}
//----- (010033DC) --------------------------------------------------------
void __stdcall doDrop(HDROP hDrop, HWND hWnd)
{
if ( DragQueryFileW(hDrop, 0xFFFFFFFF, 0, 0) )
{
DragQueryFileW(hDrop, 0, (LPWSTR)&FileName, 0x104u);
SetActiveWindow(hWnd);
FileDragOpen();
}
DragFinish(hDrop);
}
//----- (01003429) --------------------------------------------------------
signed int __stdcall NPWndProc(HWND hWnd, UINT Msg, WPARAM hDrop, __int32 a4)
{
HWND v4; // ST10_4@15
WPARAM v6; // eax@37
LPARAM v7; // ecx@37
void (__stdcall *v8)(HWND, UINT, WPARAM, LPARAM); // edi@39
int v9; // ecx@51
int v10; // eax@51
int v11; // esi@51
void (__stdcall *v12)(HCURSOR); // esi@52
LPARAM v13; // esi@67
LPARAM v14; // [sp-4h] [bp-14h]@64
LPARAM lParam; // [sp+8h] [bp-8h]@21
int v16; // [sp+Ch] [bp-4h]@21
if ( Msg > 0x1C )
{
if ( Msg != 273 )
{
if ( Msg == 274 )
{
if ( !fRunBySetup || hDrop != 61472 && hDrop != 61504 && hDrop != 61520 )
DefWindowProcW(hWnd, 0x112u, hDrop, a4);
return 0;
}
if ( Msg == 278 )
{
NpResetMenu(hWnd);
return 0;
}
if ( Msg == 279 )
{
if ( fRunBySetup && HIWORD(a4) )
EnableMenuItem(hSysMenuSetup, 0xF020u, 3u);
return 0;
}
if ( Msg == 563 )
{
doDrop((HDROP)hDrop, hWnd);
return 0;
}
if ( Msg != 793 )
{
if ( Msg == 32769 )
{
v13 = 0;
if ( ((unsigned int)GetKeyboardLayout(0) & 0x3FF) == 17 )
v13 = 1;
SendMessageW(hwndEdit, 0xD8u, 1u, v13);
return 0;
}
LABEL_50:
if ( Msg == wFRMsg )
{
v9 = *(_DWORD *)(a4 + 12);
v10 = ~(unsigned __int8)*(_DWORD *)(a4 + 12) & 1;
v11 = (*(_DWORD *)(a4 + 12) >> 2) & 1;
fReverse = ~(unsigned __int8)*(_DWORD *)(a4 + 12) & 1;
fCase = v11;
if ( v9 & 8 )
{
v12 = SetCursor;
SetCursor(hWaitCursor);
}
else
{
if ( !(v9 & 0x10) )
{
if ( v9 & 0x20 )
{
if ( v10 )
fReverse = 0;
SetCursor(hWaitCursor);
SendMessageW(hwndEdit, 0xB1u, 0, 0);
do
ReplaceSel(0);
while ( Search(&szSearch) );
SetCursor(hStdCursor);
SendMessageW(hwndEdit, 0xB1u, 0, 0);
SendMessageW(hwndEdit, 0xB7u, 0, 0);
UpdateStatusBar(1);
}
else if ( v9 & 0x40 )
{
hDlgFind = 0;
}
return 0;
}
v12 = SetCursor;
SetCursor(hWaitCursor);
ReplaceSel(1);
}
Search(&szSearch);
v12(hStdCursor);
return 0;
}
v14 = a4;
return DefWindowProcW(hWnd, Msg, hDrop, v14);
}
if ( (HIWORD(a4) & 0xFFF) == 5 )
{
NPCommand((WPARAM)hWnd, 0x15u, 0);
return 0;
}
}
if ( (HWND)a4 == hwndEdit && (HIWORD(hDrop) == 1280 || HIWORD(hDrop) == 1281) )
{
if ( dwEmSetHandle == 1 )
dwEmSetHandle = 2;
else
MessageBoxW(hwndNP, szErrSpace, szNN, 0x1010u);
return 0;
}
if ( !NPCommand((WPARAM)hWnd, hDrop, a4) )
{
v14 = a4;
return DefWindowProcW(hWnd, Msg, hDrop, v14);
}
return 0;
}
if ( Msg == 28 )
{
if ( hDrop )
{
v6 = dwCurrentSelectionStart;
v7 = dwCurrentSelectionEnd;
if ( !dwCurrentSelectionStart && !dwCurrentSelectionEnd )
return 0;
v8 = SendMessageW;
}
else
{
v8 = SendMessageW;
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&dwCurrentSelectionStart, (LPARAM)&dwCurrentSelectionEnd);
v6 = dwCurrentSelectionStart;
v7 = dwCurrentSelectionEnd;
if ( dwCurrentSelectionStart == dwCurrentSelectionEnd )
{
dwCurrentSelectionStart = 0;
dwCurrentSelectionEnd = 0;
return 0;
}
}
v8(hwndEdit, 0xB1u, v6, v7);
v8(hwndEdit, 0xB7u, 0, 0);
return 0;
}
if ( Msg <= 8 )
{
if ( Msg == 8 )
{
SendMessageW(hwndEdit, 8u, hDrop, a4);
return 0;
}
if ( Msg == 2 )
{
PostQuitMessage(0);
return 0;
}
if ( Msg == 5 )
{
if ( hDrop )
{
if ( hDrop == 1 )
return DefWindowProcW(hWnd, 5u, 1u, a4);
if ( hDrop != 2 )
return 0;
}
SendMessageW(hwndStatus, 5u, 0, 0);
v16 = -1;
lParam = 3 * (signed __int16)a4 / 4;
SendMessageW(hwndStatus, 0x404u, 2u, (LPARAM)&lParam);
NPSize((signed __int16)a4, SHIWORD(a4));
return 0;
}
if ( Msg == 6 )
{
if ( ((_WORD)hDrop == 1 || (_WORD)hDrop == 2) && !IsIconic(hwndNP) && GetForegroundWindow() == hwndNP )
{
v4 = GetForegroundWindow();
SetFocus(v4);
}
return 0;
}
if ( Msg == 7 )
{
if ( !IsIconic(hwndNP) )
SetFocus(hwndEdit);
return 0;
}
goto LABEL_50;
}
if ( Msg == 16 )
{
SaveGlobals();
if ( CheckSave(0) )
{
if ( !WinHelpW(hwndNP, szHelpFile, 2u, 0) )
MessageBoxW(hwndNP, szErrSpace, szNN, 0x1010u);
DestroyWindow(hwndStatus);
DestroyWindow(hwndNP);
DeleteObject(hFont);
}
return 0;
}
if ( Msg != 17 )
{
if ( Msg == 26 )
return 0;
goto LABEL_50;
}
if ( fInSaveAsDlg )
{
MessageBeep(0);
MessageBeep(0);
MessageBoxW(hwndNP, (LPCWSTR)szCannotQuit, szNN, 0x1000u);
return 0;
}
return CheckSave(1);
}
// 1009094: using guessed type int szCannotQuit;
// 1009848: using guessed type int dwEmSetHandle;
// 100984C: using guessed type int fRunBySetup;
// 1009854: using guessed type int fInSaveAsDlg;
// 1009A94: using guessed type int fReverse;
// 100A488: using guessed type int wFRMsg;
//----- (0100393A) --------------------------------------------------------
LSTATUS __stdcall RegWriteInt(HKEY hKey, LPCWSTR lpValueName, BYTE Data)
{
return RegSetValueExW(hKey, lpValueName, 0, 4u, &Data, 4u);
}
//----- (0100395E) --------------------------------------------------------
LSTATUS __stdcall RegWriteString(HKEY hKey, LPCWSTR lpValueName, LPCWSTR lpData)
{
int v3; // eax@1
v3 = lstrlenW(lpData);
return RegSetValueExW(hKey, lpValueName, 0, 1u, (const BYTE *)lpData, 2 * v3 + 2);
}
//----- (0100398D) --------------------------------------------------------
int __stdcall RegGetInt(HKEY hKey, LPCWSTR lpValueName, int a3)
{
int result; // eax@4
DWORD cbData; // [sp+0h] [bp-Ch]@1
BYTE Data[4]; // [sp+4h] [bp-8h]@1
DWORD Type; // [sp+8h] [bp-4h]@1
Type = 0;
*(_DWORD *)Data = 1;
cbData = 4;
if ( hKey && !RegQueryValueExW(hKey, lpValueName, 0, &Type, Data, &cbData) && Type == 4 )
result = *(_DWORD *)Data;
else
result = a3;
return result;
}
//----- (010039E2) --------------------------------------------------------
LSTATUS __stdcall RegGetString(HKEY Type, LPCWSTR lpValueName, const void *a3, LPBYTE lpData, DWORD cbData)
{
unsigned int v5; // esi@1
LPBYTE v6; // edi@1
LSTATUS result; // eax@2
v5 = 2 * cbData;
v6 = lpData;
cbData *= 2;
if ( !Type
|| (result = RegQueryValueExW(Type, lpValueName, 0, (LPDWORD)&Type, lpData, &cbData)) != 0
|| Type != (HKEY)1 )
{
result = v5;
memcpy(v6, a3, v5);
}
return result;
}
//----- (01003A39) --------------------------------------------------------
LSTATUS __cdecl SaveGlobals()
{
LSTATUS result; // eax@1
WINDOWPLACEMENT wndpl; // [sp+0h] [bp-30h]@2
HKEY hKey; // [sp+2Ch] [bp-4h]@1
result = RegCreateKeyW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Notepad", &hKey);
if ( !result )
{
RegWriteInt(hKey, L"lfEscapement", LOBYTE(FontStruct.lfEscapement));
RegWriteInt(hKey, L"lfOrientation", LOBYTE(FontStruct.lfOrientation));
RegWriteInt(hKey, L"lfWeight", LOBYTE(FontStruct.lfWeight));
RegWriteInt(hKey, L"lfItalic", FontStruct.lfItalic);
RegWriteInt(hKey, L"lfUnderline", FontStruct.lfUnderline);
RegWriteInt(hKey, L"lfStrikeOut", FontStruct.lfStrikeOut);
RegWriteInt(hKey, L"lfCharSet", FontStruct.lfCharSet);
RegWriteInt(hKey, L"lfOutPrecision", FontStruct.lfOutPrecision);
RegWriteInt(hKey, L"lfClipPrecision", FontStruct.lfClipPrecision);
RegWriteInt(hKey, L"lfQuality", FontStruct.lfQuality);
RegWriteInt(hKey, L"lfPitchAndFamily", FontStruct.lfPitchAndFamily);
RegWriteInt(hKey, L"iPointSize", iPointSize);
RegWriteInt(hKey, L"fWrap", fWrap);
RegWriteInt(hKey, L"StatusBar", fStatus);
RegWriteInt(hKey, L"fSaveWindowPositions", Data);
RegWriteString(hKey, L"lfFaceName", FontStruct.lfFaceName);
RegWriteString(hKey, L"szHeader", &chPageText);
RegWriteString(hKey, L"szTrailer", &String1);
RegWriteInt(hKey, L"iMarginTop", LOBYTE(g_PageSetupDlg.rtMargin.top));
RegWriteInt(hKey, L"iMarginBottom", LOBYTE(g_PageSetupDlg.rtMargin.bottom));
RegWriteInt(hKey, L"iMarginLeft", LOBYTE(g_PageSetupDlg.rtMargin.left));
RegWriteInt(hKey, L"iMarginRight", LOBYTE(g_PageSetupDlg.rtMargin.right));
RegWriteInt(hKey, L"fMLE_is_broken", fMLE_is_broken);
wndpl.length = 44;
if ( GetWindowPlacement(hwndNP, &wndpl) )
{
RegWriteInt(hKey, L"iWindowPosX", LOBYTE(wndpl.rcNormalPosition.left));
RegWriteInt(hKey, L"iWindowPosY", LOBYTE(wndpl.rcNormalPosition.top));
RegWriteInt(hKey, L"iWindowPosDX", LOBYTE(wndpl.rcNormalPosition.right) - LOBYTE(wndpl.rcNormalPosition.left));
RegWriteInt(hKey, L"iWindowPosDY", LOBYTE(wndpl.rcNormalPosition.bottom) - LOBYTE(wndpl.rcNormalPosition.top));
}
result = RegCloseKey(hKey);
}
return result;
}
//----- (01003C92) --------------------------------------------------------
LSTATUS __cdecl GetGlobals()
{
HGDIOBJ v0; // eax@1
LSTATUS result; // eax@5
HKEY hKey; // [sp+8h] [bp-64h]@3
char pv; // [sp+Ch] [bp-60h]@2
int v4; // [sp+14h] [bp-58h]@5
int v5; // [sp+18h] [bp-54h]@5
int v6; // [sp+1Ch] [bp-50h]@5
unsigned __int8 v7; // [sp+20h] [bp-4Ch]@5
unsigned __int8 v8; // [sp+21h] [bp-4Bh]@5
unsigned __int8 v9; // [sp+22h] [bp-4Ah]@5
unsigned __int8 v10; // [sp+23h] [bp-49h]@5
unsigned __int8 v11; // [sp+24h] [bp-48h]@5
unsigned __int8 v12; // [sp+25h] [bp-47h]@5
unsigned __int8 v13; // [sp+26h] [bp-46h]@5
unsigned __int8 v14; // [sp+27h] [bp-45h]@5
v0 = GetStockObject(16);
if ( v0 )
GetObjectW(v0, 92, &pv);
if ( RegCreateKeyW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Notepad", &hKey) )
hKey = 0;
FontStruct.lfWidth = 0;
FontStruct.lfEscapement = RegGetInt(hKey, L"lfEscapement", v4);
FontStruct.lfOrientation = RegGetInt(hKey, L"lfOrientation", v5);
FontStruct.lfWeight = RegGetInt(hKey, L"lfWeight", v6);
FontStruct.lfItalic = RegGetInt(hKey, L"lfItalic", v7);
FontStruct.lfUnderline = RegGetInt(hKey, L"lfUnderline", v8);
FontStruct.lfStrikeOut = RegGetInt(hKey, L"lfStrikeOut", v9);
FontStruct.lfCharSet = RegGetInt(hKey, L"lfCharSet", v10);
FontStruct.lfOutPrecision = RegGetInt(hKey, L"lfOutPrecision", v11);
FontStruct.lfClipPrecision = RegGetInt(hKey, L"lfClipPrecision", v12);
FontStruct.lfQuality = RegGetInt(hKey, L"lfQuality", v13);
FontStruct.lfPitchAndFamily = RegGetInt(hKey, L"lfPitchAndFamily", v14);
RegGetString(hKey, L"lfFaceName", L"Lucida Console", (LPBYTE)FontStruct.lfFaceName, 0x20u);
*(_DWORD *)&iPointSize = RegGetInt(hKey, L"iPointSize", 100);
fWrap = RegGetInt(hKey, L"fWrap", 0);
*(_DWORD *)&fStatus = RegGetInt(hKey, L"StatusBar", 0);
*(_DWORD *)&Data = RegGetInt(hKey, L"fSaveWindowPositions", 0);
RegGetString(hKey, L"szHeader", &chPageText, (LPBYTE)&chPageText, 0x28u);
RegGetString(hKey, L"szTrailer", &String1, (LPBYTE)&String1, 0x28u);
g_PageSetupDlg.rtMargin.top = RegGetInt(hKey, L"iMarginTop", g_PageSetupDlg.rtMargin.top);
g_PageSetupDlg.rtMargin.bottom = RegGetInt(hKey, L"iMarginBottom", g_PageSetupDlg.rtMargin.bottom);
g_PageSetupDlg.rtMargin.left = RegGetInt(hKey, L"iMarginLeft", g_PageSetupDlg.rtMargin.left);
g_PageSetupDlg.rtMargin.right = RegGetInt(hKey, L"iMarginRight", g_PageSetupDlg.rtMargin.right);
Y = RegGetInt(hKey, L"iWindowPosY", 2147483648);
X = RegGetInt(hKey, L"iWindowPosX", 2147483648);
nWidth = RegGetInt(hKey, L"iWindowPosDX", 2147483648);
nHeight = RegGetInt(hKey, L"iWindowPosDY", 2147483648);
result = RegGetInt(hKey, L"fMLE_is_broken", 0);
*(_DWORD *)&fMLE_is_broken = result;
if ( hKey )
result = RegCloseKey(hKey);
return result;
}
// 10016DC: using guessed type wchar_t aLucidaConsole[15];
//----- (01003F4C) --------------------------------------------------------
signed int __usercall sub_1003F4C(WCHAR **a1, unsigned __int16 *a2)
{
unsigned __int16 *v2; // edi@1
WCHAR **v3; // ebx@1
unsigned __int16 v4; // ax@1
__int16 v5; // ST10_2@2
WCHAR *v6; // eax@2
signed int result; // eax@4
v2 = a2;
v3 = a1;
v4 = *a2;
if ( *a2 )
{
while ( 1 )
{
v5 = (unsigned int)CharUpperW((LPWSTR)v4);
v6 = (WCHAR *)*(_WORD *)v3;
++v2;
v3 = (WCHAR **)((char *)v3 + 2);
if ( v5 != (unsigned __int16)CharUpperW(v6) )
break;
v4 = *v2;
if ( !*v2 )
goto LABEL_4;
}
result = 1;
}
else
{
LABEL_4:
result = 0;
}
return result;
}
//----- (01003F99) --------------------------------------------------------
LPCWSTR __stdcall GetFileName(LPWSTR lpFileName, LPCWSTR lpString2)
{
LPCWSTR i; // esi@1
LPWSTR v3; // ecx@1
unsigned int v4; // edx@4
const WCHAR v5; // di@4
WCHAR v6; // ax@8
HANDLE v7; // eax@10
struct _WIN32_FIND_DATAW FindFileData; // [sp+Ch] [bp-254h]@10
i = lpString2;
v3 = lpFileName;
if ( *lpString2 == 34 || *lpString2 == 39 )
{
v4 = 0;
v5 = *lpString2;
for ( i = lpString2 + 1; ; ++i )
{
v6 = *i;
if ( !*i || v6 == v5 || v4 >= 0x104 )
break;
*v3 = v6;
++v3;
++v4;
}
*v3 = 0;
}
else
{
lstrcpynW(lpFileName, lpString2, 260);
}
v7 = FindFirstFileW(lpFileName, &FindFileData);
if ( v7 != (HANDLE)-1 || (AddExt(lpFileName), v7 = FindFirstFileW(lpFileName, &FindFileData), v7 != (HANDLE)-1) )
FindClose(v7);
return i;
}
// 1009604: using guessed type int __security_cookie;
//----- (01004047) --------------------------------------------------------
HLOCAL __stdcall SizeStrings(HINSTANCE hInstance)
{
int v1; // esi@1
signed int v2; // edi@2
int v3; // ebx@2
int v4; // eax@3
HLOCAL result; // eax@1
WCHAR *hMem; // [sp+Ch] [bp-4h]@7
v1 = 280;
for ( result = LocalAlloc(0x40u, 0x230u); ; result = LocalAlloc(0x40u, 2 * v1) )
{
hMem = (WCHAR *)result;
if ( !result )
break;
v2 = 0;
v3 = 0;
do
{
v4 = LoadStringW(hInstance, *(_DWORD *)rgsz[v2], hMem, v1);
if ( v4 >= v1 - 1 )
break;
++v2;
v3 += v4 + 1;
}
while ( v2 < 45 );
LocalFree(hMem);
if ( v2 >= 45 )
return (HLOCAL)v3;
v1 *= 2;
}
return result;
}
// 10090E8: using guessed type int rgsz[9];
//----- (010040BA) --------------------------------------------------------
HLOCAL __stdcall InitStrings(HINSTANCE hInstance)
{
HLOCAL result; // eax@1
WCHAR *v2; // esi@2
int v3; // ebx@3
UINT **v4; // edi@5
int v5; // eax@6
result = SizeStrings(hInstance);
if ( result )
{
result = LocalAlloc(0x40u, 2 * (_DWORD)result);
v2 = (WCHAR *)result;
if ( result )
{
v3 = LocalSize(result) >> 1;
if ( v3 )
{
v4 = (UINT **)rgsz;
while ( 1 )
{
v5 = LoadStringW(hInstance, **v4, v2, v3) + 1;
**v4 = (UINT)v2;
v2 += v5;
if ( v5 > v3 )
break;
++v4;
v3 -= v5;
if ( (signed int)v4 >= (signed int)&off_100919C )
{
lstrcpynW(&chPageText, *(&szHelpFile + 1), 40);
lstrcpynW(&String1, *(&szHelpFile + 2), 40);
chMerge = *(_WORD *)szMerge;
return (HLOCAL)1;
}
}
MessageBoxW(0, L"Out of RC string space!!", L"DEV Error!", 0);
result = 0;
}
else
{
result = 0;
}
}
}
return result;
}
// 1009070: using guessed type int szMerge;
// 10090E8: using guessed type int rgsz[9];
// 100919C: using guessed type __int16 *off_100919C;
// 100AB90: using guessed type __int16 chMerge;
//----- (0100417A) --------------------------------------------------------
int __stdcall SkipBlanks(int a1)
{
int result; // eax@1
for ( result = a1; *(_WORD *)result == 32 || *(_WORD *)result == 9; result += 2 )
;
return result;
}
//----- (0100419E) --------------------------------------------------------
signed int __stdcall ProcessSetupOption(WCHAR **a1)
{
const WCHAR *v1; // eax@2
DWORD v2; // eax@4
int v3; // eax@5
int v4; // eax@7
signed int result; // eax@14
int v6; // [sp+Ch] [bp-4h]@1
v6 = 0;
if ( !sub_1003F4C(a1, L"/.SETUP") )
{
fRunBySetup = 1;
hSysMenuSetup = GetSystemMenu(hwndNP, 0);
hAccel = LoadAcceleratorsW(hInstanceNP, L"SlipUpAcc");
SetWindowLongW(hwndNP, -16, 16580608);
v1 = (const WCHAR *)SkipBlanks((int)((char *)a1 + 14));
if ( !*v1 )
return 6;
GetFileName((LPWSTR)&szFileName, v1);
fp = CreateFileW(&szFileName, 0x80000000, 3u, 0, 3u, 0x80u, 0);
if ( fp != (HANDLE)-1 )
goto LABEL_19;
v2 = GetLastError() - 2;
if ( v2 )
{
v3 = v2 - 3;
if ( v3 )
v4 = v3 == 118 ? AlertBox(hwndNP, szNN, (LPCWSTR)szNVF, &szFileName, 0x31u) : AlertBox(
hwndNP,
szNN,
szDiskError,
&szFileName,
0x31u);
else
v4 = AlertBox(hwndNP, szNN, (LPCWSTR)szACCESSDENY, &szFileName, 0x31u);
v6 = v4;
}
else
{
v6 = AlertBox(hwndNP, szNN, szFNF, &szFileName, 0x33u);
if ( v6 == 6 )
fp = CreateFileW(&szFileName, 0xC0000000, 3u, 0, 4u, 0x80u, 0);
}
if ( fp != (HANDLE)-1 )
{
LABEL_19:
LoadFile(&szFileName, dword_1009A80);
result = 2;
if ( v6 == 2 )
return result;
return 6;
}
}
return 0;
}
// 100175C: using guessed type wchar_t a_setup[8];
// 1009064: using guessed type int szNVF;
// 100909C: using guessed type int szACCESSDENY;
// 100984C: using guessed type int fRunBySetup;
//----- (010042F9) --------------------------------------------------------
signed int __stdcall ProcessShellOptions(WCHAR **a1, int nCmdShow)
{
int v2; // eax@2
const WCHAR *v3; // esi@5
int v4; // eax@6
int v5; // eax@8
int v6; // eax@9
unsigned int v7; // edx@9
WCHAR v8; // cx@13
DWORD v9; // eax@16
int v10; // eax@17
int v11; // eax@18
const WCHAR *v12; // eax@20
signed int v14; // [sp+8h] [bp-4h]@1
v14 = 1;
if ( sub_1003F4C(a1, L"/PT") )
{
if ( sub_1003F4C(a1, L"/P") )
return 0;
v2 = SkipBlanks((int)(a1 + 1));
}
else
{
v2 = SkipBlanks((int)((char *)a1 + 6));
v14 = 0;
}
v3 = (const WCHAR *)v2;
if ( !*(_WORD *)v2 )
return 0;
ShowWindow(hwndNP, nCmdShow);
v4 = (int)(GetFileName((LPWSTR)&szFileName, v3) + 1);
if ( !v14 )
{
if ( *(_WORD *)v4 )
{
v5 = SkipBlanks(v4);
if ( *(_WORD *)v5 == 34 )
{
v6 = v5 + 2;
v7 = 0;
while ( 1 )
{
v8 = *(_WORD *)v6;
if ( !*(_WORD *)v6 || v8 == 34 || v7 >= 0xFF )
break;
*(&szPrinterName + v7++) = v8;
v6 += 2;
}
*(&szPrinterName + v7) = 0;
goto LABEL_15;
}
}
return 0;
}
LABEL_15:
fp = CreateFileW(&szFileName, 0x80000000, 3u, 0, 3u, 0x80u, 0);
if ( fp == (HANDLE)-1 )
{
v9 = GetLastError() - 2;
if ( v9 )
{
v10 = v9 - 3;
if ( v10 && (v11 = v10 - 60) != 0 )
{
if ( v11 == 58 )
v12 = (const WCHAR *)szNVF;
else
v12 = szDiskError;
}
else
{
v12 = (const WCHAR *)szACCESSDENY;
}
}
else
{
v12 = szFNF;
}
AlertBox(hwndNP, szNN, v12, &szFileName, 0x30u);
}
else
{
LoadFile(&szFileName, dword_1009A80);
if ( v14 )
PrintIt(1);
else
PrintIt(2);
}
return 1;
}
// 100176C: using guessed type wchar_t aP[3];
// 1001774: using guessed type wchar_t aPt[4];
// 1009064: using guessed type int szNVF;
// 100909C: using guessed type int szACCESSDENY;
//----- (01004458) --------------------------------------------------------
HFILTER __stdcall CreateFilter()
{
WCHAR *v0; // ebx@1
WCHAR *v1; // ebx@1
WCHAR *v2; // ebx@1
HFILTER result; // eax@1
WCHAR *lpString; // [sp+14h] [bp+8h]@0
lstrcpyW(lpString, szAnsiText);
v0 = &lpString[lstrlenW(lpString) + 1];
lstrcpyW(v0, L"*.txt");
v1 = &v0[lstrlenW(v0) + 1];
lstrcpyW(v1, szAllFiles);
v2 = &v1[lstrlenW(v1) + 1];
lstrcpyW(v2, L"*.*");
result = (HFILTER)lstrlenW(v2);
v2[(_DWORD)result + 1] = 0;
return result;
}
// 1004458: inconsistent function type and number of purged bytes
//----- (010044BB) --------------------------------------------------------
int __stdcall EnumProc(int a1, int a2, int a3, int a4)
{
*(_BYTE *)(a4 + 23) = *(_BYTE *)(a1 + 23);
return 0;
}
//----- (010044D7) --------------------------------------------------------
BOOL __usercall sub_10044D7(HINSTANCE a1)
{
int v1; // eax@1
WNDCLASSEXW v3; // [sp+4h] [bp-30h]@1
v3.cbSize = 48;
v1 = GetSystemMetrics(41);
v3.hCursor = LoadCursorW(0, (LPCWSTR)(32513 - (v1 != 0)));
v3.hIcon = LoadIconW(a1, (LPCWSTR)2);
v3.hIconSm = LoadImageW(a1, (LPCWSTR)2, 1u, 16, 16, 0);
v3.lpszMenuName = (LPCWSTR)1;
v3.hInstance = a1;
v3.lpszClassName = L"Notepad";
v3.lpfnWndProc = (WNDPROC)NPWndProc;
v3.hbrBackground = (HBRUSH)6;
v3.style = 0;
v3.cbClsExtra = 0;
v3.cbWndExtra = 0;
return RegisterClassExW(&v3) != 0;
}
//----- (01004565) --------------------------------------------------------
signed int __stdcall NPInit(HINSTANCE hInstance, int a2, __int32 a3, int nCmdShow)
{
int v4; // eax@5
HACCEL v5; // eax@5
void *v6; // ecx@5
HWND v7; // edx@9
HMENU v8; // eax@16
HMENU v9; // eax@16
int v10; // eax@17
int v11; // eax@19
int v12; // edi@19
signed int v13; // eax@25
int v15; // eax@34
WINDOWPLACEMENT wndpl; // [sp+Ch] [bp-A8h]@12
struct tagRECT Rect; // [sp+38h] [bp-7Ch]@13
int v18; // [sp+48h] [bp-6Ch]@15
int v19; // [sp+4Ch] [bp-68h]@15
int v20; // [sp+50h] [bp-64h]@15
int v21; // [sp+54h] [bp-60h]@15
LPARAM lParam; // [sp+58h] [bp-5Ch]@15
int v23; // [sp+5Ch] [bp-58h]@15
HINSTANCE v24; // [sp+60h] [bp-54h]@1
__int32 v25; // [sp+64h] [bp-50h]@1
HGDIOBJ wParam; // [sp+68h] [bp-4Ch]@17
HDC hDC; // [sp+6Ch] [bp-48h]@3
WCHAR String1; // [sp+70h] [bp-44h]@17
v24 = hInstance;
v25 = a3;
wFRMsg = RegisterWindowMessageW(L"commdlg_FindReplace");
if ( !wFRMsg )
return 0;
wHlpMsg = RegisterWindowMessageW(L"commdlg_help");
if ( !wHlpMsg )
return 0;
hDC = GetDC(0);
if ( !hDC )
return 0;
if ( !InitStrings(hInstance) )
return 0;
v4 = GetSystemMetrics(41);
hStdCursor = LoadCursorW(0, (LPCWSTR)(32513 - (v4 != 0)));
hWaitCursor = LoadCursorW(0, (LPCWSTR)0x7F02);
v5 = LoadAcceleratorsW(hInstance, L"MainAcc");
hAccel = v5;
if ( !hWaitCursor || !v5 || !a2 && !sub_10044D7(hInstance) )
return 0;
hInstanceNP = hInstance;
g_PageSetupDlg.lStructSize = 84;
g_PageSetupDlg.hDevMode = 0;
g_PageSetupDlg.hDevNames = 0;
g_PageSetupDlg.hInstance = hInstance;
SetPageSetupDefaults(v6);
GetGlobals();
v7 = CreateWindowExW(0, L"Notepad", &szOtherStuff, 0xCF0000u, X, Y, nWidth, nHeight, 0, 0, hInstance, 0);
hwndNP = v7;
g_PageSetupDlg.hwndOwner = v7;
if ( !v7 )
return 0;
if ( nWidth != 2147483648 && nHeight != 2147483648 )
{
memset(&wndpl, 0, sizeof(wndpl));
wndpl.rcNormalPosition.left = X;
wndpl.rcNormalPosition.right = nWidth + X;
wndpl.rcNormalPosition.top = Y;
wndpl.rcNormalPosition.bottom = nHeight + Y;
wndpl.length = 44;
SetWindowPlacement(v7, &wndpl);
v7 = hwndNP;
}
DragAcceptFiles(v7, 1);
GetClientRect(hwndNP, &Rect);
hwndEdit = CreateWindowExW(
0x200u,
L"Edit",
&szOtherStuff,
fWrap != 0 ? 1344274692 : 1345323268,
0,
0,
Rect.right,
Rect.bottom - 100,
hwndNP,
(HMENU)0xF,
v24,
0);
if ( !hwndEdit )
return 0;
hwndStatus = CreateStatusWindowW(
(*(_DWORD *)&fStatus != 0 ? 0x10000000 : 0) | 0x44800000,
&szOtherStuff,
hwndNP,
0x401u);
if ( !hwndStatus )
return 0;
UpdateStatusBar(1);
GetClientRect(hwndStatus, (LPRECT)&v18);
dyStatus = v21 - v19;
v23 = -1;
lParam = 3 * (v20 - v18) / 4;
SendMessageW(hwndStatus, 0x404u, 2u, (LPARAM)&lParam);
SendMessageW(hwndEdit, 0xC8u, fWrap, 0);
if ( fWrap )
{
v8 = GetMenu(hwndNP);
v9 = GetSubMenu(v8, 3);
EnableMenuItem(v9, 0x1Bu, 1u);
}
v10 = GetDeviceCaps(hDC, 90);
FontStruct.lfHeight = -MulDiv(*(int *)&iPointSize, v10, 720);
hFont = CreateFontIndirectW(&FontStruct);
wParam = SelectObject(hDC, hFont);
GetTextFaceW(hDC, 32, &String1);
SelectObject(hDC, wParam);
if ( lstrcmpiW(&String1, FontStruct.lfFaceName) )
{
EnumFontsW(hDC, FontStruct.lfFaceName, (FONTENUMPROCW)EnumProc, (LPARAM)&FontStruct);
DeleteObject(hFont);
hFont = CreateFontIndirectW(&FontStruct);
}
SendMessageW(hwndEdit, 0x30u, (WPARAM)hFont, 0);
ReleaseDC(0, hDC);
szSearch = 0;
hEdit = LocalAlloc(0x42u, 2u);
PostMessageW(hwndEdit, 0xC5u, 0, 0);
SetTitle(szUntitled);
ShowWindow(hwndNP, nCmdShow);
SetCursor(hStdCursor);
v11 = SkipBlanks(v25);
dword_1009A80 = -1;
v12 = v11;
if ( !sub_1003F4C((WCHAR **)v11, L"/A") )
{
dword_1009A80 = 0;
LABEL_24:
v12 = SkipBlanks(v12 + 4);
goto LABEL_25;
}
if ( !sub_1003F4C((WCHAR **)v12, L"/W") )
dword_1009A80 = 1;
if ( dword_1009A80 != -1 )
goto LABEL_24;
LABEL_25:
v13 = ProcessSetupOption((WCHAR **)v12);
if ( v13 )
{
if ( v13 == 2 )
return 0;
LABEL_40:
CreateFilter();
CreateFilter();
memset(&OFN, 0, 0x58u);
OFN.hInstance = v24;
memset(&FR, 0, sizeof(FR));
OFN.lStructSize = 88;
OFN.hwndOwner = hwndNP;
OFN.nMaxFile = 260;
FR.lStructSize = 40;
FR.hwndOwner = hwndNP;
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&v25);
SendMessageW(hwndEdit, 0xB1u, (WPARAM)wParam, v25);
SendMessageW(hwndEdit, 0xB7u, 0, 0);
if ( ((unsigned int)GetKeyboardLayout(0) & 0x3FF) == 17 )
SendMessageW(hwndEdit, 0xD8u, 1u, 1);
return 1;
}
if ( !ProcessShellOptions((WCHAR **)v12, nCmdShow) )
{
if ( *(_WORD *)v12 )
{
GetFileName((LPWSTR)&szFileName, (LPCWSTR)v12);
fp = CreateFileW(&szFileName, 0x80000000, 3u, 0, 3u, 0x80u, 0);
if ( fp != (HANDLE)-1 )
goto LABEL_45;
if ( GetLastError() == 2 )
{
v15 = AlertBox(hwndNP, szNN, szFNF, &szFileName, 0x33u);
if ( v15 == 2 )
return 0;
if ( v15 == 6 )
fp = CreateFileW(&szFileName, 0xC0000000, 3u, 0, 4u, 0x80u, 0);
}
else
{
AlertUser_FileFail(&szFileName);
SetTitle(szUntitled);
lstrcpyW((LPWSTR)&szFileName, szUntitled);
}
if ( fp != (HANDLE)-1 )
LABEL_45:
LoadFile(&szFileName, dword_1009A80);
}
goto LABEL_40;
}
PostMessageW(hwndNP, 0x10u, 0, 0);
return 1;
}
// 1001784: using guessed type wchar_t aW[3];
// 100178C: using guessed type wchar_t aA[3];
// 100A484: using guessed type int wHlpMsg;
// 100A488: using guessed type int wFRMsg;
// 100A6E0: using guessed type int dyStatus;
//----- (01004B65) --------------------------------------------------------
void __stdcall ReverseEndian(int a1, int a2, int a3)
{
int v3; // esi@1
int v4; // eax@2
int v5; // ecx@2
__int16 v6; // bx@3
v3 = a3;
if ( a3 )
{
v4 = a2;
v5 = a1;
do
{
LOBYTE(v6) = 0;
HIBYTE(v6) = *(_BYTE *)v4;
*(_WORD *)v5 = v6 ^ *(_BYTE *)(v4 + 1);
v5 += 2;
v4 += 2;
--v3;
}
while ( v3 );
}
}
//----- (01004B99) --------------------------------------------------------
signed int __stdcall AnsiWriteFile(HANDLE hFile, UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar)
{
int v6; // edi@5
HLOCAL v7; // eax@6
int v8; // esi@9
DWORD NumberOfBytesWritten; // [sp+4h] [bp-10h]@10
char v10; // [sp+8h] [bp-Ch]@4
LPCVOID hMem; // [sp+Ch] [bp-8h]@6
LPBOOL lpUsedDefaultChar; // [sp+10h] [bp-4h]@3
if ( !cchWideChar )
return 1;
lpUsedDefaultChar = 0;
if ( CodePage != 65001 )
lpUsedDefaultChar = (LPBOOL)&v10;
v6 = WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, 0, 0, 0, lpUsedDefaultChar);
if ( !v6 )
return 0;
v7 = LocalAlloc(0x40u, v6 + 1);
hMem = v7;
if ( !v7 )
{
SetLastError(8u);
return 0;
}
v8 = WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, (LPSTR)v7, v6, 0, lpUsedDefaultChar);
if ( v8 )
v8 = WriteFile(hFile, hMem, v6, &NumberOfBytesWritten, 0);
LocalFree((HLOCAL)hMem);
return v8;
}
//----- (01004C49) --------------------------------------------------------
LRESULT __cdecl ClearFmt()
{
LRESULT result; // eax@5
if ( fWrap )
{
if ( *(_DWORD *)&fMLE_is_broken )
{
GotoAndScrollInView(1);
}
else
{
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
SendMessageW(hwndEdit, 0xB1u, 0, 0);
}
result = SendMessageW(hwndEdit, 0xC8u, 0, 0);
}
return result;
}
//----- (01004CAB) --------------------------------------------------------
LRESULT __cdecl RestoreFmt()
{
LRESULT result; // eax@1
result = 0;
if ( fWrap )
{
if ( *(_DWORD *)&fMLE_is_broken )
{
result = NpReCreate(0x50200104u);
}
else
{
SendMessageW(hwndEdit, 0xC8u, 1u, 0);
result = SendMessageW(hwndEdit, 0xB1u, wParam, lParam);
}
}
return result;
}
//----- (01004CFF) --------------------------------------------------------
__int32 __stdcall New(int a1)
{
__int32 result; // eax@2
HLOCAL v2; // eax@3
if ( !a1 || (result = CheckSave(0)) != 0 )
{
SendMessageW(hwndEdit, 0xCu, 0, (LPARAM)&szOtherStuff);
fUntitled = 1;
lstrcpyW((LPWSTR)&szFileName, szUntitled);
SetTitle(&szFileName);
SendMessageW(hwndEdit, 0xB1u, 0, 0);
SendMessageW(hwndEdit, 0xB7u, 0, 0);
v2 = LocalReAlloc(hEdit, 2u, 2u);
if ( v2 )
hEdit = v2;
*(_WORD *)LocalLock(hEdit) = 0;
LocalUnlock(hEdit);
result = SendMessageW(hwndEdit, 0xBCu, (WPARAM)hEdit, 0);
szSearch = 0;
}
return result;
}
// 100901C: using guessed type int fUntitled;
//----- (01004DCD) --------------------------------------------------------
WCHAR *__stdcall AddExt(LPCWSTR lpString1)
{
WCHAR *result; // eax@1
unsigned int i; // ecx@1
int v3; // edx@6
result = (WCHAR *)lstrlenW(lpString1);
for ( i = (unsigned int)&lpString1[(_DWORD)result]; ; i -= 2 )
{
v3 = *(_WORD *)i;
if ( v3 == 46 || v3 == 92 || v3 == 58 || i <= (unsigned int)lpString1 )
break;
}
if ( *(_WORD *)i != 46 )
{
result = (WCHAR *)((char *)result + 5);
if ( (unsigned int)result <= 0x104 )
result = lstrcatW((LPWSTR)lpString1, L".txt");
}
return result;
}
//----- (01004E20) --------------------------------------------------------
int __stdcall AlertUser_FileFail(LPCWSTR lpString)
{
DWORD v1; // ST0C_4@1
DWORD v2; // eax@1
int result; // eax@2
WCHAR Text; // [sp+4h] [bp-204h]@1
v1 = GetUserDefaultUILanguage();
v2 = GetLastError();
if ( FormatMessageW(0x1200u, 0, v2, v1, &Text, 0x100u, 0) )
result = MessageBoxW(hwndNP, &Text, szNN, 0x30u);
else
result = AlertBox(hwndNP, szNN, szDiskError, lpString, 0x30u);
return result;
}
//----- (01004EAE) --------------------------------------------------------
signed int __stdcall SaveFile(HWND hWnd, LPCWSTR lpString, LPCWSTR lpBuffer)
{
HANDLE v3; // eax@2
int v5; // ebx@9
LRESULT v6; // eax@9
BOOL *v7; // eax@16
DWORD v8; // edi@16
int v9; // eax@18
BOOL v10; // eax@23
BOOL v11; // edi@24
int v12; // [sp+4h] [bp-14h]@5
BOOL UsedDefaultChar; // [sp+8h] [bp-10h]@1
HLOCAL hMem; // [sp+Ch] [bp-Ch]@9
UINT CodePage; // [sp+10h] [bp-8h]@16
DWORD NumberOfBytesWritten; // [sp+14h] [bp-4h]@14
const void *lpBuffera; // [sp+28h] [bp+10h]@10
UsedDefaultChar = 0;
if ( lpBuffer )
v3 = CreateFileW(lpString, 0xC0000000, 3u, 0, 4u, 0x80u, 0);
else
v3 = CreateFileW(lpString, 0xC0000000, 1u, 0, 4u, 0x80u, 0);
fp = v3;
if ( v3 == (HANDLE)-1 || (v12 = GetLastError() != 183, fp == (HANDLE)-1) )
{
AlertBox(hWnd, szNN, szCREATEERR, lpString, 0x30u);
return 0;
}
if ( fWrap )
ClearFmt();
v5 = SendMessageW(hwndEdit, 0xEu, 0, 0);
v6 = SendMessageW(hwndEdit, 0xBDu, 0, 0);
hMem = (HLOCAL)v6;
if ( !v6 )
goto LABEL_29;
lpBuffera = LocalLock((HLOCAL)v6);
if ( !lpBuffera )
goto LABEL_29;
if ( g_ftSaveAs == 1 )
{
WriteFile(fp, &unk_10091E4, 2u, &NumberOfBytesWritten, 0);
v10 = WriteFile(fp, lpBuffera, 2 * v5, &NumberOfBytesWritten, 0);
}
else
{
if ( g_ftSaveAs == 2 )
{
WriteFile(fp, &unk_10091E8, 2u, &NumberOfBytesWritten, 0);
ReverseEndian((int)lpBuffera, (int)lpBuffera, v5);
v11 = WriteFile(fp, lpBuffera, 2 * v5, &NumberOfBytesWritten, 0);
ReverseEndian((int)lpBuffera, (int)lpBuffera, v5);
goto LABEL_27;
}
if ( g_ftSaveAs == 3 )
WriteFile(fp, &BOM_UTF8, 3u, &NumberOfBytesWritten, 0);
if ( g_ftSaveAs == 3 )
{
v7 = 0;
CodePage = 65001;
v8 = 0;
}
else
{
CodePage = GetACP();
v7 = &UsedDefaultChar;
v8 = 1024;
}
v9 = WideCharToMultiByte(CodePage, v8, (LPCWSTR)lpBuffera, v5, 0, 0, 0, v7);
if ( UsedDefaultChar || v5 && !v9 )
{
if ( AlertBox(hWnd, szNN, szErrUnicode, lpString, 0x31u) == 2 )
{
LABEL_30:
SetCursor(hStdCursor);
CloseHandle(fp);
fp = (HANDLE)-1;
if ( hMem )
LocalUnlock(hMem);
if ( v12 )
DeleteFileW(lpString);
if ( fWrap )
RestoreFmt();
return 0;
}
v8 = 0;
}
v10 = AnsiWriteFile(fp, CodePage, v8, (LPCWSTR)lpBuffera, v5);
}
v11 = v10;
LABEL_27:
if ( !v11 )
{
SetCursor(hStdCursor);
LABEL_29:
AlertUser_FileFail(lpString);
goto LABEL_30;
}
SetEndOfFile(fp);
g_ftOpenedAs = g_ftSaveAs;
SendMessageW(hwndEdit, 0xB9u, 0, 0);
SetTitle(lpString);
fUntitled = 0;
CloseHandle(fp);
fp = (HANDLE)-1;
LocalUnlock(hMem);
if ( fWrap )
RestoreFmt();
SetCursor(hStdCursor);
return 1;
}
// 100901C: using guessed type int fUntitled;
// 100A528: using guessed type int g_ftSaveAs;
//----- (01005179) --------------------------------------------------------
signed int __stdcall LoadFile(LPCWSTR lpString, int a2)
{
BOOL v2; // eax@3
unsigned int v3; // esi@3
int v4; // edi@8
HANDLE v5; // eax@8
int v6; // eax@16
unsigned __int32 v7; // ebx@20
void (__stdcall *v8)(HWND, UINT, WPARAM, LPARAM); // esi@32
HLOCAL v9; // eax@32
bool v10; // zf@44
int v11; // eax@49
const void *v12; // esi@51
int v13; // eax@57
int v14; // ecx@60
unsigned __int32 v15; // edx@61
__int16 v16; // cx@65
int v17; // eax@65
__int16 v18; // cx@66
int v19; // eax@66
__int16 v20; // cx@67
int v21; // eax@67
int v22; // eax@76
struct _BY_HANDLE_FILE_INFORMATION FileInformation; // [sp+Ch] [bp-290h]@3
HANDLE hObject; // [sp+40h] [bp-25Ch]@8
int v26; // [sp+44h] [bp-258h]@24
int cbMultiByte; // [sp+48h] [bp-254h]@3
int v28; // [sp+4Ch] [bp-250h]@1
__int16 v29; // [sp+50h] [bp-24Ch]@10
HLOCAL hMem; // [sp+54h] [bp-248h]@1
LPCSTR lpMultiByteStr; // [sp+58h] [bp-244h]@15
LPCWSTR pcchNewDestLength; // [sp+5Ch] [bp-240h]@1
LPVOID v33; // [sp+60h] [bp-23Ch]@8
int v34; // [sp+64h] [bp-238h]@1
int v35; // [sp+68h] [bp-234h]@1
UINT CodePage; // [sp+6Ch] [bp-230h]@1
int v37; // [sp+70h] [bp-22Ch]@19
int wParam; // [sp+74h] [bp-228h]@29
WCHAR String; // [sp+78h] [bp-224h]@33
CPPEH_RECORD ms_exc; // [sp+284h] [bp-18h]@15
pcchNewDestLength = lpString;
v35 = 0;
v28 = 0;
v34 = 0;
hMem = 0;
CodePage = 0;
if ( fp == (HANDLE)-1 )
{
AlertUser_FileFail(lpString);
return 0;
}
v2 = GetFileInformationByHandle(fp, &FileInformation);
v3 = FileInformation.nFileSizeLow;
cbMultiByte = FileInformation.nFileSizeLow;
if ( !v2 )
{
AlertUser_FileFail(lpString);
LABEL_78:
CloseHandle(fp);
fp = (HANDLE)-1;
return 0;
}
if ( FileInformation.nFileSizeLow >= 0x40000000 || FileInformation.nFileSizeHigh )
{
AlertBox(hwndNP, szNN, szFTL, lpString, 0x30u);
goto LABEL_78;
}
SetCursor(hWaitCursor);
if ( v3 )
{
v4 = 0;
v33 = 0;
v5 = CreateFileMappingW(fp, 0, 2u, 0, v3, 0);
hObject = v5;
if ( !v5 )
goto LABEL_12;
v33 = MapViewOfFile(v5, 4u, 0, 0, v3);
CloseHandle(hObject);
}
else
{
v33 = &v29;
v29 = 0;
}
v4 = (int)v33;
LABEL_12:
CloseHandle(fp);
fp = (HANDLE)-1;
if ( !v4 )
{
SetCursor(hStdCursor);
AlertUser_FileFail(pcchNewDestLength);
return 0;
}
ms_exc.registration.TryLevel = 0;
lpMultiByteStr = (LPCSTR)v4;
if ( a2 != -1 )
{
if ( a2 == 1 )
{
v34 = 1;
v37 = 1;
v7 = v3 >> 1;
wParam = v3 >> 1;
v10 = *(_WORD *)v4 == -257;
}
else
{
if ( a2 != 2 )
{
if ( a2 != 3 )
goto LABEL_39;
v26 = 1;
CodePage = 65001;
v37 = 3;
if ( v3 <= 2 || *(_WORD *)v4 != -17425 || *(_BYTE *)(v4 + 2) != -65 )
goto LABEL_29;
goto LABEL_43;
}
v34 = 1;
v37 = 1;
v7 = v3 >> 1;
wParam = v3 >> 1;
v10 = *(_WORD *)v4 == -2;
}
if ( !v10 )
goto LABEL_30;
goto LABEL_47;
}
v6 = *(_WORD *)v4;
if ( v6 == 48111 )
{
if ( v3 <= 2 || *(_BYTE *)(v4 + 2) != -65 )
goto LABEL_25;
v26 = 1;
CodePage = 65001;
v37 = 3;
LABEL_43:
lpMultiByteStr = (LPCSTR)(v4 + 3);
v3 -= 3;
cbMultiByte = v3;
goto LABEL_29;
}
if ( v6 == 65279 )
{
v34 = 1;
v37 = 1;
goto LABEL_20;
}
if ( v6 == 65534 )
{
v34 = 1;
v37 = 2;
LABEL_20:
v7 = v3 >> 1;
LABEL_47:
--v7;
goto LABEL_48;
}
LABEL_25:
v34 = IsInputTextUnicode((const void *)v4, v3);
if ( !v34 )
{
v26 = IsTextUTF8(v4, v3);
if ( v26 )
{
v37 = 3;
CodePage = 65001;
LABEL_29:
v7 = wParam;
goto LABEL_30;
}
LABEL_39:
v37 = 0;
CodePage = 0;
goto LABEL_29;
}
v37 = 1;
v7 = v3 >> 1;
LABEL_48:
wParam = v7;
LABEL_30:
if ( !v34 )
{
v7 = MultiByteToWideChar(CodePage, 0, lpMultiByteStr, v3, 0, 0);
wParam = v7;
}
v8 = SendMessageW;
SendMessageW(hwndEdit, 0xBu, 0, 0);
SendMessageW(hwndEdit, 0xB1u, 0, 0);
SendMessageW(hwndEdit, 0xB7u, 0, 0);
v9 = LocalReAlloc(hEdit, 2 * v7 + 2, 2u);
hMem = v9;
if ( !v9 )
{
lstrcpyW(&String, pcchNewDestLength);
New(0);
SetCursor(hStdCursor);
AlertBox(hwndNP, szNN, szFTL, &String, 0x30u);
if ( (__int16 *)v4 != &v29 )
UnmapViewOfFile((LPCVOID)v4);
SendMessageW(hwndEdit, 0xBu, 0, 0);
ms_exc.registration.TryLevel = -1;
return 0;
}
v11 = (int)LocalLock(v9);
v35 = v11;
if ( v34 )
{
if ( *(_WORD *)v4 == -257 )
{
v12 = (const void *)(v4 + 2);
}
else
{
if ( *(_WORD *)v4 == -2 )
{
ReverseEndian(v11, v4 + 2, v7);
goto LABEL_57;
}
v12 = (const void *)v4;
}
memcpy((void *)v11, v12, 2 * v7);
v4 = (int)v33;
v8 = SendMessageW;
}
else
{
v7 = MultiByteToWideChar(CodePage, 0, lpMultiByteStr, cbMultiByte, (LPWSTR)v11, v7);
wParam = v7;
}
LABEL_57:
v13 = v35;
g_ftOpenedAs = v37;
ms_exc.registration.TryLevel = -1;
if ( (__int16 *)v4 != &v29 )
{
UnmapViewOfFile((LPCVOID)v4);
v13 = v35;
}
if ( v13 )
{
v14 = v13;
if ( v7 > 0 )
{
v15 = v7;
do
{
if ( !*(_WORD *)v14 )
*(_WORD *)v14 = 32;
v14 += 2;
--v15;
}
while ( v15 );
}
*(_WORD *)(v13 + 2 * v7) = 0;
v16 = *(_WORD *)v13;
v17 = v13 + 2;
if ( v16 != 46
|| (v18 = *(_WORD *)v17, v19 = v17 + 2, v18 != 76)
|| (v20 = *(_WORD *)v19, v21 = v19 + 2, v20 != 79)
|| (v10 = *(_WORD *)v21 == 71, v28 = 1, !v10) )
v28 = 0;
}
if ( hMem )
{
LocalUnlock(hMem);
hEdit = hMem;
}
lstrcpyW((LPWSTR)&szFileName, pcchNewDestLength);
SetTitle(pcchNewDestLength);
fUntitled = 0;
dwEmSetHandle = 1;
v8(hwndEdit, 0xBCu, (WPARAM)hEdit, 0);
if ( dwEmSetHandle == 2 )
{
SetCursor(hStdCursor);
dwEmSetHandle = 0;
AlertBox(hwndNP, szNN, szFTL, pcchNewDestLength, 0x30u);
New(0);
v8(hwndEdit, 0xBu, 1u, 0);
return 0;
}
dwEmSetHandle = 0;
PostMessageW(hwndEdit, 0xC5u, 0, 0);
if ( v28 )
{
v8(hwndEdit, 0xB1u, v7, v7);
v8(hwndEdit, 0xB7u, 0, 0);
InsertDateTime(1);
}
v22 = ((LRESULT (__stdcall *)(HWND, UINT, WPARAM, LPARAM))v8)(hwndEdit, 0x115u, 0xBEu, 0);
SetScrollPos(hwndNP, 1, v22, 1);
v8(hwndEdit, 0xBu, 1u, 0);
InvalidateRect(hwndEdit, 0, 1);
UpdateWindow(hwndEdit);
SetCursor(hStdCursor);
return 1;
}
// 100901C: using guessed type int fUntitled;
// 1009848: using guessed type int dwEmSetHandle;
//----- (0100580B) --------------------------------------------------------
const wchar_t *__stdcall ReverseScan(const WCHAR *a1, const wchar_t *a2, LPCWSTR Str2, int a4)
{
LPCWSTR v4; // esi@1
const wchar_t *v5; // ebx@1
const wchar_t v6; // ax@3
bool v7; // zf@4
bool v8; // zf@9
__int16 v10; // [sp+Ch] [bp-8h]@1
__int16 v11; // [sp+10h] [bp-4h]@1
int Str2a; // [sp+24h] [bp+10h]@1
v4 = Str2;
v11 = (unsigned int)CharUpperW((LPWSTR)*Str2);
v10 = (unsigned int)CharLowerW((LPWSTR)*Str2);
v5 = a2;
Str2a = lstrlenW(Str2);
if ( !a2 )
v5 = &a1[lstrlenW(a1)];
while ( 1 )
{
if ( v5 == a1 )
return 0;
--v5;
v6 = *v5;
if ( a4 )
{
v7 = v6 == *v4;
}
else
{
if ( v6 == v11 )
goto LABEL_10;
v7 = v6 == v10;
}
if ( v7 )
{
if ( a4 )
{
v8 = _wcsncmp(v5, v4, Str2a) == 0;
goto LABEL_11;
}
LABEL_10:
v8 = CompareStringW(0x400u, 0x10001001u, v5, Str2a, v4, Str2a) == 2;
LABEL_11:
if ( v8 )
return v5;
}
}
}
//----- (010058B8) --------------------------------------------------------
int __stdcall ForwardScan(wchar_t *lpString1, LPCWSTR Str2, int a3)
{
LPCWSTR v3; // esi@1
int v4; // ebx@1
wchar_t *v5; // edi@1
bool v6; // zf@4
const wchar_t v7; // ax@10
__int16 v9; // [sp+Ch] [bp-4h]@1
LPWSTR Str2a; // [sp+1Ch] [bp+Ch]@1
v3 = Str2;
v4 = lstrlenW(Str2);
Str2a = CharUpperW((LPWSTR)*Str2);
v5 = lpString1;
v9 = (unsigned int)CharLowerW((LPWSTR)*v3);
while ( 1 )
{
v7 = *v5;
if ( !*v5 )
return *v5 != 0 ? (int)v5 : 0;
if ( a3 )
{
if ( v7 != *v3 )
goto LABEL_9;
v6 = _wcsncmp(v5, v3, v4) == 0;
}
else
{
if ( v7 != (_WORD)Str2a && v7 != v9 )
goto LABEL_9;
v6 = CompareStringW(0x400u, 0x10001001u, v5, v4, v3, v4) == 2;
}
if ( v6 )
return *v5 != 0 ? (int)v5 : 0;
LABEL_9:
++v5;
}
}
//----- (0100594C) --------------------------------------------------------
signed int __stdcall Search(LPCWSTR Str2)
{
signed int result; // eax@2
HMENU v2; // eax@3
HMENU v3; // eax@3
LRESULT v4; // eax@5
LPVOID v5; // edi@6
LRESULT v6; // eax@9
WPARAM i; // ecx@9
const wchar_t *v8; // ebx@12
HCURSOR v9; // edi@17
HWND v10; // eax@17
int v11; // eax@20
HMENU v12; // eax@21
HMENU hMenu; // [sp+4h] [bp-24h]@3
void *hMem; // [sp+8h] [bp-20h]@5
int v15; // [sp+Ch] [bp-1Ch]@10
signed int v16; // [sp+10h] [bp-18h]@1
signed int v17; // [sp+14h] [bp-14h]@1
LPARAM lParam; // [sp+18h] [bp-10h]@3
int v19; // [sp+1Ch] [bp-Ch]@10
WPARAM v20; // [sp+20h] [bp-8h]@9
WPARAM wParam; // [sp+24h] [bp-4h]@3
v16 = 0;
v17 = 0;
if ( *Str2 )
{
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
v2 = GetMenu(hwndNP);
hMenu = v2;
v3 = GetSubMenu(v2, 1);
if ( GetMenuState(v3, 0x19u, 0) == 1 )
{
v17 = 1;
lParam = 0;
wParam = 0;
}
v4 = SendMessageW(hwndEdit, 0xBDu, 0, 0);
hMem = (void *)v4;
if ( v4 && (v5 = LocalLock((HLOCAL)v4)) != 0 )
{
if ( fReverse )
{
v20 = SendMessageW(hwndEdit, 0xC9u, wParam, 0);
v6 = SendMessageW(hwndEdit, 0xBBu, v20, 0);
for ( i = wParam; ; i = v15 )
{
v19 = v6;
v8 = ReverseScan((const WCHAR *)v5 + v6, (const wchar_t *)v5 + i, Str2, fCase);
if ( v8 )
break;
v15 = v19;
if ( !v20 )
break;
--v20;
v6 = SendMessageW(hwndEdit, 0xBBu, v20, 0);
}
}
else
{
v8 = (const wchar_t *)ForwardScan((wchar_t *)v5 + lParam, Str2, fCase);
}
LocalUnlock(hMem);
if ( v8 )
{
wParam = ((char *)v8 - (_BYTE *)v5) >> 1;
v11 = lstrlenW(Str2);
SendMessageW(hwndEdit, 0xB1u, wParam, wParam + v11);
if ( v17 )
{
v12 = GetSubMenu(hMenu, 1);
EnableMenuItem(v12, 0x19u, 0);
}
if ( !(FR.Flags & 0x20) )
{
SendMessageW(hwndEdit, 0xB7u, 0, 0);
UpdateStatusBar(1);
}
v16 = 1;
}
else if ( !(FR.Flags & 0x20) )
{
v9 = SetCursor(hStdCursor);
v10 = hDlgFind;
if ( !hDlgFind )
v10 = hwndNP;
AlertBox(v10, szNN, szCFS, &szSearch, 0x40u);
SetCursor(v9);
}
result = v16;
}
else
{
result = 0;
}
}
else
{
result = 0;
}
return result;
}
// 1009A94: using guessed type int fReverse;
//----- (01005B41) --------------------------------------------------------
signed int __stdcall NpReCreate(DWORD hWnd)
{
LONG v1; // eax@10
struct tagRECT Rect; // [sp+Ch] [bp-38h]@7
int v4; // [sp+1Ch] [bp-28h]@19
int v5; // [sp+20h] [bp-24h]@19
int v6; // [sp+24h] [bp-20h]@19
int v7; // [sp+28h] [bp-1Ch]@19
WPARAM wParam; // [sp+2Ch] [bp-18h]@3
LPARAM lParam; // [sp+30h] [bp-14h]@7
LRESULT v10; // [sp+34h] [bp-10h]@3
DWORD v11; // [sp+38h] [bp-Ch]@1
HCURSOR hCursor; // [sp+3Ch] [bp-8h]@1
HLOCAL hMem; // [sp+40h] [bp-4h]@3
HWND hWnda; // [sp+4Ch] [bp+8h]@7
v11 = (hWnd >> 20) & 1;
hCursor = SetCursor(hWaitCursor);
if ( v11 )
{
GotoAndScrollInView(1);
SendMessageW(hwndEdit, 0xC8u, 0, 0);
}
wParam = SendMessageW(hwndEdit, 0xB8u, 0, 0) != 0;
v10 = SendMessageW(hwndEdit, 0xEu, 0, 0);
hMem = LocalAlloc(2u, 2 * v10 + 2);
if ( !hMem )
{
if ( v11 )
SendMessageW(hwndEdit, 0xC8u, 1u, 0);
SetCursor(hCursor);
return 0;
}
GetClientRect(hwndNP, &Rect);
lParam = (LPARAM)LocalLock(hMem);
SendMessageW(hwndEdit, 0xDu, v10 + 1, lParam);
hWnda = CreateWindowExW(
0x200u,
L"Edit",
&szOtherStuff,
hWnd,
0,
0,
Rect.right,
Rect.bottom,
hwndNP,
(HMENU)0xF,
hInstanceNP,
0);
if ( !hWnda )
{
SetCursor(hCursor);
if ( v11 )
SendMessageW(hwndEdit, 0xC8u, 1u, 0);
LABEL_14:
LocalUnlock(hMem);
LocalFree(hMem);
return 0;
}
v1 = GetWindowLongW(hwndEdit, -20);
SetWindowLongW(hWnda, -20, v1 | 0x200);
SendMessageW(hWnda, 0x30u, (WPARAM)hFont, 1);
if ( !SendMessageW(hWnda, 0xCu, 0, lParam) )
{
SetCursor(hCursor);
if ( v11 )
SendMessageW(hwndEdit, 0xC8u, 1u, 0);
DestroyWindow(hWnda);
goto LABEL_14;
}
LocalUnlock(hMem);
DestroyWindow(hwndEdit);
hwndEdit = hWnda;
if ( hEdit )
LocalFree(hEdit);
hEdit = hMem;
PostMessageW(hwndEdit, 0xC5u, 0, 0);
ShowWindow(hwndNP, 5);
SendMessageW(hwndEdit, 0xB9u, wParam, 0);
SetFocus(hwndEdit);
SetCursor(hCursor);
if ( *(_DWORD *)&fStatus )
{
GetClientRect(hwndNP, (LPRECT)&v4);
NPSize(v6 - v4, v7 - v5);
UpdateStatusBar(1);
ShowWindow(hwndStatus, 5);
}
return 1;
}
//----- (01005DA3) --------------------------------------------------------
BOOL __stdcall AbortProc(int a1, int a2)
{
struct tagMSG Msg; // [sp+4h] [bp-1Ch]@2
while ( !fAbort && PeekMessageW(&Msg, 0, 0, 0, 1u) )
{
if ( !hAbortDlgWnd || !IsDialogMessageW(hAbortDlgWnd, &Msg) )
{
TranslateMessage(&Msg);
DispatchMessageW(&Msg);
}
}
return fAbort == 0;
}
// 100A134: using guessed type int fAbort;
//----- (01005E0C) --------------------------------------------------------
int __stdcall GetResolutions(HDC hdc)
{
int result; // eax@1
xPrintRes = GetDeviceCaps(hdc, 8);
yPrintRes = GetDeviceCaps(hdc, 10);
yPixInch = GetDeviceCaps(hdc, 90);
xPhysRes = GetDeviceCaps(hdc, 110);
yPhysRes = GetDeviceCaps(hdc, 111);
xPhysOff = GetDeviceCaps(hdc, 112);
result = GetDeviceCaps(hdc, 113);
yPhysOff = result;
return result;
}
// 1009AD0: using guessed type int yPhysOff;
// 1009AD4: using guessed type int xPhysOff;
// 1009AE0: using guessed type int yPixInch;
// 1009AE4: using guessed type int yPrintRes;
// 1009AE8: using guessed type int xPrintRes;
//----- (01005E6D) --------------------------------------------------------
HDC __cdecl GetPrinterDCviaDialog()
{
HGLOBAL v0; // edx@1
HDC v1; // edi@3
struct tagPDEXW pPD; // [sp+Ch] [bp-54h]@3
v0 = g_PageSetupDlg.hDevNames;
if ( !g_PageSetupDlg.hDevNames )
{
LOWORD(g_PageSetupDlg.Flags) |= 0x480u;
PageSetupDlgW(&g_PageSetupDlg);
g_PageSetupDlg.Flags &= 0xFFFFFB7F;
v0 = g_PageSetupDlg.hDevNames;
}
memset(&pPD, 0, sizeof(pPD));
pPD.hwndOwner = hwndNP;
v1 = (HDC)-1;
pPD.lStructSize = 84;
pPD.nStartPage = -1;
pPD.Flags = 8651020;
if ( g_PageSetupDlg.hDevMode )
pPD.hDevMode = g_PageSetupDlg.hDevMode;
if ( v0 )
pPD.hDevNames = v0;
if ( !PrintDlgExW(&pPD) )
{
if ( pPD.dwResultAction == 1 )
{
v1 = pPD.hDC;
}
else if ( pPD.dwResultAction != 2 )
{
return v1;
}
if ( !g_PageSetupDlg.hDevMode )
{
LOWORD(g_PageSetupDlg.Flags) |= 0x480u;
PageSetupDlgW(&g_PageSetupDlg);
g_PageSetupDlg.Flags &= 0xFFFFFB7F;
}
g_PageSetupDlg.hDevMode = pPD.hDevMode;
g_PageSetupDlg.hDevNames = pPD.hDevNames;
}
return v1;
}
//----- (01005F3C) --------------------------------------------------------
BOOL __cdecl DestroyAbortWnd()
{
BOOL result; // eax@1
EnableWindow(hwndNP, 1);
result = DestroyWindow(hAbortDlgWnd);
hAbortDlgWnd = 0;
return result;
}
//----- (01005F63) --------------------------------------------------------
signed int __stdcall PageSetupHookProc(HWND hDlg, int a2, HWND hWndMain, int a4)
{
int v4; // edi@5
const WCHAR *v5; // ebx@5
HWND v7; // esi@8
int v8; // eax@10
int v9; // eax@14
int v10; // edi@17
WCHAR *v11; // esi@17
struct tagPOINT Point; // [sp+8h] [bp-8h]@9
if ( a2 == 2 )
{
v10 = 30;
v11 = (WCHAR *)&chPageTextTemp;
do
{
GetDlgItemTextW(hDlg, v10, v11, 40);
v11 += 40;
++v10;
}
while ( (signed int)v11 <= (signed int)&word_100A390 );
return 0;
}
if ( a2 == 83 )
{
v9 = GetDlgCtrlID(*(HWND *)(a4 + 12));
if ( v9 < 30 || v9 > 33 )
return 0;
WinHelpW(*(HWND *)(a4 + 12), szHelpFile, 0xCu, (ULONG_PTR)s_PageSetupHelpIDs);
return 1;
}
if ( a2 == 123 )
{
v7 = hWndMain;
if ( hDlg == hWndMain )
{
GetCursorPos(&Point);
ScreenToClient(hDlg, &Point);
v7 = ChildWindowFromPoint(hDlg, Point);
}
v8 = GetDlgCtrlID(v7);
if ( v8 < 30 || v8 > 33 )
return 0;
WinHelpW(v7, szHelpFile, 0xAu, (ULONG_PTR)s_PageSetupHelpIDs);
return 1;
}
if ( a2 != 272 )
return 0;
v4 = 30;
v5 = &chPageText;
do
{
SendDlgItemMessageW(hDlg, v4, 0xC5u, 0x27u, 0);
SetDlgItemTextW(hDlg, v4, v5);
v5 += 40;
++v4;
}
while ( (signed int)v5 <= (signed int)&String1 );
SendDlgItemMessageW(hDlg, 30, 0xB1u, 0, 2555904);
return 1;
}
因字符限制发部分结果。。。。
转换结果非常理想文字限制发一半吧!
大老
博客:http://blog.sina.com.cn/dalao
网站: http://www.40440.cn
qq:79234668
201307
以下是转换结果
/* This file has been generated by the Hex-Rays decompiler.
Copyright (c) 2007-2013 Hex-Rays <info@hex-rays.com>
Detected compiler: Visual C++
*/
#include <windows.h>
#include <defs.h>
//-------------------------------------------------------------------------
// Function declarations
#define __thiscall __cdecl // Test compile in C mode
#define __thiscall __cdecl // Test compile in C mode
HGLOBAL __cdecl FreeGlobal();
LONG __thiscall SetPageSetupDefaults(void *this);
int __stdcall NPSize(int nWidth, int); // idb
int __stdcall NpSaveDialogHookProc(HWND hWndParent, int, HWND hWnd, int); // idb
LRESULT __stdcall GotoAndScrollInView(int a1);
LPWSTR __stdcall SkipProgramName(WCHAR *lpsz);
LRESULT __stdcall UpdateStatusBar(int a1);
LRESULT __stdcall WinEventFunc(int a1, int a2, int a3, int a4, int a5, int a6, int a7);
const WCHAR *__stdcall PFileInPath(LPCWSTR lpsz);
DWORD __stdcall NpResetMenu(HWND hWndNewOwner);
signed int __stdcall MergeStrings(int a1, int a2, int a3);
int __stdcall AlertBox(HWND hWnd, LPCWSTR lpCaption, LPCWSTR lpText, LPCWSTR lpString, UINT uType); // idb
DWORD __cdecl SignalCommDlgError();
__int32 __stdcall ReplaceSel(int a1);
signed int __stdcall GotoDlgProc(HWND hWnd, int a2, HWND a3, int a4);
int __stdcall fDetermineFileType(int lpv, int iSize);
HRESULT __stdcall StringCopyWorkerW(STRSAFE_LPWSTR pszDest, size_t cchDest, size_t *pcchNewDestLength, STRSAFE_PCNZWCH pszSrc, size_t cchToCopy);
signed int __stdcall NpOpenDialogHookProc(DWORD hDlg, int a2, DWORD hWndMain, int a4);
signed int __stdcall CheckSave(int a1);
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);
int __stdcall SetTitle(LPCWSTR pcchNewDestLength); // idb
signed int __stdcall NPCommand(WPARAM hWnd, unsigned __int16 a2, int a3);
signed int __cdecl FileDragOpen();
void __stdcall doDrop(HDROP hDrop, HWND hWnd);
signed int __stdcall NPWndProc(HWND hWnd, UINT Msg, WPARAM hDrop, __int32 a4);
LSTATUS __stdcall RegWriteInt(HKEY hKey, LPCWSTR lpValueName, BYTE Data);
LSTATUS __stdcall RegWriteString(HKEY hKey, LPCWSTR lpValueName, LPCWSTR lpData);
int __stdcall RegGetInt(HKEY hKey, LPCWSTR lpValueName, int); // idb
LSTATUS __stdcall RegGetString(HKEY Type, LPCWSTR lpValueName, const void *a3, LPBYTE lpData, DWORD cbData);
LSTATUS __cdecl SaveGlobals();
LSTATUS __cdecl GetGlobals();
// signed int __usercall sub_1003F4C(WCHAR **a1, unsigned __int16 *a2);
LPCWSTR __stdcall GetFileName(LPWSTR lpFileName, LPCWSTR lpString2);
HLOCAL __stdcall SizeStrings(HINSTANCE hInstance);
HLOCAL __stdcall InitStrings(HINSTANCE hInstance);
int __stdcall SkipBlanks(int a1);
signed int __stdcall ProcessSetupOption(WCHAR **a1);
signed int __stdcall ProcessShellOptions(WCHAR **a1, int nCmdShow);
HFILTER __stdcall CreateFilter();
int __stdcall EnumProc(int a1, int a2, int a3, int a4);
// BOOL __usercall sub_10044D7(HINSTANCE a1);
signed int __stdcall NPInit(HINSTANCE hInstance, int a2, __int32 a3, int nCmdShow);
void __stdcall ReverseEndian(int a1, int a2, int a3);
int __stdcall AnsiWriteFile(HANDLE hFile, UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar); // idb
LRESULT __cdecl ClearFmt();
LRESULT __cdecl RestoreFmt();
__int32 __stdcall New(int a1);
WCHAR *__stdcall AddExt(LPCWSTR lpString1);
int __stdcall AlertUser_FileFail(LPCWSTR lpString); // idb
int __stdcall SaveFile(HWND hWnd, LPCWSTR lpString, LPCWSTR lpBuffer); // idb
int __stdcall LoadFile(LPCWSTR lpString, int); // idb
const wchar_t *__stdcall ReverseScan(const WCHAR *a1, const wchar_t *a2, LPCWSTR Str2, int a4);
int __stdcall ForwardScan(wchar_t *lpString1, LPCWSTR Str2, int); // idb
int __stdcall Search(LPCWSTR Str2); // idb
int __stdcall NpReCreate(DWORD hWnd); // idb
BOOL __stdcall AbortProc(int a1, int a2);
int __stdcall GetResolutions(HDC hdc); // idb
HDC __cdecl GetPrinterDCviaDialog();
BOOL __cdecl DestroyAbortWnd();
int __stdcall PageSetupHookProc(HWND hDlg, int, HWND hWndMain, int); // idb
int *__stdcall TranslateString(int a1);
signed int __cdecl GetPrinterDC();
signed int __cdecl GetNonDefPrinterDC();
signed int __stdcall AbortDlgProc(HWND hWnd, int a2, int a3, int a4);
int __stdcall PrintHeaderFooter(HDC hdc, int y); // idb
signed int __stdcall NpPrintGivenDC(HDC a1);
signed int __stdcall NpPrint(int a1);
int __stdcall PrintIt(int a1);
LRESULT __stdcall InsertDateTime(int a1);
signed int __stdcall IsTextUTF8(int a1, int a2);
BOOL __stdcall IsInputTextUnicode(const void *lpv, int iSize);
int __cdecl __security_init_cookie();
// BOOL __usercall __report_gsfailure(int a1, int a2, int a3, int a4, int a5, int a6);
int __stdcall sub_100725F(LPBYTE lpData); // idb
HWND __stdcall HtmlHelpA(HWND hwndCaller, LPCSTR pszFile, UINT uCommand, DWORD_PTR dwData);
// BOOL __stdcall ClosePrinter(HANDLE hPrinter);
// BOOL __stdcall GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded);
// BOOL __stdcall OpenPrinterW(LPWSTR pPrinterName, LPHANDLE phPrinter, LPPRINTER_DEFAULTSW pDefault);
int __cdecl WinMainCRTStartup();
// int __cdecl _initterm(_DWORD, _DWORD); weak
unsigned int __cdecl _setdefaultprecision();
int __cdecl _setargv();
// unsigned int __cdecl _controlfp(unsigned int NewValue, unsigned int Mask);
//-------------------------------------------------------------------------
// Data declarations
// extern int __acmdln; weak
// extern int __adjust_fdiv; weak
int s_SaveAsHelpIDs[6] = { 257, 1002, 259, 1002, 0, 0 }; // weak
int s_GotoHelpIDs[4] = { 258, 1003, 0, 0 }; // weak
const WCHAR szOtherStuff = 0u; // idb
int s_PageSetupHelpIDs[10] = { 32, 1001, 30, 1001, 33, 1000, 31, 1000, 0, 0 }; // weak
const WCHAR word_1001840 = 8206u; // idb
int dword_1001844 = 8207; // weak
char ValueName[8] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' }; // idb
_UNKNOWN __xc_a; // weak
_UNKNOWN __xc_z; // weak
_UNKNOWN __xi_a; // weak
_UNKNOWN __xi_z; // weak
BYTE iPointSize = 120u; // idb
int fUntitled = 1; // weak
int g_ftOpenedAs = 4294967295; // idb
LPCWSTR szDiskError = (LPCWSTR)1; // idb
LPCWSTR szFNF = (LPCWSTR)2; // idb
LPCWSTR szSCBC = (LPCWSTR)3; // idb
LPCWSTR szUntitled = (LPCWSTR)4; // idb
LPCWSTR szNpTitle = (LPCWSTR)5; // idb
LPCWSTR szCFS = (LPCWSTR)6; // idb
LPCWSTR szErrSpace = (LPCWSTR)7; // idb
LPCWSTR szFTL = (LPCWSTR)8; // idb
LPCWSTR szNN = (LPCWSTR)9; // idb
LPCWSTR szCP = (LPCWSTR)0xC; // idb
int szNVF = 13; // weak
LPCWSTR szCREATEERR = (LPCWSTR)0xE; // idb
LPCWSTR szNoWW = (LPCWSTR)0xF; // idb
int szMerge = 16; // weak
LPCWSTR szHelpFile = (LPCWSTR)0x11;
LPCWSTR szAnsiText = (LPCWSTR)0x14; // idb
LPCWSTR szAllFiles = (LPCWSTR)0x15; // idb
int szOpenCaption = 22; // weak
int szSaveCaption = 23; // weak
int szCannotQuit = 24; // weak
LPCWSTR szLoadDrvFail = (LPCWSTR)0x19; // idb
int szACCESSDENY = 26; // weak
LPCWSTR szErrUnicode = (LPCWSTR)0x1B; // idb
LPCWSTR szFontTooBig = (LPCWSTR)0x1C; // idb
wchar_t *szCommDlgErr = (wchar_t *)0x1D; // idb
LPCWSTR szLineError = (LPCWSTR)0x1E; // idb
LPCWSTR szLineTooLarge = (LPCWSTR)0x1F; // idb
LPARAM szFtAnsi = 32; // idb
LPARAM szFtUnicode = 33; // idb
LPARAM szFtUnicodeBe = 34; // idb
LPARAM szFtUtf8 = 35; // idb
wchar_t *szCurrentPage = (wchar_t *)0x24; // idb
wchar_t *szLineCol = (wchar_t *)0x25; // idb
int rgsz[9] =
{
16814132,
16814136,
16814140,
16814144,
16814156,
16814152,
16814148,
16814160,
16814164
}; // weak
__int16 *off_100919C = &szOtherStuff; // weak
int maperror[] = { 65535 }; // weak
int *off_10091A4 = &szErrSpace; // weak
_UNKNOWN BOM_UTF8; // weak
_UNKNOWN unk_10091E4; // weak
_UNKNOWN unk_10091E8; // weak
const WCHAR szFormattedDate = 89u; // idb
const WCHAR szFormattedTime = 89u; // idb
int __security_cookie_complement = 4294919359; // weak
int __security_cookie = 47936; // weak
int __defaultmatherr = 1; // weak
int dword_1009620 = 0; // weak
int dword_1009624 = 0; // weak
const WCHAR FileName = 0u; // idb
HWND hwndNP; // idb
HWND hwndStatus; // idb
HWND hwndEdit; // idb
HWND hDlgFind; // idb
BYTE fStatus; // idb
int fLastStatus; // weak
int dwEmSetHandle; // weak
int fRunBySetup; // weak
WPARAM fWrap; // idb
int fInSaveAsDlg; // weak
BYTE fMLE_is_broken; // idb
WPARAM dwCurrentSelectionStart; // idb
LPARAM dwCurrentSelectionEnd; // idb
const WCHAR String2; // idb
int nHeight; // idb
int nWidth; // idb
int X; // idb
int Y; // idb
int dword_1009A80; // idb
BYTE Data; // idb
LPARAM lParam; // idb
WPARAM wParam; // idb
int fCase; // idb
int fReverse; // weak
HMENU hMenu; // idb
HWND (__stdcall *pHtmlHelpA)(HWND, const char *, unsigned int, unsigned __int32); // weak
int dword_1009AA4; // weak
HMODULE hModule; // idb
int _dowildcard; // weak
int _newmode; // weak
int _commode; // weak
int _fmode;
int iPageNum; // weak
int dxRight; // weak
int dxLeft; // idb
int dyBottom; // weak
int dyTop; // weak
int yPhysOff; // weak
int xPhysOff; // weak
int yPhysRes; // idb
int xPhysRes; // idb
int yPixInch; // weak
int yPrintRes; // weak
int xPrintRes; // weak
struct _SYSTEMTIME PrintTime; // idb
wchar_t chBuff; // idb
const WCHAR word_1009D08; // idb
const WCHAR word_1009F10; // idb
struct tagPOINT rtMargin; // idb
int dword_100A128; // weak
int dword_100A12C; // weak
int yPrintChar; // weak
int fAbort; // weak
HWND hAbortDlgWnd; // idb
int tabSize; // weak
WCHAR szPrinterName; // idb
const WCHAR chPageTextTemp; // idb
const WCHAR word_100A390; // idb
WCHAR chPageText; // idb
WCHAR String1; // idb
HANDLE fp; // idb
int wHlpMsg; // weak
int wFRMsg; // weak
struct tagPSDW g_PageSetupDlg; // idb
struct tagFINDREPLACEW FR; // idb
int g_ftSaveAs; // weak
_UNKNOWN szSaveFilterSpec; // weak
_UNKNOWN szOpenFilterSpec; // weak
struct tagOFNW OFN; // idb
HACCEL hAccel; // idb
HMENU hSysMenuSetup; // idb
int dyStatus; // weak
_UNKNOWN szReplace; // weak
const WCHAR szSearch; // idb
const WCHAR szFileName; // idb
LOGFONTW FontStruct; // idb
HGDIOBJ hFont; // idb
HINSTANCE hInstanceNP; // idb
HCURSOR hWaitCursor; // idb
HCURSOR hStdCursor; // idb
HLOCAL hEdit; // idb
__int16 chMerge; // weak
int lGotoLine; // weak
int __onexitend; // weak
int __onexitbegin; // weak
int _adjust_fdiv; // weak
//----- (01001929) --------------------------------------------------------
HGLOBAL __cdecl FreeGlobal()
{
HGLOBAL result; // eax@3
if ( g_PageSetupDlg.hDevMode )
GlobalFree(g_PageSetupDlg.hDevMode);
result = g_PageSetupDlg.hDevNames;
if ( g_PageSetupDlg.hDevNames )
result = GlobalFree(g_PageSetupDlg.hDevNames);
g_PageSetupDlg.hDevMode = 0;
g_PageSetupDlg.hDevNames = 0;
return result;
}
//----- (0100195D) --------------------------------------------------------
LONG __thiscall SetPageSetupDefaults(void *this)
{
LONG result; // eax@2
void *LCData; // [sp+0h] [bp-4h]@1
LCData = this;
g_PageSetupDlg.lpfnPageSetupHook = (LPPAGESETUPHOOK)PageSetupHookProc;
g_PageSetupDlg.lpPageSetupTemplateName = (LPCWSTR)12;
GetLocaleInfoW(0x400u, 0xDu, (LPWSTR)&LCData, 2);
if ( (_WORD)LCData == 49 )
{
g_PageSetupDlg.rtMargin.top = 1000;
g_PageSetupDlg.rtMargin.bottom = 1000;
g_PageSetupDlg.Flags = 40966;
result = 750;
}
else
{
g_PageSetupDlg.rtMargin.top = 2500;
g_PageSetupDlg.rtMargin.bottom = 2500;
g_PageSetupDlg.Flags = 40970;
result = 2000;
}
g_PageSetupDlg.rtMargin.left = result;
g_PageSetupDlg.rtMargin.right = result;
return result;
}
//----- (010019E0) --------------------------------------------------------
BOOL __stdcall NPSize(int nWidth, int a2)
{
InvalidateRect(hwndEdit, 0, 1);
return MoveWindow(hwndEdit, 0, 0, nWidth, a2 - (*(_DWORD *)&fStatus != 0 ? dyStatus : 0), 1);
}
// 100A6E0: using guessed type int dyStatus;
//----- (01001A28) --------------------------------------------------------
signed int __stdcall NpSaveDialogHookProc(HWND hWndParent, int a2, HWND hWnd, int a4)
{
LPARAM v4; // ecx@6
HWND v5; // esi@13
int v6; // eax@15
int v7; // eax@18
struct tagPOINT Point; // [sp+4h] [bp-8h]@14
if ( a2 == 83 )
{
v7 = GetDlgCtrlID(*(HWND *)(a4 + 12));
if ( v7 != 257 && v7 != 259 )
return 0;
WinHelpW(*(HWND *)(a4 + 12), szHelpFile, 0xCu, (ULONG_PTR)s_SaveAsHelpIDs);
}
else
{
if ( a2 != 123 )
{
if ( a2 == 272 )
{
SendDlgItemMessageW(hWndParent, 257, 0x143u, 0, szFtAnsi);
SendDlgItemMessageW(hWndParent, 257, 0x143u, 0, szFtUnicode);
SendDlgItemMessageW(hWndParent, 257, 0x143u, 0, szFtUnicodeBe);
SendDlgItemMessageW(hWndParent, 257, 0x143u, 0, szFtUtf8);
v4 = szFtAnsi;
g_ftSaveAs = g_ftOpenedAs;
switch ( g_ftOpenedAs )
{
case 1:
v4 = szFtUnicode;
break;
case 2:
v4 = szFtUnicodeBe;
break;
case 3:
v4 = szFtUtf8;
break;
}
SendDlgItemMessageW(hWndParent, 257, 0x14Du, 0xFFFFFFFF, v4);
}
else if ( a2 == 273 )
{
g_ftSaveAs = SendDlgItemMessageW(hWndParent, 257, 0x147u, 0, 0);
}
return 0;
}
v5 = hWnd;
if ( hWndParent == hWnd )
{
GetCursorPos(&Point);
ScreenToClient(hWndParent, &Point);
v5 = ChildWindowFromPoint(hWndParent, Point);
}
v6 = GetDlgCtrlID(v5);
if ( v6 != 257 && v6 != 259 )
return 0;
WinHelpW(v5, szHelpFile, 0xAu, (ULONG_PTR)s_SaveAsHelpIDs);
}
return 1;
}
// 100136C: using guessed type int s_SaveAsHelpIDs[6];
// 100A528: using guessed type int g_ftSaveAs;
//----- (01001B99) --------------------------------------------------------
LRESULT __stdcall GotoAndScrollInView(int a1)
{
LRESULT result; // eax@1
result = SendMessageW(hwndEdit, 0xBBu, a1 - 1, 0);
if ( result != -1 )
{
SendMessageW(hwndEdit, 0xB1u, result, result);
result = SendMessageW(hwndEdit, 0xB7u, 0, 0);
}
return result;
}
//----- (01001BE8) --------------------------------------------------------
LPWSTR __stdcall SkipProgramName(WCHAR *lpsz)
{
LPWSTR result; // eax@1
int v2; // esi@1
const WCHAR v3; // cx@8
result = lpsz;
v2 = 0;
while ( 1 )
{
v3 = *result;
if ( !*result || (v3 == 32 || v3 == 9) && !v2 )
break;
if ( v3 == 34 )
v2 = v2 == 0;
result = CharNextW(result);
}
while ( *result == 32 || *result == 9 )
++result;
return result;
}
//----- (01001C42) --------------------------------------------------------
LRESULT __stdcall UpdateStatusBar(int a1)
{
WPARAM v1; // eax@1
int v2; // edi@1
LRESULT result; // eax@1
unsigned int v4; // ebx@1
LPARAM lParam; // [sp+Ch] [bp-10Ch]@1
WPARAM wParam; // [sp+10h] [bp-108h]@1
wchar_t Dest; // [sp+14h] [bp-104h]@4
__int16 v8; // [sp+112h] [bp-6h]@4
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
v1 = SendMessageW(hwndEdit, 0xC9u, wParam, 0);
v2 = v1 + 1;
result = SendMessageW(hwndEdit, 0xBBu, v1, 0);
v4 = wParam - result + 1;
if ( a1 || v4 != dword_1009624 || v2 != dword_1009620 )
{
__snwprintf(&Dest, 0x7Fu, szLineCol, v2, wParam - result + 1);
result = (LRESULT)hwndStatus;
v8 = 0;
if ( hwndStatus )
result = SendMessageW(hwndStatus, 0x40Bu, 1u, (LPARAM)&Dest);
}
dword_1009620 = v2;
dword_1009624 = v4;
return result;
}
// 1009620: using guessed type int dword_1009620;
// 1009624: using guessed type int dword_1009624;
//----- (01001D1C) --------------------------------------------------------
LRESULT __stdcall WinEventFunc(int a1, int a2, int a3, int a4, int a5, int a6, int a7)
{
return UpdateStatusBar(0);
}
//----- (01001D2B) --------------------------------------------------------
const WCHAR *__stdcall PFileInPath(LPCWSTR lpsz)
{
const WCHAR v1; // cx@1
const WCHAR *v2; // edi@1
const WCHAR *v3; // eax@1
v1 = *lpsz;
v2 = lpsz;
v3 = lpsz;
if ( *lpsz )
{
do
{
if ( v1 == 58 || v1 == 92 )
v2 = v3;
v3 = CharNextW(v3);
v1 = *v3;
}
while ( *v3 );
if ( v2 != lpsz )
++v2;
}
return v2;
}
//----- (01001D73) --------------------------------------------------------
DWORD __stdcall NpResetMenu(HWND hWndNewOwner)
{
HMENU v1; // ebx@1
UINT v2; // ST0C_4@1
HMENU v3; // eax@1
UINT v4; // ST0C_4@1
HMENU v5; // eax@1
UINT v6; // ST0C_4@1
HMENU v7; // eax@1
HMENU v8; // eax@1
HMENU v9; // eax@3
UINT v10; // ST0C_4@6
HMENU v11; // eax@6
UINT v12; // ST0C_4@8
HMENU v13; // eax@8
UINT v14; // ST0C_4@8
HMENU v15; // eax@8
UINT v16; // ST0C_4@8
HMENU v17; // eax@8
UINT v18; // ST0C_4@8
HMENU v19; // eax@8
UINT v20; // ST0C_4@8
HMENU v21; // eax@8
UINT v22; // ST0C_4@8
HMENU v23; // eax@8
LPARAM lParam; // [sp+Ch] [bp-10h]@1
WPARAM wParam; // [sp+10h] [bp-Ch]@1
int v27; // [sp+14h] [bp-8h]@1
UINT uEnable; // [sp+18h] [bp-4h]@1
v27 = 0;
v1 = GetMenu(hwndNP);
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
v2 = wParam == lParam;
uEnable = wParam == lParam;
v3 = GetSubMenu(v1, 1);
EnableMenuItem(v3, 0x300u, v2);
v4 = uEnable;
v5 = GetSubMenu(v1, 1);
EnableMenuItem(v5, 0x301u, v4);
v6 = uEnable;
v7 = GetSubMenu(v1, 1);
EnableMenuItem(v7, 0x303u, v6);
v8 = GetSubMenu(v1, 1);
if ( GetMenuState(v8, 0x19u, 0) == 1 && uEnable == 1 )
{
v9 = GetSubMenu(v1, 1);
EnableMenuItem(v9, 0x19u, 0);
}
if ( OpenClipboard(hWndNewOwner) )
{
v27 = IsClipboardFormatAvailable(1u);
CloseClipboard();
}
v10 = v27 == 0;
v11 = GetSubMenu(v1, 1);
EnableMenuItem(v11, 0x302u, v10);
uEnable = 1;
if ( SendMessageW(hwndEdit, 0xEu, 0, 0) )
uEnable = 0;
v12 = uEnable;
v13 = GetSubMenu(v1, 1);
EnableMenuItem(v13, 0x15u, v12);
v14 = uEnable;
v15 = GetSubMenu(v1, 1);
EnableMenuItem(v15, 0x16u, v14);
v16 = fWrap != 0;
v17 = GetSubMenu(v1, 1);
EnableMenuItem(v17, 0x18u, v16);
v18 = SendMessageW(hwndEdit, 0xC6u, 0, 0) == 0;
v19 = GetSubMenu(v1, 1);
EnableMenuItem(v19, 0x10u, v18);
v20 = fWrap != 0 ? 8 : 0;
v21 = GetSubMenu(v1, 2);
CheckMenuItem(v21, 0x20u, v20);
v22 = *(_DWORD *)&fStatus != 0 ? 8 : 0;
v23 = GetSubMenu(v1, 3);
return CheckMenuItem(v23, 0x1Bu, v22);
}
//----- (01001F02) --------------------------------------------------------
signed int __stdcall MergeStrings(int a1, int a2, int a3)
{
int v3; // ecx@1
int v4; // eax@1
__int16 v5; // dx@2
int v6; // esi@4
int v8; // ecx@9
__int16 v9; // dx@10
v3 = a1;
v4 = a3;
while ( *(_WORD *)v3 != chMerge )
{
*(_WORD *)v4 = *(_WORD *)v3;
v5 = *(_WORD *)v3;
v4 += 2;
v3 += 2;
if ( !v5 )
return 0;
}
v6 = a2;
if ( a2 )
{
while ( *(_WORD *)v6 )
{
*(_WORD *)v4 = *(_WORD *)v6;
v4 += 2;
v6 += 2;
}
}
v8 = v3 + 4;
do
{
v9 = *(_WORD *)v8;
*(_WORD *)v4 = *(_WORD *)v8;
v4 += 2;
v8 += 2;
}
while ( v9 );
return 1;
}
// 100AB90: using guessed type __int16 chMerge;
//----- (01001F70) --------------------------------------------------------
int __stdcall AlertBox(HWND hWnd, LPCWSTR lpCaption, LPCWSTR lpText, LPCWSTR lpString, UINT uType)
{
int v5; // edi@2
int v6; // eax@4
int v7; // eax@4
const WCHAR *v8; // esi@4
int v9; // edi@5
if ( lpString )
v5 = lstrlenW(lpString);
else
v5 = 0;
v6 = lstrlenW(lpText);
v7 = (int)LocalAlloc(0x40u, 2 * (v5 + v6) + 2);
v8 = (const WCHAR *)v7;
if ( v7 )
{
MergeStrings((int)lpText, (int)lpString, v7);
v9 = MessageBoxW(hWnd, v8, lpCaption, uType);
LocalFree((HLOCAL)v8);
}
else
{
v9 = MessageBoxW(hWnd, lpText, lpCaption, uType);
}
return v9;
}
//----- (01001FF0) --------------------------------------------------------
DWORD __cdecl SignalCommDlgError()
{
DWORD result; // eax@1
wchar_t *v1; // ecx@2
unsigned int v2; // edx@2
wchar_t Dest; // [sp+0h] [bp-194h]@7
result = CommDlgExtendedError();
if ( result )
{
v1 = 0;
v2 = 0;
do
{
if ( result == maperror[v2] )
v1 = (wchar_t *)*(&off_10091A4)[v2];
v2 += 2;
}
while ( v2 < 16 );
if ( !v1 )
{
__snwprintf(&Dest, 0xC7u, szCommDlgErr, result);
v1 = &Dest;
}
if ( *v1 )
MessageBoxW(hwndNP, v1, szNN, 0x1010u);
result = 1;
}
return result;
}
// 10091A0: using guessed type int maperror[];
// 10091A4: using guessed type int *off_10091A4;
//----- (0100207F) --------------------------------------------------------
__int32 __stdcall ReplaceSel(int a1)
{
__int32 result; // eax@1
__int32 v2; // edi@2
WPARAM v3; // eax@3
void *hMem; // [sp+8h] [bp-14h]@1
int v5; // [sp+Ch] [bp-10h]@1
LPARAM lParam; // [sp+10h] [bp-Ch]@1
WPARAM wParam; // [sp+14h] [bp-8h]@1
size_t cchCount1; // [sp+18h] [bp-4h]@1
v5 = lstrlenW(FR.lpstrReplaceWith);
cchCount1 = lstrlenW(FR.lpstrFindWhat);
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
result = SendMessageW(hwndEdit, 0xBDu, 0, 0);
hMem = (void *)result;
if ( result )
{
result = (__int32)LocalLock((HLOCAL)result);
v2 = result;
if ( result )
{
v3 = wParam;
if ( lParam - wParam != cchCount1 )
return LocalUnlock(hMem);
if ( fCase )
{
if ( !_wcsncmp(FR.lpstrFindWhat, (const wchar_t *)(v2 + 2 * wParam), cchCount1) )
goto LABEL_9;
if ( fCase )
return LocalUnlock(hMem);
v3 = wParam;
}
if ( CompareStringW(0x400u, 0x10001001u, FR.lpstrFindWhat, cchCount1, (PCNZWCH)(v2 + 2 * v3), cchCount1) == 2 )
{
LABEL_9:
SendMessageW(hwndEdit, 0xC2u, 1u, (LPARAM)FR.lpstrReplaceWith);
SendMessageW(hwndEdit, 0xB1u, wParam, wParam + v5);
if ( a1 )
SendMessageW(hwndEdit, 0xB7u, 0, 0);
return LocalUnlock(hMem);
}
return LocalUnlock(hMem);
}
}
return result;
}
//----- (010021A6) --------------------------------------------------------
signed int __stdcall GotoDlgProc(HWND hWnd, int a2, HWND a3, int a4)
{
LRESULT v5; // eax@11
LRESULT v6; // eax@14
HWND v7; // eax@15
HWND v8; // edi@15
LONG v9; // eax@15
LRESULT v10; // eax@15
LPARAM lParam; // [sp+Ch] [bp-D4h]@15
WPARAM wParam; // [sp+10h] [bp-D0h]@15
WCHAR SrcStr; // [sp+14h] [bp-CCh]@11
if ( a2 == 83 )
{
WinHelpW(*(HWND *)(a4 + 12), szHelpFile, 0xCu, (ULONG_PTR)s_GotoHelpIDs);
return 0;
}
if ( a2 == 123 )
{
WinHelpW(a3, szHelpFile, 0xAu, (ULONG_PTR)s_GotoHelpIDs);
return 0;
}
if ( a2 == 272 )
{
v7 = GetDlgItem(hWnd, 258);
v8 = v7;
v9 = GetWindowLongW(v7, -16);
SetWindowLongW(v8, -16, v9 | 0x2000);
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
v10 = SendMessageW(hwndEdit, 0xC9u, wParam, 0);
_wsprintfW(&SrcStr, L"%d", v10 + 1);
SetDlgItemTextW(hWnd, 258, &SrcStr);
SetFocus(hWnd);
return 1;
}
if ( a2 != 273 )
return 0;
if ( (unsigned __int16)a3 == 1 )
{
GetDlgItemTextW(hWnd, 258, &SrcStr, 100);
FoldStringW(0x80u, &SrcStr, -1, &SrcStr, 100);
lGotoLine = __wtol(&SrcStr);
v5 = SendMessageW(hwndEdit, 0xBBu, lGotoLine - 1, 0);
if ( !lGotoLine || v5 == -1 )
{
MessageBoxW(hWnd, szLineTooLarge, szLineError, 0);
v6 = SendMessageW(hwndEdit, 0xBAu, 0, 0);
_wsprintfW(&SrcStr, L"%d", v6);
SetDlgItemTextW(hWnd, 258, &SrcStr);
SetFocus(hWnd);
return 0;
}
EndDialog(hWnd, 0);
return 1;
}
if ( (unsigned __int16)a3 == 2 )
{
EndDialog(hWnd, 1);
return 1;
}
if ( (unsigned __int16)a3 == 258 )
return 1;
return 0;
}
// 1001384: using guessed type int s_GotoHelpIDs[4];
// 100AB94: using guessed type int lGotoLine;
//----- (0100239D) --------------------------------------------------------
int __stdcall fDetermineFileType(int lpv, int iSize)
{
int result; // eax@1
int v3; // ecx@2
result = 0;
if ( (unsigned int)iSize <= 1 )
return result;
v3 = *(_WORD *)lpv;
if ( v3 == 48111 )
{
if ( (unsigned int)iSize <= 2 || *(_BYTE *)(lpv + 2) != -65 )
return result;
return 3;
}
if ( v3 == 65279 )
return 1;
if ( v3 == 65534 )
return 2;
if ( IsInputTextUnicode((const void *)lpv, iSize) )
return 1;
return IsTextUTF8(lpv, iSize) != 0 ? 3 : 0;
}
//----- (01002409) --------------------------------------------------------
HRESULT __stdcall StringCopyWorkerW(STRSAFE_LPWSTR pszDest, size_t cchDest, size_t *pcchNewDestLength, STRSAFE_PCNZWCH pszSrc, size_t cchToCopy)
{
HRESULT result; // eax@1
STRSAFE_LPWSTR v6; // edx@3
size_t *v7; // esi@3
result = 0;
if ( cchDest )
{
v6 = pszDest;
v7 = pcchNewDestLength;
do
{
if ( !*(_WORD *)v7 )
break;
*v6 = *(_WORD *)v7;
++v6;
v7 = (size_t *)((char *)v7 + 2);
--cchDest;
}
while ( cchDest );
if ( !cchDest )
{
--v6;
result = -2147024774;
}
*v6 = 0;
}
else
{
result = -2147024809;
}
return result;
}
// 1002409: inconsistent function type and number of purged bytes
//----- (01002452) --------------------------------------------------------
signed int __stdcall NpOpenDialogHookProc(DWORD hDlg, int a2, DWORD hWndMain, int a4)
{
HWND v4; // ebx@1
LPARAM v5; // ecx@7
int v6; // eax@16
int v8; // eax@20
HWND v9; // eax@24
HANDLE v10; // eax@26
int v11; // eax@29
LPARAM v12; // ecx@29
int v13; // eax@29
int v14; // eax@30
struct tagPOINT Point; // [sp+Ch] [bp-61Ch]@15
HANDLE hObject; // [sp+14h] [bp-614h]@26
DWORD iSize; // [sp+18h] [bp-610h]@1
char Buffer; // [sp+1Ch] [bp-60Ch]@27
LPARAM String1; // [sp+41Ch] [bp-20Ch]@24
v4 = (HWND)hWndMain;
iSize = hDlg;
if ( a2 == 78 )
{
if ( *(_DWORD *)(a4 + 8) == -602 )
{
v9 = GetParent((HWND)hDlg);
if ( SendMessageW(v9, 0x465u, 0x104u, (LPARAM)&String1) > 0 )
{
if ( lstrcmpiW((LPCWSTR)&String1, &String2) )
{
v10 = CreateFileW((LPCWSTR)&String1, 0x80000000, 1u, 0, 3u, 0x80u, 0);
hObject = v10;
if ( v10 != (HANDLE)-1 )
{
if ( ReadFile(v10, &Buffer, 0x400u, &iSize, 0) > 0 && iSize )
{
v11 = fDetermineFileType((int)&Buffer, iSize);
v12 = szFtAnsi;
g_ftOpenedAs = v11;
v13 = v11 - 1;
if ( v13 )
{
v14 = v13 - 1;
if ( v14 )
{
if ( v14 == 1 )
v12 = szFtUtf8;
}
else
{
v12 = szFtUnicodeBe;
}
}
else
{
v12 = szFtUnicode;
}
SendDlgItemMessageW((HWND)hDlg, 257, 0x14Du, 0xFFFFFFFF, v12);
lstrcpyW((LPWSTR)&String2, (LPCWSTR)&String1);
}
CloseHandle(hObject);
}
}
}
}
return 0;
}
if ( a2 != 83 )
{
if ( a2 != 123 )
{
if ( a2 == 272 )
{
SendDlgItemMessageW((HWND)hDlg, 257, 0x143u, 0, szFtAnsi);
SendDlgItemMessageW((HWND)iSize, 257, 0x143u, 0, szFtUnicode);
SendDlgItemMessageW((HWND)iSize, 257, 0x143u, 0, szFtUnicodeBe);
SendDlgItemMessageW((HWND)iSize, 257, 0x143u, 0, szFtUtf8);
v5 = szFtAnsi;
switch ( g_ftOpenedAs )
{
case 1:
v5 = szFtUnicode;
break;
case 2:
v5 = szFtUnicodeBe;
break;
case 3:
v5 = szFtUtf8;
break;
}
SendDlgItemMessageW((HWND)iSize, 257, 0x14Du, 0xFFFFFFFF, v5);
}
else if ( a2 == 273 )
{
g_ftOpenedAs = SendDlgItemMessageW((HWND)hDlg, 257, 0x147u, 0, 0);
}
return 0;
}
if ( hDlg == hWndMain )
{
GetCursorPos(&Point);
ScreenToClient((HWND)hDlg, &Point);
v4 = ChildWindowFromPoint((HWND)hDlg, Point);
}
v6 = GetDlgCtrlID(v4);
if ( v6 != 257 && v6 != 259 )
return 0;
WinHelpW(v4, szHelpFile, 0xAu, (ULONG_PTR)s_SaveAsHelpIDs);
return 1;
}
v8 = GetDlgCtrlID(*(HWND *)(a4 + 12));
if ( v8 == 257 || v8 == 259 )
{
WinHelpW(*(HWND *)(a4 + 12), szHelpFile, 0xCu, (ULONG_PTR)s_SaveAsHelpIDs);
return 1;
}
return 0;
}
// 100136C: using guessed type int s_SaveAsHelpIDs[6];
//----- (0100270F) --------------------------------------------------------
signed int __stdcall CheckSave(int a1)
{
const WCHAR *v1; // eax@4
int v3; // [sp+Ch] [bp-210h]@1
WCHAR String2; // [sp+10h] [bp-20Ch]@1
char v5; // [sp+12h] [bp-20Ah]@1
__int16 v6; // [sp+216h] [bp-6h]@1
String2 = 0;
memset(&v5, 0, 0x204u);
v6 = 0;
v3 = 1;
if ( fUntitled && !SendMessageW(hwndEdit, 0xEu, 0, 0) )
return 1;
if ( SendMessageW(hwndEdit, 0xB8u, 0, 0) )
{
v1 = szUntitled;
if ( !fUntitled )
v1 = &szFileName;
fInSaveAsDlg = 1;
v3 = AlertBox(hwndNP, szNN, szSCBC, v1, (a1 != 0 ? 0x1000 : 0) | 0x33);
fInSaveAsDlg = 0;
if ( v3 == 6 )
{
if ( fUntitled )
{
lstrcpyW(&String2, L"*.txt");
goto LABEL_15;
}
g_ftSaveAs = g_ftOpenedAs;
if ( SaveFile(hwndNP, &szFileName, 0) )
return 1;
lstrcpyW(&String2, &szFileName);
LABEL_15:
while ( 1 )
{
OFN.lpstrFile = &String2;
fInSaveAsDlg = 1;
OFN.nFilterIndex = 1;
OFN.lpstrDefExt = L"txt";
OFN.lpstrFilter = (LPCWSTR)&szSaveFilterSpec;
OFN.lpfnHook = (LPOFNHOOKPROC)NpSaveDialogHookProc;
OFN.lpTemplateName = L"NpEncodingDialog";
OFN.Flags = 8947814;
OFN.lpstrTitle = (LPCWSTR)szSaveCaption;
if ( !GetSaveFileNameW(&OFN) )
break;
lstrcpyW(&String2, OFN.lpstrFile);
if ( SaveFile(hwndNP, &String2, (LPCWSTR)1) )
{
lstrcpyW((LPWSTR)&szFileName, &String2);
g_ftOpenedAs = g_ftSaveAs;
goto LABEL_18;
}
lstrcpyW(&String2, &szFileName);
}
v3 = 2;
if ( CommDlgExtendedError() )
MessageBoxW(hwndNP, szErrSpace, szNN, 0x1010u);
LABEL_18:
fInSaveAsDlg = 0;
}
}
return v3 != 2;
}
// 10013A0: using guessed type wchar_t aNpencodingdial[17];
// 10013C4: using guessed type wchar_t aTxt[4];
// 100901C: using guessed type int fUntitled;
// 1009090: using guessed type int szSaveCaption;
// 1009854: using guessed type int fInSaveAsDlg;
// 100A528: using guessed type int g_ftSaveAs;
//----- (01002936) --------------------------------------------------------
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
WCHAR *v4; // edi@1
int v5; // eax@1
FARPROC v6; // eax@1
__int32 v7; // eax@3
DWORD v8; // eax@5
HWINEVENTHOOK v9; // ebx@5
struct tagMSG Msg; // [sp+8h] [bp-20h]@4
FARPROC v12; // [sp+24h] [bp-4h]@1
v4 = GetCommandLineW();
v5 = GetSystemMetrics(41);
v6 = GetProcAddress((HMODULE)v5, "RegisterPenApp");
v12 = v6;
if ( v6 )
((void (__stdcall *)(_DWORD, _DWORD))v6)(1, 1);
v7 = (__int32)SkipProgramName(v4);
if ( NPInit(hInstance, (int)hPrevInstance, v7, nShowCmd) )
{
v8 = GetCurrentProcessId();
v9 = SetWinEventHook(0x800Bu, 0x800Bu, 0, (WINEVENTPROC)WinEventFunc, v8, 0, 0);
while ( GetMessageW(&Msg, 0, 0, 0) )
{
if ( Msg.message == 80 )
PostMessageW(hwndNP, 0x8001u, 0, 0);
if ( (!hDlgFind || !IsDialogMessageW(hDlgFind, &Msg)) && !TranslateAcceleratorW(hwndNP, hAccel, &Msg) )
{
TranslateMessage(&Msg);
DispatchMessageW(&Msg);
}
}
FreeGlobal();
LocalFree(hEdit);
if ( v9 )
UnhookWinEvent(v9);
}
else
{
Msg.wParam = 0;
}
if ( v12 )
((void (__stdcall *)(_DWORD, _DWORD))v12)(1, 0);
return Msg.wParam;
}
//----- (01002A55) --------------------------------------------------------
BOOL __stdcall SetTitle(LPCWSTR pcchNewDestLength)
{
HANDLE v1; // edi@3
WORD v2; // si@4
const wchar_t *v4; // [sp+0h] [bp-7D0h]@0
size_t v5; // [sp+4h] [bp-7CCh]@0
struct _WIN32_FIND_DATAW FindFileData; // [sp+8h] [bp-7C8h]@3
const WCHAR v7; // [sp+258h] [bp-578h]@4
wchar_t String; // [sp+460h] [bp-370h]@2
wchar_t lParam; // [sp+6CCh] [bp-104h]@1
char v10; // [sp+6CEh] [bp-102h]@1
__int16 v11; // [sp+7CAh] [bp-6h]@1
lParam = 0;
memset(&v10, 0, 0xFCu);
v11 = 0;
if ( lstrcmpW(pcchNewDestLength, szUntitled) )
{
GetFileAttributesW(pcchNewDestLength);
v1 = FindFirstFileW(pcchNewDestLength, &FindFileData);
if ( v1 == (HANDLE)-1 )
{
v2 = 260;
StringCopyWorkerW((STRSAFE_LPWSTR)&v7, 0x104u, (size_t *)pcchNewDestLength, v4, v5);
}
else
{
v2 = 260;
StringCopyWorkerW((STRSAFE_LPWSTR)&v7, 0x104u, (size_t *)FindFileData.cFileName, v4, v5);
FindClose(v1);
}
GetFileTitleW(&v7, &String, v2);
}
else
{
StringCopyWorkerW(&String, 0x136u, (size_t *)szUntitled, v4, v5);
}
__snwprintf(&lParam, 0x7Fu, szLineCol, 1, 1);
if ( hwndStatus )
SendMessageW(hwndStatus, 0x40Bu, 1u, (LPARAM)&lParam);
lstrcatW(&String, szNpTitle);
return SetWindowTextW(hwndNP, &String);
}
//----- (01002B87) --------------------------------------------------------
signed int __stdcall NPCommand(WPARAM hWnd, unsigned __int16 a2, int a3)
{
int v4; // ebx@23
HANDLE v5; // edi@24
DWORD v6; // eax@30
HMENU v7; // ebx@51
LPARAM v8; // eax@51
HMENU v9; // eax@51
HWND v10; // eax@55
HWND v11; // eax@57
HDC v12; // ebx@67
int v13; // eax@68
HFONT v14; // edi@69
int v15; // eax@72
HMENU v16; // eax@78
HMENU v17; // edi@78
HMENU v18; // eax@78
HMENU v19; // eax@79
HMENU v20; // eax@79
HWND v21; // eax@84
HWND v22; // eax@91
HICON v23; // eax@94
HWND v24; // [sp-10h] [bp-27Ch]@40
HWND v25; // [sp-10h] [bp-27Ch]@42
UINT v26; // [sp-Ch] [bp-278h]@40
UINT v27; // [sp-Ch] [bp-278h]@42
WPARAM v28; // [sp-8h] [bp-274h]@40
UINT v29; // [sp-8h] [bp-274h]@51
struct tagCHOOSEFONTW v30; // [sp+Ch] [bp-260h]@68
LPARAM lParam; // [sp+48h] [bp-224h]@90
struct tagRECT Rect; // [sp+4Ch] [bp-220h]@81
WPARAM wParam; // [sp+5Ch] [bp-210h]@1
WCHAR String2; // [sp+60h] [bp-20Ch]@1
char v35; // [sp+62h] [bp-20Ah]@1
__int16 v36; // [sp+266h] [bp-6h]@1
String2 = 0;
memset(&v35, 0, 0x204u);
v36 = 0;
wParam = hWnd;
if ( (signed int)a2 > 64 )
{
if ( a2 == 65 )
{
v23 = LoadIconW(hInstanceNP, (LPCWSTR)2);
ShellAboutW(hwndNP, szNN, &szOtherStuff, v23);
return 1;
}
if ( (signed int)a2 <= 767 )
return 0;
if ( (signed int)a2 > 769 )
{
if ( a2 == 770 )
{
LABEL_91:
v22 = GetFocus();
if ( v22 != hwndEdit && v22 != hwndNP )
return 1;
v27 = a2;
v25 = hwndEdit;
goto LABEL_43;
}
if ( a2 != 771 )
return 0;
}
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
if ( wParam == lParam )
return 1;
goto LABEL_91;
}
if ( a2 == 64 )
{
v21 = GetDesktopWindow();
HtmlHelpA(v21, "notepad.chm", 0, 0);
return 1;
}
if ( (signed int)a2 > 21 )
{
if ( (signed int)a2 > 26 )
{
if ( a2 == 27 )
{
GetClientRect(hwndNP, &Rect);
if ( *(_DWORD *)&fStatus )
{
*(_DWORD *)&fStatus = 0;
ShowWindow(hwndStatus, 0);
NPSize(Rect.right - Rect.left, Rect.bottom - Rect.top);
}
else
{
*(_DWORD *)&fStatus = 1;
NPSize(Rect.right - Rect.left, Rect.bottom - Rect.top);
UpdateStatusBar(1);
ShowWindow(hwndStatus, 5);
}
return 1;
}
if ( a2 != 32 )
{
if ( a2 != 33 )
return 0;
v12 = GetDC(0);
if ( v12 )
{
v30.lStructSize = 60;
v30.hwndOwner = (HWND)wParam;
v30.lpLogFont = &FontStruct;
v13 = GetDeviceCaps(v12, 90);
FontStruct.lfHeight = -MulDiv(*(int *)&iPointSize, v13, 720);
v30.Flags = 16777281;
v30.rgbColors = 0;
v30.lCustData = 0;
v30.lpfnHook = 0;
v30.lpTemplateName = 0;
v30.hInstance = 0;
v30.lpszStyle = 0;
v30.nFontType = 0x2000;
v30.nSizeMin = 0;
v30.nSizeMax = 0;
ReleaseDC(0, v12);
if ( ChooseFontW(&v30) )
{
SetCursor(hWaitCursor);
v14 = CreateFontIndirectW(&FontStruct);
if ( v14 )
{
DeleteObject(hFont);
hFont = v14;
SendMessageW(hwndEdit, 0x30u, (WPARAM)v14, 1);
*(_DWORD *)&iPointSize = v30.iPointSize;
}
SetCursor(hStdCursor);
}
}
return 1;
}
v15 = -(fWrap != 0);
if ( NpReCreate((v15 & 0x100000) + 1344274692) )
fWrap = fWrap == 0;
else
MessageBoxW(hwndNP, szNoWW, szNN, 0x30u);
if ( !fWrap )
{
v19 = GetMenu(hwndNP);
v20 = GetSubMenu(v19, 3);
EnableMenuItem(v20, 0x1Bu, 0);
if ( !fLastStatus )
return 1;
v28 = 27;
v26 = 273;
v24 = (HWND)wParam;
goto LABEL_41;
}
fLastStatus = *(_DWORD *)&fStatus;
if ( *(_DWORD *)&fStatus )
SendMessageW((HWND)wParam, 0x111u, 0x1Bu, 0);
v16 = GetMenu(hwndNP);
v17 = v16;
v18 = GetSubMenu(v16, 3);
CheckMenuItem(v18, 0x1Bu, 0);
v29 = 27;
v9 = GetSubMenu(v17, 3);
}
else
{
if ( a2 == 26 )
{
InsertDateTime(0);
return 1;
}
if ( a2 == 22 )
{
if ( szSearch )
{
Search(&szSearch);
return 1;
}
LABEL_61:
v10 = hDlgFind;
if ( !hDlgFind )
{
FR.Flags = 65537;
FR.lpstrReplaceWith = 0;
FR.wReplaceWithLen = 0;
FR.lpstrFindWhat = (LPWSTR)&szSearch;
FR.wFindWhatLen = 128;
v11 = FindTextW(&FR);
goto LABEL_58;
}
goto LABEL_56;
}
if ( a2 == 23 )
{
v10 = hDlgFind;
if ( !hDlgFind )
{
FR.Flags = 65552;
FR.lpstrReplaceWith = (LPWSTR)&szReplace;
FR.wReplaceWithLen = 128;
FR.lpstrFindWhat = (LPWSTR)&szSearch;
FR.wFindWhatLen = 128;
v11 = ReplaceTextW(&FR);
LABEL_58:
hDlgFind = v11;
return 1;
}
LABEL_56:
SetFocus(v10);
return 1;
}
if ( a2 == 24 )
{
if ( !DialogBoxParamW(hInstanceNP, (LPCWSTR)0xE, hwndNP, (DLGPROC)GotoDlgProc, 0) )
GotoAndScrollInView(lGotoLine);
return 1;
}
if ( a2 != 25 )
return 0;
v7 = GetMenu(hwndNP);
v8 = SendMessageW(hwndEdit, 0xEu, 0, 0);
SendMessageW(hwndEdit, 0xB1u, 0, v8);
SendMessageW(hwndEdit, 0xB7u, 0, 0);
v29 = 25;
v9 = GetSubMenu(v7, 1);
}
EnableMenuItem(v9, v29, 1u);
return 1;
}
if ( a2 == 21 )
goto LABEL_61;
if ( (signed int)a2 > 5 )
{
if ( a2 == 6 )
{
PrintIt(0);
return 1;
}
if ( a2 != 7 )
{
if ( a2 == 15 )
return 1;
if ( a2 != 16 )
return 0;
v28 = 0;
v26 = 199;
v24 = hwndEdit;
LABEL_41:
SendMessageW(v24, v26, v28, 0);
return 1;
}
v27 = 16;
v25 = (HWND)hWnd;
LABEL_43:
PostMessageW(v25, v27, 0, 0);
return 1;
}
if ( a2 == 5 )
{
while ( !PageSetupDlgW(&g_PageSetupDlg) )
{
v6 = CommDlgExtendedError();
if ( v6 != 4107 && v6 != 4105 && v6 != 4108 )
goto LABEL_27;
FreeGlobal();
g_PageSetupDlg.hDevNames = 0;
g_PageSetupDlg.hDevMode = 0;
}
lstrcpyW(&chPageText, &chPageTextTemp);
lstrcpyW(&String1, &word_100A390);
return 1;
}
if ( a2 == 1 )
{
New(1);
}
else
{
if ( a2 == 2 )
{
if ( CheckSave(0) )
{
v4 = g_ftOpenedAs;
OFN.lpstrFile = &String2;
lstrcpyW(&String2, L"*.txt");
OFN.lpstrTitle = (LPCWSTR)szOpenCaption;
OFN.lpstrFilter = (LPCWSTR)&szOpenFilterSpec;
OFN.lpstrDefExt = L"txt";
OFN.Flags = 8917092;
OFN.nFilterIndex = 1;
OFN.lpTemplateName = L"NpEncodingDialog";
OFN.lpfnHook = (LPOFNHOOKPROC)NpOpenDialogHookProc;
if ( GetOpenFileNameW(&OFN) )
{
v5 = fp;
fp = CreateFileW(&String2, 0x80000000, 3u, 0, 3u, 0x80u, 0);
if ( !LoadFile(&String2, g_ftOpenedAs) )
{
fp = v5;
g_ftOpenedAs = v4;
}
}
else
{
g_ftOpenedAs = v4;
LABEL_27:
SignalCommDlgError();
}
}
return 1;
}
if ( a2 != 3 )
{
if ( a2 != 4 )
return 0;
goto LABEL_14;
}
g_ftSaveAs = g_ftOpenedAs;
if ( fUntitled || !SaveFile(hwndNP, &szFileName, 0) )
{
LABEL_14:
OFN.lpstrFile = &String2;
OFN.lpstrTitle = (LPCWSTR)szSaveCaption;
OFN.Flags = 8947814;
OFN.lpTemplateName = L"NpEncodingDialog";
OFN.lpfnHook = (LPOFNHOOKPROC)NpSaveDialogHookProc;
OFN.lpstrFilter = (LPCWSTR)&szSaveFilterSpec;
OFN.lpstrDefExt = L"txt";
if ( fUntitled )
lstrcpyW(&String2, L"*.txt");
else
lstrcpynW(&String2, &szFileName, 260);
fInSaveAsDlg = 1;
OFN.nFilterIndex = 1;
if ( GetSaveFileNameW(&OFN) )
{
if ( SaveFile((HWND)wParam, &String2, (LPCWSTR)1) )
{
lstrcpynW((LPWSTR)&szFileName, &String2, 260);
g_ftOpenedAs = g_ftSaveAs;
}
}
else
{
SignalCommDlgError();
}
fInSaveAsDlg = 0;
return 1;
}
}
return 1;
}
// 10013A0: using guessed type wchar_t aNpencodingdial[17];
// 10013C4: using guessed type wchar_t aTxt[4];
// 100901C: using guessed type int fUntitled;
// 100908C: using guessed type int szOpenCaption;
// 1009090: using guessed type int szSaveCaption;
// 1009844: using guessed type int fLastStatus;
// 1009854: using guessed type int fInSaveAsDlg;
// 100A528: using guessed type int g_ftSaveAs;
// 100AB94: using guessed type int lGotoLine;
//----- (0100337E) --------------------------------------------------------
signed int __cdecl FileDragOpen()
{
HANDLE v0; // edi@1
signed int result; // eax@1
v0 = fp;
result = CheckSave(0);
if ( result )
{
fp = CreateFileW(&FileName, 0x80000000, 3u, 0, 3u, 0x80u, 0);
if ( fp == (HANDLE)-1 )
{
result = AlertUser_FileFail(&FileName);
}
else
{
result = LoadFile(&FileName, -1);
if ( result )
return result;
}
fp = v0;
}
return result;
}
//----- (010033DC) --------------------------------------------------------
void __stdcall doDrop(HDROP hDrop, HWND hWnd)
{
if ( DragQueryFileW(hDrop, 0xFFFFFFFF, 0, 0) )
{
DragQueryFileW(hDrop, 0, (LPWSTR)&FileName, 0x104u);
SetActiveWindow(hWnd);
FileDragOpen();
}
DragFinish(hDrop);
}
//----- (01003429) --------------------------------------------------------
signed int __stdcall NPWndProc(HWND hWnd, UINT Msg, WPARAM hDrop, __int32 a4)
{
HWND v4; // ST10_4@15
WPARAM v6; // eax@37
LPARAM v7; // ecx@37
void (__stdcall *v8)(HWND, UINT, WPARAM, LPARAM); // edi@39
int v9; // ecx@51
int v10; // eax@51
int v11; // esi@51
void (__stdcall *v12)(HCURSOR); // esi@52
LPARAM v13; // esi@67
LPARAM v14; // [sp-4h] [bp-14h]@64
LPARAM lParam; // [sp+8h] [bp-8h]@21
int v16; // [sp+Ch] [bp-4h]@21
if ( Msg > 0x1C )
{
if ( Msg != 273 )
{
if ( Msg == 274 )
{
if ( !fRunBySetup || hDrop != 61472 && hDrop != 61504 && hDrop != 61520 )
DefWindowProcW(hWnd, 0x112u, hDrop, a4);
return 0;
}
if ( Msg == 278 )
{
NpResetMenu(hWnd);
return 0;
}
if ( Msg == 279 )
{
if ( fRunBySetup && HIWORD(a4) )
EnableMenuItem(hSysMenuSetup, 0xF020u, 3u);
return 0;
}
if ( Msg == 563 )
{
doDrop((HDROP)hDrop, hWnd);
return 0;
}
if ( Msg != 793 )
{
if ( Msg == 32769 )
{
v13 = 0;
if ( ((unsigned int)GetKeyboardLayout(0) & 0x3FF) == 17 )
v13 = 1;
SendMessageW(hwndEdit, 0xD8u, 1u, v13);
return 0;
}
LABEL_50:
if ( Msg == wFRMsg )
{
v9 = *(_DWORD *)(a4 + 12);
v10 = ~(unsigned __int8)*(_DWORD *)(a4 + 12) & 1;
v11 = (*(_DWORD *)(a4 + 12) >> 2) & 1;
fReverse = ~(unsigned __int8)*(_DWORD *)(a4 + 12) & 1;
fCase = v11;
if ( v9 & 8 )
{
v12 = SetCursor;
SetCursor(hWaitCursor);
}
else
{
if ( !(v9 & 0x10) )
{
if ( v9 & 0x20 )
{
if ( v10 )
fReverse = 0;
SetCursor(hWaitCursor);
SendMessageW(hwndEdit, 0xB1u, 0, 0);
do
ReplaceSel(0);
while ( Search(&szSearch) );
SetCursor(hStdCursor);
SendMessageW(hwndEdit, 0xB1u, 0, 0);
SendMessageW(hwndEdit, 0xB7u, 0, 0);
UpdateStatusBar(1);
}
else if ( v9 & 0x40 )
{
hDlgFind = 0;
}
return 0;
}
v12 = SetCursor;
SetCursor(hWaitCursor);
ReplaceSel(1);
}
Search(&szSearch);
v12(hStdCursor);
return 0;
}
v14 = a4;
return DefWindowProcW(hWnd, Msg, hDrop, v14);
}
if ( (HIWORD(a4) & 0xFFF) == 5 )
{
NPCommand((WPARAM)hWnd, 0x15u, 0);
return 0;
}
}
if ( (HWND)a4 == hwndEdit && (HIWORD(hDrop) == 1280 || HIWORD(hDrop) == 1281) )
{
if ( dwEmSetHandle == 1 )
dwEmSetHandle = 2;
else
MessageBoxW(hwndNP, szErrSpace, szNN, 0x1010u);
return 0;
}
if ( !NPCommand((WPARAM)hWnd, hDrop, a4) )
{
v14 = a4;
return DefWindowProcW(hWnd, Msg, hDrop, v14);
}
return 0;
}
if ( Msg == 28 )
{
if ( hDrop )
{
v6 = dwCurrentSelectionStart;
v7 = dwCurrentSelectionEnd;
if ( !dwCurrentSelectionStart && !dwCurrentSelectionEnd )
return 0;
v8 = SendMessageW;
}
else
{
v8 = SendMessageW;
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&dwCurrentSelectionStart, (LPARAM)&dwCurrentSelectionEnd);
v6 = dwCurrentSelectionStart;
v7 = dwCurrentSelectionEnd;
if ( dwCurrentSelectionStart == dwCurrentSelectionEnd )
{
dwCurrentSelectionStart = 0;
dwCurrentSelectionEnd = 0;
return 0;
}
}
v8(hwndEdit, 0xB1u, v6, v7);
v8(hwndEdit, 0xB7u, 0, 0);
return 0;
}
if ( Msg <= 8 )
{
if ( Msg == 8 )
{
SendMessageW(hwndEdit, 8u, hDrop, a4);
return 0;
}
if ( Msg == 2 )
{
PostQuitMessage(0);
return 0;
}
if ( Msg == 5 )
{
if ( hDrop )
{
if ( hDrop == 1 )
return DefWindowProcW(hWnd, 5u, 1u, a4);
if ( hDrop != 2 )
return 0;
}
SendMessageW(hwndStatus, 5u, 0, 0);
v16 = -1;
lParam = 3 * (signed __int16)a4 / 4;
SendMessageW(hwndStatus, 0x404u, 2u, (LPARAM)&lParam);
NPSize((signed __int16)a4, SHIWORD(a4));
return 0;
}
if ( Msg == 6 )
{
if ( ((_WORD)hDrop == 1 || (_WORD)hDrop == 2) && !IsIconic(hwndNP) && GetForegroundWindow() == hwndNP )
{
v4 = GetForegroundWindow();
SetFocus(v4);
}
return 0;
}
if ( Msg == 7 )
{
if ( !IsIconic(hwndNP) )
SetFocus(hwndEdit);
return 0;
}
goto LABEL_50;
}
if ( Msg == 16 )
{
SaveGlobals();
if ( CheckSave(0) )
{
if ( !WinHelpW(hwndNP, szHelpFile, 2u, 0) )
MessageBoxW(hwndNP, szErrSpace, szNN, 0x1010u);
DestroyWindow(hwndStatus);
DestroyWindow(hwndNP);
DeleteObject(hFont);
}
return 0;
}
if ( Msg != 17 )
{
if ( Msg == 26 )
return 0;
goto LABEL_50;
}
if ( fInSaveAsDlg )
{
MessageBeep(0);
MessageBeep(0);
MessageBoxW(hwndNP, (LPCWSTR)szCannotQuit, szNN, 0x1000u);
return 0;
}
return CheckSave(1);
}
// 1009094: using guessed type int szCannotQuit;
// 1009848: using guessed type int dwEmSetHandle;
// 100984C: using guessed type int fRunBySetup;
// 1009854: using guessed type int fInSaveAsDlg;
// 1009A94: using guessed type int fReverse;
// 100A488: using guessed type int wFRMsg;
//----- (0100393A) --------------------------------------------------------
LSTATUS __stdcall RegWriteInt(HKEY hKey, LPCWSTR lpValueName, BYTE Data)
{
return RegSetValueExW(hKey, lpValueName, 0, 4u, &Data, 4u);
}
//----- (0100395E) --------------------------------------------------------
LSTATUS __stdcall RegWriteString(HKEY hKey, LPCWSTR lpValueName, LPCWSTR lpData)
{
int v3; // eax@1
v3 = lstrlenW(lpData);
return RegSetValueExW(hKey, lpValueName, 0, 1u, (const BYTE *)lpData, 2 * v3 + 2);
}
//----- (0100398D) --------------------------------------------------------
int __stdcall RegGetInt(HKEY hKey, LPCWSTR lpValueName, int a3)
{
int result; // eax@4
DWORD cbData; // [sp+0h] [bp-Ch]@1
BYTE Data[4]; // [sp+4h] [bp-8h]@1
DWORD Type; // [sp+8h] [bp-4h]@1
Type = 0;
*(_DWORD *)Data = 1;
cbData = 4;
if ( hKey && !RegQueryValueExW(hKey, lpValueName, 0, &Type, Data, &cbData) && Type == 4 )
result = *(_DWORD *)Data;
else
result = a3;
return result;
}
//----- (010039E2) --------------------------------------------------------
LSTATUS __stdcall RegGetString(HKEY Type, LPCWSTR lpValueName, const void *a3, LPBYTE lpData, DWORD cbData)
{
unsigned int v5; // esi@1
LPBYTE v6; // edi@1
LSTATUS result; // eax@2
v5 = 2 * cbData;
v6 = lpData;
cbData *= 2;
if ( !Type
|| (result = RegQueryValueExW(Type, lpValueName, 0, (LPDWORD)&Type, lpData, &cbData)) != 0
|| Type != (HKEY)1 )
{
result = v5;
memcpy(v6, a3, v5);
}
return result;
}
//----- (01003A39) --------------------------------------------------------
LSTATUS __cdecl SaveGlobals()
{
LSTATUS result; // eax@1
WINDOWPLACEMENT wndpl; // [sp+0h] [bp-30h]@2
HKEY hKey; // [sp+2Ch] [bp-4h]@1
result = RegCreateKeyW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Notepad", &hKey);
if ( !result )
{
RegWriteInt(hKey, L"lfEscapement", LOBYTE(FontStruct.lfEscapement));
RegWriteInt(hKey, L"lfOrientation", LOBYTE(FontStruct.lfOrientation));
RegWriteInt(hKey, L"lfWeight", LOBYTE(FontStruct.lfWeight));
RegWriteInt(hKey, L"lfItalic", FontStruct.lfItalic);
RegWriteInt(hKey, L"lfUnderline", FontStruct.lfUnderline);
RegWriteInt(hKey, L"lfStrikeOut", FontStruct.lfStrikeOut);
RegWriteInt(hKey, L"lfCharSet", FontStruct.lfCharSet);
RegWriteInt(hKey, L"lfOutPrecision", FontStruct.lfOutPrecision);
RegWriteInt(hKey, L"lfClipPrecision", FontStruct.lfClipPrecision);
RegWriteInt(hKey, L"lfQuality", FontStruct.lfQuality);
RegWriteInt(hKey, L"lfPitchAndFamily", FontStruct.lfPitchAndFamily);
RegWriteInt(hKey, L"iPointSize", iPointSize);
RegWriteInt(hKey, L"fWrap", fWrap);
RegWriteInt(hKey, L"StatusBar", fStatus);
RegWriteInt(hKey, L"fSaveWindowPositions", Data);
RegWriteString(hKey, L"lfFaceName", FontStruct.lfFaceName);
RegWriteString(hKey, L"szHeader", &chPageText);
RegWriteString(hKey, L"szTrailer", &String1);
RegWriteInt(hKey, L"iMarginTop", LOBYTE(g_PageSetupDlg.rtMargin.top));
RegWriteInt(hKey, L"iMarginBottom", LOBYTE(g_PageSetupDlg.rtMargin.bottom));
RegWriteInt(hKey, L"iMarginLeft", LOBYTE(g_PageSetupDlg.rtMargin.left));
RegWriteInt(hKey, L"iMarginRight", LOBYTE(g_PageSetupDlg.rtMargin.right));
RegWriteInt(hKey, L"fMLE_is_broken", fMLE_is_broken);
wndpl.length = 44;
if ( GetWindowPlacement(hwndNP, &wndpl) )
{
RegWriteInt(hKey, L"iWindowPosX", LOBYTE(wndpl.rcNormalPosition.left));
RegWriteInt(hKey, L"iWindowPosY", LOBYTE(wndpl.rcNormalPosition.top));
RegWriteInt(hKey, L"iWindowPosDX", LOBYTE(wndpl.rcNormalPosition.right) - LOBYTE(wndpl.rcNormalPosition.left));
RegWriteInt(hKey, L"iWindowPosDY", LOBYTE(wndpl.rcNormalPosition.bottom) - LOBYTE(wndpl.rcNormalPosition.top));
}
result = RegCloseKey(hKey);
}
return result;
}
//----- (01003C92) --------------------------------------------------------
LSTATUS __cdecl GetGlobals()
{
HGDIOBJ v0; // eax@1
LSTATUS result; // eax@5
HKEY hKey; // [sp+8h] [bp-64h]@3
char pv; // [sp+Ch] [bp-60h]@2
int v4; // [sp+14h] [bp-58h]@5
int v5; // [sp+18h] [bp-54h]@5
int v6; // [sp+1Ch] [bp-50h]@5
unsigned __int8 v7; // [sp+20h] [bp-4Ch]@5
unsigned __int8 v8; // [sp+21h] [bp-4Bh]@5
unsigned __int8 v9; // [sp+22h] [bp-4Ah]@5
unsigned __int8 v10; // [sp+23h] [bp-49h]@5
unsigned __int8 v11; // [sp+24h] [bp-48h]@5
unsigned __int8 v12; // [sp+25h] [bp-47h]@5
unsigned __int8 v13; // [sp+26h] [bp-46h]@5
unsigned __int8 v14; // [sp+27h] [bp-45h]@5
v0 = GetStockObject(16);
if ( v0 )
GetObjectW(v0, 92, &pv);
if ( RegCreateKeyW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Notepad", &hKey) )
hKey = 0;
FontStruct.lfWidth = 0;
FontStruct.lfEscapement = RegGetInt(hKey, L"lfEscapement", v4);
FontStruct.lfOrientation = RegGetInt(hKey, L"lfOrientation", v5);
FontStruct.lfWeight = RegGetInt(hKey, L"lfWeight", v6);
FontStruct.lfItalic = RegGetInt(hKey, L"lfItalic", v7);
FontStruct.lfUnderline = RegGetInt(hKey, L"lfUnderline", v8);
FontStruct.lfStrikeOut = RegGetInt(hKey, L"lfStrikeOut", v9);
FontStruct.lfCharSet = RegGetInt(hKey, L"lfCharSet", v10);
FontStruct.lfOutPrecision = RegGetInt(hKey, L"lfOutPrecision", v11);
FontStruct.lfClipPrecision = RegGetInt(hKey, L"lfClipPrecision", v12);
FontStruct.lfQuality = RegGetInt(hKey, L"lfQuality", v13);
FontStruct.lfPitchAndFamily = RegGetInt(hKey, L"lfPitchAndFamily", v14);
RegGetString(hKey, L"lfFaceName", L"Lucida Console", (LPBYTE)FontStruct.lfFaceName, 0x20u);
*(_DWORD *)&iPointSize = RegGetInt(hKey, L"iPointSize", 100);
fWrap = RegGetInt(hKey, L"fWrap", 0);
*(_DWORD *)&fStatus = RegGetInt(hKey, L"StatusBar", 0);
*(_DWORD *)&Data = RegGetInt(hKey, L"fSaveWindowPositions", 0);
RegGetString(hKey, L"szHeader", &chPageText, (LPBYTE)&chPageText, 0x28u);
RegGetString(hKey, L"szTrailer", &String1, (LPBYTE)&String1, 0x28u);
g_PageSetupDlg.rtMargin.top = RegGetInt(hKey, L"iMarginTop", g_PageSetupDlg.rtMargin.top);
g_PageSetupDlg.rtMargin.bottom = RegGetInt(hKey, L"iMarginBottom", g_PageSetupDlg.rtMargin.bottom);
g_PageSetupDlg.rtMargin.left = RegGetInt(hKey, L"iMarginLeft", g_PageSetupDlg.rtMargin.left);
g_PageSetupDlg.rtMargin.right = RegGetInt(hKey, L"iMarginRight", g_PageSetupDlg.rtMargin.right);
Y = RegGetInt(hKey, L"iWindowPosY", 2147483648);
X = RegGetInt(hKey, L"iWindowPosX", 2147483648);
nWidth = RegGetInt(hKey, L"iWindowPosDX", 2147483648);
nHeight = RegGetInt(hKey, L"iWindowPosDY", 2147483648);
result = RegGetInt(hKey, L"fMLE_is_broken", 0);
*(_DWORD *)&fMLE_is_broken = result;
if ( hKey )
result = RegCloseKey(hKey);
return result;
}
// 10016DC: using guessed type wchar_t aLucidaConsole[15];
//----- (01003F4C) --------------------------------------------------------
signed int __usercall sub_1003F4C(WCHAR **a1, unsigned __int16 *a2)
{
unsigned __int16 *v2; // edi@1
WCHAR **v3; // ebx@1
unsigned __int16 v4; // ax@1
__int16 v5; // ST10_2@2
WCHAR *v6; // eax@2
signed int result; // eax@4
v2 = a2;
v3 = a1;
v4 = *a2;
if ( *a2 )
{
while ( 1 )
{
v5 = (unsigned int)CharUpperW((LPWSTR)v4);
v6 = (WCHAR *)*(_WORD *)v3;
++v2;
v3 = (WCHAR **)((char *)v3 + 2);
if ( v5 != (unsigned __int16)CharUpperW(v6) )
break;
v4 = *v2;
if ( !*v2 )
goto LABEL_4;
}
result = 1;
}
else
{
LABEL_4:
result = 0;
}
return result;
}
//----- (01003F99) --------------------------------------------------------
LPCWSTR __stdcall GetFileName(LPWSTR lpFileName, LPCWSTR lpString2)
{
LPCWSTR i; // esi@1
LPWSTR v3; // ecx@1
unsigned int v4; // edx@4
const WCHAR v5; // di@4
WCHAR v6; // ax@8
HANDLE v7; // eax@10
struct _WIN32_FIND_DATAW FindFileData; // [sp+Ch] [bp-254h]@10
i = lpString2;
v3 = lpFileName;
if ( *lpString2 == 34 || *lpString2 == 39 )
{
v4 = 0;
v5 = *lpString2;
for ( i = lpString2 + 1; ; ++i )
{
v6 = *i;
if ( !*i || v6 == v5 || v4 >= 0x104 )
break;
*v3 = v6;
++v3;
++v4;
}
*v3 = 0;
}
else
{
lstrcpynW(lpFileName, lpString2, 260);
}
v7 = FindFirstFileW(lpFileName, &FindFileData);
if ( v7 != (HANDLE)-1 || (AddExt(lpFileName), v7 = FindFirstFileW(lpFileName, &FindFileData), v7 != (HANDLE)-1) )
FindClose(v7);
return i;
}
// 1009604: using guessed type int __security_cookie;
//----- (01004047) --------------------------------------------------------
HLOCAL __stdcall SizeStrings(HINSTANCE hInstance)
{
int v1; // esi@1
signed int v2; // edi@2
int v3; // ebx@2
int v4; // eax@3
HLOCAL result; // eax@1
WCHAR *hMem; // [sp+Ch] [bp-4h]@7
v1 = 280;
for ( result = LocalAlloc(0x40u, 0x230u); ; result = LocalAlloc(0x40u, 2 * v1) )
{
hMem = (WCHAR *)result;
if ( !result )
break;
v2 = 0;
v3 = 0;
do
{
v4 = LoadStringW(hInstance, *(_DWORD *)rgsz[v2], hMem, v1);
if ( v4 >= v1 - 1 )
break;
++v2;
v3 += v4 + 1;
}
while ( v2 < 45 );
LocalFree(hMem);
if ( v2 >= 45 )
return (HLOCAL)v3;
v1 *= 2;
}
return result;
}
// 10090E8: using guessed type int rgsz[9];
//----- (010040BA) --------------------------------------------------------
HLOCAL __stdcall InitStrings(HINSTANCE hInstance)
{
HLOCAL result; // eax@1
WCHAR *v2; // esi@2
int v3; // ebx@3
UINT **v4; // edi@5
int v5; // eax@6
result = SizeStrings(hInstance);
if ( result )
{
result = LocalAlloc(0x40u, 2 * (_DWORD)result);
v2 = (WCHAR *)result;
if ( result )
{
v3 = LocalSize(result) >> 1;
if ( v3 )
{
v4 = (UINT **)rgsz;
while ( 1 )
{
v5 = LoadStringW(hInstance, **v4, v2, v3) + 1;
**v4 = (UINT)v2;
v2 += v5;
if ( v5 > v3 )
break;
++v4;
v3 -= v5;
if ( (signed int)v4 >= (signed int)&off_100919C )
{
lstrcpynW(&chPageText, *(&szHelpFile + 1), 40);
lstrcpynW(&String1, *(&szHelpFile + 2), 40);
chMerge = *(_WORD *)szMerge;
return (HLOCAL)1;
}
}
MessageBoxW(0, L"Out of RC string space!!", L"DEV Error!", 0);
result = 0;
}
else
{
result = 0;
}
}
}
return result;
}
// 1009070: using guessed type int szMerge;
// 10090E8: using guessed type int rgsz[9];
// 100919C: using guessed type __int16 *off_100919C;
// 100AB90: using guessed type __int16 chMerge;
//----- (0100417A) --------------------------------------------------------
int __stdcall SkipBlanks(int a1)
{
int result; // eax@1
for ( result = a1; *(_WORD *)result == 32 || *(_WORD *)result == 9; result += 2 )
;
return result;
}
//----- (0100419E) --------------------------------------------------------
signed int __stdcall ProcessSetupOption(WCHAR **a1)
{
const WCHAR *v1; // eax@2
DWORD v2; // eax@4
int v3; // eax@5
int v4; // eax@7
signed int result; // eax@14
int v6; // [sp+Ch] [bp-4h]@1
v6 = 0;
if ( !sub_1003F4C(a1, L"/.SETUP") )
{
fRunBySetup = 1;
hSysMenuSetup = GetSystemMenu(hwndNP, 0);
hAccel = LoadAcceleratorsW(hInstanceNP, L"SlipUpAcc");
SetWindowLongW(hwndNP, -16, 16580608);
v1 = (const WCHAR *)SkipBlanks((int)((char *)a1 + 14));
if ( !*v1 )
return 6;
GetFileName((LPWSTR)&szFileName, v1);
fp = CreateFileW(&szFileName, 0x80000000, 3u, 0, 3u, 0x80u, 0);
if ( fp != (HANDLE)-1 )
goto LABEL_19;
v2 = GetLastError() - 2;
if ( v2 )
{
v3 = v2 - 3;
if ( v3 )
v4 = v3 == 118 ? AlertBox(hwndNP, szNN, (LPCWSTR)szNVF, &szFileName, 0x31u) : AlertBox(
hwndNP,
szNN,
szDiskError,
&szFileName,
0x31u);
else
v4 = AlertBox(hwndNP, szNN, (LPCWSTR)szACCESSDENY, &szFileName, 0x31u);
v6 = v4;
}
else
{
v6 = AlertBox(hwndNP, szNN, szFNF, &szFileName, 0x33u);
if ( v6 == 6 )
fp = CreateFileW(&szFileName, 0xC0000000, 3u, 0, 4u, 0x80u, 0);
}
if ( fp != (HANDLE)-1 )
{
LABEL_19:
LoadFile(&szFileName, dword_1009A80);
result = 2;
if ( v6 == 2 )
return result;
return 6;
}
}
return 0;
}
// 100175C: using guessed type wchar_t a_setup[8];
// 1009064: using guessed type int szNVF;
// 100909C: using guessed type int szACCESSDENY;
// 100984C: using guessed type int fRunBySetup;
//----- (010042F9) --------------------------------------------------------
signed int __stdcall ProcessShellOptions(WCHAR **a1, int nCmdShow)
{
int v2; // eax@2
const WCHAR *v3; // esi@5
int v4; // eax@6
int v5; // eax@8
int v6; // eax@9
unsigned int v7; // edx@9
WCHAR v8; // cx@13
DWORD v9; // eax@16
int v10; // eax@17
int v11; // eax@18
const WCHAR *v12; // eax@20
signed int v14; // [sp+8h] [bp-4h]@1
v14 = 1;
if ( sub_1003F4C(a1, L"/PT") )
{
if ( sub_1003F4C(a1, L"/P") )
return 0;
v2 = SkipBlanks((int)(a1 + 1));
}
else
{
v2 = SkipBlanks((int)((char *)a1 + 6));
v14 = 0;
}
v3 = (const WCHAR *)v2;
if ( !*(_WORD *)v2 )
return 0;
ShowWindow(hwndNP, nCmdShow);
v4 = (int)(GetFileName((LPWSTR)&szFileName, v3) + 1);
if ( !v14 )
{
if ( *(_WORD *)v4 )
{
v5 = SkipBlanks(v4);
if ( *(_WORD *)v5 == 34 )
{
v6 = v5 + 2;
v7 = 0;
while ( 1 )
{
v8 = *(_WORD *)v6;
if ( !*(_WORD *)v6 || v8 == 34 || v7 >= 0xFF )
break;
*(&szPrinterName + v7++) = v8;
v6 += 2;
}
*(&szPrinterName + v7) = 0;
goto LABEL_15;
}
}
return 0;
}
LABEL_15:
fp = CreateFileW(&szFileName, 0x80000000, 3u, 0, 3u, 0x80u, 0);
if ( fp == (HANDLE)-1 )
{
v9 = GetLastError() - 2;
if ( v9 )
{
v10 = v9 - 3;
if ( v10 && (v11 = v10 - 60) != 0 )
{
if ( v11 == 58 )
v12 = (const WCHAR *)szNVF;
else
v12 = szDiskError;
}
else
{
v12 = (const WCHAR *)szACCESSDENY;
}
}
else
{
v12 = szFNF;
}
AlertBox(hwndNP, szNN, v12, &szFileName, 0x30u);
}
else
{
LoadFile(&szFileName, dword_1009A80);
if ( v14 )
PrintIt(1);
else
PrintIt(2);
}
return 1;
}
// 100176C: using guessed type wchar_t aP[3];
// 1001774: using guessed type wchar_t aPt[4];
// 1009064: using guessed type int szNVF;
// 100909C: using guessed type int szACCESSDENY;
//----- (01004458) --------------------------------------------------------
HFILTER __stdcall CreateFilter()
{
WCHAR *v0; // ebx@1
WCHAR *v1; // ebx@1
WCHAR *v2; // ebx@1
HFILTER result; // eax@1
WCHAR *lpString; // [sp+14h] [bp+8h]@0
lstrcpyW(lpString, szAnsiText);
v0 = &lpString[lstrlenW(lpString) + 1];
lstrcpyW(v0, L"*.txt");
v1 = &v0[lstrlenW(v0) + 1];
lstrcpyW(v1, szAllFiles);
v2 = &v1[lstrlenW(v1) + 1];
lstrcpyW(v2, L"*.*");
result = (HFILTER)lstrlenW(v2);
v2[(_DWORD)result + 1] = 0;
return result;
}
// 1004458: inconsistent function type and number of purged bytes
//----- (010044BB) --------------------------------------------------------
int __stdcall EnumProc(int a1, int a2, int a3, int a4)
{
*(_BYTE *)(a4 + 23) = *(_BYTE *)(a1 + 23);
return 0;
}
//----- (010044D7) --------------------------------------------------------
BOOL __usercall sub_10044D7(HINSTANCE a1)
{
int v1; // eax@1
WNDCLASSEXW v3; // [sp+4h] [bp-30h]@1
v3.cbSize = 48;
v1 = GetSystemMetrics(41);
v3.hCursor = LoadCursorW(0, (LPCWSTR)(32513 - (v1 != 0)));
v3.hIcon = LoadIconW(a1, (LPCWSTR)2);
v3.hIconSm = LoadImageW(a1, (LPCWSTR)2, 1u, 16, 16, 0);
v3.lpszMenuName = (LPCWSTR)1;
v3.hInstance = a1;
v3.lpszClassName = L"Notepad";
v3.lpfnWndProc = (WNDPROC)NPWndProc;
v3.hbrBackground = (HBRUSH)6;
v3.style = 0;
v3.cbClsExtra = 0;
v3.cbWndExtra = 0;
return RegisterClassExW(&v3) != 0;
}
//----- (01004565) --------------------------------------------------------
signed int __stdcall NPInit(HINSTANCE hInstance, int a2, __int32 a3, int nCmdShow)
{
int v4; // eax@5
HACCEL v5; // eax@5
void *v6; // ecx@5
HWND v7; // edx@9
HMENU v8; // eax@16
HMENU v9; // eax@16
int v10; // eax@17
int v11; // eax@19
int v12; // edi@19
signed int v13; // eax@25
int v15; // eax@34
WINDOWPLACEMENT wndpl; // [sp+Ch] [bp-A8h]@12
struct tagRECT Rect; // [sp+38h] [bp-7Ch]@13
int v18; // [sp+48h] [bp-6Ch]@15
int v19; // [sp+4Ch] [bp-68h]@15
int v20; // [sp+50h] [bp-64h]@15
int v21; // [sp+54h] [bp-60h]@15
LPARAM lParam; // [sp+58h] [bp-5Ch]@15
int v23; // [sp+5Ch] [bp-58h]@15
HINSTANCE v24; // [sp+60h] [bp-54h]@1
__int32 v25; // [sp+64h] [bp-50h]@1
HGDIOBJ wParam; // [sp+68h] [bp-4Ch]@17
HDC hDC; // [sp+6Ch] [bp-48h]@3
WCHAR String1; // [sp+70h] [bp-44h]@17
v24 = hInstance;
v25 = a3;
wFRMsg = RegisterWindowMessageW(L"commdlg_FindReplace");
if ( !wFRMsg )
return 0;
wHlpMsg = RegisterWindowMessageW(L"commdlg_help");
if ( !wHlpMsg )
return 0;
hDC = GetDC(0);
if ( !hDC )
return 0;
if ( !InitStrings(hInstance) )
return 0;
v4 = GetSystemMetrics(41);
hStdCursor = LoadCursorW(0, (LPCWSTR)(32513 - (v4 != 0)));
hWaitCursor = LoadCursorW(0, (LPCWSTR)0x7F02);
v5 = LoadAcceleratorsW(hInstance, L"MainAcc");
hAccel = v5;
if ( !hWaitCursor || !v5 || !a2 && !sub_10044D7(hInstance) )
return 0;
hInstanceNP = hInstance;
g_PageSetupDlg.lStructSize = 84;
g_PageSetupDlg.hDevMode = 0;
g_PageSetupDlg.hDevNames = 0;
g_PageSetupDlg.hInstance = hInstance;
SetPageSetupDefaults(v6);
GetGlobals();
v7 = CreateWindowExW(0, L"Notepad", &szOtherStuff, 0xCF0000u, X, Y, nWidth, nHeight, 0, 0, hInstance, 0);
hwndNP = v7;
g_PageSetupDlg.hwndOwner = v7;
if ( !v7 )
return 0;
if ( nWidth != 2147483648 && nHeight != 2147483648 )
{
memset(&wndpl, 0, sizeof(wndpl));
wndpl.rcNormalPosition.left = X;
wndpl.rcNormalPosition.right = nWidth + X;
wndpl.rcNormalPosition.top = Y;
wndpl.rcNormalPosition.bottom = nHeight + Y;
wndpl.length = 44;
SetWindowPlacement(v7, &wndpl);
v7 = hwndNP;
}
DragAcceptFiles(v7, 1);
GetClientRect(hwndNP, &Rect);
hwndEdit = CreateWindowExW(
0x200u,
L"Edit",
&szOtherStuff,
fWrap != 0 ? 1344274692 : 1345323268,
0,
0,
Rect.right,
Rect.bottom - 100,
hwndNP,
(HMENU)0xF,
v24,
0);
if ( !hwndEdit )
return 0;
hwndStatus = CreateStatusWindowW(
(*(_DWORD *)&fStatus != 0 ? 0x10000000 : 0) | 0x44800000,
&szOtherStuff,
hwndNP,
0x401u);
if ( !hwndStatus )
return 0;
UpdateStatusBar(1);
GetClientRect(hwndStatus, (LPRECT)&v18);
dyStatus = v21 - v19;
v23 = -1;
lParam = 3 * (v20 - v18) / 4;
SendMessageW(hwndStatus, 0x404u, 2u, (LPARAM)&lParam);
SendMessageW(hwndEdit, 0xC8u, fWrap, 0);
if ( fWrap )
{
v8 = GetMenu(hwndNP);
v9 = GetSubMenu(v8, 3);
EnableMenuItem(v9, 0x1Bu, 1u);
}
v10 = GetDeviceCaps(hDC, 90);
FontStruct.lfHeight = -MulDiv(*(int *)&iPointSize, v10, 720);
hFont = CreateFontIndirectW(&FontStruct);
wParam = SelectObject(hDC, hFont);
GetTextFaceW(hDC, 32, &String1);
SelectObject(hDC, wParam);
if ( lstrcmpiW(&String1, FontStruct.lfFaceName) )
{
EnumFontsW(hDC, FontStruct.lfFaceName, (FONTENUMPROCW)EnumProc, (LPARAM)&FontStruct);
DeleteObject(hFont);
hFont = CreateFontIndirectW(&FontStruct);
}
SendMessageW(hwndEdit, 0x30u, (WPARAM)hFont, 0);
ReleaseDC(0, hDC);
szSearch = 0;
hEdit = LocalAlloc(0x42u, 2u);
PostMessageW(hwndEdit, 0xC5u, 0, 0);
SetTitle(szUntitled);
ShowWindow(hwndNP, nCmdShow);
SetCursor(hStdCursor);
v11 = SkipBlanks(v25);
dword_1009A80 = -1;
v12 = v11;
if ( !sub_1003F4C((WCHAR **)v11, L"/A") )
{
dword_1009A80 = 0;
LABEL_24:
v12 = SkipBlanks(v12 + 4);
goto LABEL_25;
}
if ( !sub_1003F4C((WCHAR **)v12, L"/W") )
dword_1009A80 = 1;
if ( dword_1009A80 != -1 )
goto LABEL_24;
LABEL_25:
v13 = ProcessSetupOption((WCHAR **)v12);
if ( v13 )
{
if ( v13 == 2 )
return 0;
LABEL_40:
CreateFilter();
CreateFilter();
memset(&OFN, 0, 0x58u);
OFN.hInstance = v24;
memset(&FR, 0, sizeof(FR));
OFN.lStructSize = 88;
OFN.hwndOwner = hwndNP;
OFN.nMaxFile = 260;
FR.lStructSize = 40;
FR.hwndOwner = hwndNP;
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&v25);
SendMessageW(hwndEdit, 0xB1u, (WPARAM)wParam, v25);
SendMessageW(hwndEdit, 0xB7u, 0, 0);
if ( ((unsigned int)GetKeyboardLayout(0) & 0x3FF) == 17 )
SendMessageW(hwndEdit, 0xD8u, 1u, 1);
return 1;
}
if ( !ProcessShellOptions((WCHAR **)v12, nCmdShow) )
{
if ( *(_WORD *)v12 )
{
GetFileName((LPWSTR)&szFileName, (LPCWSTR)v12);
fp = CreateFileW(&szFileName, 0x80000000, 3u, 0, 3u, 0x80u, 0);
if ( fp != (HANDLE)-1 )
goto LABEL_45;
if ( GetLastError() == 2 )
{
v15 = AlertBox(hwndNP, szNN, szFNF, &szFileName, 0x33u);
if ( v15 == 2 )
return 0;
if ( v15 == 6 )
fp = CreateFileW(&szFileName, 0xC0000000, 3u, 0, 4u, 0x80u, 0);
}
else
{
AlertUser_FileFail(&szFileName);
SetTitle(szUntitled);
lstrcpyW((LPWSTR)&szFileName, szUntitled);
}
if ( fp != (HANDLE)-1 )
LABEL_45:
LoadFile(&szFileName, dword_1009A80);
}
goto LABEL_40;
}
PostMessageW(hwndNP, 0x10u, 0, 0);
return 1;
}
// 1001784: using guessed type wchar_t aW[3];
// 100178C: using guessed type wchar_t aA[3];
// 100A484: using guessed type int wHlpMsg;
// 100A488: using guessed type int wFRMsg;
// 100A6E0: using guessed type int dyStatus;
//----- (01004B65) --------------------------------------------------------
void __stdcall ReverseEndian(int a1, int a2, int a3)
{
int v3; // esi@1
int v4; // eax@2
int v5; // ecx@2
__int16 v6; // bx@3
v3 = a3;
if ( a3 )
{
v4 = a2;
v5 = a1;
do
{
LOBYTE(v6) = 0;
HIBYTE(v6) = *(_BYTE *)v4;
*(_WORD *)v5 = v6 ^ *(_BYTE *)(v4 + 1);
v5 += 2;
v4 += 2;
--v3;
}
while ( v3 );
}
}
//----- (01004B99) --------------------------------------------------------
signed int __stdcall AnsiWriteFile(HANDLE hFile, UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar)
{
int v6; // edi@5
HLOCAL v7; // eax@6
int v8; // esi@9
DWORD NumberOfBytesWritten; // [sp+4h] [bp-10h]@10
char v10; // [sp+8h] [bp-Ch]@4
LPCVOID hMem; // [sp+Ch] [bp-8h]@6
LPBOOL lpUsedDefaultChar; // [sp+10h] [bp-4h]@3
if ( !cchWideChar )
return 1;
lpUsedDefaultChar = 0;
if ( CodePage != 65001 )
lpUsedDefaultChar = (LPBOOL)&v10;
v6 = WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, 0, 0, 0, lpUsedDefaultChar);
if ( !v6 )
return 0;
v7 = LocalAlloc(0x40u, v6 + 1);
hMem = v7;
if ( !v7 )
{
SetLastError(8u);
return 0;
}
v8 = WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, (LPSTR)v7, v6, 0, lpUsedDefaultChar);
if ( v8 )
v8 = WriteFile(hFile, hMem, v6, &NumberOfBytesWritten, 0);
LocalFree((HLOCAL)hMem);
return v8;
}
//----- (01004C49) --------------------------------------------------------
LRESULT __cdecl ClearFmt()
{
LRESULT result; // eax@5
if ( fWrap )
{
if ( *(_DWORD *)&fMLE_is_broken )
{
GotoAndScrollInView(1);
}
else
{
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
SendMessageW(hwndEdit, 0xB1u, 0, 0);
}
result = SendMessageW(hwndEdit, 0xC8u, 0, 0);
}
return result;
}
//----- (01004CAB) --------------------------------------------------------
LRESULT __cdecl RestoreFmt()
{
LRESULT result; // eax@1
result = 0;
if ( fWrap )
{
if ( *(_DWORD *)&fMLE_is_broken )
{
result = NpReCreate(0x50200104u);
}
else
{
SendMessageW(hwndEdit, 0xC8u, 1u, 0);
result = SendMessageW(hwndEdit, 0xB1u, wParam, lParam);
}
}
return result;
}
//----- (01004CFF) --------------------------------------------------------
__int32 __stdcall New(int a1)
{
__int32 result; // eax@2
HLOCAL v2; // eax@3
if ( !a1 || (result = CheckSave(0)) != 0 )
{
SendMessageW(hwndEdit, 0xCu, 0, (LPARAM)&szOtherStuff);
fUntitled = 1;
lstrcpyW((LPWSTR)&szFileName, szUntitled);
SetTitle(&szFileName);
SendMessageW(hwndEdit, 0xB1u, 0, 0);
SendMessageW(hwndEdit, 0xB7u, 0, 0);
v2 = LocalReAlloc(hEdit, 2u, 2u);
if ( v2 )
hEdit = v2;
*(_WORD *)LocalLock(hEdit) = 0;
LocalUnlock(hEdit);
result = SendMessageW(hwndEdit, 0xBCu, (WPARAM)hEdit, 0);
szSearch = 0;
}
return result;
}
// 100901C: using guessed type int fUntitled;
//----- (01004DCD) --------------------------------------------------------
WCHAR *__stdcall AddExt(LPCWSTR lpString1)
{
WCHAR *result; // eax@1
unsigned int i; // ecx@1
int v3; // edx@6
result = (WCHAR *)lstrlenW(lpString1);
for ( i = (unsigned int)&lpString1[(_DWORD)result]; ; i -= 2 )
{
v3 = *(_WORD *)i;
if ( v3 == 46 || v3 == 92 || v3 == 58 || i <= (unsigned int)lpString1 )
break;
}
if ( *(_WORD *)i != 46 )
{
result = (WCHAR *)((char *)result + 5);
if ( (unsigned int)result <= 0x104 )
result = lstrcatW((LPWSTR)lpString1, L".txt");
}
return result;
}
//----- (01004E20) --------------------------------------------------------
int __stdcall AlertUser_FileFail(LPCWSTR lpString)
{
DWORD v1; // ST0C_4@1
DWORD v2; // eax@1
int result; // eax@2
WCHAR Text; // [sp+4h] [bp-204h]@1
v1 = GetUserDefaultUILanguage();
v2 = GetLastError();
if ( FormatMessageW(0x1200u, 0, v2, v1, &Text, 0x100u, 0) )
result = MessageBoxW(hwndNP, &Text, szNN, 0x30u);
else
result = AlertBox(hwndNP, szNN, szDiskError, lpString, 0x30u);
return result;
}
//----- (01004EAE) --------------------------------------------------------
signed int __stdcall SaveFile(HWND hWnd, LPCWSTR lpString, LPCWSTR lpBuffer)
{
HANDLE v3; // eax@2
int v5; // ebx@9
LRESULT v6; // eax@9
BOOL *v7; // eax@16
DWORD v8; // edi@16
int v9; // eax@18
BOOL v10; // eax@23
BOOL v11; // edi@24
int v12; // [sp+4h] [bp-14h]@5
BOOL UsedDefaultChar; // [sp+8h] [bp-10h]@1
HLOCAL hMem; // [sp+Ch] [bp-Ch]@9
UINT CodePage; // [sp+10h] [bp-8h]@16
DWORD NumberOfBytesWritten; // [sp+14h] [bp-4h]@14
const void *lpBuffera; // [sp+28h] [bp+10h]@10
UsedDefaultChar = 0;
if ( lpBuffer )
v3 = CreateFileW(lpString, 0xC0000000, 3u, 0, 4u, 0x80u, 0);
else
v3 = CreateFileW(lpString, 0xC0000000, 1u, 0, 4u, 0x80u, 0);
fp = v3;
if ( v3 == (HANDLE)-1 || (v12 = GetLastError() != 183, fp == (HANDLE)-1) )
{
AlertBox(hWnd, szNN, szCREATEERR, lpString, 0x30u);
return 0;
}
if ( fWrap )
ClearFmt();
v5 = SendMessageW(hwndEdit, 0xEu, 0, 0);
v6 = SendMessageW(hwndEdit, 0xBDu, 0, 0);
hMem = (HLOCAL)v6;
if ( !v6 )
goto LABEL_29;
lpBuffera = LocalLock((HLOCAL)v6);
if ( !lpBuffera )
goto LABEL_29;
if ( g_ftSaveAs == 1 )
{
WriteFile(fp, &unk_10091E4, 2u, &NumberOfBytesWritten, 0);
v10 = WriteFile(fp, lpBuffera, 2 * v5, &NumberOfBytesWritten, 0);
}
else
{
if ( g_ftSaveAs == 2 )
{
WriteFile(fp, &unk_10091E8, 2u, &NumberOfBytesWritten, 0);
ReverseEndian((int)lpBuffera, (int)lpBuffera, v5);
v11 = WriteFile(fp, lpBuffera, 2 * v5, &NumberOfBytesWritten, 0);
ReverseEndian((int)lpBuffera, (int)lpBuffera, v5);
goto LABEL_27;
}
if ( g_ftSaveAs == 3 )
WriteFile(fp, &BOM_UTF8, 3u, &NumberOfBytesWritten, 0);
if ( g_ftSaveAs == 3 )
{
v7 = 0;
CodePage = 65001;
v8 = 0;
}
else
{
CodePage = GetACP();
v7 = &UsedDefaultChar;
v8 = 1024;
}
v9 = WideCharToMultiByte(CodePage, v8, (LPCWSTR)lpBuffera, v5, 0, 0, 0, v7);
if ( UsedDefaultChar || v5 && !v9 )
{
if ( AlertBox(hWnd, szNN, szErrUnicode, lpString, 0x31u) == 2 )
{
LABEL_30:
SetCursor(hStdCursor);
CloseHandle(fp);
fp = (HANDLE)-1;
if ( hMem )
LocalUnlock(hMem);
if ( v12 )
DeleteFileW(lpString);
if ( fWrap )
RestoreFmt();
return 0;
}
v8 = 0;
}
v10 = AnsiWriteFile(fp, CodePage, v8, (LPCWSTR)lpBuffera, v5);
}
v11 = v10;
LABEL_27:
if ( !v11 )
{
SetCursor(hStdCursor);
LABEL_29:
AlertUser_FileFail(lpString);
goto LABEL_30;
}
SetEndOfFile(fp);
g_ftOpenedAs = g_ftSaveAs;
SendMessageW(hwndEdit, 0xB9u, 0, 0);
SetTitle(lpString);
fUntitled = 0;
CloseHandle(fp);
fp = (HANDLE)-1;
LocalUnlock(hMem);
if ( fWrap )
RestoreFmt();
SetCursor(hStdCursor);
return 1;
}
// 100901C: using guessed type int fUntitled;
// 100A528: using guessed type int g_ftSaveAs;
//----- (01005179) --------------------------------------------------------
signed int __stdcall LoadFile(LPCWSTR lpString, int a2)
{
BOOL v2; // eax@3
unsigned int v3; // esi@3
int v4; // edi@8
HANDLE v5; // eax@8
int v6; // eax@16
unsigned __int32 v7; // ebx@20
void (__stdcall *v8)(HWND, UINT, WPARAM, LPARAM); // esi@32
HLOCAL v9; // eax@32
bool v10; // zf@44
int v11; // eax@49
const void *v12; // esi@51
int v13; // eax@57
int v14; // ecx@60
unsigned __int32 v15; // edx@61
__int16 v16; // cx@65
int v17; // eax@65
__int16 v18; // cx@66
int v19; // eax@66
__int16 v20; // cx@67
int v21; // eax@67
int v22; // eax@76
struct _BY_HANDLE_FILE_INFORMATION FileInformation; // [sp+Ch] [bp-290h]@3
HANDLE hObject; // [sp+40h] [bp-25Ch]@8
int v26; // [sp+44h] [bp-258h]@24
int cbMultiByte; // [sp+48h] [bp-254h]@3
int v28; // [sp+4Ch] [bp-250h]@1
__int16 v29; // [sp+50h] [bp-24Ch]@10
HLOCAL hMem; // [sp+54h] [bp-248h]@1
LPCSTR lpMultiByteStr; // [sp+58h] [bp-244h]@15
LPCWSTR pcchNewDestLength; // [sp+5Ch] [bp-240h]@1
LPVOID v33; // [sp+60h] [bp-23Ch]@8
int v34; // [sp+64h] [bp-238h]@1
int v35; // [sp+68h] [bp-234h]@1
UINT CodePage; // [sp+6Ch] [bp-230h]@1
int v37; // [sp+70h] [bp-22Ch]@19
int wParam; // [sp+74h] [bp-228h]@29
WCHAR String; // [sp+78h] [bp-224h]@33
CPPEH_RECORD ms_exc; // [sp+284h] [bp-18h]@15
pcchNewDestLength = lpString;
v35 = 0;
v28 = 0;
v34 = 0;
hMem = 0;
CodePage = 0;
if ( fp == (HANDLE)-1 )
{
AlertUser_FileFail(lpString);
return 0;
}
v2 = GetFileInformationByHandle(fp, &FileInformation);
v3 = FileInformation.nFileSizeLow;
cbMultiByte = FileInformation.nFileSizeLow;
if ( !v2 )
{
AlertUser_FileFail(lpString);
LABEL_78:
CloseHandle(fp);
fp = (HANDLE)-1;
return 0;
}
if ( FileInformation.nFileSizeLow >= 0x40000000 || FileInformation.nFileSizeHigh )
{
AlertBox(hwndNP, szNN, szFTL, lpString, 0x30u);
goto LABEL_78;
}
SetCursor(hWaitCursor);
if ( v3 )
{
v4 = 0;
v33 = 0;
v5 = CreateFileMappingW(fp, 0, 2u, 0, v3, 0);
hObject = v5;
if ( !v5 )
goto LABEL_12;
v33 = MapViewOfFile(v5, 4u, 0, 0, v3);
CloseHandle(hObject);
}
else
{
v33 = &v29;
v29 = 0;
}
v4 = (int)v33;
LABEL_12:
CloseHandle(fp);
fp = (HANDLE)-1;
if ( !v4 )
{
SetCursor(hStdCursor);
AlertUser_FileFail(pcchNewDestLength);
return 0;
}
ms_exc.registration.TryLevel = 0;
lpMultiByteStr = (LPCSTR)v4;
if ( a2 != -1 )
{
if ( a2 == 1 )
{
v34 = 1;
v37 = 1;
v7 = v3 >> 1;
wParam = v3 >> 1;
v10 = *(_WORD *)v4 == -257;
}
else
{
if ( a2 != 2 )
{
if ( a2 != 3 )
goto LABEL_39;
v26 = 1;
CodePage = 65001;
v37 = 3;
if ( v3 <= 2 || *(_WORD *)v4 != -17425 || *(_BYTE *)(v4 + 2) != -65 )
goto LABEL_29;
goto LABEL_43;
}
v34 = 1;
v37 = 1;
v7 = v3 >> 1;
wParam = v3 >> 1;
v10 = *(_WORD *)v4 == -2;
}
if ( !v10 )
goto LABEL_30;
goto LABEL_47;
}
v6 = *(_WORD *)v4;
if ( v6 == 48111 )
{
if ( v3 <= 2 || *(_BYTE *)(v4 + 2) != -65 )
goto LABEL_25;
v26 = 1;
CodePage = 65001;
v37 = 3;
LABEL_43:
lpMultiByteStr = (LPCSTR)(v4 + 3);
v3 -= 3;
cbMultiByte = v3;
goto LABEL_29;
}
if ( v6 == 65279 )
{
v34 = 1;
v37 = 1;
goto LABEL_20;
}
if ( v6 == 65534 )
{
v34 = 1;
v37 = 2;
LABEL_20:
v7 = v3 >> 1;
LABEL_47:
--v7;
goto LABEL_48;
}
LABEL_25:
v34 = IsInputTextUnicode((const void *)v4, v3);
if ( !v34 )
{
v26 = IsTextUTF8(v4, v3);
if ( v26 )
{
v37 = 3;
CodePage = 65001;
LABEL_29:
v7 = wParam;
goto LABEL_30;
}
LABEL_39:
v37 = 0;
CodePage = 0;
goto LABEL_29;
}
v37 = 1;
v7 = v3 >> 1;
LABEL_48:
wParam = v7;
LABEL_30:
if ( !v34 )
{
v7 = MultiByteToWideChar(CodePage, 0, lpMultiByteStr, v3, 0, 0);
wParam = v7;
}
v8 = SendMessageW;
SendMessageW(hwndEdit, 0xBu, 0, 0);
SendMessageW(hwndEdit, 0xB1u, 0, 0);
SendMessageW(hwndEdit, 0xB7u, 0, 0);
v9 = LocalReAlloc(hEdit, 2 * v7 + 2, 2u);
hMem = v9;
if ( !v9 )
{
lstrcpyW(&String, pcchNewDestLength);
New(0);
SetCursor(hStdCursor);
AlertBox(hwndNP, szNN, szFTL, &String, 0x30u);
if ( (__int16 *)v4 != &v29 )
UnmapViewOfFile((LPCVOID)v4);
SendMessageW(hwndEdit, 0xBu, 0, 0);
ms_exc.registration.TryLevel = -1;
return 0;
}
v11 = (int)LocalLock(v9);
v35 = v11;
if ( v34 )
{
if ( *(_WORD *)v4 == -257 )
{
v12 = (const void *)(v4 + 2);
}
else
{
if ( *(_WORD *)v4 == -2 )
{
ReverseEndian(v11, v4 + 2, v7);
goto LABEL_57;
}
v12 = (const void *)v4;
}
memcpy((void *)v11, v12, 2 * v7);
v4 = (int)v33;
v8 = SendMessageW;
}
else
{
v7 = MultiByteToWideChar(CodePage, 0, lpMultiByteStr, cbMultiByte, (LPWSTR)v11, v7);
wParam = v7;
}
LABEL_57:
v13 = v35;
g_ftOpenedAs = v37;
ms_exc.registration.TryLevel = -1;
if ( (__int16 *)v4 != &v29 )
{
UnmapViewOfFile((LPCVOID)v4);
v13 = v35;
}
if ( v13 )
{
v14 = v13;
if ( v7 > 0 )
{
v15 = v7;
do
{
if ( !*(_WORD *)v14 )
*(_WORD *)v14 = 32;
v14 += 2;
--v15;
}
while ( v15 );
}
*(_WORD *)(v13 + 2 * v7) = 0;
v16 = *(_WORD *)v13;
v17 = v13 + 2;
if ( v16 != 46
|| (v18 = *(_WORD *)v17, v19 = v17 + 2, v18 != 76)
|| (v20 = *(_WORD *)v19, v21 = v19 + 2, v20 != 79)
|| (v10 = *(_WORD *)v21 == 71, v28 = 1, !v10) )
v28 = 0;
}
if ( hMem )
{
LocalUnlock(hMem);
hEdit = hMem;
}
lstrcpyW((LPWSTR)&szFileName, pcchNewDestLength);
SetTitle(pcchNewDestLength);
fUntitled = 0;
dwEmSetHandle = 1;
v8(hwndEdit, 0xBCu, (WPARAM)hEdit, 0);
if ( dwEmSetHandle == 2 )
{
SetCursor(hStdCursor);
dwEmSetHandle = 0;
AlertBox(hwndNP, szNN, szFTL, pcchNewDestLength, 0x30u);
New(0);
v8(hwndEdit, 0xBu, 1u, 0);
return 0;
}
dwEmSetHandle = 0;
PostMessageW(hwndEdit, 0xC5u, 0, 0);
if ( v28 )
{
v8(hwndEdit, 0xB1u, v7, v7);
v8(hwndEdit, 0xB7u, 0, 0);
InsertDateTime(1);
}
v22 = ((LRESULT (__stdcall *)(HWND, UINT, WPARAM, LPARAM))v8)(hwndEdit, 0x115u, 0xBEu, 0);
SetScrollPos(hwndNP, 1, v22, 1);
v8(hwndEdit, 0xBu, 1u, 0);
InvalidateRect(hwndEdit, 0, 1);
UpdateWindow(hwndEdit);
SetCursor(hStdCursor);
return 1;
}
// 100901C: using guessed type int fUntitled;
// 1009848: using guessed type int dwEmSetHandle;
//----- (0100580B) --------------------------------------------------------
const wchar_t *__stdcall ReverseScan(const WCHAR *a1, const wchar_t *a2, LPCWSTR Str2, int a4)
{
LPCWSTR v4; // esi@1
const wchar_t *v5; // ebx@1
const wchar_t v6; // ax@3
bool v7; // zf@4
bool v8; // zf@9
__int16 v10; // [sp+Ch] [bp-8h]@1
__int16 v11; // [sp+10h] [bp-4h]@1
int Str2a; // [sp+24h] [bp+10h]@1
v4 = Str2;
v11 = (unsigned int)CharUpperW((LPWSTR)*Str2);
v10 = (unsigned int)CharLowerW((LPWSTR)*Str2);
v5 = a2;
Str2a = lstrlenW(Str2);
if ( !a2 )
v5 = &a1[lstrlenW(a1)];
while ( 1 )
{
if ( v5 == a1 )
return 0;
--v5;
v6 = *v5;
if ( a4 )
{
v7 = v6 == *v4;
}
else
{
if ( v6 == v11 )
goto LABEL_10;
v7 = v6 == v10;
}
if ( v7 )
{
if ( a4 )
{
v8 = _wcsncmp(v5, v4, Str2a) == 0;
goto LABEL_11;
}
LABEL_10:
v8 = CompareStringW(0x400u, 0x10001001u, v5, Str2a, v4, Str2a) == 2;
LABEL_11:
if ( v8 )
return v5;
}
}
}
//----- (010058B8) --------------------------------------------------------
int __stdcall ForwardScan(wchar_t *lpString1, LPCWSTR Str2, int a3)
{
LPCWSTR v3; // esi@1
int v4; // ebx@1
wchar_t *v5; // edi@1
bool v6; // zf@4
const wchar_t v7; // ax@10
__int16 v9; // [sp+Ch] [bp-4h]@1
LPWSTR Str2a; // [sp+1Ch] [bp+Ch]@1
v3 = Str2;
v4 = lstrlenW(Str2);
Str2a = CharUpperW((LPWSTR)*Str2);
v5 = lpString1;
v9 = (unsigned int)CharLowerW((LPWSTR)*v3);
while ( 1 )
{
v7 = *v5;
if ( !*v5 )
return *v5 != 0 ? (int)v5 : 0;
if ( a3 )
{
if ( v7 != *v3 )
goto LABEL_9;
v6 = _wcsncmp(v5, v3, v4) == 0;
}
else
{
if ( v7 != (_WORD)Str2a && v7 != v9 )
goto LABEL_9;
v6 = CompareStringW(0x400u, 0x10001001u, v5, v4, v3, v4) == 2;
}
if ( v6 )
return *v5 != 0 ? (int)v5 : 0;
LABEL_9:
++v5;
}
}
//----- (0100594C) --------------------------------------------------------
signed int __stdcall Search(LPCWSTR Str2)
{
signed int result; // eax@2
HMENU v2; // eax@3
HMENU v3; // eax@3
LRESULT v4; // eax@5
LPVOID v5; // edi@6
LRESULT v6; // eax@9
WPARAM i; // ecx@9
const wchar_t *v8; // ebx@12
HCURSOR v9; // edi@17
HWND v10; // eax@17
int v11; // eax@20
HMENU v12; // eax@21
HMENU hMenu; // [sp+4h] [bp-24h]@3
void *hMem; // [sp+8h] [bp-20h]@5
int v15; // [sp+Ch] [bp-1Ch]@10
signed int v16; // [sp+10h] [bp-18h]@1
signed int v17; // [sp+14h] [bp-14h]@1
LPARAM lParam; // [sp+18h] [bp-10h]@3
int v19; // [sp+1Ch] [bp-Ch]@10
WPARAM v20; // [sp+20h] [bp-8h]@9
WPARAM wParam; // [sp+24h] [bp-4h]@3
v16 = 0;
v17 = 0;
if ( *Str2 )
{
SendMessageW(hwndEdit, 0xB0u, (WPARAM)&wParam, (LPARAM)&lParam);
v2 = GetMenu(hwndNP);
hMenu = v2;
v3 = GetSubMenu(v2, 1);
if ( GetMenuState(v3, 0x19u, 0) == 1 )
{
v17 = 1;
lParam = 0;
wParam = 0;
}
v4 = SendMessageW(hwndEdit, 0xBDu, 0, 0);
hMem = (void *)v4;
if ( v4 && (v5 = LocalLock((HLOCAL)v4)) != 0 )
{
if ( fReverse )
{
v20 = SendMessageW(hwndEdit, 0xC9u, wParam, 0);
v6 = SendMessageW(hwndEdit, 0xBBu, v20, 0);
for ( i = wParam; ; i = v15 )
{
v19 = v6;
v8 = ReverseScan((const WCHAR *)v5 + v6, (const wchar_t *)v5 + i, Str2, fCase);
if ( v8 )
break;
v15 = v19;
if ( !v20 )
break;
--v20;
v6 = SendMessageW(hwndEdit, 0xBBu, v20, 0);
}
}
else
{
v8 = (const wchar_t *)ForwardScan((wchar_t *)v5 + lParam, Str2, fCase);
}
LocalUnlock(hMem);
if ( v8 )
{
wParam = ((char *)v8 - (_BYTE *)v5) >> 1;
v11 = lstrlenW(Str2);
SendMessageW(hwndEdit, 0xB1u, wParam, wParam + v11);
if ( v17 )
{
v12 = GetSubMenu(hMenu, 1);
EnableMenuItem(v12, 0x19u, 0);
}
if ( !(FR.Flags & 0x20) )
{
SendMessageW(hwndEdit, 0xB7u, 0, 0);
UpdateStatusBar(1);
}
v16 = 1;
}
else if ( !(FR.Flags & 0x20) )
{
v9 = SetCursor(hStdCursor);
v10 = hDlgFind;
if ( !hDlgFind )
v10 = hwndNP;
AlertBox(v10, szNN, szCFS, &szSearch, 0x40u);
SetCursor(v9);
}
result = v16;
}
else
{
result = 0;
}
}
else
{
result = 0;
}
return result;
}
// 1009A94: using guessed type int fReverse;
//----- (01005B41) --------------------------------------------------------
signed int __stdcall NpReCreate(DWORD hWnd)
{
LONG v1; // eax@10
struct tagRECT Rect; // [sp+Ch] [bp-38h]@7
int v4; // [sp+1Ch] [bp-28h]@19
int v5; // [sp+20h] [bp-24h]@19
int v6; // [sp+24h] [bp-20h]@19
int v7; // [sp+28h] [bp-1Ch]@19
WPARAM wParam; // [sp+2Ch] [bp-18h]@3
LPARAM lParam; // [sp+30h] [bp-14h]@7
LRESULT v10; // [sp+34h] [bp-10h]@3
DWORD v11; // [sp+38h] [bp-Ch]@1
HCURSOR hCursor; // [sp+3Ch] [bp-8h]@1
HLOCAL hMem; // [sp+40h] [bp-4h]@3
HWND hWnda; // [sp+4Ch] [bp+8h]@7
v11 = (hWnd >> 20) & 1;
hCursor = SetCursor(hWaitCursor);
if ( v11 )
{
GotoAndScrollInView(1);
SendMessageW(hwndEdit, 0xC8u, 0, 0);
}
wParam = SendMessageW(hwndEdit, 0xB8u, 0, 0) != 0;
v10 = SendMessageW(hwndEdit, 0xEu, 0, 0);
hMem = LocalAlloc(2u, 2 * v10 + 2);
if ( !hMem )
{
if ( v11 )
SendMessageW(hwndEdit, 0xC8u, 1u, 0);
SetCursor(hCursor);
return 0;
}
GetClientRect(hwndNP, &Rect);
lParam = (LPARAM)LocalLock(hMem);
SendMessageW(hwndEdit, 0xDu, v10 + 1, lParam);
hWnda = CreateWindowExW(
0x200u,
L"Edit",
&szOtherStuff,
hWnd,
0,
0,
Rect.right,
Rect.bottom,
hwndNP,
(HMENU)0xF,
hInstanceNP,
0);
if ( !hWnda )
{
SetCursor(hCursor);
if ( v11 )
SendMessageW(hwndEdit, 0xC8u, 1u, 0);
LABEL_14:
LocalUnlock(hMem);
LocalFree(hMem);
return 0;
}
v1 = GetWindowLongW(hwndEdit, -20);
SetWindowLongW(hWnda, -20, v1 | 0x200);
SendMessageW(hWnda, 0x30u, (WPARAM)hFont, 1);
if ( !SendMessageW(hWnda, 0xCu, 0, lParam) )
{
SetCursor(hCursor);
if ( v11 )
SendMessageW(hwndEdit, 0xC8u, 1u, 0);
DestroyWindow(hWnda);
goto LABEL_14;
}
LocalUnlock(hMem);
DestroyWindow(hwndEdit);
hwndEdit = hWnda;
if ( hEdit )
LocalFree(hEdit);
hEdit = hMem;
PostMessageW(hwndEdit, 0xC5u, 0, 0);
ShowWindow(hwndNP, 5);
SendMessageW(hwndEdit, 0xB9u, wParam, 0);
SetFocus(hwndEdit);
SetCursor(hCursor);
if ( *(_DWORD *)&fStatus )
{
GetClientRect(hwndNP, (LPRECT)&v4);
NPSize(v6 - v4, v7 - v5);
UpdateStatusBar(1);
ShowWindow(hwndStatus, 5);
}
return 1;
}
//----- (01005DA3) --------------------------------------------------------
BOOL __stdcall AbortProc(int a1, int a2)
{
struct tagMSG Msg; // [sp+4h] [bp-1Ch]@2
while ( !fAbort && PeekMessageW(&Msg, 0, 0, 0, 1u) )
{
if ( !hAbortDlgWnd || !IsDialogMessageW(hAbortDlgWnd, &Msg) )
{
TranslateMessage(&Msg);
DispatchMessageW(&Msg);
}
}
return fAbort == 0;
}
// 100A134: using guessed type int fAbort;
//----- (01005E0C) --------------------------------------------------------
int __stdcall GetResolutions(HDC hdc)
{
int result; // eax@1
xPrintRes = GetDeviceCaps(hdc, 8);
yPrintRes = GetDeviceCaps(hdc, 10);
yPixInch = GetDeviceCaps(hdc, 90);
xPhysRes = GetDeviceCaps(hdc, 110);
yPhysRes = GetDeviceCaps(hdc, 111);
xPhysOff = GetDeviceCaps(hdc, 112);
result = GetDeviceCaps(hdc, 113);
yPhysOff = result;
return result;
}
// 1009AD0: using guessed type int yPhysOff;
// 1009AD4: using guessed type int xPhysOff;
// 1009AE0: using guessed type int yPixInch;
// 1009AE4: using guessed type int yPrintRes;
// 1009AE8: using guessed type int xPrintRes;
//----- (01005E6D) --------------------------------------------------------
HDC __cdecl GetPrinterDCviaDialog()
{
HGLOBAL v0; // edx@1
HDC v1; // edi@3
struct tagPDEXW pPD; // [sp+Ch] [bp-54h]@3
v0 = g_PageSetupDlg.hDevNames;
if ( !g_PageSetupDlg.hDevNames )
{
LOWORD(g_PageSetupDlg.Flags) |= 0x480u;
PageSetupDlgW(&g_PageSetupDlg);
g_PageSetupDlg.Flags &= 0xFFFFFB7F;
v0 = g_PageSetupDlg.hDevNames;
}
memset(&pPD, 0, sizeof(pPD));
pPD.hwndOwner = hwndNP;
v1 = (HDC)-1;
pPD.lStructSize = 84;
pPD.nStartPage = -1;
pPD.Flags = 8651020;
if ( g_PageSetupDlg.hDevMode )
pPD.hDevMode = g_PageSetupDlg.hDevMode;
if ( v0 )
pPD.hDevNames = v0;
if ( !PrintDlgExW(&pPD) )
{
if ( pPD.dwResultAction == 1 )
{
v1 = pPD.hDC;
}
else if ( pPD.dwResultAction != 2 )
{
return v1;
}
if ( !g_PageSetupDlg.hDevMode )
{
LOWORD(g_PageSetupDlg.Flags) |= 0x480u;
PageSetupDlgW(&g_PageSetupDlg);
g_PageSetupDlg.Flags &= 0xFFFFFB7F;
}
g_PageSetupDlg.hDevMode = pPD.hDevMode;
g_PageSetupDlg.hDevNames = pPD.hDevNames;
}
return v1;
}
//----- (01005F3C) --------------------------------------------------------
BOOL __cdecl DestroyAbortWnd()
{
BOOL result; // eax@1
EnableWindow(hwndNP, 1);
result = DestroyWindow(hAbortDlgWnd);
hAbortDlgWnd = 0;
return result;
}
//----- (01005F63) --------------------------------------------------------
signed int __stdcall PageSetupHookProc(HWND hDlg, int a2, HWND hWndMain, int a4)
{
int v4; // edi@5
const WCHAR *v5; // ebx@5
HWND v7; // esi@8
int v8; // eax@10
int v9; // eax@14
int v10; // edi@17
WCHAR *v11; // esi@17
struct tagPOINT Point; // [sp+8h] [bp-8h]@9
if ( a2 == 2 )
{
v10 = 30;
v11 = (WCHAR *)&chPageTextTemp;
do
{
GetDlgItemTextW(hDlg, v10, v11, 40);
v11 += 40;
++v10;
}
while ( (signed int)v11 <= (signed int)&word_100A390 );
return 0;
}
if ( a2 == 83 )
{
v9 = GetDlgCtrlID(*(HWND *)(a4 + 12));
if ( v9 < 30 || v9 > 33 )
return 0;
WinHelpW(*(HWND *)(a4 + 12), szHelpFile, 0xCu, (ULONG_PTR)s_PageSetupHelpIDs);
return 1;
}
if ( a2 == 123 )
{
v7 = hWndMain;
if ( hDlg == hWndMain )
{
GetCursorPos(&Point);
ScreenToClient(hDlg, &Point);
v7 = ChildWindowFromPoint(hDlg, Point);
}
v8 = GetDlgCtrlID(v7);
if ( v8 < 30 || v8 > 33 )
return 0;
WinHelpW(v7, szHelpFile, 0xAu, (ULONG_PTR)s_PageSetupHelpIDs);
return 1;
}
if ( a2 != 272 )
return 0;
v4 = 30;
v5 = &chPageText;
do
{
SendDlgItemMessageW(hDlg, v4, 0xC5u, 0x27u, 0);
SetDlgItemTextW(hDlg, v4, v5);
v5 += 40;
++v4;
}
while ( (signed int)v5 <= (signed int)&String1 );
SendDlgItemMessageW(hDlg, 30, 0xB1u, 0, 2555904);
return 1;
}
因字符限制发部分结果。。。。
相关文章推荐
- 国庆礼物最强反编译工具 ida pro 7.0 破解补丁+7.0sdk all+ sdk_utils 国内某团购群最新泄露的的版本 x86 arm x64 f5插件为最新版本
- Windows Server 2003 和 Windows XP x86 上的最新漏洞补丁
- Notepad++ 插件之 TextFX (安装及作用)
- C++ 整数与字节相互转换(X86)
- 使用notepad++ 将QQ号码批量转换成QQ邮箱的方法
- Hibernate(HQL/SQL)查询结果(Object)转换为实体类型
- 傲游新浪微博插件发布 支持自动备份和文字转换为图片功能
- Eclipse 安装最新SVN插件
- Mybatis 查询结果 类型转换异常错误 ResultSetWrapper 转换类型错误 ,
- 编写和执行C#代码的插件:CS-Script for Notepad++
- ubuntu 16.04 chrome flash player 插件更新(adobe flash player 不是最新版本)
- notepad++ 插件大全
- notepad++ 各类插件学习记录
- [完整版]Windows XP SP3 最新Beta版改进概览
- 用Notepad++中的NppExec插件编译运行Java小程序
- Eclipse 安装最新SVN插件
- Notepad++ 插件之 TextFX (安装及作用)
- Notepad++ 插件之 TextFX (安装及作用)
- 前端开发神器:notepad++插件zen-coding