c==============================GETCF.FOR================================
c
c    Gets the cf from the corresponding indices of TU to TV.
c    Also if forced, it will check for a prefix.  The subroutine 
c    performs the same as the HP-28S in this regard.     /DEE 1-89

      SUBROUTINE GETCF(CF,TIND,TU,TUIND,TV,UNIT,POWER,SH)
      PARAMETER (MAXUNIT=7)
      CHARACTER*423 TU
      CHARACTER*(MAXUNIT) UNIT
      CHARACTER*(MAXUNIT+2) TUNIT
      INTEGER TIND, POWER, SH, PFIXV(16), TUIND(120)
      REAL*8 CF, TV(120)
      CHARACTER*(16) PFIX

      PFIX='EPTGMKHDdcmunpfa'
      DATA PFIXV /18,15,12,9,6,3,2,1,-1,-2,-3,-6,-9,-12,-15,-18/
      CF=1D0

      TUNIT='/' // UNIT 
      TUNIT(SH+2:SH+2)='/'
      TIND=INDEX(TU, TUNIT(1:SH+2))
      IF (TIND .EQ. 0) THEN
         TIND=INDEX(PFIX, UNIT(1:1))
         IF (TIND .EQ. 0) THEN
            PRINT *,'1. Unit and possible prefix unrecognized: ',
     +               UNIT(1:SH)
            STOP
         ENDIF
         CF=10D0**PFIXV(TIND)
         TUNIT='/'// UNIT(2:SH) 
         TUNIT(SH+1:SH+1)='/'
         TIND=INDEX(TU, TUNIT(1:SH+1))
         IF (TIND .EQ. 0) THEN
            PRINT *,'2. Unrecognized unit: ',UNIT(1:SH)
            STOP
         ENDIF
      ENDIF
      DO 10, K=1,120
        IF (TIND .EQ. TUIND(K)) GOTO 20
 10   CONTINUE
      PRINT *, 'ERROR IN GETCF.FOR'
      STOP
 20   TIND=K
      CF=(CF*TV(TIND))**POWER
      RETURN
      END
