body_IMM32CONFIGURE  macro
; ebx+42   param1
; ebx+38   param2
; ebx+36   param3
; ebx+32   param4
; ebx+28   param5
; ebx+24   param6
; ebx+22   param7
;-------------------------------------
; temp storage

SavelpData  equ  <[ebp+4]>
SavelpRead  equ  <[ebp+8]>
SavelpWord  equ  <[ebp+12]>
lpRead      equ  <[ebp+16]>
lpWord      equ  <[ebp+20]>

        sub     esp, 8                  ; lpRead & lpWord
        xor     eax,eax                 ; storage for unmap
        push    eax                     ;     SavelpWord
        push    eax                     ;     SavelpRead
        push    eax                     ;     SavelpData
        push    ebp
        mov     ebp,esp
        push    edi
        mov     edi, [ebx+32]
        cmp     edi, 2                  ; see if it's IME_CONFIG_REGISTERWORD
        jnz     Skip_Data               ; don't map it if not.
; create new call frame and make the call
; param5  from: LPREGISTERWORD

        mov     edi, [ebx+28]             ; base address
        mov     eax, edi
        test    eax, eax
        jz      Skip_Data                 ; don't map if not given
        mov     dword ptr SavelpData, edi
        push    edi
        call    MapSLFix
        mov     edi, eax
        mov     eax, [edi]                ; eax = lpReading (16:16)
        mov     dword ptr SavelpRead, eax ;
        test    eax, eax
        jz      Skip_Read
        push    eax
        call    MapSLFix
Skip_Read:
        mov     dword ptr lpRead,eax      ; eax = lpReading (32)
        mov     eax, [edi+4]              ; eax = lpWord (16:16)
        mov     dword ptr SavelpWord, eax
        test    eax, eax
        jz      Skip_Word
        push    eax
        call    MapSLFix
Skip_Word:
        mov     dword ptr lpWord,eax
        lea     eax,lpRead
Skip_Data:                                ; Here we ger param5 in eax.

; param7  from: unsigned short
        movzx   edi,word ptr [ebx+22]
        push    edi                     ; to: unsigned long

; param6  from: unsigned long
        push    dword ptr [ebx+24]      ; to unsigned long

; param5  from: unsigned long
        push    eax

; param4  from: unsigned long
        push    dword ptr [ebx+32]      ; to unsigned long

; param3  from: unsigned short
        movzx   eax,word ptr [ebx+36]
        push    eax                     ; to: unsigned long

; param2  from: unsigned long
        push    dword ptr [ebx+38]      ; to unsigned long

; param1  from: unsigned long
        push    dword ptr [ebx+42]      ; to unsigned long

        call    K32Thk1632Prolog@0
        call    Imm32Configure@28               ; call 32-bit version
        call    K32Thk1632Epilog@0

; return code long --> short
; no conversion needed

        lea     eax,SavelpData
        push    eax
        push    dword ptr 3
        call    UnMapSLFixArray ;! Preserves eax & edx
        pop     edi
        pop     ebp
;-------------------------------------
exit:
endm