[prev] [prev-tail] [tail] [up]

### 5.2 Procedures and functions

#### GetLongOpts

Declaration:
  Function GetLongOpts (Shortopts : String, LongOpts : POption; var Longint : Longint ) : Char;
Description:

  Returns the next option found on the command-line, taking into account long options as well. If no more options are found, returns EndOfOptions. If the option requires an argument, it is returned in the OptArg variable. ShortOptions is a string containing all possible one-letter options. (see Getopt (111) for its description and use) LongOpts is a pointer to the first element of an array of Option records, the last of which needs a name of zero length. The function tries to match the names even partially (i.e. --app will match e.g. the append option), but will report an error in case of ambiguity. If the option needs an argument, set Has_arg to Required_argument, if the option optionally has an argument, set Has_arg to Optional_argument. If the option needs no argument, set Has_arg to zero. Required arguments can be specified in two ways :

  1. Pasted to the option : --option=value
  2. As a separate argument : --option value

  Optional arguments can only be specified through the first method.

Errors:
  see Getopt (111), getopt (3)
See also:
  Getopt

#### Getopt

Declaration:
  Function Getopt (Shortopts : String) : Char;
Description:

  Returns the next option found on the command-line. If no more options are found, returns EndOfOptions. If the option requires an argument, it is returned in the OptArg variable. ShortOptions is a string containing all possible one-letter options. If a letter is followed by a colon (:), then that option needs an argument. If a letter is followed by 2 colons, the option has an optional argument. If the first character of shortoptions is a '+' then options following a non-option are regarded as non-options (standard Unix behavior). If it is a '-', then all non-options are treated as arguments of a option with character #0. This is useful for applications that require their options in the exact order as they appear on the command-line. If the first character of shortoptions is none of the above, options and non-options are permuted, so all non-options are behind all options. This allows options and non-options to be in random order on the command line.

Errors:

  Errors are reported through giving back a '?' character. OptOpt then gives the character which caused the error. If OptErr is True then getopt prints an error-message to stdout.

See also:
  GetLongOpts (111), getopt (3)

Listing: optex/optex.pp

program testopt;
{ Program to depmonstrate the getopts function. }
{
Valid calls to this program are
optex --verbose --add me --delete you
optex --append --create child
optex -ab -c me -d you
and so on
}
uses getopts;
var c : char;
optionindex : Longint;
theopts : array[1..7] of TOption;
begin
with theopts[1] do
begin
name:='add';
has_arg:=1;
flag:=nil;
value:=#0;
end;
with theopts[2] do
begin
name:='append';
has_arg:=0;
flag:=nil;
value:=#0;
end;
with theopts[3] do
begin
name:='delete';
has_arg:=1;
flag:=nil;
value:=#0;
end;
with theopts[4] do
begin
name:='verbose';
has_arg:=0;
flag:=nil;
value:=#0;
end;
with theopts[5] do
begin
name:='create';
has_arg:=1;
flag:=nil;
value:='c'
end;
with theopts[6] do
begin
name:='file';
has_arg:=1;
flag:=nil;
value:=#0;
end;
with theopts[7] do
begin
name:='';
has_arg:=0;
flag:=nil;
end;
c:=#0;
repeat
c:=getlongopts('abc:d:012',@theopts[1],optionindex);
case c of
'1','2','3','4','5','6','7','8','9' :
begin
writeln ('Got optind : ',c)
end;
#0 : begin
write ('Long option : ',theopts[optionindex].name);
if theopts[optionindex].has_arg>0 then
writeln (' With value : ',optarg)
else
writeln
end;
'a' : writeln ('Option a.');
'b' : writeln ('Option b.');
'c' : writeln ('Option c : ', optarg);
'd' : writeln ('Option d : ', optarg);
'?',':' : writeln ('Error with opt : ',optopt);
end; { case }
until c=endofoptions;
if optind<=paramcount then
begin
write ('Non options : ');
while optind<=paramcount do
begin
write (paramstr(optind),' ');
inc(optind)
end;
writeln
end
end.

[prev] [prev-tail] [front] [up]