diff --git a/packages/fcl-base/src/custapp.pp b/packages/fcl-base/src/custapp.pp index d99aa00a72..898f4a43fb 100644 --- a/packages/fcl-base/src/custapp.pp +++ b/packages/fcl-base/src/custapp.pp @@ -62,10 +62,10 @@ Type Function GetOptionValue(Const C: Char; Const S : String) : String; Function HasOption(Const S : String) : Boolean; Function HasOption(Const C : Char; Const S : String) : Boolean; - Function CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; Opts,NonOpts : TStrings) : String; - Function CheckOptions(Const ShortOptions : String; Const Longopts : TStrings) : String; - Function CheckOptions(Const ShortOptions : String; Const LongOpts : Array of string) : String; - Function CheckOptions(Const ShortOptions : String; Const LongOpts : String) : String; + Function CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; Opts,NonOpts : TStrings; AllErrors : Boolean = False) : String; + Function CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; AllErrors : Boolean = False) : String; + Function CheckOptions(Const ShortOptions : String; Const LongOpts : Array of string; AllErrors : Boolean = False) : String; + Function CheckOptions(Const ShortOptions : String; Const LongOpts : String; AllErrors : Boolean = False) : String; Procedure GetEnvironmentList(List : TStrings;NamesOnly : Boolean); Procedure GetEnvironmentList(List : TStrings); Procedure Log(EventType : TEventType; const Msg : String); @@ -390,10 +390,10 @@ begin end; -Function TCustomApplication.CheckOptions(Const ShortOptions : String; Const Longopts : TStrings) : String; +Function TCustomApplication.CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; AllErrors : Boolean = False) : String; begin - Result:=CheckOptions(ShortOptions,LongOpts,Nil,Nil); + Result:=CheckOptions(ShortOptions,LongOpts,Nil,Nil,AllErrors); end; ResourceString @@ -401,7 +401,7 @@ ResourceString SErrNoOptionAllowed = 'Option at position %d does not allow an argument: %s'; SErrOptionNeeded = 'Option at position %d needs an argument : %s'; -Function TCustomApplication.CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; Opts,NonOpts : TStrings) : String; +Function TCustomApplication.CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; Opts,NonOpts : TStrings; AllErrors : Boolean = False) : String; Var I,J,L,P : Integer; @@ -430,6 +430,14 @@ Var Result:=(I<>-1); end; + Procedure AddToResult(Const Msg : string); + + begin + If (Result<>'') then + Result:=Result+sLineBreak; + Result:=Result+Msg; + end; + begin If CaseSensitiveOptions then SO:=Shortoptions @@ -437,7 +445,7 @@ begin SO:=LowerCase(Shortoptions); Result:=''; I:=1; - While (I<=ParamCount) and (Result='') do + While (I<=ParamCount) and ((Result='') or AllErrors) do begin O:=Paramstr(I); If (Length(O)=0) or (O[1]<>FOptionChar) then @@ -448,7 +456,7 @@ begin else begin If (Length(O)<2) then - Result:=Format(SErrInvalidOption,[i,O]) + AddToResult(Format(SErrInvalidOption,[i,O])) else begin HaveArg:=False; @@ -469,19 +477,19 @@ begin If FindLongopt(O) then begin If HaveArg then - Result:=Format(SErrNoOptionAllowed,[I,O]) + AddToResult(Format(SErrNoOptionAllowed,[I,O])) end else begin // Required argument If FindLongOpt(O+':') then begin If Not HaveArg then - Result:=Format(SErrOptionNeeded,[I,O]); + AddToResult(Format(SErrOptionNeeded,[I,O])); end else begin // Optional Argument. If not FindLongOpt(O+'::') then - Result:=Format(SErrInvalidOption,[I,O]); + AddToResult(Format(SErrInvalidOption,[I,O])); end; end; end @@ -494,11 +502,11 @@ begin O:=LowerCase(O); L:=Length(O); J:=2; - While (result='') and (J<=L) do + While ((Result='') or AllErrors) and (J<=L) do begin P:=Pos(O[J],ShortOptions); If (P=0) or (O[j]=':') then - Result:=Format(SErrInvalidOption,[I,O[J]]) + AddToResult(Format(SErrInvalidOption,[I,O[J]])) else begin If (P':') Then If (J