.
.         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