PROGRAM TEST
      INTEGER*2 IFLAG,INUNIT,OUTUNIT,IOPEN1,IOPEN7,IALL
      DIMENSION APA(5)
      CHARACTER*30 INFILE,OUTFILE
      CHARACTER*1 ANS,TIYP
      CALL GETCL(INFILE)
      IALL=0
      INUNIT=1
      OUTUNIT=7
      OPEN(UNIT=INUNIT,FILE=INFILE,FORM='UNFORMATTED',STATUS='OLD',
     1 ACCESS='TRANSPARENT')
      IOPEN1=1
      PRINT*,'Screen only (S), or screen and file (F)?   '
      READ(*,1004)TIYP
      IF(TIYP.EQ.'S'.OR.TIYP.EQ.'s')GO TO 7337
5     WRITE(*,1009)
1009  FORMAT(' OUTPUT FILE NAME?     ',/)
      READ(*,1004)OUTFILE
1004  FORMAT(A)
      OPEN(UNIT=OUTUNIT,FILE=OUTFILE,STATUS='NEW',FORM='FORMATTED')
      IOPEN7=1
7337  PRINT*,' Do you want the whole file? (y,n)  '
      READ(*,1004)ANS
      IF(ANS.EQ.'y'.OR.ANS.EQ.'Y')IALL=1
      IF(IALL.NE.1)PRINT*,'Hit Y to stop processing data'
      CALL FIRSTPA(INUNIT,UT,APA,IFLAG)
      IF(IFLAG.EQ.1)STOP
      WRITE(*,1002)UT
1002  FORMAT(' First time in FPM file is ',F10.3,/)
      UT=UT+.128
      DO 135 JJ=1,10000
      DO 134 I=1,20
      UT=UT+10.
      CALL GETPA(INUNIT,UT,APA,IFLAG)
      IF(IFLAG.EQ.1)GOTO140
      WRITE(*,19)UT,APA
19    FORMAT(1X,F10.3,2X,5f10.2)
      IF(TIYP.EQ.'Y')WRITE(7,21)UT,APA
21    FORMAT(1X,F10.3,5(',',F10.2))
134   CONTINUE
      IF(IALL.EQ.1)GO TO 135
      READ(*,1004)ANS
      IF(ANS.EQ.'Y'.OR.ANS.EQ.'y')GO TO 140
135   CONTINUE
140   IF(IOPEN1.EQ.1)CLOSE(INUNIT)
      IF(IOPEN7.EQ.1)CLOSE(OUTUNIT)
      STOP
      END
C   
      SUBROUTINE GETPA(INUNIT,UT,APA,IFLAG)
      DIMENSION ARRAY(4,33),DCS(3),BCMP(3),apa(5)
      INTEGER*2 INDX,IFLAG,NDX,INUNIT
      CHARACTER*1 ANS
      DATA DCS/144.5,78.9,2.5/
1     NDX=INDX
      DO 100 J=NDX,33
      IF(UT.GT.ARRAY(1,J))GO TO 100
      IF(ARRAY(1,J).GT.(UT+5000.))GO TO 88
      TDEL=ARRAY(1,J)-ARRAY(1,J-1)
      TPART1=(UT-ARRAY(1,J-1))/TDEL
      BCMP(1)=TPART1*(ARRAY(2,J)-ARRAY(2,J-1))+ARRAY(2,J-1)
      BCMP(2)=TPART1*(ARRAY(3,J)-ARRAY(3,J-1))+ARRAY(3,J-1)
      BCMP(3)=TPART1*(ARRAY(4,J)-ARRAY(4,J-1))+ARRAY(4,J-1)
      B=SQRT(DOT(BCMP,BCMP))
      BMP=DOT(BCMP,DCS)/B
      APA(1)=BCMP(1)
      APA(2)=BCMP(2)
      APA(3)=BCMP(3)
      APA(4)=B
      IF(BMP.GT.1.)BMP=1.
      IF(BMP.LT.-1.)BMP=-1.
      APAP=57.29572*ACOS(BMP)
      IF(APAP.LT.0.)APAP=-APAP
      IF(APAP.GT.180.)APAP=360.-APAP
      APA(5)=APAP
      RETURN
88    PRINT*,'Bad UT in .FPM: ',ARRAY(1,J)
100   INDX=INDX+1
      DO 110 IJ=1,4
110   ARRAY(IJ,1)=ARRAY(IJ,33)
      CALL GETSECT(INUNIT,ARRAY(1,2),IFLAG)
      IF(IFLAG.EQ.1)THEN
         PRINT*,' MAGNETIC FIELD FILE EXHAUSTED'
         RETURN
      ENDIF
      INDX=2
      GO TO 1
      ENTRY FIRSTPA
      CALL GETSECT(INUNIT,ARRAY(1,2),IFLAG)
        IF(IFLAG.EQ.1)THEN
           PRINT*,' MAGNETIC FIELD FILE CAN NOT BE READ'
           RETURN
        ENDIF
      DO 120 IJ=1,4
120   ARRAY(IJ,1)=ARRAY(IJ,2)
      INDX=2
      UT=ARRAY(1,1)
      PRINT*,'MEA (M) or custom (O) direction cosines?   '
      READ(*,200)ANS
200   FORMAT(A)
      IF(ANS.EQ.'M'.OR.ANS.EQ.'m')GO TO 202
      PRINT*,'X-axis cosine (degrees)?  '
      READ(*,201)DCS(1)
      PRINT*,'Z-axis cosine (degrees)?  '
201   FORMAT(F6.2)      
      READ(*,201)DCS(2)
      PRINT*,'Y-axis cosine (degrees)?  '
      READ(*,201)DCS(3)
202   TMP3=COS(DCS(3)/57.29578)
      TMP1=DCS(1)/57.29578
      TMP2=DCS(2)/57.29578
      DCS(1)=TMP3*COS(TMP1)
      DCS(2)=-TMP3*COS(TMP2)
      DCS(3)=TMP3*SIN(TMP1)*SIN(TMP2)
      RETURN
      END


      SUBROUTINE GETSECT(INUNIT,BREC,IFLAG)
C     A subroutine to read sectors from disk.
C     IFLAG = 1 if reached end of file.
C     TREC WILL CONTAIN ONE TAPE RECORD PLUS EOF
      LOGICAL*1 BREC(512),TREC(32002)
      INTEGER*2 INUNIT,IFLAG
      INTEGER*4 NEW
      IFLAG=0
      IF(NEW.EQ.0)GO TO 1
      GO TO 2
1     READ(UNIT=INUNIT,END=1000)TREC
      NEW=0
2     IF(NEW.GT.31488)GO TO 1
      DO 3 I=1,512
3     BREC(I)=TREC(NEW+I)
      NEW=NEW+512
      RETURN
1000  IFLAG=1
      PRINT *,' END OF DATA ON INPUT FILE'
      CLOSE (UNIT=INUNIT)
      RETURN
      END


      SUBROUTINE SUFIX(NAME,SUF)
      CHARACTER*1 NAME(51),SUF(3),SUF1
      DATA SUF1/'.'/
      DO 1 I=1,51
      IF(NAME(I).EQ.'.')GOTO4
1     IF(NAME(I).EQ.' ')GOTO3
      WRITE(*,2)NAME
2     FORMAT(' ***** ERROR ***** ERROR ***** ERROR *****',//,
     1 A,//,' exceeds the limit on file names (50 characters)')
      STOP
3     NAME(I)=SUF1
4     NAME(I+1)=SUF(1)
      NAME(I+2)=SUF(2)
      NAME(I+3)=SUF(3)
      RETURN
      END

      FUNCTION DOT(A,B)
      DIMENSION A(3),B(3)
      DOT=A(1)*B(1)+A(2)*B(2)+A(3)*B(3)
      RETURN
      END