CONSTINTEGER ATRANS = X'80C0008F' EXTERNALSTRINGFNSPEC INTERRUPT EXTERNALROUTINESPEC SKIPMT(INTEGER I) EXTERNALROUTINESPEC DEFINE(STRING (255) S) EXTERNALROUTINESPEC PROMPT(STRING (15) S) EXTERNALSTRINGFNSPEC TIME EXTERNALSTRINGFNSPEC DATE EXTERNALINTEGERFNSPEC OUTPOS EXTERNALROUTINESPEC UNLOADMT EXTERNALROUTINESPEC OPENMT(STRING (7) S) EXTERNALROUTINESPEC SKIPTMMT(INTEGER I) EXTERNALROUTINESPEC READMT(INTEGER A, INTEGERNAME L, F) !* !* STRING (15) FN I TO S(INTEGER N) !********************************************************************** !* * !* TURNS AN INTEGER INTO A STRING USES MACHINE CODE * !* * !********************************************************************** STRING (16) S INTEGER D0, D1, D2, D3 *LSS_N; *CDEC_0 *LD_S; *INCA_1; ! PAST LENGTH BYTE *CPB_B ; ! SET CC=0 *SUPK_L =15,0,32; ! UNPACK 15 DIGITS SPACE FILL *STD_D2; ! FINAL DR FOR LENGTH CALCS *JCC_8,<WASZERO>; ! N=0 CASE *LSD_TOS ; *ST_D0; ! SIGN DESCRIPTOR STKED BY SUPK *LD_S; *INCA_1 *MVL_L =15,15,48; ! FORCE IN ISO ZONE CODES IF N < 0 THEN BYTEINTEGER(D1) = '-' AND D1 = D1-1 BYTEINTEGER(D1) = D3-D1-1 RESULT = STRING(D1) WASZERO: RESULT = "0" END ; !OF STRINGFN I TO S CONSTBYTEINTEGERARRAY HEX(0 : 15) = C '0','1','2','3','4','5','6', '7','8','9','A','B','C','D','E','F' STRING (8) FN H TO S(INTEGER VALUE, PLACES) !********************************************************************** !* * !* TURNS AN INTEGER INTO A HEXIDECIMAL STRING OF GIVEN LENGTH * !* USES MACHINE CODE * !* * !********************************************************************** STRING (8) S INTEGER I I = 64-4*PLACES *LD_S; *LSS_PLACES; *ST_(DR ) *INCA_1; *STD_TOS ; *STD_TOS *LSS_VALUE; *LUH_0; *USH_I *MPSR_X'24'; ! SET CC=1 *SUPK_L =8 *LD_TOS ; *ANDS_L =8,0,15; ! THROW AWAY ZONE CODES *LSS_HEX+4; *LUH_X'18000010' *LD_TOS ; *TTR_L =8 RESULT = S END ; !OF STRINGFN H TO S ROUTINE DUMP(INTEGER START, FINISH, CONAD, CODE) !********************************************************************** !* * !* DUMPS AREA SPECIFIED BY START AND FINISH IN HEXIDECIMAL * !* ACCEPTS PARAMETERS AS START, FINISH OR AS START,LENGTH WITH CONAD * !* SPECIFYING THE ACTUAL ADDRESS OF THE AREA BEING DUMPED * !* * !********************************************************************** STRING (255) S INTEGER I, J, ABOVE, ACTUAL START, TAB IF CODE = 1 THEN TAB = INTEGER(ATRANS)+256; !ADDR ETOI TABLE !TEST IS TO SEE IF LENGTH< START FINISH = START+FINISH-1 IF FINISH < START !MUST MEAN START, LENGTH START = START&X'FFFFFFFC' ACTUAL START = START CONAD = CONAD&X'FFFFFFFC' FINISH = ((FINISH+4)&X'FFFFFFFC')-1 RETURN IF FINISH < START ABOVE = 0 -> PRINTLINE; !MUST PRINT FIRST LINE IN FULL NEXTLINE: -> PRINTLINE IF FINISH-START < 32 !MUST PRINT LAST LINE *LDA_START; !CHECK IF SAME AS PREVIOUS LINE *LDTB_X'18000020' *CYD_0 *INCA_-32 *CPS_ L = DR *JCC_7, < PRINTLINE > ABOVE = ABOVE+1 START = START+32 -> NEXTLINE PRINTLINE: IF ABOVE # 0 START SPACES(50) IF ABOVE = 1 THEN PRINT STRING(" LINE ") C ELSE PRINT STRING(I TO S(ABOVE)." LINES") PRINT STRING(" AS ABOVE".TO STRING(NL)) ABOVE = 0 FINISH S = "*" CYCLE I = START,1,START+31 J = BYTEINTEGER(I) IF CODE = 1 THEN J = BYTEINTEGER(TAB+J); !ETOI VALUE OF J UNLESS 32 <= J < 127 THEN J = '_' S = S.TO STRING(J) REPEAT S = S."* (".H TO S(CONAD+(START-ACTUAL START),8).") " CYCLE I = START,4,START+28 S = S.H TO S(INTEGER(I),8)." " REPEAT START = START+32 PRINT STRING(S.TO STRING(NL)) -> NEXTLINE UNLESS START > FINISH END ; ! OF DUMP ROUTINE FAIL(STRING (255) S) SELECTOUTPUT(0) PRINTSTRING(S) END ; !OF FAIL EXTERNALROUTINE SHORTANAL(STRING (255) S) INTEGER LEN, FLAG, COUNT, LAST, TM, I BYTEINTEGERARRAY IN(1 : 20000) INTEGER AIN STRING (15) DUMMYS, OUTFILE, VOL ROUTINE OUTPUT RETURN IF COUNT = 0 IF OUTPOS > 60 THEN NEWLINE WRITE(LAST,6) PRINTSYMBOL('(') WRITE(COUNT,1) PRINTSYMBOL(')') END ; !OF OUTPUT DUMMYS = INTERRUPT; !CLEAR ANY INTERRUPT AIN = ADDR(IN(1)) IF S -> VOL.(",").OUTFILE START DEFINE("80,".OUTFILE.",1023") SELECTOUTPUT(80) FINISH ELSE VOL = S UNLESS 6<= LENGTH(VOL)<=7 THEN FAIL("INVALID VOL LABEL ") C AND RETURN OPENMT(VOL) LAST = -1; !IMPOSSIBLE LENGTH COUNT = 0 TM = 1 PRINTSTRING("SHORT ANALYSIS OF TAPE: ".S." ON ".DATE." AT ". C TIME) NEWLINES(2) CYCLE LEN = 20000 IF INTERRUPT = "STOP" THEN -> INTSTOP READMT(AIN,LEN,FLAG) IF FLAG = 0 START IF LEN = LAST THEN COUNT = COUNT+1 ELSE START OUTPUT LAST = LEN COUNT = 1 FINISH FINISH ELSE START IF FLAG = 1 START ; !TAPE MARK OUTPUT PRINTSTRING(" TAPE MARK") WRITE(TM,4) NEWLINE TM = TM+1 IF COUNT = 0 START ; !DOUBLE TAPE MARK PROMPT("CONTINUE Y/N:") UNTIL I = 'N' OR I = 'Y' THEN READSYMBOL(I) IF I = 'N' THEN -> DOUBLE TAPE MARK FINISH COUNT = 0 FINISH ELSE -> READFAIL FINISH REPEAT DOUBLETAPEMARK: PRINTSTRING(" DOUBLE TAPE MARK - ANALYSIS ENDS ") -> ERR READFAIL: OUTPUT FAIL(" READ FAILURE - ANALYSIS ENDS ") -> ERR INTSTOP: NEWLINES(3) PRINTSTRING("STOP REQUESTED") NEWLINES(2) -> ERR ERR: UNLOADMT END ; !OF SHORTANAL EXTERNALROUTINE DUMPMT(STRING (255) S) STRING (15) DUMMYS, OUTFILE, VOL BYTEINTEGERARRAY IN(1 : 24096) CONSTINTEGER MAXLEN = 20000 INTEGER LEN, FLAG, SKIP, I, CODE, AIN, COUNT, BLOCKS COUNT = 0 DUMMYS = INTERRUPT; !CLEAR ANY OUTSTANDING INTERRUPT AIN = (ADDR(IN(1))+4095)&X'FFFFF000' IF S -> VOL.(",").OUTFILE START FINISH ELSE OUTFILE = ".LP" AND VOL = S DEFINE("80,".OUTFILE.",1023") SELECTOUTPUT(80) UNLESS 6<= LENGTH(VOL) <=7 THEN FAIL("INVALID VOL LABEL ") C AND RETURN OPENMT(VOL) PRINTSTRING("DUMP FROM TAPE ".VOL." ON ".DATE." AT ".TIME) NEWLINE PRINTSTRING("_____________________________________________") NEWLINES(3) PROMPT("CODE I/E:") UNTIL I = 'E' OR I = 'I' THEN READSYMBOL(I) IF I = 'I' THEN CODE = 0 ELSE CODE = 1;!ISO OR EBCDIC CHAS IN DUMP PROMPT("SKIP:") READ(SKIP) IF SKIP > 0 THEN SKIPMT(SKIP) AND COUNT = SKIP PROMPT("BLOCKS:") READ(BLOCKS) -> ERR IF BLOCKS <= 0 CYCLE I = 1,1,BLOCKS LEN = MAXLEN IF INTERRUPT = "STOP" THEN -> INTSTOP READMT(AIN,LEN,FLAG) COUNT = COUNT+1 IF FLAG = 2 THEN -> READFAIL IF FLAG = 1 START NEWLINES(2) PRINTSTRING("****TAPE MARK****") FINISH ELSE START NEWLINES(2) PRINTSTRING("BLOCK:") WRITE(COUNT,1) PRINTSTRING(" LENGTH:") WRITE(LEN,1) PRINTSTRING(" BYTES") NEWLINES(2) DUMP(AIN,LEN,0,CODE) FINISH REPEAT -> ERR READFAIL: FAIL("READ FAILURE - DUMP ENDS ") -> ERR INTSTOP: NEWLINES(3) PRINTSTRING("STOP REQUESTED") NEWLINE -> ERR ERR: UNLOADMT END ; !OF DUMPMT ENDOFFILE