DEFINITION MODULE DecodeArg;
(* PANOS Argument decoding module *)

FROM File IMPORT InfoRec;

EXPORT QUALIFIED DecodedInformation,
		 ArgumentInit, DecodeInit,
		 GetStringArg, GetFileArg, GetStateArg,	GetPresence,
		 GetIntegerArg,	GetCardinalArg,	GetBooleanArg,
		 GetNumberOfValues, DecodeEnd, Substitute,
		 XArgumentInit,	XDecodeInit,
		 XGetStringArg,	XGetFileArg, XGetStateArg, XGetPresence,
		 XGetIntegerArg, XGetCardinalArg, XGetBooleanArg,
		 XGetNumberOfValues, XDecodeEnd, XSubstitute;

TYPE
   DecodedInformation;

(*-------------------------------------------------------------------------*)
PROCEDURE ArgumentInit(
  VAR decodedArguments:	DecodedInformation; (* out *)
  keyString: ARRAY OF CHAR;		    (* in *)
  inputWanted: BOOLEAN;			    (* in *)
  outputWanted:	BOOLEAN;		    (* in *)
  identification: ARRAY	OF CHAR;	    (* in *)
  helpProcedure: PROC)			    (* in *)
  : INTEGER;				    (* result >= 0 success else	error *)

(*-------------------------------------------------------------------------*)
PROCEDURE DecodeInit(
  VAR decodedArguments:	DecodedInformation; (* out *)
  keyString: ARRAY OF CHAR;		    (* in *)
  argumentString: ARRAY	OF CHAR)	    (* in *)
  : INTEGER;				    (* result >= 0 success else	error *)

(*-------------------------------------------------------------------------*)
PROCEDURE GetStringArg(
  VAR stringArg: ARRAY OF CHAR;		(* out *)
  VAR stringArgLength: CARDINAL;	(* out *)
  argumentName:	ARRAY OF CHAR;		(* in *)
  index: CARDINAL;			(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : INTEGER;				(* result >= 0 success else error *)

(*-------------------------------------------------------------------------*)
PROCEDURE GetFileArg(
  VAR fileArg: ARRAY OF	CHAR;		(* out *)
  VAR fileArgLength: CARDINAL;		(* out *)
  VAR fileInfo:	InfoRec;		(* out *)
  argumentName:	ARRAY OF CHAR;		(* in *)
  index: CARDINAL;			(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : INTEGER;				(* result >= 0 success else error *)

(*-------------------------------------------------------------------------*)
PROCEDURE GetStateArg(
  VAR stateArg:	BOOLEAN;		(* out *)
  argumentName:	ARRAY OF CHAR;		(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : INTEGER;				(* result >= 0 success else error *)

(*-------------------------------------------------------------------------*)
PROCEDURE GetBooleanArg(
  VAR booleanArg: BOOLEAN;		(* out *)
  argumentName:	ARRAY OF CHAR;		(* in *)
  index: CARDINAL;			(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : INTEGER;				(* result >= 0 success else error *)

(*-------------------------------------------------------------------------*)
PROCEDURE GetIntegerArg(
  VAR integerArg: INTEGER;		(* out *)
  argumentName:	ARRAY OF CHAR;		(* in *)
  index: CARDINAL;			(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : INTEGER;				(* result >= 0 success else error *)

(*-------------------------------------------------------------------------*)
PROCEDURE GetCardinalArg(
  VAR cardinalArg: CARDINAL;		(* out *)
  argumentName:	ARRAY OF CHAR;		(* in *)
  index: CARDINAL;			(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : INTEGER;				(* result >= 0 success else error *)

(*-------------------------------------------------------------------------*)
PROCEDURE GetNumberOfValues(
  VAR numberOfValues: CARDINAL;		(* out *)
  argumentName:	ARRAY OF CHAR;		(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : INTEGER;				(* result >= 0 success else error *)

(*-------------------------------------------------------------------------*)
PROCEDURE GetPresence(
  VAR presence:	BOOLEAN;		(* out *)
  argumentName:	ARRAY OF CHAR;		(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : INTEGER;				(* result >= 0 success else error *)

(*-------------------------------------------------------------------------*)
PROCEDURE Substitute(
  VAR resultString: ARRAY OF CHAR;	(* out *)
  VAR resultStringLength: CARDINAL;	(* out *)
  substituteString: ARRAY OF CHAR;	(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : INTEGER;		   (* result >=	0 numberOfSubstitutions	else error *)

(*-------------------------------------------------------------------------*)
PROCEDURE DecodeEnd(
  DecodedArguments: DecodedInformation)	(* in *)
  : INTEGER;				(* result >= 0 success else error *)


(*=========================================================================*)
PROCEDURE XArgumentInit(
  keyString: ARRAY OF CHAR;	 (* in *)
  inputWanted: BOOLEAN;		 (* in *)
  outputWanted:	BOOLEAN;	 (* in *)
  identification: ARRAY	OF CHAR; (* in *)
  helpProcedure: PROC)		 (* in *)
  : DecodedInformation;		 (* result = handle *)

(*-------------------------------------------------------------------------*)
PROCEDURE XDecodeInit(
  keyString: ARRAY OF CHAR;	 (* in *)
  argumentString: ARRAY	OF CHAR) (* in *)
  : DecodedInformation;		 (* result = handle *)

(*-------------------------------------------------------------------------*)
PROCEDURE XGetStringArg(
  VAR stringArg: ARRAY OF CHAR;		(* out *)
  argumentName:	ARRAY OF CHAR;		(* in *)
  index: CARDINAL;			(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : CARDINAL;				(* result = stringArgLength *)

(*-------------------------------------------------------------------------*)
PROCEDURE XGetFileArg(
  VAR fileArg: ARRAY OF	CHAR;		(* out *)
  VAR fileInfo:	InfoRec;		(* out *)
  argumentName:	ARRAY OF CHAR;		(* in *)
  index: CARDINAL;			(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : CARDINAL;				(* result = fileArgLength *)

(*-------------------------------------------------------------------------*)
PROCEDURE XGetStateArg(
  argumentName:	ARRAY OF CHAR;		(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : BOOLEAN;				(* result = stateArg *)

(*-------------------------------------------------------------------------*)
PROCEDURE XGetBooleanArg(
  argumentName:	ARRAY OF CHAR;		(* in *)
  index: CARDINAL;			(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : BOOLEAN;				(* result = booleanArg *)

(*-------------------------------------------------------------------------*)
PROCEDURE XGetIntegerArg(
  argumentName:	ARRAY OF CHAR;		(* in *)
  index: CARDINAL;			(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : INTEGER;				(* result = integerArg *)

(*-------------------------------------------------------------------------*)
PROCEDURE XGetCardinalArg(
  argumentName:	ARRAY OF CHAR;		(* in *)
  index: CARDINAL;			(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : CARDINAL;				(* result = cardinalArg	*)

(*-------------------------------------------------------------------------*)
PROCEDURE XGetNumberOfValues(
  argumentName:	ARRAY OF CHAR;		(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : CARDINAL;				(* result = numberOfValues *)

(*-------------------------------------------------------------------------*)
PROCEDURE XGetPresence(
  argumentName:	ARRAY OF CHAR;		(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : BOOLEAN;				(* result = presence *)

(*-------------------------------------------------------------------------*)
PROCEDURE XSubstitute(
  VAR resultString: ARRAY OF CHAR;	(* out *)
  substituteString: ARRAY OF CHAR;	(* in *)
  decodedArguments: DecodedInformation)	(* in *)
  : CARDINAL;				(* result = resultStringLength *)

(*-------------------------------------------------------------------------*)
PROCEDURE XDecodeEnd(DecodedArguments: DecodedInformation); (* in *)

END DecodeArg.
