home *** CD-ROM | disk | FTP | other *** search
- program TXms;
-
- uses
-
- vCrtu,
- VXmsu;
-
- const
- XmsStr : String[15] = 'Hello XMS world';
-
- type
-
- TXMBHandle2 = RECORD
-
- Case Byte of
-
- 0 : (RealPtr : POINTER);
-
- 1 : (ProtectedPtr : LONGINT);
-
- END;
-
- procedure MoveTest;
- var
- Err : Byte;
- Handle : TXMBHandle;
- ps, pd : TXMBHandle2;
- S : String[15];
-
- begin
- WriteLn('Performing Move Test');
- Err := VXMBNew( 1, Handle );
- WriteLn('AllocateExtMem: ', VXmsErrorToStr(Err));
- if Err <> 0 then
- Exit;
- ps.RealPtr := @XmsStr;
- pd.ProtectedPtr := 0;
- Err := VXMBMoveBlock(Succ(Length(XmsStr)), 0, ps, Handle, pd);
- WriteLn('MoveExtMemBlock: ', XmsErrorToStr(Err));
- if Err <> 0 then begin
- Err := FreeExtMem(Handle);
- Exit;
- end;
- FillChar(S, SizeOf(S), 0);
- pd.RealPtr := @S;
- ps.ProtectedPtr := 0;
- Err := MoveExtMemBlock(Succ(Length(XmsStr)), Handle, ps, 0, pd);
- if Err = 0 then
- WriteLn(S);
- WriteLn('MoveExtMemBlock: ', VXmsErrorToStr(Err));
- Err := FreeExtMem(Handle);
- WriteLn('FreeExtMem: ', VXmsErrorToStr(Err));
- end;
-
- procedure AllocateTest;
- var
- Total, Largest, Handle : Word;
- Err : Byte;
- begin
- WriteLn('Performing Allocate Test');
- Err := QueryFreeExtMem(Total, Largest);
- WriteLn('Total = ', Total);
- WriteLn('Largest = ', Largest);
- Err := AllocateExtMem(Largest, Handle);
- WriteLn('Attempt to allocate ', Largest,'K of XMS returned: ', VXmsErrorToStr(Err));
- Err := FreeExtMem(Handle);
- WriteLn('Attempt to free extended memory block returned: ', VXmsErrorToStr(Err));
- Err := AllocateExtMem(Largest+1, Handle);
- WriteLn('Attempt to allocate ', Largest+1,'K of XMS returned: ', VXmsErrorToStr(Err));
- end;
-
- procedure HMATest;
- var
- Err : Byte;
- begin
- WriteLn('Performing HMA Test');
- Err := RequestHMA($FFFF);
- WriteLn('RequestHMA returned: ', VXmsErrorToStr(Err));
- if Err = 0 then begin
- Err := ReleaseHMA;
- WriteLn('ReleaseHMA returned: ', VXmsErrorToStr(Err));
- end;
- end;
-
- procedure LockTest;
- var
- Handle : Word;
- Err : Byte;
- LinearPtr : ExtMemPtr;
-
- begin
- WriteLn('Performing Lock Test');
- Err := AllocateExtMem(1, Handle);
- WriteLn('Attempt to allocate 1K of XMS returned: ', VXmsErrorToStr(Err));
- Err := LockExtMemBlock(Handle, LinearPtr);
- WriteLn('LockExtMemBlock returned: ', VXmsErrorToStr(Err));
- if Err = 0 then
- WriteLn('Block''s 32 bit linear address = $', HexL(LinearPtr.ProtectedPtr));
- Err := UnlockExtMemBlock(Handle);
- WriteLn('UnlockExtMemBlock returned: ', VXmsErrorToStr(Err));
- Err := FreeExtMem(Handle);
- WriteLn('Attempt to free extended memory block returned: ', VXmsErrorToStr(Err));
- end;
-
- procedure ResizeTest;
- var
- Handle : Word;
- Err : Byte;
- begin
- WriteLn('Performing Resize Test');
- Err := AllocateExtMem(1, Handle);
- WriteLn('Attempt to allocate 1K of XMS returned: ', VXmsErrorToStr(Err));
-
- Err := ResizeExtMemBlock(Handle, 2);
- WriteLn('ResizeExtMemBlock returned: ', VXmsErrorToStr(Err));
-
- Err := FreeExtMem(Handle);
- WriteLn('Attempt to free extended memory block returned: ', VXmsErrorToStr(Err));
- end;
-
- procedure UMBTest;
- var
- Largest, SegBase : Word;
- Err : Byte;
- P : ^String;
- begin
- WriteLn('Performing Upper Memory Block Test');
- Err := AllocUpperMemBlock($FFFF, SegBase, Largest);
- if Err = FuncNotImplemented then begin
- WriteLn('Upper memory block functions are not implemented by this XMS driver');
- Exit;
- end;
- WriteLn('The largest upper memory block available is ', Largest*16);
- Err := AllocUpperMemBlock(Largest, SegBase, Largest);
- WriteLn('Attempt to allocate ', Largest*16,' byte UMB: ', VXmsErrorToStr(Err));
- if Err <> 0 then
- Exit;
- P := Ptr(SegBase, 0);
- P^ := XmsStr;
- WriteLn(P^);
- Err := FreeUpperMemBlock(SegBase);
- WriteLn('FreeUpperMemBlock returned: ', VXmsErrorToStr(Err));
- end;
-
- procedure Pause;
-
- begin
- Write('Press any key to continue');
- if ReadKey = #0 then ;
- WriteLn;
- end;
-
- begin
- if not XmsInstalled then begin
- WriteLn('There is no XMS memory manager installed.');
- Halt;
- end;
- WriteLn('XMS Control function at ', HexPtr(XmsControl));
- HMATest;
- Pause;
- AllocateTest;
- Pause;
- MoveTest;
- Pause;
- LockTest;
- Pause;
- ResizeTest;
- Pause;
- UMBTest;
- end.
-