[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]