home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lxapi32.zip / lxapilib / lxapihlp.asm next >
Assembly Source File  |  2002-04-26  |  3KB  |  159 lines

  1. ; $Id: lxapihlp.asm,v 1.2 2002/04/26 23:09:44 smilcke Exp $
  2.  
  3. ;
  4. ; lxapi.asm
  5. ; Autor:               Stefan Milcke
  6. ; Erstellt am:         08.12.2001
  7. ; Letzte Aenderung am: 27.03.2002
  8. ;
  9.        .386p
  10.  
  11.        include seg32.inc
  12.        include devhlp.inc
  13.  
  14. DATA16 segment
  15.        extrn DeviceHelp : DWORD
  16.  
  17. ddname         db[10]  dup (0)
  18. ddtable        db[12] dup (0)
  19. IdcPtr         dd 0
  20. DATA16 ends
  21.  
  22. CODE16 segment
  23.        assume cs:CODE16, ds:DATA16
  24. thunk3216_attachdd:
  25.        push    ds
  26.        push    DATA16
  27.        pop     ds
  28.        mov     bx,(offset ddname)
  29.        mov     di,(offset ddtable)
  30.        mov     dl,DevHlp_AttachDD
  31.        call    dword ptr ds:(offset DeviceHelp)
  32.        setc    dl
  33.        xor     eax,eax
  34.        mov     al,dl
  35.        pop     ds
  36.        jmp     far ptr FLAT:thunk1632_attachdd
  37.  
  38.        ALIGN   2
  39. thunk3216_callidc:
  40.        ; eax -> fptr
  41.        ; ecx -> cmd
  42.        ; ebx -> value
  43.        push    ds
  44.        push    DATA16
  45.        pop     ds
  46.        mov     IdcPtr,eax
  47.        mov     edx,ebx         ; Value to edx
  48.        shr     edx,16          ; Shift upper 16 bits of ULONG parameter
  49.        call    dword ptr ds:(offset IdcPtr)  ; Call IDC entry point
  50.        pop     ds
  51.        jmp     far ptr FLAT:thunk1632_callidc
  52.  
  53.        ALIGN   2
  54. CODE16 ends
  55.  
  56. CODE32 segment
  57. ASSUME CS:FLAT, DS:FLAT, ES:FLAT
  58.        public _AttachToDD
  59.        public _CallIDC
  60. IFDEF KEE
  61.     extrn  KernThunkStackTo16 : near
  62.     extrn  KernThunkStackTo32 : near
  63. ENDIF
  64.  
  65. _AttachToDD proc near
  66.        push    ebp
  67.        mov     ebp,esp
  68.        push    ebx
  69.        push    ecx
  70.        push    edx
  71.        push    esi
  72.        push    edi
  73.        ; 08h[ebp] ->    name
  74.        ; 0ch[ebp] ->    table
  75.        mov     edi,08h[ebp]
  76.        mov     esi,edi
  77.        sub     ecx,ecx
  78.        dec     ecx
  79.        xor     eax,eax
  80.        repne   scasb
  81.        not     ecx
  82.        mov     edi,offset ddname
  83.        repne   movsb
  84. IFDEF  KEE
  85.        push    eax
  86.        call    KernThunkStackTo16
  87.        pop     eax
  88. ENDIF
  89.        jmp     far ptr CODE16:thunk3216_attachdd
  90.  
  91.        ALIGN   4
  92. thunk1632_attachdd:
  93. IFDEF  KEE
  94.        push    eax
  95.        call    KernThunkStackTo32
  96.        pop     eax
  97. ENDIF
  98.        cmp     eax,0
  99.        jne     @F
  100.        mov     edi,0ch[ebp]
  101.        mov     esi,offset ddtable
  102.        mov     ecx,3
  103.        repne   movsd
  104. @@:    pop     edi
  105.        pop     esi
  106.        pop     edx
  107.        pop     ecx
  108.        pop     ebx
  109.        pop     ebp
  110.        ret
  111. _AttachToDD endp
  112.  
  113.        ALIGN   4
  114. _CallIDC proc near
  115.        push    ebp
  116.        mov     ebp,esp
  117.        push    ebx
  118.        push    ecx
  119.        push    edx
  120.        push    esi
  121.        push    edi
  122.        ; 08h[ebp] ->    table
  123.        ; 0ch[ebp] ->    cmd
  124.        ; 10h[ebp] ->    value
  125.        mov     eax,08h[ebp]
  126.        mov     eax,[eax+6]
  127.        mov     ecx,0ch[ebp]
  128.        mov     ebx,10h[ebp]
  129. IFDEF  KEE
  130.        push    eax
  131.        push    edx
  132.        call    KernThunkStackTo16
  133.        pop     edx
  134.        pop     eax
  135. ENDIF
  136.        jmp     far ptr CODE16:thunk3216_callidc
  137. thunk1632_callidc:
  138. IFDEF  KEE
  139.        push    eax
  140.        call    KernThunkStackTo32
  141.        pop     eax
  142. ENDIF
  143.        pop     edi
  144.        pop     esi
  145.        pop     edx
  146.        pop     ecx
  147.        pop     ebx
  148.        pop     ebp
  149.        ret
  150. _CallIDC endp
  151.  
  152. CODE32 ends
  153.  
  154. DATA32 segment
  155. DATA32 ends
  156.  
  157. end
  158.  
  159.