Quick fix for codegen. Still have to use this new unit to parse command line options...

This commit is contained in:
ocoursiere
2003-12-18 22:52:14 +00:00
parent 4b7d335b18
commit 870e215aff

View File

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