ECPRT IDENT ECPRT,111B,ECPRT TITLE ECPRT ECS DUMP INTERPRETER TITLE DEFINITIONS * * COMMENT COPYRIGHT CONTROL DATA CORP. 1978. *COMMENT ECPRT - PLATO ECS DUMP PRINTER. * * ************************************************** * * * CONTROL CARD FORMAT - * * ECPRT(DUMP FILE,FWA,LWA) * * * THIS PROGRAM ASSUMES THE DUMP FILE HAS BEEN * DUMPED USING ECDMP OR THE CONTENTS CONSISTS * OF A SERIES OF 1000B WORD RECORDS WITH A * HEADER RECORD CONTAINING THE JOB NAME, DATE * AND TIME OF THE DUMP. * * * ************************************************** * * ABS SST SYSCOM B1 * * *CALL COMCMAC * * DDSIZ EQU 1000B DUMP FILE BLOCK SIZE (WORDS) DDSEC EQU DDSIZ/100B+1 BLOCK SIZE (SECTORS) CIOLTH EQU DDSIZ+1 DUMP FILE CIO BUFFER SIZE CIOLTH1 EQU 301B OUTPUT FILE CIO BUFFER SIZE TITLE LOCAL MACROS * * * OUTPUT - PRINT LINE OF OUTPUT * * P1 = ADDRESS OF STRING TO BE PRINTED * PURGMAC OUTPUT OUTPUT MACRO P1 SB2 P1 RJ WRITE ENDM * * * PACK - PACK CHARACTER BUFFER INTO WORD BUFFER * * P1 = ADDRESS OF CHARACTER BUFFER * P2 = ADDRESS OF WORD BUFFER * PURGMAC PACK PACK MACRO P1,P2 SB2 P1 SB3 P2 RJ PACK ENDM * * * UNPACK - UNPACK WORD BUFFER INTO CHARACTER BUFFER * * P1 = ADDRESS OF WORD BUFFER * P2 = ADDRESS OF CHARACTER BUFFER * PURGMAC UNPACK UNPACK MACRO P1,P2 SB2 P1 SB3 P2 RJ UNPACK ENDM TITLE INITIALIZATIONS * * * ORG 111B * ENTRY ECPRT ENTRY ARG= CRACK OWN CONTROL CARD ARG= EQU * * ECPRT SB1 1 * * CRACK CONTROL CARD - IMAGE IS IN *CCDR* * UNPACK CCDR,CHARS * * ZERO ALL DELIMITING CHARACTERS SO PACK WILL WORK * SA1 CHARS-1 SX2 1R( SX3 1R, SX4 1R. SX5 1R) CCC1 SA1 A1+B1 GET NEXT CHARACTER ZR X1,CCCX END-OF-LINE IX6 X1-X4 NZ X6,CCC3 NOT EOL DELIMITER CCC2 SA6 A1 CLEAR CHARACTER EQ CCCX CCC3 IX6 X1-X5 ZR X6,CCC2 IF EOL DELIMITER IX6 X1-X2 ZR X6,CCC4 IF DELIMITER IX6 X1-X3 ZR X6,CCC4 IF DELIMITER EQ CCC1 GET NEXT CHARACTER CCC4 SA6 A1 CLEAR DELIMITER EQ CCC1 GET NEXT CHARACTER CCCX PACK CHARS,WORK PACK UP STATEMENT NAME (*ECPRT*) SB2 B2+B1 ADVANCE CHARACTER POINTER PACK B2,ARGR PACK DUMP FILE NAME SB2 B2+B1 PACK B2,ARGR+1 PACK FWA OF DUMP SB2 B2+B1 PACK B2,ARGR+2 PACK LWA OF DUMP * * PROCESS 1ST ARGUMENT = DUMP FILE NAME * MX0 42 X0 = ARGUMENT MASK SA1 ARGR LOAD DUMP FILE ARGUMENT BX1 X0*X1 ZR X1,ARGERR SA2 DFET BX2 -X0*X2 CLEAR OUT FILE NAME IN FET BX6 X1+X2 SA6 A2 SET FILE NAME IN 1ST WD OF FET * * PROCESS 2ND ARGUMENT = FWA FOR PRINT * SA1 ARGR+1 LOAD FWA ARGUMENT MX0 48 BX5 X0*X1 SB7 B0 OCTAL DIGITS ONLY RJ DXB CONVERT TO OCTAL NZ X4,ARGERR IF CONVERSION ERROR NG X6,ARGERR IF BAD ADDRESS * MUST ROUND ADDRESS DOWN TO NEAREST 4 WORDS TO BE * SURE THAT BLOCK BOUNDARIES OCCUR AT END OF LINE AX6 2 ROUND TO 4 WORD BLOCK LX6 2 SA6 DFWA SET FWA OF ECS PRINT * * PROCESS 3RD ARGUMENT = LWA OF PRINT * MX0 48 SA1 ARGR+2 LOAD LWA ARGUMENT BX5 X0*X1 SB7 B0 OCTAL DIGITS ONLY RJ DXB CONVERT TO OCTAL NZ X4,ARGERR IF CONVERSION ERROR NG X6,ARGERR IF BAD ADDRESS * MUST ROUND ADDRESS UP TO NEAREST 4 WORDS TO BE * SURE THAT BLOCK BOUNDARIES OCCUR AT END OF LINE SX1 3 IX6 X6+X1 AX6 2 LX6 2 SA6 DLWA SET LWA OF ECS PRINT SA1 DFWA IX1 X1-X6 CHECK LWA LEGAL PL X1,ARGERR * * * OPEN INPUT / OUTPUT FILES * OPEN DFET,READNR,RECALL RECALL DFET REWIND DFET MAKE SURE AT FIRST RECORD RECALL DFET READ DFET READ HEADER RECORD RECALL DFET OPEN OUTPUT,WRITENR,RECALL * SA1 DFWA SET CURRENT BLOCK NUMBER BX6 X1 AX6 9 SA6 DII SA1 DFWA SET WORD POINTER MX0 -9 BX6 -X0*X1 SA6 DJJ EQ PRT100 * * ARGERR MESSAGE ARGMES,0,RECALL ENDRUN * ARGMES DIS ,*ARGUMENT ERROR* * TITLE FORMAT AND PRINT ECS DUMP * * * * FORMAT AND PRINT DUMP HEADER * PRT100 OUTPUT EJECT OUTPUT MARG UNPACK MARG,CHARS UNPACK HEADER1,B3 UNPACK CIOBUFF,B3 SET JOB NAME UNPACK HEADER2,B3 MX6 0 SA6 WORK+1 INSURE END-OF-LINE SA1 CIOBUFF+1 BX6 X1 SET DATE OF DUMP SA6 WORK UNPACK WORK,B3 SA1 CIOBUFF+2 BX6 X1 SET TIME OF DUMP SA6 WORK UNPACK WORK,B3 PACK CHARS,LINE OUTPUT LINE OUTPUT MARG EQ PRT210 * * * READ NEXT BLOCK FROM DUMP FILE * PRT200 SA1 DII INCREMENT CURRENT BLOCK NUMBER SX6 B1 IX6 X1+X6 SA6 A1 MX6 0 RESET WORD POINTER SA6 DJJ * PRT210 MX0 42 SET UP CIO FET POINTERS SX7 CIOBUFF SA7 DFET+2 IN = CIO BUFFER SA7 A7+B1 OUT = CIO BUFFER SA1 DII CURRENT BLOCK NUMBER SX6 DDSEC SECTORS/DUMP BLOCK IX6 X1*X6 SX1 2 SYSTEM AND HEADER SECTORS IX6 X6+X1 SA6 DFET+6 SET RELATIVE SECTOR ADDRESS READ DFET,R READ BLOCK RECALL DFET SA1 DFET+2 CHECK FOR EMPTY RECORD SX2 X1-CIOBUFF ZR X2,PRT900 IF END OF RECORD/FILE ONLY * * * CHECK FOR ECS PARITY ERROR RECORD * SA1 CIOBUFF SA2 ERR BX1 X1-X2 NZ X1,PRT230 IF NOT ECS ERROR RECORD SA1 A1+B1 SA2 A2+B1 BX1 X1-X2 NZ X1,PRT230 IF NOT ECS ERROR RECORD OUTPUT ECSMES SX6 DDSIZ SKIP THIS BLOCK SA6 DJJ EQ PRT270 * * ERR DIS ,/*** ECS ERROR ***/ * * * FORMAT AND PRINT NEXT BLOCK OF DUMP FILE * PRT230 UNPACK FIRST,CHARS SB7 B3 B7 = POINTER TO NEXT CHARACTER SA1 DII CURRENT BLOCK NUMBER LX1 9 FWA OF CURRENT BLOCK SA2 DJJ COMPUTE CURRENT WORD ADDRESS SX0 X2-DDSIZ PL X0,PRT200 IF DONE WITHTHIS BLOCK SB6 X2 B6 = CURRENT WORD POINTER IX1 X1+X2 RJ WOD CONVERT ADDRESS TO OCTAL MX0 48 LX7 12 POSITION LAST 8 DIGITS BX7 X0*X7 SA7 WORK UNPACK WORK,B7 UNPACK MARG,B3 SB7 B3 B7 = POINTER TO NEXT CHAR MX7 0 SA7 WORK+2 INSURE END-OF-LINE SB5 4 B5 = END TEST WITHIN LINE * PRT240 SA1 B6+CIOBUFF BX6 X1 SA6 B5+THIS-1 SAVE CURRENT LINE CONTENTS RJ WOD CONVERT NEXT WORD TO OCTAL SA6 WORK SA7 WORK+1 UNPACK WORK,B7 UNPACK FIRST,B3 SB7 B3 B7 = POINTER TO NEXT CHARACTER SB6 B6+B1 ADVANCE WORD POINTER SB5 B5-B1 NZ B5,PRT240 UNPACK FIRST,B3 SB5 4 RE-SET END-TEST SB6 B6-4 RE-SET WORD POINTER * PRT250 SA1 B6+CIOBUFF RJ ZTB CHANGE ZERO CODES TO BLANKS SA6 WORK+1 UNPACK WORK+1,B3 SB6 B6+B1 ADVANCE WORD POINTER SB5 B5-B1 NZ B5,PRT250 SX6 B6 UPDATE WORD POINTER SA6 DJJ PACK CHARS,LINE * * * COMPARE LAST LINE PRINTED AND CURRENT LINE TO * SEE IF WE SHOULD START/CONTINUE SKIPPING LINES * SA1 LINES ZR X1,PRT260 ALWAYS PRINT FIRST LINE SB2 3 * PRT251 SA1 LAST+B2 SA2 THIS+B2 BX2 X1-X2 NZ X2,PRT260 IF NOT SAME AS LAST LINE SB2 B2-B1 PL B2,PRT251 SA1 SKIP NZ X1,PRT270 IF ALREADY SKIPPING LINES SX6 B1 FLAG LINES BEING SKIPPED SA6 A1 OUTPUT DUPMES EQ PRT270 * PRT260 OUTPUT LINE OUTPUT NEXT LINE SA1 LINES INCREMENT LINE COUNT SX6 B1 IX6 X1+X6 SA6 A1 SB2 3 MOVE THIS LINE TO LAST PRINTED * PRT261 SA1 THIS+B2 BX6 X1 SA6 LAST+B2 SB2 B2-B1 PL B2,PRT261 MX6 0 NOT SKIPPING LINES SA6 SKIP * PRT270 SA1 DII COMPUTE CURRENT DUMP ADDRESS LX1 9 SA2 DJJ IX6 X1+X2 SA2 DLWA CHECK IF END OF SPECIFIED AREA IX0 X2-X6 PL X0,PRT230 * * * END OF PRINT - CLOSE INPUT/OUTPUT FILES * PRT900 OUTPUT MARG UNPACK MARG,CHARS SA1 LINES RJ WOD SA7 WORK MX6 0 SA6 A7+B1 UNPACK WORK,B3 UNPACK LINMES,B3 PACK CHARS,LINE OUTPUT LINE WRITER OUTPUT,RECALL CLOSE OUTPUT,NR,RECALL CLOSE DFET,NR,RECALL MESSAGE ENDMES,1,RECALL ENDRUN * ENDMES DIS ,*PRINT COMPLETE* * TITLE OUTPUT ROUTINES * * * * -WRITE- WRITE TO OUTPUT FILE * ON ENTRY - B2 = ADDRESS OF LINE TO OUTPUT * WRITE EQ * SA1 B2 CHECK FOR EMPTY LINE ZR X1,WRITE SX5 B2 X5 = ADDRESS OF LINE WRITEC OUTPUT,X5 WRITE LINE TO OUTPUT FILE EQ WRITE * * * * -UNPACK- UNPACK CHARACTERS * ON ENTRY - B2 = ADDRESS TO UNPACK FROM * B3 = ADDRESS TO UNPACK TO * UNPACK EQ * MX0 -6 X0 = MASK FOR NEXT CHARACTER * UNP10 SA1 B2 LOAD NEXT PACKED TEXT WORD SB2 B2+B1 SB4 10 INITIALIZE CHARACTER COUNT * UNP20 SB4 B4-B1 CHECK CURRENT WORD EMPTY NG B4,UNP10 LX1 6 POSITION NEXT CHARACTER BX6 -X0*X1 SA6 B3 STORE NEXT CHARACTER ZR X6,UNP30 CHECK FOR END-OF-LINE SB3 B3+B1 ADVANCE OUTPUT POINTER EQ UNP20 * UNP30 SA6 A6+B1 STORE END-OF-LINE SA6 A6+B1 EQ UNPACK * * * * -PACK- PACK CHARACTERS * ON ENTRY - B2 = ADDRESS TO PACK FROM * B3 = ADDRESS TO PACK TO * PACK EQ * PCK10 SB4 60-6 INITIALIZE SHIFT COUNT MX6 0 INITIALIZE WORD BUILDING * PCK20 SA1 B2 LOAD NEXT CHARACTER ZR X1,PCK30 SB2 B2+B1 ADVANCE INPUT POINTER LX1 X1,B4 POSITION CHARACTER BX6 X1+X6 SB4 B4-6 DECREMENT SHIFT COUNT PL B4,PCK20 SA6 B3 STORE PACKED WORD SB3 B3+B1 ADVANCE OUTPUT POINTER EQ PCK10 * PCK30 SA6 B3 STORE LAST WORD MX6 0 SA6 A6+B1 INSURE END-OF-LINE EQ PACK * * TITLE COMMON DECKS LIST -X * *CALL COMCSYS *CALL COMCCIO *CALL COMCWTW *CALL COMCRDW *CALL COMCWTC *CALL COMCWOD *CALL COMCDXB *CALL COMCZTB * LIST * * * TITLE STORAGE DEFINITIONS * * * DFWA BSS 1 FWA OF DUMP AREA DLWA BSS 1 LWA OF DUMP AREA DII BSS 1 CURRENT BLOCK NUMBER DJJ BSS 1 WORD POINTER * WORK BSSZ 100B * HEADER1 DIS ,* DUMP OF * HEADER2 DIS ,* DUMPED ON * ECSMES DIS ,* DATA LOST DUE TO ECS ERROR* DUPMES DIS ,* DUPLICATED LINES* LINMES DIS ,*B LINES PRINTED* EJECT DATA 1L1 PAGE EJECT FIRST DATA 1L FIRST CHARACTER OF EACH LINE MARG DATA 2L MARGIN CHARS BSSZ 200 LINE BSSZ 20 THIS BSSZ 4 CONTENTS OF THIS LINE LAST BSSZ 4 CONTENTS OF LAST LINE PRINTED SKIP BSSZ 1 NON-ZERO IF SKIPPING LINES LINES BSSZ 1 LINES PRINTED * DFET RFILEB CIOBUFF,CIOLTH,FET=14 OUTPUT FILEB CIOBUF1,CIOLTH1,FET=14B * CIOBUFF BSS CIOLTH * CIOBUF1 BSS CIOLTH1 * * * ENTRY RFL= * RFL= END