TITLE 'TELEFILE ASSEMBLY PROGRAM - APROOT'
         PCC      0
         SPACE    6
*   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*   %%%%%     MODULE NAME:     APROOT                  %%%%%
*   %%%%%     LAST UPDATED:    MAR 07, 1984            %%%%%
*   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
         SPACE    2
         SPACE    12
*        T E L E F I L E    P R O P R I E T A R Y    P R O D U C T
         SPACE    2
*        THIS DOCUMENT INCLUDES DATA AND INFORMATION WHICH IS CONSIDERED
*        PROPRIETARY TO TELEFILE COMPUTER PRODUCTS, INC. REPRODUCTION,
*        DUPLICATION, DISCLOSURE OR DISSEMINATION, IN WHOLE OR IN PART,
*        TO OTHERS THAN REPRESENTATIVES OF THE UNITED STATES GOVERNMENT
*        SHALL NOT BE MADE WITHOUT PRIOR WRITTEN AUTHORIZATION OF TELEFILE
*        COMPUTER PRODUCTS, INC. NOTWITHSTANDING THE FOREGOING, USE OF
*        THE DATA OR INFORMATION IN WHOLE OR IN PART FOR DESIGN,
*        PROCUREMENT OR MANUFACTURE IS STRICTLY FORBIDDEN.
         PAGE
         SPACE    12
*        T E L E F I L E    P R O P R I E T A R Y    P R O D U C T
         SPACE    2
*        THIS DOCUMENT INCLUDES DATA AND INFORMATION WHICH IS CONSIDERED
*        PROPRIETARY TO TELEFILE COMPUTER PRODUCTS, INC. REPRODUCTION,
*        DUPLICATION, DISCLOSURE OR DISSEMINATION, IN WHOLE OR IN PART,
*        TO OTHERS THAN REPRESENTATIVES OF THE UNITED STATES GOVERNMENT
*        SHALL NOT BE MADE WITHOUT PRIOR WRITTEN AUTHORIZATION OF TELEFILE
*        COMPUTER PRODUCTS, INC. NOTWITHSTANDING THE FOREGOING, USE OF
*        THE DATA OR INFORMATION IN WHOLE OR IN PART FOR DESIGN,
*        PROCUREMENT OR MANUFACTURE IS STRICTLY FORBIDDEN.
         PAGE
BPMUTS   EQU      2
RBM      EQU      3
SYS      EQU      BPMUTS
XAPDATA  DSECT    0                 OVERLAY DATA AREA
*  FOR RBM, THE LARGEST DSECT MUST BE IN THE ROOT
         DO1      SYS=RBM
         RES      X'D0'             LARGEST AREA IS IN DG OR CD
XAPD1    DSECT    0
         DO1      SYS=RBM
         RES      X'60'             USED ONLY BY CD & DG
CCI4     CSECT    0                 PERMANENT DATA
XAPCODE  CSECT    1                 CODE SECTION
         DO       SYS=BPMUTS
         SYSTEM   BPM
         FIN
         DO       SYS=RBM
         SYSTEM   RBM
         FIN
*
         SYSTEM   AP%IL
*
         DEF      XAPCODE
         DEF      VAL%S:IVAL
         DEF      SYSLEVEL
         DEF      DEDIT
         DEF      LSTBF,TITLEBUF
         DEF      PGLINES,PGNUM
         DEF      PAGENUM
         DEF      RD%STD
         DEF      SDFCON,SDFSYS
         DEF      LOWCORE
         DEF      ENDCORE
         DEF      MAJLINE,SUBLINE   ASSEMBLY LINE NUMBER
         DEF      SEGMENT#          AP OVERLAY SEGMENT
*
         DO       SYS=BPMUTS
         DEF      INIT%TUNITS       CHARGEABLE TIME @ START OF ASSEM.
         DEF      PAGETBL
         DEF      REPORT%STATUS     ON-LINE BREAK RECEIVER
         DEF      SO%ADJ%FPT
         DEF      SO%ADJ%NAME
         DEF      SO%KEY            FLAG/KEY FOR 'SO' TO FILE
         FIN
*
         DEF      ACCOUNTS,#ACCTS
         DEF      TRAPLOC
         DEF      NEXTST,NXSYMB
         DEF      X1BUF,X3BUF
         DEF      ASSEMBLE%FLAG
         DEF      NUM%PAGE%LINES
         DEF      SDFSYS%SIZE
         DEF      OPTION%FLAGS
         DEF      AC%FLAG
         DEF      PD%FLAG
         DEF      ABN%%STD
         DEF      ABN%%X2
         DEF      ABN%%X4
         DEF      ABORT,MPX1,CLRLSTBF,SYSNAME
         DEF      BO%SIZE           BYTE SIZE OF BO RECORD
         DEF      CO%SIZE           BYTE SIZE OF CO RECORD
         DEF      CORRESWD          FLAGS INDIC. IDEN. DCB ASSIGNMENTS
         DEF      READX1,WRITEX1,REWX1,POSITIONX1
         DEF      READX3,WRITEX3,REWX3,POSITIONX3
         DEF      BYX1SIZE,HWX1SIZE,WDX1SIZE
         DEF      BYX3SIZE,HWX3SIZE,WDX3SIZE
         DEF      OPENX5,CLOSEX5
         DEF      READX5,WRITEX5
         DEF      WRITEBO
         DEF      WRITEDO
         DEF      WRITEGO
         DEF      WRITELO
         DEF      READSTD,WRITESTD,REWSTD
         DEF      POSITIONSTD
         DEF      ERR%%C
         DEF      ERR%%BO,ERR%%CI,ERR%%CO,ERR%%DO
         DEF      ERR%%GO,ERR%%LO,ERR%%SI,ERR%%SO
         DEF      ERR%%X2,ERR%%X4
         DEF      ERR%%STD                                            *D-ROOT
         DEF      EODCNT,EODCNTCI
         DEF      BLANC
         DEF      NIVO
         DEF      ERR%%X1,ERR%%X3
         DEF      ABN%%X1,ABN%%X3
         DEF      ADRDCB
         DEF      CI%DCB
         DEF      1ERLECTURE%LI
          DEF       IM@NAME
          DEF       SAVAREA,LINE%TYPE
         DEF      FINMAJ,CLOSE%FILES
         DEF      ROOTEXIT
         DEF      DGWRITELO
         DEF      ROOTRTN
         DEF      UPDT%ERROR
         DEF      BO%IDWDS,CO%IDWDS,CARDSEQ
         DO       SYS=BPMUTS
         DEF      DO%ONLINE,LO%ONLINE
         SREF     J:JIT,JOPT
         SREF     TPEXT
         SREF     TPOVT
         SREF     TUEXT
         SREF     TUOVT
         FIN
         REF      M:SI,M:CI,M:CO
         REF      M:BO
         REF      M:GO
         REF      M:LL                                         /27953/*D-ROOT
         REF      M:LO
         REF      M:DO,M:SO
         REF      SYSABN            ABNORMAL RETURN ON F:SYS OPEN
         REF      BOBUF
         DO       SYS=RBM
         DEF      F:SYS,F:STD
         REF      M:X1
F:X1     EQU      M:X1
         REF      M:X3
F:X3     EQU      M:X3
         REF      M:X5
F:X5     EQU      M:X5
         FIN
         REF      CTL%CARD%INTERPRETER
         REF      IM@INIT
         REF      CONCORD
         REF      DEFGEN
         REF      DGEND
         REF      NCDR
         REF      STDERROR
         REF      SYSOPNER
         REF      AP%ABORT
         REF      DGINIT,ENDDEF,ENDGEN
*
OPTION   CNAME
         PROC
         DEF      LF
LF       DATA     0
         PEND
*
*  EQUATES FOR ABORT
AR       EQU      0                 ABORT REGISTER
ABORT5   EQU      5
ABORT6   EQU      6
ABORT7   EQU      7
ABORT8   EQU      8
*
*   CP-R SYSTEM PARAMETERS
*
D1       EQU      6                 TYPE CODE FOR 'D1' AREA ON DISK
         PAGE
         USECT    CCI4
OPTION%FLAGS  RES  0
BA%FLAG  OPTION   'BA'
BO%FLAG  OPTION   'BO'
CI%FLAG  OPTION   'CI'
CO%FLAG  OPTION   'CO'
DC%FLAG  OPTION   'DC'
GO%FLAG  OPTION   'GO'
LO%FLAG  OPTION   'LO'
LS%FLAG  OPTION   'LS'
LU%FLAG  OPTION   'LU'
ND%FLAG  OPTION   'ND'
NS%FLAG  OPTION   'NS'
SD%FLAG  OPTION   'SD'              SYMBOLIC DEBUGGING OUTPUT
SI%FLAG  OPTION   'SI'
SO%FLAG  OPTION   'SO'
SU%FLAG  OPTION   'SU'
PD%FLAG  DATA     0
AC%FLAG  DATA     0
*
CORRESWD DATA     0                 (LO=DO)  (LO=C)  (SI=C)  (----)
BYX1SIZE EQU      2048                     # BYTES IN X1BUF    /27493*D-ROOT/
BYX3SIZE EQU      1024+1024*(SYS=BPMUTS)   # BYTES IN X3BUF
HWX1SIZE EQU      BYX1SIZE/2        # OF HALFWORDS IN X1BUF
HWX3SIZE EQU      BYX3SIZE/2        # OF HALFWORDS IN X3BUF
WDX1SIZE EQU      BYX1SIZE/4        # WORDS IN X1BUF
WDX3SIZE EQU      BYX3SIZE/4        # WORDS IN X3BUF
SDFSYS%SIZE  EQU  20*4              SIZE OF SYSTEM FILE NAME TABLE
VAL%S:IVAL  RES   1                 S:IVAL FOR SYSTEM SIG7'S
LOWCORE  RES      1                 CONTAINS LOWEST DYNAMIC TABLE LOC
ENDCORE  RES      1                 LAST DYNAMIC STORAGE ADDRESS +1
MPX1     RES      1
EODCNT   RES      1                 COUNT OF # OF EOD'S ENCOUNTERED
EODCNTCI RES      1                 # OF EOD'S ENCOUNTERED IN CI
USERPSW1 RES      1
NEXTST   RES      1                 INDEX TO NEXT AVAIL SYM TAB LOC
NXSYMB   RES      1                 NEXT SYMBOL SEQUENCE NUMBER
MAJLINE  DATA     0                 MAJOR PART OF A LINE NUMBER       *D-ROOT
SUBLINE  DATA     0                 INSERT PART OF A LINE NUMBER      *D-ROOT
SEGMENT# DATA     0                 AP SEGMENT # IN CORE       /27453/*D-ROOT
*
         DO       SYS=BPMUTS
INIT%TUNITS  RES  1                 TIMER UNITS @ START OF ASSEM.
PAGETBL  RES      4                 BITS CORRESPOND TO CORE PAGES IN USE
SO%ADJ%FPT        ;                 ADJUST-DCB FPT SETS M:SO KEYED
         GEN,8,24 X'14',M:SO
         GEN      X'E000'           VARPS PRESENT
         GEN      X'06080000'       P6 P7 P13                         *D-ROOT
         GEN      2                 ORG = KEYED
         GEN      2                 ACC = DIRECT
         GEN      3                 KEYM
SO%ADJ%NAME       ;
         DATA     X'01010008'
         RES      8
SO%KEY   RES      1                 FLAG/KEY FOR 'SO' TO FILE
X5%TKEY  RES      1                 TEMP FOR X5 KEY BUILD
         FIN
*
         BOUND    8
ACCOUNTS DATA,8   ':SYS    '
         RES      2
         DO1      SYS~=RBM
         RES,8    8
         BOUND    8
LSTBF    RES      34
TITLEBUF RES      0
         TEXT     '1* AP * '
         DO1      22
         DATA     '    '
         TEXT     '  PAGE  '
PGNUM    TEXT     '    '
PGLINES  RES      1
PAGENUM  DATA     0                 PAGE NUMBER IN BINARY
RD%STD   RES      1                 0=DON'T READ F:STD FILE
NUM%PAGE%LINES  RES  1              NUMBER OF LINES PER PRINT PAGE - 3
SDFCON   RES      21                SYSTEM NAME CONTROL INFO
SDFSYS   EQU      SDFCON+1          SYSTEM NAME TABLE
IM@NAME  RES      1                 COUNT & BYTE ADDR OF SYSTEM NAME
NIVO     RES      1                 DEPTH OF SYSTEM NESTING
SYSLEVEL EQU      NIVO
ADRDCB   RES      1                 ADDRESS OF SI DCB
ASSEMBLE%FLAG  RES  1               NON-ZERO WHEN DEFGEN IS REQUIRED
LINE%TYPE   RES   1                 1=SI, 2=CI, 3=BOTH
#ACCTS   RES      1
X1BUF    RES      WDX1SIZE          ENCODED TEXT BUFFER
X3BUF    RES      WDX3SIZE          COMPRESSED SOURCE BUFFER
CI%DCB   DATA     M:CI
1ERLECTURE%LI  RES  1
BO%IDWDS RES      4                 3 WDS FOR BOBUF ID, 1 FOR BO SEQNO.
BOSEQNO  EQU      BO%IDWDS+3        SEQ. NO. FOR COLS 73-80
BO%SIZE  RES      1                 BYTE SIZE OF BO RECORD
CO%IDWDS RES      4                 3 WDS OF COBUF ID, 1 FOR CO SEQNO.
CO%SIZE  RES      1                 BYTE SIZE OF CO RECORD
SAVAREA  RES      15                REGISTER SAVE AREA
FINMAJ   RES      1                 0=UPDATES NOT DONE ;1=DONE
UPDT%ERROR  RES   1                 NO. OF '+' CARD ERRORS
         DO       SYS=BPMUTS
DO%ONLINE  RES    1                 NON-ZERO WHEN DO IS ON-LINE
LO%ONLINE  RES    1                 NON-ZERO WHEN LO IS ON-LINE
         FIN
*
* UTS JIT OPTION BITS. MASKS FOR BITS WITHIN JOPT WORD
LOBIT    EQU      1
GOBIT    EQU      X'80'
DOBIT    EQU      X'100'
*
XT       EQU      4
XT1      EQU      XT+1
XT2      EQU      XT+2
RL       EQU      7
IOADD    EQU      8
IOSIZE   EQU      9
IORL     EQU      10
R10      EQU      10
R15      EQU      15
X1       EQU      1
X2       EQU      2
X3       EQU      3
X4       EQU      4
X5       EQU      5
X6       EQU      6
X7       EQU      7
R8       EQU      8
SR1      EQU      8
R9       EQU      9
         PAGE
         USECT    XAPCODE
START    RES      0
         M:SEGLD  XAPCCI
         BAL,R15  CTL%CARD%INTERPRETER
NEXT%PROGRAM  RES  0
         DO       SYS=BPMUTS
         LI,X1    0
         LI,X7    4
         STW,X1   PAGETBL-1,X7
         BDR,X7   %-1
         FIN
         M:SEGLD  XAPINIT
         BAL,R10  IM@INIT
         M:SEGLD  XAPNCDR
         BAL,R10  NCDR
         LW,X1    ASSEMBLE%FLAG     IS DEFGEN PASS REQUIRED
         BEZ      TRYCONC
*
         DO       SYS=RBM
         M:SEGLD  XAPDGCOM          COMMON ASSEMBLY-PHASE ROUTINES
         FIN
*
         M:SEGLD  XAPDG
         DO       SYS=RBM
         M:SEGLD  XAPDGINT
         BAL,R10  DGINIT            INITIALIZE FOR DEF PASS
         M:SEGLD  XAPPART
         BAL,R10  DEFGEN            EXECUTE DEF PASS
         M:SEGLD  XAPDGINT
         BAL,R10  ENDDEF            EXECUTE DEF-END PROCESSOR
         M:SEGLD  XAPPART
         BAL,R10  DEFGEN            EXECUTE GEN PASS
         M:SEGLD  XAPDGINT
         BAL,R10  ENDGEN            EXECUTE GEN-END PROCESSOR
         ELSE
         BAL,R10  DGINIT            INITIALIZE FOR DEF PASS
         BAL,R10  DEFGEN            EXECUTE DEF PASS
         BAL,R10  ENDDEF            EXECUTE DEF-END PROCESSOR
         BAL,R10  DEFGEN            EXECUTE GEN PASS
         BAL,R10  ENDGEN            EXECUTE GEN-END PROCESSOR
         FIN
         M:SEGLD  XAPENDP
         BAL,R10  DGEND             CALL GEN 'END' PROCESSOR
TRYCONC  RES      0
         LW,RL    DC%FLAG
         BEZ      TEST%BA%FLAG
         M:SEGLD  XAPCONC
         BAL,R10  CONCORD
TEST%BA%FLAG  RES  0
         DO       SYS=RBM
         LI,X3    M:CO              WRITE EOF ON CO IF OPEN
         BAL,RL   WEOF
         LI,X3    M:LO              WRITE EOF ON LO IF OPEN
         BAL,RL   WEOF
         LI,X3    M:DO              WRITE EOF ON DO IF OPEN
         BAL,RL   WEOF
         LI,X3    M:SO
         BAL,RL   WEOF              WRITE EOF ON SO IF OPEN
         FIN
         LW,RL    BA%FLAG
         BEZ      ROOTEXIT
*  RELEASE ALL PAGES USED AT THE END OF THE ASSEMBLY
         DO       SYS=BPMUTS
         LW,X1    LOWCORE
         LI,RL    0
FPG1     RES      0
         LW,X6    X1
         LW,X7    PAGETBL,RL
FPG2     RES      0
         BGZ      FPG3
         M:FVP    *X6
FPG3     RES      0
         AI,X6    512
         AW,X7    X7                SHIFT LEFT 1 AND SET COMPARITOR
         BNEZ     FPG2
         AI,RL    1
         AI,X1    512*32
         CW,X1    ENDCORE
         BL       FPG1
         FIN
         B        NEXT%PROGRAM
ROOTEXIT RES      0
         DO       SYS=RBM
         LI,X3    M:CO
         BAL,RL   IOTERM            WEOF, BACKSPACE 2, FORWARD 1
         LI,X3    M:GO
         BAL,RL   WEOF
         BAL,RL   IOTERM            WEOF, BACKSPACE 2, FORWARD 1
         LI,X3    M:LO
         BAL,RL   IOTERM            WEOF, BACKSPACE 2, FORWARD 1
         LI,X3    M:DO
         BAL,RL   IOTERM            WEOF, BACKSPACE 2, FORWARD 1
         LI,X3    M:SO
         BAL,RL   IOTERM            WEOF, BACKSPACE 2, FORWARD 1
         FIN
         LI,IORL  16                NORMAL CLOSE
         BAL,RL   CLOSE%FILES
         M:EXIT
ABORT    RES      0
         M:SEGLD  XAPCCI
         B        AP%ABORT
ERR%%BO  RES      0
ERR%%C   RES      0
ERR%%CI  RES      0
ERR%%CO  RES      0
ERR%%DO  RES      0
ERR%%GO  RES      0
ERR%%LO  RES      0
ABN%%SI  RES      0
ERR%%SI  RES      0
ERR%%SO  RES      0
ERR%%X1  RES      0
ABN%%X1  RES      0
ERR%%X2  RES      0
ABN%%X2  RES      0
ERR%%X3  RES      0
ABN%%X3  RES      0
ERR%%X2KF  RES    0
ABN%%X2KF  RES    0
ABN%%X4  RES      0
ERR%%X4  RES      0
ERR%%X5  RES      0
ABN%%X5  RES      0
ERR%%STD RES      0
ABN%%STD RES      0
         ABORT    ABORT5            ERROR OR ABN ON AN I/O FILE
         DO       SYS=RBM
XAPCCI   EQU      1
XAPINIT  EQU      2
XAPNCDR  EQU      3
XAPDGCOM EQU      4                 ASM COMMON
XAPDG    EQU      41                ASSEMBLER
XAPDGINT EQU      411               ASM INITIALIZATION
XAPPART  EQU      412               ASM PARTICULARIZATION
XAPENDP  EQU      42                ASM END/SUMMARY
XAPCONC  EQU      5                 CONCORDANCE
*
         ELSE
XAPCCI   TEXTC    'BO:APCCI'
XAPINIT  TEXTC    'BO:APINIT'
XAPNCDR  TEXTC    'BO:APNCD'
XAPDG    TEXTC    'BO:APDG'
XAPENDP  TEXTC    'BO:APEND'
XAPCONC  TEXTC    'BO:APCNC'
         FIN
         DO       SYS=RBM
*
*  W E O F
*  WRITE AN END-OF-FILE MARK IF THE (INPUT) FILE IS OPEN
*      INPUT:  THE LOCATION OF THE DCB IS IN REGISTER X3
*
WEOF     RES      0
         LW,X4    0,X3              FIRST WORD OF THE DCB
         CW,X4    =FCDBIT           IS THE DCB OPEN
         BAZ      *RL               EXIT IF IT'S CLOSED
         M:WEOF   *X3
         EXIT     RL
*
*  I O T E R M
*   TERMINATE A FILE ON A GIVEN DCB (INPUT)
*      INPUT:  THE LOCATION OF THE DCB IS IN REGISTER X3
*
IOTERM   RES      0
         LW,X4    0,X3              FIRST WORD OF THE DCB
         CW,X4    =FCDBIT           IS THE DCB OPEN
         BAZ      *RL               EXIT IF IT'S CLOSED
         M:WEOF   *X3
         M:PFIL   *X3,(SKIP),(REV)
         M:PFIL   *X3,(SKIP),(REV)
         M:PFIL   *X3,(SKIP),(FWD)
         EXIT     RL
         FIN
         PAGE
*
*  D E D I T
*        CONVERT A POSITIVE INTEGER TO EBCDIC DIGITS AND STORE IT
*          IN THE LISTING LINE IMAGE.
*
*          INPUT: NUMBER TO CONVERT IS IN REGISTER 5
*                 INDEX TO RIGHT-HAND DIGIT OF LSTBF IS IN
*                 REGISTER 6.
*
*         OUTPUT: REGISTER 5 CONTAINS ZERO.
*                 REGISTER 6 IS DECREASED BY THE NUMBER OF DIGITS STORED.
*
*        NO DIGITS ARE STORED IF THE INPUT NUMBER IS ZERO.
*
DEDIT    RES      0
         AI,X5    0                 EXIT IF ENTIRE NUMBER
         EXIT,EQ  RL                  IS CONVERTED
         LI,X4    0
         DW,X4    =10               REMAINDER IS NEXT DIGIT
         AI,X4    X'F0'
         STB,X4   LSTBF,X6
         BDR,X6   DEDIT             DECREASE LSTBF INDEX AND RETURN
         EXIT     RL
         PAGE
         DO       SYS=RBM
TRAPLOC  RES      0
         ABORT    ABORT6            ASSEMBLER ERROR
         FIN
         DO       SYS=BPMUTS
TRAPLOC  RES      0
         STW,X1   MPX1              SAVE POINTER TO PSD-REG BLOCK
         STCF     X1                SAVE CC TO TELL WHAT KIND OF TRAP
         MTW,2   MPX1               POINT TO SAVED R0
         LW,X7    0,X1              GET TRAPPED PSW1
         STW,X7   USERPSW1          SAVE IT
         LW,X7    18,X1
         CI,X7    X'40'             COULD IT BE MEMORY VIOLATION
         BNE      BADTRAP             BRANCH IF NO
         LC       X1                WAS TRAP FOR MEMORY PROTECTION
         BCS,14   BADTRAP             BRANCH IF NO
*
*  THIS ROUTINE GETS PAGES FROM UTS ON DEMAND AFTER AN INSTRUCTION
*    HAS TRAPPED BECAUSE OF A MEMORY PROTECTION VIOLATION.  IT IS NOT
*    A GENERAL ROUTINE, AND CAN BE FOOLED BY SPECIAL CASES SUCH AS
*    PSM, TBS, MBS, AND MULTI-LEVEL EXU, BUT XAP DOESN'T HAVE ANY
*    INSTRUCTIONS LIKE THAT.
*
         LB,X7    *USERPSW1         IS TRAPPED INSTR AN
         CI,X7    X'67'             EXECUTE-REMOTE
         BNE      NOTEXU            BRANCH IF NO
         LCI      0                 RESTORE USER'S REGS SO WE CAN
         LM,0     2,X1              GET ADDRESS OF REMOTE INSTRUCTION
         ANLZ,X7  *USERPSW1         & STORE IT AS ADDRESS OF
         STW,X7   USERPSW1          INSTRUCTION TO BE ANALYZED NEXT
NOTEXU   RES      0
         LCI      0                 RESTORE REGISTERS
         LM,0     *MPX1             OF TRAPPED PROGRAM
         ANLZ,X7  *USERPSW1         ANALYZE TRAPPED INSTRUCTION
         STCF     X6                IF NECESSARY
         SLS,X6   -30               CONVERT EA OF TRAPPED
         SLS,X7   -2,X6             INSTRUCTION TO WORD RESOLUTION
         AND,X7   =X'1FE00'         BOUND BACK TO PAGE
         M:GVP    *X7               ASK SYSTEM FOR PAGE
         BCS,8    CANTHAVE          BRANCH IF REFUSED
         SW,X7    LOWCORE           X7 NOW HAS AN OFFSET ADDRESS
         SLS,X7   -9                SHIFT TO AN OFFSET PAGE NUMBER
         LW,X1    X7                                                  *D-ROOT
         AND,X1   L(X'1F')          GET PAGE COUNT MOD 32             *D-ROOT
         LCW,X1   X1                SAVE AS RIGHT SHIFT COUNT         *D-ROOT
         SLS,X7   -5                SHIFT TO GENERATE A WORD OFFSET
         LW,X6    =X'80000000'      SHIFT INDICATOR BIT
         SLS,X6   0,X1                TO APPROPRIATE POSITION
         AWM,X6   PAGETBL,X7          AND SET THAT PAGE BIT ON
         M:TRTN                     RETURN TO TRAPPED PROGRAM FOR RETRY
CANTHAVE RES      0
         ABORT    ABORT7            MAX MEMORY PAGES
BADTRAP  RES      0
         ABORT    ABORT8            BAD INSTRUCTION TRAP
         FIN
         PAGE
*
*  C L O S E % F I L E S
*        INPUT FILES ARE NOT SAVED.  OUTPUT FILES ARE SAVED(*)./27453/*D-ROOT
*        TEMP FILES ARE ALSO CLOSED WITH SAVE TO AID PATCHING, /27453/*D-ROOT
*        BUT WILL GO AWAY BECAUSE OPENED TO NAMED FILE.        /27453/*D-ROOT
*                                                              /27453/*D-ROOT
*        (*)IN AN ABORT, DO NOT SAVE CERTAIN OUTPUT IF ASSIGNED/27453/*D-ROOT
*        TO A FILE, AS THE OLD COPY MIGHT STILL BE USEABLE.    /27453/*D-ROOT
*        HOWEVER, IF FILE IS COMPLETE, IT MAY BE SAVED.        /27453/*D-ROOT
*
*        INPUT:   REGISTER IORL CONTAINS 1 IF ABNORMAL TERMINATION
*
FCDBIT   EQU      X'200000'         OPEN/CLOSED BIT
PREFLD   EQU      X'7F000000'       'PRESERVE AFTER' SEG #     /27453/*D-ROOT
*                                                              /27453/*D-ROOT
         LOCAL    %10,%20,%30
         LOCAL    %15                                          /27453/*D-ROOT
*                                                              /27453/*D-ROOT
CLOSE%FILES  RES  0
         LI,X2    DCBCORG-DCBCEND   - NUMBER OF DCB'S TO CLOSE
%10      RES      0
         LW,X3    DCBCEND,X2        SAVE FLAG AND DCB ADDRESS
         LW,X4    0,X3              WORD 0 OF DCB
         CW,X4    =FCDBIT           IS DCB OPEN
         BAZ      %30               BRANCH IF CLOSED
         DO       SYS~=RBM
         CI,X3    0                 SHOULD IT BE SAVED
         BGZ      %20               BRANCH IF NO
         AND,X4   =15               SAVE ASN FIELD
         CW,X4    IORL              DON'T SAVE OUTPUT DCB'S
         BNE      %15                 IF FILE, IN AN ABORT,    /27453/*D-ROOT
*                                     AND PROTECT FLAG IS SET. /27453/*D-ROOT
         LV,X4    PREFLD                                       /27453/*D-ROOT
         AND,X4   X3                GET 'PRESERVE AFTER' SEG # /27453/*D-ROOT
         IF,NZ                                                 /27953/*D-ROOT
         LB,X4    X4                RIGHT-JUSTIFY              /27453/*D-ROOT
         CW,X4    SEGMENT#          CAN WE SAVE IT YET?        /27453/*D-ROOT
         BGE      %20               NOT YET                    /27453/*D-ROOT
*                                                              /27453/*D-ROOT
         FI                                                    /27953/*D-ROOT
%15      RES      0                                            /27453/*D-ROOT
         M:CLOSE  *X3,(SAVE)
         B        %30
         FIN
%20      RES      0
         M:CLOSE  *X3               CLOSE WITHOUT SAVE
%30      RES      0
         BIR,X2   %10
         B        *RL               EXIT
         PAGE
         BOUND    8
BLANKS   DATA,8   '        '        DOUBLE WORD OF BLANKS
BLANC    EQU      BLANKS
*                                                              /27453/*D-ROOT
DCBCON   COM,1,7,7,17 SCOR(AF(2),SAVE),AF(3),0,AF(1)           /27453/*D-ROOT
*                                                              /27453/*D-ROOT
DCBCORG  RES      0
         DO       SYS=BPMUTS
         DCBCON   M:SI
         DCBCON   M:CI
         FIN
         DCBCON   M:BO,SAVE,4       SAVE FILE AFTER END SEGMENT/27453/*D-ROOT
         DCBCON   M:CO,SAVE,1       SAVE FILE AFTER ENCODER SEG/27453/*D-ROOT
         DCBCON   M:DO,SAVE
         DCBCON   M:GO,SAVE
         DCBCON   M:LL,SAVE         SAVE LISTING LOG IF OPEN   /27953/*D-ROOT
         DCBCON   M:LO,SAVE
         DCBCON   M:SO,SAVE,1       SAVE FILE AFTER ENCODER SEG/27453/*D-ROOT
         DO       SYS=BPMUTS
         DCBCON   F:X1,SAVE
         DCBCON   F:X2,SAVE
         DCBCON   F:X2KF,SAVE
         DCBCON   F:X3,SAVE
         FIN
         DCBCON   F:STD,SAVE
DCBCEND  RES      0
         USECT    CCI4
SYSNAME  RES,1    9+23*(SYS=BPMUTS)    ROOM FOR SYSTEM NAME (LVL=1)
         BOUND    4
ROOTRTN  RES      1                 ROOT RETURN ADDRESS
         PAGE
         USECT    XAPCODE
*
*   C L R L S T B F
*        THIS ROUTINE STORES BLANKS IN THE LISTING BUFFER.
*
*        CALL:    BAL,RL  CLRLSTBF
*
*        USES REGISTERS
*                 XT
*                 XT1
*                 XT2
*
CLRLSTBF RES 0
         LD,XT    BLANKS
         LI,XT2   -17
         STD,XT   LSTBF+34,XT2      BLANKS TO LISTING BUFFER
         BIR,XT2  %-1
         B        0,RL              RETURN
         PAGE
*
*   R E P O R T % S T A T U S
*        IF ON-LINE, AND THE BREAK KEY WAS HIT AT THE USER CONSOLE,
*           REPORT THE CHARGEABLE CPU TIME SINCE START OF THIS
*           ASSEMBLY - THE ASSEMBLY PHASE IN PROGRESS - THE LINE
*           NUMBER (WITH POSSIBLE UPDATE FRACTION) - AND, IF IN A
*           SYSTEM, THE NAME OF THE LEVEL ONE SYSTEM.
*
         LOCAL    %10
*
REPORT%STATUS RES 0
*
         DO       SYS=BPMUTS
*
*   CALCULATE AND EDIT THE ELAPSED CPU TIME SINCE THE ASSEMBLER
*        WAS FIRST CALLED.
*
         LW,XT    L('.000')
         STW,XT   STATUS%MESSAGE+2
         LW,R9    J:JIT+TPEXT       PROCESSOR EXECUTION TIME
         AW,R9    J:JIT+TPOVT       PROCESSOR OVERHEAD TIME
         AW,R9    J:JIT+TUEXT       USER EXECUTION TIME
         AW,R9    J:JIT+TUOVT       USER OVERHEAD TIME
         SW,R9    INIT%TUNITS       MINUS JOB START COUNT
         LI,R8    0
         DW,R8    L(30)             CONVERT TO 1/1000 MIN.
         LI,XT2   BA(STATUS%MESSAGE)-BA(LSTBF)+11
         LW,XT1   R9                TO VALUE REGISTER
         CALL     DEDIT
         LI,XT    '.'
         STB,XT   STATUS%MESSAGE+2
         LI,R8    0
         DW,R8    L(1000)           CONVERT TO WHOLE MIN.
         LI,XT2   BA(STATUS%MESSAGE)-BA(LSTBF)+7
         LW,XT1   R9                TO VALUE REGISTER
         CALL     DEDIT
*
*   EDIT THE NUMBER OF THE ASSEMBLER PHASE CURRENTLY IN EXECUTION
*
         LW,XT1   SEGMENT#
         LB,XT    PHASE%MAP,XT1     MAP OVERLAY TO PHASE
         AI,XT    ' 0'
         STH,XT   STATUS%MESSAGE+5
         LI,XT    STATUS%MESSAGE
,TYPEFPT M:TYPE   (MESS,*XT)
*
*   IF NOT IN CONCORDANCE PHASE, EDIT CURRENT LINE NUMBER.
*
         CI,XT1   5
         IF,NE                 -01-
         LW,XT    BLANKS
         STW,XT   LINE%NUMBER+2
         STW,XT   LINE%NUMBER+4
         LW,XT    L(' 0  ')
         STW,XT   LINE%NUMBER+3
         LW,XT1   SUBLINE
         IF,NE                 -02-
*
*        EDIT MINOR LINE NUMBER
*
         LW,XT    L('  .0')
         STW,XT   LINE%NUMBER+3
         LI,XT2   -4                FIND SIZE OF MINOR LINE NUMBER
%10      RES      0
         CH,XT1   NINES,XT2
         IF,G                  -03-
         BIR,XT2  %10
*
         FI                    -03-
         AI,XT2   BA(LINE%NUMBER)-BA(LSTBF)+19
         CALL     DEDIT
         FI                    -02-
*
*        EDIT MAJOR LINE NUMBER
*
         LI,XT2   BA(LINE%NUMBER)-BA(LSTBF)+13
         LW,XT1   MAJLINE
         CALL     DEDIT
         LI,XT    LINE%NUMBER
         M:TYPE,E TYPEFPT
*
*   IF IN SYSTEM, PRINT NAME OF LEVEL-ONE SYSTEM.
*
         MTW,0    SYSLEVEL
         IF,G                  -04-
         LI,XT    SYSTEM%MESSAGE
         M:TYPE,E TYPEFPT
         LI,XT    SYSNAME
         M:TYPE,E TYPEFPT
         FI                    -04-
         FI                    -01-
*
*   PRINT NEW-LINE CHARACTER, RESET BREAK COUNT, AND RETURN
*
         LI,XT    L(X'01150000')
         M:TYPE,E TYPEFPT
         CAL1,8   L(X'06100000')    RESET BREAK COUNT
         M:TRTN
*
         DATA,2   9,99,999,9999
NINES    EQU      %
PHASE%MAP  DATA,1 ;
                  0,;               CCI - SHOULDN'T HAPPEN
                  1,;               ENCODER
                  2,;               DEF
                  3,;               GENERATION
                  3,;               END
                  4                 CONCORDANCE
SYSTEM%MESSAGE    ;
         TEXTC    ' - PROCESSING SYSTEM '
*
         USECT    CCI4
*
LINE%NUMBER       ;
         TEXTC    ' : LINE NNNNN.MMMMM'
STATUS%MESSAGE    ;
         TEXTC    'CPU =  .FFF : PHASE N'
*
         FIN
         PAGE
*
*        XAP DCB'S
*
         DO       SYS=RBM
F:STD    CSECT    0
F:SYS    CSECT    0
         FIN
         DO       SYS=BPMUTS
F:X1     DSECT    1
F:X2    DSECT    1
F:X2KF   DSECT    1
F:X3     DSECT    1
F:X5     DSECT    1
F:STD    DSECT    1
F:SYS    DSECT    1
F:X1     M:DCB    (FILE,'%%M:X1'),;
                  (OUTIN),;
                  (RECL,2048),;
                  (TRIES,10),;
                  (ERR,ERR%%X1),;
                  (ABN,ABN%%X1)
F:X2     M:DCB    (FILE,'%%M:X2'),;
                  (OUTIN),;
                  (RECL,2048),;
                  (TRIES,10),;
                  (ERR,ERR%%X2),;
                  (ABN,ABN%%X2)
F:X3     M:DCB    (FILE,'%%M:X3'),;
                  (OUTIN),;
                  (RECL,2048),;
                  (TRIES,10),;
                  (ERR,ERR%%X3),;
                  (ABN,ABN%%X3)
F:X2KF   M:DCB    (FILE,'FX2  ');
                  ,(OUTIN);
                  ,(RECL,2048);
                  ,(TRIES,10);
                  ,(ERR,ERR%%X2KF);
                  ,(ABN,ABN%%X2KF)
F:X5     M:DCB    (FILE,'%%M:X5'),(OUTIN),(RANDOM),;
                  (RECL,2048),(TRIES,10),;
                  (ERR,ERR%%X5),(ABN,ABN%%X5)
F:STD    M:DCB    (FILE,'%:STDDEF'),;
                  (IN),(SAVE),;
                  (RECL,2048),;
                  (TRIES,10),;
                  (ERR,STDERROR),;
                  (ABN,STDERROR)
         FIN
*
         DO       SYS=RBM
F:STD    M:DCB    (FILE,'%:STDDEF',D1),;
                  (ERR,STDERROR),;
                  (ABN,STDERROR),;
                  (RECL,2048),;
                  (TRIES,10),;
                  (IN),;
                  (SAVE)
F:SYS    M:DCB    (FILE,'        '),(ABN,SYSABN),(ERR,SYSOPNER)
         FIN
         DO1      SYS=BPMUTS
F:SYS    M:DCB    (FILE),(ABN,SYSABN),(ERR,SYSOPNER)
*
         USECT    XAPCODE
         PAGE
*
*  R E A D X 1
*        READ THE X1 (ENCODED TEXT) FILE
*
*          INPUT: NONE
*
READX1   RES      0
*
         M:READ   F:X1,(BUF,X1BUF),(SIZE,BYX1SIZE),(WAIT),;
                  (ABN,ABN%%X1),(ERR,ERR%%X1)
         EXIT     IORL
*
*  W R I T E X 1
*        WRITE THE X1 (ENCODED TEXT) FILE
*
*          INPUT: NONE
*
WRITEX1  RES      0
*
         M:WRITE  F:X1,(BUF,X1BUF),(SIZE,BYX1SIZE),(WAIT),;
                  (ABN,ABN%%X1),(ERR,ERR%%X1)
         EXIT     IORL
*
*  R E W X 1
*        REWIND THE X1 (ENCODED TEXT) FILE
*
*          INPUT: NONE
*
REWX1    RES      0
*
         M:REW    F:X1
         EXIT     IORL
*
*  P O S I T I O N X 1
*        POSITION THE X1 (ENCODED TEXT) FILE N RECORDS BACKWARD OR
*          FORWARD.
*
*          INPUT: IOSIZE CONTAINS THE NUMBER OF RECORDS AND THE
*                 DIRECTION (POSITIVE = FORWARD; NEGATIVE = BACKWARD)
*
POSITIONX1  RES   0
*
         LI,IOADD F:X1
POSIT%1  RES      0
         AI,IOSIZE  0
         EXIT,EQ  IORL
         BLZ      POSBKWD
         M:PRECORD *IOADD,(N,*IOSIZE),(FWD)
         EXIT     IORL
POSBKWD  RES      0
         LCW,IOSIZE  IOSIZE         COMPLEMENT NEGATIVE COUNT
         M:PRECORD *IOADD,(N,*IOSIZE),(REV)
         EXIT     IORL
*
* P O S I T I O N X 3
*        POSITION THE X3 TEMPORARY FILE
*
*          INPUT: IOSIZE CONTAINS THE NUMBER OF RECORDS AND THE
*                 DIRECTION (POSITIVE = FORWARD; NEGATIVE = BACKWARD)
*
POSITIONX3  RES   0
*
         LI,IOADD F:X3
         B        POSIT%1
*  R E A D X 3
*        READ THE X3 (COMPRESSED SOURCE) FILE
*
*          INPUT: IOADD CONTAINS BUFFER (WORD) ADDRESS
*
READX3   RES      0
*
         M:READ   F:X3,;
                  (ERR,ERR%%X3),;
                  (ABN,ABN%%X3),;
                  (BUF,*IOADD),;
                  (SIZE,BYX3SIZE),;
                  (WAIT)
         EXIT     IORL
*
*  W R I T E X 3
*        WRITE THE X3 (COMPRESSED SOURCE) FILE
*
*          INPUT: IOADD CONTAINS BUFFER (WORD) ADDRESS
*
WRITEX3  RES      0
*
         M:WRITE  F:X3,;
                  (ERR,ERR%%X3),;
                  (ABN,ABN%%X3),;
                  (BUF,*IOADD),;
                  (SIZE,BYX3SIZE),;
                  (WAIT)
         EXIT     IORL
*
*  R E W X 3
*        REWIND THE X3 (COMPRESSED SOURCE) FILE
*
*          INPUT: NONE
*
REWX3    RES      0
*
         M:REW    F:X3
         EXIT     IORL
*
*  R E A D X 5
*        READ THE X5 (CONCORDANCE OVERFLOW) FILE
*
*          INPUT: IOSIZE CONTAINS THE BLOCK (OR KEY) NUMBER REQUIRED
*                 IOADD CONTAINS THE BUFFER ADDRESS
*
READX5   RES      0
         DO       SYS=BPMUTS
         OR,IOSIZE   L(3**24)       MERGE KEY LENGTH
         STW,IOSIZE   X5%TKEY
         M:READ   F:X5,;
                  (ERR,ERR%%X5),;
                  (ABN,ABN%%X5),;
                  (BUF,*IOADD),;
                  (KEY,X5%TKEY),;
                  (WAIT)
         FIN
         DO       SYS=RBM
         STW,IOSIZE  X5RDFPT+5
,X5RDFPT M:READ   F:X5,;
                  (ERR,ERR%%X5),;
                  (ABN,ABN%%X5),;
                  (BUF,*IOADD),;
                  (BLOCK,0),;
                  (WAIT)
         FIN
         EXIT     IORL
*
*  W R I T E X 5
*        WRITE THE X5 (CONCORDANCE OVERFLOW) FILE
*
*          INPUT: IOSIZE CONTAINS THE BLOCK (OR KEY) NUMBER REQUIRED
*                 IOADD CONTAINS THE BUFFER ADDRESS
*
WRITEX5  RES      0
         DO       SYS=BPMUTS
         OR,IOSIZE   L(3**24)       MERGE KEY LENGTH
         STW,IOSIZE   X5%TKEY
         M:WRITE  F:X5,;
                  (ERR,ERR%%X5),;
                  (ABN,ABN%%X5),;
                  (BUF,*IOADD),;
                  (KEY,X5%TKEY),;
                  (ONEWKEY),;
                  (WAIT)
         FIN
         DO       SYS=RBM
         STW,IOSIZE  X5WTFPT+5
,X5WTFPT M:WRITE  F:X5,;
                  (ERR,ERR%%X5),;
                  (ABN,ABN%%X5),;
                  (BUF,*IOADD),;
                  (BLOCK,0),;
                  (WAIT)
         FIN
         EXIT     IORL
*
*  O P E N X 5
*        OPEN THE X5 (CONCORDANCE OVERFLOW) FILE
*
OPENX5   RES      0
         LW,IOADD F:X5
         IF,FZ    X'200000',IOADD
*
         DO       SYS=BPMUTS
         LW,IOADD *X'4F'
         STH,IOADD   X5OPNFPT+9
,X5OPNFPT         ;
         M:OPEN   F:X5,;
                  (RECL,2048),;
                  (KEYED),;
                  (DIRECT),;
                  (OUTIN),;
                  (KEYM,3),;
                  (FILE,'FX5  ')
         FIN
         DO       SYS=RBM
         M:OPEN   F:X5,;
                  (ERR,ERR%%X5),;
                  (ABN,ABN%%X5)
         M:DEVICE F:X5,;
                  (GSZ,2048),;
                  (SIZE,2048)
         FIN
*
         FI
         EXIT     IORL
*
*  C L O S E X 5
*        CLOSE THE X5 (CONCORDANCE OVERFLOW) FILE
*
CLOSEX5  RES      0
*
         M:CLOSE  F:X5
         EXIT IORL
*  W R I T E L O
*        WRITE THE LISTING FILE
*
*          INPUT: IOADD CONTAINS THE BUFFER ADDRESS
*                 IOSIZE CONTAINS THE NUMBER OF BYTES IN THE BUFFER
*
*          BYTE 0 OF THE BUFFER IS THE VFC
*
DGWRITELO   RES   0
         DO       SYS=BPMUTS
         MTW,0    LO%ONLINE         TRUNCATE THE LINE IF LO
         BEZ      WRITELO             IS A TYPEWRITER OR TTY
         LI,IOSIZE 109              TRUNCATE AFTER COL. 72
         FIN
WRITELO  RES      0
         DO       SYS=BPMUTS
         MTW,0    *X'4F'
         BGEZ     WRLO3             BRANCH IF NOT ON-LINE
         LW,X5    J:JIT+JOPT        DON'T PRINT IF
         CI,X5    LOBIT             LIST BIT (IN JIT) IS ZERO
         BAZ      *IORL
WRLO3    RES      0
         FIN
         MTW,-1   PGLINES           LINES REMAINING ON THIS PAGE
         BGZ      WRLO1
         MTW,+1   PAGENUM           BUMP LAST PAGE NUMBER
         LW,X5    PAGENUM           INSERT PAGE NUMBER IN TITLE
         DO       SYS=BPMUTS
         MTW,0    LO%ONLINE         IF 'LO' IS TYPEWRITER OR TTY
         BEZ      WRLO5             PRINT ONLY ONE SHORT TITLE
         CI,X5    1
         BNE      WRLO6             BRANCH IF NOT 1ST PAGE
         M:WRITE  M:LO,(BUF,TITLEBUF),(SIZE,96),(WAIT)
         B        WRLO6
WRLO5    RES      0
         FIN
         LI,X6    BA(PGNUM)-BA(LSTBF)+2
         BAL,RL   DEDIT
         M:WRITE  M:LO,(BUF,TITLEBUF),(SIZE,108),(WAIT)
WRLO6    RES      0
         LI,X4    X'C1'             CAUSE A BLANK LINE TO BE OUTPUT
         STB,X4   *IOADD            AFTER THE TITLE LINE
         LW,X4    NUM%PAGE%LINES
         DO       SYS=BPMUTS
*  FIND NUMBER OF LINES PER PAGE IF IT HASN'T ALREADY BEEN FOUND
         BGZ      WRLO2
         LW,X4    IOADD
         M:DEVICE M:LO,(NLINES)
         AI,SR1   -2
         BGZ      %+2               USE A VERY LARGE NUMBER IF MONITOR
         LI,SR1   X'7FFFF'            REFUSES TO PROVIDE NO. OF LINES
         STW,SR1  NUM%PAGE%LINES
         XW,X4    IOADD
WRLO2    RES      0
         FIN
         STW,X4   PGLINES
WRLO1    RES      0
         M:WRITE  M:LO,(BUF,*IOADD),(SIZE,*IOSIZE),(WAIT)
         EXIT     IORL
*
*  W R I T E B O
*        WRITE THE OBJECT MODULE FILE
*
*          INPUT: NONE
*
WRITEBO  RES      0
         MTH,0    BO%FLAG           IS 'SB' OPTION REQUESTED
         BEZ      WRITEBO1          NO, JUST WRITE BOBUF
         LCI      3
         STM,X5   SAVAREA           SAVE REGISTERS
         LM,X5    BO%IDWDS          MOVE IDENT AND ZEROES
         STM,X5   BOBUF+27            TO BOBUF AREA
         LW,IOSIZE BOSEQNO          NEXT CARD SEQUENCE NUMBER
         LI,XT    HA(BOBUF)+59      ADDRESS OF COLUMN 80
         LB,XT1   BO%FLAG           NUMBER OF SEQUENCE DIGITS
         BEZ      %+2
         BAL,RL   CARDSEQ           CONVERT AND STORE SEQUENCE NUMBER
         LCI      3
         LM,X5    SAVAREA           RESTORE REGISTERS
         MTW,+1   BOSEQNO           BUMP SEQUENCE NUMBER
WRITEBO1 RES      0
         M:WRITE  M:BO,;
                  (ERR,ERR%%BO),;
                  (ABN,ERR%%BO),;
                  (BUF,BOBUF),;
                  (SIZE,*BO%SIZE),;
                  (WAIT)
         EXIT     IORL
         PAGE
*
* C A R D S E Q
*        STORE SEQUENCE NUMBER IN COLS 73-80 FOR SB OR SC OPTION
*
*        INPUT:   XT CONTAINS HA OF COLUMN 80
*                 XT1 CONTAINS NUMBER OF DIGITS TO STORE (NOT ZERO)
*                 IOSIZE CONTAINS SEQUENCE NUMBER TO CONVERT
*
*        USES REGISTERS: XT,XT1,XT2,RL,IOADD,IOSIZE
*
CARDSEQ  RES      0
         LI,XT2   0                 INDEX TO SHIFT TABLE
         STW,RL   MPX1              SAVE RETURN
NEXTCOL  RES      0
         LB,RL    SFTBL,XT2         SHIFT FOR THIS COLUMN
         LI,IOADD 0                 CONVERT
         DW,IOADD =10                 RIGHTMOST DIGIT
         SW,RL    IOADD             ADD SHIFT AMOUNT FOR THIS COLUMN
         LI,IOADD 1                 SHIFT A BIT TO
         SLS,IOADD 9,RL               THE APPROPRIATE PLACE
         AH,IOADD  0,XT             INSERT RIGHT-MOST BITS
         STH,IOADD 0,XT               IN LOW ORDER HALFWORD
         CI,XT2   3                 IS THIS COLUMN 80 OR 76
         BAZ      ADVANCE             YES, DON'T BUMP COLUMN ADDRESS
         AI,XT    -1                BUMP COLUMN ADDRESS
         LH,IOADD  IOADD            ADD LEFT-MOST BITS
         AH,IOADD  0,XT               TO NEXT HALFWORD
         STH,IOADD 0,XT
ADVANCE  RES      0
         AI,XT2   1                 BUMP INDEX TO SFTBL
         BDR,XT1  NEXTCOL           DECREASE COLUMN COUNT AND RETURN
         B        *MPX1             EXIT
SFTBL    DATA,1   0,12,8,4,0,12,8,4
         BOUND    4
*
*  W R I T E D O
*        WRITE THE DIAGNOSTIC OUTPUT FILE
*
*         INPUT:  IOADD CONTAINS THE BUFFER ADDRESS
*                 IOSIZE CONTAINS THE NUMBER OF BYTES IN THE BUFFER
*
*          BYTE 0 OF THE BUFFER IS THE VFC.
*
WRITEDO  RES      0
         DO       SYS=BPMUTS
         MTW,0    *X'4F'
         BGEZ     WRDO1             BRANCH IF NOT ON-LINE
         LW,X5    J:JIT+JOPT        DON'T OUTPUT IF
         CI,X5    DOBIT             COMMENT BIT (IN JIT) IS ZERO
         BAZ      *IORL
         CI,X5    LOBIT
         BAZ      WRDO2
         FIN
WRDO1    RES      0
         MTB,0    CORRESWD          DON'T OUTPUT IF 'DO' AND 'LO'
         EXIT,NE  IORL                ARE THE SAME DEVICE
WRDO2    RES      0
         AI,IOSIZE  -1              SUBT 1 FOR VFC
         M:WRITE  M:DO,(BUF,*IOADD),(SIZE,*IOSIZE),(BTD,1),(WAIT)
         EXIT     IORL
*
*  W R I T E G O
*        WRITE THE GO FILE
*
*          INPUT: NONE
*
WRITEGO  RES      0
         DO       SYS=BPMUTS
         MTW,0    *X'4F'            BRANCH IF NOT ON-LINE
         BGEZ     WRGO1
         LW,IOSIZE  J:JIT+JOPT      DON'T OUTPUT IF
         CI,IOSIZE  GOBIT           OUTPUT BIT (IN JIT) IS ZERO
         BAZ      *IORL
WRGO1    RES      0
         FIN
*
         M:WRITE  M:GO,;
                  (ERR,ERR%%GO),;
                  (ABN,ERR%%GO),;
                  (BUF,BOBUF),;
                  (SIZE,*BO%SIZE),;
                  (WAIT)
         EXIT     IORL
*
*  R E A D S T D
*        READ THE STANDARD DEFINITION FILE
*
READSTD  RES      0
         M:READ   F:STD,(BUF,*IOADD),(SIZE,BYX1SIZE),(WAIT),;
                  (ERR,ERR%%STD),(ABN,ABN%%STD)
         EXIT     IORL
*
*  W R I T E S T D
*        WRITE THE STANDARD DEF FILE
*
WRITESTD RES      0
         M:WRITE  F:STD,(BUF,*IOADD),(SIZE,BYX1SIZE),(WAIT),;
                  (ERR,ERR%%STD),(ABN,ABN%%STD)
         EXIT     IORL
*
*  P O S I T I O N S T D
*        POSITION THE STD FILE N RECORDS FORWARD OR BACKWARD
*
POSITIONSTD  RES  0
         LI,IOADD F:STD
         B        POSIT%1
*  R E W S T D
*
*        REWIND THE STANDARD DEF FILE
*
REWSTD   RES      0
         M:REW    F:STD
         EXIT IORL
         END      START