;**************************************************************
;***    XMS0E.ASM                                           ***
;***                                                        ***
;***    function        XMS_XmBlk.getHandInfo(              ***
;***                        var blockSize:  Word;           ***
;***                        var handlesLeft:Word;           ***
;***                        var lockCount:  Word)           ***
;***                        : Boolean;                      ***
;***                                                        ***
;***    Gets information about an allocated XM block.       ***
;***                                                        ***
;**************************************************************

        .model  large,pascal 

        include xmsdefs.asm 

        extrn   errno:WORD  
        extrn   xmsHandler:DWord

;
;   Define entry point
;
        public  XMS_XmBlk@getHandInfo

        .code

XMS_XmBlk@getHandInfo   proc    blSz:Far Ptr Word, nHand:Far Ptr Word, locks:Far Ptr Word, handle:Far Ptr Word

        les     bx,handle
        mov     dx,es:[bx]          ; get the handle
        mov     ah,XMSGetHandInfo   ; Function code
        call    xmsHandler          ; call the guy

        or      ax,ax               ; AX=0 means error
        jz      errorReturn

    ;
    ;   Now return the values.
    ;
        mov     cx,bx               ; save BH and BL contents
        les     bx,blSz             ; Return the block size (KB)
        mov     es:[bx],dx

        les     bx,nHand            ; Return the number of free handles
        mov     al,cl               ; Zero extend to 16 bits
        xor     ah,ah
        mov     es:[bx],ax

        les     bx,locks            ; Return the number of locks on block
        mov     al,ch               ; Zero extend to 16 bits
        xor     ah,ah
        mov     es:[bx],ax

        mov     ax,XMSErrOK         ; No error
        ret

errorReturn:
        mov     al,bl               ; Move error code to AL
        xor     ah,ah               ; Zero extend to 16 bits
        mov     errno,ax            ; Copy to errno
        ret

XMS_XmBlk@getHandInfo   endp        ; end of procedure

        end
