PROGRAM FK4FK5
*
* Read a B1950 position from I/O unit 5 and reply on I/O unit 6
* with the J2000 equivalent. Enter a period to quit.
*
IMPLICIT NONE
CHARACTER C*80,S
INTEGER I,J,IHMSF(4),IDMSF(4)
DOUBLE PRECISION R4,D4,R5,D5
LOGICAL BAD
* Loop until a period is entered
C = ' '
DO WHILE (C(:1).NE.'.')
* Read h m s d ' "
READ (5,'(A)') C
IF (C(:1).NE.'.') THEN
BAD = .TRUE.
* Decode the RA
I = 1
CALL sla_DAFIN(C,I,R4,J)
IF (J.EQ.0) THEN
R4 = 15D0*R4
* Decode the Dec
CALL sla_DAFIN(C,I,D4,J)
IF (J.EQ.0) THEN
* FK4 to FK5
CALL sla_FK45Z(R4,D4,1950D0,R5,D5)
* Format and output the result
CALL sla_DR2TF(2,R5,S,IHMSF)
CALL sla_DR2AF(1,D5,S,IDMSF)
WRITE (6,
: '(1X,I2.2,2I3.2,''.'',I2.2,2X,A,I2.2,2I3.2,''.'',I1)')
: IHMSF,S,IDMSF
BAD = .FALSE.
END IF
END IF
IF (BAD) WRITE (6,'(1X,''?'')')
END IF
END DO
END
In this example, SLALIB not only provides the complicated FK4 to
FK5 transformation but also
simplifies the tedious and error-prone tasks
of decoding and formatting angles
expressed as hours, minutes etc. The
example incorporates range checking, and avoids the
notorious ``minus zero'' problem (an often-perpetrated bug where
declinations between
SLALIB --- Positional Astronomy Library