DEFINITION MODULE ChanConsts;

(* Common types and values for device open requests and results *)

(* Device modules may allow combinations of the following flags to be given
   when a channel is opened. An open procedure may not accept or honor all
   combinations. *)

TYPE
  ChanFlags = (
    readFlag,		(* input operations are requested/available *)
    writeFlag,		(* output operations are requested/available *)
    oldFlag,		(* a file may/must/did exist before channel was opened *)
    textFlag,		(* text operations are requested/available *)
    rawFlag,		(* raw operations are requested/available *)
    interactiveFlag,	(* interactive use is requested/available *)
    echoFlag		(* echoing by interactive device on removal of
			 * characters from input stream requested/applies *)
  );

  FlagSet = SET OF ChanFlags;

(* Singleton values of FlagSet, to allow for example, read+write. *)
CONST
  read        = FlagSet{readFlag};
  write       = FlagSet{writeFlag};
  old         = FlagSet{oldFlag};
  text        = FlagSet{textFlag};
  raw         = FlagSet{rawFlag};
  interactive = FlagSet{interactiveFlag};
  echo        = FlagSet{echoFlag};


TYPE
  OpenResults = (    (* Possible results of open requests *)
    opened,	     (* the open succeeded as requested *)
    wrongNameFormat, (* given name is in the wrong format for the implementation *)
    wrongFlags,	     (* given flags include a value that does not apply to device *)
    tooManyOpen,     (* this device cannot support any more open channels *)
    outOfChans,      (* no more channels can be allocated *)
    wrongPermissions,(* file or directory permissions do not allow request *)
    noRoomOnDevice,  (* storage limits on the device prevent the open *)
    noSuchFile,      (* a needed file does not exist *)
    fileExists,      (* file of given name already exists, a new one is required *)
    wrongFileType,   (* file is of the wrong type to support required operations *)
    noTextOperations,(* text operations have been requested but are not supported *)
    noRawOperations, (* raw operations have been requested but are not supported *)
    noMixedOperations,(*text and binary operations have been requested but they
			are not supported in combination *)
    alreadyOpen,     (* the source/destination is already open for operations not
			supported in combination with the requested operations *)
    otherProblem     (* open failed for some other reason *)
  );

END ChanConsts.