      PROGRAM PRINTF
      COMMON/UNITS/INPU,IOUT,INPF
      COMMON/DIMS/LPPAGE,NL,LGAP,LMIN,NPAGE,LINE
      COMMON/NAMES/NAMEF,DATE1,DATE2
      CHARACTER NAMEF*14,DATE1*9,DATE2*9
      COMMON/COMNS/NAMC(100),INAMC
      CHARACTER*20 NAMC,INAMC
      LOGICAL Q
      INPU=IFFindInput('rawkb:')
      INPF=9
      IOUT=10
      OPEN(IOUT,FORM='PRINTER',STATUS='NEW',FILE='rawlp:')
   10 CALL INIT
      CALL PRINT
      PRINT *,' Do you want to print more'
      IF(Q()) GO TO 10
      END
      CHARACTER*1 FUNCTION AGET()
C         simulates A$=GET$ in BASIC
      I=IGET()
      IF(I.GT.96) I=I-32
      AGET=CHAR(I)
      RETURN
      END
      SUBROUTINE DATEFL
C         GET FILE DATE INTO "DATE2"
      COMMON/NAMES/NAMEF,DATE1,DATE2
      CHARACTER NAMEF*14,DATE1*9,DATE2*9,DATTIM*18
      INTEGER FILEDATA(4),BTIM(2)
      CALL IFGetFileInformation(FILEDATA,BTIM,NAMEF)
      I=IFXTextualTimeOfBinarytime(DATTIM,BTIM)
      DATE2=DATTIM(1:9)
      RETURN
      END
      FUNCTION IGET()
      COMMON/UNITS/INPU,IOUT,INPF
C         simulates I=GET in BASIC
      IGET=IFSReadByte(INPU)
      RETURN
      END
      LOGICAL FUNCTION Q()
      CHARACTER ANS,AGET
   10 PRINT 101      
  101 FORMAT('*(Y/N)?')
   12 ANS=AGET()
      IF(ANS.NE.'Y'.AND.ANS.NE.'N') GO TO 12
   14 PRINT 102,ANS
  102 FORMAT('*',A)
      Q=.FALSE.
      IF(ANS.EQ.'Y') Q=.TRUE.
      RETURN                 
      END
      SUBROUTINE INIT
      COMMON/UNITS/INPU,IOUT,INPF
      COMMON/DIMS/LPPAGE,NL,LGAP,LMIN,NPAGE,LINE
      COMMON/NAMES/NAMEF,DATE1,DATE2
      CHARACTER NAMEF*14,DATE1*9,DATE2*9,ANS*1,AGET*1
   10 PRINT *,'Enter -f77 file name:'
      READ (*,101,ERR=10)NAMEF
  101 FORMAT(A)
      IF(INDEX(NAMEF,'-').EQ.0) THEN
        I=INDEX(NAMEF,' ')
        NAMEF(I:I+3)='-f77'
      ENDIF
      OPEN(INPF,FILE=NAMEF,STATUS='OLD',FORM='FORMATTED',ERR=90)
   20 PRINT *,'Long or Short pages?'
      LPPAGE=0
   30 ANS=AGET()
      IF(ANS.EQ.'L') THEN
        LPPAGE=79
        WRITE(IOUT,102)27,48
  102   FORMAT('*',2A1)
      ENDIF
      IF(ANS.EQ.'S') THEN
        LPPAGE=58
        WRITE(IOUT,102)27,50
      ENDIF
      IF(LPPAGE.EQ.0) GO TO 30
      PRINT 102,ANS
C             GET TODAY'S DATE
      I=IFXdate(DATE1)
C             GET FILE DATE
      CALL DATEFL
      NPAGE=0
      NL=LPPAGE
      LGAP=2
      LMIN=6
      LINE=0
      RETURN
   90 PRINT *,'Cannot find file ',NAMEF
      GO TO 10
      END
      SUBROUTINE PRINT
      COMMON/UNITS/INPU,IOUT,INPF
      COMMON/DIMS/LPPAGE,NL,LGAP,LMIN,NPAGE,LINE
      COMMON/NAMES/NAMEF,DATE1,DATE2
      CHARACTER NAMEF*14,DATE1*9,DATE2*9,A*80,ENDF*9,INCLUD*7
      COMMON/COMNS/NAMC(100),INAMC
      CHARACTER*20 NAMC,INAMC
      DATA ENDF/'      END'/,INCLUD/'INCLUDE'/
      NNC=0
      NNCP=0
   10 READ (INPF,101,END=90)A
  101 FORMAT(A80)
      NL=NL+1
      IF(NL+LGAP.LT.LPPAGE) GO TO 30
      IF(NPAGE.GT.0) WRITE(IOUT,105)12
      NPAGE=NPAGE+1
      WRITE(IOUT,102)NAMEF,DATE2,DATE1,NPAGE
  102 FORMAT('*File ',A,' on ',A,:,15X,'Today: ',A,'     Page',I3,/)
      NL=0
   30 IF(NL.GT.0.AND.LINE.EQ.0.AND.NNCP.GT.1) THEN
        NL=NL+4
        WRITE(IOUT,103)
        WRITE(IOUT,102)NAMEF,DATE2
        WRITE(IOUT,103)
      ENDIF
      LINE=LINE+1
      WRITE(IOUT,103)LINE,A(1:72)
  103 FORMAT(1X,I6,1X,A72)
      PRINT 113,A(1:72)
  113 FORMAT(1XA72)
      I=INDEX(A,INCLUD)
      IF(I.GT.0) THEN
        J=INDEX(A,'''')
        K=INDEX(A(J+1:80),'''')
        IF(K.NE.0.AND.J.GT.I) THEN
          INAMC=A(J+1:J+K-1)
          DO 32 I=1,NNC
          IF(INAMC.EQ.NAMC(I)) GO TO 36
   32     CONTINUE
          NNC=NNC+1
          NAMC(NNC)=INAMC
   36   ENDIF
      ENDIF
      I=INDEX(A,ENDF)
      IF(I.EQ.0) GO TO 10
      L=LEN(A)
      DO 40 J=I+9,L
      K=ICHAR(A(J:J))
      IF(K.NE.32.AND.K.NE.10) GO TO 10
   40 CONTINUE
      IF(NL+LMIN.LT.LPPAGE) GO TO 50
      NL=LPPAGE
      GO TO 10
   50 WRITE(IOUT,104)
  104 FORMAT(/)
      NL=NL+2
      GO TO 10
   90 CLOSE(INPF)
      IF(NNC.EQ.0) GO TO 900
      IF(NNCP.EQ.0) THEN
        CALL SORTNAM(NNC)
        NL=LPPAGE
      ENDIF
   60 NNCP=NNCP+1
      IF(NNCP.GT.NNC) GO TO 900
      NAMEF=NAMC(NNCP)
      OPEN(INPF,FILE=NAMEF,STATUS='OLD',FORM='FORMATTED',ERR=60)
      CALL DATEFL
      LINE=0
      IF(NL+LMIN.LT.LPPAGE) GO TO 70
      NL=LPPAGE
      GO TO 10
   70 WRITE(IOUT,104)
      NL=NL+2
      GO TO 10
  900 WRITE(IOUT,105)12,27,50
  105 FORMAT('*',3A1)
      RETURN
      END
      SUBROUTINE SORTNAM(N)
      COMMON/COMNS/NAMC(100),INAMC
      CHARACTER*20 NAMC,INAMC
      IF(N.LE.1) RETURN
      I=1
   10 IF(NAMC(I).GT.NAMC(I+1)) THEN
        INAMC=NAMC(I)
        NAMC(I)=NAMC(I+1)
        NAMC(I+1)=INAMC
        I=MAX0(I-1,1)
      ELSE
        I=I+1
      ENDIF
      IF(I.LT.N-1) GO TO 10
      RETURN
      END
