Browse Source

+ paramstr(longint):unicode string function in uuchar
* optimised objpas.paramstr (let the compiler convert the pchar to
ansistring instead of using an unoptimised loop)

git-svn-id: branches/cpstrrtl@24958 -

Jonas Maebe 12 years ago
parent
commit
112fafc6fd
2 changed files with 41 additions and 27 deletions
  1. 24 0
      rtl/inc/uuchar.pp
  2. 17 27
      rtl/objpas/objpas.pp

+ 24 - 0
rtl/inc/uuchar.pp

@@ -21,7 +21,31 @@ interface
     char = widechar;
     char = widechar;
     pchar = pwidechar;
     pchar = pwidechar;
 
 
+
+{$ifdef FPC_HAS_FEATURE_COMMANDARGS}
+Function ParamStr(Param: Longint): UnicodeString;
+{$endif FPC_HAS_FEATURE_COMMANDARGS}
+
 implementation
 implementation
 
 
+{$ifdef FPC_HAS_FEATURE_COMMANDARGS}
+Function ParamStr(Param: Longint): UnicodeString;
+  begin
+  {
+    Paramstr(0) should return the name of the binary.
+    Since this functionality is included in the system unit,
+    we fetch it from there.
+    Normally, pathnames are less than 255 chars anyway,
+    so this will work correct in 99% of all cases.
+    In time, the system unit should get a GetExeName call.
+  }
+    if (Param=0) then
+      Paramstr:=System.Paramstr(0)
+    else if (Param>0) and (Param<argc) then
+      paramstr:=UnicodeString(Argv[Param])
+    else
+      paramstr:='';
+  end;
+{$endif FPC_HAS_FEATURE_COMMANDARGS}
 
 
 end.
 end.

+ 17 - 27
rtl/objpas/objpas.pp

@@ -214,33 +214,23 @@ end;
 {$endif FPC_HAS_FEATURE_FILEIO}
 {$endif FPC_HAS_FEATURE_FILEIO}
 
 
 {$ifdef FPC_HAS_FEATURE_COMMANDARGS}
 {$ifdef FPC_HAS_FEATURE_COMMANDARGS}
-Function ParamStr(Param : Integer) : Ansistring;
-
-Var Len : longint;
-
-begin
-{
-  Paramstr(0) should return the name of the binary.
-  Since this functionality is included in the system unit,
-  we fetch it from there.
-  Normally, pathnames are less than 255 chars anyway,
-  so this will work correct in 99% of all cases.
-  In time, the system unit should get a GetExeName call.
-}
-  if (Param=0) then
-    Result:=System.Paramstr(0)
-  else if (Param>0) and (Param<argc) then
-    begin
-    Len:=0;
-    While Argv[Param][Len]<>#0 do
-      Inc(len);
-    SetLength(Result,Len);
-    If Len>0 then
-      Move(Argv[Param][0],Result[1],Len);
-    end
-  else
-    paramstr:='';
-end;
+Function ParamStr(Param : Integer) : ansistring;
+  begin
+  {
+    Paramstr(0) should return the name of the binary.
+    Since this functionality is included in the system unit,
+    we fetch it from there.
+    Normally, pathnames are less than 255 chars anyway,
+    so this will work correct in 99% of all cases.
+    In time, the system unit should get a GetExeName call.
+  }
+    if (Param=0) then
+      Result:=System.Paramstr(0)
+    else if (Param>0) and (Param<argc) then
+      Result:=Argv[Param]
+    else
+      Result:='';
+  end;
 {$endif FPC_HAS_FEATURE_COMMANDARGS}
 {$endif FPC_HAS_FEATURE_COMMANDARGS}