[Back to MEMORY SWAG index] [Back to Main SWAG index] [Original]
{
-> I'm having a problem in a program that I'm doing. I need to make
-> overlay files and I'm tying to put them in expanded memory with the
-> instruction OvrInitEMS but after that the program leaves to DOS
-> without doing any instruction else.
-> If someone knows how to solve this problem, I would like some Help
> Which TP version and which DOS version? I found that EMM386 from DOS
> 6.2 didn't cooperate with some of my Borland products, so I killed DOS
> 6.2.
Here's the source code of an overlay manager that I have been using for
years without any problems. It's based on the one found in the
documentation.
}
UNIT TNDOvrIn;
{$O+} { Enable overlaying of this unit }
{$F+} { Turn on Far Calls }
INTERFACE
IMPLEMENTATION
USES Dos,
Crt,
Overlay;
CONST
OvrMaxSize = 128416;
{OvrMaxSize = 0;}
VAR
OvrName : STRING[79];
Message : BOOLEAN;
PROCEDURE PrintMsg(pInString : STRING);
BEGIN
WRITELN( pInString );
END;
BEGIN
PrintMsg( '' );
PrintMsg( 'Please wait for TNDM to load into memory.' );
PrintMsg( '' );
Message := FALSE;
OvrName := 'TNDM.OVR';
IF LO(DosVersion) >= 3 THEN
OvrName := ParamStr(0)
ELSE
BEGIN
OvrName := FSearch('TNDM.EXE', GetEnv('PATH') );
IF (OvrName = '') THEN
BEGIN
PrintMsg( 'The main program must be named "TNDM.EXE" and it must' );
PrintMsg( 'reside in your PATH or in the current directory.' );
END;
END;
{WRITELN;}
OvrName := FExpand(OvrName);
{WRITELN('Loading ', OvrName, '...');}
DEC(OvrName[0], 3);
OvrName := OvrName + 'OVR';
REPEAT
OvrInit(OvrName);
IF OvrResult = ovrNotFound THEN
BEGIN
PrintMsg( 'Overlay file not found: ' + OvrName );
WRITE('Enter correct overlay file name: ');
READLN(OvrName);
END;
UNTIL OvrResult <> ovrNotFound;
IF OvrResult <> OvrOk THEN
BEGIN
PrintMsg( 'Overlay manager error. Unable to continue. Error loading overlay file.' );
Halt(1);
END;
{WRITELN('Overlay manager has been installed.');}
PrintMsg( '' );
OvrInitEMS;
IF OvrResult <> OvrOk THEN
BEGIN
CASE OvrResult OF
ovrIOError :
BEGIN
PrintMsg( 'Overlay file I/O error. Unable to continue.' );
HALT(1);
END;
ovrNoEMSDriver : {WRITE('EMS driver not installed')};
ovrNoEMSMemory : {WRITE('Not enough EMS memory')};
END;
{*-- Increase buffer only if no EMS --*}
OvrSetBuf(OvrGetBuf + OvrMaxSize);
OvrSetRetry(OvrGetBuf DIV 3);
END
ELSE
BEGIN
{*-- Some extra buffer is still needed --*}
OvrSetBuf(OvrGetBuf + OvrMaxSize );
OvrSetRetry(OvrGetBuf DIV 6);
END;
END.
[Back to MEMORY SWAG index] [Back to Main SWAG index] [Original]