windows xp下的NOTEPAD用最新x86插件转换的结果

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;
}

因字符限制发部分结果。。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值