home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / pibterm / pibt41s3.arc / PT4PATCH.PAS < prev    next >
Pascal/Delphi Source File  |  1988-02-13  |  3KB  |  109 lines

  1. {$R-,S-,I-}
  2. UNIT PT4PATCH;
  3.  
  4. INTERFACE
  5.  
  6. USES
  7.    Dos, Crt, GlobType, StringMan, PibTimer;
  8.  
  9.    FUNCTION GetEnvStr( Search_String : AnyStr ) : AnyStr;
  10.  
  11. IMPLEMENTATION
  12.                                    (* Get command line parameters       *)
  13. {$I GETCOMAN.MOD }
  14.                                    (* Get environment string            *)
  15. {$I GETENVST.MOD }
  16.                                    (* Initialize directories            *)
  17. {$I INITOVLY.MOD }
  18.  
  19. (*----------------------------------------------------------------------*)
  20.  
  21. TYPE
  22.    BigBuffer = ARRAY[0..65519] OF BYTE;
  23.    BufferPtr = ^BigBuffer;
  24.  
  25.    PatchRec = RECORD (* Must match patch area of OVERMGR exactly *)
  26.                  ID        : STRING[18];
  27.                  Path      : STRING[64];
  28.                  StackSize : WORD;
  29.                  CheckEms  : BOOLEAN;
  30.               END;
  31.  
  32. CONST
  33.    PatchID = 'OVERLAY PATCH AREA';
  34.  
  35. VAR
  36.    DataSegment  : BufferPtr;
  37.    Offset       : WORD;
  38.    Limit        : WORD;
  39.    Ch           : CHAR;
  40.    T1           : LONGINT;
  41.    PatchPtr     : ^PatchRec;
  42.  
  43. (*----------------------------------------------------------------------*)
  44.  
  45. FUNCTION Search( VAR B : BufferPtr ; Limit : WORD; Match : STRING ) : WORD;
  46.  
  47. VAR
  48.    O : Word;
  49.    P : ^STRING;
  50.  
  51. BEGIN (* Search *)
  52.  
  53.    O := Limit;
  54.  
  55.    REPEAT
  56.       DEC( O );
  57.       P := @B^[O];
  58.    UNTIL( O = 0 ) OR ( P^ = Match );
  59.  
  60.    Search := O;
  61.  
  62. END   (* Search *);
  63.  
  64. (*----------------------------------------------------------------------*)
  65.  
  66. BEGIN (* PT4PATCH *)
  67.                                    (* Get command line parameters     *)
  68.    Get_Command_Line_Parameters;
  69.                                    (* Get config file directory  *)
  70.    InitOvly;
  71.                                    (* Assume text mode from    *)
  72.                                    (* current system setting.  *)
  73.    Start_Video_Mode := LastMode;
  74.    Text_Mode        := LastMode;
  75.  
  76.                                    (* Fix up patchable overlay parameters *)
  77.    DataSegment := PTR( DSeg , 0 );
  78.    Limit       := ( SSeg - DSeg ) * 16;
  79.  
  80.    Offset := Search( DataSegment, Limit, PatchID );
  81.  
  82.    IF ( Offset > 0 ) THEN
  83.       BEGIN
  84.          PatchPtr := PTR( DSeg , Offset );
  85.          WITH PatchPtr^ DO
  86.             BEGIN
  87.                Path     := Home_Dir + 'PIBT.OVR';
  88.                CheckEMS := Use_EMM_For_Overlays;
  89.             END;
  90.       END;
  91.                                    (* Check memory *)
  92.    IF ( MemAvail < 65000 ) THEN
  93.       BEGIN
  94.           WRITELN;
  95.           WRITELN('*** WARNING *** There are only ', MemAvail SHR 10,
  96.                   'K bytes of work space available,');
  97.           WRITELN('                PibTerm may not be able to run.');
  98.           WRITELN('                Hit Enter key to continue.');
  99.           T1 := TimeOfDay;
  100.           WHILE ( ( NOT KeyPressed ) AND ( TimeDiff( T1 , TimeOfDay ) < 10 ) ) DO;
  101.           IF KeyPressed THEN
  102.              WHILE (       KeyPressed ) DO
  103.                 READ( Ch )
  104.           ELSE
  105.              WRITELN('Enter key not struck, PibTerm will try to continue anyway.');
  106.       END;
  107.  
  108. END   (* PT4PATCH *).
  109.