@rrtt db "%X",0
      db '%d',0
@hmenu dd 0
MenuItemCount dd 0
wc              WNDCLASSEX
mhwnd  dd 0
do_exit db 0
rectMainWindow dd 0,0,0,0
wndcls db 'remot',0
align 16
xmfltTxt:
rept 8 n:0 {
 db 'movss xmm'#`n#',[',0
align 16  }

align 32
xmvec4Txt:
rept 8 n:0 {
 db 'movups xmm'#`n#',xword [',0
align 32  }

macro prInt v {
   cinvoke sprintf,Status22+300,@rrtt+3,v
Msg Status22+300
}
macro prHex v {
   cinvoke sprintf,Status22+300,@rrtt,v
Msg Status22+300
}
proc WndProc  hWnd, msg, wParam, lParam
              ;local ps:PAINTSTRUCT
rept 0 {
.if [msg] = WM_CREATE
invoke GetMenu,[hWnd]
mov [@hmenu],eax
invoke GetMenuItemCount,eax
mov [MenuItemCount],eax
prInt eax

 mov dword [Status22],7*4
 MIM_MENUDATA = 0x8
mov dword [Status22+4],MIM_MENUDATA;+16  ;fMask
invoke GetMenuInfo,[@hmenu],Status22
invoke GetLastError
prHex eax
prInt dword [Status22+4]

 mov dword [Status22],12*4
invoke GetMenuItemInfo,[@hmenu],0,MF_BYPOSITION,Status22
prInt dword [Status22]
mov eax,[lParam]
test eax,eax
jz .kk
        ;invoke GetMenuItemInfo,[hWnd],[lParam],MF_BYPOSITION,Status22
        ;invoke GetMenuInfo,[eax+8],Status22
        ;mov dword [Status22+4],10h
        MNS_NOTIFYBYPOS = 0x08000000
        ;mov dword [Status22+8],MNS_NOTIFYBYPOS
mov eax,[lParam]
        ;invoke SetMenuInfo,[eax+8],Status22

 .kk:   invoke AppendMenu,[@hmenu],MF_STRING + MNS_NOTIFYBYPOS,0,@rrtt
        return 0
.endif
.if [msg] = WM_MENUCOMMAND     ;nado flag menu style MNS_NOTIFYBYPOS
    invoke GetMenuStringA,[lParam],0,outTxt,100,MF_BYPOSITION
    Msg outTxt
    return 0
.endif
}

 rept 0 {
.if [msg] = WM_MENUCOMMAND     ;nado flag menu style MNS_NOTIFYBYPOS
    invoke GetMenuStringA,[lParam],0,outTxt,100,MF_BYPOSITION
    Msg outTxt
    return 0
.endif

.if [msg] = 0x0126 ;WM_INITMENUPOPUP ;WM_MENUSELECT
    ;.if [wParam] = IDM_hiden+1
    ;cmp word [wParam+2],0x1         ;flag
    ;jnz quwmji0
    ;invoke GetSubMenu,[lParam],0      ;handl menu = [lParam]
    movzx edx,word [wParam]           ;menuItem
    invoke GetMenuStringA,[hWnd],0,outTxt,100,MF_BYCOMMAND
    Msg outTxt
    ;invoke  DefWindowProc, [hWnd], [msg], [wParam], [lParam]
    return ;0
quwmji0:
    ;.endif
.endif
}

.if [msg] = WM_COMMAND
          movzx eax,word [wParam]
          sub eax,IDM_xmfloat
          cmp eax,8
          ja .11
          shl eax,4
          add eax,xmfltTxt
          ;Msg eax
          call prxmfloattext
          return 0
.11:
          movzx eax,word [wParam]
          sub eax,IDM_xmvec4
          cmp eax,8
          ja .12
          shl eax,5
          add eax,xmvec4Txt
          ;Msg eax
          call prxmfloattext
          return 0
.12:    .if [wParam] = IDM_NEW
	call prNewfile
        return 0
        .endif
	.if [wParam] = IDM_math
	call prCalcMathxm
        return 0
        .endif
	.if [wParam] = IDM_clearcombo
        call prClearCombo
        return 0
        .endif
        .if [wParam] = IDM_include
        call prIncludecopy
        return 0
        .endif
        .if [wParam] = IDM_macro
        call prSelectMacro
        return 0
        .endif
        .if [wParam] = IDM_proc
        call prSelectProc
        return 0
        .endif
        .if [wParam] = IDM_proclb
        call prSelectProc2
        return 0
        .endif
        .if [wParam] = IDM_hiden
        call hidennumsbutns
        return 0
        .endif
        .if [wParam] = IDM_CFUN
        call prCFunction
        return 0
        .endif
        .if [wParam] = IDM_OPEN
        call loadtTxt
        return 0
        .endif
        .if [wParam] = IDM_pincombo
        call prPin
        return 0
        .endif
        .if [wParam] = IDM_enter
        call prEnter
        return 0
        .endif
        .if [wParam] = IDM_Find
        call prFind
        return 0
        .endif
        .if [wParam] = IDM_Findnxt
        call prFindnxt
        return 0
        .endif
        .if [wParam] = IDM_Undo
        call prUndo
        return 0
        .endif
        .if [wParam] = IDM_Cut
        call prCut
        return 0
        .endif
        .if [wParam] = IDM_Tab
        call prTab
        return 0
        .endif
        .if [wParam] = IDM_Paste
        call prPaste
        return 0
        .endif
        .if [wParam] = IDM_interface
        call prConvrtCInterface
        return 0
        .endif
        .if [wParam] = IDM_UsrColor
        call getUserFileRGBColors
        invoke  SendMessage,[hwnd],FEM_SETSYNTAXHIGHLIGHT,asm_syntax_colors,fasm_syntax
        invoke  SendMessage,[hwnd],FEM_SETTEXTCOLOR,dword [ClrTxtFedit],dword [ClrBackground]
        return 0
        .endif

        .if [wParam] = IDM_SAVE
        ;mov eax,[wParam]
        ;and eax,0FFFFh
        ;cmp eax,IDM_EDIT
        ;jnz quwmjij
        ;Msg wndcls
        call saveFile
        return 0
        .endif
quwmjij:
.endif
                cmp [msg], WM_DROPFILES
                jnz Ohh
                mov eax,[wParam]
                invoke DragQueryFile,eax, 0, path2file, MAX_PATH  ;0xFFFFFFFF
invoke SetWindowTextA,[mhwnd],path2file
                 ;Msg  path2file  
                
          mov edx,zbuf2
          mov eax,path2file
          call    LoadFile
mov dword [zbuf2+edx],0
          invoke  SendMessage,[hwnd],WM_SETTEXT,0,zbuf2
          ret
                return 0
                Ohh:
     .if [msg]= WM_LBUTTONDOWN
      ;Msg  wwttxt2
     return 0
     .endif
.if [msg] = WM_SIZE  

invoke GetClientRect,[mhwnd], rectMainWindow
invoke MoveWindow,[hwnd],[rectMainWindow],[rectMainWindow+4],[rectMainWindow+8], [rectMainWindow+12],1
return 0
     .endif

     .if [msg] = WM_KEYDOWN
             .if     [wParam] = VK_ESCAPE

                     invoke  PostQuitMessage,dword 0
NeaNoExit:   return 0
             .endif
     .endif
     .if [msg]= WM_LBUTTONUP

     return 0
     .endif
     .if [msg] = WM_PASTE
;invoke     SendMessage,[hwnd],WM_PASTE,0,0
              return 0
     .endif

     .if [msg] = WM_KEYDOWN

              return 0
     .endif

     .if [msg] = WM_CLOSE

             ;invoke  PostQuitMessage, dword 0
                mov byte [do_exit],1
             return 0
             .endif

     .if [msg] = WM_DESTROY

             invoke  PostQuitMessage,dword 0
             return 0
     .endif
;??? DefWindowProc ?? ????? ????? ????. ??? ????? !!! ???? ShowWindow ?? ???????!!!
     invoke  DefWindowProc, [hWnd], [msg], [wParam], [lParam]
     return
endp
         