home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / OS2BAS.ZIP / REGBAS.ASM < prev    next >
Assembly Source File  |  1989-06-23  |  3KB  |  102 lines

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