parse equ parse3        ;parse1, parse2 or parse3
		        ;Changing the line
		        ;cmp     [wParam],EN_CHANGE shl 16 + IDEDITDEC
		        ;to anything else (...HEX, ...BIN or ..._N_)
		        ;renders it to working version

format pe gui 4.0
message rb 16
caption db "Hello, there!",0
entry start

include '%fasminc%\win32a.inc'

section '.code' code readable executable
start:
invoke GetModuleHandle,0
invoke DialogBox,eax,37,HWND_DESKTOP,DialogProc,0
	or	eax,eax
	jz	exit
	invoke	MessageBox,HWND_DESKTOP,message,caption,MB_OK
exit:
invoke ExitProcess,0
proc DialogProc,hWnd,msg,wParam,lParam
    push ebx esi edi
  .Cont:
    cmp  [msg],WM_COMMAND
    je	 command
    cmp  [msg],WM_CLOSE
    je	 close
    xor eax,eax
    jmp finish
  command:
	cmp     [wParam],EN_CHANGE shl 16 + IDEDITDEC	     ;Pay attention to this part!!!
	je	parse
	cmp     [wParam],BN_CLICKED shl 16 + IDCANCEL
	je	close
	cmp     [wParam],BN_CLICKED shl 16 + IDOK
	jne	processed
	invoke	GetDlgItemText,[hWnd],IDEDIT,message,0Ah
	invoke	EndDialog,[hWnd],1
	jmp	processed
  parse1:       ;This way it works, but its not my goal
	        ;Here DEC is read and HEX is written
	invoke	GetDlgItemText,[hWnd],IDEDITDEC,caption+64,10h
	add	dword[caption+64],01010101h
	add	dword[caption+68],01010101h
	mov     [wParam],0
	mov     [lParam],0
	invoke	SetDlgItemText,[hWnd],IDEDITHEX,caption+64
	jmp	processed
  parse2:       ;This is the version where stack overflow happens
	        ;Here HEX is read and DEC is written
	invoke	GetDlgItemText,[hWnd],IDEDITHEX,caption+64,10h
	add	dword[caption+64],01010101h
	add	dword[caption+68],01010101h
	mov     [wParam],0
	mov     [lParam],0
	invoke	SetDlgItemText,[hWnd],IDEDITDEC,caption+64
	jmp	processed
  parse3:       ;In this version it quits immediately
	        ;Here DEC is read and written back to(modified)
	invoke	GetDlgItemText,[hWnd],IDEDITDEC,caption+64,10h
	add	dword[caption+64],01010101h
	add	dword[caption+68],01010101h
	mov     [wParam],0
	mov     [lParam],0
	invoke	SetDlgItemText,[hWnd],IDEDITDEC,caption+64
	jmp	processed
  close:
	invoke	EndDialog,[hWnd],0
  processed:
	mov	eax,1
  finish:
	pop	edi esi ebx
	return
endp

section '.idata' import data readable writeable
library kernel,'kernel32.dll',user,'user32.dll'
import kernel,GetModuleHandle,'GetModuleHandleA',ExitProcess,'ExitProcess'
import user,DialogBox,'DialogBoxParamA',GetDlgItemText,'GetDlgItemTextA',SetDlgItemText,'SetDlgItemTextA',MessageBox,'MessageBoxA',EndDialog,'EndDialog'
align 16
var dd  4h

section '.rsrc' resource data readable
directory RT_DIALOG,dialogs
resource dialogs,37,LANG_RUSSIAN+SUBLANG_DEFAULT,_dialog
IDEDIT=105
IDBIN=02
IDDEC=10
IDHEX=16
ID_N_=99
IDEDITBIN=102
IDEDITDEC=110
IDEDITHEX=116
IDEDIT_N_=199
dialog _dialog,'Astendaja',0,0,200,80,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME
       dialogitem 'STATIC','DEC:',IDDEC,0,5,22,12,WS_VISIBLE+WS_BORDER+ES_CENTER
       dialogitem 'STATIC','BIN:',IDBIN,0,20,22,12,WS_VISIBLE+WS_BORDER+ES_CENTER
       dialogitem 'STATIC','HEX:',IDHEX,0,35,22,12,WS_VISIBLE+WS_BORDER+ES_CENTER
       dialogitem 'STATIC','n:',ID_N_,0,50,10,12,WS_VISIBLE+WS_BORDER+ES_CENTER
       dialogitem 'EDIT','12345678',IDEDITDEC,22,5,178,12,WS_VISIBLE+WS_BORDER+WS_TABSTOP+ES_AUTOHSCROLL
       dialogitem 'EDIT','101111000110000101001110',IDEDITBIN,22,20,178,12,WS_VISIBLE+WS_BORDER+WS_TABSTOP+ES_AUTOHSCROLL
       dialogitem 'EDIT','BC614E',IDEDITHEX,22,35,178,12,WS_VISIBLE+WS_BORDER+WS_TABSTOP+ES_AUTOHSCROLL
       dialogitem 'EDIT','36',IDEDIT,10,50,12,12,WS_VISIBLE+WS_BORDER+WS_TABSTOP+ES_CENTER
       dialogitem 'EDIT','7CLZI',IDEDIT_N_,22,50,178,12,WS_VISIBLE+WS_BORDER+WS_TABSTOP+ES_AUTOHSCROLL
       dialogitem 'BUTTON','&Reset All',IDOK,10,65,40,13,WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON
       dialogitem 'BUTTON','E&xit',IDCANCEL,160,65,40,13,WS_VISIBLE+WS_TABSTOP
enddialog