      SUBROUTINE MAIN
      LOGICAL*1 ARG(512)
      INTEGER OPEN, GETARG, INDEXC
      INTEGER FD, I, J, WORDS, LINES, CHARS, NFILES
      INTEGER NL(2), NW(2), NC(2), TL(2), TW(2), TC(2)
      LOGICAL*1 TOTAL(6)
      LOGICAL*1 USESTR(29)
      LOGICAL*1 NULL(1)
      DATA TOTAL(1)/116/,TOTAL(2)/111/,TOTAL(3)/116/,TOTAL(4)/97/,TOTAL(
     *5)/108/,TOTAL(6)/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
     *19/,USESTR(10)/99/,USESTR(11)/32/,USESTR(12)/91/,USESTR(13)/45/,US
     *ESTR(14)/108/,USESTR(15)/119/,USESTR(16)/99/,USESTR(17)/93/,USESTR
     *(18)/32/,USESTR(19)/91/,USESTR(20)/102/,USESTR(21)/105/,USESTR(22)
     */108/,USESTR(23)/101/,USESTR(24)/93/,USESTR(25)/32/,USESTR(26)/46/
     *,USESTR(27)/46/,USESTR(28)/46/,USESTR(29)/0/
      DATA NULL(1)/0/
      DATA WORDS /1/, LINES /1/, CHARS /1/
      CALL QUERY(USESTR)
      TL(1) = 0
      TL(2) = 0
      TW(1) = 0
      TW(2) = 0
      TC(1) = 0
      TC(2) = 0
      I = 1
23000 IF (.NOT.(GETARG(I, ARG, 40) .NE. -1))GOTO 23002
      IF (.NOT.(ARG(1) .EQ. 45 .AND. ARG(2) .NE. 0))GOTO 23003
      LINES = 0
      WORDS = 0
      CHARS = 0
      CALL FOLD(ARG)
      IF (.NOT.(INDEXC(ARG, 108) .GT. 0))GOTO 23005
      LINES = 1
23005 CONTINUE
      IF (.NOT.(INDEXC(ARG, 119) .GT. 0))GOTO 23007
      WORDS = 1
23007 CONTINUE
      IF (.NOT.(INDEXC(ARG, 99) .GT. 0))GOTO 23009
      CHARS = 1
23009 CONTINUE
      GOTO 23004
23003 CONTINUE
      NFILES = NFILES + 1
      IF (.NOT.(ARG(1) .EQ. 45))GOTO 23011
      FD = 1
      GOTO 23012
23011 CONTINUE
      FD = OPEN(ARG, 1)
23012 CONTINUE
      IF (.NOT.(FD .EQ. -3))GOTO 23013
      CALL PUTLIN(ARG, 3)
      CALL REMARK(13H: can't open.)
      GOTO 23014
23013 CONTINUE
      CALL DOWC(FD, NL, NW, NC)
      CALL PRINTC(ARG, NL, NW, NC, LINES, WORDS, CHARS)
      TL(1) = TL(1) + NL(1)
      TL(2) = TL(2) + NL(2)
      IF (.NOT.(TL(2) .GE. 10000))GOTO 23015
      TL(1) = TL(1) + 1
      TL(2) = TL(2) - 10000
23015 CONTINUE
      TW(1) = TW(1) + NW(1)
      TW(2) = TW(2) + NW(2)
      IF (.NOT.(TW(2) .GE. 10000))GOTO 23017
      TW(1) = TW(1) + 1
      TW(2) = TW(2) - 10000
23017 CONTINUE
      TC(1) = TC(1) + NC(1)
      TC(2) = TC(2) + NC(2)
      IF (.NOT.(TC(2) .GE. 10000))GOTO 23019
      TC(1) = TC(1) + 1
      TC(2) = TC(2) - 10000
23019 CONTINUE
      IF (.NOT.(FD .NE. 1))GOTO 23021
      CALL CLOSE(FD)
23021 CONTINUE
23014 CONTINUE
23004 CONTINUE
23001 I = I + 1
      GOTO 23000
23002 CONTINUE
      IF (.NOT.(NFILES .EQ. 0))GOTO 23023
      CALL DOWC(1, NL, NW, NC)
      CALL PRINTC(NULL, NL, NW, NC, LINES, WORDS, CHARS)
      GOTO 23024
23023 CONTINUE
      IF (.NOT.(NFILES .GT. 1))GOTO 23025
      CALL PRINTC(TOTAL, TL, TW, TC, LINES, WORDS, CHARS)
23025 CONTINUE
23024 CONTINUE
      RETURN
      END
      SUBROUTINE DOWC(FD, NL, NW, NC)
      INTEGER FD, NL(2), NW(2), NC(2)
      LOGICAL*1 GETCH
      LOGICAL*1 C
      INTEGER INWORD
      NL(1) = 0
      NL(2) = 0
      NW(1) = 0
      NW(2) = 0
      NC(1) = 0
      NC(2) = 0
      INWORD = 0
23027 IF (.NOT.(GETCH(C, FD) .NE. -1))GOTO 23028
      NC(2) = NC(2) + 1
      IF (.NOT.(NC(2) .GE. 10000))GOTO 23029
      NC(1) = NC(1) + 1
      NC(2) = 0
23029 CONTINUE
      IF (.NOT.(C .EQ. 10))GOTO 23031
      NL(2) = NL(2) + 1
      IF (.NOT.(NL(2) .GE. 10000))GOTO 23033
      NL(1) = NL(1) + 1
      NL(2) = 0
23033 CONTINUE
23031 CONTINUE
      IF (.NOT.(C .EQ. 32 .OR. C .EQ. 10 .OR. C .EQ. 9))GOTO 23035
      INWORD = 0
      GOTO 23036
23035 CONTINUE
      IF (.NOT.(INWORD .EQ. 0))GOTO 23037
      INWORD = 1
      NW(2) = NW(2) + 1
      IF (.NOT.(NW(2) .GE. 10000))GOTO 23039
      NW(1) = NW(1) + 1
      NW(2) = 0
23039 CONTINUE
23037 CONTINUE
23036 CONTINUE
      GOTO 23027
23028 CONTINUE
      RETURN
      END
      SUBROUTINE PRINTC(ARG, NL, NW, NC, LINES, WORDS, CHARS)
      LOGICAL*1 ARG(100), BUF(20)
      INTEGER DITOC
      INTEGER NL(2), NW(2), NC(2), LINES, WORDS, CHARS, JUNK
      IF (.NOT.(LINES .EQ. 1))GOTO 23041
      JUNK = DITOC(NL, BUF, 20)
      CALL PUTSTR(BUF, 8, 2)
23041 CONTINUE
      IF (.NOT.(WORDS .EQ. 1))GOTO 23043
      JUNK = DITOC(NW, BUF, 20)
      CALL PUTSTR(BUF, 8, 2)
23043 CONTINUE
      IF (.NOT.(CHARS .EQ. 1))GOTO 23045
      JUNK = DITOC(NC, BUF, 20)
      CALL PUTSTR(BUF, 8, 2)
23045 CONTINUE
      CALL PUTCH(32,2)
      CALL PUTLIN(ARG, 2)
      CALL PUTCH(10,2)
      RETURN
      END
