format PE GUI 4.0
entry start

include '%fasminc%\win32a.inc'
include 'RICHED32.INC'

macro m_message reg, [msg, msgHandler] {
	cmp  reg,msg
	je   msgHandler
}

section '.data' data readable writeable
	ctlClsNameRe	db 'Riched32.dll',0
	ppH				dd ?
	
	f0  rb 0xFF
	f1	db '%lu',0
	f2	dd 340
	
	t1	db 'The callback function returns a nonzero value to indicate an error.',13,10,0
	t2	db 'An EM_AUTOURLDETECT message enables or disables automatic detection of URLs by a rich edit control.',13,10,0
	
	siSize dd ?
	
	chatEs			EDITSTREAM

section '.code' code readable executable

	start:
		invoke	LoadLibrary,ctlClsNameRe
				cmp  eax,NULL
				je   exit
		invoke	GetModuleHandle,NULL
		invoke	DialogBoxParam,eax,DLG_MAIN,HWND_DESKTOP,proc_dialog,0

	exit:
		invoke	ExitProcess,0

		
proc proc_dialog hwnd,msg,wparam,lparam
				push ebx esi edi

				mov  eax,[msg]
	m_message	eax,\
				WM_INITDIALOG, .wmINITDIALOG,\
				WM_CLOSE, .wmCLOSE
				xor  eax,eax
				jmp  .finish

	.wmINITDIALOG:
		invoke	GetDlgItem,[hwnd],ID_PP
				mov  [ppH],eax
	;	invoke	SetWindowText,[ppH],t1

		invoke	lstrlen,t1
				mov  [siSize],eax
				mov  [chatEs.dwCookie],t2
				mov  [chatEs.dwError],1
				mov  [chatEs.pfnCallback],proc_streamin_callback
		invoke	SendMessage,[ppH],EM_STREAMIN,SF_TEXT,chatEs
		
				jmp  .processed

	.wmCLOSE:
		invoke	EndDialog,[hwnd],0
	
	.processed:
				mov  eax,TRUE
	
	.finish:
				pop  edi esi ebx
				ret
endp

proc proc_streamin_callback dwCookie,pbBuff,maByte,transByte
				push ebx esi edi
	
				; the maByte value is 4kb

				push [siSize]
				pop  [transByte]
		invoke	RtlMoveMemory,[pbBuff],[dwCookie],[transByte]

		invoke	MessageBox,NULL,[pbBuff],f0,MB_OK

				; mov  eax,0 <- result error if eax = 0
	
				pop  edi esi ebx
				ret
endp

section '.idata' import data readable
	library	kernel32,'KERNEL32.DLL',\
			user32,	 'USER32.DLL',\
			comctl32,'COMCTL32.DLL'

	include '%fasminc%\apia\Kernel32.inc'
	include '%fasminc%\apia\User32.inc'
	include '%fasminc%\apia\Comctl32.inc'
	
section '.rsrc' resource data readable

	DLG_MAIN	= 0x30
	ID_PP		= 0x102
	
	directory	RT_DIALOG,dialogs
	
		resource	dialogs,\
					DLG_MAIN,LANG_ENGLISH+SUBLANG_DEFAULT,main
		
		dialog	main,'TESTING testing',60,60,100,200,\
				DS_MODALFRAME + WS_MINIMIZEBOX + WS_CAPTION + WS_SYSMENU + WS_VISIBLE
			
			dialogitem 'RichEdit','',ID_PP,3,10,90,160,WS_VISIBLE+WS_BORDER+WS_VSCROLL+ES_MULTILINE+ES_DISABLENOSCROLL
	enddialog