C PROGRAM TO MODIFY A WORD IN A FILE BY ENTERING THE BYTE OFFSET WITHIN C THE FILE. C C FILED BY GLENN BEVER--20-FEB-79. C REVISED 18-NOV-82, G. BEVER. C NASA DFRF C P.O. BOX 273 C EDWARDS, CA 93523 C C COMPILE AS FOLLOWS: C C .FORTRA MOD C C LINK AS FOLLOWS: C C .LINK MOD C INTEGER*2 JNUM(2) INTEGER*2 ISPEC(39),JSWI(4,1),IBUF(256) REAL*4 EXT(2) DATA EXT/6RSAVLST,6RDATDAT/ DATA JSWI/'M',3*0/,IDIF/0/ C C CALL COMMAND STRING INTERPRETER TO GET DEVICE NAMES. C *TT:=DEV:FILE.NAM C C WHERE FILE.NAM IS A FILE TO BE MODIFIED. 'NAM' IS 'SAV' BY DEFAULT. C C AFTER THE ABOVE ENTRY, A '*' IS PROMPTED AND TWO OCTAL NUMBERS C SIGNIFYING THE BLOCK # AND BYTE POSITION IN THE BLOCK TO MODIFY C SHOULD BE ENTERED FROM THE KEYBOARD. C ITS CONTENTS ARE DISPLAYED AND A REPLACEMENT VALUE MUST BE C ENTERED. NOTE THAT IF ONLY A CARRIAGE RETURN IS TYPED, C THEN A ZERO WILL BE ENTERED INTO THIS LOCATION. C THE PROGRAM LOOPS UNTIL A 'CONTROL C' IS TYPED. C THIS WILL EXIT THE PROGRAM. ALL PREVIOUSLY MODIFIED WORDS ARE C NOW PERMANENTLY MODIFIED ON THE FILE. C INUM=0 5 IF(ICSI(ISPEC,EXT,,JSWI,1).NE.0) GO TO 5 C ASSIGN LOGICAL UNIT 10 TO 1ST OUTPUT FILE ENTERED. CALL IASIGN(10,ISPEC(1),ISPEC(2),0,0) C GET A CHANNEL NUMBER. ICHAN=IGETC() IF(ICHAN.LT.0) STOP 'NO CHANNEL' C FETCH INPUT DEVICE HANDLER INTO MEMORY. IF(IFETCH(ISPEC(16)).NE.0) STOP 'BAD FETCH' C PERFORM LOOKUP OF INPUT FILE. I=LOOKUP(ICHAN,ISPEC(16)) IF(I.LT.0) GO TO 50 C WRITE OUT PROMPT. 6 WRITE(10,110) 110 FORMAT(' ENTER BLOCK # (O6) AND BYTE # (O3)',/,' *',$) C GET BYTE ADDRESS IN FILE. ACCEPT 108,JNUM(1),JNUM(2) 108 FORMAT(O6,O3) C IBLK=BLOCK # & INUM= OFFSET BYTE IN BLOCK. IBLK=JNUM(1) INUM=JNUM(2) C READ A BLOCK. 10 I=IREADW(256,IBUF,IBLK,ICHAN) C IF END OF FILE REACHED, END PROGRAM. C IF BAD READ, GO TO 51. IF(I.EQ.-1) GO TO 9999 IF(I.LT.-1) GO TO 51 C WRITE BYTE NUMBER AND CONTENTS. WRITE(10,109)JNUM(1),JNUM(2),IBUF(INUM/2+1) 109 FORMAT(1X,O6,O3,'/',1X,O6,1X,$) ACCEPT 108,ISRCH IBUF(INUM/2+1)=ISRCH I=IWRITW(256,IBUF,IBLK,ICHAN) IF(I.LT.0) STOP 'BAD WRITE' GO TO 6 50 WRITE(10,100)I 100 FORMAT(1X,I7) STOP 'BAD LOOKUP' 51 WRITE(10,101)I 101 FORMAT(1X,I7,'BAD READ') 9999 STOP 'INVALID BLOCK, PAST END OF FILE' END