{ -> 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.