116 lines
2.5 KiB
ObjectPascal
116 lines
2.5 KiB
ObjectPascal
{
|
|
* Implements a class that parses command lines and records parameters.
|
|
}
|
|
|
|
|
|
unit UBPatchParams;
|
|
|
|
interface
|
|
|
|
uses
|
|
// Project
|
|
UBaseParams;
|
|
|
|
type
|
|
|
|
TParams = class(TBaseParams)
|
|
private
|
|
fOldFileName: string;
|
|
fNewFileName: string;
|
|
fPatchFileName: string;
|
|
protected
|
|
function ParseLongOption(const Option: string; var ParamIdx: Integer;
|
|
var Terminated: Boolean): Boolean; override;
|
|
function ParseShortOption(const Options: string; const OptionIdx: Integer;
|
|
var ParamIdx: Integer; var Terminated: Boolean): Boolean; override;
|
|
procedure ParseFileName(const FileName: string); override;
|
|
procedure Finalize; override;
|
|
public
|
|
constructor Create;
|
|
property OldFileName: string read fOldFileName;
|
|
property NewFileName: string read fNewFileName;
|
|
property PatchFileName: string read fPatchFileName;
|
|
property Help;
|
|
property Version;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
// Delphi
|
|
StrUtils;
|
|
|
|
{ TParams }
|
|
|
|
constructor TParams.Create;
|
|
begin
|
|
inherited;
|
|
fOldFileName := '';
|
|
fNewFileName := '';
|
|
fPatchFileName := '';
|
|
end;
|
|
|
|
procedure TParams.Finalize;
|
|
begin
|
|
if fOldFileName = '' then
|
|
Error('file name argument missing');
|
|
if fNewFileName = '' then
|
|
fNewFileName := fOldFileName;
|
|
end;
|
|
|
|
procedure TParams.ParseFileName(const FileName: string);
|
|
begin
|
|
if fOldFileName = '' then
|
|
fOldFileName := FileName
|
|
else if fNewFileName = '' then
|
|
fNewFileName := FileName
|
|
else
|
|
Error('too many file names on command line');
|
|
end;
|
|
|
|
function TParams.ParseLongOption(const Option: string; var ParamIdx: Integer;
|
|
var Terminated: Boolean): Boolean;
|
|
begin
|
|
Result := inherited ParseLongOption(Option, ParamIdx, Terminated);
|
|
if Result then
|
|
Exit;
|
|
Result := True;
|
|
if Option = '--input' then
|
|
begin
|
|
Inc(ParamIdx);
|
|
if ParamStr(ParamIdx) = '' then
|
|
Error('missing argument to ''--input''');
|
|
fPatchFileName := ParamStr(ParamIdx);
|
|
end
|
|
else if AnsiStartsStr('--input=', Option) then
|
|
fPatchFileName := StripLeadingChars(Option, Length('--input='))
|
|
else
|
|
Result := False;
|
|
end;
|
|
|
|
function TParams.ParseShortOption(const Options: string;
|
|
const OptionIdx: Integer; var ParamIdx: Integer; var Terminated: Boolean):
|
|
Boolean;
|
|
begin
|
|
Result := inherited ParseShortOption(
|
|
Options, OptionIdx, ParamIdx, Terminated
|
|
);
|
|
if Result then
|
|
Exit;
|
|
Result := True;
|
|
case Options[OptionIdx] of
|
|
'i':
|
|
begin
|
|
Inc(ParamIdx);
|
|
if ParamStr(ParamIdx) = '' then
|
|
Error('missing argument to ''-i''');
|
|
fPatchFileName := ParamStr(ParamIdx);
|
|
end
|
|
else
|
|
Result := False;
|
|
end;
|
|
end;
|
|
|
|
end.
|
|
|