+ 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 -
This commit is contained in:
Jonas Maebe 2013-06-24 09:39:54 +00:00
parent 5a72bc3656
commit 112fafc6fd
2 changed files with 41 additions and 27 deletions

View File

@ -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.

View File

@ -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; Function ParamStr(Param : Integer) : ansistring;
begin
Var Len : longint; {
begin
{
Paramstr(0) should return the name of the binary. Paramstr(0) should return the name of the binary.
Since this functionality is included in the system unit, Since this functionality is included in the system unit,
we fetch it from there. we fetch it from there.
Normally, pathnames are less than 255 chars anyway, Normally, pathnames are less than 255 chars anyway,
so this will work correct in 99% of all cases. so this will work correct in 99% of all cases.
In time, the system unit should get a GetExeName call. In time, the system unit should get a GetExeName call.
} }
if (Param=0) then if (Param=0) then
Result:=System.Paramstr(0) Result:=System.Paramstr(0)
else if (Param>0) and (Param<argc) then else if (Param>0) and (Param<argc) then
begin Result:=Argv[Param]
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 else
paramstr:=''; Result:='';
end; end;
{$endif FPC_HAS_FEATURE_COMMANDARGS} {$endif FPC_HAS_FEATURE_COMMANDARGS}