Browse Source

* paramstr(0) support

peter 25 years ago
parent
commit
df5b664031
2 changed files with 49 additions and 34 deletions
  1. 23 1
      rtl/linux/syscalls.inc
  2. 26 33
      rtl/linux/syslinux.pp

+ 23 - 1
rtl/linux/syscalls.inc

@@ -258,6 +258,17 @@ begin
 end;
 end;
 
 
 
 
+Function Sys_ReadLink(name,linkname:pchar;maxlen:longint):longint;
+var
+  regs : SysCallRegs;
+begin
+  regs.reg2:=longint(name);
+  regs.reg3:=longint(linkname);
+  regs.reg4:=maxlen;
+  Sys_ReadLink:=SysCall(Syscall_nr_readlink,regs);
+end;
+
+
 {*****************************************************************************
 {*****************************************************************************
                --- Directory:Directory related calls ---
                --- Directory:Directory related calls ---
 *****************************************************************************}
 *****************************************************************************}
@@ -360,6 +371,14 @@ end;
         --- Process:Process & program handling - related calls ---
         --- Process:Process & program handling - related calls ---
 *****************************************************************************}
 *****************************************************************************}
 
 
+Function Sys_GetPid:LongInt;
+var
+  regs : SysCallregs;
+begin
+  Sys_GetPid:=SysCall(SysCall_nr_getpid,regs);
+end;
+
+
 Procedure Sys_Exit(ExitCode:Integer);
 Procedure Sys_Exit(ExitCode:Integer);
 var
 var
   regs : SysCallregs;
   regs : SysCallregs;
@@ -370,7 +389,10 @@ end;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.8  2000-01-07 16:41:41  daniel
+  Revision 1.9  2000-02-08 11:47:09  peter
+    * paramstr(0) support
+
+  Revision 1.8  2000/01/07 16:41:41  daniel
     * copyright 2000
     * copyright 2000
 
 
   Revision 1.7  2000/01/07 16:32:28  daniel
   Revision 1.7  2000/01/07 16:32:28  daniel

+ 26 - 33
rtl/linux/syslinux.pp

@@ -106,45 +106,35 @@ End;
 
 
 Function ParamCount: Longint;
 Function ParamCount: Longint;
 Begin
 Begin
-{$ifdef crtlib}
-  ParamCount:=_rtl_paramcount;
-{$else}
   Paramcount:=argc-1
   Paramcount:=argc-1
-{$endif}
 End;
 End;
 
 
 
 
 Function ParamStr(l: Longint): String;
 Function ParamStr(l: Longint): String;
-Var
-{$ifndef crtlib}
-  i      : longint;
-  pp     : ppchar;
-{$else}
-  b      : Array[0..255] of Char;
-{$endif}
-Begin
-{$ifdef crtlib}
-  _rtl_paramstr(@b, l);
-  ParamStr:=StrPas(b);
-{$else}
-  if l>argc then
-   begin
-     paramstr:='';
-     exit
-   end;
-  pp:=argv;
-  i:=0;
-  while (i<l) and (pp^<>nil) do
+var
+  link,
+  hs : string;
+  i : longint;
+begin
+  if l=0 then
    begin
    begin
-     inc(pp);
-     inc(i);
-   end;
-  if pp^<>nil then
-    Paramstr:=StrPas(pp^)
+     str(sys_getpid,hs);
+     hs:='/proc/'+hs+'/exe'#0;
+     i:=Sys_readlink(@hs[1],@link[1],high(link));
+     if i>0 then
+      begin
+        link[0]:=chr(i);
+        paramstr:=link;
+      end
+     else
+      paramstr:=strpas(argv[0]);
+   end
   else
   else
-    ParamStr:='';
-{$endif}
-End;
+   if (l>0) and (l<argc) then
+    paramstr:=strpas(argv[l])
+  else
+    paramstr:='';
+end;
 
 
 
 
 Procedure Randomize;
 Procedure Randomize;
@@ -745,7 +735,10 @@ End.
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.34  2000-01-20 23:38:02  peter
+  Revision 1.35  2000-02-08 11:47:09  peter
+    * paramstr(0) support
+
+  Revision 1.34  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