| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #pragma hdrstop
- #include "ProgParams.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- //---------------------------------------------------------------------------
- TProgramParams::TProgramParams()
- {
- FSwitchMarks = "-/";
- FSwitchValueDelimiters = ":=";
- FIgnoreCase = true;
- FParamCount = -1;
- }
- //---------------------------------------------------------------------------
- Integer __fastcall TProgramParams::GetCount()
- {
- return ::ParamCount();
- }
- //---------------------------------------------------------------------------
- TParamType __fastcall TProgramParams::ParamType(Integer Index, AnsiString & Value)
- {
- if (Index < 1 || Index > Count) throw Exception("");
- Value = ParamStr(Index);
- if (!Value.IsEmpty() && (FSwitchMarks.Pos(Value[1]) > 0))
- {
- Value.Delete(1, 1);
- return ptSwitch;
- }
- else return ptParam;
- }
- //---------------------------------------------------------------------------
- Integer __fastcall TProgramParams::GetParamCount()
- {
- if (FParamCount < 0)
- {
- FParamCount = 0;
- AnsiString S;
- for (Integer Index = 1; Index <= Count; Index++)
- if (ParamType(Index, S) == ptParam) FParamCount++;
- }
- return FParamCount;
- }
- //---------------------------------------------------------------------------
- AnsiString __fastcall TProgramParams::GetParam(Integer Index)
- {
- if (Index < 0 || Index > ParamCount) throw Exception("");
- if (Index == 0) return ParamStr(0);
- else
- {
- AnsiString S;
- Integer P = 1;
- while (Index > 0)
- {
- if (ParamType(P, S) == ptParam) Index--;
- P++;
- }
- return S;
- }
- }
- //---------------------------------------------------------------------------
- bool __fastcall TProgramParams::FindSwitch(const AnsiString Switch,
- AnsiString & Value, int & Position)
- {
- Position = 0;
- for (Integer Index = 1; Index <= Count; Index++)
- {
- AnsiString S;
- if (ParamType(Index, S) == ptParam) Position++;
- else
- if (ParamType(Index, S) == ptSwitch)
- {
- bool HasValue = false;
- AnsiString Sw, V;
- Integer Pos = 1;
- while (Pos <= S.Length() && !HasValue)
- {
- HasValue = S.IsDelimiter(FSwitchValueDelimiters, Pos);
- if (!HasValue) Pos++;
- }
- if (HasValue)
- {
- Sw = S.SubString(1, Pos-1);
- V = S.SubString(Pos+1, S.Length()-Pos);
- }
- else
- {
- Sw = S;
- V = "";
- };
- if ((IgnoreCase && (AnsiCompareText(Switch, Sw) == 0)) ||
- (!IgnoreCase && (AnsiCompareStr(Switch, Sw) == 0)))
- {
- Value = V;
- return true;
- }
- }
- }
- Position = 0;
- return false;
- }
- //---------------------------------------------------------------------------
- bool __fastcall TProgramParams::FindSwitch(const AnsiString Switch, AnsiString & Value)
- {
- int Position;
- return FindSwitch(Switch, Value, Position);
- }
- //---------------------------------------------------------------------------
- bool __fastcall TProgramParams::FindSwitch(const AnsiString Switch)
- {
- AnsiString Value;
- int Position;
- return FindSwitch(Switch, Value, Position);
- }
- //---------------------------------------------------------------------------
- AnsiString __fastcall TProgramParams::SwitchValue(const AnsiString Switch, const AnsiString Default)
- {
- AnsiString Value;
- FindSwitch(Switch, Value);
- if (Value.IsEmpty()) Value = Default;
- return Value;
- }
|