Explorar o código

+ createheap/restoreheap procedures (only tp7 rm currently) and support
for tp7 dpmi

peter %!s(int64=27) %!d(string=hai) anos
pai
achega
c0110b4ba2
Modificáronse 1 ficheiros con 67 adicións e 22 borrados
  1. 67 22
      compiler/compiler.pas

+ 67 - 22
compiler/compiler.pas

@@ -67,6 +67,11 @@ interface
   {$define USEEXCEPT}
 {$endif}
 
+{$ifdef TP}
+  {$ifdef DPMI}
+    {$undef USEEXCEPT}
+  {$endif}
+{$endif}
 
 uses
 {$ifdef fpc}
@@ -92,7 +97,10 @@ implementation
 
 var
   CompilerInited : boolean;
+{$ifdef USEEXCEPT}
   recoverpos : jmp_buf;
+{$endif USEEXCEPT}
+
 
 {$ifdef USEEXCEPT}
 procedure RecoverStop;{$ifndef FPC}far;{$endif}
@@ -102,6 +110,53 @@ end;
 {$endif USEEXCEPT}
 
 
+{****************************************************************************
+                              Temp Heap Creation
+****************************************************************************}
+
+{$ifdef TP}
+  {$ifndef DPMI}
+  var
+    oldfreelist,
+    oldheapptr,
+    oldheaporg : pointer;
+  {$endif}
+{$endif}
+
+procedure CreateHeap;
+begin
+{$Ifdef TP}
+  {$ifndef DPMI}
+    { Save old heap }
+    oldfreelist:=freelist;
+    oldheapptr:=heapptr;
+    oldheaporg:=heaporg;
+    { Create a new heap }
+    heaporg:=oldheapptr;
+    heapptr:=heaporg;
+    freelist:=heaporg;
+  {$endif}
+{$endif}
+end;
+
+
+procedure RestoreHeap;
+begin
+{$Ifdef TP}
+  {$ifndef DPMI}
+  { Restore old heap }
+  freelist:=oldfreelist;
+  heapptr:=oldheapptr;
+  heaporg:=oldheaporg;
+  {$endif}
+{$endIf TP}
+end;
+
+
+{****************************************************************************
+                                Compiler
+****************************************************************************}
+
 procedure DoneCompiler;
 begin
   if not CompilerInited then
@@ -146,29 +201,17 @@ var
 {$ifdef USEEXCEPT}
   olddo_stop : tstopprocedure;
 {$endif}
-{$ifdef TP}
-  oldfreelist,
-  oldheapptr,
-  oldheaporg : pointer;
-{$endif}
 {$IfDef Extdebug}
   EntryMemAvail : longint;
 {$EndIf}
 begin
-{$Ifdef TP}
-{ Save old heap }
-  oldfreelist:=freelist;
-  oldheapptr:=heapptr;
-  oldheaporg:=heaporg;
-{ Create a new heap }
-  heaporg:=oldheapptr;
-  heapptr:=heaporg;
-  freelist:=heaporg;
-{$endif}
 {$ifdef EXTDEBUG}
   EntryMemAvail:=MemAvail;
 {$endif}
 
+{ Get a new heap }
+  CreateHeap;
+
 { Initialize the compiler }
   InitCompiler(cmd);
 
@@ -209,12 +252,10 @@ begin
 {$ifdef EXTDEBUG}
   Comment(V_Info,'Memory Lost = '+tostr(EntryMemAvail-MemAvail));
 {$endif EXTDEBUG}
-{$Ifdef TP}
-{ Restore old heap }
-  freelist:=oldfreelist;
-  heapptr:=oldheapptr;
-  heaporg:=oldheaporg;
-{$endIf TP}
+
+{ Restore Heap }
+  RestoreHeap;
+
 { Set the return value if an error has occurred }
   if status.errorcount=0 then
    Compile:=0
@@ -226,7 +267,11 @@ end;
 end.
 {
   $Log$
-  Revision 1.4  1998-08-11 14:09:06  peter
+  Revision 1.5  1998-08-11 21:38:24  peter
+    + createheap/restoreheap procedures (only tp7 rm currently) and support
+      for tp7 dpmi
+
+  Revision 1.4  1998/08/11 14:09:06  peter
     * fixed some messages and smaller msgtxt.inc
 
   Revision 1.3  1998/08/11 00:01:20  peter