mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 10:09:20 +02:00
* !proxy support in environment added (Peter)
This commit is contained in:
parent
2a07cce2eb
commit
d0a230bd96
@ -151,8 +151,7 @@ var
|
|||||||
Go32 Helpers
|
Go32 Helpers
|
||||||
*****************************************************************************}
|
*****************************************************************************}
|
||||||
|
|
||||||
function far_strlen(selector : word;linear_address : longint) : longint;
|
function far_strlen(selector : word;linear_address : longint) : longint;assembler;
|
||||||
begin
|
|
||||||
asm
|
asm
|
||||||
movl linear_address,%edx
|
movl linear_address,%edx
|
||||||
movl %edx,%ecx
|
movl %edx,%ecx
|
||||||
@ -166,8 +165,6 @@ asm
|
|||||||
.Larg20:
|
.Larg20:
|
||||||
movl %edx,%eax
|
movl %edx,%eax
|
||||||
subl %ecx,%eax
|
subl %ecx,%eax
|
||||||
movl %eax,__RESULT
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -281,6 +278,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
_args : ppchar;external name '_args';
|
||||||
|
|
||||||
|
|
||||||
|
procedure setup_arguments;
|
||||||
|
|
||||||
function atohex(s : pchar) : longint;
|
function atohex(s : pchar) : longint;
|
||||||
var
|
var
|
||||||
rv : longint;
|
rv : longint;
|
||||||
@ -299,22 +303,21 @@ begin
|
|||||||
atohex:=rv;
|
atohex:=rv;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
arrayword = array [0..255] of word;
|
||||||
var
|
var
|
||||||
_args : ppchar;external name '_args';
|
psp : word;
|
||||||
|
i,j : longint;
|
||||||
procedure setup_arguments;
|
|
||||||
type arrayword = array [0..0] of word;
|
|
||||||
var psp : word;
|
|
||||||
i,j : byte;
|
|
||||||
quote : char;
|
quote : char;
|
||||||
proxy_s : string[7];
|
proxy_s : string[50];
|
||||||
al,proxy_argc,proxy_seg,proxy_ofs,lin : longint;
|
al,proxy_argc,proxy_seg,proxy_ofs,lin : longint;
|
||||||
largs : array[0..127] of pchar;
|
largs : array[0..127] of pchar;
|
||||||
rm_argv : ^arrayword;
|
rm_argv : ^arrayword;
|
||||||
argv0len : longint;
|
argv0len : longint;
|
||||||
|
useproxy : boolean;
|
||||||
|
hp : ppchar;
|
||||||
begin
|
begin
|
||||||
for i := 1 to 127 do
|
fillchar(largs,sizeof(largs),0);
|
||||||
largs[i] := nil;
|
|
||||||
psp:=stub_info^.psp_selector;
|
psp:=stub_info^.psp_selector;
|
||||||
largs[0]:=dos_argv0;
|
largs[0]:=dos_argv0;
|
||||||
argc := 1;
|
argc := 1;
|
||||||
@ -347,7 +350,8 @@ for i:=1 to length(doscmd) do
|
|||||||
largs[argc]:=@doscmd[j];
|
largs[argc]:=@doscmd[j];
|
||||||
inc(argc);
|
inc(argc);
|
||||||
j := i+1;
|
j := i+1;
|
||||||
end else
|
end
|
||||||
|
else
|
||||||
if (quote = #0) and ((doscmd[i] = '''') or (doscmd[i]='"')) then
|
if (quote = #0) and ((doscmd[i] = '''') or (doscmd[i]='"')) then
|
||||||
begin
|
begin
|
||||||
quote := doscmd[i];
|
quote := doscmd[i];
|
||||||
@ -373,18 +377,48 @@ for i:=1 to length(doscmd) do
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if (argc > 1) and (far_strlen(get_ds,longint(largs[1])) = 6) then
|
hp:=envp;
|
||||||
|
useproxy:=false;
|
||||||
|
while assigned(hp^) do
|
||||||
|
begin
|
||||||
|
if (hp^[0]=' ') then
|
||||||
|
begin
|
||||||
|
proxy_s:=strpas(hp^);
|
||||||
|
if Copy(proxy_s,1,7)=' !proxy' then
|
||||||
|
begin
|
||||||
|
proxy_s[13]:=#0;
|
||||||
|
proxy_s[18]:=#0;
|
||||||
|
proxy_s[23]:=#0;
|
||||||
|
largs[2]:=@proxy_s[9];
|
||||||
|
largs[3]:=@proxy_s[14];
|
||||||
|
largs[4]:=@proxy_s[19];
|
||||||
|
useproxy:=true;
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
inc(hp);
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (not useproxy) and
|
||||||
|
(argc > 1) and (far_strlen(get_ds,longint(largs[1])) = 6) then
|
||||||
begin
|
begin
|
||||||
move(largs[1]^,proxy_s[1],6);
|
move(largs[1]^,proxy_s[1],6);
|
||||||
proxy_s[0] := #6;
|
proxy_s[0] := #6;
|
||||||
if (proxy_s = '!proxy') then
|
if (proxy_s = '!proxy') then
|
||||||
|
useproxy:=true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if useproxy then
|
||||||
begin
|
begin
|
||||||
{$IfDef SYSTEM_DEBUG_STARTUP}
|
|
||||||
Writeln(stderr,'proxy command line ');
|
|
||||||
{$EndIf SYSTEM_DEBUG_STARTUP}
|
|
||||||
proxy_argc := atohex(largs[2]);
|
proxy_argc := atohex(largs[2]);
|
||||||
proxy_seg := atohex(largs[3]);
|
proxy_seg := atohex(largs[3]);
|
||||||
proxy_ofs := atohex(largs[4]);
|
proxy_ofs := atohex(largs[4]);
|
||||||
|
{$IfDef SYSTEM_DEBUG_STARTUP}
|
||||||
|
Writeln(stderr,'proxy command line found');
|
||||||
|
writeln(stderr,'argc: ',proxy_argc,' seg: ',proxy_seg,' ofs: ',proxy_ofs);
|
||||||
|
{$EndIf SYSTEM_DEBUG_STARTUP}
|
||||||
|
if proxy_argc>128 then
|
||||||
|
proxy_argc:=128;
|
||||||
rm_argv := sysgetmem(proxy_argc*sizeof(word));
|
rm_argv := sysgetmem(proxy_argc*sizeof(word));
|
||||||
sysseg_move(dos_selector,proxy_seg*16+proxy_ofs, get_ds,longint(rm_argv),proxy_argc*sizeof(word));
|
sysseg_move(dos_selector,proxy_seg*16+proxy_ofs, get_ds,longint(rm_argv),proxy_argc*sizeof(word));
|
||||||
for i:=0 to proxy_argc - 1 do
|
for i:=0 to proxy_argc - 1 do
|
||||||
@ -394,12 +428,12 @@ if (argc > 1) and (far_strlen(get_ds,longint(largs[1])) = 6) then
|
|||||||
largs[i] := sysgetmem(al+1);
|
largs[i] := sysgetmem(al+1);
|
||||||
sysseg_move(dos_selector, lin, get_ds,longint(largs[i]), al+1);
|
sysseg_move(dos_selector, lin, get_ds,longint(largs[i]), al+1);
|
||||||
{$IfDef SYSTEM_DEBUG_STARTUP}
|
{$IfDef SYSTEM_DEBUG_STARTUP}
|
||||||
Writeln(stderr,'arg ',i,' #',largs[i],'#');
|
Writeln(stderr,'arg ',i,' #',rm_argv^[i],'#',al,'#',largs[i],'#');
|
||||||
{$EndIf SYSTEM_DEBUG_STARTUP}
|
{$EndIf SYSTEM_DEBUG_STARTUP}
|
||||||
end;
|
end;
|
||||||
|
sysfreemem(rm_argv);
|
||||||
argc := proxy_argc;
|
argc := proxy_argc;
|
||||||
end;
|
end;
|
||||||
end;
|
|
||||||
argv := sysgetmem(argc shl 2);
|
argv := sysgetmem(argc shl 2);
|
||||||
for i := 0 to argc-1 do
|
for i := 0 to argc-1 do
|
||||||
argv[i]:=largs[i];
|
argv[i]:=largs[i];
|
||||||
@ -1343,7 +1377,10 @@ Begin
|
|||||||
End.
|
End.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.30 2000-01-20 23:38:02 peter
|
Revision 1.31 2000-01-24 11:57:18 daniel
|
||||||
|
* !proxy support in environment added (Peter)
|
||||||
|
|
||||||
|
Revision 1.30 2000/01/20 23:38:02 peter
|
||||||
* support fm_inout as stdoutput for assign(f,'');rewrite(f,1); becuase
|
* support fm_inout as stdoutput for assign(f,'');rewrite(f,1); becuase
|
||||||
rewrite opens always with filemode 2
|
rewrite opens always with filemode 2
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user