      PROGRAM PACKFITS
C----------------------------------------------------------------------
C   This VAX FORTRAN-77 program reads formatted files and writes them 
C   to a formatted output file as FITS header cards, with the first 72 
C   characters of each input line shifted right 8 columns. The names 
C   of files to be processed are read from input using a list-directed 
C   read. If no input is provided a single file will be processed
C   with the logical name of INFIL. The logical name of the blocked 
C   FITS output is OUTFIL. FORTRAN unit 2 is used as a scratch file.
C   DCW, 07Jan82.
C----------------------------------------------------------------------
      CHARACTER      ORIGIN*8, INNAM*30, LINE*80, B*2880
      LOGICAL        BLANK
C
C
      INNAM = 'INFIL'
      OPEN (UNIT=2, STATUS='NEW', ACCESS='SEQUENTIAL',
     *      FORM='FORMATTED', CARRIAGECONTROL='NONE',
     *      RECL=80, DISPOSE='DELETE')
      ORIGIN = 'NRAO-CV'
      WRITE (2, 1005) ORIGIN
C                                       Get next input file:
 10   CONTINUE
         READ (5, *, END=40) INNAM
         OPEN (UNIT=1, NAME=INNAM, STATUS='OLD', READONLY)
         WRITE (2, 1010) INNAM
         BLANK = .TRUE.
C                                       Loop to copy the cards:
 20      CONTINUE
            READ (1, 1020, END=30) LINE
            WRITE (2, 1025) LINE(1:72)
            IF (LINE(73:80).NE.'  ') BLANK = .FALSE.
            GO TO 20
C                                       Go back to get next file:
 30      CONTINUE
         CLOSE (UNIT=1)
         IF (.NOT.BLANK) TYPE *, 'Col.73-80 were not blank!'
         TYPE *, 'Finished with file: ', INNAM
         GO TO 10
C                                       No more files, reformat output:
 40   CONTINUE
      WRITE (2, 1040)
      REWIND 2
      OPEN (UNIT=3, FILE='OUTFIL', STATUS='NEW', 
     *      ACCESS='SEQUENTIAL', FORM='FORMATTED',
     *      CARRIAGECONTROL='NONE', RECL=2880)
      B = '  '
      K1 = 0
C                                       Loop to produce FITS blocks:
 50   CONTINUE
         DO 60 K = 1, 36
            READ (2, 1020, END=70) LINE
            K1 = (K - 1) * 80 + 1
            B(K1:K1+79) = LINE
 60         CONTINUE
         WRITE (3, 1060) B
         B = '  '
         K1 = 0
         GO TO 50
C                                       Write last incomplete block:
 70   CONTINUE
      IF (K1.GT.0) WRITE (3, 1060) B
      ENDFILE 3
      CLOSE (UNIT=3)
      CLOSE (UNIT=2)
      STOP
C----------------------------------------------------------------------
 1005 FORMAT ('SIMPLE  =                    T / ',
     *                  'Text file written by PACKFITS.',
     */,      'BITPIX  =                    8 /',
     */,      'NAXIS   =                    0 /',
     */,      'ORIGIN  = ''', A8, '''           /'
     *)
 1010 FORMAT ('TEXTFILE= ''', A30, ''' /')
 1020 FORMAT (A80)
 1025 FORMAT (8X, A72)
 1040 FORMAT ('END')
 1060 FORMAT (A2880)
      END
