C
      SUBROUTINE FILMOD
      COMMON INBUF(2048),IOUTBUF(8192),IWRK1(20),IWRK2(20),IFNAME1(3)
      COMMON ICMND,IFLAG1,IORG,INUM,IFORMT(20),IFLAG2
      COMMON /CBKEY/ KEYBUF(10)
      OUTPUT'*FILE-LEVEL STRING EDIT HERE*'
      OUTPUT ' '
      OUTPUT 'THIS ROUTINE REPLACES THE 1ST OCCURRANCE OF THE'
      OUTPUT 'TARGET STRING(MAX=80CHARS.) WITH THE DESIRED STRING.'
10    OUTPUT 'ENTER BEGINING KEY INFORMATION.'
      OUTPUT 'IF (CAR RET) IS YOUR RESPONSE, THE FIRST REC IS ASSUMED.'
      OUTPUT 'SEARCH AND REPLACE CONTINUES THRU EOF.'
12    CALL GETAKEY(IERR,KLN,ISIZ)
      IF(IERR.EQ.1) GO TO 12
      OUTPUT 'ENTER BEGIN AND END COLUMN NOS. COMMA SEPARATED'
      OUTPUT 'IF ZEROS, PROGRAM SEARCHES ENTIRE RECS. :  '
      READ(105,20) IB,IE
      IF(IE.EQ.0.OR.IB.EQ.0) IPTR1=1;IPTR2=ISIZ;GO TO 25
20    FORMAT(2I)
25    OUTPUT 'ENTER TARGET STRING TO BE REPLACED : '
      READ(105,30) IWRK1
30    FORMAT(20A4)
      OUTPUT 'ENTER NO. CHARS. IN ABOVE STRING INCLUDING ANY DESIRED'
      OUTPUT'EMBEDDED OR TRAILING BLANKS :  '
      READ(105,40) INCI
40    FORMAT(I)
      OUTPUT 'ENTER REPLACEMENT STRING. IF<> TARGET, RECORD WILL'
      OUTPUT 'BE SHIFTED ACCORDINGLY : '
      READ(105,30) IWRK2
      OUTPUT 'ENTER NO. CHARS. IN ABOVE STRING :  '
      READ(105,40) INCO
C DO IT TO IT
      CALL ERRSET2(IERR,888S,888S,IDCB)
      IHIT=0
      IRECNT=0
      GO TO 120
C SINCE FIRST REC ALREADY IN INBUF, PROCESS 1ST THEN GO TO LOOP
100   CALL GETR(1,INBUF,2048)
      CALL GETSIZ2(1,ISIZ)
      CALL GETKEY(1,KEYBUF,KLN)
C DO ALL REQUESTED STRING REPLACEMENT
C FIND 1ST CHAR POS. OF TARGET STRING IN INBUF
120   IF(IB.EQ.0) IPTR1=1
      IF(IE.EQ.0) IPTR2=ISIZ
      IF(IE.NE.0) IPTR2=IE
210   CALL FIND(IWRK1,1,INBUF,IPTR1,IPTR2,CHAR,KNT2)
C KNT2=0 THEN NOT FOUND IN THIS REC, SUCK IN THE NEXT REC.
      IF(KNT2.EQ.0)  GO TO 100
C FOUND 1ST, IS THIS THE RIGHT 1ST CHAR ?
      IANS=KOMPARE(INBUF,KNT2,IWRK1,1,INCI)
C IF IANS NE 0 THIS IS NOT IT - TRY AGAIN
      IF(IANS.EQ.0) GO TO 300
      IPTR1=IPTR1+1
      GO TO 210
C FOUND TARGET STRING, BUILD OUTREC IN IOUTBUF
300   CALL MOVE(INBUF,1,IOUTBUF,1,KNT2-1)
      CALL MOVE(IWRK2,1,IOUTBUF,KNT2,INCO)
      CALL MOVE(INBUF,KNT2+INCI,IOUTBUF,KNT2+INCO,ISIZ-KNT2+INCO+1)
      IHIT=IHIT+1
C ALL DONE - WRITE OUTREC
      INSIZ=ISIZ-(INCI-INCO)
      CALL PUTR(1,IOUTBUF,-INSIZ,KEYBUF,KLN)
      IRECNT=IRECNT+1
      GO TO 100
888   IF(IERR.EQ.6) GO TO 999
      OUTPUT '!!!FATAL ERROR SEQUENTIALLY READING KEYED FILE!!!'
      RETURN
999   OUTPUT 'END-OF-FILE ENCOUNTERED'
      WRITE(108,400) IHIT
400   FORMAT(1X,'NO. STRINGS CHANGED = ',I4)
      OUTPUT 'BREAK TO RETURN TO "COMMAND" LEVEL OR ENTER'
      OUTPUT 'NEW KEY INFO FOR ANOTHER PASS.'
      OUTPUT ' '
      RETURN
      END
