home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / PMBASIC.ZIP / REGBAS.ASM < prev   
Assembly Source File  |  1989-12-11  |  3KB  |  121 lines

  1.  
  2. ; Program Name: RegBas.ASM
  3. ;
  4. ; Functions :
  5. ;           BreakLong
  6. ;           MakeLong
  7. ;           BasClientWndProc
  8. ;           RegBas
  9. ;
  10. ; Description : This supplies interface routines for BASIC
  11. programs.
  12. ;               RegBas is used to register window classes
  13. from BASIC.
  14. ;               Also provided are the utility routines:
  15. BreakLong and MakeLong.
  16.  
  17. DOSSEG
  18. .286                               ; OS/2 only runs on 286
  19. machines
  20. .model medium, PASCAL              ; Medium memory model
  21. when interfacing with BASIC
  22.                                    ; PASCAL and BASIC use
  23. same calling conventions
  24.  
  25. .data
  26.  
  27. hwndb1    DW  ?                    ; set up local data for
  28. BasClientWndProc
  29. hwndb2    DW  ?
  30. msgb      DW  ?
  31. mp1b1     DW  ?
  32. mp1b2     DW  ?
  33. mp2b1     DW  ?
  34. mp2b2     DW  ?
  35.  
  36. .code
  37.  
  38. EXTRN     ClientWndProc:PROC       ; BASIC function to call
  39.  
  40. PUBLIC BasClientWndProc, BreakLong, MakeLong, RegBas
  41.  
  42. ; Breaklong(Long, hi_word, lo_word)
  43. ;
  44. BreakLong  PROC FAR USES bx, long1:WORD, long2:WORD,
  45. hiword:WORD, loword:WORD
  46.            mov bx, long1           ; get the hi-byte of the
  47. long
  48.            mov ax, bx
  49.            mov bx, hiword          ; return it to hiword
  50.            mov [bx], ax
  51.            mov bx, long2           ; get the lo-byte
  52.            mov ax, bx
  53.            mov bx, loword          ; return it to loword
  54.            mov [bx], ax
  55.            ret
  56.  
  57. BreakLong  ENDP
  58. ; MakeLong&(hi_word, low_word)
  59. ;
  60. MakeLong   PROC FAR USES bx, hiword:WORD, loword:WORD
  61.            mov bx, hiword
  62.            mov ax, bx
  63.            mov dx, ax              ; return hi-word in dx
  64.            mov bx, loword          ; lo-word in ax for
  65. function
  66.            mov ax, bx              ; returning a long
  67.            ret
  68. MakeLong   ENDP
  69.  
  70. BasClientWndProc    PROC hwnd1:word, hwnd2:word, msg:word,
  71. mp11:word, mp12:word, mp21:word, mp22:word
  72.  
  73.            push ds
  74.            mov  ax, @data          ; get our data segment
  75.            mov  ds, ax
  76.  
  77.            mov  ax, hwnd2          ; transfer the values
  78. passed
  79.            mov  hwndb1, ax         ; from PM to local
  80. variables
  81.            mov  ax, hwnd1          ; for the call to BASIC
  82.            mov  hwndb2, ax
  83.            mov  ax, msg
  84.            mov  msgb, ax
  85.            mov  ax, mp12
  86.            mov  mp1b1, ax
  87.            mov  ax, mp11
  88.            mov  mp1b2, ax
  89.            mov  ax, mp22
  90.            mov  mp2b1, ax
  91.            mov  ax, mp21
  92.            mov  mp2b2, ax
  93.  
  94.            mov  ax, OFFSET hwndb1  ; set up for call to
  95. BASIC
  96.            push ax                 ; BASIC expects values to
  97.            mov  ax, OFFSET msgb    ; be passed by reference.
  98.            push ax
  99.            mov  ax, OFFSET mp1b1
  100.            push ax
  101.            mov  ax, OFFSET mp2b1
  102.            push ax
  103.  
  104.            call ClientWndProc      ; call BASIC routine -
  105. note
  106.                                    ; return values are
  107. already
  108.            pop  ds                 ; in dx, ax so we don't
  109. have
  110.            ret                     ; to do anything.
  111. BasClientWndProc ENDP
  112.  
  113. RegBas     PROC
  114.            mov dx, SEG BasClientWndProc      ; return
  115. address of
  116.            mov ax, OFFSET BasClientWndProc   ; BASIC
  117. routine.
  118.            ret
  119. RegBas     ENDP
  120.            end
  121.