DEFINITION MODULE Options;
(*
        Read a file specification, with options, from the terminal


Derived from the Lilith Modula-2 system developed by the
group of Prof. N. Wirth at ETH Zurich, Switzerland.
*)

  EXPORT QUALIFIED NameParts, NamePartSet, Termination,
                   FileNameAndOptions, GetOption;


  TYPE Termination = (norm, empty, can, esc);
       NameParts = (NameDrive, NamePath, NameName, NameExt);
       NamePartSet = SET OF NameParts;

PROCEDURE FileNameAndOptions(default:        ARRAY OF CHAR;
                             VAR name:       ARRAY OF CHAR;
                             VAR term:       Termination;
                             acceptOption:   BOOLEAN;
                             VAR ReadInName: NamePartSet);
(*- Read file name and options from terminal.
in:     default         the file specification to use if one is not entered,
        acceptOption    if TRUE, allow options to be entered,
out:    name            the file specification,
        term            how the read ended,
        ReadInName      which parts of specification are present.

'term' returns the status of the input termination:
      norm   : normally terminated
      empty  : normally terminated, but name is empty
      can    : <can> is typed, input line cancelled
      esc    : <esc> is typed, no file specified.

Input is terminated by a <cr>, blank, <can>, or <esc>.
<bs> and <del> are allowed while entering the file name.
*)


PROCEDURE GetOption(VAR optStr: ARRAY OF CHAR; VAR length: CARDINAL);
(*- Get another option from the last call to FileNameAndOptions.
out:    optStr          text of the option,
        length          length of optStr.

Calls to GetOption return the options from the last call to
FileNameAndOptions, in the order they were entered.  When there are
no more options, a length of 0 is returned.
*)

END Options.
