DEFINITION MODULE Program;
(* PANOS Program Control. *)

FROM DecodeArg IMPORT DecodedInformation;

EXPORT QUALIFIED Call, Run, Obey, Invoke, CallRunOrObey,
		 Name, FileName, Stop, SetKnownCommandsPath, Arguments,
		 Verbosity, IdentifyRequired, HelpRequired,
		 SwitchRequired, VerbosityRequired,
		 CallProcedure,	RunFile, ObeyFile, Execute,
		 XCall,	XRun, XObey, XInvoke, XCallRunOrObey,
		 XName,	XFileName, XStop, XSetKnownCommandsPath, XArguments,
		 XVerbosity, XIdentifyRequired,	XHelpRequired,
		 XSwitchRequired, XVerbosityRequired,
		 XCallProcedure, XRunFile, XObeyFile, XExecute;

(* ----------------------------------------------------------------------- *)
PROCEDURE Call(
  fileName: ARRAY OF CHAR;	 (* in *)
  procedureName: ARRAY OF CHAR;	 (* in *)
  argumentString: ARRAY	OF CHAR) (* in *)
  : INTEGER;	     (*	result = as returned by	procedure or error code	*)

(* ----------------------------------------------------------------------- *)
PROCEDURE Run(
  fileName: ARRAY OF CHAR;	 (* in *)
  argumentString: ARRAY	OF CHAR) (* in *)
  : INTEGER;	     (*	result = as returned by	program	or error code *)

(* ----------------------------------------------------------------------- *)
PROCEDURE Obey(
  commandFileName: ARRAY OF CHAR; (* in	*)
  argumentString: ARRAY	OF CHAR)  (* in	*)
  : INTEGER;	     (*	result = as returned by	command	file or	error code *)

(* ----------------------------------------------------------------------- *)
PROCEDURE Invoke(
  objectName: ARRAY OF CHAR;	 (* in *)
  argumentString: ARRAY	OF CHAR) (* in *)
  : INTEGER;	    (* result =	returned from program run or error*)

(* ----------------------------------------------------------------------- *)
PROCEDURE CallRunOrObey(
  name:	ARRAY OF CHAR;		 (* in *)
  objectName: ARRAY OF CHAR;	 (* in *)
  argumentString: ARRAY	OF CHAR) (* in *)
  : INTEGER;	    (* result =	returned from program run or error*)

(* ----------------------------------------------------------------------- *)
PROCEDURE Name(
  VAR programName: ARRAY OF CHAR) (* out *)
  : CARDINAL;			  (* result = programNameLength	*)

(* ----------------------------------------------------------------------- *)
PROCEDURE FileName(
  VAR programPath: ARRAY OF CHAR) (* out *)
  : CARDINAL;			  (* result = programPathLength	*)

(* ----------------------------------------------------------------------- *)
PROCEDURE Stop(resultCode: INTEGER); (*	in *)

(* ----------------------------------------------------------------------- *)
PROCEDURE SetKnownCommandsPath(
  pathList: ARRAY OF CHAR) (* in *)
  : INTEGER;		   (* result >=	0 success else error *)

(* ----------------------------------------------------------------------- *)
PROCEDURE Arguments(
  VAR argumentString: ARRAY OF CHAR) (*	out *)
  : CARDINAL;			     (*	result = argumentStringLength *)

(* ----------------------------------------------------------------------- *)
PROCEDURE Verbosity(): INTEGER;	(* result = verbosityValue *)

(* ----------------------------------------------------------------------- *)
PROCEDURE IdentifyRequired(
  Handle: DecodedInformation; (* in *)
  Error: INTEGER)	      (* in *)
  : BOOLEAN;		      (* result	= isIdentifyRequired *)

(* ----------------------------------------------------------------------- *)
PROCEDURE HelpRequired(
  Handle: DecodedInformation; (* in *)
  Error: INTEGER)	      (* in *)
  : BOOLEAN;		      (* result	= isHelpRequired *)

(* ----------------------------------------------------------------------- *)
PROCEDURE SwitchRequired(
  SwitchName: ARRAY OF CHAR;  (* in *)
  Handle: DecodedInformation; (* in *)
  Default: BOOLEAN)	      (* in *)
  : BOOLEAN;		      (* result	= isSwitchRequired *)

(* ----------------------------------------------------------------------- *)
PROCEDURE VerbosityRequired(
  Handle: DecodedInformation) (* in *)
  : CARDINAL;		      (* result	= requiredVerbosity *)

(* ----------------------------------------------------------------------- *)
PROCEDURE CallProcedure(
  VAR callResult: INTEGER;	 (* out	*)
  fileName: ARRAY OF CHAR;	 (* in *)
  procedureName: ARRAY OF CHAR;	 (* in *)
  commandName: ARRAY OF	CHAR;	 (* in *)      
  argumentString: ARRAY	OF CHAR) (* in *)
  : INTEGER;			 (* result >= 0	call success else error	*)

(* ----------------------------------------------------------------------- *)
PROCEDURE RunFile(
  VAR runResult: INTEGER;	 (* out	*)
  fileName: ARRAY OF CHAR;	 (* in *)
  commandName: ARRAY OF	CHAR;	 (* in *)      
  argumentString: ARRAY	OF CHAR) (* in *)
  : INTEGER;			 (* result >= 0	run success else error *)

(* ----------------------------------------------------------------------- *)
PROCEDURE ObeyFile(
  VAR obeyResult: INTEGER;	 (* out	*)
  fileName: ARRAY OF CHAR;	 (* in *)
  commandName: ARRAY OF	CHAR;	 (* in *)      
  argumentString: ARRAY	OF CHAR) (* in *)
  : INTEGER;			 (* result >= obey success else	error *)

(* ----------------------------------------------------------------------- *)
PROCEDURE Execute(
  VAR actionResult: INTEGER;	 (* out	*)
  objectName: ARRAY OF CHAR;	 (* in *)
  commandName: ARRAY OF	CHAR;	 (* in *)      
  argumentString: ARRAY	OF CHAR) (* in *)
  : INTEGER;			 (* result >= execute success else error *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XCall(
  fileName: ARRAY OF CHAR;	 (* in *)
  procedureName: ARRAY OF CHAR;	 (* in *)
  argumentString: ARRAY	OF CHAR) (* in *)
  : CARDINAL;			 (* result = +ve result	of procedure call *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XRun(
  programName: ARRAY OF	CHAR;	 (* in *)
  argumentString: ARRAY	OF CHAR) (* in *)
  : CARDINAL;			 (* result = +ve result	of program run *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XObey(
  commandFileName: ARRAY OF CHAR; (* in	*)
  argumentString: ARRAY	OF CHAR)  (* in	*)
  : CARDINAL;			  (* result = +ve result of command file *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XInvoke(
  name:	ARRAY OF CHAR;		 (* in *)
  argumentString: ARRAY	OF CHAR) (* in *)
  : CARDINAL;			 (* result = +ve result	of invocation *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XCallRunOrObey(
  name:	ARRAY OF CHAR;		 (* in *)
  objectName: ARRAY OF CHAR;	 (* in *)
  argumentString: ARRAY	OF CHAR) (* in *)
  : CARDINAL;			 (* result = +ve result	of action *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XName(
  VAR programName: ARRAY OF CHAR) (* out *)
  : CARDINAL;			  (* result = programNameLength	*)

(* ----------------------------------------------------------------------- *)
PROCEDURE XFileName(
  VAR programPath: ARRAY OF CHAR) (* out *)
  : CARDINAL;			  (* result = programPathLength	*)

(* ----------------------------------------------------------------------- *)
PROCEDURE XStop(resultCode: INTEGER); (* in *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XSetKnownCommandsPath(pathList: ARRAY	OF CHAR); (* in	*)

(* ----------------------------------------------------------------------- *)
PROCEDURE XArguments(
  VAR argumentString: ARRAY OF CHAR) (*	out *)
  : CARDINAL;			     (*	result = argumentStringLength *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XVerbosity():	INTEGER; (* result = verbosityValue *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XIdentifyRequired(
  handle: DecodedInformation; (* in *)
  error: INTEGER)	      (* in *)
  : BOOLEAN;		      (* result	= isIdentifyRequired *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XHelpRequired(
  handle: DecodedInformation; (* in *)
  error: INTEGER)	      (* in *)
  : BOOLEAN;		      (* result	= isHelpRequired *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XSwitchRequired(
  switchName: ARRAY OF CHAR;  (* in *)
  handle: DecodedInformation; (* in *)
  default: BOOLEAN)	      (* in *)
  : BOOLEAN;		      (* result	= isSwitchRequired *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XVerbosityRequired(
  handle: DecodedInformation) (* in *)
  : CARDINAL;		      (* result	= verbosityValue *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XCallProcedure(
  fileName: ARRAY OF CHAR;	 (* in *)
  procedureName: ARRAY OF CHAR;	 (* in *)
  commandName: ARRAY OF	CHAR;	 (* in *)      
  argumentString: ARRAY	OF CHAR) (* in *)
  : INTEGER;			 (* result = +ve procedure call	result *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XRunFile(
  fileName: ARRAY OF CHAR;	 (* in *)
  commandName: ARRAY OF	CHAR;	 (* in *)      
  argumentString: ARRAY	OF CHAR) (* in *)
  : INTEGER;			 (* result = +ve program run result *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XObeyFile(
  fileName: ARRAY OF CHAR;	 (* in *)
  commandName: ARRAY OF	CHAR;	 (* in *)      
  argumentString: ARRAY	OF CHAR) (* in *)
  : INTEGER;			 (* result = +ve command file run result *)

(* ----------------------------------------------------------------------- *)
PROCEDURE XExecute(
  objectName: ARRAY OF CHAR;	 (* in *)
  commandName: ARRAY OF	CHAR;	 (* in *)      
  argumentString: ARRAY	OF CHAR) (* in *)
  : INTEGER;			 (* result = +ve object	execution result *)

END Program.
