|
@@ -24,9 +24,6 @@ Interface
|
|
{$endif}
|
|
{$endif}
|
|
{$endif}
|
|
{$endif}
|
|
|
|
|
|
-{$ifdef TP}
|
|
|
|
-{$define implemented}
|
|
|
|
-{$endif TP}
|
|
|
|
{$ifdef Go32v2}
|
|
{$ifdef Go32v2}
|
|
{$define implemented}
|
|
{$define implemented}
|
|
{$endif}
|
|
{$endif}
|
|
@@ -49,11 +46,6 @@ Interface
|
|
{$define implemented}
|
|
{$define implemented}
|
|
{$endif}
|
|
{$endif}
|
|
|
|
|
|
-{ be sure msdos is not set for FPC compiler }
|
|
|
|
-{$ifdef FPC}
|
|
|
|
-{$UnDef MsDos}
|
|
|
|
-{$endif FPC}
|
|
|
|
-
|
|
|
|
Var
|
|
Var
|
|
IOStatus : Integer;
|
|
IOStatus : Integer;
|
|
RedirErrorOut,RedirErrorIn,
|
|
RedirErrorOut,RedirErrorIn,
|
|
@@ -100,12 +92,8 @@ Uses
|
|
windows,
|
|
windows,
|
|
{$endif Windows}
|
|
{$endif Windows}
|
|
{$ifdef unix}
|
|
{$ifdef unix}
|
|
- {$ifdef ver1_0}
|
|
|
|
- linux,
|
|
|
|
- {$else}
|
|
|
|
- baseunix,
|
|
|
|
- unix,
|
|
|
|
- {$endif}
|
|
|
|
|
|
+ baseunix,
|
|
|
|
+ unix,
|
|
{$endif unix}
|
|
{$endif unix}
|
|
dos;
|
|
dos;
|
|
|
|
|
|
@@ -186,34 +174,6 @@ end;
|
|
|
|
|
|
{$ifdef implemented}
|
|
{$ifdef implemented}
|
|
|
|
|
|
-{$ifdef TP}
|
|
|
|
-
|
|
|
|
-{$ifndef Windows}
|
|
|
|
-const
|
|
|
|
- UnusedHandle = -1;
|
|
|
|
- StdInputHandle = 0;
|
|
|
|
- StdOutputHandle = 1;
|
|
|
|
- StdErrorHandle = 2;
|
|
|
|
-{$endif Windows}
|
|
|
|
-
|
|
|
|
-Type
|
|
|
|
- PtrRec = packed record
|
|
|
|
- Ofs, Seg : Word;
|
|
|
|
- end;
|
|
|
|
-
|
|
|
|
- PHandles = ^THandles;
|
|
|
|
- THandles = Array [Byte] of Byte;
|
|
|
|
-
|
|
|
|
- PWord = ^Word;
|
|
|
|
-
|
|
|
|
-Var
|
|
|
|
- MinBlockSize : Word;
|
|
|
|
- MyBlockSize : Word;
|
|
|
|
- Handles : PHandles;
|
|
|
|
- PrefSeg : Word;
|
|
|
|
- OldHandleOut,OldHandleIn,OldHandleError : Byte;
|
|
|
|
-{$endif TP}
|
|
|
|
-
|
|
|
|
var
|
|
var
|
|
TempHOut, TempHIn,TempHError : longint;
|
|
TempHOut, TempHIn,TempHError : longint;
|
|
|
|
|
|
@@ -296,14 +256,6 @@ begin
|
|
end;
|
|
end;
|
|
{$endif}
|
|
{$endif}
|
|
|
|
|
|
-{$ifdef TP}
|
|
|
|
-Function {$ifdef ver1_0}fdclose{$else}fpclose{$endif} (Handle : Longint) : boolean;
|
|
|
|
-begin
|
|
|
|
- { if executed as under GO32 this hangs the DOS-prompt }
|
|
|
|
- fpclose:=true;
|
|
|
|
-end;
|
|
|
|
-{$endif}
|
|
|
|
-
|
|
|
|
{$I-}
|
|
{$I-}
|
|
function FileExist(const FileName : PathStr) : Boolean;
|
|
function FileExist(const FileName : PathStr) : Boolean;
|
|
var
|
|
var
|
|
@@ -384,13 +336,6 @@ function ChangeRedirOut(Const Redir : String; AppendToFile : Boolean) : Boolean;
|
|
RedirErrorOut:=IOResult;
|
|
RedirErrorOut:=IOResult;
|
|
IOStatus:=RedirErrorOut;
|
|
IOStatus:=RedirErrorOut;
|
|
If IOStatus <> 0 then Exit;
|
|
If IOStatus <> 0 then Exit;
|
|
-{$ifndef FPC}
|
|
|
|
- Handles:=Ptr (prefseg, PWord (Ptr (prefseg, $34))^);
|
|
|
|
- OldHandleOut:=Handles^[StdOutputHandle];
|
|
|
|
- Handles^[StdOutputHandle]:=Handles^[FileRec (FOUT^).Handle];
|
|
|
|
- ChangeRedirOut:=True;
|
|
|
|
- OutRedirDisabled:=False;
|
|
|
|
-{$else}
|
|
|
|
{$ifdef Windows}
|
|
{$ifdef Windows}
|
|
if SetStdHandle(Std_Output_Handle,FileRec(FOUT^).Handle) then
|
|
if SetStdHandle(Std_Output_Handle,FileRec(FOUT^).Handle) then
|
|
{$else not Windows}
|
|
{$else not Windows}
|
|
@@ -403,7 +348,6 @@ function ChangeRedirOut(Const Redir : String; AppendToFile : Boolean) : Boolean;
|
|
ChangeRedirOut:=True;
|
|
ChangeRedirOut:=True;
|
|
OutRedirDisabled:=False;
|
|
OutRedirDisabled:=False;
|
|
end;
|
|
end;
|
|
-{$endif def FPC}
|
|
|
|
RedirChangedOut:=True;
|
|
RedirChangedOut:=True;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -417,13 +361,6 @@ function ChangeRedirIn(Const Redir : String) : Boolean;
|
|
RedirErrorIn:=IOResult;
|
|
RedirErrorIn:=IOResult;
|
|
IOStatus:=RedirErrorIn;
|
|
IOStatus:=RedirErrorIn;
|
|
If IOStatus <> 0 then Exit;
|
|
If IOStatus <> 0 then Exit;
|
|
-{$ifndef FPC}
|
|
|
|
- Handles:=Ptr (prefseg, PWord (Ptr (prefseg, $34))^);
|
|
|
|
- OldHandleIn:=Handles^[StdInputHandle];
|
|
|
|
- Handles^[StdInputHandle]:=Handles^[FileRec (FIN^).Handle];
|
|
|
|
- ChangeRedirIn:=True;
|
|
|
|
- InRedirDisabled:=False;
|
|
|
|
-{$else}
|
|
|
|
{$ifdef Windows}
|
|
{$ifdef Windows}
|
|
if SetStdHandle(Std_Input_Handle,FileRec(FIN^).Handle) then
|
|
if SetStdHandle(Std_Input_Handle,FileRec(FIN^).Handle) then
|
|
{$else not Windows}
|
|
{$else not Windows}
|
|
@@ -436,7 +373,6 @@ function ChangeRedirIn(Const Redir : String) : Boolean;
|
|
ChangeRedirIn:=True;
|
|
ChangeRedirIn:=True;
|
|
InRedirDisabled:=False;
|
|
InRedirDisabled:=False;
|
|
end;
|
|
end;
|
|
-{$endif def FPC}
|
|
|
|
RedirChangedIn:=True;
|
|
RedirChangedIn:=True;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -454,13 +390,6 @@ function ChangeRedirError(Const Redir : String; AppendToFile : Boolean) : Boolea
|
|
RedirErrorError:=IOResult;
|
|
RedirErrorError:=IOResult;
|
|
IOStatus:=RedirErrorError;
|
|
IOStatus:=RedirErrorError;
|
|
If IOStatus <> 0 then Exit;
|
|
If IOStatus <> 0 then Exit;
|
|
-{$ifndef FPC}
|
|
|
|
- Handles:=Ptr (prefseg, PWord (Ptr (prefseg, $34))^);
|
|
|
|
- OldHandleError:=Handles^[StdErrorHandle];
|
|
|
|
- Handles^[StdErrorHandle]:=Handles^[FileRec (FERR^).Handle];
|
|
|
|
- ChangeRedirError:=True;
|
|
|
|
- ErrorRedirDisabled:=False;
|
|
|
|
-{$else}
|
|
|
|
{$ifdef Windows}
|
|
{$ifdef Windows}
|
|
if SetStdHandle(Std_Error_Handle,FileRec(FERR^).Handle) then
|
|
if SetStdHandle(Std_Error_Handle,FileRec(FERR^).Handle) then
|
|
{$else not Windows}
|
|
{$else not Windows}
|
|
@@ -473,59 +402,18 @@ function ChangeRedirError(Const Redir : String; AppendToFile : Boolean) : Boolea
|
|
ChangeRedirError:=True;
|
|
ChangeRedirError:=True;
|
|
ErrorRedirDisabled:=False;
|
|
ErrorRedirDisabled:=False;
|
|
end;
|
|
end;
|
|
-{$endif}
|
|
|
|
RedirChangedError:=True;
|
|
RedirChangedError:=True;
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
-{$IfDef MsDos}
|
|
|
|
-{Set HeapEnd Pointer to Current Used Heapsize}
|
|
|
|
-Procedure SmallHeap;assembler;
|
|
|
|
-asm
|
|
|
|
- mov bx,word ptr HeapPtr
|
|
|
|
- shr bx,4
|
|
|
|
- inc bx
|
|
|
|
- add bx,word ptr HeapPtr+2
|
|
|
|
- mov ax,PrefixSeg
|
|
|
|
- sub bx,ax
|
|
|
|
- mov es,ax
|
|
|
|
- mov ah,4ah
|
|
|
|
- int 21h
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-{Set HeapEnd Pointer to Full Heapsize}
|
|
|
|
-Procedure FullHeap;assembler;
|
|
|
|
-asm
|
|
|
|
- mov bx,word ptr HeapEnd
|
|
|
|
- shr bx,4
|
|
|
|
- inc bx
|
|
|
|
- add bx,word ptr HeapEnd+2
|
|
|
|
- mov ax,PrefixSeg
|
|
|
|
- sub bx,ax
|
|
|
|
- mov es,ax
|
|
|
|
- mov ah,4ah
|
|
|
|
- int 21h
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
-{$EndIf MsDos}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
procedure RestoreRedirOut;
|
|
procedure RestoreRedirOut;
|
|
|
|
|
|
begin
|
|
begin
|
|
If not RedirChangedOut then Exit;
|
|
If not RedirChangedOut then Exit;
|
|
-{$ifndef FPC}
|
|
|
|
- Handles^[StdOutputHandle]:=OldHandleOut;
|
|
|
|
- OldHandleOut:=StdOutputHandle;
|
|
|
|
-{$else}
|
|
|
|
{$ifdef Windows}
|
|
{$ifdef Windows}
|
|
SetStdHandle(Std_Output_Handle,StdOutputHandle);
|
|
SetStdHandle(Std_Output_Handle,StdOutputHandle);
|
|
{$else not Windows}
|
|
{$else not Windows}
|
|
fpdup2(TempHOut,StdOutputHandle);
|
|
fpdup2(TempHOut,StdOutputHandle);
|
|
{$endif not Windows}
|
|
{$endif not Windows}
|
|
-{$endif FPC}
|
|
|
|
Close (FOUT^);
|
|
Close (FOUT^);
|
|
fpclose(TempHOut);
|
|
fpclose(TempHOut);
|
|
RedirChangedOut:=false;
|
|
RedirChangedOut:=false;
|
|
@@ -537,16 +425,11 @@ end;
|
|
procedure RestoreRedirIn;
|
|
procedure RestoreRedirIn;
|
|
begin
|
|
begin
|
|
If not RedirChangedIn then Exit;
|
|
If not RedirChangedIn then Exit;
|
|
-{$ifndef FPC}
|
|
|
|
- Handles^[StdInputHandle]:=OldHandleIn;
|
|
|
|
- OldHandleIn:=StdInputHandle;
|
|
|
|
-{$else}
|
|
|
|
{$ifdef Windows}
|
|
{$ifdef Windows}
|
|
SetStdHandle(Std_Input_Handle,StdInputHandle);
|
|
SetStdHandle(Std_Input_Handle,StdInputHandle);
|
|
{$else not Windows}
|
|
{$else not Windows}
|
|
fpdup2(TempHIn,StdInputHandle);
|
|
fpdup2(TempHIn,StdInputHandle);
|
|
{$endif not Windows}
|
|
{$endif not Windows}
|
|
-{$endif}
|
|
|
|
Close (FIn^);
|
|
Close (FIn^);
|
|
fpclose(TempHIn);
|
|
fpclose(TempHIn);
|
|
RedirChangedIn:=false;
|
|
RedirChangedIn:=false;
|
|
@@ -559,15 +442,11 @@ end;
|
|
begin
|
|
begin
|
|
If not RedirChangedIn then Exit;
|
|
If not RedirChangedIn then Exit;
|
|
If InRedirDisabled then Exit;
|
|
If InRedirDisabled then Exit;
|
|
-{$ifndef FPC}
|
|
|
|
- Handles^[StdInputHandle]:=OldHandleIn;
|
|
|
|
-{$else}
|
|
|
|
{$ifdef Windows}
|
|
{$ifdef Windows}
|
|
SetStdHandle(Std_Input_Handle,StdInputHandle);
|
|
SetStdHandle(Std_Input_Handle,StdInputHandle);
|
|
{$else not Windows}
|
|
{$else not Windows}
|
|
fpdup2(TempHIn,StdInputHandle);
|
|
fpdup2(TempHIn,StdInputHandle);
|
|
{$endif not Windows}
|
|
{$endif not Windows}
|
|
-{$endif}
|
|
|
|
InRedirDisabled:=True;
|
|
InRedirDisabled:=True;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -578,16 +457,11 @@ end;
|
|
begin
|
|
begin
|
|
If not RedirChangedIn then Exit;
|
|
If not RedirChangedIn then Exit;
|
|
If not InRedirDisabled then Exit;
|
|
If not InRedirDisabled then Exit;
|
|
-{$ifndef FPC}
|
|
|
|
- Handles:=Ptr (prefseg, PWord (Ptr (prefseg, $34))^);
|
|
|
|
- Handles^[StdInputHandle]:=Handles^[FileRec (FIn^).Handle];
|
|
|
|
-{$else}
|
|
|
|
{$ifdef Windows}
|
|
{$ifdef Windows}
|
|
SetStdHandle(Std_Input_Handle,FileRec(FIn^).Handle);
|
|
SetStdHandle(Std_Input_Handle,FileRec(FIn^).Handle);
|
|
{$else not Windows}
|
|
{$else not Windows}
|
|
fpdup2(FileRec(FIn^).Handle,StdInputHandle);
|
|
fpdup2(FileRec(FIn^).Handle,StdInputHandle);
|
|
{$endif not Windows}
|
|
{$endif not Windows}
|
|
-{$endif}
|
|
|
|
InRedirDisabled:=False;
|
|
InRedirDisabled:=False;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -598,15 +472,11 @@ end;
|
|
begin
|
|
begin
|
|
If not RedirChangedOut then Exit;
|
|
If not RedirChangedOut then Exit;
|
|
If OutRedirDisabled then Exit;
|
|
If OutRedirDisabled then Exit;
|
|
-{$ifndef FPC}
|
|
|
|
- Handles^[StdOutputHandle]:=OldHandleOut;
|
|
|
|
-{$else}
|
|
|
|
{$ifdef Windows}
|
|
{$ifdef Windows}
|
|
SetStdHandle(Std_Output_Handle,StdOutputHandle);
|
|
SetStdHandle(Std_Output_Handle,StdOutputHandle);
|
|
{$else not Windows}
|
|
{$else not Windows}
|
|
fpdup2(TempHOut,StdOutputHandle);
|
|
fpdup2(TempHOut,StdOutputHandle);
|
|
{$endif not Windows}
|
|
{$endif not Windows}
|
|
-{$endif}
|
|
|
|
OutRedirDisabled:=True;
|
|
OutRedirDisabled:=True;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -617,16 +487,11 @@ end;
|
|
begin
|
|
begin
|
|
If not RedirChangedOut then Exit;
|
|
If not RedirChangedOut then Exit;
|
|
If not OutRedirDisabled then Exit;
|
|
If not OutRedirDisabled then Exit;
|
|
-{$ifndef FPC}
|
|
|
|
- Handles:=Ptr (prefseg, PWord (Ptr (prefseg, $34))^);
|
|
|
|
- Handles^[StdOutputHandle]:=Handles^[FileRec (FOut^).Handle];
|
|
|
|
-{$else}
|
|
|
|
{$ifdef Windows}
|
|
{$ifdef Windows}
|
|
SetStdHandle(Std_Output_Handle,FileRec(FOut^).Handle);
|
|
SetStdHandle(Std_Output_Handle,FileRec(FOut^).Handle);
|
|
{$else not Windows}
|
|
{$else not Windows}
|
|
fpdup2(FileRec(FOut^).Handle,StdOutputHandle);
|
|
fpdup2(FileRec(FOut^).Handle,StdOutputHandle);
|
|
{$endif not Windows}
|
|
{$endif not Windows}
|
|
-{$endif}
|
|
|
|
OutRedirDisabled:=False;
|
|
OutRedirDisabled:=False;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -636,16 +501,11 @@ end;
|
|
|
|
|
|
begin
|
|
begin
|
|
If not RedirChangedError then Exit;
|
|
If not RedirChangedError then Exit;
|
|
-{$ifndef FPC}
|
|
|
|
- Handles^[StdErrorHandle]:=OldHandleError;
|
|
|
|
- OldHandleError:=StdErrorHandle;
|
|
|
|
-{$else}
|
|
|
|
{$ifdef Windows}
|
|
{$ifdef Windows}
|
|
SetStdHandle(Std_Error_Handle,StdErrorHandle);
|
|
SetStdHandle(Std_Error_Handle,StdErrorHandle);
|
|
{$else not Windows}
|
|
{$else not Windows}
|
|
fpdup2(TempHError,StdErrorHandle);
|
|
fpdup2(TempHError,StdErrorHandle);
|
|
{$endif not Windows}
|
|
{$endif not Windows}
|
|
-{$endif}
|
|
|
|
Close (FERR^);
|
|
Close (FERR^);
|
|
fpclose(TempHError);
|
|
fpclose(TempHError);
|
|
RedirChangedError:=false;
|
|
RedirChangedError:=false;
|
|
@@ -658,15 +518,11 @@ end;
|
|
begin
|
|
begin
|
|
If not RedirChangedError then Exit;
|
|
If not RedirChangedError then Exit;
|
|
If ErrorRedirDisabled then Exit;
|
|
If ErrorRedirDisabled then Exit;
|
|
-{$ifndef FPC}
|
|
|
|
- Handles^[StdErrorHandle]:=OldHandleError;
|
|
|
|
-{$else}
|
|
|
|
{$ifdef Windows}
|
|
{$ifdef Windows}
|
|
SetStdHandle(Std_Error_Handle,StdErrorHandle);
|
|
SetStdHandle(Std_Error_Handle,StdErrorHandle);
|
|
{$else not Windows}
|
|
{$else not Windows}
|
|
- {$ifdef ver1_0}dup2{$else}fpdup2{$endif}(TempHError,StdErrorHandle);
|
|
|
|
|
|
+ fpdup2(TempHError,StdErrorHandle);
|
|
{$endif not Windows}
|
|
{$endif not Windows}
|
|
-{$endif}
|
|
|
|
ErrorRedirDisabled:=True;
|
|
ErrorRedirDisabled:=True;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -677,16 +533,11 @@ end;
|
|
begin
|
|
begin
|
|
If not RedirChangedError then Exit;
|
|
If not RedirChangedError then Exit;
|
|
If not ErrorRedirDisabled then Exit;
|
|
If not ErrorRedirDisabled then Exit;
|
|
-{$ifndef FPC}
|
|
|
|
- Handles:=Ptr (prefseg, PWord (Ptr (prefseg, $34))^);
|
|
|
|
- Handles^[StdErrorHandle]:=Handles^[FileRec (FErr^).Handle];
|
|
|
|
-{$else}
|
|
|
|
{$ifdef Windows}
|
|
{$ifdef Windows}
|
|
SetStdHandle(Std_Error_Handle,FileRec(FErr^).Handle);
|
|
SetStdHandle(Std_Error_Handle,FileRec(FErr^).Handle);
|
|
{$else not Windows}
|
|
{$else not Windows}
|
|
- {$ifdef ver1_0}dup2{$else}fpdup2{$endif}(FileRec(FERR^).Handle,StdErrorHandle);
|
|
|
|
|
|
+ fpdup2(FileRec(FERR^).Handle,StdErrorHandle);
|
|
{$endif not Windows}
|
|
{$endif not Windows}
|
|
-{$endif}
|
|
|
|
ErrorRedirDisabled:=False;
|
|
ErrorRedirDisabled:=False;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -752,9 +603,6 @@ procedure RedirEnableAll;
|
|
|
|
|
|
procedure InitRedir;
|
|
procedure InitRedir;
|
|
begin
|
|
begin
|
|
-{$ifndef FPC}
|
|
|
|
- PrefSeg:=PrefixSeg;
|
|
|
|
-{$endif FPC}
|
|
|
|
end;
|
|
end;
|
|
|
|
|
|
{$else not implemented}
|
|
{$else not implemented}
|
|
@@ -939,9 +787,6 @@ end;
|
|
{$endif Windows}
|
|
{$endif Windows}
|
|
|
|
|
|
Begin
|
|
Begin
|
|
-{$IfDef MsDos}
|
|
|
|
- SmallHeap;
|
|
|
|
-{$EndIf MsDos}
|
|
|
|
SwapVectors;
|
|
SwapVectors;
|
|
{$ifdef UNIX}
|
|
{$ifdef UNIX}
|
|
IOStatus:=0;
|
|
IOStatus:=0;
|
|
@@ -982,9 +827,6 @@ end;
|
|
fninit
|
|
fninit
|
|
end;
|
|
end;
|
|
{$endif CPU86}
|
|
{$endif CPU86}
|
|
-{$IfDef MsDos}
|
|
|
|
- Fullheap;
|
|
|
|
-{$EndIf MsDos}
|
|
|
|
End;
|
|
End;
|
|
|
|
|
|
{*****************************************************************************
|
|
{*****************************************************************************
|