;**************************************************************
;***    XMS09.ASM                                           ***
;***                                                        ***
;***    function        XMS_XmBlk.allocXM(                  ***
;***                        blockSize:      Word)           ***
;***                        : Boolean;                      ***
;***                                                        ***
;***    Allocates a block of extended memory blockSize KB   ***
;***    long which can be referenced via handle.            ***
;***                                                        ***
;**************************************************************

        .model  large,pascal 

        include xmsdefs.asm 

        extrn   errno:WORD  
        extrn   xmsHandler:DWord

;
;   Define entry point
;
        public  XMS_XmBlk@allocXM

        .code

XMS_XmBlk@allocXM     proc    blockSize:Word, handle: Far Ptr Word

        mov     dx,blockSize        ; size in KB of block
        mov     ah,XMSAllocXM       ; Function code
        call    xmsHandler          ; call the guy

        or      ax,ax               ; AX=0 means error
        jz      errorReturn

        les     bx,handle
        mov     es:[bx],dx          ; new handle

        mov     ax,XMSErrOK         ; No error
        xor     dx,dx
        ret

errorReturn:
        mov     al,bl               ; Move error code to AL
        xor     ah,ah               ; Zero extend to 16 bits
        mov     errno,ax            ; Copy to errno
        xor     dx,dx
        ret

XMS_XmBlk@allocXM     endp          ; end of procedure

        end

