+ 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;
pchar = pwidechar;
{$ifdef FPC_HAS_FEATURE_COMMANDARGS}
Function ParamStr(Param: Longint): UnicodeString;
{$endif FPC_HAS_FEATURE_COMMANDARGS}
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.

View File

@ -214,33 +214,23 @@ end;
{$endif FPC_HAS_FEATURE_FILEIO}
{$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}