127 lines
3.8 KiB
ObjectPascal
127 lines
3.8 KiB
ObjectPascal
{ 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.
|