diff --git a/MASM x64/Splash_x64.vcxproj b/MASM x64/Splash_x64.vcxproj
index 689c737..f4a8342 100644
--- a/MASM x64/Splash_x64.vcxproj
+++ b/MASM x64/Splash_x64.vcxproj
@@ -48,7 +48,8 @@
false
- true
+
+
diff --git a/MASM x86/MASM x86 splash.lst b/MASM x86/MASM x86 splash.lst
index 6a2b998..3b5481e 100644
--- a/MASM x86/MASM x86 splash.lst
+++ b/MASM x86/MASM x86 splash.lst
@@ -1,4 +1,4 @@
-Microsoft (R) Macro Assembler Version 14.29.30136.0 10/19/21 14:15:41
+Microsoft (R) Macro Assembler Version 14.31.31104.0 02/26/22 12:20:53
Main.asm Page 1 - 1
@@ -40335,14 +40335,14 @@ Main.asm Page 1 - 1
C
000000C8 C STD_ALERT struct
00000000 00000000 C alrt_timestamp dd ?
- C ;alrt_eventname WCHAR [EVLEN + 1] dup(?)
00000004 00000011 [ C alrt_eventname WCHAR EVLEN+1 dup(?)
0000
]
- C ;alrt_servicename WCHAR [SNLEN + 1] dup(?)
+ C ;alrt_eventname WCHAR [17] dup(?)
00000026 00000051 [ C alrt_servicename WCHAR SNLEN+1 dup(?)
0000
]
+ C ;alrt_servicename WCHAR [81] dup(?)
C STD_ALERT ends
C
00000008 C ADMIN_OTHER_INFO struct
@@ -55702,7 +55702,6 @@ Main.asm Page 1 - 1
C htodw PROTO :DWORD ; return value in eax
C dwtoa PROTO :DWORD,:DWORD ; value - buffer
C dw2a PROTO :DWORD,:DWORD
- C dw2ah PROTO:DWORD,:DWORD
C dw2hex PROTO :DWORD,:DWORD
C
C ustr2dw PROTO :DWORD
@@ -71096,10 +71095,10 @@ Main.asm Page 1 - 1
00000000 C CFile_initdata LABEL BYTE
00000000 0000002D R C DWORD OFFSET CFile_Destructor
00000004 00000059 R C DWORD OFFSET CFile_OpenFile
- 00000008 0000014E R C DWORD OFFSET CFile_CloseFile
+ 00000008 00000156 R C DWORD OFFSET CFile_CloseFile
0000000C 0000012D R C DWORD OFFSET CFile_Dispose
- 00000010 00000158 R C DWORD OFFSET CFile_ConvertToLine
- 00000014 00000183 R C DWORD OFFSET CFile_GetLine
+ 00000010 00000160 R C DWORD OFFSET CFile_ConvertToLine
+ 00000014 0000018B R C DWORD OFFSET CFile_GetLine
00000018 0000 C WORD 0
0000001A 00000000 C DWORD 0, 0, 0, 0
00000000
@@ -71177,24 +71176,20 @@ Main.asm Page 1 - 1
00000059 C CFile_OpenFile proc uses eax ebx edi lpTHIS:DWORD, lpszFileName:DWORD
C ;
C ; Opens a file, creates a handle and creates a w_char pointer
- C ; Receives: EAX, EBX, ECX, the three integers. May be
- C ; signed or unsigned.
- C ; Returns: EAX = sum, and the status flags (Carry, ; Overflow, etc.) are changed.
+ C ; Receives:
+ C ; Returns:
C ; Requires: nothing
+ C ; https://stackoverflow.com/questions/56506869/how-to-initialize-a-local-struct-in-masm-assembly
C ;---------------------------------------------------------
- C ; https://stackoverflow.com/questions/56506869/how-to-initialize-a-local-struct-in-masm-assembly
- C ;LOCAL fileSize: LARGE_INTEGER <>
- C ;LOCAL hMemory: DWORD
- C ;LOCAL pMemory: DWORD
- C ;LOCAL pMemoryW: DWORD
- C
- C ;push ebp ; save base pointer
- C ;mov ebp,esp ; base of stack frame
- 0000005F 83 EC 08 C sub esp,8 ; save space for 2 DWORD locals
- C
- 00000062 8B 7D 08 C mov edi, [ebp+8] ; get the parameter passed on the stack to the function
- 00000065 8B 7D 08 C mov edi, lpTHIS ; get the parameter passed on the stack to the function
+ C LOCAL hHeap: DWORD
+ C LOCAL lpMem: DWORD
+ C
+ 00000062 8B 7D 08 C mov edi, [ebp+8] ; get the parameter lpszFileName passed on the stack to the function
+ 00000065 8B 7D 08 C mov edi, lpTHIS ; get the parameter lpTHIS passed on the stack to the function
C ASSUME edi:PTR CFile
+ C
+ C invoke GetProcessHeap
+ 0000006D 89 45 FC C mov hHeap, eax
C
C invoke CreateFile, lpszFileName,\
C GENERIC_READ or GENERIC_WRITE ,\
@@ -71202,19 +71197,19 @@ Main.asm Page 1 - 1
C NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,\
C NULL
C ;mov edx, eax
- 0000007F 89 47 1A C mov [edi].handle, eax
+ 00000087 89 47 1A C mov [edi].handle, eax
C
C invoke GetFileSizeEx, [edi].handle, ADDR fileSize2
- 0000008F A1 0000002A R C mov eax, fileSize2.LowPart
- 00000094 40 C inc eax ; One bit for the NULL terminated
- 00000095 8B D8 C mov ebx,eax
- 00000097 89 5F 26 C mov [edi].bytesRead, ebx ; Save the size in the in-memory struct
- C
- C invoke GlobalAlloc, GMEM_MOVEABLE or GMEM_ZEROINIT, eax
- 000000A2 89 45 FC C mov DWORD PTR [ebp-4], eax
- C invoke GlobalLock, eax
- 000000AB 89 45 F8 C mov DWORD PTR [ebp-8], eax
- C invoke ReadFile, [edi].handle, DWORD PTR [ebp-8], fileSize2.LowPart, ADDR SizeReadWrite2, NULL
+ 00000097 A1 0000002A R C mov eax, fileSize2.LowPart
+ 0000009C 40 C inc eax ; One bit for the NULL terminated
+ 0000009D 8B D8 C mov ebx,eax
+ 0000009F 89 5F 26 C mov [edi].bytesRead, ebx ; Save the size in the in-memory struct
+ C
+ C ; Allocates memory space for the File
+ C invoke HeapAlloc, hHeap, HEAP_ZERO_MEMORY, ebx
+ 000000AD 89 45 F8 C mov lpMem, eax
+ C
+ C invoke ReadFile, [edi].handle, eax, fileSize2.LowPart, ADDR SizeReadWrite2, NULL
C ;mov DWORD PTR [ebp-8], eax
C invoke CloseHandle, [edi].handle
C .IF eax
@@ -71222,12 +71217,12 @@ Main.asm Page 1 - 1
00000000
C .ENDIF
C
+ C ; Allocates memory space for the converstion to Unicode
000000D9 8B C3 C mov eax, ebx
000000DB D1 E0 C shl eax, 1 ;Multiply by 2 in order to convert from char to wchar
- C invoke GlobalAlloc, GMEM_ZEROINIT, eax
- C ;mov pMemoryW,eax
- 000000E5 89 47 1E C mov [edi].ptrHeapText, eax
- 000000E8 89 47 22 C mov [edi].ptrLine, eax
+ C invoke HeapAlloc, hHeap, HEAP_ZERO_MEMORY , eax
+ 000000E8 89 47 1E C mov [edi].ptrHeapText, eax
+ 000000EB 89 47 22 C mov [edi].ptrLine, eax
C
C ; Convert byte string to word string
C invoke MultiByteToWideChar, CP_UTF8, 0, DWORD PTR [ebp-8], -1, [edi].ptrHeapText, 0
@@ -71237,8 +71232,7 @@ Main.asm Page 1 - 1
C ;print [edi].ptrHeapText
C ;invoke MessageBox, NULL, [edi].ptrHeapText, NULL, MB_OK
C
- C invoke GlobalUnlock,DWORD PTR [ebp-8]
- C invoke GlobalFree,DWORD PTR [ebp-4]
+ C invoke HeapFree, hHeap, NULL, lpMem
C
C assume edi:nothing
C
@@ -71262,16 +71256,18 @@ Main.asm Page 1 - 1
00000131 8B 7D 08 C mov edi, lpTHIS
C ASSUME edi: PTR CFile
C .IF ( [edi].ptrHeapText != 0)
- C invoke GlobalFree, [edi].ptrHeapText
- 00000142 C7 47 1E C mov [edi].ptrHeapText, 0
+ C invoke GetProcessHeap
+ C invoke HeapFree, eax, NULL, [edi].ptrHeapText
+ C ;invoke GlobalFree, [edi].ptrHeapText
+ 0000014A C7 47 1E C mov [edi].ptrHeapText, 0
00000000
C .ENDIF
C ASSUME edi: nothing
C ret
- 0000014E C CFile_Dispose endp
+ 00000156 C CFile_Dispose endp
C
C ;--------------------------------------------------------
- 0000014E C CFile_CloseFile proc lpTHIS:DWORD
+ 00000156 C CFile_CloseFile proc lpTHIS:DWORD
C ;
C ; Opens a file, creates a handle and creates a w_char pointer
C ; Receives: EAX, EBX, ECX, the three integers. May be
@@ -71279,15 +71275,15 @@ Main.asm Page 1 - 1
C ; Returns: EAX = sum, and the status flags (Carry, ; Overflow, etc.) are changed.
C ; Requires: nothing
C ;---------------------------------------------------------
- 00000151 8B 7D 08 C mov edi, lpTHIS
+ 00000159 8B 7D 08 C mov edi, lpTHIS
C ASSUME edi: PTR CFile
C ASSUME edi: nothing
C ret
- 00000158 C CFile_CloseFile endp
+ 00000160 C CFile_CloseFile endp
C
C
C ;--------------------------------------------------------
- 00000158 C CFile_ConvertToLine proc uses ax edi esi lpTHIS:DWORD
+ 00000160 C CFile_ConvertToLine proc uses ax edi esi lpTHIS:DWORD
C ;
C ; Opens a file, creates a handle and creates a w_char pointer
C ; Receives: EAX, EBX, ECX, the three integers. May be
@@ -71295,19 +71291,19 @@ Main.asm Page 1 - 1
C ; Returns: EAX = sum, and the status flags (Carry, ; Overflow, etc.) are changed.
C ; Requires: nothing
C ;---------------------------------------------------------
- 0000015F 8B 7D 08 C mov edi, lpTHIS ; get the parameter passed on the stack to the function
+ 00000167 8B 7D 08 C mov edi, lpTHIS ; get the parameter passed on the stack to the function
C ASSUME edi:PTR CFile
C
- 00000162 8B 4F 26 C mov ecx, [edi].bytesRead
- 00000165 8B 77 1E C mov esi, [edi].ptrHeapText
+ 0000016A 8B 4F 26 C mov ecx, [edi].bytesRead
+ 0000016D 8B 77 1E C mov esi, [edi].ptrHeapText
C ;shr ecx, 1
C
- 00000168 C loop_ConvertToLine:
- 00000168 66| 8B 06 C mov ax, WORD PTR [esi]
+ 00000170 C loop_ConvertToLine:
+ 00000170 66| 8B 06 C mov ax, WORD PTR [esi]
C ;movzx eax, al
C ;push ecx
C .IF (ax==13)
- 00000171 66| C7 06 0000 C mov WORD PTR [esi], 0
+ 00000179 66| C7 06 0000 C mov WORD PTR [esi], 0
C .ENDIF
C ;.IF (ax==10)
C ; mov WORD PTR [esi], 0
@@ -71316,8 +71312,8 @@ Main.asm Page 1 - 1
C ;print eax
C ;print chr$(eax)
C ;pop ecx
- 00000176 83 C6 02 C add esi, 2
- 00000179 E2 ED C loop loop_ConvertToLine
+ 0000017E 83 C6 02 C add esi, 2
+ 00000181 E2 ED C loop loop_ConvertToLine
C
C ;print [edi].ptrHeapText, 13, 10
C ;inkey
@@ -71325,59 +71321,59 @@ Main.asm Page 1 - 1
C ASSUME edi: nothing
C
C ret
- 00000183 C CFile_ConvertToLine endp
+ 0000018B C CFile_ConvertToLine endp
C
- 00000183 C CFile_GetLine proc uses ecx edi esi lpTHIS:DWORD
- 00000189 8B 7D 08 C mov edi, lpTHIS ; get the parameter passed on the stack to the function
+ 0000018B C CFile_GetLine proc uses ecx edi esi lpTHIS:DWORD
+ 00000191 8B 7D 08 C mov edi, lpTHIS ; get the parameter passed on the stack to the function
C ASSUME edi:PTR CFile
C
- 0000018C 8B 77 22 C mov esi, [edi].ptrLine
+ 00000194 8B 77 22 C mov esi, [edi].ptrLine
C ;mov ecx, [edi].ptrHeapText
C ;sub ecx, esi
C ;shr ecx, 1
C ;add ecx, [edi].bytesRead
C
- 0000018F 8B 4F 26 C mov ecx, [edi].bytesRead
- 00000192 D1 E1 C shl ecx, 1 ;multiply by 2 since we are using Words for each character
- 00000194 03 4F 1E C add ecx, [edi].ptrHeapText
- 00000197 2B CE C sub ecx, esi
- 00000199 D1 E9 C shr ecx, 1 ;divide by 2 to get the number of characters
+ 00000197 8B 4F 26 C mov ecx, [edi].bytesRead
+ 0000019A D1 E1 C shl ecx, 1 ;multiply by 2 since we are using Words for each character
+ 0000019C 03 4F 1E C add ecx, [edi].ptrHeapText
+ 0000019F 2B CE C sub ecx, esi
+ 000001A1 D1 E9 C shr ecx, 1 ;divide by 2 to get the number of characters
C
- 0000019B 33 C0 C xor eax, eax
+ 000001A3 33 C0 C xor eax, eax
C
C ; If we are at the beginning of the text, just return the address
C .IF esi == [edi].ptrHeapText
- 000001A2 8B C6 C mov eax, esi
- 000001A4 83 C6 02 C add esi, 2
- 000001A7 EB 1E C jmp exit_GetLine
+ 000001AA 8B C6 C mov eax, esi
+ 000001AC 83 C6 02 C add esi, 2
+ 000001AF EB 1E C jmp exit_GetLine
C .ENDIF
C
- 000001A9 C iterate:
- 000001A9 66| 8B 06 C mov ax, WORD PTR [esi]
+ 000001B1 C iterate:
+ 000001B1 66| 8B 06 C mov ax, WORD PTR [esi]
C .IF (eax==0)
C .IF (ecx==1) ;If we are at the end, return NULL
- 000001B5 33 C0 C xor eax, eax
+ 000001BD 33 C0 C xor eax, eax
C .ELSE
- 000001B9 83 C6 04 C add esi, 4 ;Move 2+2 (Chr 13 + chr 10)
- 000001BC 8B C6 C mov eax, esi
+ 000001C1 83 C6 04 C add esi, 4 ;Move 2+2 (Chr 13 + chr 10)
+ 000001C4 8B C6 C mov eax, esi
C .ENDIF
- 000001BE EB 07 C jmp exit_GetLine
+ 000001C6 EB 07 C jmp exit_GetLine
C .ELSE
- 000001C2 83 C6 02 C add esi, 2 ;Move to the next character
+ 000001CA 83 C6 02 C add esi, 2 ;Move to the next character
C .ENDIF
- 000001C5 E2 E2 C loop iterate
+ 000001CD E2 E2 C loop iterate
C
- 000001C7 C exit_GetLine:
+ 000001CF C exit_GetLine:
C .IF ecx== 1 ;If we are at the end, just reset the Line pointer to the beginning of the text
- 000001CC 8B 4F 1E C mov ecx, [edi].ptrHeapText
- 000001CF 89 4F 22 C mov [edi].ptrLine, ecx
+ 000001D4 8B 4F 1E C mov ecx, [edi].ptrHeapText
+ 000001D7 89 4F 22 C mov [edi].ptrLine, ecx
C .ELSE
- 000001D4 89 77 22 C mov [edi].ptrLine, esi
+ 000001DC 89 77 22 C mov [edi].ptrLine, esi
C .ENDIF
C
C ASSUME edi: nothing
C ret
- 000001DE C CFile_GetLine endp
+ 000001E6 C CFile_GetLine endp
C
C ENDIF
C
@@ -71415,12 +71411,12 @@ Main.asm Page 1 - 1
00000032 C .data
C
00000032 C CSplashScreen_initdata LABEL BYTE
- 00000032 00000238 R C DWORD OFFSET CSplashScreen_Destructor
- 00000036 00000244 R C DWORD OFFSET CSplashScreen_Show
- 0000003A 00000368 R C DWORD OFFSET CSplashScreen_CreateBitmapImage
- 0000003E 00000482 R C DWORD OFFSET CSplashScreen_RegisterWindowClass
- 00000042 000004BE R C DWORD OFFSET CSplashScreen_UnregisterWindowClass
- 00000046 00000368 R C DWORD OFFSET CSplashScreen_CreateBitmapImage
+ 00000032 00000240 R C DWORD OFFSET CSplashScreen_Destructor
+ 00000036 0000024C R C DWORD OFFSET CSplashScreen_Show
+ 0000003A 00000370 R C DWORD OFFSET CSplashScreen_CreateBitmapImage
+ 0000003E 0000048A R C DWORD OFFSET CSplashScreen_RegisterWindowClass
+ 00000042 000004C6 R C DWORD OFFSET CSplashScreen_UnregisterWindowClass
+ 00000046 00000370 R C DWORD OFFSET CSplashScreen_CreateBitmapImage
0000004A 00000000 C DWORD 0, 0, 0, 0, 0, 0
00000000
00000000
@@ -71529,34 +71525,34 @@ Main.asm Page 1 - 1
= 00000104 C MAXPATH equ 260
C
C
- 000001DE C .code
+ 000001E6 C .code
C
C ; --=====================================================================================--
C ; CLASS CONSTRUCTOR
C ; --=====================================================================================--
- 000001DE C CSplashScreen_Init PROC uses eax ecx esi edi lpTHIS:DWORD, hInstance:DWORD, strImage:DWORD, strApp:DWORD, intFadeOutTime:DWORD
- 000001E5 FC C cld
- 000001E6 BE 00000032 R C mov esi, OFFSET CSplashScreen_initdata
- 000001EB 8B 7D 08 C mov edi, lpTHIS
- 000001EE B9 00000030 C mov ecx, CSplashScreen_initend
- 000001F3 C1 E9 02 C shr ecx, 2
- 000001F6 F3/ A5 C rep movsd
- 000001F8 B9 00000030 C mov ecx, CSplashScreen_initend
- 000001FD 83 E1 03 C and ecx, 3
- 00000200 F3/ A4 C rep movsb
+ 000001E6 C CSplashScreen_Init PROC uses eax ecx esi edi lpTHIS:DWORD, hInstance:DWORD, strImage:DWORD, strApp:DWORD, intFadeOutTime:DWORD
+ 000001ED FC C cld
+ 000001EE BE 00000032 R C mov esi, OFFSET CSplashScreen_initdata
+ 000001F3 8B 7D 08 C mov edi, lpTHIS
+ 000001F6 B9 00000030 C mov ecx, CSplashScreen_initend
+ 000001FB C1 E9 02 C shr ecx, 2
+ 000001FE F3/ A5 C rep movsd
+ 00000200 B9 00000030 C mov ecx, CSplashScreen_initend
+ 00000205 83 E1 03 C and ecx, 3
+ 00000208 F3/ A4 C rep movsb
C
C ; Personalized initialization code
- 00000202 8B 7D 08 C mov edi, lpTHIS
+ 0000020A 8B 7D 08 C mov edi, lpTHIS
C assume edi:PTR CSplashScreen
- 00000205 8B 45 0C C mov eax, hInstance
- 00000208 89 47 14 C mov [edi].lpModuleName, eax
- 0000020B 8B 45 10 C mov eax, strImage
- 0000020E 89 47 18 C mov [edi].lpszImagePath, eax
- 00000211 8B 45 14 C mov eax, strApp
- 00000214 89 47 1C C mov [edi].lpszAppPath, eax
- 00000217 8B 45 18 C mov eax, intFadeOutTime
- 0000021A 89 47 20 C mov [edi].intFadeOutTime, eax
- 0000021D C7 47 24 C mov [edi].intFadeOutEnd, 0
+ 0000020D 8B 45 0C C mov eax, hInstance
+ 00000210 89 47 14 C mov [edi].lpModuleName, eax
+ 00000213 8B 45 10 C mov eax, strImage
+ 00000216 89 47 18 C mov [edi].lpszImagePath, eax
+ 00000219 8B 45 14 C mov eax, strApp
+ 0000021C 89 47 1C C mov [edi].lpszAppPath, eax
+ 0000021F 8B 45 18 C mov eax, intFadeOutTime
+ 00000222 89 47 20 C mov [edi].intFadeOutTime, eax
+ 00000225 C7 47 24 C mov [edi].intFadeOutEnd, 0
00000000
C
C ;invoke MessageBox, NULL, [edi].lpModuleName, NULL, MB_OK
@@ -71565,29 +71561,29 @@ Main.asm Page 1 - 1
C ;invoke MessageBox, NULL, [edi].intFadeOutTime, NULL, MB_OK
C
C ;Initialize blend member with zeroes
- 00000224 B9 00000004 C mov ecx, sizeof BLENDFUNCTION
- 00000229 33 C0 C xor eax, eax
- 0000022B 8D 7F 28 C lea edi, [edi].blend
- 0000022E F3/ AA C rep stosb
+ 0000022C B9 00000004 C mov ecx, sizeof BLENDFUNCTION
+ 00000231 33 C0 C xor eax, eax
+ 00000233 8D 7F 28 C lea edi, [edi].blend
+ 00000236 F3/ AA C rep stosb
C assume edi:nothing
C
C ret
- 00000238 C CSplashScreen_Init ENDP
+ 00000240 C CSplashScreen_Init ENDP
C
C ; --=====================================================================================--
C ; destructor METHOD BEHAVIOR
C ; --=====================================================================================--
- 00000238 C CSplashScreen_Destructor PROC uses edi lpTHIS:DWORD
- 0000023C 8B 7D 08 C mov edi, lpTHIS
+ 00000240 C CSplashScreen_Destructor PROC uses edi lpTHIS:DWORD
+ 00000244 8B 7D 08 C mov edi, lpTHIS
C assume edi:PTR CSplashScreen
C
C assume edi:nothing
C ret
- 00000244 C CSplashScreen_Destructor ENDP
+ 0000024C C CSplashScreen_Destructor ENDP
C
C
C
- 00000244 C CSplashScreen_Show PROC uses edi lpTHIS:DWORD
+ 0000024C C CSplashScreen_Show PROC uses edi lpTHIS:DWORD
C LOCAL hCloseSplashEvent :DWORD
C LOCAL hCloseSplashWithoutFadeEvent :DWORD
C LOCAL hBitmap :DWORD
@@ -71595,13 +71591,13 @@ Main.asm Page 1 - 1
C LOCAL hSplashWnd :HANDLE
C LOCAL hdcScreen :HDC
C
- 0000024B 8B 7D 08 C mov edi, lpTHIS
+ 00000253 8B 7D 08 C mov edi, lpTHIS
C assume edi:PTR CSplashScreen
C
C ; Open the COM library
C invoke CoInitializeEx, 0, COINIT_APARTMENTTHREADED or COINIT_DISABLE_OLE1DDE
C .IF (eax != S_OK) ; Operation successful 0x00000000h
- 0000025B E9 000000C6 C jmp exit_Show ; Exit if the COM library could not be opened
+ 00000263 E9 000000C6 C jmp exit_Show ; Exit if the COM library could not be opened
C .ENDIF
C
C ; Create the named close splash screen event, making sure we're the first process to create it
@@ -71609,72 +71605,72 @@ Main.asm Page 1 - 1
C
C ; Create the event CloseSplashScreenEvent
C invoke CreateEvent, NULL, TRUE, FALSE, ADDR strEventName_1
- 00000277 89 45 FC C mov hCloseSplashEvent, eax
+ 0000027F 89 45 FC C mov hCloseSplashEvent, eax
C
C invoke GetLastError
C .IF (eax == ERROR_ALREADY_EXISTS) ; ERROR_ALREADY_EXISTS = 183
C invoke ExitProcess, 0
- 0000028D E9 00000094 C jmp exit_Show
+ 00000295 E9 00000094 C jmp exit_Show
C .ENDIF
C
C ; Create the event CloseSplashScreenWithoutFadeEvent
C invoke CreateEvent, NULL, TRUE, FALSE, ADDR strEventName_2
- 000002A2 89 45 F8 C mov hCloseSplashWithoutFadeEvent, eax
+ 000002AA 89 45 F8 C mov hCloseSplashWithoutFadeEvent, eax
C
C invoke GetLastError
C .IF (eax == ERROR_ALREADY_EXISTS) ; ERROR_ALREADY_EXISTS = 183
C invoke ExitProcess, 0
- 000002B8 EB 6C C jmp exit_Show
+ 000002C0 EB 6C C jmp exit_Show
C .ENDIF
C
C ; Create the bitmap (from file or default) that will be shown in the splash window
- 000002BA 57 C push edi
- 000002BB E8 000000A8 C call CSplashScreen_CreateBitmapImage
- 000002C0 89 45 F4 C mov hBitmap, eax
+ 000002C2 57 C push edi
+ 000002C3 E8 000000A8 C call CSplashScreen_CreateBitmapImage
+ 000002C8 89 45 F4 C mov hBitmap, eax
C
- 000002C3 57 C push edi
- 000002C4 E8 000001B9 C call CSplashScreen_RegisterWindowClass
+ 000002CB 57 C push edi
+ 000002CC E8 000001B9 C call CSplashScreen_RegisterWindowClass
C
C .IF (hBitmap!=NULL)
- 000002CF 57 C push edi
- 000002D0 E8 00000202 C call CSplashScreen_CreateSplashWindow
- 000002D5 89 45 E4 C mov hSplashWnd, eax
- 000002D8 FF 75 F4 C push hBitmap
- 000002DB 50 C push eax
- 000002DC 57 C push edi
- 000002DD E8 00000228 C call CSplashScreen_SetSplashImage
+ 000002D7 57 C push edi
+ 000002D8 E8 00000202 C call CSplashScreen_CreateSplashWindow
+ 000002DD 89 45 E4 C mov hSplashWnd, eax
+ 000002E0 FF 75 F4 C push hBitmap
+ 000002E3 50 C push eax
+ 000002E4 57 C push edi
+ 000002E5 E8 00000228 C call CSplashScreen_SetSplashImage
C .ENDIF
C
C .IF (eax!=0) ;if file exists
C ; Launch the application
- 000002E6 57 C push edi
- 000002E7 E8 00000331 C call CSplashScreen_LaunchApplication ; Returns the handle of the launched application in eax
- 000002EC 8B D8 C mov ebx, eax
+ 000002EE 57 C push edi
+ 000002EF E8 00000331 C call CSplashScreen_LaunchApplication ; Returns the handle of the launched application in eax
+ 000002F4 8B D8 C mov ebx, eax
C invoke GetProcessId, eax
C invoke AllowSetForegroundWindow, eax
C
C ; Graphic display operations
C invoke GetDC, NULL
- 00000301 89 45 E0 C mov hdcScreen, eax
- C
- 00000304 8D 45 E8 C lea eax, aHandles
- 00000307 89 18 C mov DWORD PTR [eax + 0], ebx
- 00000309 8B 5D FC C mov ebx, hCloseSplashEvent
- 0000030C 89 58 04 C mov DWORD PTR [eax + 4], ebx
- 0000030F 8B 5D F8 C mov ebx, hCloseSplashWithoutFadeEvent
- 00000312 89 58 08 C mov DWORD PTR [eax + 8], ebx
+ 00000309 89 45 E0 C mov hdcScreen, eax
+ C
+ 0000030C 8D 45 E8 C lea eax, aHandles
+ 0000030F 89 18 C mov DWORD PTR [eax + 0], ebx
+ 00000311 8B 5D FC C mov ebx, hCloseSplashEvent
+ 00000314 89 58 04 C mov DWORD PTR [eax + 4], ebx
+ 00000317 8B 5D F8 C mov ebx, hCloseSplashWithoutFadeEvent
+ 0000031A 89 58 08 C mov DWORD PTR [eax + 8], ebx
C
- 00000315 FF 75 E0 C push hdcScreen
- 00000318 6A FF C push INFINITE
- 0000031A 50 C push eax
- 0000031B 6A 03 C push 3
- 0000031D FF 75 E4 C push hSplashWnd
- 00000320 57 C push edi
- 00000321 E8 000003B7 C call CSplashScreen_PumpMsgWaitForMultipleObjects ; lpTHIS:DWORD, hwndSplash:HWND, nCount:DWORD, pHandles:LPHANDLE, dwMilliseconds:DWORD
+ 0000031D FF 75 E0 C push hdcScreen
+ 00000320 6A FF C push INFINITE
+ 00000322 50 C push eax
+ 00000323 6A 03 C push 3
+ 00000325 FF 75 E4 C push hSplashWnd
+ 00000328 57 C push edi
+ 00000329 E8 000003B7 C call CSplashScreen_PumpMsgWaitForMultipleObjects ; lpTHIS:DWORD, hwndSplash:HWND, nCount:DWORD, pHandles:LPHANDLE, dwMilliseconds:DWORD
C
C .ENDIF
C
- 00000326 C exit_Show:
+ 0000032E C exit_Show:
C
C invoke ReleaseDC, NULL, hdcScreen
C
@@ -71690,18 +71686,18 @@ Main.asm Page 1 - 1
C
C ; Destroy the window and unregister the class
C invoke DestroyWindow, hSplashWnd
- 00000358 57 C push edi
- 00000359 E8 00000160 C call CSplashScreen_UnregisterWindowClass
+ 00000360 57 C push edi
+ 00000361 E8 00000160 C call CSplashScreen_UnregisterWindowClass
C
C ; Close the COM library
C invoke CoUninitialize
C
C assume edi:nothing
C ret
- 00000368 C CSplashScreen_Show ENDP
+ 00000370 C CSplashScreen_Show ENDP
C
C
- 00000368 C CSplashScreen_CreateBitmapImage PROC uses edi lpTHIS:DWORD
+ 00000370 C CSplashScreen_CreateBitmapImage PROC uses edi lpTHIS:DWORD
C ;LOCAL hGdiImage :DWORD
C ;LOCAL wbuffer :DWORD
C LOCAL hBitmap :DWORD
@@ -71712,45 +71708,45 @@ Main.asm Page 1 - 1
C LOCAL lpImage :DWORD
C
C ;mov hGdiImage, 0
- 0000036F C7 45 FC C mov hBitmap, 0
+ 00000377 C7 45 FC C mov hBitmap, 0
00000000
- 00000376 C7 45 E0 C mov GpBitmap, 0
+ 0000037E C7 45 E0 C mov GpBitmap, 0
00000000
- 0000037D C7 45 DC C mov GpGraphics, 0
+ 00000385 C7 45 DC C mov GpGraphics, 0
00000000
- 00000384 C7 45 D8 C mov GpSolidFill, 0
+ 0000038C C7 45 D8 C mov GpSolidFill, 0
00000000
C
- 0000038B 8B 7D 08 C mov edi, lpTHIS
+ 00000393 8B 7D 08 C mov edi, lpTHIS
C assume edi:PTR CSplashScreen
C
- 0000038E C7 05 00000066 R C mov gdipSI.GdiplusVersion, 1
+ 00000396 C7 05 00000066 R C mov gdipSI.GdiplusVersion, 1
00000001
- 00000398 C7 05 0000006E R C mov gdipSI.SuppressBackgroundThread, 0
+ 000003A0 C7 05 0000006E R C mov gdipSI.SuppressBackgroundThread, 0
00000000
C invoke GdiplusStartup, ADDR gdiToken, ADDR gdipSI, NULL
C
C ; If GDI could not be started, then exit
C .IF gdiToken == 0
- 000003BC E9 000000AF C jmp exit_CreateBitmapImage
+ 000003C4 E9 000000AF C jmp exit_CreateBitmapImage
C .ENDIF
C
C ;invoke GdipCreateBitmapFromFile, ADDR ImagePath, ADDR hGdiImage
C invoke GdipCreateBitmapFromFile, [edi].lpszImagePath, ADDR GpBitmap
C .IF (GpBitmap == NULL)
- 000003D3 EB 23 C jmp exit_DefaultBitmap
+ 000003DB EB 23 C jmp exit_DefaultBitmap
C .ENDIF
C invoke GdipCreateHBITMAPFromBitmap, GpBitmap, ADDR hBitmap, m_SplashBackgroundColor
C .IF (hBitmap == NULL)
- 000003EC EB 0A C jmp exit_DefaultBitmap
+ 000003F4 EB 0A C jmp exit_DefaultBitmap
C .ENDIF
C invoke GdipDisposeImage, GpBitmap
C ;invoke GetObject, hBitmap, SIZEOF image, ADDR image
- 000003F6 EB 78 C jmp exit_CreateBitmapImage
+ 000003FE EB 78 C jmp exit_CreateBitmapImage
C
C ; Creates a default bitmap (colors and dimensions defined atop)
C ; More information here: http://masm32.com/board/index.php?topic=5731.15
- 000003F8 C exit_DefaultBitmap:
+ 00000400 C exit_DefaultBitmap:
C
C invoke GdipCreateBitmapFromScan0, m_nSplashWidth, m_nSplashHeight, 0, PixelFormat32bppARGB, NULL, ADDR GpBitmap
C invoke GdipGetImageGraphicsContext, GpBitmap, ADDR GpGraphics
@@ -71764,41 +71760,41 @@ Main.asm Page 1 - 1
C
C
C
- 00000470 C exit_CreateBitmapImage:
+ 00000478 C exit_CreateBitmapImage:
C
C invoke GdiplusShutdown, ADDR gdiToken
- 0000047A 8B 45 FC C mov eax, hBitmap ; This has to be deallocated later by the user
+ 00000482 8B 45 FC C mov eax, hBitmap ; This has to be deallocated later by the user
C
C assume edi:nothing
C ret
- 00000482 C CSplashScreen_CreateBitmapImage ENDP
+ 0000048A C CSplashScreen_CreateBitmapImage ENDP
CSplashScreen.asm(292) : warning A6004:procedure argument or local not referenced : image
CSplashScreen.asm(292) : warning A6004:procedure argument or local not referenced : lpImage
C
C ; --=====================================================================================--
C ; Registers a window class for the splash and splash owner windows.
C ; --=====================================================================================--
- 00000482 C CSplashScreen_RegisterWindowClass PROC uses edi lpTHIS:DWORD
+ 0000048A C CSplashScreen_RegisterWindowClass PROC uses edi lpTHIS:DWORD
C ; https://gist.github.com/DrFrankenstein/9810bbf5cad98b110281
C LOCAL wc: WNDCLASS
C
C ;Initialize wc with zeroes
- 00000489 B9 00000028 C mov ecx, sizeof WNDCLASS
- 0000048E 33 C0 C xor eax, eax
- 00000490 8D 7D D8 C lea edi, wc
- 00000493 F3/ AA C rep stosb
+ 00000491 B9 00000028 C mov ecx, sizeof WNDCLASS
+ 00000496 33 C0 C xor eax, eax
+ 00000498 8D 7D D8 C lea edi, wc
+ 0000049B F3/ AA C rep stosb
C
C ; Get this pointer
- 00000495 8B 7D 08 C mov edi, lpTHIS
+ 0000049D 8B 7D 08 C mov edi, lpTHIS
C assume edi:PTR CSplashScreen
C
C ;Register the window class
C ;mov wc.lpfnWndProc, OFFSET WindowProc
- 00000498 C7 45 DC C mov wc.lpfnWndProc, DefWindowProc ; http://masm32.com/board/index.php?topic=2469.0
+ 000004A0 C7 45 DC C mov wc.lpfnWndProc, DefWindowProc ; http://masm32.com/board/index.php?topic=2469.0
00000000 E
C invoke GetModuleHandle, 0
- 000004A6 89 45 E8 C mov wc.hInstance, eax
- 000004A9 C7 45 FC C mov wc.lpszClassName, OFFSET strClassName
+ 000004AE 89 45 E8 C mov wc.hInstance, eax
+ 000004B1 C7 45 FC C mov wc.lpszClassName, OFFSET strClassName
000000E8 R
C invoke RegisterClass, ADDR wc
C
@@ -71811,13 +71807,13 @@ CSplashScreen.asm(292) : warning A6004:procedure argument or local not reference
C
C assume edi:nothing
C ret
- 000004BE C CSplashScreen_RegisterWindowClass ENDP
+ 000004C6 C CSplashScreen_RegisterWindowClass ENDP
C
C ; --=====================================================================================--
C ; Registers a window class for the splash and splash owner windows.
C ; --=====================================================================================--
- 000004BE C CSplashScreen_UnregisterWindowClass PROC uses edi lpTHIS:DWORD
- 000004C2 8B 7D 08 C mov edi, lpTHIS
+ 000004C6 C CSplashScreen_UnregisterWindowClass PROC uses edi lpTHIS:DWORD
+ 000004CA 8B 7D 08 C mov edi, lpTHIS
C assume edi:PTR CSplashScreen
C
C ;invoke GetModuleHandle, 0
@@ -71825,11 +71821,11 @@ CSplashScreen.asm(292) : warning A6004:procedure argument or local not reference
C
C assume edi:nothing
C ret
- 000004D7 C CSplashScreen_UnregisterWindowClass ENDP
+ 000004DF C CSplashScreen_UnregisterWindowClass ENDP
C
C
- 000004D7 C CSplashScreen_CreateSplashWindow PROC uses edi lpTHIS:DWORD
- 000004DB 8B 7D 08 C mov edi, lpTHIS
+ 000004DF C CSplashScreen_CreateSplashWindow PROC uses edi lpTHIS:DWORD
+ 000004E3 8B 7D 08 C mov edi, lpTHIS
C assume edi:PTR CSplashScreen
C
C ;push NULL
@@ -71854,9 +71850,9 @@ CSplashScreen.asm(292) : warning A6004:procedure argument or local not reference
C
C assume edi:nothing
C ret
- 0000050A C CSplashScreen_CreateSplashWindow ENDP
+ 00000512 C CSplashScreen_CreateSplashWindow ENDP
C
- 0000050A C CSplashScreen_SetSplashImage PROC uses edi lpTHIS:DWORD, hwndSplash:HWND, hbmpSplash:HBITMAP
+ 00000512 C CSplashScreen_SetSplashImage PROC uses edi lpTHIS:DWORD, hwndSplash:HWND, hbmpSplash:HBITMAP
C LOCAL bm :BITMAP ; defined in wingdi.h
C LOCAL ptZero :POINT ; defined in windef.h
C LOCAL ptOrigin :POINT ; defined in windef.h
@@ -71870,63 +71866,63 @@ CSplashScreen.asm(292) : warning A6004:procedure argument or local not reference
C ;LOCAL blend :BLENDFUNCTION ; defined in wingdi.h
C
C ; Initialize structs
- 00000511 C7 45 E0 C mov ptZero.x, 0
+ 00000519 C7 45 E0 C mov ptZero.x, 0
00000000
- 00000518 C7 45 E4 C mov ptZero.y, 0
+ 00000520 C7 45 E4 C mov ptZero.y, 0
00000000
C
- 0000051F B9 00000028 C mov ecx, SIZEOF monitorinfo
- 00000524 33 C0 C xor eax, eax
- 00000526 8D 7D A4 C lea edi, monitorinfo
- 00000529 F3/ AA C rep stosb
+ 00000527 B9 00000028 C mov ecx, SIZEOF monitorinfo
+ 0000052C 33 C0 C xor eax, eax
+ 0000052E 8D 7D A4 C lea edi, monitorinfo
+ 00000531 F3/ AA C rep stosb
C
C ; Get this pointer
- 0000052B 8B 7D 08 C mov edi, lpTHIS
+ 00000533 8B 7D 08 C mov edi, lpTHIS
C assume edi:PTR CSplashScreen
C
C ; Get the dimensions of the bitmap used as the splash screen
C invoke GetObject, hbmpSplash, SIZEOF bm, ADDR bm
- 0000053C 8B 45 EC C mov eax, bm.bmWidth
- 0000053F 89 45 D0 C mov sizeSplash.x, eax
- 00000542 8B 45 F0 C mov eax, bm.bmHeight
- 00000545 89 45 D4 C mov sizeSplash.y, eax
+ 00000544 8B 45 EC C mov eax, bm.bmWidth
+ 00000547 89 45 D0 C mov sizeSplash.x, eax
+ 0000054A 8B 45 F0 C mov eax, bm.bmHeight
+ 0000054D 89 45 D4 C mov sizeSplash.y, eax
C
C ; Get the primary monitor's info
C invoke MonitorFromPoint, ptZero.x, ptZero.y, MONITOR_DEFAULTTOPRIMARY ; 0x00000001
- 00000555 89 45 CC C mov hmonPrimary, eax
- 00000558 B8 00000028 C mov eax, SIZEOF monitorinfo
- 0000055D 89 45 A4 C mov monitorinfo.cbSize, eax
+ 0000055D 89 45 CC C mov hmonPrimary, eax
+ 00000560 B8 00000028 C mov eax, SIZEOF monitorinfo
+ 00000565 89 45 A4 C mov monitorinfo.cbSize, eax
C invoke GetMonitorInfo, hmonPrimary, ADDR monitorinfo
C
C ; Center the bitmap into the primary monitor
- 0000056C 8B 45 B0 C mov eax, monitorinfo.rcMonitor.right ; rcWork plus the windows taskbar
- 0000056F 2B 45 A8 C sub eax, monitorinfo.rcMonitor.left
- 00000572 2B 45 D0 C sub eax, sizeSplash.x
- 00000575 D1 E8 C shr eax, 1
- 00000577 03 45 A8 C add eax, monitorinfo.rcMonitor.left
- 0000057A 89 45 D8 C mov ptOrigin.x, eax
- C
- 0000057D 8B 45 B4 C mov eax, monitorinfo.rcMonitor.bottom
- 00000580 2B 45 AC C sub eax, monitorinfo.rcMonitor.top
- 00000583 2B 45 D4 C sub eax, sizeSplash.y
- 00000586 D1 E8 C shr eax, 1
- 00000588 03 45 AC C add eax, monitorinfo.rcMonitor.top
- 0000058B 89 45 DC C mov ptOrigin.y, eax
+ 00000574 8B 45 B0 C mov eax, monitorinfo.rcMonitor.right ; rcWork plus the windows taskbar
+ 00000577 2B 45 A8 C sub eax, monitorinfo.rcMonitor.left
+ 0000057A 2B 45 D0 C sub eax, sizeSplash.x
+ 0000057D D1 E8 C shr eax, 1
+ 0000057F 03 45 A8 C add eax, monitorinfo.rcMonitor.left
+ 00000582 89 45 D8 C mov ptOrigin.x, eax
+ C
+ 00000585 8B 45 B4 C mov eax, monitorinfo.rcMonitor.bottom
+ 00000588 2B 45 AC C sub eax, monitorinfo.rcMonitor.top
+ 0000058B 2B 45 D4 C sub eax, sizeSplash.y
+ 0000058E D1 E8 C shr eax, 1
+ 00000590 03 45 AC C add eax, monitorinfo.rcMonitor.top
+ 00000593 89 45 DC C mov ptOrigin.y, eax
C
C ; Create a memory DC holding the splash bitmap
C invoke GetDC, 0
- 00000595 89 45 A0 C mov hdcScreen, eax
+ 0000059D 89 45 A0 C mov hdcScreen, eax
C invoke CreateCompatibleDC, hdcScreen
- 000005A0 89 45 9C C mov hdcMem, eax
+ 000005A8 89 45 9C C mov hdcMem, eax
C invoke SelectObject, hdcMem, hbmpSplash
- 000005AE 89 45 98 C mov hbmpOld, eax
+ 000005B6 89 45 98 C mov hbmpOld, eax
C
C ; Use the source image's alpha channel for blending
- 000005B1 C6 47 28 00 C mov [edi].blend.BlendOp, AC_SRC_OVER ; 0x00
- 000005B5 C6 47 29 00 C mov [edi].blend.BlendFlags, 0 ; 0x00
- 000005B9 C6 47 2A FF C mov [edi].blend.SourceConstantAlpha, 255 ; 0xFF
- 000005BD C6 47 2B 01 C mov [edi].blend.AlphaFormat, AC_SRC_ALPHA ; 0x01
- 000005C1 8D 47 28 C lea eax, [edi].blend
+ 000005B9 C6 47 28 00 C mov [edi].blend.BlendOp, AC_SRC_OVER ; 0x00
+ 000005BD C6 47 29 00 C mov [edi].blend.BlendFlags, 0 ; 0x00
+ 000005C1 C6 47 2A FF C mov [edi].blend.SourceConstantAlpha, 255 ; 0xFF
+ 000005C5 C6 47 2B 01 C mov [edi].blend.AlphaFormat, AC_SRC_ALPHA ; 0x01
+ 000005C9 8D 47 28 C lea eax, [edi].blend
C ; Paint the window (in the right location) with the alpha-blended bitmap
C invoke UpdateLayeredWindow, hwndSplash, hdcScreen, ADDR ptOrigin, ADDR sizeSplash, hdcMem, ADDR ptZero, 000000000h, eax, ULW_ALPHA
C
@@ -71946,49 +71942,49 @@ CSplashScreen.asm(292) : warning A6004:procedure argument or local not reference
C
C assume edi:nothing
C ret
- 0000061D C CSplashScreen_SetSplashImage ENDP
+ 00000625 C CSplashScreen_SetSplashImage ENDP
C
- 0000061D C CSplashScreen_LaunchApplication PROC uses edi lpTHIS:DWORD
+ 00000625 C CSplashScreen_LaunchApplication PROC uses edi lpTHIS:DWORD
C LOCAL szCurrentFolder[MAX_PATH]:WORD
C LOCAL szApplicationPath[MAX_PATH]:WORD
C LOCAL startupinfo:STARTUPINFO
C LOCAL processinfo:PROCESS_INFORMATION
C
C ; Initialize structs to 0
- 00000627 B9 00000044 C mov ecx, SIZEOF startupinfo
- 0000062C 33 C0 C xor eax, eax
- 0000062E 8D BD FFFFFBAC C lea edi, startupinfo
- 00000634 F3/ AA C rep stosb
+ 0000062F B9 00000044 C mov ecx, SIZEOF startupinfo
+ 00000634 33 C0 C xor eax, eax
+ 00000636 8D BD FFFFFBAC C lea edi, startupinfo
+ 0000063C F3/ AA C rep stosb
C
- 00000636 B9 00000010 C mov ecx, SIZEOF processinfo
- 0000063B 33 C0 C xor eax, eax
- 0000063D 8D BD FFFFFB9C C lea edi, processinfo
- 00000643 F3/ AA C rep stosb
+ 0000063E B9 00000010 C mov ecx, SIZEOF processinfo
+ 00000643 33 C0 C xor eax, eax
+ 00000645 8D BD FFFFFB9C C lea edi, processinfo
+ 0000064B F3/ AA C rep stosb
C
C ; Set this pointer
- 00000645 8B 7D 08 C mov edi, lpTHIS
+ 0000064D 8B 7D 08 C mov edi, lpTHIS
C assume edi:PTR CSplashScreen
C
C ; Get folder of the current process
C invoke GetModuleFileName, NULL, ADDR szCurrentFolder, MAX_PATH
C invoke PathRemoveFileSpec, ADDR szCurrentFolder ; http://masm32.com/board/index.php?topic=3646.0
C
- 00000667 8B 5F 1C C mov ebx, [edi].lpszAppPath
+ 0000066F 8B 5F 1C C mov ebx, [edi].lpszAppPath
C
C ; Add the application name to the path
C .IF (WORD PTR[ebx+2]==58 && WORD PTR[ebx+4]==92) ; ":" && "\\"
C ;mov lpszApplicationPath, eax
C .ELSE
- 0000067A 8D 9D FFFFFBF0 C lea ebx, szApplicationPath
+ 00000682 8D 9D FFFFFBF0 C lea ebx, szApplicationPath
C invoke PathCombine, ebx, ADDR szCurrentFolder, [edi].lpszAppPath
C ;invoke PathCombine, ADDR szApplicationPath, ADDR szCurrentFolder, [edi].lpszAppPath
C .ENDIF
C
C ; Start the application
- 00000690 C7 85 FFFFFBAC C mov startupinfo.cb, SIZEOF startupinfo
+ 00000698 C7 85 FFFFFBAC C mov startupinfo.cb, SIZEOF startupinfo
00000044
C invoke GetCommandLine
- 0000069F 8B C8 C mov ecx, eax
+ 000006A7 8B C8 C mov ecx, eax
C invoke CreateProcess, ebx, ecx, NULL, NULL, FALSE, 0, NULL, ADDR szCurrentFolder, ADDR startupinfo, ADDR processinfo
C ;mov ebx, eax
C ;invoke CreateProcess, ADDR szApplicationPath, ebx, NULL, NULL, FALSE, 0, NULL, ADDR szCurrentFolder, ADDR startupinfo, ADDR processinfo
@@ -71997,13 +71993,13 @@ CSplashScreen.asm(292) : warning A6004:procedure argument or local not reference
C invoke CloseHandle, processinfo.hThread
C
C ; Return the handle of the launched application. The caller should release this using CloseHandle
- 000006D2 8B 85 FFFFFB9C C mov eax, processinfo.hProcess
+ 000006DA 8B 85 FFFFFB9C C mov eax, processinfo.hProcess
C
C assume edi:nothing
C ret
- 000006DD C CSplashScreen_LaunchApplication ENDP
+ 000006E5 C CSplashScreen_LaunchApplication ENDP
C
- 000006DD C CSplashScreen_PumpMsgWaitForMultipleObjects PROC uses edi lpTHIS:DWORD, hwndSplash:HWND, nCount:DWORD, pHandles:LPHANDLE, dwMilliseconds:DWORD, hdcScreen:HDC
+ 000006E5 C CSplashScreen_PumpMsgWaitForMultipleObjects PROC uses edi lpTHIS:DWORD, hwndSplash:HWND, nCount:DWORD, pHandles:LPHANDLE, dwMilliseconds:DWORD, hdcScreen:HDC
C LOCAL dwStartTickCount :DWORD
C LOCAL dwElapsed :DWORD
C LOCAL dwTimeOut :DWORD
@@ -72011,120 +72007,120 @@ CSplashScreen.asm(292) : warning A6004:procedure argument or local not reference
C ;LOCAL hdcScreen :HDC
C LOCAL msg :MSG
C
- 000006E4 8B 7D 08 C mov edi, lpTHIS
+ 000006EC 8B 7D 08 C mov edi, lpTHIS
C assume edi: PTR CSplashScreen
C
C invoke GetTickCount
- 000006EC 89 45 FC C mov dwStartTickCount, eax
+ 000006F4 89 45 FC C mov dwStartTickCount, eax
C
- 000006EF C Wait_Loop:
+ 000006F7 C Wait_Loop:
C ; Calculate timeout
C invoke GetTickCount
- 000006F4 2B 45 FC C sub eax, dwStartTickCount
- 000006F7 89 45 F8 C mov dwElapsed, eax
+ 000006FC 2B 45 FC C sub eax, dwStartTickCount
+ 000006FF 89 45 F8 C mov dwElapsed, eax
C
C .IF (dwMilliseconds == INFINITE)
- 00000700 C7 45 F4 C mov dwTimeOut, INFINITE
+ 00000708 C7 45 F4 C mov dwTimeOut, INFINITE
FFFFFFFF
C .ELSE
C .IF (eax < dwMilliseconds) ; dwElapsed < dwMilliseconds
- 0000070E 8B 45 18 C mov eax, dwMilliseconds
- 00000711 2B 45 F8 C sub eax, dwElapsed
- 00000714 89 45 F4 C mov dwTimeOut, eax
+ 00000716 8B 45 18 C mov eax, dwMilliseconds
+ 00000719 2B 45 F8 C sub eax, dwElapsed
+ 0000071C 89 45 F4 C mov dwTimeOut, eax
C ;sub dwTimeOut, dwElapsed
C .ELSE
- 00000719 C7 45 F4 C mov dwTimeOut, 0
+ 00000721 C7 45 F4 C mov dwTimeOut, 0
00000000
C .ENDIF
C .ENDIF
C
C ; Wait for a handle to be signaled or a message
C invoke MsgWaitForMultipleObjects, nCount, pHandles, FALSE, dwTimeOut, QS_ALLINPUT
- 00000735 89 45 F0 C mov dwWaitResult, eax
- 00000738 B8 00000000 C mov eax, WAIT_OBJECT_0
- 0000073D 03 45 10 C add eax, nCount
+ 0000073D 89 45 F0 C mov dwWaitResult, eax
+ 00000740 B8 00000000 C mov eax, WAIT_OBJECT_0
+ 00000745 03 45 10 C add eax, nCount
C .IF ( dwWaitResult == eax ) ; dwWaitResult == WAIT_OBJECT_0 + nCount
C
- 00000745 EB 25 C jmp While_Peek_Condition ; While PeekMessage != FALSE
+ 0000074D EB 25 C jmp While_Peek_Condition ; While PeekMessage != FALSE
C
- 00000747 C While_Peek_Start:
+ 0000074F C While_Peek_Start:
C .IF (msg.message == WM_QUIT)
C ; Repost quit message and return
C invoke PostQuitMessage, msg.wParam
C ;return WAIT_OBJECT_0 + nCount;
- 00000755 E9 000000B2 C jmp exit_PumpMsgWaitForMultipleObjects
+ 0000075D E9 000000B2 C jmp exit_PumpMsgWaitForMultipleObjects
C .ENDIF
C ; Dispatch thread message
C invoke TranslateMessage, ADDR msg
C invoke DispatchMessage, ADDR msg
C
- 0000076C C While_Peek_Condition:
+ 00000774 C While_Peek_Condition:
C invoke PeekMessage, ADDR msg, NULL, 0, 0, PM_REMOVE
- 0000077D 83 F8 00 C cmp eax, FALSE
- 00000780 75 C5 C jne While_Peek_Start ; execute while eax != FALSE
+ 00000785 83 F8 00 C cmp eax, FALSE
+ 00000788 75 C5 C jne While_Peek_Start ; execute while eax != FALSE
C
C .ELSE
C ; Check fade event (pHandles[1]). If the fade event is not set then we simply need to exit.
C ; if the fade event is set then we need to fade out
- 00000787 8B 5D 14 C mov ebx, pHandles ; Pointer to the beginning of the array
- 0000078A 83 C3 04 C add ebx, 4 ; Point to the second element: pHandles[1]
+ 0000078F 8B 5D 14 C mov ebx, pHandles ; Pointer to the beginning of the array
+ 00000792 83 C3 04 C add ebx, 4 ; Point to the second element: pHandles[1]
C invoke MsgWaitForMultipleObjects, 1, ebx, FALSE, 0, QS_ALLINPUT
C .IF (eax == WAIT_OBJECT_0)
C
C ; Timeout on actual wait or any other object
C invoke SetTimer, hwndSplash, 1, 30, NULL
C invoke GetTickCount
- 000007B5 03 47 20 C add eax, [edi].intFadeOutTime
- 000007B8 89 47 24 C mov [edi].intFadeOutEnd, eax
+ 000007BD 03 47 20 C add eax, [edi].intFadeOutTime
+ 000007C0 89 47 24 C mov [edi].intFadeOutEnd, eax
C
- 000007BB EB 33 C jmp FadeWindow_Condition
+ 000007C3 EB 33 C jmp FadeWindow_Condition
C
- 000007BD C FadeWindow_Start:
+ 000007C5 C FadeWindow_Start:
C .IF (eax == -1)
C ; Handle the error and possibly exit
C .ELSE
C .IF (msg.message == WM_TIMER)
- 000007CD FF 75 1C C push hdcScreen
- 000007D0 FF 75 0C C push hwndSplash
- 000007D3 57 C push edi
- 000007D4 E8 00000038 C call CSplashScreen_FadeWindowOut
- 000007D9 83 F8 01 C cmp eax, 1
- 000007DC 74 2E C je exit_PumpMsgWaitForMultipleObjects
+ 000007D5 FF 75 1C C push hdcScreen
+ 000007D8 FF 75 0C C push hwndSplash
+ 000007DB 57 C push edi
+ 000007DC E8 00000038 C call CSplashScreen_FadeWindowOut
+ 000007E1 83 F8 01 C cmp eax, 1
+ 000007E4 74 2E C je exit_PumpMsgWaitForMultipleObjects
C .ENDIF
C ; Dispatch thread message
C invoke TranslateMessage, ADDR msg
C invoke DispatchMessage, ADDR msg
C .ENDIF
- 000007F0 C FadeWindow_Condition:
+ 000007F8 C FadeWindow_Condition:
C invoke GetMessage, ADDR msg, hwndSplash, 0, 0
- 00000800 83 F8 00 C cmp eax, FALSE
- 00000803 75 B8 C jne FadeWindow_Start
+ 00000808 83 F8 00 C cmp eax, FALSE
+ 0000080B 75 B8 C jne FadeWindow_Start
C .ENDIF
C
- 00000805 EB 05 C jmp exit_PumpMsgWaitForMultipleObjects
+ 0000080D EB 05 C jmp exit_PumpMsgWaitForMultipleObjects
C
C .ENDIF
- 00000807 E9 FFFFFEE3 C jmp Wait_Loop
+ 0000080F E9 FFFFFEE3 C jmp Wait_Loop
C
- 0000080C C exit_PumpMsgWaitForMultipleObjects:
+ 00000814 C exit_PumpMsgWaitForMultipleObjects:
C
C assume edi:nothing
C ret
- 00000811 C CSplashScreen_PumpMsgWaitForMultipleObjects ENDP
+ 00000819 C CSplashScreen_PumpMsgWaitForMultipleObjects ENDP
C
- 00000811 C CSplashScreen_FadeWindowOut PROC uses edi lpTHIS:DWORD, hWindow:HWND, hdcScreen:HDC
+ 00000819 C CSplashScreen_FadeWindowOut PROC uses edi lpTHIS:DWORD, hWindow:HWND, hdcScreen:HDC
C LOCAL dtNow:DWORD
C LOCAL cte:DWORD
C LOCAL result:DWORD
C
- 00000818 8B 7D 08 C mov edi, lpTHIS
+ 00000820 8B 7D 08 C mov edi, lpTHIS
C assume edi:PTR CSplashScreen
C
C invoke GetTickCount
- 00000820 89 45 FC C mov dtNow, eax
+ 00000828 89 45 FC C mov dtNow, eax
C
C .IF (eax >= [edi].intFadeOutEnd)
- 00000828 B8 00000001 C mov eax, 1 ; Return true (we are done with the fade out)
+ 00000830 B8 00000001 C mov eax, 1 ; Return true (we are done with the fade out)
C .ELSE
C ; Floating point computation of the blend parameter
C ;mov cte, 255
@@ -72140,32 +72136,32 @@ CSplashScreen.asm(292) : warning A6004:procedure argument or local not reference
C
C ; Same computation using SSE
C ; double fade = ((double)m_nFadeoutEnd - (double)dtNow) / (double)m_nFadeoutTime;
- 0000082F 0F 57 C0 C xorps xmm0, xmm0 ; 128-bit wide registers
- 00000832 0F 57 C9 C xorps xmm1, xmm1
- 00000835 8B 47 24 C mov eax, [edi].intFadeOutEnd
- 00000838 F2/ 0F 2A C0 C cvtsi2sd xmm0, eax
- 0000083C 8B 45 FC C mov eax, dtNow
- 0000083F F2/ 0F 2A C8 C cvtsi2sd xmm1, eax
- 00000843 F2/ 0F 5C C1 C subsd xmm0, xmm1
- 00000847 8B 47 20 C mov eax, [edi].intFadeOutTime
- 0000084A F2/ 0F 2A C8 C cvtsi2sd xmm1, eax
- 0000084E F2/ 0F 5E C1 C divsd xmm0, xmm1
+ 00000837 0F 57 C0 C xorps xmm0, xmm0 ; 128-bit wide registers
+ 0000083A 0F 57 C9 C xorps xmm1, xmm1
+ 0000083D 8B 47 24 C mov eax, [edi].intFadeOutEnd
+ 00000840 F2/ 0F 2A C0 C cvtsi2sd xmm0, eax
+ 00000844 8B 45 FC C mov eax, dtNow
+ 00000847 F2/ 0F 2A C8 C cvtsi2sd xmm1, eax
+ 0000084B F2/ 0F 5C C1 C subsd xmm0, xmm1
+ 0000084F 8B 47 20 C mov eax, [edi].intFadeOutTime
+ 00000852 F2/ 0F 2A C8 C cvtsi2sd xmm1, eax
+ 00000856 F2/ 0F 5E C1 C divsd xmm0, xmm1
C
- 00000852 B8 000000FF C mov eax, 255d
- 00000857 F2/ 0F 2A C8 C cvtsi2sd xmm1, eax
+ 0000085A B8 000000FF C mov eax, 255d
+ 0000085F F2/ 0F 2A C8 C cvtsi2sd xmm1, eax
C ;movsd xmm1, mmword ptr[255]
- 0000085B F2/ 0F 59 C1 C mulsd xmm0, xmm1
- 0000085F F2/ 0F 2C C0 C cvttsd2si eax, xmm0
+ 00000863 F2/ 0F 59 C1 C mulsd xmm0, xmm1
+ 00000867 F2/ 0F 2C C0 C cvttsd2si eax, xmm0
C
- 00000863 88 47 2A C mov [edi].blend.SourceConstantAlpha, al ; BYTE PTR [eax]
- 00000866 8D 47 28 C lea eax, [edi].blend
+ 0000086B 88 47 2A C mov [edi].blend.SourceConstantAlpha, al ; BYTE PTR [eax]
+ 0000086E 8D 47 28 C lea eax, [edi].blend
C invoke UpdateLayeredWindow, hWindow, hdcScreen, NULL, NULL, NULL, NULL, 000000000h, eax, ULW_ALPHA
- 00000881 B8 00000000 C mov eax, 0 ; Return false (we are still fading out the window)
+ 00000889 B8 00000000 C mov eax, 0 ; Return false (we are still fading out the window)
C .ENDIF
C
C assume edi:nothing
C ret
- 0000088B C CSplashScreen_FadeWindowOut ENDP
+ 00000893 C CSplashScreen_FadeWindowOut ENDP
CSplashScreen.asm(677) : warning A6004:procedure argument or local not referenced : cte
CSplashScreen.asm(677) : warning A6004:procedure argument or local not referenced : result
C
@@ -72173,7 +72169,7 @@ CSplashScreen.asm(677) : warning A6004:procedure argument or local not reference
C
C
C
- 0000088B C CenterWindow proc hWindow:DWORD
+ 00000893 C CenterWindow proc hWindow:DWORD
C LOCAL DlgHeight:DWORD
C LOCAL DlgWidth:DWORD
C LOCAL DlgRect:RECT
@@ -72181,57 +72177,57 @@ CSplashScreen.asm(677) : warning A6004:procedure argument or local not reference
C
C invoke GetWindowRect,hWindow,addr DlgRect
C invoke GetDesktopWindow
- 000008A2 8B C8 C mov ecx,eax
+ 000008AA 8B C8 C mov ecx,eax
C invoke GetWindowRect,ecx,addr DesktopRect
- 000008AE 6A 00 C push 0
- 000008B0 8B 45 F4 C mov eax,DlgRect.bottom
- 000008B3 2B 45 EC C sub eax,DlgRect.top
- 000008B6 89 45 FC C mov DlgHeight,eax
- 000008B9 50 C push eax
- 000008BA 8B 45 F0 C mov eax,DlgRect.right
- 000008BD 2B 45 E8 C sub eax,DlgRect.left
- 000008C0 89 45 F8 C mov DlgWidth,eax
- 000008C3 50 C push eax
- 000008C4 8B 45 E4 C mov eax,DesktopRect.bottom
- 000008C7 2B 45 FC C sub eax,DlgHeight
- 000008CA D1 E8 C shr eax,1
- 000008CC 50 C push eax
- 000008CD 8B 45 E0 C mov eax,DesktopRect.right
- 000008D0 2B 45 F8 C sub eax,DlgWidth
- 000008D3 D1 E8 C shr eax,1
- 000008D5 50 C push eax
- 000008D6 FF 75 08 C push hWindow
- 000008D9 E8 00000000 E C call MoveWindow
+ 000008B6 6A 00 C push 0
+ 000008B8 8B 45 F4 C mov eax,DlgRect.bottom
+ 000008BB 2B 45 EC C sub eax,DlgRect.top
+ 000008BE 89 45 FC C mov DlgHeight,eax
+ 000008C1 50 C push eax
+ 000008C2 8B 45 F0 C mov eax,DlgRect.right
+ 000008C5 2B 45 E8 C sub eax,DlgRect.left
+ 000008C8 89 45 F8 C mov DlgWidth,eax
+ 000008CB 50 C push eax
+ 000008CC 8B 45 E4 C mov eax,DesktopRect.bottom
+ 000008CF 2B 45 FC C sub eax,DlgHeight
+ 000008D2 D1 E8 C shr eax,1
+ 000008D4 50 C push eax
+ 000008D5 8B 45 E0 C mov eax,DesktopRect.right
+ 000008D8 2B 45 F8 C sub eax,DlgWidth
+ 000008DB D1 E8 C shr eax,1
+ 000008DD 50 C push eax
+ 000008DE FF 75 08 C push hWindow
+ 000008E1 E8 00000000 E C call MoveWindow
C ret
- 000008E2 C CenterWindow endp
+ 000008EA C CenterWindow endp
C
C
- 000008E2 C WindowProc PROC ;, hwnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM ; must be naked
+ 000008EA C WindowProc PROC ;, hwnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM ; must be naked
= DWORD PTR [esp + 8] C uMsg textequ < DWORD PTR [esp + 8] >
- 000008E2 83 7C 24 08 02 C cmp uMsg, WM_DESTROY
- 000008E7 74 0D C je OnDestroy
- 000008E9 83 7C 24 08 0F C cmp uMsg, WM_PAINT
- 000008EE 74 10 C je OnPaint
- 000008F0 E9 00000000 E C jmp DefWindowProc
- 000008F5 CC C int 3
+ 000008EA 83 7C 24 08 02 C cmp uMsg, WM_DESTROY
+ 000008EF 74 0D C je OnDestroy
+ 000008F1 83 7C 24 08 0F C cmp uMsg, WM_PAINT
+ 000008F6 74 10 C je OnPaint
+ 000008F8 E9 00000000 E C jmp DefWindowProc
+ 000008FD CC C int 3
C
- 000008F6 C WindowProc ENDP
+ 000008FE C WindowProc ENDP
C
- 000008F6 C OnDestroy PROC ;, hwnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
+ 000008FE C OnDestroy PROC ;, hwnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
C invoke PostQuitMessage, 0
- 000008FD 33 C0 C xor eax, eax
- 000008FF C3 C ret
- 00000900 C OnDestroy ENDP
+ 00000905 33 C0 C xor eax, eax
+ 00000907 C3 C ret
+ 00000908 C OnDestroy ENDP
C
- 00000900 C OnPaint PROC ;, hwnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
+ 00000908 C OnPaint PROC ;, hwnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
C ;local ps:PAINTSTRUCT
C ;invoke BeginPaint, hwnd, addr ps
C ;invoke FillRect, ps.hdc, addr ps.rcPaint, COLOR_WINDOW + 1
C ;invoke EndPaint, hwnd, addr ps
C
- 00000900 33 C0 C xor eax, eax
- 00000902 C3 C ret
- 00000903 C OnPaint ENDP
+ 00000908 33 C0 C xor eax, eax
+ 0000090A C3 C ret
+ 0000090B C OnPaint ENDP
C
C
C
@@ -72259,9 +72255,8 @@ CSplashScreen.asm(677) : warning A6004:procedure argument or local not reference
= 0000FFFF MEMSIZE equ 65535
0000010C .data
- ;UCSTR fileName, "C:\Users\Arthurit\Documents\Visual Studio 2017\Projects\SplashScreen\MASM x86\Debug\settings.txt",0
- UCSTR fileName, "settings.txt",0
- 0000010C 0000000D [ 1 ucstr_lbl WORD ucstr_size dup (?)
+ UCSTR fileName, "settings.splash",0
+ 0000010C 00000010 [ 1 ucstr_lbl WORD ucstr_size dup (?)
0000
]
0000010C 0073 3 ucstr_char
@@ -72273,11 +72268,14 @@ CSplashScreen.asm(677) : warning A6004:procedure argument or local not reference
00000118 0067 3 ucstr_char
0000011A 0073 3 ucstr_char
0000011C 002E 3 ucstr_char
- 0000011E 0074 3 ucstr_char
- 00000120 0078 3 ucstr_char
- 00000122 0074 3 ucstr_char
- 00000124 0000 2 dw 0
- 00000126 41 6E 20 75 6E ErrorSettings BYTE "An unexpected error ocurred while reading 'settings.txt'.", 13, 10, "Please make sure the file and format are correct.", 0
+ 0000011E 0073 3 ucstr_char
+ 00000120 0070 3 ucstr_char
+ 00000122 006C 3 ucstr_char
+ 00000124 0061 3 ucstr_char
+ 00000126 0073 3 ucstr_char
+ 00000128 0068 3 ucstr_char
+ 0000012A 0000 2 dw 0
+ 0000012C 41 6E 20 75 6E ErrorSettings BYTE "An unexpected error ocurred while reading 'settings.splash'.", 13, 10, "Please make sure the file and format are correct.", 0
65 78 70 65
63 74 65 64
20 65 72 72
@@ -72289,22 +72287,23 @@ CSplashScreen.asm(677) : warning A6004:procedure argument or local not reference
64 69 6E 67
20 27 73 65
74 74 69 6E
- 67 73 2E 74
- 78 74 27 2E
- 0D 0A 50 6C
- 65 61 73 65
- 20 6D 61 6B
- 65 20 73 75
- 72 65 20 74
- 68 65 20 66
- 69 6C 65 20
- 61 6E 64 20
- 66 6F 72 6D
- 61 74 20 61
- 72 65 20 63
- 6F 72 72 65
- 63 74 2E 00
- 00000193 43 6F 75 6C 64 ErrorApp BYTE "Could not find the file in the following path:", 13, 10, 0
+ 67 73 2E 73
+ 70 6C 61 73
+ 68 27 2E 0D
+ 0A 50 6C 65
+ 61 73 65 20
+ 6D 61 6B 65
+ 20 73 75 72
+ 65 20 74 68
+ 65 20 66 69
+ 6C 65 20 61
+ 6E 64 20 66
+ 6F 72 6D 61
+ 74 20 61 72
+ 65 20 63 6F
+ 72 72 65 63
+ 74 2E 00
+ 0000019C 43 6F 75 6C 64 ErrorApp BYTE "Could not find the file in the following path:", 13, 10, 0
20 6E 6F 74
20 66 69 6E
64 20 74 68
@@ -72317,150 +72316,150 @@ CSplashScreen.asm(677) : warning A6004:procedure argument or local not reference
70 61 74 68
3A 0D 0A 00
- 000001C4 00000000 file DWORD NULL
- 000001C8 00000000 splash DWORD NULL
- 000001CC 00000000 nFadeoutTime DWORD NULL
- 000001D0 00000000 lpModuleName LPCSTR NULL
- 000001D4 00000000 lpszImagePath LPCTSTR NULL
- 000001D8 00000000 lpszPrefix LPCTSTR NULL
- 000001DC 00000000 lpszAppFileName LPCTSTR NULL
+ 000001CD 00000000 file DWORD NULL
+ 000001D1 00000000 splash DWORD NULL
+ 000001D5 00000000 nFadeoutTime DWORD NULL
+ 000001D9 00000000 lpModuleName LPCSTR NULL
+ 000001DD 00000000 lpszImagePath LPCTSTR NULL
+ 000001E1 00000000 lpszPrefix LPCTSTR NULL
+ 000001E5 00000000 lpszAppFileName LPCTSTR NULL
00000004 .data?
- 00000903 .code
+ 0000090B .code
- 00000903 main proc
+ 0000090B main proc
; Get the current handle
invoke GetModuleHandle,NULL
- 0000090A A3 000001D0 R mov lpModuleName, eax
+ 00000912 A3 000001D9 R mov lpModuleName, eax
.IF (eax==NULL)
- 00000913 E9 00000178 jmp exit_main
+ 0000091B E9 00000177 jmp exit_main
.ENDIF
- ; If settings.txt doesn't exist, then exit the program
+ ; If settings.splash doesn't exist, then exit the program
invoke GetFileAttributes, OFFSET fileName
.IF ( eax == INVALID_FILE_ATTRIBUTES or FILE_ATTRIBUTE_DIRECTORY ) ; 0FFFFFFFF
invoke MessageBoxA, NULL, OFFSET ErrorSettings, NULL, MB_ICONERROR ; https://stackoverflow.com/questions/46439802/multiple-lines-of-output-in-a-message-box-assembly-language
- 00000937 0F 84 00000153 je exit_main
+ 0000093F E9 00000153 jmp exit_main
.ENDIF
; Create CFile instance
- 0000093D B8 0000002A mov eax, SIZEOF CFile
+ 00000944 B8 0000002A mov eax, SIZEOF CFile
invoke GetProcessHeap
invoke HeapAlloc, eax, NULL, SIZEOF CFile
- 00000951 A3 000001C4 R mov file, eax
- 00000956 50 push eax
- 00000957 E8 FFFFF6A4 call CFile_Init
+ 00000958 A3 000001CD R mov file, eax
+ 0000095D 50 push eax
+ 0000095E E8 FFFFF69D call CFile_Init
;invoke CFile_Init, eax
- 0000095C 8D 64 24 FC lea esp, [esp-4]
- 00000960 C7 04 24 mov [esp], OFFSET fileName
+ 00000963 8D 64 24 FC lea esp, [esp-4]
+ 00000967 C7 04 24 mov [esp], OFFSET fileName
0000010C R
- 00000967 8D 64 24 FC lea esp, [esp-4]
- 0000096B A1 000001C4 R mov eax, file
- 00000970 89 04 24 mov [esp], eax
- 00000973 FF 50 04 call (CFile PTR [eax]).OpenFile
+ 0000096E 8D 64 24 FC lea esp, [esp-4]
+ 00000972 A1 000001CD R mov eax, file
+ 00000977 89 04 24 mov [esp], eax
+ 0000097A FF 50 04 call (CFile PTR [eax]).OpenFile
;invoke (CFile PTR [eax]).OpenFile, eax
;lea esp, [esp+4]
- 00000976 A1 000001C4 R mov eax, file
+ 0000097D A1 000001CD R mov eax, file
;invoke MessageBox, NULL, (CFile PTR [eax]).ptrHeapText, NULL, MB_OK
- 0000097B 8D 64 24 FC lea esp, [esp-4]
- 0000097F A1 000001C4 R mov eax, file
- 00000984 89 04 24 mov [esp], eax
- 00000987 FF 50 10 call (CFile PTR [eax]).ConvertToLine
+ 00000982 8D 64 24 FC lea esp, [esp-4]
+ 00000986 A1 000001CD R mov eax, file
+ 0000098B 89 04 24 mov [esp], eax
+ 0000098E FF 50 10 call (CFile PTR [eax]).ConvertToLine
;invoke (CFile PTR [eax]).OpenFile, eax
;lea esp, [esp+4]
; Read the first line: the image path
- 0000098A 8D 64 24 FC lea esp, [esp-4]
- 0000098E A1 000001C4 R mov eax, file
- 00000993 89 04 24 mov [esp], eax
- 00000996 FF 50 14 call (CFile PTR [eax]).GetLine
+ 00000991 8D 64 24 FC lea esp, [esp-4]
+ 00000995 A1 000001CD R mov eax, file
+ 0000099A 89 04 24 mov [esp], eax
+ 0000099D FF 50 14 call (CFile PTR [eax]).GetLine
;invoke (CFile PTR [eax]).OpenFile, eax
;lea esp, [esp+4]
.IF eax!=0
;invoke MessageBox, NULL, eax, NULL, MB_OK
- 0000099D A3 000001D4 R mov lpszImagePath, eax
+ 000009A4 A3 000001DD R mov lpszImagePath, eax
;jmp salto
.ENDIF
; Read the second line: the application path
- 000009A2 8D 64 24 FC lea esp, [esp-4]
- 000009A6 A1 000001C4 R mov eax, file
- 000009AB 89 04 24 mov [esp], eax
- 000009AE FF 50 14 call (CFile PTR [eax]).GetLine
+ 000009A9 8D 64 24 FC lea esp, [esp-4]
+ 000009AD A1 000001CD R mov eax, file
+ 000009B2 89 04 24 mov [esp], eax
+ 000009B5 FF 50 14 call (CFile PTR [eax]).GetLine
.IF eax!=0
- 000009B5 A3 000001DC R mov lpszAppFileName, eax
+ 000009BC A3 000001E5 R mov lpszAppFileName, eax
.ENDIF
; Read the third line: the fadeout milliseconds
- 000009BA 8D 64 24 FC lea esp, [esp-4]
- 000009BE A1 000001C4 R mov eax, file
- 000009C3 89 04 24 mov [esp], eax
- 000009C6 FF 50 14 call (CFile PTR [eax]).GetLine
+ 000009C1 8D 64 24 FC lea esp, [esp-4]
+ 000009C5 A1 000001CD R mov eax, file
+ 000009CA 89 04 24 mov [esp], eax
+ 000009CD FF 50 14 call (CFile PTR [eax]).GetLine
.IF (eax != 0)
- 000009CD A3 000001CC R mov nFadeoutTime, eax
- 000009D2 FF 35 000001CC R push nFadeoutTime
- 000009D8 E8 000000BA call StringToInt
- 000009DD A3 000001CC R mov nFadeoutTime, eax
+ 000009D4 A3 000001D5 R mov nFadeoutTime, eax
+ 000009D9 FF 35 000001D5 R push nFadeoutTime
+ 000009DF E8 000000BA call StringToInt
+ 000009E4 A3 000001D5 R mov nFadeoutTime, eax
.ENDIF
; If the application doesn't exist, then exit the program
invoke GetFileAttributes, lpszAppFileName
.IF ( eax == INVALID_FILE_ATTRIBUTES or FILE_ATTRIBUTE_DIRECTORY ) ; 0FFFFFFFF
invoke MessageBoxA, NULL, OFFSET ErrorApp, NULL, MB_ICONERROR
- 00000A02 74 40 je exit_main_deallocate
+ 00000A09 EB 40 jmp exit_main_deallocate
.ENDIF
;invoke GetFileAttributes, lpszImagePath
;invoke GetFileAttributes, lpszAppFileName
; Create CSplashScreen instance
- 00000A04 B8 0000002C mov eax, SIZEOF CSplashScreen
+ 00000A0B B8 0000002C mov eax, SIZEOF CSplashScreen
invoke GetProcessHeap
invoke HeapAlloc, eax, NULL, SIZEOF CSplashScreen
- 00000A18 A3 000001C8 R mov splash, eax
- 00000A1D FF 35 000001CC R push nFadeoutTime
- 00000A23 FF 35 000001DC R push lpszAppFileName
- 00000A29 FF 35 000001D4 R push lpszImagePath
- 00000A2F FF 35 000001D0 R push lpModuleName
- 00000A35 50 push eax
- 00000A36 E8 FFFFF7A3 call CSplashScreen_Init
+ 00000A1F A3 000001D1 R mov splash, eax
+ 00000A24 FF 35 000001D5 R push nFadeoutTime
+ 00000A2A FF 35 000001E5 R push lpszAppFileName
+ 00000A30 FF 35 000001DD R push lpszImagePath
+ 00000A36 FF 35 000001D9 R push lpModuleName
+ 00000A3C 50 push eax
+ 00000A3D E8 FFFFF7A4 call CSplashScreen_Init
- 00000A3B FF 35 000001C8 R push splash
- 00000A41 FF 50 04 call (CSplashScreen PTR [eax]).Show
+ 00000A42 FF 35 000001D1 R push splash
+ 00000A48 FF 50 04 call (CSplashScreen PTR [eax]).Show
- 00000A44 exit_main_deallocate:
+ 00000A4B exit_main_deallocate:
; Destroy CFile instance from heap
- 00000A44 83 3D 000001C4 R cmp file, NULL
+ 00000A4B 83 3D 000001CD R cmp file, NULL
00
- 00000A4B 74 43 je exit_main
- 00000A4D A1 000001C4 R mov eax, file
- 00000A52 50 push eax
- 00000A53 FF 10 call DWORD PTR [eax]
- 00000A55 50 push eax
+ 00000A52 74 43 je exit_main
+ 00000A54 A1 000001CD R mov eax, file
+ 00000A59 50 push eax
+ 00000A5A FF 10 call DWORD PTR [eax]
+ 00000A5C 50 push eax
invoke GetProcessHeap
invoke HeapFree, eax, NULL, file
- 00000A69 58 pop eax
+ 00000A70 58 pop eax
; Destroy CSplash instance from heap
- 00000A6A 83 3D 000001C8 R cmp splash, NULL
+ 00000A71 83 3D 000001D1 R cmp splash, NULL
00
- 00000A71 74 1D je exit_main
- 00000A73 A1 000001C8 R mov eax, splash
- 00000A78 50 push eax
- 00000A79 FF 10 call DWORD PTR [eax]
- 00000A7B 50 push eax
+ 00000A78 74 1D je exit_main
+ 00000A7A A1 000001D1 R mov eax, splash
+ 00000A7F 50 push eax
+ 00000A80 FF 10 call DWORD PTR [eax]
+ 00000A82 50 push eax
invoke GetProcessHeap
invoke HeapFree, eax, NULL, splash
- 00000A8F 58 pop eax
+ 00000A96 58 pop eax
- 00000A90 exit_main:
+ 00000A97 exit_main:
- invoke ExitProcess,0
+ invoke ExitProcess, 0
- 00000A97 main endp
+ 00000A9E main endp
@@ -72473,45 +72472,45 @@ CSplashScreen.asm(677) : warning A6004:procedure argument or local not reference
; Registers changed: eax, ebx, ecx, esi
; https://stackoverflow.com/questions/13664778/converting-string-to-integer-in-masm-esi-difficulty
;*************************************************
- 00000A97 StringToInt PROC uses ebx ecx esi lpString:DWORD
- 00000A9D 33 C0 xor eax, eax ; Total counter
- 00000A9F 33 DB xor ebx, ebx ; Char pointer
- 00000AA1 B9 0000000A mov ecx, 10d ; Decimal factor multiplier
+ 00000A9E StringToInt PROC uses ebx ecx esi lpString:DWORD
+ 00000AA4 33 C0 xor eax, eax ; Total counter
+ 00000AA6 33 DB xor ebx, ebx ; Char pointer
+ 00000AA8 B9 0000000A mov ecx, 10d ; Decimal factor multiplier
;xor esi, esi
- 00000AA6 8B 75 08 mov esi, DWORD PTR [lpString] ; Point at the beginning of the string
+ 00000AAD 8B 75 08 mov esi, DWORD PTR [lpString] ; Point at the beginning of the string
; Loop through each char in string
- 00000AA9 loopString:
+ 00000AB0 loopString:
; Check whether we reached the end of the string
- 00000AA9 66| 83 3E 00 cmp WORD PTR [esi], 0000h
- 00000AAD 74 23 je exit_StringToInt
+ 00000AB0 66| 83 3E 00 cmp WORD PTR [esi], 0000h
+ 00000AB4 74 23 je exit_StringToInt
; Multiply the accumulated quantity by 10
- 00000AAF F7 E1 mul ecx
+ 00000AB6 F7 E1 mul ecx
; Subtract 48 from ASCII value (number 0) of current char to get integer
- 00000AB1 66| 8B 1E mov bx, WORD PTR [esi]
- 00000AB4 66| 83 EB 30 sub bx, 0048d
+ 00000AB8 66| 8B 1E mov bx, WORD PTR [esi]
+ 00000ABB 66| 83 EB 30 sub bx, 0048d
; Error checking to ensure values are digits 0-9
- 00000AB8 66| 83 FB 00 cmp bx, 0
- 00000ABC 7C 0F jl invalidInput
- 00000ABE 66| 83 FB 09 cmp bx, 9
- 00000AC2 7F 09 jg invalidInput
+ 00000ABF 66| 83 FB 00 cmp bx, 0
+ 00000AC3 7C 0F jl invalidInput
+ 00000AC5 66| 83 FB 09 cmp bx, 9
+ 00000AC9 7F 09 jg invalidInput
; If it's a digit, add to the total and go on with the loop
- 00000AC4 03 C3 add eax, ebx ; Add to total counter
- 00000AC6 83 C6 02 add esi, 2 ; Point to next char (2 bytes per char)
- 00000AC9 EB DE jmp loopString
+ 00000ACB 03 C3 add eax, ebx ; Add to total counter
+ 00000ACD 83 C6 02 add esi, 2 ; Point to next char (2 bytes per char)
+ 00000AD0 EB DE jmp loopString
- 00000ACB EB 05 jmp exit_StringToInt
+ 00000AD2 EB 05 jmp exit_StringToInt
- 00000ACD invalidInput: ; Reset registers and variables to 0
- 00000ACD B8 00000000 mov eax, 0
+ 00000AD4 invalidInput: ; Reset registers and variables to 0
+ 00000AD4 B8 00000000 mov eax, 0
- 00000AD2 exit_StringToInt:
+ 00000AD9 exit_StringToInt:
ret
- 00000AD9 StringToInt ENDP
+ 00000AE0 StringToInt ENDP
end main
@@ -72543,7 +72542,7 @@ CSplashScreen.asm(677) : warning A6004:procedure argument or local not reference
; Dynamic string allocation http://www.asmcommunity.net/forums/topic/?id=13531
; C++ strings https://stackoverflow.com/questions/19697296/what-is-stdwifstreamgetline-doing-to-my-wchar-t-array-its-treated-like-a-b
-Microsoft (R) Macro Assembler Version 14.29.30136.0 10/19/21 14:15:41
+Microsoft (R) Macro Assembler Version 14.31.31104.0 02/26/22 12:20:53
Main.asm Symbols 2 - 1
@@ -83038,8 +83037,8 @@ CONST . . . . . . . . . . . . . 32 Bit 00000000 Para Public 'CONST' ReadOn
FLAT . . . . . . . . . . . . . . GROUP
STACK . . . . . . . . . . . . . 32 Bit 00001000 Para Stack 'STACK'
_BSS . . . . . . . . . . . . . . 32 Bit 00000004 Para Public 'BSS'
-_DATA . . . . . . . . . . . . . 32 Bit 000001E0 Para Public 'DATA'
-_TEXT . . . . . . . . . . . . . 32 Bit 00000AD9 Para Public 'CODE'
+_DATA . . . . . . . . . . . . . 32 Bit 000001E9 Para Public 'DATA'
+_TEXT . . . . . . . . . . . . . 32 Bit 00000AE0 Para Public 'CODE'
Procedures, parameters, and locals:
@@ -83125,24 +83124,26 @@ BuildCommDCBAndTimeoutsA . . . . P Near 00000000 FLAT Length= 00000000 External
BuildCommDCBAndTimeoutsW . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
BuildCommDCBA . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
BuildCommDCBW . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
-CFile_CloseFile . . . . . . . . P Near 0000014E _TEXT Length= 0000000A Public STDCALL
+CFile_CloseFile . . . . . . . . P Near 00000156 _TEXT Length= 0000000A Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
-CFile_ConvertToLine . . . . . . P Near 00000158 _TEXT Length= 0000002B Public STDCALL
+CFile_ConvertToLine . . . . . . P Near 00000160 _TEXT Length= 0000002B Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
- loop_ConvertToLine . . . . . . L Near 00000168 _TEXT
+ loop_ConvertToLine . . . . . . L Near 00000170 _TEXT
CFile_Destructor . . . . . . . . P Near 0000002D _TEXT Length= 0000002C Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
-CFile_Dispose . . . . . . . . . P Near 0000012D _TEXT Length= 00000021 Public STDCALL
+CFile_Dispose . . . . . . . . . P Near 0000012D _TEXT Length= 00000029 Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
-CFile_GetLine . . . . . . . . . P Near 00000183 _TEXT Length= 0000005B Public STDCALL
+CFile_GetLine . . . . . . . . . P Near 0000018B _TEXT Length= 0000005B Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
- iterate . . . . . . . . . . . L Near 000001A9 _TEXT
- exit_GetLine . . . . . . . . . L Near 000001C7 _TEXT
+ iterate . . . . . . . . . . . L Near 000001B1 _TEXT
+ exit_GetLine . . . . . . . . . L Near 000001CF _TEXT
CFile_Init . . . . . . . . . . . P Near 00000000 _TEXT Length= 0000002D Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
CFile_OpenFile . . . . . . . . . P Near 00000059 _TEXT Length= 000000D4 Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
lpszFileName . . . . . . . . . DWord bp + 0000000C
+ hHeap . . . . . . . . . . . . DWord bp - 00000004
+ lpMem . . . . . . . . . . . . DWord bp - 00000008
CLIPFORMAT_UserFree . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
CLIPFORMAT_UserMarshal . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
CLIPFORMAT_UserSize . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
@@ -83150,7 +83151,7 @@ CLIPFORMAT_UserUnmarshal . . . . P Near 00000000 FLAT Length= 00000000 External
CLSIDFromProgIDEx . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
CLSIDFromProgID . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
CLSIDFromString . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
-CSplashScreen_CreateBitmapImage P Near 00000368 _TEXT Length= 0000011A Public STDCALL
+CSplashScreen_CreateBitmapImage P Near 00000370 _TEXT Length= 0000011A Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
hBitmap . . . . . . . . . . . DWord bp - 00000004
image . . . . . . . . . . . . bp - 0000001C
@@ -83158,32 +83159,32 @@ CSplashScreen_CreateBitmapImage P Near 00000368 _TEXT Length= 0000011A Public
GpGraphics . . . . . . . . . . DWord bp - 00000024
GpSolidFill . . . . . . . . . DWord bp - 00000028
lpImage . . . . . . . . . . . DWord bp - 0000002C
- exit_DefaultBitmap . . . . . . L Near 000003F8 _TEXT
- exit_CreateBitmapImage . . . . L Near 00000470 _TEXT
-CSplashScreen_CreateSplashWindow . P Near 000004D7 _TEXT Length= 00000033 Public STDCALL
+ exit_DefaultBitmap . . . . . . L Near 00000400 _TEXT
+ exit_CreateBitmapImage . . . . L Near 00000478 _TEXT
+CSplashScreen_CreateSplashWindow . P Near 000004DF _TEXT Length= 00000033 Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
-CSplashScreen_Destructor . . . . P Near 00000238 _TEXT Length= 0000000C Public STDCALL
+CSplashScreen_Destructor . . . . P Near 00000240 _TEXT Length= 0000000C Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
-CSplashScreen_FadeWindowOut . . P Near 00000811 _TEXT Length= 0000007A Public STDCALL
+CSplashScreen_FadeWindowOut . . P Near 00000819 _TEXT Length= 0000007A Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
hWindow . . . . . . . . . . . DWord bp + 0000000C
hdcScreen . . . . . . . . . . DWord bp + 00000010
dtNow . . . . . . . . . . . . DWord bp - 00000004
cte . . . . . . . . . . . . . DWord bp - 00000008
result . . . . . . . . . . . . DWord bp - 0000000C
-CSplashScreen_Init . . . . . . . P Near 000001DE _TEXT Length= 0000005A Public STDCALL
+CSplashScreen_Init . . . . . . . P Near 000001E6 _TEXT Length= 0000005A Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
hInstance . . . . . . . . . . DWord bp + 0000000C
strImage . . . . . . . . . . . DWord bp + 00000010
strApp . . . . . . . . . . . . DWord bp + 00000014
intFadeOutTime . . . . . . . . DWord bp + 00000018
-CSplashScreen_LaunchApplication P Near 0000061D _TEXT Length= 000000C0 Public STDCALL
+CSplashScreen_LaunchApplication P Near 00000625 _TEXT Length= 000000C0 Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
szCurrentFolder . . . . . . . Word bp - 00000208
szApplicationPath . . . . . . Word bp - 00000410
startupinfo . . . . . . . . . 00000044 bp - 00000454
processinfo . . . . . . . . . XmmWord bp - 00000464
-CSplashScreen_PumpMsgWaitForMultipleObjects P Near 000006DD _TEXT Length= 00000134 Public STDCALL
+CSplashScreen_PumpMsgWaitForMultipleObjects P Near 000006E5 _TEXT Length= 00000134 Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
hwndSplash . . . . . . . . . . DWord bp + 0000000C
nCount . . . . . . . . . . . . DWord bp + 00000010
@@ -83195,16 +83196,16 @@ CSplashScreen_PumpMsgWaitForMultipleObjects P Near 000006DD _TEXT Length= 000
dwTimeOut . . . . . . . . . . DWord bp - 0000000C
dwWaitResult . . . . . . . . . DWord bp - 00000010
msg . . . . . . . . . . . . . bp - 0000002C
- Wait_Loop . . . . . . . . . . L Near 000006EF _TEXT
- While_Peek_Start . . . . . . . L Near 00000747 _TEXT
- While_Peek_Condition . . . . . L Near 0000076C _TEXT
- FadeWindow_Start . . . . . . . L Near 000007BD _TEXT
- FadeWindow_Condition . . . . . L Near 000007F0 _TEXT
- exit_PumpMsgWaitForMultipleObjects . L Near 0000080C _TEXT
-CSplashScreen_RegisterWindowClass P Near 00000482 _TEXT Length= 0000003C Public STDCALL
+ Wait_Loop . . . . . . . . . . L Near 000006F7 _TEXT
+ While_Peek_Start . . . . . . . L Near 0000074F _TEXT
+ While_Peek_Condition . . . . . L Near 00000774 _TEXT
+ FadeWindow_Start . . . . . . . L Near 000007C5 _TEXT
+ FadeWindow_Condition . . . . . L Near 000007F8 _TEXT
+ exit_PumpMsgWaitForMultipleObjects . L Near 00000814 _TEXT
+CSplashScreen_RegisterWindowClass P Near 0000048A _TEXT Length= 0000003C Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
wc . . . . . . . . . . . . . . bp - 00000028
-CSplashScreen_SetSplashImage . . P Near 0000050A _TEXT Length= 00000113 Public STDCALL
+CSplashScreen_SetSplashImage . . P Near 00000512 _TEXT Length= 00000113 Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
hwndSplash . . . . . . . . . . DWord bp + 0000000C
hbmpSplash . . . . . . . . . . DWord bp + 00000010
@@ -83217,7 +83218,7 @@ CSplashScreen_SetSplashImage . . P Near 0000050A _TEXT Length= 00000113 Public
hdcScreen . . . . . . . . . . DWord bp - 00000060
hdcMem . . . . . . . . . . . . DWord bp - 00000064
hbmpOld . . . . . . . . . . . DWord bp - 00000068
-CSplashScreen_Show . . . . . . . P Near 00000244 _TEXT Length= 00000124 Public STDCALL
+CSplashScreen_Show . . . . . . . P Near 0000024C _TEXT Length= 00000124 Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
hCloseSplashEvent . . . . . . DWord bp - 00000004
hCloseSplashWithoutFadeEvent . DWord bp - 00000008
@@ -83225,8 +83226,8 @@ CSplashScreen_Show . . . . . . . P Near 00000244 _TEXT Length= 00000124 Public
aHandles . . . . . . . . . . . DWord bp - 00000018
hSplashWnd . . . . . . . . . . DWord bp - 0000001C
hdcScreen . . . . . . . . . . DWord bp - 00000020
- exit_Show . . . . . . . . . . L Near 00000326 _TEXT
-CSplashScreen_UnregisterWindowClass P Near 000004BE _TEXT Length= 00000019 Public STDCALL
+ exit_Show . . . . . . . . . . L Near 0000032E _TEXT
+CSplashScreen_UnregisterWindowClass P Near 000004C6 _TEXT Length= 00000019 Public STDCALL
lpTHIS . . . . . . . . . . . . DWord bp + 00000008
CallMsgFilterA . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
CallMsgFilterW . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
@@ -83242,7 +83243,7 @@ CancelTimerQueueTimer . . . . . P Near 00000000 FLAT Length= 00000000 External
CancelWaitableTimer . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
CascadeChildWindows . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
CascadeWindows . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
-CenterWindow . . . . . . . . . . P Near 0000088B _TEXT Length= 00000057 Public STDCALL
+CenterWindow . . . . . . . . . . P Near 00000893 _TEXT Length= 00000057 Public STDCALL
hWindow . . . . . . . . . . . DWord bp + 00000008
DlgHeight . . . . . . . . . . DWord bp - 00000004
DlgWidth . . . . . . . . . . . DWord bp - 00000008
@@ -85356,8 +85357,8 @@ OleSetContainedObject . . . . . P Near 00000000 FLAT Length= 00000000 External
OleSetMenuDescriptor . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
OleTranslateAccelerator . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
OleUninitialize . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
-OnDestroy . . . . . . . . . . . P Near 000008F6 _TEXT Length= 0000000A Public STDCALL
-OnPaint . . . . . . . . . . . . P Near 00000900 _TEXT Length= 00000003 Public STDCALL
+OnDestroy . . . . . . . . . . . P Near 000008FE _TEXT Length= 0000000A Public STDCALL
+OnPaint . . . . . . . . . . . . P Near 00000908 _TEXT Length= 00000003 Public STDCALL
OpenClipboard . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
OpenDesktopA . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
OpenDesktopW . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
@@ -86095,11 +86096,11 @@ StretchDIBits . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External
StringFromCLSID . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
StringFromGUID2 . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
StringFromIID . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
-StringToInt . . . . . . . . . . P Near 00000A97 _TEXT Length= 00000042 Public STDCALL
+StringToInt . . . . . . . . . . P Near 00000A9E _TEXT Length= 00000042 Public STDCALL
lpString . . . . . . . . . . . DWord bp + 00000008
- loopString . . . . . . . . . . L Near 00000AA9 _TEXT
- invalidInput . . . . . . . . . L Near 00000ACD _TEXT
- exit_StringToInt . . . . . . . L Near 00000AD2 _TEXT
+ loopString . . . . . . . . . . L Near 00000AB0 _TEXT
+ invalidInput . . . . . . . . . L Near 00000AD4 _TEXT
+ exit_StringToInt . . . . . . . L Near 00000AD9 _TEXT
StripLF . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
StripRangeI . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
StripRangeX . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
@@ -86253,7 +86254,7 @@ WinHelpA . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External
WinHelpW . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
WindowFromDC . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
WindowFromPoint . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
-WindowProc . . . . . . . . . . . P Near 000008E2 _TEXT Length= 00000014 Public STDCALL
+WindowProc . . . . . . . . . . . P Near 000008EA _TEXT Length= 00000014 Public STDCALL
WordCount . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
WriteClassStg . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
WriteClassStm . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
@@ -86341,7 +86342,6 @@ decomment . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External
dissort . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
dsqsort . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
dssort . . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
-dw2ah . . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
dw2a . . . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
dw2bin_ex . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
dw2hex_ex . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
@@ -86383,9 +86383,9 @@ lstrlenA . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External
lstrlenW . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
ltoa . . . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
ltok . . . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
-main . . . . . . . . . . . . . . P Near 00000903 _TEXT Length= 00000194 Public STDCALL
- exit_main_deallocate . . . . . L Near 00000A44 _TEXT
- exit_main . . . . . . . . . . L Near 00000A90 _TEXT
+main . . . . . . . . . . . . . . P Near 0000090B _TEXT Length= 00000193 Public STDCALL
+ exit_main_deallocate . . . . . L Near 00000A4B _TEXT
+ exit_main . . . . . . . . . . L Near 00000A97 _TEXT
memfill . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
mouse_event . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
nrQsortA . . . . . . . . . . . . P Near 00000000 FLAT Length= 00000000 External STDCALL
@@ -96133,8 +96133,8 @@ EnumTimeFormats . . . . . . . . Text EnumTimeFormatsW
EnumUILanguages . . . . . . . . Text EnumUILanguagesW
EnumWindowStations . . . . . . . Text EnumWindowStationsW
EnumerateLocalComputerNames . . Text EnumerateLocalComputerNamesW
-ErrorApp . . . . . . . . . . . . Byte 00000193 _DATA
-ErrorSettings . . . . . . . . . Byte 00000126 _DATA
+ErrorApp . . . . . . . . . . . . Byte 0000019C _DATA
+ErrorSettings . . . . . . . . . Byte 0000012C _DATA
EudcLoadLink . . . . . . . . . . Text EudcLoadLinkW
EudcUnloadLink . . . . . . . . . Text EudcUnloadLinkW
ExceptionCollidedUnwind . . . . Number 00000003h
@@ -124673,7 +124673,7 @@ endsel . . . . . . . . . . . . . Text endsw
fMapiUnicode . . . . . . . . . . Number 00000000h
fileName . . . . . . . . . . . . Word 0000010C _DATA
fileSize2 . . . . . . . . . . . LARGE_INTEGER 0000002A _DATA
-file . . . . . . . . . . . . . . DWord 000001C4 _DATA
+file . . . . . . . . . . . . . . DWord 000001CD _DATA
fnevCriticalError . . . . . . . Number 00000001h
fnevExtended . . . . . . . . . . Number -80000000h
fnevNewMail . . . . . . . . . . Number 00000002h
@@ -124718,10 +124718,10 @@ istring . . . . . . . . . . . . Text find$
lDefaultTab . . . . . . . . . . Number 000002D0h
lcase . . . . . . . . . . . . . Text szLower
lnstr . . . . . . . . . . . . . Text szLen
-lpModuleName . . . . . . . . . . DWord 000001D0 _DATA
-lpszAppFileName . . . . . . . . DWord 000001DC _DATA
-lpszImagePath . . . . . . . . . DWord 000001D4 _DATA
-lpszPrefix . . . . . . . . . . . DWord 000001D8 _DATA
+lpModuleName . . . . . . . . . . DWord 000001D9 _DATA
+lpszAppFileName . . . . . . . . DWord 000001E5 _DATA
+lpszImagePath . . . . . . . . . DWord 000001DD _DATA
+lpszPrefix . . . . . . . . . . . DWord 000001E1 _DATA
lst10 . . . . . . . . . . . . . Number 00000469h
lst11 . . . . . . . . . . . . . Number 0000046Ah
lst12 . . . . . . . . . . . . . Number 0000046Bh
@@ -124752,7 +124752,7 @@ m_nSplashHeight . . . . . . . . Number 000001F4h
m_nSplashWidth . . . . . . . . . Number 00000320h
midstr . . . . . . . . . . . . . Text szMid
mouse_eventC . . . . . . . . . . Number 00000002h
-nFadeoutTime . . . . . . . . . . DWord 000001CC _DATA
+nFadeoutTime . . . . . . . . . . DWord 000001D5 _DATA
psh10 . . . . . . . . . . . . . Number 00000409h
psh11 . . . . . . . . . . . . . Number 0000040Ah
psh12 . . . . . . . . . . . . . Number 0000040Bh
@@ -124801,7 +124801,7 @@ scr5 . . . . . . . . . . . . . . Number 00000494h
scr6 . . . . . . . . . . . . . . Number 00000495h
scr7 . . . . . . . . . . . . . . Number 00000496h
scr8 . . . . . . . . . . . . . . Number 00000497h
-splash . . . . . . . . . . . . . DWord 000001C8 _DATA
+splash . . . . . . . . . . . . . DWord 000001D1 _DATA
stc10 . . . . . . . . . . . . . Number 00000449h
stc11 . . . . . . . . . . . . . Number 0000044Ah
stc12 . . . . . . . . . . . . . Number 0000044Bh
@@ -125270,14 +125270,14 @@ tagTVSORTCB . . . . . . . . . . Text _TV_SORTCB
trim . . . . . . . . . . . . . . Text szTrim
uMsg . . . . . . . . . . . . . . Text DWORD PTR [esp + 8]
ucase . . . . . . . . . . . . . Text szUpper
-ucstr_char . . . . . . . . . . . Text dw "t"
+ucstr_char . . . . . . . . . . . Text dw "h"
ucstr_flg . . . . . . . . . . . Number 00000003h
ucstr_iarg . . . . . . . . . . . Number 00000005h
ucstr_lbl_cntr . . . . . . . . . Number 00000000h
ucstr_lbl . . . . . . . . . . . Text fileName
ucstr_pos . . . . . . . . . . . Number 00000001h
ucstr_quote . . . . . . . . . . Text "
-ucstr_size . . . . . . . . . . . Number 0000000Dh
+ucstr_size . . . . . . . . . . . Number 00000010h
vLabel . . . . . . . . . . . . . Number 00001000h
val . . . . . . . . . . . . . . Text uval
wnsprintf . . . . . . . . . . . Text wnsprintfW
diff --git a/Test - WinForms/Test - WinForms.csproj b/Test - WinForms/Test - WinForms.csproj
index 1e2b41d..6f81231 100644
--- a/Test - WinForms/Test - WinForms.csproj
+++ b/Test - WinForms/Test - WinForms.csproj
@@ -1,4 +1,4 @@
-
+
WinExe