 struct WNDCLASSEXA
       cbSize dd ?
       style dd ?
       lpfnWndProc dd ?
       cbClsExtra dd ?
       cbWndExtra dd ?
       hInstance dd ?
       hIcon dd ?
       hCursor dd ?
       hbrBackground dd ?
       lpszMenuName dd ?
       lpszClassName dd ?
       hIconSm dd ?
ends
 ;include 'c:\fasm\include\equates\winmm.inc'
 macro fldd chV { push dword chV
       fld dword [esp]
       pop eax }
 ;madmatta
macro return retval {  if ~ retval eq
                       mov eax, retval
                       end if
                       ret      }
;macro return  retval { ret }
 macro pushd value
{ match first=,more, value \{ \local ..continue
   call ..continue
   db value,0
   ..continue:
   pushd equ \}
  match pushd =addr var,pushd value \{ \local ..opcode,..address
   if +var relativeto 0 | +var relativeto $
    push var
   else
    lea edx,[var]
    push edx
   end if
   pushd equ \}
  match pushd =double [var],pushd value \{
   push dword [var+4]
   push dword [var]
   pushd equ \}
  match pushd =double =ptr var,pushd value \{
   push dword [var+4]
   push dword [var]
   pushd equ \}
  match pushd =double num,pushd value \{ \local ..high,..low
   virtual at 0
    dq num
    load ..low dword from 0
    load ..high dword from 4
   end virtual
   push ..high
   push ..low
   pushd equ \}
  match pushd,pushd \{ \local ..continue
   if value eqtype ''
    call ..continue
    db value,0
    ..continue:
   else
    push value
   end if
   pushd equ \}
  restore pushd }
