diff --git a/bepascal/source/tools/codegen/pas/optionreader.pp b/bepascal/source/tools/codegen/pas/optionreader.pp new file mode 100644 index 0000000..9d4d942 --- /dev/null +++ b/bepascal/source/tools/codegen/pas/optionreader.pp @@ -0,0 +1,126 @@ +{ BePascal - A pascal wrapper around the BeOS API + Copyright (C) 2003 Olivier Coursiere + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +} +unit optionreader; + +interface + +{$H+} // use AnsiStrings + +uses + Classes, SysUtils, GetOpts; + +type + TAnOption = class(TObject) + private + FName : String; + FHas_arg : Integer; + FFlag : PChar; + FValue : Char; + FArg : string; + public + constructor Create(Option : TOption; aArg : string); virtual; + property Name : String read FName; + property Has_arg : Integer read FHas_arg; + property Flag : PChar read FFlag; + property Value : Char read FValue; + property Arg : string read FArg; + end; + TOptions = class(TObject) + private + FStringList : TStringList; + function GetOptions(OptionName : string) : TAnOption; + public + constructor Create(OptionList : string; LongOpts : POption); virtual; + destructor Destroy; override; + property Options[OptionName : string] : TAnOption read GetOptions; + end; + +implementation + +constructor TAnOption.Create(Option : TOption; aArg : string); +begin + inherited Create; + FName := Option.Name; + FHas_arg := Option.Has_arg; + FFlag := Option.Flag; + FValue := Option.Value; + FArg := aArg; +end; + +constructor TOptions.Create(OptionList : string; LongOpts : POption); +var + OptionIndex : Longint; + c : Char; + i : integer; + aOption : TOption; +begin + inherited Create; + OptionIndex := 0; + FStringList := TStringList.Create; + FStringList.Sorted := True; + c := GetLongOpts(OptionList, LongOpts, OptionIndex); + while c <> EndOfOptions do + begin + case c of + 'a', + 'b' : + begin + FillChar(aOption, SizeOf(aOption), #0); + aOption.Name := c; + FStringList.AddObject(c, TAnOption.Create(aOption, OptArg)); + end; + #0 : + begin + FStringList.AddObject(LongOpts[OptionIndex - 1].Name, TAnOption.Create(LongOpts[OptionIndex - 1], OptArg)); + end; + '?' : WriteLn('Error'); + end; + c := GetLongOpts(OptionList, LongOpts, OptionIndex); + end; + WriteLn(FStringList.Text); + for i := 0 to FStringList.Count - 1 do + begin + WriteLn(FStringList[i] + ' : ' + (FStringList.Objects[i] as TAnOption).Arg); + end; +end; + +destructor TOptions.Destroy; +var + i : integer; +begin + for i := 0 to FStringList.Count - 1 do + begin + FStringList.Objects[i].Free; + end; + FStringList.Free; + inherited; +end; + +function TOptions.GetOptions(OptionName : string) : TAnOption; +var + index : integer; +begin + if FStringList.Find(OptionName, index) then + begin + Result := FStringList.Objects[index] as TAnOption; + end + else + Result := nil; +end; + +end.