;**************************************************************
;***    EMS42.ASM                                           ***
;***                                                        ***
;***    function        EMS_Ems.getFreeEM(                  ***
;***                        var total:      Word;           ***
;***                        var free:       Word)           ***
;***                        : Boolean;                      ***
;***                                                        ***
;***    Returns the total number of EMS pages and the       ***
;***    number of pages available. Returns 0 if no error    ***
;***    or an error code.                                   ***
;***                                                        ***
;***                                                        ***
;***    (Ems Version 3.0)                                   ***
;**************************************************************

        .model  large,pascal   

        include emsdefs.asm 

        extrn   errno:WORD  

;
;   Define entry point
;
        public  EMS_Ems@getFreeEM

        .code

EMS_Ems@getFreeEM   proc    total:Far Ptr word, free:Far Ptr Word, self:Dword

        mov     ah,GetFreeEM            ; Move function code
        int     Ems                     ; Do the ems call

        or      ah,ah                   ; Set flags
        jnz     error

;
;   BX now has the number of free EMS pages, DX has the total
;   number of EMS pages. Return the values:
;
        mov     ax,bx                   ; Save free pages
        les     bx,free                 ; Get address of free
        mov     es:[bx],ax              ; Put free pages down
        les     bx,total                ; Get address of total
        mov     es:[bx],dx              ; Put total pages down

        xor     ax,ax
        ret                             ; AX has zero

error:
        mov     al,ah
        xor     ah,ah                   ; Zero high byte
        mov     errno,ax                ; Save in errno too
        ret

EMS_Ems@getFreeEM   endp                ; End of procedure

        end                             ; End of source file



