PROGRAM FIXDIS C C THIS IS PROGRAM TO MANIPULATE DISK BLOCKS DIRECTLY C WILL CAPTURE COMPLETE DISK BLOCKS FROM A DISK C AND RESTORE THEM AFTER MODIFICATION TO THE SAME OR C SOME DIFFERENT DISK. C C MUST BE TASKBUILT AS PRIVILEGED,WITH LUN 2 POINTING C TO SUBJECT DISK. C JAMES TRIPLETT 4/8/80 C INTERMETRICS, INC. C CAMBRIDGE,MASS 02138 C (617)-661-1840 C C C INTEGER BN,DSW,RPARAM(6),RN,VAL,STAT(2) BYTE DISK(6),BUFFER(512),act C PARAMETER READ="1000,WRITE="400 OPEN(UNIT=1,TYPE='OLD',NAME='DISKBLK.TMP',ACCESS='DIRECT', + RECORDSIZE=128,MAXREC=128) CALL GETADR(RPARAM,BUFFER) !PICK UP BUFFER ADDRESS C 10 TYPE *,'ACTION?' ACCEPT 882,ACT IF (ACT .EQ. 'C')GO TO 1000 IF (ACT .EQ. 'M')GO TO 2000 IF (ACT .EQ. 'R')GO TO 3000 IF (ACT .EQ. 'X')GO TO 9900 TYPE *,'ACTIONS ARE SINGLE LETTER: Capture Modify Restor eXit' GO TO 10 C C CAPTURE A BLOCK FROM SOURCE DISK C 1000 CONTINUE TYPE *,'BLOCK NUMBER?' ACCEPT 883,BN RPARAM(2)=512 !# OF BYTES TO READ RPARAM(3)=0 RPARAM(4)=0 !HI BYTES BLOCK NUM RPARAM(5)=BN CALL WTQIO(READ,2,1,,STAT,RPARAM,DSW) IF (DSW .ne. 1) GO TO 9040 IF(STAT(1) .ne. 1) GO TO 9020 TYPE 887,STAT TYPE *,'RECORD NUM IN FILE?' ACCEPT 883,RN WRITE (1'RN,ERR=9010)BUFFER GO TO 10 C C MODIFY SOME WORDS IN A PREV CAPTURED BLOCK C 2000 CONTINUE TYPE *,'RECORD NUMBER IN FILE?' ACCEPT 883,RN READ (1'RN,ERR=9010)BUFFER C 2010 TYPE *,'BYTE TO MODIFY (DECIMAL)?' ACCEPT 883,BN IF(BN .EQ. 0)GO TO 2020 TYPE 885,BUFFER(BN) TYPE *,'NEW VALUE (OCTAL)?' ACCEPT 885,VAL BUFFER(BN)=VAL GO TO 2010 c 2020 continue WRITE (1'RN,ERR=9010)BUFFER GO TO 10 C C RESTORE A PREV CAPTURED BLOCK TO THE DISK C 3000 CONTINUE TYPE *,'FILE RECORD NUMBER?' ACCEPT 883,RN READ (1'RN,ERR=9010)BUFFER TYPE *,'BLOCK NUMBER ON DISK?' ACCEPT 883,BN RPARAM(2)=512 RPARAM(3)=0 RPARAM(4)=0 !HI BYTES BLOCK ADDRESS RPARAM(5)=BN CALL WTQIO (WRITE,2,1,,STAT,RPARAM) IF (STAT(1) .LT. 0) GO TO 9020 GO TO 10 C C ERROR RETURNS C 9010 TYPE *,'DIRECT ACCESS FILE PROBLEMS' GO TO 9900 C 9020 TYPE *,'DISK ACCESSING PROBLEMS' type 887,stat GO TO 9900 C C 9040 TYPE 886,DSW C C 9900 CALL CLOSE(1) CALL CLOSE(2) STOP 881 FORMAT(5A1) 882 FORMAT(A1) 883 FORMAT(I1) 884 FORMAT(2(I6,X)) 885 FORMAT(' CURRENT VALUE: ',O6) 886 FORMAT(' DSW FAILURE: ',I5) 887 FORMAT('status: ',o6,' BYTES READ: ',I4) END