home *** CD-ROM | disk | FTP | other *** search
/ DOS Wares / doswares.zip / doswares / LANGUAGE / BPASCAL / TASMEXMP.ZIP / WINPROG.ASM < prev    next >
Encoding:
Assembly Source File  |  1993-03-09  |  7.0 KB  |  234 lines

  1. ; Turbo Assembler    Copyright (c) 1988, 1991 By Borland International, Inc.
  2.  
  3. ; WINPROG.ASM - Template for writing windows programs
  4.  
  5. ; From the Turbo Assembler Users Guide
  6.  
  7. MULTIPLE_INST = 0       ;set to 1 to allow multiple instances of
  8.                         ; the program, 0 otherwise.
  9.  
  10. LOCALS
  11. .MODEL LARGE, WINDOWS PASCAL
  12. .286
  13.  
  14. INCLUDE WINDOWS.INC
  15. INCLUDE WINPROG.ASH
  16.  
  17. extrn   INITTASK:PROC
  18. extrn   WAITEVENT:PROC
  19. extrn   INITAPP:PROC
  20. extrn   REGISTERCLASS:PROC
  21. extrn   MESSAGEBOX:PROC
  22. extrn   GETSTOCKOBJECT:PROC
  23. extrn   LOADCURSOR:PROC
  24. extrn   CREATEWINDOW:PROC
  25. extrn   SHOWWINDOW:PROC
  26. extrn   UPDATEWINDOW:PROC
  27. extrn   GETMESSAGE:PROC
  28. extrn   TRANSLATEMESSAGE:PROC
  29. extrn   DISPATCHMESSAGE:PROC
  30. extrn   POSTQUITMESSAGE:PROC
  31. extrn   DEFWINDOWPROC:PROC
  32. extrn   BEGINPAINT:PROC
  33. extrn   ENDPAINT:PROC
  34. extrn   INVALIDATERECT:PROC
  35. extrn   TEXTOUT:PROC
  36. extrn   LOADSTRING:PROC
  37. extrn   LOADICON:PROC
  38.  
  39. ;Our DLL function
  40. extrn PASCAL SETHELLO:FAR          ;DLL function in DLLPROG.ASM
  41.  
  42. .DATA
  43.             db    16 dup( 0 ) ; Required for Task Header!!
  44. psp         dw       ?
  45. pszCmdline  dw       ?
  46. hPrev       dw       ?
  47. hInstance   dw       ?
  48. nCmdShow    dw       ?
  49. hdc         dw       ?
  50.  
  51. hwndMain    dw       0
  52. ps          PAINTSTRUCT <0>
  53. msg         MSGSTRUCT   <0>
  54. wc          WNDCLASS    <0>
  55.  
  56.  
  57. szTitleName     db  'Sample Windows App',0
  58. szClassName     db  "$un$Peu$d'Assemblage$",0
  59. szDllText       db  80 dup (0)
  60. szRcText        db  40 dup (0)
  61. szLButtonDown   db  'Left Button down',0
  62. szInfo          db  'Info',0
  63. szWinprog       db  'WinProg',0
  64.  
  65. .CODE
  66.  
  67. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;
  68. InitApplication     PROC
  69.             ;; initialize the WndClass structure
  70.             mov    wc.clsStyle, CS_HREDRAW+CS_VREDRAW
  71.             mov    word ptr wc.clsLpfnWndProc, OFFSET WndProc
  72.             mov    word ptr wc.clsLpfnWndProc+2, SEG WndProc
  73.             mov    wc.clsCbClsExtra, 0
  74.             mov    wc.clsCbWndExtra, 0
  75.             mov    ax, hInstance
  76.             mov    wc.clsHInstance, ax
  77.             push   ax
  78.             call   LoadIcon PASCAL, ax, DS, OFFSET szWinProg
  79.             mov    wc.clsHIcon, ax
  80.             pop    ax
  81.  
  82.             call   GetStockObject PASCAL, WHITE_BRUSH
  83.             mov    wc.clsHbrBackground, ax
  84.  
  85.             mov    word ptr wc.clsLpszMenuName, 0
  86.             mov    word ptr wc.clsLpszMenuName+2, 0
  87.  
  88.             mov    word ptr wc.clsLpszClassName, OFFSET szClassName
  89.             mov    word ptr wc.clsLpszClassName+2, ds
  90.  
  91.             call   RegisterClass PASCAL, DS, OFFSET wc
  92.             ret
  93. ENDP
  94.  
  95.  
  96. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;
  97. Start:
  98. ;Windows initialization.  Sets up registers and stack.
  99.  
  100.             ;INITTASK returns:
  101.             ;  'Failure:
  102.             ;    AX = zero if it failed
  103.             ;  Success:
  104.             ;    AX = 1
  105.             ;    CX = stack limit
  106.             ;    DX = cmdShow parameter to CreateWindow
  107.             ;    ES:BX = -> DOS format command line (ES = PSP address)
  108.             ;    SI = hPrevinstance
  109.             ;    DI = hinstance
  110.             call    INITTASK
  111.             or      ax,ax
  112.             jnz     @@OK
  113.             jmp     @@Fail
  114.  
  115. @@OK:       mov     psp, es
  116.             mov     word ptr pszCmdline, bx
  117.             mov     hPrev, si
  118.             mov     hInstance, di
  119.             mov     nCmdShow, dx
  120.  
  121. ;Initialize the Windows App
  122.             xor     ax,ax
  123.             call    WAITEVENT PASCAL, ax
  124.             call    INITAPP   PASCAL, hInstance
  125.             or      ax,ax
  126.             jnz     @@InitOK
  127.  
  128. @@Fail:     mov     ax, 4CFFh
  129.             int     21h          ; terminate program
  130.  
  131. @@InitOK:   cmp     hPrev, 0
  132.             jne     @@RegOK
  133.             call    InitApplication
  134.             or      ax, ax
  135.             jz      @@Fail
  136.  
  137. @@RegOK:    xor     ax, ax
  138.             mov     bx, CW_USEDEFAULT
  139.             call    CreateWindow PASCAL, DS OFFSET szClassName, DS,\
  140.                     OFFSET szTitleName,                            \
  141.                     WS_OVERLAPPEDWINDOW+WS_VISIBLE, ax,            \
  142.                     bx, bx, bx, bx, ax, ax, hInstance, ax, ax
  143.             mov     hwndMain, ax
  144.             call    ShowWindow PASCAL, ax, nCmdShow
  145.             call    UpdateWindow PASCAL, hwndMain
  146.  
  147. @@MsgLoop:  call    GetMessage PASCAL, DS, OFFSET msg, 0, 0, 0
  148.             or      ax, ax
  149.             jz      @@End
  150.             call    TranslateMessage PASCAL, DS, OFFSET msg
  151.             call    DispatchMessage PASCAL, DS, OFFSET msg
  152.             jmp     @@MsgLoop
  153.  
  154. @@End:      mov     ax, msg.msWPARAM
  155.             mov     ah, 4Ch
  156.             int     21h
  157.  
  158.  
  159. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;
  160. .DATA
  161. MSGINFO STRUC
  162.         MsgValue    dw  0
  163.         MsgHandler  dw  0
  164. MSGINFO ENDS
  165.  
  166.  
  167. .CODE
  168. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;
  169. PaintHandler  PROC   PASCAL NEAR hwnd:WORD, wParam:WORD, lParam:DWORD
  170.             call    BeginPaint PASCAL, hwnd, DS, OFFSET ps
  171.             mov     hdc, ax
  172.             mov     bx, 10
  173.  
  174.             ;; get a string from the DLLPROG.DLL
  175.  
  176.             call    SETHELLO PASCAL,DS OFFSET szDllText
  177.             mov     cx,ax   ;; length of string is returned in ax
  178.             call    TextOut PASCAL, hdc, bx, bx, DS, OFFSET szDllText, cx
  179.  
  180.             call    EndPaint PASCAL, hwnd, DS, OFFSET ps
  181.             ret
  182. ENDP
  183.  
  184. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;
  185. LButtonDownHandler  PROC   PASCAL NEAR hwnd:WORD, wParam:WORD, lParam:DWORD
  186.             call    MessageBox PASCAL, hwnd, DS, OFFSET szLButtonDown, \
  187.                     DS, OFFSET szInfo, MB_OK     
  188.             ret
  189. ENDP
  190.  
  191. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;
  192. DestroyHandler  PROC PASCAL NEAR hwnd:WORD, wParam:WORD, lParam:DWORD
  193.             call    PostQuitMessage PASCAL, 0
  194.             ret
  195. ENDP
  196.  
  197.  
  198. .DATA
  199. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;
  200. MessageTableHandler LABEL MSGINFO
  201.         MSGINFO     <WM_PAINT,  OFFSET PaintHandler>
  202.         MSGINFO     <WM_DESTROY,OFFSET DestroyHandler>
  203.         MSGINFO     <WM_LBUTTONDOWN, OFFSET LButtonDownHandler>
  204.         MSGINFO     <0,0>      ;Flags end of table         
  205.  
  206.  
  207. .CODE
  208. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;
  209. WndProc PROC WINDOWS PASCAL FAR hwnd:WORD,   winMsg:WORD, \ 
  210.                                 wParam:WORD, lParam:DWORD
  211.             USES    si
  212.             mov     si, OFFSET MessageTableHandler
  213. @@LookUp:   mov     ax, [si.MsgValue]
  214.             or      ax, ax
  215.             jz      @@Def
  216.             cmp     ax, winMsg
  217.             je      @@Dispatch
  218.             add     si, SIZE MsgInfo
  219.             jmp     @@LookUp
  220.  
  221. @@Dispatch: call    [si.MsgHandler] PASCAL, hwnd, wParam, lParam
  222.             mov     ax, 0
  223.             mov     dx, 0
  224.             ret
  225.  
  226. @@Def:      call    DefWindowProc  PASCAL, hwnd, winMsg, wParam, lParam
  227.             ret
  228. WndProc     ENDP
  229.  
  230.  
  231. PUBLICDLL   WndProc
  232. END         Start
  233.  
  234.