home *** CD-ROM | disk | FTP | other *** search
/ The Pier Shareware 6 / The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso / 038 / pmd110.zip / XMS.PAS < prev   
Pascal/Delphi Source File  |  1994-11-14  |  4KB  |  86 lines

  1. (* This file was mangled by Mangler 1.35 (c) Copyright 1993-1994 by Berend de Boer *)
  2. { Created : 1994-09-08  (c) Copyright 1994 by Berend de Boer
  3.  
  4. XMS access unit created from ObjMemory.
  5.  
  6.  
  7. Last changes :
  8. }
  9.  
  10. {$IFNDEF MsDos}
  11. Error
  12. {$ENDIF}
  13.  
  14.  
  15. {$F+,O+,X+}
  16. unit XMS;
  17.  
  18. interface
  19.  
  20.  
  21. type
  22.   TXMSHandle = word;
  23.  
  24. type
  25.   TXMSParameterBlock = record
  26.      Count : longint;       {* should be even! *}
  27.      SourceHandle : TXMSHandle;
  28.      SourceOffs : longint;
  29.      DestHandle : TXMSHandle;
  30.      DestOffs : longint;
  31.    end;
  32.  
  33. type
  34.   TXMSHandleInfo = record
  35.     Locked : Boolean;
  36.     HandlesAvailable : byte;
  37.     BlockSize : word;
  38.   end;
  39.  
  40. const
  41.   XMSInstalled:Boolean = FALSE;        {* set by xms_init *}
  42.   XMSVersion:word = 0;                 {* set by xms_init *}
  43.   XMSResult:byte = 0;                  {* status if xms function returned false *}
  44.   XMSEntry:pointer = nil;
  45.  
  46.  
  47. procedure xms_init;
  48.  
  49. function  xms_allocate(var Handle : TXMSHandle; Size : longint) : Boolean;
  50. function  xms_dispose(Handle : TXMSHandle) : Boolean;
  51. procedure xms_get_driver_address;
  52. function  xms_get_handle_info(Handle : TXMSHandle; var HandleInfo : TXMSHandleInfo) : Boolean;
  53. procedure xms_get_version;
  54. function  xms_maxavail : word;
  55. function  xms_memavail : word;
  56. function  xms_move_emb(SourceHandle : TXMSHandle; SourceOffs : longint;
  57.                        DestHandle : TXMSHandle; DestOffs, Count : longint) : Boolean;
  58. function  xms_present : Boolean;
  59.  
  60.  
  61.  
  62.  IMPLEMENTATION {$IFDEF Debug}USES ASSERTIONS ;{$ENDIF}PROCEDURE XMS_INIT ;BEGIN IF NOT XMS_PRESENT THEN EXIT ;
  63. XMS_GET_DRIVER_ADDRESS ;XMS_GET_VERSION ;IF XMSVERSION < $300 THEN EXIT ;XMSINSTALLED := TRUE ;END ;
  64. FUNCTION XMS_ALLOCATE (VAR HANDLE:TXMSHANDLE;SIZE:LONGINT):BOOLEAN ;ASSEMBLER;ASM {} MOV AX , WORD PTR SIZE{}
  65. MOV DX , WORD PTR SIZE+ 2 {} MOV CX , 400h {} DIV CX {} CMP DX , 0 {} JE @1 {} INC AX {} @1 : {} MOV DX , AX {}
  66. MOV AH , 09h {} CALL XMSENTRY{} MOV XMSRESULT, BL {} CMP AX , 0 {} JNE @ok {} XOR DX , DX {} @ok : {} LES DI , HANDLE{}
  67. MOV ES : [ DI ] , DX {} END;FUNCTION XMS_DISPOSE (HANDLE:TXMSHANDLE):BOOLEAN ;ASSEMBLER;ASM {} MOV DX , HANDLE{}
  68. MOV AH , 0ah {} CALL XMSENTRY{} MOV XMSRESULT, BL {} END;PROCEDURE XMS_GET_DRIVER_ADDRESS ;ASSEMBLER;ASM {}
  69. MOV AX , 4310h {} INT 2fh {} MOV WORD PTR XMSENTRY, BX {} MOV WORD PTR XMSENTRY+ 2 , ES {} END;
  70. FUNCTION XMS_GET_HANDLE_INFO (HANDLE:TXMSHANDLE;VAR HANDLEINFO:TXMSHANDLEINFO):BOOLEAN ;ASSEMBLER;ASM {}
  71. MOV DX , HANDLE{} MOV AH , 0eh {} CALL XMSENTRY{} MOV XMSRESULT, BL {} MOV WORD PTR HANDLEINFO, BX {}
  72. MOV WORD PTR HANDLEINFO+ 2 , DX {} END;PROCEDURE XMS_GET_VERSION ;ASSEMBLER;ASM {} MOV AH , 0 {} CALL XMSENTRY{}
  73. MOV XMSVERSION, AX {} END;FUNCTION XMS_MOVE_EMB (SOURCEHANDLE:TXMSHANDLE;SOURCEOFFS:LONGINT;DESTHANDLE:TXMSHANDLE;
  74. DESTOFFS,COUNT:LONGINT):BOOLEAN ;ASSEMBLER;VAR OIOIIIOII0:TXMSPARAMETERBLOCK;ASM {} MOV AX , WORD PTR COUNT{}
  75. MOV WORD PTR OIOIIIOII0.COUNT, AX {} MOV AX , WORD PTR COUNT+ 2 {} MOV WORD PTR OIOIIIOII0.COUNT+ 2 , AX {}
  76. MOV AX , SOURCEHANDLE{} MOV OIOIIIOII0.SOURCEHANDLE, AX {} MOV AX , WORD PTR SOURCEOFFS{}
  77. MOV WORD PTR OIOIIIOII0.SOURCEOFFS, AX {} MOV AX , WORD PTR SOURCEOFFS+ 2 {}
  78. MOV WORD PTR OIOIIIOII0.SOURCEOFFS+ 2 , AX {} MOV AX , DESTHANDLE{} MOV OIOIIIOII0.DESTHANDLE, AX {}
  79. MOV AX , WORD PTR DESTOFFS{} MOV WORD PTR OIOIIIOII0.DESTOFFS, AX {} MOV AX , WORD PTR DESTOFFS+ 2 {}
  80. MOV WORD PTR OIOIIIOII0.DESTOFFS+ 2 , AX {} MOV AH , 0bh {} LEA DI , XMSENTRY{} MOV BX , DS {} MOV ES , BX {} PUSH DS {}
  81. LEA SI , OIOIIIOII0{} MOV BX , SS {} MOV DS , BX {} CALL DWORD PTR ES : [ DI ] {} POP DS {} MOV XMSRESULT, BL {} END;
  82. FUNCTION XMS_MAXAVAIL :WORD ;ASSEMBLER;ASM {} MOV AH , 08h {} CALL XMSENTRY{} MOV XMSRESULT, BL {} END;
  83. FUNCTION XMS_MEMAVAIL :WORD ;ASSEMBLER;ASM {} MOV AH , 08h {} CALL XMSENTRY{} MOV XMSRESULT, BL {} MOV AX , DX {} END;
  84. FUNCTION XMS_PRESENT :BOOLEAN ;ASSEMBLER;ASM {} MOV AX , 4300h {} INT 2fh {} CMP AL , 80h {} JNE @error {} MOV AL , 01 {}
  85. JMP @end {} @error : {} XOR AL , AL {} @end : {} END;END .
  86.