{
> This leads me to a question that I've often wondered about, but never
> Really bothered to ask anyone: why use a delimiter (commonly '/' or '-')
> preceeding the parameter option?
How would you parse the following command tail:
COPY XYZZY.PAS V:\/S/P/O
if it was entered as
COPY XYZZY.PAS V:\SPO
The delimiter is there to - yes - delimit the parameter from the Text preceding
it.
(and BTW: All the code examples shown here won't take care of this problem,
since they don't allow imbedded parameters. Try this one instead:)
}
Function CAPS(S : String) : String; Assembler;
Asm
PUSH DS
LDS SI,S
LES DI,@Result
CLD
LODSB
STOSB
xor CH,CH
MOV CL,AL
JCXZ @OUT
@LOOP: LODSB
CMP AL,'a'
JB @NEXT
CMP AL,'z'
JA @NEXT
SUB AL,20h
@NEXT: STOSB
LOOP @LOOP
@OUT: POP DS
end;
Function Switch(C : Char) : Boolean;
Var
CommandTail : ^String;
P : Word;
begin
CommandTail := PTR(PrefixSeg, $0080);
P := POS('/' + UpCase(C), CAPS(CommandTail^));
if P = 0 then
Switch := False
ELSE
begin
Switch := True;
DELETE(CommandTail^, P, 2)
end
end;
{
The CAPS routine only converts the 'a' to 'z' range (I have one in my library
that converts all international Characters, but this was a simple one I could
Type in without looking in my library).
The Switch Function also has the added benefit that it strips off the switch
from the command line after having tested For it. This way, you should Program
your Programs in the following way:
[...]
}
begin
GetSwitchs;
CopyFile(ParamStr(1),ParamStr(2))
end.
{
and the switches can then be at ANY place on the command line, and the Program
will still Function correctly.
}