C*******************************************************
C          MODIFY - TO MODIFY WORDS IN ANY RECORD
C*******************************************************
C
C
      SUBROUTINE MODIFY
      COMMON INBUF(2048),IOUTBUF(8192),IWRK1(20),IWRK2(20),IFNAME1(3)
      COMMON ICMND,IFLAG1,IORG,INUM,IFORMT(20),IFLAG2
      COMMON /CBKEY/ KEYBUF(10)
      IF(IORG.EQ.999) CALL ERROR(6); RETURN
8     OUTPUT 'ACCESS METHOD(1=CONSEC, 2=KEYED, 3=RAND, 4=IND RAND)? '
      INPUT IACC
      IF(IACC.LT.1.OR.IACC.GT.4) CALL ERROR(11); GO TO 8
      IF(IORG.EQ.1.AND.IACC.GT.1) CALL ERROR(12); GO TO 8
      IF(IORG.EQ.2.AND.IACC.GT.2) CALL ERROR(13); GO TO 8
      IF(IORG.EQ.3.AND.IACC.NE.3) CALL ERROR(14); GO TO 8
      IF(IORG.EQ.4.AND.IACC.NE.4) CALL ERROR(15); GO TO 8
      GO TO (10,100,200,300), IACC
C
10    OUTPUT '*CONSECUTIVE MODIFY*'
      IF(IORG.EQ.1) GO TO 11
      CALL OPENF(3,'SCRATCH ',3,0,0,2,2,7,0,31,0)
      GO TO 12
11    CALL OPENF(3,'SCRATCH ',3,0,0,1,1,7,0,0,0)
12    CALL ERRSET2(IERR,9S,9S,IDCB)
      CALL OWNBRK(998S)
      GO TO 14
13    OUTPUT ' '
14    OUTPUT 'RECORD NO.:  '
      INPUT INUM
      REWIND 1
      REWIND 3
      IF(INUM.EQ.1)GO TO 18
      DO 15 I=1,INUM-1
      CALL GETR(1,INBUF,2048)
      CALL GETSIZ2(1,ISIZ)
      CALL GETKEY(1,KEYBUF,IKEY)
      IF(IKEY.NE.0) CALL PUTR(3,INBUF,-ISIZ,KEYBUF,IKEY); GO TO 15
      CALL PUTR(3,INBUF,-ISIZ)
15    CONTINUE
18    CALL GETR(1,INBUF,2048)
16    CALL GETSIZ2(1,ISIZ)
      CALL GETKEY(1,KEYBUF,IKEY)
      ITKNT=0
      DO 21 J=1,ISIZ
      CALL CHRTYP(INBUF,J,ITYP,IVAL)
      IF(ITYP.EQ.5) ITKNT=ITKNT+1
21    CONTINUE
      IF(ISIZ.LE.35) IDLNX=ISIZ*2
      IF(ISIZ.GT.35) IDLNX=72
      IF(ISIZ.GT.70) IDLN=70
      CALL QUESTAR(' PRINT THE RECORD   ',20,65S,22S)
65    OUTPUT ' '
      IF(ITKNT.GT.3) GO TO 17
      OUTPUT ' '
      CALL SOUT(' ',1)
      CALL SOUT(INBUF,IDLN)
      OUTPUT ' '
      WRITE(108,33) ISIZ
33    FORMAT(1X,'RECORD SIZE (BYTES) = ',I4)
      GO TO 22
09    CALL ERROR(8)
      GO TO 14
17    CALL DUMPER(2,ISIZ,0,0,1)
22    CONTINUE
42    CONTINUE
      OUTPUT ' '
75    OUTPUT 'MODIFY WORD (SPECIFY NUMBER) :  ';INPUT IWRD
      IF (IWRD .LE. 0) GO TO 43
      CALL QUICK(' VALUE : ',IWRK1,80,NCR,0)
       CALL ROBIN(IWRK2,NCR,IERR)
      INBUF(IWRD) = IWRK2(1)
      GO TO 42
43    CONTINUE
      IF(IKEY.NE.0) CALL PUTR(3,INBUF,-ISIZ,KEYBUF,IKEY); GO TO 44
      CALL PUTR(3,INBUF,-ISIZ)
44    CALL QUESTAR(' GET NEXT RECORD    ',20,47S,30S)
47    OUTPUT ' '
      GO TO 18
30    CONTINUE
      OUTPUT ' '
      OUTPUT 'COPYING ... STAND BY'
      CALL ERRSET2(IERR,999S,999S,IDCB)
32    CALL GETR(1,INBUF,2048)
      CALL GETSIZ2(1,ISIZ)
      CALL GETKEY(1,KEYBUF,IKEY)
      IF(IKEY.NE.0) CALL PUTR(3,INBUF,-ISIZ,KEYBUF,IKEY); GO TO 32
      CALL PUTR(3,INBUF,-ISIZ)
      GO TO 32
999   ENDFILE 3
997   REWIND 3
      REWIND 1
      CALL OWNBRK(997S)
      OUTPUT 'STILL COPYING ... STAND BY'
      CALL ERRSET2(IERR,9999S,9999S,IDCB)
      IRECS=0
34    CALL GETR(3,INBUF,2048)
      CALL GETSIZ2(3,ISIZ)
      CALL GETKEY(3,KEYBUF,IKEY)
      IF(IKEY.NE.0) CALL PUTR(1,INBUF,-ISIZ,KEYBUF,IKEY); GO TO 53
53    IRECS=IRECS+1
      GO TO 34
9999  OUTPUT '*DONE*'
      WRITE(108,36) IRECS
36    FORMAT(6X,'NEW FILE =',I6,' RECORDS')
37    REWIND 1
      OUTPUT ' '
998   CALL CLOSEF(3,1)
      RETURN
C
100   OUTPUT '*KEYED MODIFY*'
102   OUTPUT 'RECORD LEVEL OR FILE LEVEL MODS. - REC/FIL : '
      READ(105,106) IANS
106   FORMAT(A4)
      IF(IANS.EQ.3HREC) GO TO 140
      IF(IANS.EQ.3HFIL) CALL FILMOD
      GO TO 140
120   OUTPUT ' '
140   CALL GETAKEY(IERR,KLN,ISIZ)
      IF(IERR.EQ.1) GO TO 140
      CALL QUESTAR(' PRINT THE RECORD   ',20,160S,170S)
160   OUTPUT ' '
      CALL FORMGET(IFM)
      IF(IFM.EQ.1.OR.IFM.EQ.2) CALL DUMPER(IFM,ISIZ,IWRK2,KLN,1)
      IF(IFM.EQ.3) CALL FDUMP(ISIZ)
170   CONTINUE
      OUTPUT ' '
      OUTPUT 'ENTER "0" TO TERMINATE CURRENT MODIFICATION'
175   OUTPUT 'MODIFY WORD (SPECIFY NUMBER) :  ';INPUT IWRD
      IF (IWRD .LE. 0) GO TO 180
      CALL QUICK(' VALUE : ',IWRK1,80,NCR,0)
       CALL ROBIN(IWRK2,NCR,IERR)
      INBUF(IWRD) = IWRK2(1)
      GO TO 170
180   CONTINUE
      CALL PUTR(1,INBUF,-ISIZ,KEYBUF,KLN)
      RETURN
C
200   OUTPUT '*RANDOM MODIFY*'
      CALL ERRSET2(IERR,299S,299S,IDCB)
      GO TO 215
220   OUTPUT ' '
215   OUTPUT '(ADDRESS), (NO. WORDS):  '
      INPUT IBEG,INWRDS
      IF(INWRDS.EQ.0) INWRDS=1
      READ DISK 1,IBEG,(INBUF(J),J=1,INWRDS)
      CALL QUESTAR(' PRINT  ',8,223S,260S)
223   CALL FORMGET(IFM)
      GO TO (230,240,250),IFM
230   CALL DUMPER(3,INWRDS*4,0,0,1)
      GO TO 260
240   CALL DUMPER(4,INWRDS*4,0,0,1)
      GO TO 260
250   CALL FDUMP(INWRDS*4)
      GO TO 260
      GO TO 215
260   OUTPUT ' '
      CALL QUICK(' VALUE: ',IWRK1,80,NCR,0)
      CALL ROBIN(IWRK2,NCR,IERR)
      DO 265 II=1,INWRDS
265   INBUF(II)=IWRK2(II)
      WRITE DISC 1,IBEG,(INBUF(J),J=1,INWRDS)
      GO TO 215
C
300   OUTPUT '*INDEXED RANDOM MODIFY*'
315   OUTPUT '(ADDRESS), (NO. WORDS):  '
      INPUT IBEG,INWRDS
      CALL QUESTAR(' PRINT  ',8,323S,360S)
      IF(INWRDS.EQ.0) INWRDS=1
323   CALL FORMGET(IFM)
      GO TO (330,340,350),IFM
330   CALL DUMPER(3,INWRDS*4,0,0,1)
      GO TO 360
340   CALL DUMPER(4,INWRDS*4,0,0,1)
      GO TO 360
350   CALL FDUMP(INWRDS*4)
      GO TO 360
399   CALL ERROR(10)
      GO TO 315
360   OUTPUT ' '
      CALL QUICK(' VALUE: ',IWRK1,80,NCR,0)
      CALL ROBIN(IWRK2,NCR,IERR)
      DO 365 II=1,INWRDS
365   INBUF(II)=IWRK2(II)
      WRITE DISC 1,IBEG,(INBUF(J),J=1,INWRDS)
      GO TO 315
400   RETURN
      END
