;**************************************************************
;***    EMS4F0.ASM                                          ***
;***                                                        ***
;***    function        EMS_Ems.savePartialMap40(           ***
;***                        map:            Pointer;        ***
;***                        buffer:         Pointer)        ***
;***                        : Boolean;                      ***
;***                                                        ***
;***    Saves the state of a subset of expanded mem page    ***
;***    mapping in buffer                                   ***
;***                                                        ***
;***    Returns 0 if no error or an error code.             ***
;***                                                        ***
;***                                                        ***
;***                                                        ***
;***    (Ems Version 4.0)                                   ***
;**************************************************************

        .model  large,pascal   

        include emsdefs.asm 

        extrn   errno:WORD  

;
;   Define entry point
;
        public  EMS_Ems@savePartialMap40

        .code

EMS_Ems@savePartialMap40 proc    map:Far Ptr Word, buffer:Far Ptr Word, self:DWord

        push    ds                      ; Save some registers
        push    si
        push    di

;
;   DS:SI needs a list of segment addresses of pages for which
;   to save the mapping state.
;
        lds     si,map

;
;   ES:DI gets the address of the buffer to save the info into
;
        les     di,buffer   

        mov     ax,SavePartialMap40     ; Do the call
        int     Ems           

        or      ah,ah                   ; Set flags
        jnz     error

        xor     ax,ax                   ; Return OK

        pop     di                      ; Restore regs
        pop     si
        pop     ds
        ret

error:
        pop     di                      ; Restore regs
        pop     si
        pop     ds

        mov     al,ah                   ; Transfer return code
        xor     ah,ah                   ; Zero extend
        mov     errno,ax                ; Save in errno too
        ret

EMS_Ems@savePartialMap40 endp           ; End of procedure

        end                             ; End of source file
