[Overview][Constants][Types][Procedures and functions][Variables][Index] | Reference for unit 'getopts' (#rtl)

# GetOpt

Get next short option.

## Declaration

Source position: getopts.pp line 51

`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 |  | Return next long option.

## Example

    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.