2
0
Эх сурвалжийг харах

AROS: Copy WBArgs to argv so its available for Objpas.ParamStr()

git-svn-id: trunk@30886 -
marcus 10 жил өмнө
parent
commit
ff56b81ad3
1 өөрчлөгдсөн 58 нэмэгдсэн , 50 устгасан
  1. 58 50
      rtl/aros/system.pp

+ 58 - 50
rtl/aros/system.pp

@@ -141,7 +141,7 @@ begin
   //
   if AOS_wbMsg <> nil then
   begin
-    // forbid -> Amiga RKM Libraries Manual 
+    // forbid -> Amiga RKM Libraries Manual
     Forbid();
     // Reply WBStartupMessage
     ReplyMsg(AOS_wbMsg);
@@ -150,6 +150,50 @@ begin
   HaltProc(ExitCode);
 end;
 
+function GetWBArgsNum: Integer;
+var
+  startup: PWBStartup;
+begin
+  GetWBArgsNum := 0;
+  Startup := nil;
+  Startup := PWBStartup(AOS_wbMsg);
+  if Startup <> nil then
+  begin
+    Result := Startup^.sm_NumArgs - 1;
+  end;
+end;
+
+function GetWBArg(Idx: Integer): string;
+var
+  startup: PWBStartup;
+  wbarg: PWBArgList;
+  Path: array[0..254] of Char;
+  strPath: string;
+  Len: Integer;
+begin
+  GetWBArg := '';
+  FillChar(Path[0],255,#0);
+  Startup := PWBStartup(AOS_wbMsg);
+  if Startup <> nil then
+  begin
+    //if (Idx >= 0) and (Idx < Startup^.sm_NumArgs) then
+    begin
+      wbarg := Startup^.sm_ArgList;
+      if NameFromLock(wbarg^[Idx + 1].wa_Lock,@Path[0],255) then
+      begin
+        Len := 0;
+        while (Path[Len] <> #0) and (Len < 254) do
+          Inc(Len);
+        if Len > 0 then
+          if (Path[Len - 1] <> ':') and (Path[Len - 1] <> '/') then
+            Path[Len] := '/';
+        strPath := Path;
+      end;
+      Result := strPath + wbarg^[Idx + 1].wa_Name;
+    end;
+  end;
+end;
+
 { Generates correct argument array on startup }
 procedure GenerateArgs;
 var
@@ -175,6 +219,7 @@ var
   Start: Word;
   Ende: Word;
   LocalIndex: Word;
+  i: Integer;
   P : PChar;
   {$H+}
   Temp : string;
@@ -192,7 +237,14 @@ begin
   { check if we're started from Workbench }
   if AOS_wbMsg <> nil then
   begin
-    ArgC := 0;
+    ArgC := GetWBArgsNum + 1;
+    for i := 1 to ArgC - 1 do
+    begin
+      Temp := GetWBArg(i);
+      AllocArg(i, Length(Temp));
+      Move(Temp[1], Argv[i]^, Length(Temp));
+      Argv[i][Length(Temp)] := #0;
+    end;
     Exit;
   end;
 
@@ -215,7 +267,7 @@ begin
     begin
       while (p[count]<>#0) and (p[count]<>'"') and (p[count]<>LineEnding) do
       begin
-        Inc(Count) 
+        Inc(Count)
       end;
     end else
     begin
@@ -239,7 +291,7 @@ begin
     end;
     if inQuotes and (p[count] = '"') then
       Inc(Count);
-    inQuotes := False; 
+    inQuotes := False;
   end;
   argc:=localindex;
 end;
@@ -297,50 +349,6 @@ end;
                              ParamStr/Randomize
 *****************************************************************************}
 
-function GetWBArgsNum: Integer;
-var
-  startup: PWBStartup;
-begin
-  GetWBArgsNum := 0;
-  Startup := nil;
-  Startup := PWBStartup(AOS_wbMsg);
-  if Startup <> nil then
-  begin
-    Result := Startup^.sm_NumArgs - 1;
-  end;
-end;
-
-function GetWBArg(Idx: Integer): string;
-var
-  startup: PWBStartup;
-  wbarg: PWBArgList;
-  Path: array[0..254] of Char;
-  strPath: string;
-  Len: Integer;
-begin
-  GetWBArg := '';
-  FillChar(Path[0],255,#0);
-  Startup := PWBStartup(AOS_wbMsg);
-  if Startup <> nil then
-  begin
-    //if (Idx >= 0) and (Idx < Startup^.sm_NumArgs) then
-    begin
-      wbarg := Startup^.sm_ArgList;
-      if NameFromLock(wbarg^[Idx + 1].wa_Lock,@Path[0],255) then
-      begin
-        Len := 0;
-        while (Path[Len] <> #0) and (Len < 254) do
-          Inc(Len);
-        if Len > 0 then
-          if (Path[Len - 1] <> ':') and (Path[Len - 1] <> '/') then
-            Path[Len] := '/';
-        strPath := Path;
-      end;
-      Result := strPath + wbarg^[Idx + 1].wa_Name;
-    end;
-  end;
-end;
-
 { number of args }
 function paramcount : longint;
 begin
@@ -401,12 +409,12 @@ begin
   AOS_UtilityBase := OpenLibrary('utility.library', 0);
   if AOS_UtilityBase = nil then
     Halt(1);
-    
+
   { Creating the memory pool for growing heap }
   ASYS_heapPool := CreatePool(MEMF_ANY or MEMF_SEM_PROTECTED, growheapsize2, growheapsize1);
   if ASYS_heapPool = nil then
     Halt(1);
-  
+
   if AOS_wbMsg = nil then begin
     StdInputHandle := THandle(dosInput);
     StdOutputHandle := THandle(dosOutput);