;**************************************************************
;***    XMS08.ASM                                           ***
;***                                                        ***
;***    function        XMS_Xms.getFreeXM(                  ***
;***                        var totalFree:  Word;           ***
;***                        var largestFree:Word)           ***
;***                        : Boolean;                      ***
;***                                                        ***
;***    Queries the amount of extended memory available.    ***
;***                                                        ***
;**************************************************************

        .model  large,pascal 

        include xmsdefs.asm 

        extrn   errno:WORD  
        extrn   xmsHandler:DWord

;
;   Define entry point
;
        public  XMS_Xms@getFreeXM

        .code

XMS_Xms@getFreeXM   proc    total:Far Ptr Word, largest: Far Ptr Word, self:DWord

        mov     ah,XMSGetFreeXM     ; Function code
        call    xmsHandler          ; call the guy

        or      ax,ax               ; AX=0 means error
        jz      errorReturn

    ;
    ;   Now return the values.
    ;
        les     bx,total
        mov     es:[bx],dx          ; total free memory in KB
        les     bx,largest
        mov     es:[bx],ax          ; largest free block

        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_Xms@getFreeXM   endp            ; end of procedure

        end
