mov eax,msg.wparam
ret
winmain endp
wndproc proc hwnd:hwnd, umsg:uint, wparam:wparam, lparam:lparam
local startinfo:startupinfo
.if umsg==wm_destroy
invoke postquitmessage,null
.elseif umsg==wm_initmenupopup
invoke getexitcodeprocess,processinfo.hprocess,addr exitcode
.if eax==true
.if exitcode==still_active
invoke enablemenuitem,hmenu,idm_create_process,mf_grayed
invoke enablemenuitem,hmenu,idm_terminate,mf_enabled
.else
invoke enablemenuitem,hmenu,idm_create_process,mf_enabled
invoke enablemenuitem,hmenu,idm_terminate,mf_grayed
.endif
.else
invoke enablemenuitem,hmenu,idm_create_process,mf_enabled
invoke enablemenuitem,hmenu,idm_terminate,mf_grayed
.endif
.elseif umsg==wm_command
mov eax,wparam
.if lparam==0
.if ax==idm_create_process
.if processinfo.hprocess!=0
invoke closehandle,processinfo.hprocess
mov processinfo.hprocess,0
.endif
invoke getstartupinfo,addr startinfo
invoke createprocess,addr programname,null,null,null,false,\
normal_priority_class,\
null,null,addr startinfo,addr processinfo
invoke closehandle,processinfo.hthread
.elseif ax==idm_terminate
invoke getexitcodeprocess,processinfo.hprocess,addr exitcode
.if exitcode==still_active
invoke terminateprocess,processinfo.hprocess,0
.endif
invoke closehandle,processinfo.hprocess
mov processinfo.hprocess,0
.else
invoke destroywindow,hwnd