Quick fix for codegen. Still have to use this new unit to parse command line options...
This commit is contained in:
126
bepascal/source/tools/codegen/pas/optionreader.pp
Normal file
126
bepascal/source/tools/codegen/pas/optionreader.pp
Normal 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.
|
||||||
Reference in New Issue
Block a user