IMPLEMENTATION MODULE Program ;

FROM DecodeArg IMPORT DecodedInformation ;
FROM SYSTEM IMPORT WORD , ADR , CALLEXTPROC , CALLEXTFUNC ;

(* ----------------------------------------------------------------------------
      Call(STRING:FileName,
           STRING:ProcedureName,
           STRING:ArgumentString); INTEGER:Result
*)
PROCEDURE Call( FileName : ARRAY OF CHAR ;
                ProcedureName : ARRAY OF CHAR ;
                ArgumentString : ARRAY OF CHAR ) : INTEGER ;
BEGIN
   RETURN INTEGER( CALLEXTFUNC( "Call" ,
                                ADR( FileName[ 0 ] ) ,
                                   HIGH( FileName ) ,
                                ADR( ProcedureName[ 0 ] ) ,
                                   HIGH( ProcedureName ) ,
                                ADR( ArgumentString[ 0 ] ) ,
                                   HIGH( ArgumentString ) ) ) ;
END Call ;


(* ----------------------------------------------------------------------------
      XCall(STRING:FileName,
            STRING:ProcedureName,
            STRING:ArgumentString);CARDINAL:Result
*)
PROCEDURE XCall( FileName : ARRAY OF CHAR ;
                 ProcedureName : ARRAY OF CHAR ;
                 ArgumentString : ARRAY OF CHAR ) : CARDINAL ;
BEGIN
   RETURN CARDINAL( CALLEXTFUNC( "XCall" ,
                                 ADR( FileName[ 0 ] ) ,
                                    HIGH( FileName ) ,
                                 ADR( ProcedureName[ 0 ] ) ,
                                    HIGH( ProcedureName ) ,
                                 ADR( ArgumentString[ 0 ] ) ,
                                    HIGH( ArgumentString ) ) ) ;
END XCall ;


(* ----------------------------------------------------------------------------
      Run(STRING:ProgramName,
          STRING:ArgumentString); INTEGER:Result
*)
PROCEDURE Run( ProgramName : ARRAY OF CHAR ;
               ArgumentString : ARRAY OF CHAR ) : INTEGER ;

BEGIN
   RETURN INTEGER( CALLEXTFUNC( "Run" ,
                                ADR( ProgramName[ 0 ] ) ,
                                   HIGH( ProgramName ) ,
                                ADR( ArgumentString[ 0 ] ) ,
                                   HIGH( ArgumentString ) ) ) ;
END Run ;


(* ----------------------------------------------------------------------------
      XRun(STRING:ProgramName,
           STRING:ArgumentString);CARDINAL:Result
*)
PROCEDURE XRun( ProgramName : ARRAY OF CHAR ;
                ArgumentString : ARRAY OF CHAR ) : CARDINAL ;
BEGIN
   RETURN CARDINAL( CALLEXTFUNC( "XRun" ,
                                 ADR( ProgramName[ 0 ] ) ,
                                    HIGH( ProgramName ) ,
                                 ADR( ArgumentString[ 0 ] ) ,
                                    HIGH( ArgumentString ) ) ) ;
END XRun ;


(* ----------------------------------------------------------------------------
      Obey(STRING:CommandFileName,
           STRING:ArgumentString); INTEGER:Result
*)
PROCEDURE Obey( CommandFileName : ARRAY OF CHAR ;
                ArgumentString : ARRAY OF CHAR ) : INTEGER ;
BEGIN
   RETURN INTEGER( CALLEXTFUNC( "Obey" ,
                                ADR( CommandFileName[ 0 ] ) ,
                                   HIGH( CommandFileName ) ,
                                ADR( ArgumentString[ 0 ] ) ,
                                   HIGH( ArgumentString ) ) ) ;
END Obey ;


(* ----------------------------------------------------------------------------
      XObey(STRING:CommandFileName,
            STRING:ArgumentString);CARDINAL:Result
*)
PROCEDURE XObey( CommandFileName : ARRAY OF CHAR ;
                 ArgumentString : ARRAY OF CHAR ) : CARDINAL ;
BEGIN
   RETURN CARDINAL( CALLEXTFUNC( "Obey" ,
                                 ADR( CommandFileName[ 0 ] ) ,
                                    HIGH( CommandFileName ) ,
                                 ADR( ArgumentString[ 0 ] ) ,
                                    HIGH( ArgumentString ) ) ) ;
END XObey ;

(* ----------------------------------------------------------------------------
      Stop(INTEGER: Resultcode)
*)
PROCEDURE Stop( Resultcode : INTEGER ) ;

BEGIN
   CALLEXTPROC( "Stop" , Resultcode ) ;
END Stop ;


(* ----------------------------------------------------------------------------
      XStop(INTEGER: Resultcode)
*)
PROCEDURE XStop( Resultcode : INTEGER ) ;

BEGIN
   CALLEXTPROC( "XStop" , Resultcode ) ;
END XStop ;


(* ----------------------------------------------------------------------------
      Invoke(STRING:Name,
             STRING:ArgumentString); INTEGER:Result
*)
PROCEDURE Invoke( Name : ARRAY OF CHAR ;
                  ArgumentString : ARRAY OF CHAR ) : INTEGER ;
BEGIN
   RETURN INTEGER( CALLEXTFUNC( "Invoke" ,
                                ADR( Name[ 0 ] ) ,
                                   HIGH( Name ) ,
                                ADR( ArgumentString[ 0 ] ) ,
                                   HIGH( ArgumentString ) ) ) ;
END Invoke ;

(* ----------------------------------------------------------------------------
      XInvoke(STRING:Name,
              STRING:ArgumentString);CARDINAL:Result
*)
PROCEDURE XInvoke( Name : ARRAY OF CHAR ;
                   ArgumentString : ARRAY OF CHAR ) : CARDINAL ;
BEGIN
   RETURN CARDINAL( CALLEXTFUNC( "XInvoke" ,
                                 ADR( Name[ 0 ] ) ,
                                    HIGH( Name ) ,
                                 ADR( ArgumentString[ 0 ] ) ,
                                    HIGH( ArgumentString ) ) ) ;
END XInvoke ;

(* ----------------------------------------------------------------------------
      Arguments();STRING:ArgumentString;
*)
PROCEDURE Arguments( VAR ArgumentString : ARRAY OF CHAR ) : CARDINAL ;
BEGIN
   RETURN CARDINAL( CALLEXTFUNC( "Arguments" ,
                                 ADR( ArgumentString[ 0 ] ) ,
                                 HIGH( ArgumentString ) ) ) ;
END Arguments ;

(* ----------------------------------------------------------------------------
      XArguments();STRING:ArgumentString;
*)
PROCEDURE XArguments( VAR ArgumentString : ARRAY OF CHAR ) : CARDINAL ;
BEGIN
   RETURN CARDINAL( CALLEXTFUNC( "XArguments" ,
                                 ADR( ArgumentString[ 0 ] ) ,
                                 HIGH( ArgumentString ) ) ) ;
END XArguments ;

(* ----------------------------------------------------------------------------
      SetKnownCommandsPath(STRING:DirectoryName); INTEGER:Result
*)
PROCEDURE SetKnownCommandsPath( DirectoryName : ARRAY OF CHAR ) : INTEGER ;
BEGIN
   RETURN INTEGER( CALLEXTFUNC( "SetKnownCommandsPath" ,
                                ADR( DirectoryName[ 0 ] ) ,
                                   HIGH( DirectoryName ) ) ) ;
END SetKnownCommandsPath ;


(* ----------------------------------------------------------------------------
      XSetKnownCommandsPath(STRING:DirectoryName)
*)
PROCEDURE XSetKnownCommandsPath( DirectoryName : ARRAY OF CHAR ) ;
BEGIN
   CALLEXTPROC( "XSetKnownCommandsPath" ,
                ADR( DirectoryName[ 0 ] ) ,
                HIGH( DirectoryName ) ) ;
END XSetKnownCommandsPath ;


(* ----------------------------------------------------------------------------
      Verbosity(); INTEGER:Result
*)
PROCEDURE Verbosity() : INTEGER ;
BEGIN
   RETURN INTEGER( CALLEXTFUNC( "Verbosity" ) ) ;
END Verbosity ;


(* ----------------------------------------------------------------------------
      HelpRequired(DecodedInformation:Handle,
                   INTEGER:Error ); BOOLEAN:Result
*)
PROCEDURE HelpRequired( Handle : DecodedInformation ;
                        Error : INTEGER ) : BOOLEAN ;
BEGIN
   RETURN BOOLEAN( CALLEXTFUNC( "HelpRequired" ,
                                WORD( Handle ) ,
                                Error ) ) ;
END HelpRequired ;


(* ----------------------------------------------------------------------------
      IdentifyRequired(DecodedInformation:Handle,
                       INTEGER:Error ); BOOLEAN:Result
*)
PROCEDURE IdentifyRequired( Handle : DecodedInformation ;
                            Error : INTEGER ) : BOOLEAN ;
BEGIN
   RETURN BOOLEAN( CALLEXTFUNC( "IdentifyRequired" ,
                                WORD( Handle ) ,
                                Error ) ) ;
END IdentifyRequired ;

(* ----------------------------------------------------------------------------
      XVerbosity(); INTEGER:Result
*)
PROCEDURE XVerbosity() : INTEGER ;
BEGIN
   RETURN INTEGER( CALLEXTFUNC( "XVerbosity" ) ) ;
END XVerbosity ;


(* ----------------------------------------------------------------------------
      XHelpRequired(DecodedInformation:Handle,
                    INTEGER:Error ); BOOLEAN:Result
*)
PROCEDURE XHelpRequired( Handle : DecodedInformation ;
                         Error : INTEGER ) : BOOLEAN ;
BEGIN
   RETURN BOOLEAN( CALLEXTFUNC( "XHelpRequired" ,
                                WORD( Handle ) ,
                                Error ) ) ;
END XHelpRequired ;


(* ----------------------------------------------------------------------------
      XIdentifyRequired(DecodedInformation:Handle,
                        INTEGER:Error ); BOOLEAN:Result
*)
PROCEDURE XIdentifyRequired( Handle : DecodedInformation ;
                             Error : INTEGER ) : BOOLEAN ;
BEGIN
   RETURN BOOLEAN( CALLEXTFUNC( "XIdentifyRequired" ,
                                WORD( Handle ) ,
                                Error ) ) ;
END XIdentifyRequired ;


END Program.
