;=======================================================================
format PE GUI 4.0
;=======================================================================
include 'win32a.inc'    ;*
include 'rc.inc'        ;*
;=======================================================================
section '.code' code readable executable

entry $

    invoke GetModuleHandle,0
    mov [hInstance],eax
    invoke DialogBoxParam,eax,D_MAIN,0,dlg_proc,0
    invoke ExitProcess,0

;=======================================================================
proc dlg_proc, hWnd, uMsg, wParam, lParam
    cmp [uMsg],WM_CLOSE
    jne @F
.end_dlg:
    invoke EndDialog,[hWnd],0
.exit_true:
    mov eax,TRUE
    ret
@@:
    cmp [uMsg],WM_INITDIALOG
    jne @F
    invoke CreateFile,com1,GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0
    cmp eax,INVALID_HANDLE_VALUE
    je .ThrowError
    mov [FileHandle],eax
    invoke DefDlgProc,[hWnd],WM_NEXTDLGCTL,B_SET,TRUE
    jmp .exit_true
@@:    
;-----------------------------------------------------------------------
;    cmp [uMsg],?? << add new message
;    jne @F
;    
;    jmp .exit_true
;@@:    
;-----------------------------------------------------------------------
    cmp [uMsg],WM_COMMAND
    jne .exit_false
    mov eax,[wParam] ; Start looking for hotkeys
    dec eax                ; case 1 of wparam = enter pressed
    jz .SET                 ; enter key = toggle break status 
    dec eax                ; case 2 of wparam = esc pressed
    jz .end_dlg            ; esc = close window
;-----------------------------------------------------------------------
    cmp [wParam],B_CLEAR
    jne @F
.CLEAR:
    invoke ClearCommBreak,[FileHandle]
    call GetError
    invoke SetDlgItemText,[hWnd],EDIT_1,ErrorMsg
    jmp .exit_true
@@:
;-----------------------------------------------------------------------
    cmp [wParam],B_SET
    jne @F
.SET:
    invoke SetCommBreak,[FileHandle]
    call GetError
    invoke SetDlgItemText,[hWnd],EDIT_1,ErrorMsg
    invoke DefWindowProc,[hWnd],WM_NEXTDLGCTL,B_CLEAR,TRUE
    jmp .exit_true
@@:
;-----------------------------------------------------------------------
;    cmp [wParam],?? ; << add new command
;    jne @F
;    jmp .exit_true
;@@:
;-----------------------------------------------------------------------
.exit_false:
    xor eax,eax
    ret
;-----------------------------------------------------------------------
.ThrowError:
    invoke MessageBox,0,ErrorMsg,SerialErr,MB_OK
    jmp .end_dlg
;-----------------------------------------------------------------------
.Toggle:
    mov eax,[CommBreak]
    cmp eax,TRUE
    je B_CLEAR
    jmp B_SET
endp

proc GetError
    invoke GetLastError
    mov [ErrNum],eax
    invoke wsprintf,ErrorMsg,wstr,[ErrNum]
    add esp,12
	ret
endp
;=======================================================================

;=======================================================================
include 'idata.inc'
include  'data.inc'
;=======================================================================
section '.rsrc' resource data readable
;-----------------------------------------------------------------------
  directory RT_DIALOG,dialogs

;-----------------------------------------------------------------------
include "dialogs.tab" ;*
;-----------------------------------------------------------------------
include "dialogs.dat" ;*
;=======================================================================

