!**FILE LAST CHANGED ON 26/02/76 AT 12.08.05 !ALTERED 26.2.76 TO REQUEST NO OF PAGES TO BE WRITTEN !*********************************************************************** !* * !* MAGNETIC TAPE TEST PROGRAM WRITTEN BY R. MCLEOD 16.1.75 * !* THE PROGRAM WRITES A TAPE IN EMAS BACKUP FORMAT FROM AFTER THE * !* LABEL AS FAR AS ET (END OF TAPE). THE FORMAT IS 10 BLOCKS OF * !* 4096 BYTES FOLLOWED BY A TAPE MARK (THIS IS ONE CHAPTER). THERE * !* ARE AS MANY CHAPTERS AS CAN BE WRITTEN - THE LAST ONE MAY BE * !* SHORT. * !* WHEN READING THE PROGRAM CHECKS THAT BLOCKS ARE OF THE CORRECT * !* LENGTH AND THAT THEY CONTAIN CORRECT CHAPTER AND PAGE NUMBERS. * !* ALSO THAT TAPE MARKS APPEAR WHERE EXPECTED. ALL OTHER CHECKING * !* IS LEFT TO STANDARD TAPE HANDLING ROUTINES. * !* THE PROGRAM CALLS ROUTINES IN FILE UTILITY.MTSUPPY - ALSO * !* WRITTEN BY R. MCLEOD. * !* * !*********************************************************************** EXTERNALROUTINE MAGTAPE(STRING (63) S) EXTERNALROUTINESPEC SKIPTMMT(C INTEGER N) CONSTSTRING (3) DEVICEMT = "000" EXTERNALROUTINESPEC WRITEMT(INTEGER A, L, INTEGERNAME F) EXTERNALROUTINESPEC READMT(INTEGER A, INTEGERNAME L, F) EXTERNALROUTINESPEC WRITETMMT(INTEGERNAME F) EXTERNALROUTINESPEC UNLOADMT EXTERNALROUTINESPEC OPENMT(STRING (7) VOL) EXTERNALSTRINGFNSPEC DATE EXTERNALSTRINGFNSPEC TIME EXTERNALROUTINESPEC PROMPT(STRING (15) S) OWNINTEGER CHAP, FLAG, BLENGTH STRING (20) VOL, OPTION INTEGER AHOLD, I, PAGE, CHAPREQ RECORDFORMAT HOLDF(INTEGER CHAP, PAGE, C STRING (8) DATE, TIME, STRING (3) DEV, C BYTEINTEGERARRAY PAT(1 : 4066)) RECORD HOLD(HOLDF) AHOLD=ADDR(HOLD_CHAP) ROUTINE READLINE(STRINGNAME S); !READ NEXT LINE INTO S SKIPSYMBOL WHILE NEXTSYMBOL = NL; !IGNORE BLANK LINES S = '' UNTIL NEXTSYMBOL = NL THEN S = S.C TOSTRING(NEXTSYMBOL) AND SKIPSYMBOL SKIPSYMBOL END PRINTSTRING ("MAG TAPE TEST PROGRAM 26.2.76") NEWLINES(2) PROMPT('TAPE:') GETVOL: READLINE(VOL) -> GET VOL UNLESS LENGTH(VOL) = 6; !ERCC LABELS ALWAYS 6 CHAS PROMPT('READ/WRITE:') GETOPT: READLINE(OPTION) -> READTAPE IF OPTION = 'READ' -> WRITETAPE IF OPTION = 'WRITE' -> GETOPT; !REPLY INVALID !*********************************************************************** !* * !* WRITE TAPE * !* FIRST SET UP BLOCK IN RECORD HOLD. CONTENTS AS PER FORMAT. CHAP * !* COUNTS FROM 1. PAGE COUNTS 1-10 WITHIN EACH CHAPTER. PAGE=-1 * !* MEANS LAST BLOCK ON TAPE. * !* * !*********************************************************************** WRITETAPE: OPENMT(VOL."*"); !MOUNT WITH RING SKIPTMMT(1); !PAST LABEL PROMPT('PAGES:') READ(CHAPREQ) CHAPREQ=(CHAPREQ+9)//10; !10 BLOCKS TO A CHAPTER IF CHAPREQ<=0 THEN CHAPREQ=100000; !PLENTY TO FILL TAPE !SET UP BLOCK HOLD_DATE = DATE HOLD_TIME = TIME HOLD_DEV = DEVICEMT; !DEVICE NO OF DECK CYCLE I = 1,1,4066 HOLD_PAT(I) = X'F0'; !A WORST CASE PATTERN-COULD REPEAT ; !TRY SOMETHING ELSE E.G.X'AA' PRINTSTRING('WRITING TO TAPE '.VOL.' ON DECK '.DEVICEMT.C ' AT '.HOLD_TIME.' ON '.HOLD_DATE) NEWLINES(2) CYCLE CHAP = 1,1,CHAPREQ HOLD_CHAP = CHAP CYCLE PAGE = 1,1,10; !FOR EACH CHAPTER HOLD_PAGE = PAGE WRITEMT(AHOLD,4096,FLAG) -> ENDWRITE IF FLAG = 4; !END OF TAPE -> WRITEFAIL IF FLAG # 0 REPEAT EXITIF CHAP=CHAPREQ; !TO AVOID EXTRA TAPE MARK WRITETMMT(FLAG) -> ENDWRITE IF FLAG=4 ; !END OF TAPE -> WRITEFAIL IF FLAG # 0 REPEAT ENDWRITE: IF PAGE = 10 THEN WRITETMMT(FLAG) HOLD_PAGE = -1 WRITEMT(AHOLD,4096,FLAG); !LAST BLOCK WRITETMMT(FLAG) WRITETMMT(FLAG) NEWLINES(2) PRINTSTRING ("****** TAPE CONTAINS ") WRITE(HOLD_CHAP,1) PRINTSTRING (" CHAPTERS EACH OF 10 PAGES") NEWLINES(2) PRINTSTRING ("RUN ENDS") NEWLINE UNLOADMT RETURN !*********************************************************************** !* * !* READ TAPE * !* EXTRACTS TIME, DATE + DEVICE NO OF TAPE WRITING FOR CHECKING * !* PURPOSES AND OUTPUTS TO TT. CHECKS LENGTHS OF BLOCKS, POSITION * !* OF TAPE MARKS, AND CHAPTER AND PAGE NO OF EACH BLOCK. * !* * !*********************************************************************** READTAPE: OPENMT(VOL."*"); !WITHOUT RING SKIPTMMT(1); !PAST LABEL PRINTSTRING('TAPE NOW MOUNTED ON DECK '.DEVICEMT) NEWLINE CYCLE CHAP = 1,1,100000 CYCLE PAGE = 1,1,10 BLENGTH=4096 READMT(AHOLD,BLENGTH,FLAG) IF FLAG # 0 OR BLENGTH # 4096 THEN -> READFAIL IF HOLD_PAGE = -1 THEN -> ENDREAD IF HOLD_PAGE # PAGE OR HOLD_CHAP # CHAP C THEN -> READFAIL IF PAGE = CHAP = 1 START ; !PRINT HEADING PRINTSTRING('TEST READ OF TAPE '.VOL.' WRITTEN ON '. C HOLD_DATE.' AT '.HOLD_TIME.' ON DECK '.HOLD_DEV) NEWLINES(2) FINISH REPEAT BLENGTH=4096 READMT(AHOLD,BLENGTH,FLAG) -> TMFAIL UNLESS FLAG = 1; !TAPE MARK EXPECTED REPEAT ENDREAD: NEWLINES(2) PRINTSTRING ("*****TAPE READ OK") NEWLINES(2) PRINTSTRING ("RUN ENDS") NEWLINES(2) UNLOADMT RETURN TMFAIL: NEWLINES(2) PRINTSTRING ("****EXPECTED TAPE MARK NOT FOUND") -> FAIL READFAIL: NEWLINES(2) PRINTSTRING ("**** READ FAILURE") -> FAIL WRITEFAIL: NEWLINES(2) PRINTSTRING ("**** WRITE FAILURE") -> FAIL FAIL: NEWLINES(2) PRINTSTRING ("CHAPTER PAGE LENGTH FLAG") NEWLINE WRITE(CHAP,5) WRITE(PAGE,5) WRITE(BLENGTH,5) WRITE(FLAG,5) NEWLINES(2) UNLOADMT END ENDOFFILE