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