      SUBROUTINE CMCONT(CARD,LAST,MXLINE,  COMPLT,LINE,NEWLST)
NOLINEUP
C
C     COMBINE INPUT CARD IMAGES INTO A SINGLE LINE IMAGE,
C     REMOVING CONTINUATION CHARACTERS.
C
C     INPUTS--
C     . CARD(1:72) - FIRST 72 COLUMNS OF CARD IMAGE - CHAR*1(72)
C     . LAST       - LAST POSITION USED IN LINE() FROM PREVIOUS CALL.
C     .               ZERO IF THIS IS START OF NEW LINE.
C     . MXLINE     - MAXIMUM NUMBER OF CHARACTERS ALLOWED IN LINE()
C     OUTPUTS--
C     . COMPLT     - =1 IF LINE IS COMPLETE, =0 IF MORE INPUT NEEDED
C     . LINE(1:MXLINE) - RESULT OF COMBINING INPUTS - CHAR*1(MXLINE)
C     . NEWLST     - LAST CHARACTER POSITION FILLED IN LINE()
C
INCLUDE (SCANLIB.PARAMS)
INCLUDE (SCANLIB.CMTABL)
C
      CHARACTER*1 CARD(72),  LINE(MXLINE)
      INTEGER LAST,MXLINE,  COMPLT,NEWLST
      CHARACTER*1 TOKEN(TOKNSZ)
      INTEGER SCANPT,  SCNTRM,NCHARS,TRMTYP
      INTEGER WIDTH
      DATA WIDTH / 9 /
C
      EOL    = 73
      SCANPT = 1
      DO UNTIL (TRMTYP.EQ.CONTIN .OR. SCNTRM.GE.72)
C     SCAN UNTIL <CONTIN> IS FOUND OUTSIDE A QUOTED STRING OR COMMENT
C     OR UNTIL END OF CARD IS REACHED
      CALL CMPOSL(CARD,SCANPT,  SCNTRM,TOKEN,NCHARS,TRMTYP)
      SCANPT = SCNTRM + 1
      END UNTIL
C
      IF (TRMTYP.EQ.CONTIN .AND. SCNTRM.LE.72) THEN
      COMPLT = 0
C     DO NOT COPY CONTINUATION CHARACTER--
      SCNTRM = SCNTRM - 1
      ELSE
      COMPLT = 1
      ENDIF
C
      SCNTRM = MIN0(SCNTRM,72)
      NEWLST = LAST + SCNTRM
      DO FOR I=1,SCNTRM
      INDEX = LAST + I
      IF (INDEX.LE.MXLINE) LINE(INDEX) = CARD(I)
      END FOR
      IF (NEWLST.GT.MXLINE) THEN
      NEWLST = MXLINE
      ISTART = NEWLST - WIDTH + 1
C     *** ERROR 10 - STATEMENT TOO LONG
      CALL CMERMS(10,LINE(ISTART),WIDTH)
      ENDIF
      RETURN
      END
