. . PRINT PROCESS . . . DRIVEN FROM COMMAND OPTIONS: . . <NONE> FIELDATA CHARACTERS . 'A' ASCII CHARACTERS . 'I' INTEGER FORMAT . 'K' SIDE-BY-SIDE OCTAL, FD, ASCII . 'O' OCTAL FORMAT . 'N' NULL FORMAT: BLOCK HEADERS ONLY . 'T' TEXT FORMAT: ALPHANUMERIC WITHOUT WORD DIVISION . 'X' SHORT FORMAT: NO HEADER, NO ADDRESS . . . (C) Copyright 1972-1978 John Walker . . This software is in the public domain . AXR$ DEFUNCT$ FANG UPOSITY EQU R7 UPOSITY OF DUMP FORMAT CWFORMAT EQU R8 CURRENT FORMAT EDITING CODE ILS EQU R9 INTER-ITEM SPACING SBLOC EQU R10 ADDRESS OF SUPPRESSION BUFFER BCMPQ EQU R11 BLOCK COMPLETION QUEUE XFORMT EQU R12 'X' FORMAT FLAG PURE CODE . . LX X9,(<BLOCK COMPLETION QUEUE>,<COMPLETION QUEUE>) . LX,U X10,<FCT> . LMJ A2,PRINT . <RETURN> . . V'S <COMPLETION QUEUE> WHEN DUMP IS DONE . V'S <BLOCK COMPLETION QUEUE> AT END OF EACH BLOCK DUMPED . SKIPS V IF EITHER IS ZERO . PRINT* FORK DUMPPRI FIRE UP A DUMPING ACTIVITY J 0,A2 RETURN TO CALL . DUMPPRI quarterword TURN ON QUARTER WORD MODE R$DITA . ENTER ASCII EDITING MODE LA,U A9,,X9 SAVE COMPLETION QUEUE ADDRESS LA A0,X9 LOAD COMPLETION QUEUE ADDRESS SSL A0,18 SHIFT OFF PROCESS COMPLETION QUEUE LR,U BCMPQ,,A0 LOAD BLOCK COMPLETION QUEUE ADDRESS LR,U XFORMT CLEAR 'X' FORMAT MODE LR,U CWFORMAT,'A' ASSUMED FORMAT IS ALPHANUMERIC LR,U UPOSITY,16 WITH 16 PER LINE LR,U ILS,1 AND ONE SPACE BETWEEN ITEMS LA A0,CDOPTS,X8 LOAD OPTIONS TOP A0,(OPTION('A')) ASCII DUMP DESIRED ? J NOQO NO. CHECK 'O' OPTION FOR OCTAL LR,U CWFORMAT,'Q' SET 'Q' MODE FOR ASCII DUMP LR,U UPOSITY,16 PRINT 16 WORDS PER LINE LR,U ILS,1 ...AND ONE SPACE BETWEEN WORDS NOQO TOP,U A0,OPTION('O') IS 'O' OPTION ON FOR OCTAL ? J NOAO NO. CHECK OTHERS LR,U CWFORMAT,'O' LOAD OCTAL FORMAT LR,U UPOSITY,8 EIGHT PER LINE LR,U ILS,2 TWO SPACES BETWEEN WORDS noao top a0,(option('B')) dump in EBCDIC ? j nobo no. go check other options lr,u cwformat,'B' yes. get dump format letter lr,u uposity,16 dump 16 words per line lr,u ils,1 get inter-word spacing nobo top,u a0,option('N') list only blocks and lengths ? J NONO NO. LOOK AGAIN LA,U A1,'N' GET INDICATOR FOR FORMAT SA A1,CWFORMAT SET IT IN FORMAT NONO TOP,U A0,OPTION('I') 'I' OPTION SET ? J NOIO NO. SKIP SPECIAL SETUP LR,U CWFORMAT,'I' SET FOR INTEGER FORMAT LR,U ILS,2 TWO SPACES BETWEEN WORDS LR,U UPOSITY,8 EDIT 8 PER LINE NOIO TOP,U A0,OPTION('K') 'K' OPTION ON ? J NOKO NO. CHECK 'X' OPTION LR,U CWFORMAT,'K' SET SIDE-BY-SIDE FORMAT LR,U ILS,1 ONE SPACE BETWEEN WORDS LR,U UPOSITY,4 LOAD FOUR-UP FOR BATCH NOKO TEP,U A0,OPTION('X') 'X' OPTION SET ? LR,U XFORMT,1 SET 'X' FORMAT TEP,U A0,OPTION('T') TEXT MODE ? LR,U ILS YES. NO INTER-ITEM SPACING JNDEM DUMPX ENTER DUMP IF NOT DEMAND LA A0,UPOSITY LOAD UPOSITY SSL A0,1 DIVIDE BY TWO FOR NARROW DEMAND TERMINAL SA A0,UPOSITY STORE OUT UPDATED UPOSITY DUMPX LA A0,UPOSITY LOAD UPOSITY FOR DUMP BGET . ALLOCATE A BUFFER FOR SUPPRESSION LR,U SBLOC,,A0 SAVE SUPPRESSION BUFFER ADDRESS DUMPPR GET IOBB,X10 GET A BLOCK FROM THE BOUNDED BUFFER LX X7,IBIOP,A1 LOAD SOURCE FCT ADDRESS LX,U X9,,A1 COPY BLOCK ADDRESS TO X9 LX,U X8,IBDATA,X9 X8 = DATA POINTER LXI,U X8,1 SET UP INCREMENT TZ IBSTAT,X9 WAS STATUS NORMAL ? J DUMPAB NO. DUMP ABNORMAL STATUS ABNRET LA,U A10 CLEAR RELATIVE ADDRESS WITHIN BLOCK LA,U A12 CLEAR LINES SKIPPED FLAG LA A13,CWFORMAT LOAD DESIRED DUMP FORMAT . . EDIT BLOCK HEADER . TZ XFORMT 'X' (SUPER SHORT) FORMAT ? J DUMPED YES. DON'T EDIT ANY HEADER TZ IOWAD,X7 WORD-ADDRESSABLE FILE ? J DUMPED YES. WORD NUMBER WILL SUFFICE TZ IOMASS,X7 MASS STORAGE FILE ? J MSED YES. EDIT STARTING SECTOR OF BLOCK a$qmsg BLKNR EDIT BLOCK NUMBER HEADER LA A0,IBBLKN,X9 LOAD BLOCK NUMBER AA,U A0,1 INCREMENT IT SO BLOCKS START AT 1 A$DECV . EDIT BLOCK NUMBER a$msgr . COPY REST OF MESSAGE A$DECV IBLEN,X9 EDIT BLOCK LENGTH a$msgr . COPY REST OF MESSAGE TNZ IBAFC,X9 WAS THERE AN ABNORMAL FRAME COUNT ? J NOAFC NO. SKIP CHARACTERS COUNT EDITING a$qmsg AFCM EDIT TEXT FOR ABNORMAL FRAME COUNT LA A0,IBLEN,X9 LOAD NUMBER OF WORDS READ LA A1,IOFDT,X7 LOAD FDT FOR SOURCE FILE LA A1,FDPROP,A1 LOAD FILE EQUIPMENT PROPERTIES TOP,U A1,EP9TRK IS THIS A NINE-TRACK TAPE ? J AFC7TR NO. COMPUTE CHARACTERS FOR 7-TRACK AA,U A0,1 ROUND UP WORD COUNT TO EVEN SSL A0,1 COMPUTE NUMBER OF 9-BYTE GROUPS MSI,U A0,9 COMPUTE BYTES IN COMPLETE BLOCK ANA,U A0,9 SUBTRACT BYTES IN LAST GROUP J AFCADR ADD BYTES IN LAST GROUP FROM AFC . AFC7TR MSI,U A0,6 COMPUTE CHARACTERS IN BLOCK ANA,U A0,6 SUBTRACT CHARACTERS IN LAST WORD AFCADR AA A0,IBAFC,X9 ADD REMNANT CHARACTERS A$DECV . EDIT CHARACTER COUNT IN BLOCK a$msgr . COPY REST OF MESSAGE NOAFC TE,U A13,'N' 'N' FORMAT DUMP ? J NONN NO. NORMAL DUMP, WE WILL LIST BLOCK R$PRTA 1 PRINT HEADER, SINGLE SPACE J DUMPDN END OF JOB FOR THIS BLOCK . NONN R$PRTA 2 PRINT HEADER, DOUBLE SPACE . J DUMPED GO AND EDIT THE BLOCK . . BLOCK EDITOR WITH REPEAT SUPPRESSION . DUMPED . JZ A10,NOSUP DON'T TRY TO SUPPRESS THE FIRST TIME THR LX X5,SBLOC LOAD ADDRESS OF SUPPRESS BUFFER LXI,U X5,1 LOAD INCREMENT LX X6,X8 CURRENT DATA POINTER LR R1,UPOSITY LOAD UPOSITY FOR THIS DUMP J JGSU ENTER COMPARISON LOOP SUPCHK LA A0,,*X6 LOAD FROM DATA BUFFER TE A0,,*X5 COMPARE WITH LAST LINE J NOSUP NOT THE SAME, NO SUPPRESSION JGSU JGD R1,SUPCHK KEEP ON TRUCKIN' LA A0,A10 LOAD RELATIVE ADDRESS AA A0,UPOSITY COMPUTE NEXT ADDRESS TO EDIT TG A0,IBLEN,X9 WAS THE LAST LINE SUPPRESSED ? J NOSUP YES. DON'T ALLOW SUCH A TRAVESTY AA,U A12,1 MADE IT! SET LINE SUPPRESSED EDITING FL AA A10,UPOSITY BUMP RELATIVE ADDRESS AX X8,UPOSITY UPDATE BUFFER POINTER J LINEDN SKIP LINE EDITING . NOSUP LX X5,SBLOC LOAD SUPPRESS BUFFER ADDRESS LXI,U X5,1 LOAD INCREMENT FOR SUPPRESS BUFFER LX X6,X8 GET DATA BUFFER POINTER LR R1,UPOSITY GET NUMBER OF ENTRIES ON LINE BT X5,,*X6 MOVE THIS LINE TO COMPARISON BUFFER TZ XFORMT 'X' FORMAT ? J XFOAM YES. EDIT SHORT PREFIX TZ IOWAD,X7 WORD-ADDRESSABLE DRUM ? J WADMO YES. EDIT DRUM ADDRESS AT LEFT A$OCTF 6,A10 EDIT BLOCK RELATIVE ADDRESS WADMOR JZ A12,SKSTE SKIP IF SUPPRESSED A$FD3 ('** ') EDIT LINES SUPPRESSED FLAG LA,U A12 CLEAR SUPPRESSION FLAG J SKSTE1 JUMP AROUND BLANK EDITING SKSTE A$SKIP 4 SKIP BEFORE DATA EDITING SKSTE1 LR R5,UPOSITY LOAD LOOP COUNTER FOR LINE JE A13,'K',KFORML EDIT SIDE-BY-SIDE FOR 'K' FORMAT J JGED GO AND EDIT THE LINE . EDITQ TNE A10,IBLEN,X9 END OF BUFFER YET ? J JEPT YES. WIND UP AA,U A10,1 INCREMENT RELATIVE LOCATION TE,U A13,'O' OCTAL FORMAT ? JNZ A13,CHKFA OR SOME OTHER ? LA A0,,*X8 OCTAL. LOAD UP THE WORD A$OCTF 12 EDIT IT INTO THE LINE J QUANDN END OF QUANTITY EDITING . CHKFA TE,U A13,'A' IS IT ALPHABETIC ? j chkfb no. check further LMJ X11,FCTLPRO EDIT FIELDATA, PROTECTING FROM EOL J QUANDN ALL DONE HERE . chkfb te,u a13,'B' EBCDIC dump ? j chkfn no. check other options lmj x11,ebcwrd yes. edit the word as EBCDIC j quandn go check done and continue . CHKFN TE,U A13,'N' IS IT 'N' FORMAT ? J CHKFI CHECK FOR INTEGER FORMAT J DUMPDN YES. DONE WITH THIS BLOCK . CHKFI TE,U A13,'I' INTEGER FORMAT ? J CHKFQ NO. CHECK FOR 'Q' FORMAT: ASCII LA A0,,*X8 LOAD THE VALUE A$DECF 12 EDIT THE VALUE IN DECIMAL J QUANDN GET NEXT QUANTITY . CHKFQ TE,U A13,'Q' ASCII CHARACTER FORMAT ? IERR . OOPS ! FORGOT TO IMPLEMENT SOMETHING LMJ X11,CTLPRO PROTECT AGAINST CONTROL CHARACTERS J QUANDN GET NEXT QUANTITY . QUANDN A$SKIP ILS,,W SKIP BETWEEN WORDS JGED JGD R5,EDITQ LOOP FOR WHOLE LINE JEPT R$PRTA 1 PRINT THE LINE OF THE DUMP . LINEDN TLE A10,IBLEN,X9 ARE WE AT END OF DUMP ? J DUMPED NO. EDIT ANOTHER LINE DUMPDN LA A1,IBLAST,X9 LOAD 'THIS IS LAST BLOCK' BRELP X9 RELEASE THE BUFFER TNZ BCMPQ ANY BLOCK COMPLETION QUEUE ? J NOBCQ NO. SKIP NOTIFICATION LA A0,BCMPQ LOAD ADDRESS OF BLOCK COMPLETION QUEUE V . INDICATE BLOCK COMPLETION NOBCQ JZ A1,DUMPPR IF NOT LAST ONE, KEEP ON R$DITXA . RELEASE EDITING BUFFER AND LINE BRELP SBLOC RELEASE SUPPRESS COMPARE LINE LA A0,A9 LOAD ADDRESS OF COMPLETION QUEUE JZ A0,EXIV SKIP 'V' IF COMPLETION QUEUE ISN'T SPECI V . INDICATE COMPLETION EXIV EXIT . TERMINATE THIS PROCESS . . EDIT SIDE-BY-SIDE DUMP OF OCTAL, FIELDATA, ASCII FOR 'K' FORMAT . KFORML SA A10,A6 SAVE BUFFER OFFSET IN A6 SX X8,A7 SAVE WORD POINTER IN A7 LR R5,UPOSITY LOAD UPOSITY OF DUMP J KFOE ENTER OCTAL EDITING SEGMENT KFOS TNE A10,IBLEN,X9 END OF BLOCK ? J KFOX YES. SKIP THIS ITEM AA,U A10,1 NO. INCREMENT WORDS EDITED A$OCTF 12,,*X8 EDIT TWELVE OCTAL DIGITS KFOR A$SKIP ILS,,W SKIP BETWEEN WORDS KFOE JGD R5,KFOS LOOP FOR UPOSITY WORDS LA A10,A6 RESTORE BUFFER OFFSET LX X8,A7 RESTORE WORD POINTER A$SKIP 3 SKIP BEFORE FIELDATA LR R5,UPOSITY LOAD UPOSITY FOR DUMP J KFFE ENTER FIELDATA EDITING LOOP KFFS TNE A10,IBLEN,X9 END OF BUFFER ? J KFFX YES. PAD TO ASCII AREA AA,U A10,1 INCREMENT BUFFER OFFSET LMJ X11,FCTLPRO EDIT FIELDATA, PROTECTING FROM EOL KFFR A$SKIP ILS,,W SKIP BETWEEN WORDS KFFE JGD R5,KFFS LOOP FOR UPOSITY A$SKIP 3 SKIP BEFORE ASCII VERSION LA A10,A6 LOAD BUFFER OFFSET LX X8,A7 RELOAD BUFFER POINTER LR R5,UPOSITY LOAD UPOSITY OF DUMP J KAFE ENTER ASCII EDITING KAFS TNE A10,IBLEN,X9 END OF BUFFER ? J KAFX YES. ALL DONE AA,U A10,1 INCREMENT OFFSET LMJ X11,CTLPRO PROTECT AGAINST CONTROL CHARACTERS A$SKIP ILS,,W EDIT SPACE BETWEEN WORDS KAFE JGD R5,KAFS LOOP FOR ALL WORDS ON LINE KAFX J JEPT DONE. PRINT THE LINE . KFOX A$SKIP 12 TAB OVER MISSING NUMBER J KFOR KEEP ON GOING . KFFX A$SKIP 6 TAB OVER OMITTED FIELDATA NUMBER J KFFR CONTINUE TO EXHAUST UPOSITY . . ABNORMAL STATUS - TERMINATE DUMP WITH MESSAGE . DUMPAB . LA A0,IBSTAT,X9 LOAD THE ABNORMAL STATUS TNE,U A0,STERM SOFTWARE TERMINATION STATUS ? J DUMPDN YES. IGNORE THIS BLOCK TNE,U A0,1 END-OF-FILE ? J DUMPEOF YES. LIST EOF IF FROM TAPE TE,U A0,4 WAS IT ABNORMAL FRAME COUNT ? TNE,U A0,5 WAS IT INCOMPLETE BLOCK FROM MASS STORAG J ABNRET YES. DON'T WORRY ABOUT IT . READ MESSAGE IS SUFFICIENT (I BELIEVE) J DUMPDN END OF PROCESSING THIS BLOCK . DUMPEOF TZ IOMASS,X7 IS INPUT MASS STORAGE ? J DUMPDN YES. IGNORE AN EOF STATUS a$qmsg BLKNR USE THE NORMAL DUMP MESSAGE LA A0,IBBLKN,X9 LOAD THE BLOCK NUMBER AA,U A0,1 INCREMENT IT A$DECV . EDIT BLOCK NUMBER a$qms1 EOFENC APPEND EOF MESSAGE LA A1,CWFORMAT LOAD CURRENT DUMP FORMAT LA,U A0,2 LOAD ASSUMED SPACING TNE,U A1,'N' IS IT 'N' OPTION DUMP ? LA,U A0,1 YES. SINGLE SPACE THEM R$PRTA . PRINT THE LINE J DUMPDN PROCESS THE NEXT BLOCK . WADMO LA A0,IBMSAD,X9 LOAD MASS STORAGE ADDRESS OF THIS BLOCK AA A0,A10 ADD RELATIVE ADDRESS WITHIN BLOCK A$OCTF 9 EDIT THE ADDRESS J WADMOR RETURN TO DUMP EDITING . XFOAM JZ A12,SKX1 SKIP SUPPRESSION EDITING IF NONE SKIPPED A$FCHR '*' EDIT SUPPRESSED FLAG LA,U A12 CLEAR LINES SKIPPED INDICATOR J SKSTE1 PROCEED WITH DUMP SKX1 A$FCHR ' ' EDIT A SPACE J SKSTE1 CONTINUE . MSED a$qmsg SCTM EDIT 'SECTOR' LA A4,IBLEN,X9 LOAD LENGTH OF BLOCK READ TLE,U A4,29 MORE THAN ONE SECTOR ? J NOMULTS NO. LEAVE IT AT 'SECTOR' a$msgr . OTHERWISE INSURE GOOD GRAMMAR NOMULTS A$SKIP 1 SKIP BEFORE NUMBER A$DECV IBMSAD,X9 EDIT ADDRESS IT CAME FROM TLE,U A4,29 MULTI-SECTOR BLOCK ? J NOAFC NO. ALL DONE ANA,U A4,1 DECREMENT LENGTH READ DSA A4,36 RIGHT JUSTIFY DI,U A4,28 COMPUTE LENGTH READ IN SECTORS A$FD3 (' - ') EDIT DELIMITER AA A4,IBMSAD,X9 COMPUTE UPPER SECTOR NUMBER A$DECV A4 EDIT HIGH SECTOR OF BLOCK LA A4,IBLEN,X9 LOAD LENGTH OF BLOCK READ TE,U A4,1792 DID WE READ EXACTLY ONE TRACK ? J NOAFC NO. DON'T EDIT TRACK NUMBER LA A4,IBMSAD,X9 LOAD STARTING ADDRESS OF BLOCK DSL A4,6 SHIFT OFF SECTOR OFFSET SSL A5,36-6 RIGHT JUSTIFY SECTOR WITHIN TRACK JNZ A5,NOAFC DON'T EDIT IF NOT EVEN TRACK a$qmsg TRKM EDIT TRACK NUMBER A$DECV A4 EDIT TRACK NUMBER a$msgr . COPY REST OF TRACK MESSAGE J NOAFC PRINT THE DUMP HEADER . . THIS CODE PREVENTS THE DUMP LISTING FROM BEING DESTROYED BY . THE PRINTING OF ASCII CONTROL CHARACTERS. ALL CONTROL CHARACTERS . WILL BE PRINTED AS QUESTION MARKS. . CTLPRO SX X11,A5 SAVE RETURN ADDRESS TO CALLER LA A4,,*X8 LOAD WORD OF ASCII TO BE EDITED LR,U R4,3 LOAD LOOP COUNT FOR FOUR CHARACTERS ASPR1 LDSL A3,9 SHIFT OFF NEXT QUARTER WORD LSSL A3,36-7 ISOLATE PARITY-LESS ASCII CHARACTER SSL A3,36-7 RIGHT-JUSTIFY IT IN THE WORD TNE,U A3,0177 IS THE CHARACTER A 'DEL' ? J ASPR2 YES. PROTECT TERMINAL AGAINST IT ON EOLA>037 PROTECT AGANIST NON-CONTROL EOL TE,U A3,EOLA IS IT ASCII END-OF-LINE CHARACTER ? OFF EOLA>037 PROTECT AGAINST NON-CONTROL EOL TLE,U A3,040 IS THIS A CONTROL CHARACTER ? ASPR2 LA,U A3,077 YES. CHANGE IT TO A QUESTION MARK A$QCHR A3,,W EDIT THE ASCII CHARACTER JGD R4,ASPR1 LOOP FOR ALL CHARACTERS IN WORD LX X11,A5 RESTORE RETURN POINT J 0,X11 RETURN TO CALLER . . THIS SUBROUTINE EDITS THE NEXT FIELDATA WORD. IF THE . PARAMETER 'EOL' IS SET, ALL OCCURENCES OF THE 'EOL' . CHARACTER ARE CHANGED TO QUESTION MARKS (?). . FCTLPRO SX X11,A5 SAVE THE RETURN POINT LA A4,,*X8 LOAD THE NEXT WORD LR,U R4,5 LOAD LOOP COUNT FOR EDITING FSPR1 LA,U A3 CLEAR NEXT CHARACTER LDSL A3,6 SHIFT OFF NEXT FIELDATA CHARACTER ON EOL>-1 BEGIN FIELDATA END OF LINE CODE TNE,U A3,EOL IS THIS LINE TERMINATOR ? LA,U A3,'?' YES. DISPLAY AS QUESTION MARK OFF EOL>-1 END FIELDATA END OF LINE CODE A$FCHR A3,,W EDIT THE FIELDATA CHARACTER JGD R4,FSPR1 LOOP FOR ALL 6 CHARACTERS LX X11,A5 LOAD THE RETURN ADDRESS J 0,X11 RETURN TO CALLER . . . EBCDIC edit routine. . . This routine loads the next word, translates it from EBCDIC . to ASCII, and edits it into the print line. Control characters . and EBCDIC characters with no corresponding ASCII graphic are . rendered as question marks. . ebcwrd la a5,x11 save return address la a3,,*x8 load next data word and a3,(0377377377377) discard parity bits lr,u r4,3 load loop count for four characters ebclup la,u a3 clear register for character ldsl a3,9 shift next character into A3 ana,u a3,0100 is this a control character ? jn a3,ebctl yes. edit as a question mark dsc a2,2 separate byte and word numbers ssl a2,36-2 right justify byte index in A2 ex ebcget,a2 load ASCII character for EBCDIC j ebcput go edit into output line . ebctl la,u a0,077 load ASCII question mark ? ebcput a$qchr a0,,w edit character into output line jgd r4,ebclup loop until all edited lx x11,a5 restore return address j 0,x11 return to caller . ebcget la,q1 a0,ebctbl,a3 execute table to translate EBCDIC la,q2 a0,ebctbl,a3 la,q3 a0,ebctbl,a3 la,q4 a0,ebctbl,a3 PURE DATA ASCII BLKNR 'Block # & Length: & words&' SCTM 'Sector&s&' TRKM ' (Track &)&' AFCM ' (& characters)&' EOFENC ' - End of File mark&' . . EBCDIC to ASCII translate table (starts at 0100) . . This table uses UP-8582.1 as its reference . ebctbl ' ???' '????' '??].' '<(+!' '&???' '????' '??]$' '*);^' '-/??' '????' '??|,' '%_>?' '????' '????' '?\:#' '@''="' '?abc' 'defg' 'hi??' '????' '?jkl' 'mnop' 'qr??' '????' '?~st' 'uvwx' 'yz??' '????' '????' '????' '????' '????' '{ABC' 'DEFG' 'HI??' '????' '}JKL' 'MNOP' 'QR??' '????' '\?st' 'UVWX' 'YZ??' '????' '0123' '4567' '89??' '????' END