! ! ACCELERATED VERIFY WITH IN-LINE CODING ! GJB 15/01/78 ! ! STACK=70000 STREAMS=1 ! %CONTROL K'101011' %BEGIN %CONSTBYTEINTEGERNAME ID=K'160030' %RECORDFORMAT DLF(%INTEGER PR,NEXT) %RECORD(DLF)%ARRAY DIRL(0:K'7777') %RECORD(DLF)%NAME BLKINFO %RECORDFORMAT DF(%BYTEINTEGERARRAY NAME(0:5),%INTEGER FIRST,PR) %RECORD(DF)%ARRAY DIRT(0:51) %RECORD(DF)%NAME FILE %RECORDFORMAT LF(%BYTEINTEGERARRAY NAME(0:15),%INTEGER FIRST,LAST, %C DIRB,DIRLIST) %RECORD(LF)%NAME LABEL LABEL==DIRT(0) %RECORDFORMAT PF(%BYTEINTEGER SERVICE,REPLY,%INTEGER A1, %C %RECORD(DLF)%NAME A2,%INTEGER A3) %RECORD(PF) P %INTEGERARRAY BIT MAP(0:4000) %CONSTINTEGERARRAY BIT POS(0:15)= %C X'0001', X'0002', X'0004', X'0008', X'0010', X'0020', X'0040', X'0080', X'0100', X'0200', X'0400', X'0800', X'1000', X'2000', X'4000', X'8000' %CONSTINTEGER RDISC=0, WDISC=1 %CONSTINTEGERARRAY SERV(0:4)=3,3,8,14,28 %OWNINTEGER DRIVE,UNIT,FREE,USER,PATCH,LOST,BAD %OWNINTEGERARRAY SAVE(0:31)=-1(32) %INTEGER LIST,I,J,K,L,BOTTOM,TOP,DIRB,DIRLIST,DIRBLOCK, %C TOTAL,USERED,SIZE,CORRUPT,FIRST,LAST,C,BLOCK %ROUTINE DA(%INTEGER STATE,MODE,BLOCK,%RECORD(DLF)%NAME ADDRESS) P_SERVICE=SERV(DRIVE); P_REPLY=ID P_A1=MODE; P_A2==ADDRESS; P_A3=BLOCK!UNIT PONOFF(P) %IF P_A1#0 %START NEWLINES(3) PRINT STRING('*** DISC FAULT'); WRITE(P_A1,0) PRINT STRING(' ON BLOCK'); WRITE(BLOCK,0) PRINT STRING(' IN STATE'); WRITE(STATE,0) NEWLINES(3) %STOP %FINISH %END %ROUTINE OCTAL(%INTEGER I) %INTEGER J SPACE PRINT SYMBOL(I>>J&7+'0') %FOR J=15,-3,0 %END %ROUTINE WRITE(%INTEGER I,J) %INTEGER K,L %INTEGERARRAY D(1:5) %CONSTINTEGERARRAY CON(1:5)=8,6,7,2,3 K=I>>15; I=I&32767 D(L)=0 %FOR L=1,1,5 %CYCLE L=1,1,5 D(L)=D(L)+I I=I//10 D(L)=D(L)-10*I D(L)=D(L)+CON(L) %IF K=1 D(L)=D(L)-10 %AND D(L+1)=1 %IF D(L)>9 %REPEAT %CYCLE L=5,-1,1 %IF D(L)>0 %OR J=-1 %OR L=1 %START SPACES(J-L) %AND SPACE %AND J=-1 %IF J>=0 PRINT SYMBOL(D(L)+'0') %FINISH %REPEAT %END NEWLINE %CYCLE PROMPT('UNIT?') READ SYMBOL(LIST) %IF '0'<=LIST<='4' %START DRIVE=LIST-'0' READ SYMBOL(LIST) READ SYMBOL(LIST) %IF LIST='.' PROMPT('LIST?') %AND READ SYMBOL(LIST) %IF LIST=NL %FINISH PATCH=1 %AND READ SYMBOL(LIST) %IF LIST='P' SKIP SYMBOL %AND %EXIT %IF (LIST='N' %OR LIST='Y' %OR LIST='F') %AND %C NEXT SYMBOL=NL LIST='N' %AND %EXIT %IF LIST=NL READ SYMBOL(LIST) %WHILE LIST#NL PRINT SYMBOL('?'); NEWLINE %REPEAT UNIT=K'20000' %IF DRIVE=1 DA(1,RDISC,K'77',DIRT(0)) BOTTOM=LABEL_FIRST; TOP=LABEL_LAST DIRB=LABEL_DIRB; DIRLIST=LABEL_DIRLIST %IF LIST#'N' %START PROMPT('HEADING?') SELECT OUTPUT(1) PRINT STRING('==== ') PRINT SYMBOL(LABEL_NAME(I)) %FOR I=0,1,15 PRINT STRING(' ==== ') %CYCLE READ SYMBOL(I) PRINT SYMBOL(I) %EXIT %IF I=NL %REPEAT NEWLINES(2) PRINT STRING(' NAME FIRST SIZE PR') NEWLINE %FINISH %CYCLE DIRBLOCK=DIRB,1,DIRB+K'77' DA(2,RDISC,DIRBLOCK,DIRT(0)) TOTAL=0; USERED=0 %CYCLE I=0,1,50 FILE==DIRT(I) %IF FILE_NAME(0)#0 %START SIZE=0; CORRUPT=0 FIRST=FILE_FIRST BLOCK=FIRST %IF LIST#'N' %START NEWLINE %IF LIST='F' %IF USERED=0 %START NEWLINES(2) PRINT STRING(' USER ') PRINT SYMBOL(USER>>3+'0'); PRINT SYMBOL(USER&7+'0') NEWLINES(3) USERED=1 %FINISH WRITE(I,2); SPACE %IF FILE_NAME(0)<128 %THEN SPACE %ELSE PRINT SYMBOL('#') PRINT SYMBOL(FILE_NAME(J)) %FOR J=0,1,5; SPACES(2) C=0 %FINISH %UNTIL BLOCK=0 %CYCLE %IF LIST='F' %START WRITE(BLOCK,6) %IF C<7 %THEN C=C+1 %ELSE %START C=0 NEWLINE; SPACES(13) %FINISH %FINISH J=0 %IF 2<=DRIVE<=3 %START J=1 %IF BLOCKTOP %FINISH %ELSE %START J=1 %IF BLOCKTOP %FINISH %IF J=1 %START NEWLINE PRINT STRING(' BLOCK'); WRITE(BLOCK,0) PRINT STRING(' OUT OF RANGE'); NEWLINE; SPACES(13) BLOCK=0; C=0 %FINISH J=BLOCK>>7; K=J&K'37'; L=J>>5 %IF SAVE(K)#L %START DA(3,RDISC,DIRLIST+J,DIRL(BLOCK&K'7600')) SAVE(K)=L %FINISH BLKINFO==DIRL(BLOCK&K'7777') %IF BLKINFO_PR#FILE_PR %START CORRUPT=CORRUPT+1; BAD=BAD+1 %IF (LIST#'N' %AND CORRUPT=1) %OR LIST='F' %START NEWLINE PRINT STRING(' BLOCK'); WRITE(BLOCK,0) PRINT STRING(' : PR MISMATCH, EXP:'); OCTAL(FILE_PR) PRINT STRING(', ACT:'); OCTAL(BLKINFO_PR) NEWLINE; SPACES(13) C=0 %FINISH %FINISH J=BLOCK>>4 BIT MAP(J)=BIT MAP(J)!BIT POS(BLOCK&K'17') SIZE=SIZE+1 BLOCK=BLKINFO_NEXT %REPEAT NEWLINE %IF C>0 %IF LIST#'N' %START NEWLINE %AND SPACES(13) %IF LIST='F' WRITE(FIRST,6); WRITE(SIZE,6); SPACES(2); OCTAL(FILE_PR) %IF CORRUPT#0 %START PRINT STRING(' :'); WRITE(CORRUPT,0) PRINT STRING(' BLOCKS CORRUPTED') %FINISH NEWLINE %FINISH TOTAL=TOTAL+SIZE %FINISH %REPEAT %IF LIST#'N' %AND USERED#0 %START NEWLINES(2) PRINT STRING(' NUMBER OF BLOCKS ='); WRITE(TOTAL,0); NEWLINE %FINISH USER=USER+1 %REPEAT NEWLINES(2) %IF LIST#'N' %CYCLE BLOCK=BOTTOM,1,TOP I=BLOCK>>7; J=I&K'37'; K=I>>5 %IF SAVE(J)#K %START DA(4,RDISC,DIRLIST+I,DIRL(BLOCK&K'7600')) SAVE(J)=K %FINISH %EXIT %IF DIRL(BLOCK&K'7777')_PR#0 FREE=FREE+1 %REPEAT FIRST=BLOCK %CYCLE BLOCK=FIRST,1,TOP I=BLOCK>>7; J=I&K'37'; K=I>>5 %IF SAVE(J)#K %START DA(5,RDISC,DIRLIST+I,DIRL(BLOCK&K'7600')) SAVE(J)=K %FINISH BLKINFO==DIRL(BLOCK&K'7777') %IF BLKINFO_PR=0 %THEN FREE=FREE+1 %ELSE %START LAST=BLOCK %IF BIT MAP(BLOCK>>4)&BIT POS(BLOCK&K'17')=0 %START LOST=LOST+1 %IF LIST#'N' %START J=BLKINFO_PR PRINT STRING('BLOCK'); WRITE(BLOCK,0) PRINT STRING(' LOST FROM FILE'); WRITE(J&K'77',0) PRINT STRING(' IN'); WRITE(DRIVE,0) PRINT SYMBOL('.') PRINT SYMBOL(J>>9&7+'0'); PRINT SYMBOL(J>>6&7+'0') %FINISH %IF PATCH=1 %START BLKINFO=0 DA(6,WDISC,DIRLIST+I,DIRL(BLOCK&K'7600')) PRINT STRING(' - NOW RECOVERED') %IF LIST#'N' %FINISH %ELSE %IF LIST#'N' %AND BLKINFO_NEXT#0 %THEN %C PRINT STRING(' - NEXT BLOCK IS') %AND WRITE(BLKINFO_NEXT,0) NEWLINE %IF LIST#'N' %FINISH %FINISH %REPEAT NEWLINE NEWLINES(2) %AND SPACES(5) %IF LIST#'N' %IF LOST#0 %START WRITE(LOST,0); PRINT STRING(' BLOCKS LOST') PRINT STRING(' - NOW RECOVERED') %IF PATCH=1 NEWLINE %FINISH %IF BAD#0 %START WRITE(BAD,0); PRINT STRING(' CORRUPT BLOCKS DETECTED') NEWLINE %FINISH PRINT STRING('FIRST ='); WRITE(FIRST,0) PRINT STRING(', LAST ='); WRITE(LAST,0) PRINT STRING(', USED ='); WRITE(TOP-BOTTOM-FREE+1,0) PRINT STRING(', FREE ='); WRITE(FREE,0) NEWLINE %ENDOFPROGRAM