SUBROUTINE WCI_CNS2S( SYSIN, POSIN, SYSOUT, POSOUT, STATUS )
*+
*  Name:
*     WCI_CNS2S

*  Purpose:
*     Convert a coordinate pair from one system to another

*  Language:
*     Starlink Fortran

*  Invocation:
*     CALL WCI_CNS2S( SYSIN, POSIN, SYSOUT, POSOUT, STATUS )

*  Description:
*     Converts a celestial position in one coordinate system to
*     the same sky point in a second system. This is performed 
*     by converting to the FK5 system in the epoch defined by 
*     the input, precessing this position to the output epoch 
*     and converting to the output system.

*  Arguments:
*     SYSIN = INTEGER (given)
*        The coordinate system of the supplied position
*     POSIN[2] = DOUBLE (given)
*        The supplied position, in coordinate system specified by SYSIN
*     SYSOUT = INTEGER (given)
*        The coordinate system of the required position
*     POSOUT[2] = DOUBLE (returned)
*        The input position converted to the system specified by SYSOUT
*     STATUS = INTEGER (given and returned)
*        The global status.

*  Examples:
*     PROGRAM SIMPLE
*
*     DOUBLE PRECISION        RTOD
*       PARAMETER             ( RTOD = 180D0 / 3.141592653... )
*     DOUBLE PRECISION        IPOS(2)
*     DOUBLE PRECISION        OPOS(2)
*     INTEGER                 SYS1, SYS2
*     DATA                    IPOS/insert data here/
*
*     CALL WCI_NEWSYS( 'FK4', 1950D0, 1972D0, SYS1, STATUS )
*     CALL WCI_NEWSYS( 'FK5', 2000D0, 1995D0, SYS2, STATUS )
*
*     CALL WCI_CNS2S( SYS2, IPOS, SYS1, OPOS, STATUS )
*    
*     PRINT *, OPOS(1)*RTOD, OPOS(2)*RTOD
*
*     END
*
*        Example above converts a position defined in the FK5 equinox 2000
*        reference frame, with epoch 1995, into the position in FK4 as it
*        would have been at the epoch 1972.

*  Pitfalls:
*     {pitfall_description}...

*  Notes:
*     {routine_notes}...

*  Prior Requirements:
*     The WCI package must have been initialised, and the identifiers
*     SYSIN and SYSOUT defined.

*  Side Effects:
*     None

*  Algorithm:
*     The algorithms used by the convertor routines WCI_CNS2Z and WCI_CNZ2S
*     are identical to those used in the Starlink COCO utility, and that
*     program can be used as a test of this routine.

*  Accuracy:
*     The test procedure tst_wci_cns2s applying 2 WCI_CNS2S operations
*     to shift from FK4 -> FK5 and back to FK4, with different equinoxes
*     and epochs, averaged over the whole celestial sphere, recovers
*     the original position to an average accuracy of 0.00108 arcsec, with
*     a worst case of 0.00132 arcsec.

*  Timing:
*     {routine_timing}

*  External Routines Used:
*     WCI:
*        WCI_CNS2Z	- Convert to standard system
*        WCI_CNZ2S	- Convert from standard system

*  Implementation Deficiencies:
*     {routine_deficiencies}...

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

*  Keywords:
*     package:wci, usage:public, coordinate conversion

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

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

*  History:
*     4 Jan 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
      INCLUDE 'AST_PKG'

*  Arguments Given:
      INTEGER			SYSIN, SYSOUT
      DOUBLE PRECISION 		POSIN(2)

*  Arguments Returned:
      DOUBLE PRECISION 		POSOUT(2)

*  Status:
      INTEGER 			STATUS             	! Global status

*  Local Variables:
      DOUBLE PRECISION		TMPPOS(2)		! Temporary position

*  External References:
      EXTERNAL			AST_QPKGI
        LOGICAL			AST_QPKGI
*.

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

*  Check initialised
      IF ( .NOT. AST_QPKGI( WCI__PKG ) ) CALL WCI1_INIT( STATUS )

*  The systems could be the same object
      IF ( SYSIN .EQ. SYSOUT ) THEN
        POSOUT(1) = POSIN(1)
        POSOUT(2) = POSIN(2)

*  Systems are different objects (although their parameters could be the same
      ELSE

*    Convert input position to J2000 FK5 at user supplied epoch
        CALL WCI_CNS2Z( SYSIN, POSIN, TMPPOS, STATUS )

*    Convert standard position to output system
        CALL WCI_CNZ2S( TMPPOS, SYSOUT, POSOUT, STATUS )

      END IF

*  Report any errors
      IF ( STATUS .NE. SAI__OK ) CALL AST_REXIT( 'WCI_CNS2S', STATUS )

      END