SUBROUTINE ADI1_INIT( STATUS )
*+
*  Name:
*     ADI1_INIT

*  Purpose:
*     Load ADI definitions required for use of HDS files

*  Language:
*     Starlink Fortran

*  Invocation:
*     CALL ADI1_INIT( STATUS )

*  Description:
*     {routine_description}

*  Arguments:
*     STATUS = INTEGER (given and returned)
*        The global status.

*  Examples:
*     {routine_example_text}
*        {routine_example_description}

*  Pitfalls:
*     {pitfall_description}...

*  Notes:
*     {routine_notes}...

*  Prior Requirements:
*     {routine_prior_requirements}...

*  Side Effects:
*     {routine_side_effects}...

*  Algorithm:
*     {algorithm_description}...

*  Accuracy:
*     {routine_accuracy}

*  Timing:
*     {routine_timing}

*  External Routines Used:
*     {name_of_facility_or_package}:
*        {routine_used}...

*  Implementation Deficiencies:
*     {routine_deficiencies}...

*  References:
*     ADI Subroutine Guide : http://www.sr.bham.ac.uk/asterix-docs/Programmer/Guides/adi.html

*  Keywords:
*     package:adi, usage:private

*  Copyright:
*     Copyright (C) University of Birmingham, 1995

*  Authors:
*     DJA: David J. Allan (Jet-X, University of Birmingham)
*     {enter_new_authors_here}

*  History:
*     14 Aug 1995 (DJA):
*        Original version.
*     {enter_changes_here}

*  Bugs:
*     {note_any_bugs_here}

*-
      
*  Type Definitions:
      IMPLICIT NONE              ! No implicit typing

*  Global Constants:
      INCLUDE 'SAE_PAR'          ! Standard SAE constants

*  Status:
      INTEGER 			STATUS             	! Global status

*  External References:
      EXTERNAL			ADI1_OPEN
      EXTERNAL			ADI1_FCLONE
      EXTERNAL			ADI1_FCLOSE
      EXTERNAL			ADI1_FCREAT
      EXTERNAL			ADI1_FOBNAM
      EXTERNAL			ADI1_FTRACE

      EXTERNAL			BDI1_SETLNK
      EXTERNAL			BDI1_UNLNK

      EXTERNAL			EDI1_SETLNK
      EXTERNAL			EDI1_UNLNK

      EXTERNAL			FSI1_NEWLNK
      EXTERNAL			FSI1_SETLNK
      EXTERNAL			FSI1_GETSEL
      EXTERNAL			FSI1_GETREF
      EXTERNAL			FSI1_PUTSEL
      EXTERNAL			FSI1_PUTREF

      EXTERNAL			GMI1_NEWLNK
      EXTERNAL			GMI1_SETLNK

      EXTERNAL			PRF1_GET
      EXTERNAL			PRF1_SET

      EXTERNAL			SSI1_NEWLNK
      EXTERNAL			SSI1_SETLNK
      EXTERNAL			SSI1_SSETLNK

      EXTERNAL			UDI1_COPANC

*  Local Variables:
      INTEGER			DID			! Dummy id (ignored)
      INTEGER			RID			! Representation id
*.

*  Check inherited global status.
      IF ( STATUS .NE. SAI__OK ) RETURN

*  Load the HDS package
      CALL ADI_REQPKG( 'hds', STATUS )

*  Locate the HDS file representation object
      CALL ADI_LOCREP( 'HDS', RID, STATUS )

*  Define the file methods
      CALL ADI_DEFRCB( RID, 'OpenRtn', ADI1_OPEN, STATUS )
      CALL ADI_DEFRCB( RID, 'CreatRtn', ADI1_FCREAT, STATUS )
      CALL ADI_DEFMTH( 'FileClone(_HDSfile,_CHAR)', ADI1_FCLONE, DID,
     :                 STATUS )
      CALL ADI_DEFMTH( 'FileClose(_HDSfile)', ADI1_FCLOSE, DID,
     :                   STATUS )
      CALL ADI_DEFMTH( 'FileObjName(_HDSlocator)', ADI1_FOBNAM, DID,
     :                 STATUS )
      CALL ADI_DEFMTH( 'FileTrace(_HDSlocator)', ADI1_FTRACE, DID,
     :                 STATUS )

*  Define BDI interface
      CALL ADI_DEFMTH( 'SetLink(_BinDS,_HDSfile)', BDI1_SETLNK,
     :                 DID, STATUS )
      CALL ADI_DEFMTH( 'SetLink(_Array,_HDSfile)', BDI1_SETLNK,
     :                 DID, STATUS )
      CALL ADI_DEFMTH( 'UnLink(_BinDS,_HDSfile)', BDI1_UNLNK,
     :                 DID, STATUS )
      CALL ADI_DEFMTH( 'UnLink(_Array,_HDSfile)', BDI1_UNLNK,
     :                 DID, STATUS )
      CALL ADI_DEFMTH( 'UnLink(_Scalar,_HDSfile)', BDI1_UNLNK,
     :                 DID, STATUS )

*  Define EDI interface
      CALL ADI_DEFMTH( 'SetLink(_EventDS,_HDSfile)', EDI1_SETLNK,
     :                 DID, STATUS )
      CALL ADI_DEFMTH( 'UnLink(_EventDS,_HDSfile)', EDI1_UNLNK,
     :                 DID, STATUS )

*  Multi-graph dataset interface
      CALL ADI_DEFMTH( 'NewLink(_MultiGraph,_HDSfile)', GMI1_NEWLNK,
     :                 DID, STATUS )
      CALL ADI_DEFMTH( 'SetLink(_MultiGraph,_HDSfile)', GMI1_SETLNK,
     :                 DID, STATUS )

*  File set interface
      CALL ADI_DEFMTH( 'NewLink(_FileSet,_HDSfile)', FSI1_NEWLNK,
     :                 DID, STATUS )
      CALL ADI_DEFMTH( 'SetLink(_FileSet,_HDSfile)', FSI1_SETLNK,
     :                 DID, STATUS )
      CALL ADI_DEFMTH( 'ReadSel(_FileSet,_HDSfile,_INTEGER)', 
     :                 FSI1_GETSEL, DID, STATUS )
      CALL ADI_DEFMTH( 'WriteSel(_FileSet,_HDSfile,_INTEGER,_)', 
     :                 FSI1_PUTSEL, DID, STATUS )
      CALL ADI_DEFMTH( 'ReadRef(_FileSet,_HDSfile,_INTEGER,_CHAR)',
     :                 FSI1_GETREF, DID, STATUS )
      CALL ADI_DEFMTH( 'WriteRef(_FileSet,_HDSfile,_INTEGER,_)',
     :                 FSI1_PUTREF, DID, STATUS )
 
*  Source search results files
      CALL ADI_DEFMTH( 'NewLink(_SSDS,_HDSfile)', SSI1_NEWLNK,
     :                 DID, STATUS )
      CALL ADI_DEFMTH( 'NewLink(_SSDSset,_HDSfile)', SSI1_NEWLNK,
     :                 DID, STATUS )
      CALL ADI_DEFMTH( 'SetLink(_SSDS,_HDSfile)', SSI1_SETLNK,
     :                 DID, STATUS )
      CALL ADI_DEFMTH( 'SetLink(_SSDSset,_HDSfile)', SSI1_SSETLNK,
     :                 DID, STATUS )

*  Processing flag setting
      CALL ADI_DEFMTH( 'GetProFlag(_,_HDSfile,_CHAR)', PRF1_GET,
     :                 DID, STATUS )
      CALL ADI_DEFMTH( 'SetProFlag(_,_HDSfile,_CHAR,_LOGICAL)', 
     :                 PRF1_SET, DID, STATUS )
          
*  Ancillary copying
      CALL ADI_DEFMTH( 'CopyAncillary(_,_HDSfile,_,_HDSfile,_CHAR)', 
     :                 UDI1_COPANC, DID, STATUS )
 
*  Report any errors
      IF ( STATUS .NE. SAI__OK ) CALL AST_REXIT( 'ADI1_INIT', STATUS )

      END