
; DialogBox example

format PE GUI 4.0
entry start

;include 'include\win32a.inc'
include 'include\win32ax.inc'

ID_CAPTION	   = 101
ID_MESSAGE	   = 102
ID_ICONERROR	   = 201
ID_ICONINFORMATION = 202
ID_ICONQUESTION    = 203
ID_ICONWARNING	   = 204
ID_TOPMOST	   = 301

section '.data' readable writeable

fpnum1 dd -1.75
fpnum2 dd -1.5
text1 db "above or equal",0
text2 db "done",0
c1 db "c1",0
c2 db "c2",0




currsizebuff1 dd 8000
buff1pointer dd 0

section '.text' code readable executable

  start:

	invoke	GetModuleHandle,0
	invoke	DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
	or	eax,eax
	jz	exit
	invoke	MessageBox,HWND_DESKTOP,message,caption,[flags]
  exit:
	invoke	ExitProcess,0

proc DialogProc hwnddlg,msg,wparam,lparam
	push	ebx esi edi
	cmp	[msg],WM_INITDIALOG
	je	wminitdialog
	cmp	[msg],WM_COMMAND
	je	wmcommand
	cmp	[msg],WM_CLOSE
	je	wmclose
	xor	eax,eax
	jmp	finish
  wminitdialog:
	invoke	CheckRadioButton,[hwnddlg],ID_ICONERROR,ID_ICONWARNING,ID_ICONINFORMATION
	jmp	processed
  wmcommand:
	cmp	[wparam],BN_CLICKED shl 16 + IDCANCEL
	je	wmclose
	cmp	[wparam],BN_CLICKED shl 16 + IDOK
	jne	processed
	invoke	GetDlgItemText,[hwnddlg],ID_CAPTION,caption,40h
	invoke	GetDlgItemText,[hwnddlg],ID_MESSAGE,message,100h
	;mov     [flags],MB_OK
	;invoke  IsDlgButtonChecked,[hwnddlg],ID_ICONERROR
	;cmp     eax,BST_CHECKED
	;jne     .iconerror_ok
	;or      [flags],MB_ICONERROR
      ;.iconerror_ok:
      ;  invoke  IsDlgButtonChecked,[hwnddlg],ID_ICONINFORMATION
      ;  cmp     eax,BST_CHECKED
      ;  jne     .iconinformation_ok
      ;  or      [flags],MB_ICONINFORMATION
      ;.iconinformation_ok:
      ;  invoke  IsDlgButtonChecked,[hwnddlg],ID_ICONQUESTION
      ;  cmp     eax,BST_CHECKED
      ;  jne     .iconquestion_ok
      ;  or      [flags],MB_ICONQUESTION
      ;.iconquestion_ok:
      ;  invoke  IsDlgButtonChecked,[hwnddlg],ID_ICONWARNING
      ;  cmp     eax,BST_CHECKED
      ;  jne     .iconwarning_ok
      ;  or      [flags],MB_ICONWARNING
      ;.iconwarning_ok:
      ;  invoke  IsDlgButtonChecked,[hwnddlg],ID_TOPMOST
      ;  cmp     eax,BST_CHECKED
      ;  jne     .topmost_ok
      ;  or      [flags],MB_TOPMOST
      ;.topmost_ok:
      ;  invoke  EndDialog,[hwnddlg],1
      ;  jmp     .processed
allocmemstart:
      call [GetProcessHeap]
      test eax,eax
      jnz tovabb1

      ;invoke     MessageBox,HWND_DESKTOP,'noheap',0,MB_OK
      jmp tovabb3
tovabb1:
      mov ebx,[currsizebuff1]
      shr ebx,1
      lea ebx,[ebx+ebx*2]
      push ebx
      mov ecx,[buff1pointer]
      test ecx,ecx
      jz contallocate
       push ecx
       mov ecx,4
contallocate:
      push 4
      push eax
      call [HeapAlloc+ecx]
      test eax,eax
      jnz tovabb2

      ;invoke     MessageBox,HWND_DESKTOP,"cant alloc",0,MB_OK
      jmp tovabb3
tovabb2:
      mov [buff1pointer],eax
      add [currsizebuff1],ebx
      cmp ebx,300000000
      jb allocmemstart

      xor ecx,ecx
      mov edi,[buff1pointer]
      mov esi,-1
      mov eax,1
      invoke	 MessageBox,HWND_DESKTOP,c1,0,MB_OK
ciklus1:
      imul esi
      mov [edi+ecx],al
      inc ecx
      ;invoke     MessageBox,HWND_DESKTOP,'c1in',0,MB_OK
      cmp ecx,ebx
      jnz ciklus1

      mov eax,[edi+ecx]
      invoke	 MessageBox,HWND_DESKTOP,c2,0,MB_OK
ciklus2:
      ;invoke     MessageBox,HWND_DESKTOP,'c2in',0,MB_OK
      dec ecx
      mov al,[edi+ecx]
      test ecx,ecx
      jnz ciklus2



tovabb3:
      finit
      fld dword[fpnum1]
      fld dword[fpnum2]
      fcomi st1
      jc lab1




     invoke	MessageBox,HWND_DESKTOP,text1,0,MB_OK

 lab1:
     invoke	 MessageBox,HWND_DESKTOP,text2,0,MB_OK








  wmclose:
	invoke	EndDialog,[hwnddlg],0
  processed:
	mov	eax,1
  finish:
	pop	edi esi ebx
	ret
endp

section '.bss' readable writeable

  flags dd ?
  caption rb 40h
  message rb 100h

section '.idata' import data readable writeable

  library kernel,'KERNEL32.DLL',\
	  user,'USER32.DLL'

  import kernel,\
	 GetModuleHandle,'GetModuleHandleA',\
	 ExitProcess,'ExitProcess',\
	 HeapAlloc,'HeapAlloc',\
	 HeapReAlloc,'HeapReAlloc',\
	 GetProcessHeap,'GetProcessHeap'

  import user,\
	 DialogBoxParam,'DialogBoxParamA',\
	 CheckRadioButton,'CheckRadioButton',\
	 GetDlgItemText,'GetDlgItemTextA',\
	 IsDlgButtonChecked,'IsDlgButtonChecked',\
	 MessageBox,'MessageBoxA',\
	 EndDialog,'EndDialog'

section '.rsrc' resource data readable

  directory RT_DIALOG,dialogs

  resource dialogs,\
	   37,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration

  dialog demonstration,'Create message box',70,70,190,175,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME
    dialogitem 'STATIC','&Caption:',-1,10,10,70,8,WS_VISIBLE
    dialogitem 'EDIT','',ID_CAPTION,10,20,170,13,WS_VISIBLE+WS_BORDER+WS_TABSTOP
    dialogitem 'STATIC','&Message:',-1,10,40,70,8,WS_VISIBLE
    dialogitem 'EDIT','',ID_MESSAGE,10,50,170,13,WS_VISIBLE+WS_BORDER+WS_TABSTOP+ES_AUTOHSCROLL
    dialogitem 'BUTTON','&Icon',-1,10,70,80,70,WS_VISIBLE+BS_GROUPBOX
    dialogitem 'BUTTON','&Error',ID_ICONERROR,20,82,60,13,WS_VISIBLE+BS_AUTORADIOBUTTON+WS_TABSTOP+WS_GROUP
    dialogitem 'BUTTON','I&nformation',ID_ICONINFORMATION,20,95,60,13,WS_VISIBLE+BS_AUTORADIOBUTTON
    dialogitem 'BUTTON','&Question',ID_ICONQUESTION,20,108,60,13,WS_VISIBLE+BS_AUTORADIOBUTTON
    dialogitem 'BUTTON','&Warning',ID_ICONWARNING,20,121,60,13,WS_VISIBLE+BS_AUTORADIOBUTTON
    dialogitem 'BUTTON','&Style',-1,100,70,80,70,WS_VISIBLE+BS_GROUPBOX
    dialogitem 'BUTTON','&Top most',ID_TOPMOST,110,82,60,13,WS_VISIBLE+WS_TABSTOP+BS_AUTOCHECKBOX
    dialogitem 'BUTTON','OK',IDOK,85,150,45,15,WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON
    dialogitem 'BUTTON','C&ancel',IDCANCEL,135,150,45,15,WS_VISIBLE+WS_TABSTOP+BS_PUSHBUTTON
  enddialog
