      SUBROUTINE MAIN
      LOGICAL*1 NAME(40)
      INTEGER GETARG, OPEN, CTOI
      INTEGER FD, I, J
      COMMON /CPRINT/ MAR1, MAR2, BMAR, DOHEAD, DOTAIL, PLEN
      INTEGER MAR1
      INTEGER MAR2
      INTEGER BMAR
      INTEGER DOHEAD
      INTEGER DOTAIL
      INTEGER PLEN
      LOGICAL*1 STDINP(15)
      LOGICAL*1 USESTR(30)
      DATA STDINP(1)/83/,STDINP(2)/116/,STDINP(3)/97/,STDINP(4)/110/,STD
     *INP(5)/100/,STDINP(6)/97/,STDINP(7)/114/,STDINP(8)/100/,STDINP(9)/
     *32/,STDINP(10)/105/,STDINP(11)/110/,STDINP(12)/112/,STDINP(13)/117
     */,STDINP(14)/116/,STDINP(15)/0/
      DATA USESTR(1)/117/,USESTR(2)/115/,USESTR(3)/97/,USESTR(4)/103/,US
     *ESTR(5)/101/,USESTR(6)/58/,USESTR(7)/32/,USESTR(8)/32/,USESTR(9)/1
     *12/,USESTR(10)/114/,USESTR(11)/32/,USESTR(12)/91/,USESTR(13)/45/,U
     *SESTR(14)/108/,USESTR(15)/60/,USESTR(16)/110/,USESTR(17)/62/,USEST
     *R(18)/93/,USESTR(19)/32/,USESTR(20)/91/,USESTR(21)/102/,USESTR(22)
     */105/,USESTR(23)/108/,USESTR(24)/101/,USESTR(25)/93/,USESTR(26)/32
     */,USESTR(27)/46/,USESTR(28)/46/,USESTR(29)/46/,USESTR(30)/0/
      CALL QUERY(USESTR)
      MAR1 = 0
      MAR2 = 2
      BMAR = 0
      DOHEAD = 1
      PLEN = 62
      FD = -3
      I = 1
23000 IF (.NOT.(GETARG(I, NAME, 40) .NE. -1))GOTO 23002
      IF (.NOT.(NAME(1) .EQ. 45 .AND. NAME(2) .NE. 0))GOTO 23003
      IF (.NOT.(NAME(2) .EQ. 108 .OR. NAME(2) .EQ. 76))GOTO 23005
      J = 3
      PLEN = CTOI(NAME, J)
      IF (.NOT.((PLEN-MAR1-MAR2-BMAR-2) .LE. 0))GOTO 23007
      CALL ERROR (15Hpage too small.)
23007 CONTINUE
      GOTO 23006
23005 CONTINUE
      CALL REMARK (26Hignoring invalid argument.)
23006 CONTINUE
      GOTO 23004
23003 CONTINUE
      IF (.NOT.(NAME(1) .EQ. 45 .AND. NAME(2) .EQ. 0))GOTO 23009
      FD = 1
      CALL FPRINT (STDINP, 1)
      GOTO 23010
23009 CONTINUE
      FD = OPEN(NAME, 1)
      IF (.NOT.(FD .EQ. -3))GOTO 23011
      CALL CANT(NAME)
23011 CONTINUE
      CALL FPRINT(NAME, FD)
      CALL CLOSE(FD)
23010 CONTINUE
23004 CONTINUE
23001 I = I + 1
      GOTO 23000
23002 CONTINUE
      IF (.NOT.(FD .EQ.-3))GOTO 23013
      CALL FPRINT(STDINP, 1)
23013 CONTINUE
      RETURN
      END
      SUBROUTINE FPRINT(NAME, FD)
      LOGICAL*1 LINE(512), NAME(100), DATE(10), TIME(10)
      INTEGER GETLIN
      INTEGER FD, LINENO, PAGENO, NOW(7)
      COMMON /CPRINT/ MAR1, MAR2, BMAR, DOHEAD, DOTAIL, PLEN
      INTEGER MAR1
      INTEGER MAR2
      INTEGER BMAR
      INTEGER DOHEAD
      INTEGER DOTAIL
      INTEGER PLEN
      CALL GETNOW(NOW)
      CALL FMTDAT(DATE, TIME, NOW, 1)
      PAGENO = 0
      LINENO = 0
23015 IF (.NOT.(GETLIN(LINE, FD) .NE. -1))GOTO 23016
      IF (.NOT.(LINENO .EQ. 0))GOTO 23017
      PAGENO = PAGENO + 1
      IF (.NOT.(DOHEAD .EQ. 1))GOTO 23019
      CALL SKIP(MAR1)
      CALL HEAD(NAME, DATE, TIME, PAGENO)
      CALL SKIP(MAR2)
      LINENO = MAR1 + MAR2 + 1
23019 CONTINUE
23017 CONTINUE
      CALL PUTLIN(LINE, 2)
      LINENO = LINENO + 1
      IF (.NOT.(LINENO + BMAR .GE. PLEN))GOTO 23021
      CALL SKIP(BMAR)
      LINENO = 0
23021 CONTINUE
      GOTO 23015
23016 CONTINUE
      IF (.NOT.(LINENO .GT. 0))GOTO 23023
      CALL SKIP(PLEN-LINENO)
      CALL SKIP(BMAR)
23023 CONTINUE
      RETURN
      END
      SUBROUTINE HEAD(NAME, DATE, TIME, PAGENO)
      LOGICAL*1 NAME(100), DATE(100), TIME(100)
      INTEGER PAGENO
      LOGICAL*1 PAGE(10)
      LOGICAL*1 TWOBLK(3)
      DATA PAGE(1)/32/,PAGE(2)/32/,PAGE(3)/32/,PAGE(4)/80/,PAGE(5)/97/,P
     *AGE(6)/103/,PAGE(7)/101/,PAGE(8)/32/,PAGE(9)/32/,PAGE(10)/0/
      DATA TWOBLK(1)/32/,TWOBLK(2)/32/,TWOBLK(3)/0/
      CALL PUTCH(12, 2)
      CALL PUTLIN(NAME, 2)
      CALL PUTLIN(TWOBLK, 2)
      CALL PUTLIN(DATE, 2)
      CALL PUTCH(32, 2)
      CALL PUTLIN(TIME, 2)
      CALL PUTLIN(PAGE, 2)
      CALL PUTINT(PAGENO, 1,2)
      CALL PUTCH(10,2)
      RETURN
      END
      SUBROUTINE SKIP(N)
      INTEGER I, N
      I = 1
23025 IF (.NOT.(I .LE. N))GOTO 23027
      CALL PUTCH(10,2)
23026 I = I + 1
      GOTO 23025
23027 CONTINUE
      RETURN
      END
