1CD 
          IDENT  1CD,ICD
          PERIPH
          BASE   MIXED
          SST 
*COMMENT  1CD - BATCHIO COMBINED DRIVER.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  1CD - BATCHIO COMBINED DRIVER. 
          SPACE  4,10 
***       1CD - *BATCHIO* COMBINED DRIVER.
* 
*         G. R. MANSFIELD.   70/09/01.
*         P. D. HAAS.        73/12/20.
*         R. M. YASUHARA.    75/01/17.
*         D. R. HILGREN.     79/01/15.
*         D. R. HILGREN.     79/04/25.  RESEQUENCED.
*         A. F. JOHNSTON.    84/11/16.  5870/5970 DRIVER. 
          SPACE  4,10 
***       *1CD* IS THE DEVICE DRIVER FOR *BATCHIO*.  EACH *1CD* CAN 
*         DRIVE A SET OF DEVICES, DEFINED BY THE SUB-DRIVER ITS RUNS. 
*         THE FOLLOWING SUB-DRIVERS AND THE DEVICES THEY HANDLE ARE 
*         AS FOLLOWS: 
* 
*                DCC SUB-DRIVER (UP TO 8 DEVICES PER *1CD*) 
*                  3555/512 - 580 
*                  3446/415 
*                  3447/405 
* 
*                CCC SUB-DRIVER (UP TO 8 DEVICES PER *1CD*) 
*                   5870
*                   5970
          SPACE  4,10 
***       1CD CALL. 
* 
*T IR     18/ 1CD, 6/, 12/ DN, 12/ COUNT, 12/ SDT 
* 
*         DN     DRIVER NUMBER (ASSIGNMENT ADDRESS).
*         COUNT  NUMBER OF DEVICES BEING DRIVEN.
*         SDT    SUB-DRIVER TYPE
*                  0 - 6681 DEVICES (LPDT, CRDT, CPDT). 
*                  1 - CCC DEVICES (NPDT).
          SPACE  4,10 
***              3555/512 - 580 DRIVER CHARACTERISTICS. 
* 
*         LINE SPACING IS NORMALLY DONE IN THE *AUTO EJECT* MODE.  THIS 
*         MEANS CREASES IN THE PAPER ARE SKIPPED VIA THE 3555 OR 580
*         AUTOMATIC LINE SPACING.  THUS, IT IS NECESARY FOR AUTO EJECT
*         TO BE DESELECTED IF ONE WANTS TO USE FORMAT CHANNELS TO 
*         ADVANCE FROM PRIOR TO BOTTOM OF FORM TO BEYOND TOP OF FORM. 
*         AN EXAMPLE OF THIS WOULD BE WITH THE TYPICAL *NOS* FORMAT 
*         TAPE WHICH HAS ONLY 1 HOLE IN CHANNEL 6 THUS PROVIDING AN 
*         EJECT OF UP TO TWO PAGES IN ORDER TO INSURE ALL BANNER PAGES
*         COME OUT FACE UP IF THE PAPER IS PUT IN THE PRINTER 
*         CORRECTLY.  IT SHOULD ALSO BE NOTED THAT DESELECTION OF AUTO
*         EJECT MODE ON A 512/580 WILL RESULT IN DESELECTION OF 
*         8 LINES/INCH IF PREVIOUSLY SELECTED.
* 
*         THE FIRST CHARACTER OF THE PRINT LINE CONTROLS THE OPTIONAL 
*         FORMATS.  THIS CHARACTER IS NOT PRINTED.  THE PRINT 
*         LINE THEREFORE CONSISTS OF UP TO 136 CHARACTERS.
* 
*         THE FORMAT CONTROL CHARACTERS, THE NUMBER OF LINES CHARGED
*         FOR THEM, AND THEIR FUNCTION FOLLOWS -
*         CHAR.  LINE CHARGE FUNCTION 
*         C      4           SKIP TO FORMAT CHANNEL 6 AFTER PRINT 
*         D      3           SKIP TO FORMAT CHANNEL 5 AFTER PRINT 
*         E      3           SKIP TO FORMAT CHANNEL 4 AFTER PRINT 
*         F      2           SKIP TO FORMAT CHANNEL 3 AFTER PRINT 
*         G      2           SKIP TO FORMAT CHANNEL 2 AFTER PRINT 
*         H      1           SKIP TO FORMAT CHANNEL 1 AFTER PRINT 
*         Q      0           SUPPRESS AUTO EJECT
*         R      0           SET AUTO EUECT 
*         S      0           CLEAR 8 LINES/INCH (512/580 ONLY)
*         T      0           SET 8 LINES/INCH (512/580 ONLY)
*         V      PL6L OR PL8L EJECT PAGE / RELOAD 580 PFC MEMORY
*         0      2           SPACE 1 LINE BEFORE PRINT
*         1      PL6L OR PL8L EJECT PAGE BEFORE PRINT 
*         2      PL6L/2 OR PL8L/2  ADV TO BOTTOM OF FORM BEFORE PRINT 
*         3      4           SKIP TO FORMAT CHANNEL 6 BEFORE PRINT
*         4      3           SKIP TO FORMAT CHANNEL 5 BEFORE PRINT
*         5      3           SKIP TO FORMAT CHANNEL 4 BEFORE PRINT
*         6      2           SKIP TO FORMAT CHANNEL 3 BEFORE PRINT
*         7      2           SKIP TO FORMAT CHANNEL 2 BEFORE PRINT
*         8      1           SKIP TO FORMAT CHANNEL 1 BEFORE PRINT
*         +      1           SUPPRESS SPACE BEFORE PRINT
*         -      3           SPACE 2 LINES BEFORE PRINT 
*         /      1           SUPPRESS SPACE AFTER PRINT 
*         SPACE  1           NO LINE CONTROL
*         OTHER  1           NO LINE CONTROL
* 
*         ANY FORMAT CONTROL OTHER THAN *Q*, *R*, *S*, AND *T*
*         ARE PROCESSED ONCE FOR THE LINE PRINTED.
* 
*         IF THE FIRST TWO CHARACTERS OF THE LINE ARE *PM* THEN 
*         THE MESSAGE TEXT ON THE REMAINDER OF THE LINE WILL BE 
*         DISPLAYED ON THE *I* DISPLAY AND THE PRINTING OF THE
*         FILE WILL BE HALTED UNTIL THE OPERATOR ENTERS A 
*         *CONTINUE* COMMAND. *PM* MESSAGE PROCESSING WILL BE 
*         ALLOWED ONLY FOR USERS THAT HAVE THE *CBIO* VALIDATION
*         PARAMETER SET IN *AACW*.
          SPACE  4,10 
***              3446/415 DRIVER CHARACTERISTICS. 
* 
*         HOLLERITH CARDS ARE PUNCHED FROM A LINE CONSISTING OF UP TO 
*         90 CHARACTERS.  HOWEVER, ONLY THE FIRST 80 CHARACTERS 
*         OF THE LINE ARE ACTUALLY PUNCHED.  THE DISPLAY CODE 
*         TO O26/O29 CONVERSION IS ACCOMPLISHED BY A
*         DISPLAY CODE TO BINARY COLUMN IMAGE CONVERSION IN THE 
*         DRIVER.  THE CARD IS THEN PUNCHED IN BINARY MODE
*         ON THE 3446.
* 
*         BINARY DATA ARE PUNCHED IN THE FOLLOWING FORMAT 
*         COLUMN  1 = WORD COUNT AND BINARY CARD INDICATOR (79) 
*         COLUMN  2 = BINARY DATA CHECKSUM MODULO 4095
*         COLUMNS 3 - 77 = 15 CENTRAL WORDS OF DATA 
*         COLUMN 78 = BLANK 
*         COLUMNS 79 - 80 = 24 BIT BINARY CARD SEQUENCE NUMBER
* 
*         ABSOLUTE BINARY DATA ARE PUNCHED 16 CENTRAL WORDS/CARD WITH 
*         NO SPECIAL PUNCHES. 
* 
*         END OF RECORD CARDS CONTAIN A 7/8/9 PUNCH IN COLUMN 1 
*         AND THE REMAINDER OF THE CARD IS BLANK. 
*         END OF FILE CARDS CONTAIN A 6/7/9 PUNCH IN COLUMN 1 
*         AND THE REMAINDER OF THE CARD IS BLANK. 
* 
*         CARDS OFFSET ARE AS FOLLOWS - 
*         1.  ALL END OF RECORD CARDS.
*         2.  THE END OF INFORMATION CARD.
*         3.  A CARD ON WHICH A COMPARE ERROR WAS DETECTED WILL BE
*         OFFSET AND ALSO THE FOLLOWING CARD.  THESE 2 CARDS WILL 
*         BE REPUNCHED UNTIL NO ERROR IS DETECTED.
          SPACE  4,10 
***              3447/405 DRIVER CHARACTERISTICS. 
* 
*         HOLLERITH CARDS ARE READ WITH TRAILING SPACES DELETED.
*         UP TO 80 CHARACTERS MAY BE TRANSFERRED TO THE CM BUFFER.
*         HOLLERITH TO DISPLAY CODE TRANSLATION IS ACCOMPLISHED BY
*         VERIFYING AND CONVERTING THE HOLLERITH DATA TO EXTERNAL BCD 
*         FOLLOWED BY A BCD TO DISPLAY CONVERSION IN THE DRIVER.
*         ILLEGAL HOLLERITH CODES ARE TRANSLATED AS BLANKS. 
*         HOLLERITH CONVERSION MAY BE CHANGED BY THE USE OF A CARD WITH 
*         5/7/9 PUNCHES IN COLUMN 1 AND THE CONVERSION MODE IN
*         COLUMN 2.  THE ASSUMED MODE IS O26.  A MODE CHANGE IS IN
*         EFFECT UNTIL CHANGED. 
* 
*         CONVERSION MODE PUNCHES IN COLUMN 2 - 
*         BLANK        O26
*         9            O29
*         4/5/6/7/8/9  LITERAL INPUT
*                CARDS ARE READ IN BINARY FORMAT WITH NO CONVERSION 
*                OR CHECKING UNTIL A CARD WHICH IS IDENTICAL IN ALL 
*                80 COLUMNS IS READ.
* 
*         HOLLERITH CONVERSION MAY ALSO BE SIGNALLED BY PUNCHING
*         *26* OR *29* IN COLUMNS 79 AND 80 OF THE FOLLOWING CARDS -
*         JOB CARD
*         EOR (7/8/9) CARD
*         EOF (6/7/9) CARD
* 
*         BINARY CARDS MUST CONFORM TO THE ABOVE SPECIFICATION FOR
*         PUNCHED BINARY DATA.
* 
*         AN END OF RECORD CONSISTS OF A CARD WITH 7/8/9 PUNCHES IN 
*         COLUMN 1. 
*         AN END OF FILE CONSISTS OF A CARD WITH 6/7/9 PUNCHES IN 
*         COLUMN 1. 
*         AN END OF INFORMATION CONSISTS OF A CARD WITH 6/7/8/9 
*         PUNCHES IN COLUMN 1.
*         IN ANY CASE, THE REMAINDER OF THE CARD IS NOT CONSIDERED
*         AS DATA.
          SPACE  4,10 
***              5870/5970 DRIVER CHARACTERISTICS.
* 
*         THE DRIVER FOR THE 5870/5970 IS SIMILAR TO THE 3555/512 - 580 
*         DRIVER. 
* 
*         THE FIRST CHARACTER OF THE PRINT LINE CONTAINS THE FORMAT 
*         CONTROL CHARACTER.  THIS CHARACTER IS NOT PRINTED.  THE PRINT 
*         LINE CONSISTS OF UP TO 150 CHARACTERS.
* 
*         THE FORMAT CONTROL CHARACTERS, THE NUMBER OF LINES CHARGED
*         FOR THEM, AND THEIR FUNCTION FOLLOWS -
* 
*         CHAR.  LINE CHARGE FUNCTION 
*         C      1           SKIP TO FORMAT CHANNEL 6 AFTER PRINT 
*         D      1           SKIP TO FORMAT CHANNEL 5 AFTER PRINT 
*         E      1           SKIP TO FORMAT CHANNEL 4 AFTER PRINT 
*         F      1           SKIP TO FORMAT CHANNEL 3 AFTER PRINT 
*         G      1           SKIP TO FORMAT CHANNEL 2 AFTER PRINT 
*         H      1           SKIP TO FORMAT CHANNEL 1 AFTER PRINT 
*         Q      0           LINE IGNORED 
*         R      0           LINE IGNORED 
*         S      0           LINE IGNORED 
*         T      0           LINE IGNORED 
*         V      0           LINE IGNORED 
*         0      2           SPACE 1 LINE BEFORE PRINT
*         1      1           EJECT PAGE BEFORE PRINT
*         2      1           ADVANCE TO BOTTOM OF FORM BEFORE PRINT 
*         3      1           SKIP TO FORMAT CHANNEL 6 BEFORE PRINT
*         4      1           SKIP TO FORMAT CHANNEL 5 BEFORE PRINT
*         5      1           SKIP TO FORMAT CHANNEL 4 BEFORE PRINT
*         6      1           SKIP TO FORMAT CHANNEL 3 BEFORE PRINT
*         7      1           SKIP TO FORMAT CHANNEL 2 BEFORE PRINT
*         8      1           SKIP TO FORMAT CHANNEL 1 BEFORE PRINT
*         +      1           SUPPRESS SPACE BEFORE PRINT
*         -      3           SPACE 2 LINES BEFORE PRINT 
*         /      1           SUPPRESS SPACE AFTER PRINT 
*         SPACE  1           NO LINE CONTROL
*         OTHER  1           NO LINE CONTROL
* 
*         IF THE FIRST TWO CHARACTERS OF THE LINE ARE *PM*, THEN
*         THE REMAINDER OF THE LINE, UP TO 80 CHARACTERS, ARE 
*         CONSIDERED A MESSAGE FOR THE 5870/5970.  THIS IS ONLY 
*         ALLOWED FOR USERS WITH THE *CBIO* VALIDATION. 
          SPACE  4,10 
***       ERRLOG MESSAGES.
* 
* 
*         *EQXXX CCC/NIP STATUS ERROR.* = A STATUS OF 5XXX WAS
*                RETURNED FROM THE CCC. 
* 
*         *EQXXX CHANNEL PARITY ERROR.* = A PARITY ERROR WAS DETECTED 
*                ON A CONVERTER OR EQUIPMENT. 
* 
*         *EQXXX COMPARE ERROR.* = COMPARE ERROR WAS DETECTED.
* 
*         *EQXXX CONTROLLER HUNG BUSY.* = THE CONTROLLER DOES NOT DROP
*                BUSY STATUS. 
* 
*         *EQXXX FEED FAILURE.* = CARD FEED PROBLEM WAS DETECTED. 
* 
*         *EQXXX FUNCTION TIMEOUT* = A FUNCTION TIMEOUT WAS DETECTED
*                ON A CONVERTER OR EQUIPMENT FUNCTION.
* 
*         *EQXXX INCOMPLETE DATA TRANSFER.* = AN INCOMPLETE DATA
*                TRANSFER WAS DETECTED. 
* 
*         *EQXXX INTERNAL/EXTERNAL REJECT.* = AN INTERNAL OR EXTERNAL 
*                REJECT WAS DETECTED. 
* 
*         *EQXXX NNNN PRINT ERRORS.* = PRINT ERRORS DETECTED. 
* 
*         *EQXXX PFC ERROR.* = ERROR LOADING PFC MEMORY.
* 
*         *EQXXX PRINT ERROR LIMIT EXCEEDED.* = PRINT ERROR LIMIT WAS 
*                EXCEEDED.
* 
*         *EQXXX TRANSMISSION PARITY ERROR.* = A TRANSMISSION PARITY
*                ERROR WAS DETECTED.
* 
*         *EQXXX TURNED OFF BY SYSTEM.* = FAULTY EQUIPMENT
*                WAS TURNED OFF BY THE SYSTEM.
* 
*         WHERE - 
*         EQ = EQUIPMENT MNEMONIC.
*         XXX = EST ORDINAL.
*         NNNN = NUMBER OF PRINT ERRORS.
          SPACE  4,10 
***       OPERATOR *I* DISPLAY STATUS MESSAGES. 
* 
*         *NOT READY.* = DEVICE IS NOT READY. 
* 
*         *NO PAPER.* = PRINTER HAS A PAPER OUT CONDITION.
* 
*         *COMPARE ERROR.* = CARD PUNCH HAS A COMPARE ERROR.
* 
*         *FEED FAILURE.* = CARD PUNCH HAS A CARD FEED PROBLEM. 
* 
*         *HOLD.* = DEVICE IS SKIPPING OR HAS BEEN PLACED IN HOLD.
* 
*         *PM MESSAGE.* = PRINTER IS WAITING; CHECK *PM* MESSAGE
*         THEN ENTER *CONTINUE,EST.* FROM *DSD*.
* 
*         *PRINT ERROR.* = CORRECT PRINTER ERROR THEN ENTER 
*         *CONTINUE,EST.* FROM *DSD*. 
* 
*         *RE-RD CD COMPARE ERR.* = CARD READER HAS A CARD COMPARE
*         ERROR.  OPERATOR SHOULD RE-READ THE LAST CARD IN THE OUTPUT 
*         HOPPER. 
* 
*         *ADV 1 CD RE-RD 3 CDS.* = CARD READER HAS ENCOUNTERED A 
*         TRANSMISSION PARITY ERROR, AN INCOMPLETE DATA TRANSFER, OR A
*         BINARY CHECKSUM ERROR.  IN ORDER TO RECOVER, THE OPERATOR 
*         MUST ADVANCE THE NEXT CARD IN THE INPUT HOPPER, AND THEN
*         RE-READ THE LAST 3 CARDS IN THE OUTPUT HOPPER.
* 
*         *INTERVENTION NEEDED.* = THE 5870/5970 REQUIRES OPERATOR
*         INTERVENTION. 
          SPACE  4,10 
***       CHANNEL ERROR PROCESSING. 
* 
* 
*         THE FOLLOWING CHANNEL ERRORS ARE RETRIED *ERRL* TIMES - 
*                CONNECT REJECT.
*                FUNCTION REJECT. 
*                TRANSMISSION PARITY ERROR. 
*                INCOMPLETE DATA TRANSFER.
*         THE FOLLOWING CHANNEL ERRORS ARE NOT RETRIED -
*                6681 FUNCTION TIMEOUT. 
*                EQUIPMENT FUNCTION TIMEOUT.
*         AFTER THE RETRY LIMIT IS REACHED OR AFTER A FUNCTION
*         TIMEOUT IS DETECTED, ERROR HANDLING PROCEEDS AS FOLLOWS - 
*                OUTPUT FILES ARE REQUEUED. 
*                TRACKS FOR INPUT FILES ARE DROPPED.
*                THE FAULTY EQUIPMENT IS TURNED OFF AND DROPPED.
*                ERROR LOG MESSAGES ARE ISSUED. 
          SPACE  4,10 
***       *1CD* - *QAP* INTERFACE.
* 
* 
*         *1CD* AND *QAP* COMMUNICATE PRIMARILY VIA BYTE 4 OF THE 
*         FIRST WORD OF THE FET.  WHEN *1CD* MAKES A REQUEST, 
*         THIS BYTE IS SET WITH THE REQUEST CODE AND BIT 0
*         IS CLEARED, INDICATING THAT THIS BUFFER 
*         IS BUSY.  UPON COMPLETION OF THE REQUESTED TASK,
*         QAP* SETS BIT 0 OF THIS BYTE, INDICATING THE
*         BUFFER IS NO LONGER BUSY. 
          SPACE  4,10 
***       NOTES.
* 
* 
*         (1)  LINES PRODUCING PRINTER *PRINT ERRORS* ARE FLAGGED 
*         ON THE LISTING, AND THEN REPRINTED.  THE OPERATOR MAY 
*         BYPASS ERROR PROCESSING BY TURNING ON SSW1, OR BY MANUALLY
*         DEPRESSING THE *ERROR OVERRIDE* SWITCH.  THE LATTER 
*         INHIBITS PRINT ERROR ON THE STATUS LINE, AND AS SUCH WILL 
*         SUPPRESS STATISTICS REPORTED IN THE *ERRLOG*. 
*         IF ERROR PROCESSING IS NOT BYPASSED AND MORE THAN 
*         *PERL* CONSECUTIVE LINES HAVE *PRINT ERRORS*, THEN
*         THE FILE IS REQUEUED AND THE PRINTER IS TURNED OFF. 
* 
*         (2)  INCOMPLETE DATA TRANSFERS AND TRANSMISSION PARITY
*         ERRORS DETECTED WHILE PUNCHING CARDS ARE COUNTED AND
*         RETRIED A MAXIMUM OF *ERRL* TIMES PER CARD IMAGE. 
*         IF *ERRL* IS REACHED, THEN THE PUNCH FILE WILL BE 
*         REQUEUED AND THE EQUIPMENT TURNED OFF.  IF *ERRL* 
*         IS NOT REACHED, ONLY THE LAST BAD CARD IS OFFSET FOR
*         A GIVEN CARD IMAGE, INDEPENDENT OF THE NUMBER OF
*         RETRIES FOR THAT CARD IMAGE.
* 
*         (3)  THE CARD PUNCH ERROR COUNT IS PUNCHED IN COLUMN
*         40 OF THE EOI CARD. 
          SPACE  4,10 
**        PROGRAMMING CONSIDERATIONS. 
* 
* 
*         (1)  BEFORE ADDING CODE TO THIS ROUTINE, ONE SHOULD 
*         UNDERSTAND WHAT HAPPENS ON A FUNCTION REJECT OR WAIT NOT
*         BUSY CONDITION.  SEE SUBROUTINES *FCN* AND *WNB*. 
* 
*         (2)  THE PROGRAMMER SHOULD BE AWARE OF THE IMPLICATIONS 
*         OF JUMPING TO MANAGER FROM A SUBROUTINE.  IF THAT 
*         SUBROUTINE IS CALLED MORE THAN ONCE, ANOTHER EQUIPMENT
*         DRIVEN BY THIS SAME *1CD* COULD CONCEIVABLY CALL THE
*         SAME SUBROUTINE FROM A DIFFERENT LOCATION.  THUS, THE 
*         RETURN ADDRESS WOULD NOT BE CORRECT FOR THE EQUIPMENT 
*         THAT FIRST CALLED THE SUBROUTINE WHEN IT RESUMES
*         PROCESSING. 
          SPACE  4,10 
***       PROGRAMS CALLED.
* 
*         CIO - COMBINED I/O. 
*         QAP - QUEUE AUXILIARY PROCESSOR.
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPMAC 
          LIST   X
*CALL     COMSBIO 
          LIST   *
*CALL     COMSCPS 
*CALL     COMSJIO 
*CALL     COMSPIM 
          SPACE  4,10 
****      DIRECT CELL USAGE.
  
  
 DB       EQU    15          DATA BUFFER ADDRESS
 FC       EQU    16          FUNCTION CODE
 PA       EQU    17          PROCESSING ADDRESS 
 FP       EQU    20 - 24     FILE PARAMETERS (FET+5) (5 LOCATIONS)
 BF       EQU    FP          BUFFER POINT OFFSET
 BI       EQU    25          PP BUFFER CONTROL INDEX
 DA       EQU    26          DATA ADDRESS 
 BR       EQU    27          BUSY RETURN
 F2       EQU    30 - 34     FILE PARAM WORD 2 (FET+12) (5 LOCATIONS) 
 CS       EQU    F2          CONVERTER STATUS (FET+12 - BYTE 0) 
 ST       EQU    F2+1        EQUIPMENT STATUS (FET+12 - BYTE 1) 
 UL       EQU    F2+3 - F2+4 USER LIMIT (FET+12 - BYTES 3 AND 4)
 CR       EQU    35          CHANNEL RESERVED 
 EQ       EQU    36          EQUIPMENT TYPE NUMBER
 TL       EQU    37          CONVERSION TABLE LENGTH
 BS       EQU    40 - 44     BUFFER STATUS (5 LOCATIONS)
 SB       EQU    46          STATUS BLOCK WRITE LOCKOUT 
 BL       EQU    47          EQUIPMENT STATUS BLOCK LENGTH
 FA       EQU    57          ADDRESS OF FST ENTRY 
 FT       EQU    60 - 61     FIRST ADDRESS OF CM BUFFER (2 LOCATIONS) 
 IN       EQU    62 - 63     NEXT INPUT ADDRESS (2 LOCATIONS) 
 OT       EQU    64 - 65     NEXT OUTPUT ADDRESS (2 LOCATIONS)
 LM       EQU    66 - 67     LIMIT ADDRESS OF CM BUFFER (2 LOCATIONS) 
          SPACE  4,10 
*         ASSEMBLY CONSTANTS. 
  
  
*         PROGRAMMERS NOTE - THE DEFAULT CHANNEL SHOULD REMAIN 16B. 
*         THE MAIN LOOP OF *1CD* ASSUMES THAT A CHANNEL IS ALREADY
*         RESERVED AND IT WILL BE DROPPED WHEN NECESSARY.  IN ORDER TO
*         ELIMINATE SPECIAL CASE CODE, CHANNEL 16B IS USED IN PRESET
*         SINCE IT IS DEFINED TO BE NON-DEDICATED AND MAY ALWAYS BE 
*         REQUESTED AND DROPPED.  USE OF ANY OTHER CHANNEL MAY RESULT 
*         IN DEADLOCK WITH PP PROGRAMS WHICH MAY USE THAT CHANNEL IN A
*         DEDICATED MODE (SUCH AS *1TD*). 
  
 CH       EQU    16B         CHANNEL NUMBER 
 BUFS     EQU    2           BUFFER TABLE ENTRY LENGTH
****
          SPACE  4,10 
*         CONVERSION TABLE AREA.
  
  
 CTID     EQU    MSFW 
 CTBL     EQU    CTID+1 
 CTBLL    EQU    CTID+5*CTLN
          TITLE  MACRO DEFINITIONS. 
          SPACE  4,10 
**        MACRO DEFINITIONS.
 FMTC     SPACE  4,10 
**        FMTC   C,L,F1,F2
* 
*         GENERATE ENTRY IN FORMAT CONTROL TABLE. 
* 
*T,       12/ASCII8 
*T+1,     6/L,6/F2
*                ASCII8 = 12-BIT ASCII CODE.
*                C = CONTROL CHARACTER IN 12 BIT ASCII, RIGHT-
*                    JUSTIFIED. 
*                L = NUMBER OF LINES CHARGED THRU ACCOUNTING. 
*                F2 = FUNCTION CODE FOR 512/580.
  
  
 FMTC     MACRO  C,L,F1,F2
          NOREF  YY 
          CODE   ASCII
 YY       SET    1R_C+40B 
          VFD    12/YY
          CODE   *
          VFD    6/L,6/F2 
          ENDM
 NFMTC    SPACE  4,15 
**        NFMTC - NON-IMPACT PRINTER FORMAT CONTROL TABLE.
* 
*         NFMTC IS USED TO GENERATE A ENTRY IN THE FORMAT CONTROL 
*         TABLE FOR A NON-IMPACT PRINTER. 
* 
*         NFMTC  C,NP,L,F1,F2 
* 
*         ENTRY  *C* = CONTROL CHARACTER. 
*                *NP* = IF PRESENT, DO NOT PRINT LINE.
*                *L* = ADDITIONAL LINES TO CHARGE.
*                *F1* = FUNCTION TO ISSUE TO CCC. 
*                *F2* = ADDITIONAL FUNCTION TO ISSUE AFTER *F1*.
  
  
          PURGMAC  NFMTC
  
 NFMTC    MACRO  C,NP,L,F1,F2 
          MACREF NFMTC
          NOREF  YY 
          CODE   ASCII
 YY       SET    1R_C+40B 
          VFD    12/YY
          CODE   *
          VFD    6/L
 .A       IFC    EQ,$NP$$ 
          VFD    6/0
 .A       ELSE
          VFD    6/1
 .A       ENDIF 
 .A       IFC    EQ,$F2$$ 
          VFD    12/F1,12/0 
 .A       ELSE
          VFD    12/F2,12/F1
 .A       ENDIF 
 NFMTC    ENDM
 RELM     SPACE  4,10 
**        RELM
*         REDEFINE -M- TYPE DATA INSTRUCTIONS FOR AUTOMATIC BIAS
*         BY *EQSB* IF -M- PART OF ADDRESS .LE. *CMDA*. 
*         ORIGINAL FORM AVAILABLE WITH *.* SUFFIX.
  
  
 RELM     MACRO  OPC
 OPC.     OPSYN  OPC
 OPC=     MACRO  M,D
          IF     DEF,M
          IFLE   M,CMDA 
          IFC    EQ,*D**
          OPC.   M+EQSB 
          ELSE
          OPC.   M,D
          ENDIF 
 OPC=     ENDM
 OPC      OPSYN  OPC= 
 RELM     ENDM
  
  
          RELM   LDM
          RELM   ADM
          RELM   SBM
          RELM   LMM
          RELM   STM
          RELM   RAM
          RELM   AOM
          RELM   SOM
 STR      SPACE  4,10 
**        STR - GENERATE ASCII STRING.
* 
*         STR IS USED TO GENERATE A STRING OF ASCII CHARACTERS. 
*         THE CHARACTERS ARE STORED ONE PER BYTE, RIGHT-ADJUSTED. 
* 
*         STR    (ABCD) 
* 
*         ENTRY  *ABCD* = STRING TO GENERATE. 
  
  
          PURGMAC  STR
  
 STR      MACRO  STRING 
          MACREF STR
          NOREF  .1,.2,.3 
 .B       MICRO  1,,(STRING(
 .1       MICCNT .B 
 .2       SET    1
          CODE   ASCII
          DUP    .1,4 
 .C       MICRO  .2,1,#".B"#
 .3       SET    1R".C"+40B 
          VFD    12/.3
 .2       SET    .2+1 
          CODE   *
 STR      ENDM
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPCHI 
          TITLE  MANAGER. 
 ICD      SPACE  4,10 
**        MGR - EQUIPMENT MANAGER.
  
  
          ORG    PPFW 
  
 ICD      LJM    PRS         PRESET PROGRAM 
 MGR      EQU    *-1
          STM    CMAR        SAVE -A- REGISTER
          LDM    MGR         STORE PROGRAM ADDRESS
          STM    CMPA 
          LDN    FRJI        CLEAR FUNCTION REJECT RETRY COUNT
          RJM    CRV
 MGRA     LDN    0           RESET TIMEOUT COUNTER
*         LDN    1           (1X PP SPEED)
*         LDN    2           (2X PP SPEED)
*         LDN    4           (4X PP SPEED)
          STM    CMTC 
  
*         *MGR1* IS A SECONDARY ENTRY POINT FOR *MGR*.
  
 MGR1     LDD    BR          STORE BUSY RETURN
          STM    CMBR 
  
*         PAUSE FOR STORAGE MOVE / CHANNEL REQUESTED. 
  
 PSE      LDN    CMCL        READ STORAGE MOVE CONTROL
          CRD    CM 
          LDD    CP          CHECK CONTROL POINT
          SHN    -7 
          LMD    CM 
          ZJN    PSE2        IF MOVE REQUESTED
          LCN    0
          STD    T0 
          LDD    CR 
          STD    T1 
 PSE1     AOD    T0          DETERMINE CHANNEL WORD ADDRESS 
          LCN    5
          RAD    T1 
          PJN    PSE1        IF CORRECT CHANNEL WORD NOT REACHED
          LDC    0
 PSEA     EQU    *-1         (CHANNEL TABLE ADDRESS)
          ADD    T0 
          CRD    CM 
          LDM    CM+5,T1     CHECK CHANNEL
          SHN    -13
          ZJN    MGR2        IF CHANNEL NOT REQUESTED 
 PSE2     LDD    CR          RELEASE CHANNEL
          DCHAN 
          LDD    CR          RESERVE CHANNEL
          RCHAN 
*         LDN    0           CLEAR EQUIPMENT COUNTER
 MGR2     STD    T7 
          LDD    RA          READ REQUEST WORD
          SHN    6
          ADN    DRQR 
          CRD    CM 
          LDD    SB 
          NJN    MGR2.1      IF STATUS BLOCK INTERLOCKED
          RJM    SFA
          ADN    EDSO        STORE STATUS BLOCK 
          CWM    EQSB,BL
 MGR2.1   LDD    CM 
          LMD    IR+2 
          NJN    MGR3        IF NO REQUEST
          RJM    SEA         SET EQUIPMENT ASSIGNMENT 
 MGR3     LDN    BUFS        ADVANCE BUFFER ADDRESS 
          RAD    BI 
          LMC    CBUFL
          NJN    MGR4        IF NOT END OF BUFFERS
          LCN    CBUFL-CBUF 
          RAD    BI 
 MGR4     LDI    BI 
          ADM    1,BI 
          NJN    MGR5        IF EQUIPMENT ACTIVE
          AOD    T7          ADVANCE EQUIPMENT COUNTER
          LMN    MEQD 
          NJN    MGR3        IF NOT LAST EQUIPMENT
          LDD    CR          RELEASE CHANNEL
          DCHAN 
          LDD    RA 
          SHN    6
          ADD    IR+2 
          CWD    CM 
          MONITOR  DPPM      DROP PP
          LJM    PPR         EXIT TO PP RESIDENT
  
 MGR5     RJM    SFA         READ FET PARAMETERS
          CRD    BS          BUFFER STATUS
          ADN    QAPO 
          CRD    T1          QUEUE ACCESS PARAMETER BLOCK 
          ADN    FPW2-QAPO
          CRD    F2          FILE PARAMETER WORD 2
          SBN    FPW2-5 
          CRD    FP          FILE PARAMETER WORD 1 (FET+5)
          SBN    1
          CRD    LM-3        LIMIT
          CRD    T6 
          SBN    1
          CRD    OT-3        OUT
          SBN    1
          CRD    IN-3        IN 
          SBN    1
          CRD    CM          FIRST
          ADN    EDSO-1 
          CRM    EQSB,BL
          LDM    CMEN        SET EQUIPMENT TYPE 
          LPN    7
          STD    EQ 
          LDM    CMBR        SET BUSY RETURN
          STD    BR 
          LDD    CM+3 
          LPN    37 
          STD    FT 
          LDD    CM+4 
          STD    FT+1 
          LDD    BS+4 
          SHN    21-0 
          MJN    MGR6        IF FILE NOT BUSY 
          LDD    T1+4 
          SHN    21-0 
          PJN    MGR6        IF QUEUE ACCESS PARAMETER BLOCK BUSY 
          AOD    BS+4        SET FILE NOT BUSY
          SOD    T1+4        SET QUEUE ACCESS PARAMETER BLOCK BUSY
          RJM    SFA         WRITE BUFFER STATUS
          CWD    BS 
          ADN    QAPO        WRITE QUEUE ACCESS PARAMETER BLOCK 
          CWD    T1 
 MGR6     LDD    T6          SET FST ADDRESS
          ZJN    MGR7        IF NO FNT ENTRY
          SBN    FSTL 
 MGR7     STD    FA 
          LDM    CMSB        SET STATUS BLOCK INTERLOCK FLAG
          LPN    2
          STD    SB 
          NJN    MGR9        IF INTERLOCKED 
          LDM    CMDB        SET DATA ADDRESS 
          STD    DA 
          NFA    BF,R        READ BUFFER POINT WORD 
          CRD    CM 
          LDD    CM+4        CHECK FOR OPERATOR REQUEST 
          LPN    77 
          ZJN    MGR8        IF NO REQUEST
          RJM    POF         PROCESS OPERATOR REQUEST 
 MGR8     RJM    PMR         PROCESS MESSAGE REQUEST
          NJN    MGR9        IF REQUEST PENDING 
          RJM    **          ENTER SUB-DRIVER PROCESSOR 
 MGRB     EQU    *-1         (SET BY *PRS*) 
*         RJM    /3CZ/SDP 
*         RJM    /3CY/SDP 
 MGR9     LJM    PSE         CHECK FOR STORAGE MOVE 
 TEQD     SPACE  4,10 
**        TEQD - TABLE OF EQUIPMENT DRIVERS.
* 
*         INDEXED BY EQUIPMENT TYPE CODE. 
  
  
 TEQD     INDEX 
          INDEX  LPDT,/3CZ/LPD
          INDEX  CPDT,/3CZ/CPD
          INDEX  CRDT,/3CZ/CRD
          INDEX  NPDT,/3CY/NPD
          INDEX  MXDT 
 TDCM     SPACE  4,10 
**        TDCM - TABLE OF DEFAULT CONVERSION MODES. 
* 
*         INDEXED BY EQUIPMENT TYPE CODE. 
  
  
 TDCM     INDEX 
          INDEX  LPDT,CDX8
          INDEX  CPDT,CDXH
          INDEX  CRDT,C6XD
          INDEX  NPDT,CDX8
          INDEX  MXDT 
 TNRP     SPACE  4,10 
**        TNRP - TABLE OF *NOT READY* PROCESSORS. 
* 
*         INDEXED BY EQUIPMENT TYPE CODE. 
  
  
 TNRP     INDEX 
          INDEX  LPDT,/3CZ/LPE
          INDEX  CPDT,/3CZ/CPE
          INDEX  CRDT,/3CZ/CRE
          INDEX  NPDT,/3CY/NPE
          INDEX  MXDT 
 SEA      SPACE  4,15 
**        SEA - SET EQUIPMENT ASSIGNMENT. 
* 
*         ENTRY  (CM - CM+4) = EQUIPMENT ASSIGNMENT.
* 
*         EXIT   BUFFER INITIALIZED.
* 
*         USES   EQ, IR+3, T1, CM - CM+4. 
* 
*         CALLS  CLB, SFA.
* 
*         MACROS MONITOR. 
  
  
 SEA2     MONITOR  HNGM      HANG PP
  
 SEA      SUBR               ENTRY/EXIT 
          LDD    CM+1        SET EQUIPMENT TYPE 
          LPN    7
          STD    EQ 
          SBN    MXDT 
          PJN    SEA2        IF DRIVER NOT AVAILABLE
          LDC    CBUF-BUFS   SET BUFFER ADDRESS 
          STD    T1 
 SEA1     LDN    BUFS        ADVANCE BUFFER ADDRESS 
          RAD    T1 
          LMC    CBUFL
          ZJN    SEAX        IF ALL BUFFERS BUSY
          LDI    T1 
          ADM    1,T1 
          NJN    SEA1        IF BUFFER IN USE 
          STD    SB 
          LDD    T1 
          STD    BI 
          LDD    CM+3        SET BUFFER ADDRESS 
          STI    BI 
          LDD    CM+4 
          STM    1,BI 
          RJM    SFA         READ DRIVER STATUS BLOCK 
          ADN    EDSO 
          CRM    EQSB,BL
          RJM    CLB         CLEAR STATUS BLOCK 
          LDN    ZERL        CLEAR REQUEST
          CRD    CM 
          AOD    IR+3        ADVANCE ENTRY COUNT
          LDD    RA          UPDATE EQUIPMENT COUNT 
          SHN    6
          ADD    IR+2 
          CWD    IR 
          SBD    IR+2 
          ADN    DRQR 
          CWD    CM 
          LJM    MGR1        STORE STATUS BLOCK 
          TITLE  PROCESS OPERATOR REQUESTS. 
 CPH      SPACE  4,10 
**        CPH - CLEAR PRINTER HOLDING.
* 
*         EXIT TO *POF1*. 
  
  
 CPH      LDN    0           CLEAR HOLD FLAG
          STM    CMHF 
*         UJN    POF1        PROCESS OPERATOR FLAG
 POF      SPACE  4,15 
**        POF - PROCESS OPERATOR FLAG.
* 
*         ENTRY  (A) = OPERATOR REQUEST.
*                (EQ) = DEVICE TYPE.
*                (CM - CM+4) = BUFFER POINT WORD. 
* 
*         USES   CM+4, T1, T3.
* 
*         CALLS PROCESSOR WITH THE FOLLOWING CONDITIONS - 
*                (EQ) = DEVICE TYPE.
*                (T3) = REQUEST PARAMETER.
*                BUFFER NOT BUSY. 
* 
*         MACROS NFA. 
  
  
 POF1     LDM    CMER        SET REPEAT COUNT 
          SHN    6
          STD    CM+4 
          NFA    BF,R        STORE BUFFER POINT WORD
          CWD    CM 
  
 POF      SUBR               ENTRY/EXIT 
          STD    T1          SET REQUEST
          SBN    FPRE 
          PJN    POF1        IF ILLEGAL REQUEST 
          LDD    BS+4 
          LPN    1
          ZJN    POFX        IF BUFFER BUSY 
          LDM    CMPA 
          LMC    TOPA 
          ZJN    POFX        IF TERMINATION PROCESSING
          LDD    CM+4        SET REQUEST PARAMETER
          SHN    -6 
          STD    T3 
          LDM    TOPF,T1     PROCESS REQUEST
          STD    T1 
          LJM    0,T1        EXIT TO PROCESSOR
 CNT      SPACE  4,10 
**        CNT - CONTINUE PRINTING.
* 
*         EXIT   TO *POFX*. 
* 
*         CALLS  SDM. 
  
  
 CNT      LDN    0
          STM    CMHF 
          LDN    CNTM        SEND DAYFILE MESSAGE 
          RJM    SDM
 CNT1     UJN    POFX        RETURN 
 HLD      SPACE  4,10 
**        HLD - HOLD PRINTING.
* 
*         EXIT   TO *CNT1*. 
* 
*         CALLS  MSG, SDM.
  
  
 HLD      LDN    HLDM 
          RJM    SDM         SEND DAYFILE MESSAGE 
          LDN    EHLD 
          RJM    MSG         ISSUE BUFFER POINT MESSAGE 
          LDM    CMHF 
          SCN    1           SET HOLD FLAG
 HLD1     LMN    1
          STM    CMHF 
 HLD2     UJN    CNT1        RETURN 
 PPF      SPACE  4,10 
**        PPF - POSITION PRINT FILE.
* 
*         EXIT   TO *HLD1* IF DRIVER NOT HOLDING. 
*                TO *HLD2* IF DRIVER HOLDING. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  CPS. 
* 
*         MACROS NFA. 
  
  
 PPF      LDM    CMHF        CHECK DRIVER HOLDING 
          LPN    2
          ZJN    HLD1        IF DRIVER NOT HOLDING
          LDN    ZERL        SET UP BUFFER POINT PARAMETERS 
          CRD    CM 
          LDN    EHLD 
          STD    CM          SET MESSAGE CODE 
          LDM    CMER 
          STD    CM+4        SET REPEAT COUNT 
          NFA    BF,R 
          ADN    1           STORE BUFFER POINT WORD
          CWD    CM 
          LDC    PORF+1000   PROCESS OPERATOR REQUEST 
          RJM    CPS
          UJN    HLD2        RETURN 
 RRN      SPACE  4,10 
**        RRN - PROCESS RERUN.
* 
*         ENTRY  (EQ) = DEVICE TYPE.
* 
*         EXIT   TO *END2* IF CARD READER.
*                TO *TOP1* IF PUNCH OR PRINTER. 
* 
*         CALLS  SDM. 
  
  
 RRN      LDD    EQ 
          SBK    CRDT 
          ZJN    END2        IF CARD READER 
          LDN    RRNM        ISSUE RERUN MESSAGE
          RJM    SDM
*         LDN    0           CLEAR MESSAGE REQUEST
          STM    CMMR 
          LDC    RQFF+1000   REQUEUE FILE 
          LJM    TOP1        TERMINATE OPERATION
 END      SPACE  4,10 
**        END - PROCESS *END*.
* 
*         ENTRY  (T3) = NUMBER OF ENDS TO FORCE.
* 
*         EXIT   TO *PSE*.
* 
*         USES   T1, T3.
  
* 
*         CALLS  ECB, SDM, SFA. 
  
  
 END      LDD    T3          FORCE ONE END
          NJN    END1        IF .GE. ONE END
          AOD    T3 
 END1     AOM    CMER        DECREMENT REPEAT COUNT 
          SBD    T3 
          PJN    END2        IF REPEAT COUNT .GE. END COUNT 
          ADN    1           CLEAR REPEAT COUNT 
          RAD    T3 
          LDN    0           CLEAR REPEAT COUNT 
 END2     STM    CMER 
          LDN    ENDM        SEND DAYFILE MESSAGE 
          RJM    SDM
          LDC    1031        SET EOI/EOF
          STD    BS+4 
          RJM    SFA         STORE BUFFER STATUS
          CWD    BS 
          RJM    ECB         EMPTY CENTRAL BUFFER 
          LDM    ENDA,EQ
          STM    CMPA 
          LJM    PSE         PAUSE
  
  
 ENDA     INDEX              *END* PROCESSOR
          INDEX  LPDT,/3CZ/LPN  PRINT DAYFILE 
          INDEX  CPDT,/3CZ/PED  END OF FILE 
          INDEX  CRDT,TOP       TERMINATE OPERATION 
          INDEX  NPDT,/3CY/NPN  PRINT DAYFILE 
          INDEX  MXDT 
 REP      SPACE  4,15 
**        REP - PROCESS REPEAT. 
* 
*         ENTRY  (T3) = NUMBER OF REPEATS.
* 
*         EXIT   TO *POFX*. 
* 
*         USES   T3.
* 
*         CALLS  SDM. 
  
  
 REP      LDD    T3 
          NJN    REP1        IF .GE. ONE REPEAT 
          AOD    T3 
 REP1     RAM    CMER        ADVANCE REPEAT COUNT 
          SHN    -6 
          ZJN    REP2        IF REPEAT COUNT .LE. 77
          LDN    77 
          STM    CMER 
 REP2     LDN    REPM        SEND DAYFILE MESSAGE 
          RJM    SDM
 REP3     LJM    POFX        RETURN 
 SUP      SPACE  4,10 
**        SUP - TOGGLE SUPPRESS FLAG. 
* 
*         EXIT   TO *REP3*. 
* 
*         CALLS SDM.
  
  
 SUP      LDM    CMSF        TOGGLE SUPPRESS FLAG 
          LMN    4
          STM    CMSF 
          LDN    SUPM        SEND DAYFILE MESSAGE 
          RJM    SDM
          UJN    REP3        RETURN 
 TOPF     SPACE  4,30 
**        TOPF - TABLE OF OPERATOR REQUESTS PROCESSORS. 
* 
*         INDEXED BY REQUEST CODE. (DEFINED IN COMSBIO) 
*         ONE WORD ENTRY IN FORMAT -
* 
*T,       12/  ADDR 
*         ADDR   ADDRESS OF REQUEST PROCESSOR.
  
  
 TOPF     INDEX 
          INDEX  ENDM,END    END
          INDEX  REPM,REP    REPEAT 
          INDEX  SUPM,SUP    SUPPRESS 
          INDEX  RRNM,RRN    RERUN
          INDEX  HLDM,HLD    HOLD 
          INDEX  CNTM,CNT    CONTINUE 
          INDEX  BKPO,PPF    BACKSPACE PRUS 
          INDEX  BKRO,PPF    BACKSPACE RECORDS
          INDEX  BKFO,PPF    BACKSPACE FILES
          INDEX  SKPO,PPF    SKIP PRUS
          INDEX  SKRO,PPF    SKIP RECORDS 
          INDEX  SKFO,PPF    SKIP FILES 
          INDEX  CPHP,CPH    CLEAR PRINTER HOLDING
          INDEX  LNLP,PPF    LOCATE NEXT LINE 
          INDEX  LCBP,PPF    LOAD CENTRAL BUFFER
          INDEX  FPRE        TABLE TERMINATOR 
          TITLE  COMMON SUBROUTINES.
 ACT      SPACE  4,10 
**        ACT - PROCESS ACCOUNTING INFORMATION. 
* 
*         EXIT   (A) = STATUS RESPONSE FROM *CPS*.
* 
*         USES   CM, CM+3 - CM+4. 
* 
*         CALLS  CPS. 
  
  
 ACT      SUBR               ENTRY/EXIT 
          LDD    EQ 
          STD    CM+1        ENTER EQUIPMENT TYPE 
          LDM    CMRC 
          STD    CM+3 
          LDM    CMRC+1 
          STD    CM+4 
          LDD    FT          STORE REQUEST IN BUFFER
          SHN    6
          ADD    RA 
          SHN    6
          ADD    FT+1 
          CWD    CM 
          LDC    ACTF+1000   PROCESS ACCOUNTING 
          RJM    CPS
          UJN    ACTX        RETURN 
 ADB      SPACE  4,10 
**        ADB - ASSIGN DATA BUFFER. 
* 
*         ENTRY  (DB) = FWA OF LAST DATA BUFFER USED. 
* 
*         EXIT   (A) = (DA) = (CMDB) = BUFFER ADDRESS.
*                (DB) = FWA OF DATA BUFFER ASSIGNED.
*                ((DB)) = RELATIVE LOCATION BUFFER INDEX. 
*                TO *MGR1* IF NO DATA BUFFER AVAILABLE. 
* 
*         USES   DA, DB, T7.
  
  
 ADB3     LDD    BI          SET BUFFER ASSIGNED
          STI    DB 
          LDD    DB          ADDRESS OF DATA BUFFER 
          ADN    1
          STM    CMDB        FWA OF DATA (DB+1) IN DATA BUFFER
 ADB4     STD    DA 
  
 ADB      SUBR               ENTRY/EXIT 
          LDM    CMDB 
          NJN    ADB4        IF DATA BUFFER IS ASSIGNED TO THIS DEVICE
          STD    T7 
 ADB1     LDI    DB 
          ZJN    ADB3        IF THIS DATA BUFFER NOT ASSIGNED 
          LDC    0           CHECK NEXT DATA BUFFER 
 ADBA     EQU    *-1         (DATA BUFFER SIZE SET BY *PRS*)
          RAD    DB 
          LMC    0
 ADBB     EQU    *-1         (LWA+1 OF DATA BUFFERS SET BY *PRS*) 
          NJN    ADB2        IF NOT LAST DATA BUFFER
          LDC    0           LOOP TO FIRST DATA BUFFER
 ADBC     EQU    *-1         (FWA OF DATA BUFFERS SET BY *PRS*) 
          STD    DB 
 ADB2     AOD    T7 
 ADBD     LMN    0           (NUMBER OF DATA BUFFERS SET BY *PRS*)
          NJN    ADB1        IF NOT ALL DATA BUFFERS CHECKED
          LJM    MGR1        IGNORE REQUEST 
 AOP      SPACE  4,10 
**        AOP - ADVANCE OUT POINTER.
* 
*         ENTRY  (A) = NUMBER OF WORDS TO ADVANCE POINTER.
* 
*         USES   OT - OT+1. 
* 
*         CALLS  CDB. 
  
  
 AOP      SUBR               ENTRY/EXIT 
          RAD    OT+1        ADVANCE OUT POINTER
          SHN    -14
          RAD    OT 
          SBD    LM          OUT - LIMIT
          SHN    14 
          ADD    OT+1 
          SBD    LM+1 
          MJN    AOP1        IF NO WRAP AROUND
          ADD    FT+1 
          STD    OT+1 
          SHN    -14
          ADD    FT 
          STD    OT 
 AOP1     RJM    CDB         CHECK DATA REMAINING IN BUFFER 
          UJN    AOPX        RETURN 
 CCE      SPACE  4,15 
**        CCE - CHECK FOR CHANNEL ERROR.
* 
*         ENTRY  (A) = STATUS/DATA INDEX. 
*                (T5) = FUNCTION CODE.
* 
*         EXIT   (A) = 0 IF NO ERROR. 
*                      1 IF CHANNEL ERROR FLAG SET. 
* 
*         USES   T1, FC.
* 
*         CALLS  CRV, PRE.
  
  
 CCE1     LDD    T5          SAVE FUNCTION CODE FOR ERROR MESSAGE 
          STD    FC 
          LDD    T1          PROCESS RETRIED ERROR
          RJM    PRE
          LDN    1           ERROR RETURN 
  
 CCE      SUBR               ENTRY/EXIT 
          STD    T1          SAVE STATUS/DATA INDEX 
 CCEA     SFM.   CCE1,CH     IF CHANNEL ERROR FLAG SET
          RJM    CRV         CHECK FOR RECOVERED ERROR
*         LDN    0
          UJN    CCEX        RETURN 
 CDB      SPACE  4,10 
**        CDB - CHECK DATA IN OUTPUT BUFFER.
* 
*         EXIT   (A) = (CMBE) = NUMBER OF WORDS IN BUFFER.
  
  
 CDB      SUBR               ENTRY/EXIT 
          LDD    IN          LENGTH = IN - OUT
          SBD    OT 
          SHN    14 
          ADD    IN+1 
          SBD    OT+1 
          PJN    CDB1        IF IN .GE. OUT 
          SHN    6           LENGTH = (LIMIT - OUT) + (IN - FIRST)
          ADD    LM 
          SBD    FT 
          SHN    14 
          ADD    LM+1 
          SBD    FT+1 
 CDB1     STM    CMBE        SET LENGTH 
          UJN    CDBX        RETURN 
 CEP      SPACE  4,10 
**        CEP - CHANNEL ERROR PROCESSOR.
* 
*         EXIT   TO *TOP2*. 
* 
*         USES   BR.
* 
*         CALLS  RDB. 
  
  
 CEP      RJM    RDB         RELEASE DATA BUFFER
          STM    CMMR        CLEAR DAYFILE MESSAGE REQUEST
          AOD    BR          SET BUSY RETURN
          LDC    CECF+1000   DEACTIVATE EQUIPMENT 
          STM    CMLR 
          LJM    TOP2        TERMINATE OPERATION ON DEVICE
 CIB      SPACE  4,15 
**        CIB - CHECK INPUT BUFFER. 
* 
*         EXIT   (A) = WORD COUNT OF BUFFER.
*                IF WORD COUNT .LT. 1 SECTOR, A CALL WILL BE MADE TO
*                DUMP BUFFER. 
*                IF FIRST WRITE, MAKE PP SERVICE CALL TO INITIATE 
*                INPUT FILE.
* 
*         USES   BS+4, T1.
* 
*         CALLS  CPS. 
  
  
 CIB      SUBR               ENTRY/EXIT 
          LDD    BS+4        CHECK CURRENT STATUS 
          LPN    21 
          LMN    20 
          ZJP    MGR1        IF BUFFER BUSY AND EOR 
          LDD    OT          LENGTH = OUT - IN
          SBD    IN 
          SHN    14 
          ADD    OT+1 
          SBD    IN+1 
          ZJN    CIB1        IF IN = OUT
          PJN    CIB2        IF IN .LT. OUT 
 CIB1     SHN    6
          ADD    LM 
          SBD    FT          LENGTH = (LIMIT - IN) + (OUT - FIRST)
          SHN    14 
          ADD    LM+1 
          SBD    FT+1 
 CIB2     SBN    1
          STD    T1          SAVE LENGTH
          SHN    -6 
          NJN    CIB4        IF LENGTH .GE. 1 SECTOR
          LDD    BS+4 
          LPN    3
          STD    BS+4        REQUEST BUFFER WRITE 
          LDD    FA 
          ZJN    CIB3        IF FIRST WRITE 
          LDC    WTIF+1000&14 
 CIB3     LMC    WTIF+1000   SET REQUEST
          RJM    CPS
 CIB4     LDD    T1          SET LENGTH 
          LJM    CIBX        RETURN 
 CLB      SPACE  4,15 
**        CLB - CLEAR INTERNAL BUFFER.
* 
*         ENTRY  (EQ) = EQUIPMENT TYPE CODE.
* 
*         EXIT   (A) = 0. 
*                (T3) = ADDRESS OF *CMER*.
*                (BR) .NE. 0 (BUSY RETURN SET). 
*                (CMPA) = PROCESSOR ADDRESS.
*                (CMCT) = DEFAULT CONVERSION MODE.
  
  
 CLB      SUBR               ENTRY/EXIT 
          LDC    EQSB+CMER   SET LOWER LIMIT
          STD    BR 
          ADN    CMDA-CMER-1 SET UPPER LIMIT
          STD    T3 
          LDM    TEQD,EQ     SET PROCESSOR ADDRESS
          STM    CMPA 
          LDM    TDCM,EQ     SET DEFAULT CONVERSION MODE
          STM    CMCT 
 CLB1     LDN    0           CLEAR BUFFER 
          STI    T3 
          SOD    T3          DECREMENT BUFFER ADDRESS 
          LMD    BR 
          NJN    CLB1        IF NOT LOWER LIMIT 
          UJN    CLBX        RETURN 
 COB      SPACE  4,15 
**        COB - CHECK OUTPUT BUFFER.
* 
*         EXIT   (A) = WORD COUNT OF BUFFER.
*                IF WORD COUNT .LT. 1 SECTOR AND STATUS .NE. EOR
*                OR EOF, A CALL WILL BE MADE TO FILL BUFFER.
*                IF FILE IS A 12 BIT ASCII PRINT FILE, THE WORD 
*                COUNT THRESHOLD CHECK MADE IS FOR .LT. 2 SECTORS 
*                RATHER THAN 1 SECTOR.
*                IF BUFFER IS EMPTY, AND STATUS = EOR OR EOF, EXIT
*                WILL BE TAKEN TO APPROPRIATE PROCESSOR.
* 
*         USES   BS+4, T1 - T2. 
* 
*         CALLS  CDB, CPS.
  
  
 COB3     LDD    BS+4 
          LPN    1
          ZJN    COB4        IF BUFFER BUSY 
          STD    BS+4 
          LDM    COBC,EQ     REQUEST READ 
          RJM    CPS
 COB4     LDD    T1          RETURN WITH LENGTH 
  
 COB      SUBR               ENTRY/EXIT 
          RJM    CDB         CHECK DATA IN OUTPUT BUFFER
          STD    T1          SAVE LENGTH
          SBM    CMBT 
          PJN    COB4        IF LENGTH .LT. 1 OR 2 SECTORS
          LDD    BS+4        CHECK BUFFER STATUS
          LPN    20 
          ZJN    COB3        IF NOT EOR/EOF 
          LDD    T1 
          NJN    COBX        IF BUFFER NOT EMPTY
          LDD    BS+4 
          LPN    10 
          NJN    COB1        IF EOF/EOI 
          LDM    COBA,EQ
          UJN    COB2        SET EOR PROCESSOR
  
 COB1     LDM    COBB,EQ     SET EOF/EOI PROCESSOR
 COB2     STD    T2 
          LJM    0,T2        PROCESS EOF
  
  
*         END OF RECORD PROCESSORS. 
  
 COBA     INDEX 
          INDEX  LPDT,COB3   READ NEXT RECORD 
          INDEX  CPDT,/3CZ/PER  PUNCH EOR 
          INDEX  NPDT,COB3   READ NEXT RECORD 
          INDEX  MXDT 
  
*         END OF FILE PROCESSORS. 
  
 COBB     INDEX 
          INDEX  LPDT,/3CZ/LEF  LIST END OF INFORMATION 
          INDEX  CPDT,/3CZ/PEF  PUNCH END OF FILE 
          INDEX  NPDT,/3CY/NEF  LIST END OF INFORMATION 
          INDEX  MXDT 
  
*         READ REQUEST CODES. 
  
 COBC     INDEX 
          INDEX  LPDT,600    READEI 
          INDEX  CPDT,10     READ 
          INDEX  NPDT,600    READEI 
          INDEX  MXDT 
 CPS      SPACE  4,15 
**        CPS - CALL PP SERVICE PROGRAM.
* 
*         ENTRY  (A) = REQUEST. 
* 
*         EXIT   (A) = 0 IF REQUEST NOT ACCEPTED. 
* 
*         USES   BS+4, T0, CM - CM+4. 
* 
*         CALLS  *CIO*, *QAP*, SFA. 
* 
*         MACROS EXECUTE, MONITOR.
  
  
 CPS      SUBR               ENTRY/EXIT 
          STD    T0          SAVE REQUEST 
          SHN    -9D
          STD    CM+2 
          ZJN    CPS1        IF CIO REQUEST 
          SHN    9D          CLEAR UPPER THREE BITS OF REQUEST
          LMD    T0 
          STD    T0 
          LDC    3RPQA&3ROCI
 CPS1     LMC    3ROCI
          STD    CM 
          SHN    -6 
          SCN    77 
          STD    CM+1 
          LDD    BS+4        SAVE CURRENT BUFFER STATUS 
          STM    CPSB 
          LPN    1
          ZJN    CPSX        IF BUFFER BUSY 
          LMD    BS+4 
          LMD    T0 
          ZJN    CPSX        IF SAME OPERATION
          LDD    T0          SET REQUEST
          STD    BS+4 
          LDD    CM+2 
          STM    CMSB 
          LDI    BI          SET FET ADDRESS IN CALL
          STD    CM+3 
          LDM    1,BI 
          STD    CM+4 
          RJM    SFA         STORE BUFFER STATUS
          CWD    BS 
          EXECUTE  CIO,=
          EXECUTE  QAP,=
          LDD    MA 
          CWD    CM 
          LDN    0           ENABLE QUEUING OF PP REQUEST 
          STD    CM+1 
          MONITOR  RPPM 
          LDD    CM+1 
          NJN    CPS2        IF PP ASSIGNED 
          LDC    *
 CPSB     EQU    *-1
          STD    BS+4        RESTORE ORIGINAL STATUS
          RJM    SFA         SET FET ADDRESS
          CWD    BS 
          LDN    0
          STM    CMSB 
 CPS2     LJM    CPSX        RETURN 
 CRV      SPACE  4,10 
**        CRV - CHECK FOR RECOVERED ERROR.
* 
*         ENTRY  (A) = INDEX OF ERROR.
* 
*         EXIT   (A) = 0. 
* 
*         USES   T1, T3.
* 
*         CALLS  SDM. 
  
  
 CRV      SUBR               ENTRY/EXIT 
          STD    T1          SAVE INDEX 
          LDM    FRCI+EQSB,T1  GET ERROR COUNT
          ZJN    CRVX        IF NO PREVIOUS ERROR 
          SHN    6
          STD    T3          SAVE RETRY COUNT 
          LDN    0
          STM    FRCI+EQSB,T1  CLEAR ERROR COUNTER
          LDM    TERC,T1
          RJM    SDM
*         LDN    0
          UJN    CRVX        RETURN 
 CUL      SPACE  4,15 
**        CUL - CHECK USER LIMIT REACHED. 
* 
*         ENTRY  (A) = DECREMENT OF RECORD COUNT. 
*                (EQ) = EQUIPMENT TYPE CODE.
* 
*         EXIT   (A) = 0 IF USER LIMIT NOT EXCEEDED.
*                IF THE USER LIMIT IS EXCEEDED, 
*                THEN EXIT IS MADE TO THE RESPECTIVE
*                DRIVER.
* 
*         USES   T1.
* 
*         CALLS  CPS, ECB, MGR. 
  
  
 CUL4     LDN    0           RETURN WITH (A) = 0
  
 CUL      SUBR               ENTRY/EXIT 
          LMC    -0 
          RAM    CMRC+1 
          PJN    CUL4        IF NO UNDERFLOW
          AOM    CMRC+1 
          SOM    CMRC 
          PJN    CUL4        IF USER LIMIT NOT EXCEEDED 
          AOM    CMRC 
  
*         AN EXIT TO *CULX* IS NOT POSSIBLE AFTER THIS POINT. 
*         (SEE *PROGRAMMING CONSIDERATIONS*.) 
  
 CUL1     RJM    MGR         GO TO MANAGER
          LDD    BS+4        CHECK IF BUFFER ACTIVE 
          SHN    21-0 
          PJN    CUL1        IF BUFFER ACTIVE 
          RJM    ECB         EMPTY CENTRAL BUFFER 
 CUL2     LDC    PLEF+1000   REQUEST OUTPUT FILE TERMINATION
          RJM    CPS
 CUL3     RJM    MGR         GO TO MANAGER
          ZJN    CUL2        IF REQUEST NOT ENTERED 
          LDD    BS+4 
          SHN    21-0 
          PJN    CUL3        IF REQUEST NOT COMPLETE
          LDM    CMSF        CLEAR 6/12 AND 8/12 ASCII STATUS 
          SCN    50 
          STM    CMSF 
          LDM    CULA,EQ     SET PROCESSOR ADDRESS
          STD    T1 
          LJM    0,T1        PROCESS USER VALIDATION EXCEEDED 
  
  
 CULA     INDEX              VALIDATION EXCEEDED PROCESSORS 
          INDEX  LPDT,/3CZ/LPD4 
          INDEX  CPDT,/3CZ/CPD3 
          INDEX  NPDT,/3CY/NPD4 
          INDEX  MXDT 
ECB       SPACE  4,10 
**        ECB - EMPTY CIRCULAR BUFFER.
* 
*         EXIT   IN = OUT = FIRST.
* 
*         CALLS  SOP. 
  
  
 ECB      SUBR               ENTRY/EXIT 
          LDK    FT-EQSB     SET OUT = FIRST
          RJM    SOP         STORE OUT POINTER
          SBN    1           STORE IN POINTER 
          CWD    CM 
          UJN    ECBX        RETURN 
 MCC      SPACE  4,10 
**        MCC - MOVE AND CONVERT CHARACTER. 
* 
*         ENTRY  (A) = DISPLAY CODE CHARACTER.
*                (T2) = BYTE INDEX. 
* 
*         EXIT   (T0) = 0#23, IF ILLEGAL CHARACTER. 
*                (T2) DECREMENTED, IF CHARACTER NOT ESCAPE CODE.
*                (T3) = UNCONVERTED CHARACTER.
* 
*         USES   T2, T3.
  
  
 MCC3     ADN    76          SAVE UNCONVERTED NORMAL CHARACTER
 MCC4     STD    T3 
          SOD    T2          DECREMENT BUFFER INDEX 
          LDM    CTBL,T3     CONVERT CHARACTER
 MCC5     STM    1,T2 
  
 MCC      SUBR               ENTRY/EXIT 
          UJN    MCC4        CONVERT CHARACTER
*         PSN                (IF ASCII 6/12 FILE) 
 MCCA     EQU    *-1
          SBN    74 
          ZJN    MCC1        IF CHARACTER IS ESCAPE CODE 74 
          SBN    76-74
          NJN    MCC3        IF CHARACTER IS NOT ESCAPE CODE 76 
          LDD    T3 
          ZJN    MCC2        IF 7600
          SBN    37 
          PJN    MCC2        IF 7637 - 7677 
          ADC    140+37 
          UJN    MCC5        STORE CONVERTED CHARACTER
  
 MCC1     LDD    T3 
          SBN    MCCBL
          PJN    MCC2        IF ILLEGAL CHARACTER 
          LDM    MCCB,T3
          NJN    MCC5        IF LEGAL CHARACTER 
 MCC2     LDN    0#23        FLAG ILLEGAL CHARACTER 
          STD    T0 
          LDN    0#20        REPLACE WITH BLANK 
          UJN    MCC5        STORE CHARACTER
  
  
*         TABLE OF 74XX CHARACTERS. 
  
 MCCB     BSS    0
          CON    0           ILLEGAL
          CON    100         COMMERCIAL AT
          CON    136         CIRCUMFLEX 
          CON    0           ILLEGAL
 MCCC     CON    72          COLON   (64 CHARACTER SET) 
*         CON    45          PERCENT (63 CHARACTER SET) 
          CON    0           ILLEGAL
          CON    0           ILLEGAL
          CON    140         GRAVE
 MCCBL    EQU    *-MCCB 
 MSG      SPACE  4,10 
**        MSG - SET BUFFER POINT MESSAGE. 
* 
*         ENTRY  (A) = MESSAGE NUMBER.
* 
*         USES   T1, CM - CM+4. 
* 
*         MACROS NFA. 
  
  
 MSG      SUBR               ENTRY/EXIT 
          STD    T1 
          NFA    BF,R        READ MESSAGE CONTROL 
          ADN    1
          CRD    CM 
          LDD    CM          CHECK PREVIOUS MESSAGE 
          LMD    T1 
          ZJN    MSGX        IF SAME AS CURRENT MESSAGE 
          LDD    T1          SET BUFFER POINT MESSAGE 
          STD    CM 
          SBN    ENEC 
          MJN    MSG1        IF NOT ERROR CONDITION 
          LDD    CP          STORE CONTROL POINT MESSAGE
          ADN    MS2W 
          CWM    MSGA,TR
 MSG1     NFA    BF,R        STORE BUFFER POINT MESSAGE 
          ADN    1
          CWD    CM 
          UJN    MSGX        RETURN 
  
  
 MSGA     DATA   C+$REQUEST *I* DISPLAY.+ 
 PMR      SPACE  4,10 
**        PMR - PROCESS MESSAGE REQUEST.
* 
*         EXIT   (A) = 0 IF NO REQUEST OR REQUEST PROCESSED.
* 
*         USES   BS+4.
* 
*         CALLS  CPS, SFA.
  
  
 PMR2     LDD    BS+4        CHECK BUFFER BUSY
          LPN    1
          ZJN    PMR4        IF BUSY
          LDM    CMBS 
          STD    BS+4        RESTORE PREVIOUS STATUS
          RJM    SFA         SET FET ADDRESS
          CWD    BS 
          LDN    0
 PMR3     STM    CMMR        INDICATE REQUEST IN PROGRESS/COMPLETED 
          ADN    1
 PMR4     LMN    1           SET EXIT CONDITIONS
  
 PMR      SUBR               ENTRY/EXIT 
          LDM    CMMR 
          ZJN    PMRX        IF NO REQUEST
          SHN    6
          MJN    PMR2        IF REQUEST IN PROGRESS 
          LDC    PDMF+1000   PROCESS DAYFILE MESSAGE
          RJM    CPS
          ZJN    PMR4        IF REQUEST NOT HONORED 
          LDM    CPSB 
          LMC    PDMF+3 
          ZJN    PMR1        IF PREVIOUS STATUS MESSAGE PROCESSING
          LMC    PDMF+3 
          STM    CMBS        SAVE PREVIOUS STATUS 
 PMR1     LCN    7
          UJN    PMR3        SET REQUEST IN PROGRESS
 PRE      SPACE  4,10 
**        PRE - PROCESS RETRIED ERROR.
* 
*         ENTRY  (A) = INDEX OF ERROR.
* 
*         EXIT   TO *CEP* IF MAXIMUM RETRIES REACHED. 
* 
*         USES   T1.
* 
*         CALLS  SDM, WST.
  
  
 PRE      SUBR               ENTRY/EXIT 
          STD    T1          SAVE INDEX 
          RJM    WST         WRITE STATUS TO FET
          AOM    FRCI+EQSB,T1  INCREMENT ERROR COUNTER
          SBM    TMAX,T1     COMPARE TO MAXIMUM 
          NJN    PREX        IF NOT AT MAXIMUM
  
*         ISSUE MESSAGE AND TERMINATE OPERATION.
  
          LDM    FRCI+EQSB,T1  GET RETRY COUNT
          SHN    6
          ADN    1           SET UNRECOVERED FLAG 
          STD    T3 
          LDN    0           CLEAR COUNTER
          STM    FRCI+EQSB,T1 
          LDM    TERC,T1
          RJM    SDM
          LJM    CEP         CHANNEL ERROR PROCESSOR
 TERC     SPACE  4,10 
**        TERC - TABLE OF ERROR CODES.
  
  
 TERC     INDEX 
          INDEX  DRRI,EITM   INCOMPLETE DATA TRANSFER 
          INDEX  FRJI,ERJM   INTERNAL/EXTERNAL REJECT 
          INDEX  SCEI,ECRE   CHANNEL PARITY ERROR - STATUS
          INDEX  DCPI,ECRE   CHANNEL PARITY ERROR - DATA
          INDEX  PERI,EPLM   PRINT ERROR
          INDEX  MXRI 
 TMAX     SPACE  4,10 
**        TMAX - TABLE OF MAXIMUM RETRIES.
  
  
 TMAX     INDEX 
          INDEX  DRRI,ERRL   INCOMPLETE DATA TRANSFER 
          INDEX  FRJI,ERRL   INTERNAL/EXTERNAL REJECT 
          INDEX  SCEI,CHPR   CHANNEL PARITY ERROR - STATUS
          INDEX  DCPI,CHPR   CHANNEL PARITY ERROR - DATA
          INDEX  PERI,PERL   PRINT ERROR
          INDEX  MXRI 
 PSD      SPACE  4,15 
**        PSD - PRESET DRIVER.
* 
*         ENTRY  (FA) = FST ADDRESS.
*                (UL - UL+1) = USER LIMITS. 
* 
*         EXIT   FILE REWOUND.
*                USER LIMITS SET IN *CMRC*. 
*                6/12 AND 8/12 ASCII PRINT FLAGS SET/CLEAR IN *CMSF*. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS NFA. 
  
  
 PSD      SUBR               ENTRY/EXIT 
          LDD    F2+2        SET/CLEAR ASCII PRINT FILE FLAGS 
          LPN    24 
          SHN    1
          STM    CMSF 
          NFA    FA,R        READ FST INFORMATION 
          CRD    CM 
          LDD    CM+1        REWIND FILE
          STD    CM+2 
          LDN    FSMS 
          STD    CM+3 
          NFA    FA,R        STORE FST INFORMATION
          CWD    CM 
          LDD    UL          SET USER LIMITS
          STM    CMRC 
          LDD    UL+1 
          STM    CMRC+1 
          UJN    PSDX        RETURN 
 RCB      SPACE  4,15 
**        RCB - READ CODED BUFFER.
* 
*         ENTRY  (A) = CM WORD LIMIT FOR LINE/CARD IMAGE. 
* 
*         EXIT   (A) = (CMLR) = LENGTH OF LINE/CARD IN BYTES. 
*                (T2 - T6) = FIRST WORD NEXT LINE/CARD. 
*                (CM - CM+4) = LAST WORD CURRENT LINE/CARD. 
*                (OT - OT+1) UPDATED. 
*                (T1) = ADDRESS + 1 OF LAST CHARACTER TRANSLATED. 
* 
*         USES   T1 - T7. 
* 
*         CALLS  MCC, RNL, SCN. 
  
  
 RCB3     LDI    T7          CHECK NEXT CHARACTER 
          LPC    3777        IGNORE HIGH-ORDER BIT
          SBN    40 
          MJN    RCB4        IF INCORRECT CHARACTER 
          SBK    177-40 
          MJN    RCB5        IF LEGAL CHARACTER 
 RCB4     LDN    40          SUBSTITUTE BLANK 
          STI    T7 
          LDN    43          SET INCORRECT CHARACTER IN LINE
          STM    1,DA 
 RCB5     AOD    T7          ADVANCE BUFFER ADDRESS 
          LMD    T1 
 RCB6     NJN    RCB3        IF NOT EOL 
*         PSN                (NON-IMPACT PRINTER) 
 RCBA     EQU    RCB6 
 RCB7     LDD    OT          READ NEXT WORD 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    OT+1 
          CRD    T2 
          LDD    T1          SET BYTE COUNT FOR LINE/CARD IMAGE 
          SBD    DA 
          STM    CMLR 
  
 RCB      SUBR               ENTRY/EXIT 
          STD    T3 
          LDC    1S12        READ CODED LINE/CARD 
          LMD    DA 
          RJM    RNL
          LDD    T1 
          SBD    T7 
          ZJN    RCB7        IF EMPTY LINE OR CARD
          LDM    CMSF        CHECK MODE OF FILE 
          LPN    50 
          ZJN    RCB1        IF NOT ASCII FILE
          LPN    10 
          NJN    RCB6        IF 8/12 ASCII FILE 
          STD    T0          INITIALIZE ILLEGAL CHARACTER FLAG
          UJN    RCB1.1      ENABLE 6/12 CONVERSION IN *MCC*
  
*         CONVERT LINE OR CARD IMAGE. 
  
 RCB1     LDC    **          DISABLE 6/12 CONVERSION IN *MCC* 
          ORG    *-1
          LOC    MCCA 
          UJN    MCC4        SKIP 6/12 CONVERSION 
          LOC    *O 
 RCB1.1   STM    MCCA 
          RJM    SCN         LOAD CONVERSION TABLE
          SOD    T1          SET END OF DATA IN BUFFER
          STD    T4 
          ADN    1
          SBD    DA          SET END OF UNPACKED DATA 
          SHN    1
          ADD    DA 
          STD    T1 
          SBN    1
          STD    T2 
          LDI    T4          SAVE LAST CHARACTER FOR PUNCH DRIVER 
          LPN    77 
          STD    T7 
 RCB2     LDI    T4          UNPACK DATA BYTE 
          LPN    77 
          RJM    MCC         MOVE AND CONVERT CHARACTER 
          LDI    T4 
          SHN    -6 
          RJM    MCC         MOVE AND CONVERT CHARACTER 
          SOD    T4          DECREMENT DATA ADDRESS 
          SBD    DA 
          PJN    RCB2        IF NOT START OF BUFFER 
          LDM    CMSF 
          LPN    40 
          ZJN    RCB2.3      IF NOT 6/12 ASCII
          LDD    DA          SET BUFFER INDEX 
          STD    T3 
 RCB2.1   AOD    T2 
          SBD    T1 
          PJN    RCB2.2      IF END OF DATA 
          LDI    T2          MOVE DATA BYTE 
          STI    T3 
          AOD    T3 
          UJN    RCB2.1      READ NEXT BYTE 
  
 RCB2.2   LDD    T3          SET NEW LWA+1
          STD    T1 
          LDD    T0 
          ZJN    RCB2.3      IF NO ILLEGAL CHARACTERS IN LINE 
          STM    1,DA        FLAG ILLEGAL CHARACTER(S)
 RCB2.3   LJM    RCB7        READ NEXT WORD 
 RDB      SPACE  4,10 
**        RDB - RELEASE DATA BUFFER.
* 
*         ENTRY  (CMDB) = FWA+1 OF DATA BUFFER ASSIGNED.
* 
*         EXIT   (A) = (CMDB) = 0.
*                (DB) = FWA OF DATA BUFFER RELEASED.
*                ((DB)) = 0.
* 
*         USES   DB.
  
  
 RDB1     SBN    1
          STD    DB 
          LDN    0           RELEASE DATA BUFFER
          STI    DB 
          STM    CMDB 
  
 RDB      SUBR               ENTRY/EXIT 
          LDM    CMDB 
          NJN    RDB1        IF DATA BUFFER IS ASSIGNED 
          UJN    RDBX        RETURN 
 RNL      SPACE  4,15 
**        RNL - READ NEXT LINE (CARD).
* 
*         ENTRY  (A) BITS 0 - 11 = PP BUFFER ADDRESS. 
*                    BITS 12 - 17 = 0 IF BINARY READ. 
*                                 = 1 IF CODED READ.
*                (T3) = NUMBER OF WORDS TO READ.
*                (CMBE) = NUMBER OF WORDS IN CENTRAL BUFFER.
* 
*         EXIT   (T1) = END OF DATA IN PP BUFFER (CODED READ ONLY). 
*                (T3) = ACTUAL WORD COUNT TO END OF LINE (CARD).
*                (T7) = PP BUFFER ADDRESS.
* 
*         USES   T0 - T1, T3 - T7.
* 
*         CALLS  AOP. 
  
  
 RNL      SUBR               ENTRY/EXIT 
          STM    RNLB        SET PP BUFFER ADDRESS
          STD    T1 
          STD    T7 
          SHN    -14         SAVE BINARY / CODED READ FLAG
          STD    T6 
          LDM    CMBE        CHECK DATA IN CENTRAL BUFFER 
          SBD    T3 
          PJN    RNL1        IF SUFFICIENT DATA 
          RAD    T3 
 RNL1     LDD    T3          NUMBER OF WORDS TO READ
          STD    T5 
          LDD    LM          LIMIT - OUT
          SBD    OT 
          SHN    14 
          ADD    LM+1 
          SBD    OT+1 
          STD    T0          NUMBER OF WORDS FROM *OUT* TO *LIMIT*
          SBD    T3 
          PJN    RNL2        IF NO WRAP AROUND
          LMC    -0          NUMBER OF WORDS STARTING AT *FIRST*
          STD    T4 
          LDD    T0          WORD COUNT FROM *OUT* TO *LIMIT* 
          STD    T5 
          SHN    2
          ADD    T5 
          ADD    T1          BUFFER ADDRESS FOR FIRST READ
          STM    RNLA 
          LDD    FT          READ WRAP AROUND 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    FT+1 
          CRM    **,T4
 RNLA     EQU    *-1
 RNL2     LDD    OT          READ LINE
          SHN    6
          ADD    RA 
          SHN    6
          ADD    OT+1 
          CRM    **,T5
 RNLB     EQU    *-1
          LDD    T6 
          ZJN    RNL7        IF BINARY READ 
          SOD    T1 
          LDN    0
          STD    T4 
 RNL3     LDN    5           SEARCH FOR EOL 
          RAD    T1 
          AOD    T4 
          LMD    T3 
          ZJN    RNL5        IF REQUESTED NUMBER OF WORDS CHECKED 
          LDI    T1 
          NJN    RNL3        IF NOT EOL 
 RNL4     SOD    T1 
 RNL5     LDI    T1 
          ZJN    RNL4        IF EOL 
          AOD    T1 
          SBD    T7 
          PJN    RNL6        IF NOT EMPTY LINE
          LDD    T7 
          STD    T1 
 RNL6     LDD    T4 
          STD    T3 
 RNL7     LDD    T3          ADVANCE OUT POINTER
          RJM    AOP
          LJM    RNLX        RETURN 
 SCN      SPACE  4,10 
**        SCN - SET CONVERSION TABLE. 
  
  
 SCN      SUBR               ENTRY/EXIT 
          LDM    CMCT        CHECK TABLE IN MEMORY
          LMM    CTID 
          ZJN    SCNX        IF TABLE LOADED
          LDD    RA          LOAD CONVERSION TABLE
          SHN    6
          ADN    CTIR 
          ADM    CMCT 
          CRM    CTID,TL
          UJN    SCNX        RETURN 
 SDM      SPACE  4,10 
**        SDM - SEND DAYFILE MESSAGE. 
* 
*         ENTRY  (A) = MESSAGE CODE.
*                (T3) = MPARAM 1 (RETRIED ERRORS ONLY). 
*                (FC) = MPARAM 3. 
*                      (SEE BUFFER POINT AREA DESCRIPTION IN
*                      *COMSBIO* FOR *MPARAM* VALUES.)
* 
*         EXIT   (A) = 0. 
* 
*         USES   T1, T2, T4, T5, CM - CM+4. 
* 
*         MACROS NFA. 
  
  
 SDM1     LDN    **          SET BY *PRS* 
 SDMA     EQU    *-1         PP NUMBER
          STD    T4          (T4) = PP NUMBER 
          LDD    FC 
          STD    T5 
          NFA    BF,R        READ MESSAGE CONTROL 
 SDM2     ADN    1
          CRD    CM 
          LDD    CM          PRESERVE *I* DISPLAY 
          STD    T1 
          NFA    BF,R        STORE MESSAGE PARAMETERS 
          ADN    1
          CWD    T1 
          LDN    0
  
 SDM      SUBR               ENTRY/EXIT 
          STM    CMMR 
          STD    T2          STORE MESSAGE CODE 
          SBN    ORME 
          PJN    SDM1        IF NOT OPERATOR REQUEST
          LDM    CMER 
          SHN    6           ENTER REPEAT COUNT 
          STD    CM+4 
          NFA    BF,R        STORE REPEAT COUNT 
          CWD    CM 
          UJN    SDM2        READ MESSAGE CONTROL 
 SFA      SPACE  4,10 
**        SFA - SET FET ADDRESS.
* 
*         ENTRY  ((BI - BI+1)) = RELATIVE FET ADDRESS.
* 
*         EXIT   (A) = FET ADDRESS. 
  
  
 SFA      SUBR               ENTRY/EXIT 
          LDI    BI 
          SHN    6
          ADD    RA 
          SHN    6
          ADM    1,BI 
          UJN    SFAX        RETURN 
 SOP      SPACE  4,10 
**        SOP - STORE OUT POINTER.
* 
*         ENTRY  (A) = ADDRESS OF VALUE TO BE PLACED IN POINTER.
* 
*         EXIT   (A) = ADDRESS OF OUT POINTER.
*                (CM - CM+4) = OUT POINTER. 
* 
*         USES   T0, CM - CM+4. 
* 
*         CALLS  SFA. 
  
  
 SOP      SUBR               ENTRY/EXIT 
          ADC    EQSB 
          STD    T0 
          LDN    ZERL        CLEAR ASSEMBLY 
          CRD    CM 
          LDI    T0          GENERATE POINTER WORD
          STD    CM+3 
          AOD    T0 
          LDI    T0 
          STD    CM+4 
          RJM    SFA         STORE OUT POINTER
          ADN    3
          CWD    CM 
          UJN    SOPX        RETURN 
 TOF      SPACE  4,10 
**        TOF - TERMINATE OUTPUT FILE.
* 
*         USES   BS+4, CM - CM+4. 
* 
*         CALLS  CLB, ECB, RDB, SFA.
* 
*         MACROS NFA. 
  
  
 TOF      NFA    BF,R        READ BUFFER POINT WORD 
          CRD    CM 
          RJM    RDB         RELEASE DATA BUFFER
          SOM    CMER 
          MJN    TOP         IF REPEAT COUNT SATISFIED
          SHN    6
          STD    CM+4 
          NFA    BF,R        STORE ADJUSTED REPEAT COUNT
          CWD    CM 
          LDK    ZERL 
          CRD    CM 
          LDN    1           RESET BUFFER STATUS
          STD    BS+4 
          RJM    SFA         STORE BUFFER STATUS
          CWD    BS 
          ADN    FPSN 
          CWD    CM          CLEAR CURRENT RANDOM INDEX 
          RJM    ECB         EMPTY CIRCULAR BUFFER
          LDD    BI          INITIALIZE BUFFER
          RJM    CLB
          LJM    MGR1        GO TO MANAGER
 TOP      SPACE  4,10 
**        TOP - TERMINATE OPERATION.
* 
*         USES   BR, IR+3, CM - CM+4, T6 - T7.
* 
*         CALLS  CPS, MGR, RDB, REC, SFA. 
* 
*         MACROS MONITOR, NFA.
  
  
 TOP      LDN    60          *UNLOAD* FILE
  
*         *TOP1* IS A SECONDARY ENTRY POINT FOR *TOP*.
  
 TOP1     STM    CMLR        SAVE LAST REQUEST
          RJM    RDB         RELEASE DATA BUFFER
          AOD    BR          SET BUSY RETURN
          RJM    MGR         GO TO MANAGER
          RJM    **          RELEASE EQUIPMENT
 TOPB     EQU    *-1         (SET BY *PRS*) 
*         RJM    /3CZ/REC 
*         RJM    /3CY/REC 
  
*         *TOP2* IS A SECONDARY ENTRY POINT FOR *TOP*.
  
 TOP2     LDM    CMLR        ISSUE LAST REQUEST 
          ZJN    TOP4        IF NO REQUEST
          RJM    CPS         CALL *QAP*/*CIO* 
 TOP3     RJM    MGR         GO TO MANAGER
 TOPA     EQU    *
          ZJN    TOP2        IF REQUEST NOT ISSUED
          LDD    BS+4 
          LPN    1
          LMN    1
          NJN    TOP3        IF REQUEST NOT COMPLETE
  
*         *TOP4* IS A SECONDARY ENTRY POINT FOR *TOP*.
  
 TOP4     LDN    ZERL        CLEAR BUFFER STATUS
          CRD    CM-2 
          RJM    SFA         SET FET ADDRESS
          CWD    CM-2 
          LDM    CMEN        SET EQUIPMENT NUMBER 
          SHN    -3 
          STD    CM+1 
          NFA    BF,R        STORE BUFFER POINT WORD
          CWD    CM-2 
          SOD    IR+3        DECREMENT ENTRY COUNT
          LDD    RA 
          SHN    6
          ADD    IR+2 
          CWD    IR 
          AOD    SB          DISABLE STATUS BLOCK UPDATE
          MONITOR  DEQM 
*         LDN    0           CLEAR BUFFER ASSIGNMENT
          STI    BI 
          STM    1,BI 
          LJM    PSE         RETURN TO MANAGER
 WST      SPACE  4,10 
**        WST - WRITE STATUS TO FET.
* 
*         CALLS  SFA. 
  
  
 WST      SUBR               ENTRY/EXIT 
          RJM    SFA
          ADN    FPW2 
          CWD    F2 
          UJN    WSTX        RETURN 
          SPACE  4,10 
**        COMMON DATA BUFFER AREA.
  
  
 CBUF     BSSZ   BUFS*MEQD   BUFFER ASSIGNMENT TABLE
 CBUFL    BSS    0           LWA+1 OF BUFFER ASSIGNMENT TABLE 
 EQSB     SPACE  4,10 
**        EQSB - EQUIPMENT STATUS BUFFER. 
  
  
 EQSB     BSS    0           FWA OF DRIVER STATUS BLOCK 
 EQSBL    EQU    EQSB+EDSBL*5  LWA+1 OF DRIVER STATUS BLOCK 
 ZBA      SPACE  4,15 
**        ZBA - ZERO DATA BUFFER ASSIGNMENT.
* 
*         ENTRY  (T1) = FWA OF DATA BUFFERS.
*                (T2) = DATA BUFFER SIZE. 
*                (T3) = LWA+1 OF DATA BUFFERS.
* 
*         EXIT   (CTID) = 7777. 
*                (MSD) = 0. 
*                TO *MGR1*. 
* 
*         NOTE   THIS ROUTINE IS OVERLAYED BY *EQSB*. 
  
  
 ZBA      BSS    0           ENTRY
 ZBA1     LDN    0           CLEAR BUFFER ASSIGNMENT
          STI    T1 
          LDD    T2          SET NEXT BUFFER
          RAD    T1 
          LMD    T3 
          NJN    ZBA1        IF MORE TO CLEAR 
          STM    MSD         CLEAR MASS STORAGE DESIGNATOR
          LCN    0           ENSURE INITIAL CONVERSION TABLE LOAD 
          STM    CTID 
          LJM    MGR1        EXIT TO MANAGER
          SPACE  4,10 
**        SUB-DRIVER OVERLAY AREA.
* 
*         NOTE   OVERLAY HEADER IS OVERLAYED BY *EQSB*. 
  
  
 OVLA     EQU    EQSBL-4     FWA OF SUBDRIVER OVERLAY AREA
  
  
          ERRNG  OVLA-*-5    OVERLAY LOAD DESTROYS ** 
          TITLE  DRIVER PRESET. 
 PRS      SPACE  4,20 
**        PRS - DRIVER PRESET.
* 
*         ENTRY  (IR+4) = SUB-DRIVER NUMBER.
* 
*         EXIT   (BI) = *CBUF*. 
*                (TL) = CONVERSION TABLE LENGTH.
* 
*         ERROR  *HNGM* MONITOR FUNCTION ISSUED.  PP DROPPED AND EXIT 
*                TO *PPR* WHEN *HNGM* REQUESTED CLEARED.
* 
*         CALLS  EXR. 
* 
*         MACROS MONITOR. 
  
  
 PRS3     MONITOR  HNGM      HANG PP
          MONITOR  DPPM 
          LJM    PPR         EXIT TO PPR
  
 PRS      BSS    0           ENTRY
          LDD    IR+4 
          SBN    MXSD 
          PJN    PRS3        IF INVALID SUB-DRIVER
          LDK    CHTP        GET CHANNEL TABLE POINTER
          CRD    CM 
          LDD    CM+3        SET CHANNEL TABLE ADDRESS
          STM    PSEA 
          LDD    CM+2 
          RAM    PSEA-1 
          LDN    CTLN        SET TABLE LENGTH 
          STD    TL 
          LDN    EDSBL       SET EQUIPMENT STATUS BLOCK LENGTH
          STD    BL 
          STD    SB 
          LDC    CBUF        INITIALIZE BUFFER TABLE SERACH 
          STD    BI 
          LDK    IPRL        CHECK SYSTEM DEFAULT KEYPUNCH MODE 
          CRD    CM 
          LDD    CM+2 
          SHN    21-13
          PJN    PRS1        IF DEFAULT IS O26
          LDN    C9XD        SET O29 CONVERSION MODE FOR CARD READER
          STM    TDCM+CRDT
 PRS1     LDK    MABL        FETCH PP SPEED INDICATOR 
          CRD    CM 
          LDD    CM+4        SET TIMEOUT VALUE
          SHN    1
          NJN    PRS2        IF NOT 1X PPS
          LDN    1
 PRS2     RAM    MGRA 
          LDN    PPCP        PRESET PP NUMBER 
          CRD    CM 
          LDD    IA 
          SBD    CM+4 
          SHN    -3 
          RAM    SDMA        PP NUMBER FOR BML MESSAGE
          LDM    TDBF,IR+4   SET FWA OF FIRST DATA BUFFER 
          STM    ADBC 
          LDM    TDBN,IR+4   SET NUMBER OF DATA BUFFERS 
          RAM    ADBD 
          LDM    TDBL,IR+4   SET LWA+1 OF DATA BUFFERS
          STM    ADBB 
          LDM    TDBS,IR+4   SET DATA BUFFER SIZE 
          STM    ADBA 
          LDM    TREC,IR+4   SET RELEASE EQUIPMENT ADDRESS
          STM    TOPB 
          LDM    TSDP,IR+4   SET SUB-DRIVER PROCESSOR ADDRESS 
          STM    MGRB 
          LDC    1R3*10000   SET SUB-DRIVER OVERLAY NAME
          LMM    TSDO,IR+4
          EXECUTE  3CZ,=
          EXECUTE  3CY,=
          RJM    EXR         EXECUTE SUB-DRIVER 
 TDBF     SPACE  4,10 
**        TDBF - TABLE OF FWA OF FIRST DATA BUFFER. 
* 
*         INDEXED BY SUB-DRIVER TYPE. 
  
  
 TDBF     INDEX 
          INDEX  0,/3CZ/DBUF
          INDEX  1,/3CY/DBUF
          INDEX  MXSD 
 TDBN     SPACE  4,10 
**        TDBN - TABLE OF NUMBER OF DATA BUFFERS. 
* 
*         INDEXED BY SUB-DRIVER TYPE. 
  
  
 TDBN     INDEX 
          INDEX  0,/3CZ/NDBUF 
          INDEX  1,/3CY/NDBUF 
          INDEX  MXSD 
 TDBL     SPACE  4,10 
**        TDBL - TABLE OF LWA+1 OF DATA BUFFERS.
* 
*         INDEXED BY SUB-DRIVER TYPE. 
  
  
 TDBL     INDEX 
          INDEX  0,/3CZ/DBUFL 
          INDEX  1,/3CY/DBUFL 
          INDEX  MXSD 
 TDBS     SPACE  4,10 
**        TDBS - TABLE OF DATA BUFFER SIZES.
* 
*         INDEXED BY SUB-DRIVER TYPE. 
  
  
 TDBS     INDEX 
          INDEX  0,/3CZ/DBUFS 
          INDEX  1,/3CY/DBUFS 
          INDEX  MXSD 
 TREC     SPACE  4,10 
**        TREC - TABLE OF RELEASE EQUIPMENT PROCESSORS. 
* 
*         INDEXED BY SUB-DRIVER TYPE. 
  
  
 TREC     INDEX 
          INDEX  0,/3CZ/REC 
          INDEX  1,/3CY/REC 
          INDEX  MXSD 
 TSDO     SPACE  4,10 
**        TSDO - TABLE OF SUB-DRIVER OVERLAY NAMES. 
* 
*         INDEXED BY SUB-DRIVER TYPE. 
  
  
 TSDO     INDEX 
          INDEX  0,2RCZ 
          INDEX  1,2RCY 
          INDEX  MXSD 
 TSDP     SPACE  4,10 
**        TSDP - TABLE OF SUB-DRIVER PROCESSOR ADDRESSES. 
* 
*         INDEXED BY SUB-DRIVER TYPE. 
  
  
 TSDP     INDEX 
          INDEX  0,/3CZ/SDP 
          INDEX  1,/3CY/SDP 
          INDEX  MXSD 
 XCD      TTL    1CD/3CZ - BATCHIO COMBINED DRIVER. 
          TITLE 
          QUAL   3CZ
          IDENT  3CZ,XCDX 
*COMMENT  1CD - DRIVE *DCC*-CONNECTED DEVICES.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 3CZ      SPACE  4,10 
***       1CD/3CZ - BATCHIO COMBINED DRIVER.
* 
*         THIS SUB-DRIVER OVERLAY CONTAINS DRIVERS TO ACCESS DEVICES
*         THAT ARE CONNECTED VIA A DATA CHANNEL CONVERTER (DCC).
 3CZ      SPACE  4,10 
          ORG    OVLA 
  
 XCD      SUBR               ENTRY/EXIT 
          CHTE   CCEA 
          LJM    PRS         PRESET 
          TITLE  3555/512 - 580 DRIVER SECTION. 
 LPD      SPACE  4,10 
**        LPD - 3555/512 - 580 DRIVER.
  
  
 LPD      RJM    PSD         PRESET DRIVER
 LPD1     LDC    GBPF+2000   REQUEST BANNER PAGE GENERATION 
          RJM    CPS
 LPD2     RJM    MGR         GO TO MANAGER
          ZJN    LPD1        IF REQUEST NOT ACCEPTED
          LDD    BS+4        CHECK BUFFER STATUS
          LMC    GBPF+1 
          ZJN    LPD4        IF OPERATION COMPLETE
          LMN    4
          ZJN    LPD3        IF USER FORMS CONTROL ON PREVIOUS JOB
          LMC    CECF&GBPF+4
          NJN    LPD2        IF NOT PFC ERROR 
          LJM    TOP4        TERMINATE OPERATION
  
*         PHASE 1.  LOAD BUFFER.
  
 LPD3     SCN    2           SET DRIVER HOLDING 
          LMN    2
          STM    CMHF 
  
*         *LPD4* IS A SECONDARY ENTRY POINT FOR *LPD*.
  
 LPD4     LDN    1           SET BUSY RETURN
          STD    BR 
          RJM    MGR         GO TO MANAGER
          LDM    CMHF 
          NJN    LPD3        IF HOLD INITIATED
          RJM    COB         CHECK OUTPUT BUFFER
          SBN    DBUFW*2+1
          PJN    LPD5        IF AT LEAST 1 LINE AND 1 WORD
          LDD    BS+4 
          LPN    20 
          ZJN    LPD4        IF NOT EOR/EOF/EOI 
 LPD5     RJM    ADB         ASSIGN DATA BUFFER 
          LDN    0
          STM    LPFT        CLEAR FORMAT TAPE AND PM MESSAGE FLAGS 
          STD    BR          CLEAR BUSY RETURN
          LDM    CMSF        CHECK MODE OF FILE 
          LPN    50 
          ZJN    LPD6        IF NOT 6/12 OR 8/12 ASCII PRINT FILE 
          LDN    DBUFW
 LPD6     ADN    DBUFW       READ CODED BUFFER
          RJM    RCB
          NJN    LPD8        IF NOT EMPTY LINE
 LPD7     LDN    40          SET SPACE CHARACTER
          STI    T1 
          AOD    T1 
          AOM    CMLR        ADVANCE BYTE COUNT FOR LINE
 LPD8     SBN    2
          MJN    LPD7        IF NOT 2 CHARACTERS IN LINE
          LDM    CMSF 
          LPN    10 
          NJN    LPD9        IF 12 BIT ASCII PRINT FILE 
 LPDA     PSN 
*         UJN    LPD9        (SYSTEM IN 63 CHARACTER SET) 
          LDM    -1,T1       CHECK LAST CHARACTER IN LINE 
          LMN    72 
          NJN    LPD9        IF NOT COLON 
          LDN    40          REPLACE WITH BLANK 
          STM    -1,T1
 LPD9     SOM    CMLR        DEDUCT CARRIAGE CONTROL CHARACTER
          ADC    -137D
 LPDB     EQU    *-1
          PJN    LPD9        IF LINE TOO LONG 
          LDD    T2          SET FORMAT CONTROL FOR NEXT LINE 
          STM    LPFC 
          LDD    OT          SAVE *OUT* POINTER 
          STM    LPOT 
          LDD    OT+1 
          STM    LPOT+1 
          RJM    MGR         GO TO MANAGER
  
*         PHASE 2.  PROCESS FORMAT CONTROL. 
  
          LDM    CMSF 
          LPN    4
          NJN    LPD10.2     IF SUPPRESS FLAG SET 
          LDI    DA          CHECK FORMAT CHARACTER 
          LPC    3777        REMOVE UPPER BIT 
          STI    DA 
          LMN    40          ASCII BLANK
          ZJN    LPD10.2     IF ASCII BLANK 
          RJM    WNB         WAIT NOT BUSY
          RJM    SPC         PROCESS SPACE CONTROL
          RJM    MGR         GO TO MANAGER
          ZJN    LPD10       IF NOT *Q*, *R*, *S*, *T* FORMAT CONTROL 
          LJM    LPD4        LOAD BUFFER
  
 LPD10    LDI    DA          CHECK FOR PM MESSAGE 
          ADC    -120 
          NJN    LPD10.2     IF NOT PM MESSAGE
          AOD    DA          CHECK NEXT CHARACTER 
          LDI    DA 
          ADC    -115 
          NJN    LPD10.1     IF NOT PM MESSAGE
          LDN    2           SET PM MESSAGE FLAG
          RAM    LPFT 
 LPD10.1  SOD    DA          RESTORE DATA ADDRESS 
 LPD10.2  LDM    CMBE 
          ZJN    LPD13       IF BUFFER EMPTY
          LDM    CMSF 
          LPN    10 
          NJN    LPD11       IF 12 BIT ASCII
          LDM    LPFC        CHECK FORMAT CHARACTER OF NEXT LINE
          SHN    -6 
          LMN    1R+
          UJN    LPD12       CHECK FOR *+*
  
 LPD11    LDM    LPFC 
          LPC    3777        REMOVE UPPER BIT 
          LMN    53          ASCII *+*
 LPD12    NJN    LPD13       IF NOT *+* 
          LDM    LPFT        CHECK FORMAT TAPE FLAG 
          LPN    1
          NJN    LPD13       IF FUNCTION .GE. 31
          RJM    WNB         WAIT NOT BUSY
          LDN    6           SUPPRESS SPACE AFTER PRINT 
          RJM    FCN
  
*         PHASE 3.  PRINT LINE. 
  
 LPD13    LDN    ECLE        CLEAR *I* DISPLAY
          RJM    MSG
          AOD    DA          DO NOT PRINT FORMAT CHARACTER
          LDM    LPPR 
          ZJN    LPD14       IF NO PRINT ERRORS 
          LDC    0#5F        STORE ASCII *_*
          STI    DA 
 LPD14    LDC    16S12+OAMI  OUTPUT PRINT RECORD
          RJM    XDR
          RJM    RDB         RELEASE DATA BUFFER
          LDC    *           SET REENTRY ADDRESS FOR FUNCTION REJECT
          STM    CMPA 
          LDN    22          SELECT END OF OPERATION INTERRUPT
          RJM    FCN
          RJM    MGR         GO TO MANAGER
  
*         PHASE 4.  PROCESS POST PRINT OPERATIONS.
  
          LDM    LPFT        CHECK FORMAT TAPE FLAG 
          LPN    1
          ZJN    LPD15       IF NOT SET 
          RJM    WNB         WAIT NOT BUSY
          LDN    7           CONDITIONAL CLEAR FORMAT 
          RJM    FCN
 LPD15    LDD    ST 
          SHN    -12         CHECK PRINT ERROR STATUS LINE
          LPN    1
          NJN    LPR         IF SET 
          LDN    PERI 
          RJM    CRV         CHECK FOR RECOVERED ERROR
 LPD16    LDN    LPOT        STORE *OUT* POINTER
          RJM    SOP
          AOM    LPLP        INCREMENT LINE COUNT 
          SBM    LPLL 
          MJN    LPD17       IF NOT END OF PAGE 
          LDM    LPLL        CHECK USER LIMITS
          RJM    CUL
          STM    LPLP        CLEAR LINE COUNT FOR PAGE
 LPD17    RJM    PPM         CHECK FOR PM MESSAGE 
          LJM    LPD4        CONTINUE PRINTING
 LPR      SPACE  4,15 
**        LPR - PROCESS PRINT ERROR.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  MSG, PRE.
  
  
 LPR      AOM    CMEC        ADVANCE ERROR COUNT
          LDD    CP 
          ADN    SNSW        CHECK ERROR REPORTING ENABLED
          CRD    CM 
          LDD    CM+4        INTERROGATE SENSE SWITCH 1 
          SHN    21-6 
          MJN    LPD16       IF ERROR REPORTING AND RETRYING DISABLED 
          LDN    PERI 
          RJM    PRE         PROCESS RETRIED ERROR
  
*         *LPR1* IS A SECONDARY ENTRY POINT FOR *LPR*.
  
 LPR1     LDD    CP          CHECK ERROR STOP ENABLED 
          ADN    SNSW 
          CRD    CM 
          LDD    CM+4        INTERROGATE SENSE SWITCH 2 
          SHN    21-7 
          MJN    LPR2        IF HOLDING ON ERRORS 
          LJM    LPD4        CONTINUE PRINTING
  
 LPR2     LDN    EPRH        *I* DISPLAY MESSAGE CODE 
  
*         *LPR3* IS A SECONDARY ENTRY POINT FOR *LPR*.
  
 LPR3     RJM    MSG         ISSUE BUFFER POINT MESSAGE 
          LDN    1
          LJM    LPD3        SET DRIVER HOLDING 
 LPE      SPACE  4,10 
**        LPE - ERROR PROCESSOR.
* 
*         ENTRY  (A) = EQUIPMENT STATUS FOLLOWING CONNECT.
* 
*         EXIT   TO *PSE*.
* 
*         CALLS  MSG. 
  
  
 LPE      LPN    10 
          ZJN    LPE1        IF NO PAPER FAULT
          LDN    ENPA-ENRD
 LPE1     ADN    ENRD        *NOT READY*
          RJM    MSG
          LJM    PSE         RETURN 
 LPN      SPACE  4,10 
**        LPN - PROCESS *END*.
* 
*         USES   BS+4, CM - CM+4. 
* 
*         CALLS  SFA. 
* 
*         MACROS NFA. 
  
  
 LPN      LDN    0           CLEAR HOLD FLAG
          STM    CMHF 
          LDM    CMSF        CHECK END FLAG 
          LPN    2
          NJN    LPN3        IF SET PREVIOUSLY
          LDN    2           SET END FLAG 
          RAM    CMSF 
          NFA    FA,R        READ FST INFORMATION 
          CRD    CM 
          LDD    FP+1        RESET FILE STATUS
          ZJN    LPN3        IF NO DAYFILE
          STD    CM+2 
          LDD    FP+2 
          STD    CM+3 
          NFA    FA,R        UPDATE FST INFORMATION 
          CWD    CM 
  
*         *LPN1* IS A SECONDARY ENTRY POINT FOR *LPN*.
  
 LPN1     LDN    1           RESET BUFFER STATUS
  
*         *LPN2* IS A SECONDARY ENTRY POINT FOR *LPN*.
  
 LPN2     STD    BS+4 
          RJM    SFA         STORE BUFFER STATUS
          CWD    BS 
          LJM    LPD4        RETURN TO MAIN DRIVER
  
 LPN3     UJN    LEF1        CHECK ACCOUNTING PROCESSED 
 LEF      SPACE  4,10 
**        LEF - LIST END OF INFORMATION.
* 
*         USES   BR, FC, T4.
* 
*         CALLS  ACT, MGR, SDM. 
  
  
 LEF      LDD    BS+4        CHECK BUFFER STATUS
          SHN    21-11
          PJN    LPN1        IF NOT EOI 
          LDD    F2+2        CHECK ABORT FLAG 
          LPN    2
          ZJN    LEF1        IF NO ABORT FLAG 
          LDN    0           CLEAR REPEAT COUNT 
          STM    CMER 
          LJM    LPN         PROCESS *END*
  
*         *LEF1* IS A SECONDARY ENTRY POINT FOR *LEF*.
  
 LEF1     AOD    BR 
          LDM    CMSF        CHECK ACCOUNT FLAG 
          LPN    1
          NJN    LEF4        IF SET 
          AOM    CMSF        SET ACCOUNT FLAG 
          SCN    50          CLEAR 6/12 AND 8/12 ASCII PRINT FLAGS
          STM    CMSF 
 LEF2     RJM    ACT         PROCESS ACCOUNTING 
 LEF3     RJM    MGR         GO TO MANAGER
          ZJN    LEF2        IF REQUEST NOT ENTERED 
          LDD    BS+4 
          SHN    21-0 
          PJN    LEF3        IF ACCOUNTING NOT COMPLETE 
          LJM    LPD4        PRINT LINE COUNT 
  
*         *LEF4* IS A SECONDARY ENTRY POINT FOR *LEF*.
  
 LEF4     LDM    CMEC 
          ZJN    LEF5        IF NO PRINT ERRORS 
          STD    FC          (FC) = PRINT ERROR COUNT 
          LDN    EPEM        *EQXXX NNNN PRINT ERRORS.* 
          RJM    SDM
 LEF5     LJM    TOF         TERMINATE OUTPUT FILE
 PPM      SPACE  4,15 
**        PPM - PROCESS PM MESSAGE. 
* 
*         EXIT   TO CALLER IF NO *PM* MESSAGE OR USER DOES
*                   NOT HAVE *CBIO* PRIVILEGES. 
*                TO *LPR3* IF *PM* MESSAGE AND USER HAS 
*                   *CBIO* PRIVILEGES (HOLD FLAG SET).
* 
*         CALLS  MSG. 
  
  
 PPM      SUBR               ENTRY/EXIT 
          LDM    LPFT        CHECK PM FLAG
          LPN    2
          ZJN    PPMX        IF NO PM MESSAGE 
          LDD    F2+2        CHECK USER *CBIO* PRIVILEGES 
          LPN    1
          ZJN    PPMX        IF USER DOES NOT HAVE *CBIO* PRIVILEGES
          LDN    EPMM 
          LJM    LPR3        ISSUE BUFFER POINT MESSAGE 
 SPC      SPACE  4,10 
**        SPC - PROCESS SPACE CONTROL.
* 
*         ENTRY  ((DA)) = FORMAT CONTROL BYTE.
* 
*         EXIT   (A) = 0 IF LINE TO BE PRINTED. 
* 
*         USES   BR, T4.
* 
*         CALLS  CPS, CUL, FCN, MGR, RDB, SOP, WNB. 
  
  
 SPC      SUBR               ENTRY/EXIT 
          LDC    TFCC-2      SET TABLE ADDRESS
          STD    T4 
 SPC1     LDN    2           ADVANCE TABLE
          RAD    T4 
          LDI    T4 
          ZJN    SPCX        IF END OF TABLE
          LMI    DA 
          NJN    SPC1        IF NO MATCH
  
*         CHARGE FOR NUMBER OF LINES. 
  
          LDI    T4          CHECK FOR PAGE EJECT 
          SBN    61          ASCII *1*
          ZJN    SPC2        IF NORMAL PAGE EJECT 
          SBN    126-61      ASCII *V* - ASCII *1*
          NJN    SPC3        IF NOT USER FORMS CONTROL
 SPC2     LDM    LPLL        CHARGE FOR CURRENT PAGE
          RJM    CUL
          STM    LPLP        CLEAR LINE COUNT FOR PAGE
 SPC3     LDI    T4          CHECK FOR LAST LINE OF FORM
          SBN    62          ASCII *2*
          NJN    SPC4        IF NOT ADVANCE TO LAST LINE OF FORM
          LDM    LPLL 
          SHN    -1          CHARGE FOR LAST LINE OF FORM (*PLXL*/2)
          RAM    LPLP 
 SPC4     LDM    1,T4 
          SHN    14 
          RAM    LPLP 
  
*         ISSUE FORMAT FUNCTION.
  
          SHN    -14
          ZJN    SPC7        IF NO FORMAT SELECTION 
          RJM    FCN
          LDI    T4          CHECK SELECTED FORMAT
          ADC    -121        ASCII *Q*
          ZJN    SPC5        IF *Q* 
          SBN    122-121     ASCII *R* - ASCII *Q*
          NJN    SPC8        IF NOT *R* 
 SPC5     LDD    F2+2        GET BIO FLAGS
          LPN    10          CHECK FOR FORCED 8 LPI 
          ZJN    SPC6        IF NOT FORCED 8 LPI
          RJM    MGR         GO TO MANAGER
          RJM    WNB         WAIT NOT BUSY
          LDN    10          SET 8 LPI
          RJM    FCN         ISSUE FUNCTION 
 SPC6     LDN    LPOT        STORE *OUT* POINTER
          RJM    SOP
*         LDN    1           SET NO PRINT ON RETURN 
 SPC7     LJM    SPCX        RETURN 
  
 SPC8     SBN    123-122     ASCII *S* - ASCII *R*
          ZJN    SPC9        IF *S* 
          SBN    124-123     ASCII *T* - ASCII *S*
          NJN    SPC11       IF NOT *T* 
          LDN    LP8L-LP6L
 SPC9     STD    T4 
          LDM    LP6L+EQSB,T4  SET LINE LIMIT FOR PAGE
          STM    LPLL 
 SPC10    UJN    SPC5        SET NO PRINT ON RETURN 
  
 SPC11    SBN    126-124     ASCII *V* - ASCII *T*
          ZJN    SPC12       IF *V* 
          LDM    LPFT 
          SCN    1
          STM    LPFT 
          LDD    FC 
          SBN    30+1 
          SHN    0-21 
          LMN    1           SET FORMAT TAPE FLAG 
          RAM    LPFT 
          LDN    0
          UJN    SPC7        RETURN 
  
 SPC12    LDM    1,DA        CHECK PFC ARRAY TO BE CHANGED
          SBN    66          ASCII *6*
          ZJN    SPC13       IF 6 LPI 
          SBN    70-66       ASCII *8* - ASCII *6*
          ZJN    SPC13       IF 8 LPI 
          SBN    103-70      ASCII *C* - ASCII *8*
          NJN    SPC10       IF NOT 8 LPI ACROSS 2 LINES
 SPC13    AOD    BR          SET BUSY RETURN
          RJM    RDB         RELEASE DATA BUFFER
 SPC14    RJM    MGR         GO TO MANAGER
          LDD    BS+4        CHECK BUFFER STATUS
          LPN    1
          ZJN    SPC14       IF BUFFER BUSY 
          LDD    BS+4        SAVE BUFFER STATUS 
          STM    CMBS 
 SPC15    LDC    PFCF+2000   REQUEST RELOAD PFC MEMORY
          RJM    CPS
 SPC16    RJM    MGR         GO TO MANAGER
          ZJN    SPC15       IF REQUEST NOT ACCEPTED
          LDD    BS+4        CHECK BUFFER STATUS
          LMC    1031 
          NJN    SPC17       IF NOT INVALID USER / ERROR IN PFC IMAGE 
          LJM    LPD4        CONTINUE / TERMINATE PRINT JOB 
  
 SPC17    LMC    PFCF&1030
          NJN    SPC18       IF NOT PFC LOAD COMPLETE 
          LDM    CMBS 
          LJM    LPN2        RESET BUFFER STATUS AND CONTINUE 
  
 SPC18    LMN    CECF&PFCF
          NJN    SPC16       IF NOT PFC ERROR 
          LJM    TOP4        TERMINATE OPERATION
 TFCC     SPACE  4,10 
**        TFCC - TABLE OF FORMAT CONTROL CHARACTERS.
* 
*         TWO WORD ENTRY. 
* 
*         PROGRAMMERS NOTE - THE *+* FORMAT CONTROL CHARACTER IS
*         PROCESSED IN THE MAIN DRIVER BECAUSE THERE IS NO
*         DIRECTLY EQUIVALENT CONTROLLER FUNCTION.  CONTROLLER
*         FUNCTION 6 IS USED FOR BOTH */* AND *+*, AND THE
*         TIMING OF WHEN THE FUNCTION 6 IS SENT DETERMINES IF 
*         SPACING IS SUPPRESSED BEFORE OR AFTER PRINTING. 
  
  
 TFCC     BSS    0
          FMTC   C,3,16,36   SKIP TO CHANNEL 6 AFTER PRINT
          FMTC   D,2,15,35   SKIP TO CHANNEL 5 AFTER PRINT
          FMTC   E,2,14,34   SKIP TO CHANNEL 4 AFTER PRINT
          FMTC   F,1,13,33   SKIP TO CHANNEL 3 AFTER PRINT
          FMTC   G,1,12,32   SKIP TO CHANNEL 2 AFTER PRINT
          FMTC   H,0,11,31   SKIP TO CHANNEL 1 AFTER PRINT
          FMTC   Q,0,10,30   CLEAR AUTO EJECT 
          FMTC   R,0,5,5     SELECT AUTO EJECT
          FMTC   S,0,0,11    CLEAR 8 LINES/INCH 
          FMTC   T,0,0,10    SET 8 LINES/INCH 
          FMTC   V,0,0,4     EJECT AND CHANGE PFC IMAGE 
          FMTC   0,1,1,1     SPACE 1 LINE BEFORE PRINT
          FMTC   1,0,4,4     EJECT BEFORE PRINT 
          FMTC   2,0,3,3     ADVANCE TO LAST LINE BEFORE PRINT
          FMTC   3,3,26,56   SKIP TO CHANNEL 6 BEFORE PRINT 
          FMTC   4,2,25,55   SKIP TO CHANNEL 5 BEFORE PRINT 
          FMTC   5,2,24,54   SKIP TO CHANNEL 4 BEFORE PRINT 
          FMTC   6,1,23,53   SKIP TO CHANNEL 3 BEFORE PRINT 
          FMTC   7,1,22,52   SKIP TO CHANNEL 2 BEFORE PRINT 
          FMTC   8,0,21,51   SKIP TO CHANNEL 1 BEFORE PRINT 
*         FMTC   +,0,0,0     PROCESSED IN MAIN DRIVER 
          FMTC   -,2,2,2     SPACE 2 LINES BEFORE PRINT 
          FMTC   /,0,6,6     SUPPRESS SPACE AFTER PRINT 
          CON    0
  
          TITLE  3446/415 DRIVER SECTION. 
 CPD      SPACE  4,10 
**        CPD - 3446/415 DRIVER.
  
  
 CPD      RJM    PSD         PRESET DRIVER
          LDC    4000        SET NO COMPARISON MODE FOR HEADER CARD 
          STM    CPPM 
          LDD    FP+2        SET PUNCH FORMAT 
          LPN    7
          STM    CPFM 
          LMN    PHFR 
          ZJN    CPD1        IF O26 CONVERSION MODE 
          LMN    P9FR&PHFR
          NJN    CPD1        IF NOT O29 CONVERSION
          LDN    CDXA        SET O29 CONVERSION MODE
          STM    CMCT 
 CPD1     LDC    GLCF+1000   REQUEST LACE CARD GENERATION 
          RJM    CPS
 CPD2     RJM    MGR         GO TO MANAGER
          ZJN    CPD1        IF REQUEST NOT ENTERED 
          LDD    BS+4        CHECK BUFFER STATUS
          LMC    GLCF+1 
          NJN    CPD2        IF REQUEST NOT COMPLETE
  
*         *CPD3* IS A SECONDARY ENTRY POINT FOR *CPD*.
* 
*         ENTRY  BUFFER NOT BUSY. 
  
 CPD3     RJM    MGR         GO TO MANAGER
          RJM    ADB         ASSIGN DATA BUFFER 
          LDN    0           CLEAR BUSY RETURN
          STD    BR 
          LDN    20          READ BINARY BUFFER 
          STD    T3 
          RJM    CDB         CHECK DATA IN BUFFER 
          LDD    DA 
          RJM    RNL         READ NEXT CARD 
          RJM    MGR         GO TO MANAGER
          RJM    PBC         PUNCH BINARY CARD
          RJM    ECB         EMPTY CIRCULAR BUFFER
          LDD    OT          OUT1=OUT2=OUT
          STM    CPO1 
          STM    CPO2 
          LDD    OT+1 
          STM    CPO1+1 
          STM    CPO2+1 
  
*         *CPD4* IS A SECONDARY ENTRY POINT FOR *CPD*.
  
 CPD4     LDN    0           INITIALIZE CARD COUNT
          STM    CPCN 
          STM    CPCN+1 
  
*         *CPD5* IS A SECONDARY ENTRY POINT FOR *CPD*.
  
 CPD5     AOD    BR          SET BUSY RETURN
          RJM    MGR         GO TO MANAGER
          RJM    ADB         ASSIGN DATA BUFFER 
          LDM    CPO2        OUT = OUT2 
          STD    OT 
          LDM    CPO2+1 
          STD    OT+1 
          LDM    CPFM        SELECT PUNCH PROCESSOR 
          ZJN    CPD6        IF DEFAULT 
          LMN    PHFR 
          ZJN    CPD6        IF PUNCH CODED 026 
          LMN    P9FR&PHFR
          NJN    CPD7        IF NOT PUNCH CODED 029 
 CPD6     LJM    CPC         PUNCH CODED
  
 CPD7     LMN    PBFR&P9FR
          ZJN    CPB1        IF PUNCH SYSTEM BINARY 
          LMN    P8FR&PBFR
          ZJN    CPB         IF PUNCH ABSOLUTE, 80 COLUMN BINARY
          LJM    TOF         TERMINATE OUTPUT FILE
 CPB      SPACE  4,10 
**        CPB - PUNCH BINARY. 
* 
*         USES   BR, T1 - T3. 
* 
*         CALLS  CCI, CKC, COB, PBC, RNL, MGR.
  
  
*         PHASE 1.  LOAD BUFFER AND GENERATE CHECKSUM.
  
 CPB      LDN    1           ABSOLUTE 80 COLUMN BINARY
 CPB1     ADN    17 
          STD    T3 
          RJM    COB         CHECK OUTPUT BUFFER
          SBD    T3 
          PJN    CPB2        IF FULL CARD 
          RAD    T3 
          SHN    2
          ADD    T3 
          ADD    DA 
          RJM    CCI         CLEAR CARD IMAGE 
          LDD    BS+4        CHECK LAST STATUS
          LPN    20 
          NJN    CPB2        IF EOR / EOF 
          LJM    MGR1        RETURN TO MANAGER
  
 CPB2     LDM    CPFM        SET DATA ADDRESS 
          LMN    P8FR 
          ZJN    CPB3        IF ABSOLUTE, 80 COLUMN BINARY
          LDN    2           SYSTEM BINARY
 CPB3     STD    T2 
          ADD    DA          READ NEXT CARD 
          RJM    RNL
          LDD    OT          OUT2 = OUT 
          STM    CPO2 
          LDD    OT+1 
          STM    CPO2+1 
          LDD    T2 
          NJN    CPB4        IF NOT ABSOLUTE BINARY 
          LJM    CPB6        CLEAR BUSY RETURN
  
 CPB4     LDD    T3          SET WORD COUNT + BINARY INDICATOR
          SHN    6
          ADN    5
          STI    DA 
          LDD    DA          SET FIRST DATA ADDRESS 
          ADN    2
          STD    T1 
          ADC    113
          STD    T2 
          LDN    0           CLEAR CHECKSUM 
          STD    T3 
 CPB5     LDI    T1          GENERATE CHECKSUM
          LMC    770000 
          RAD    T3 
          AOD    T1 
          LMD    T2 
          NJN    CPB5        IF NOT END OF DATA 
          STM    115,DA      CLEAR COLUMN 78
          SBD    T3 
          STM    1,DA        STORE CHECKSUM 
          AOM    CPCN+1      STORE BINARY CARD NUMBER 
          STM    117,DA 
          SHN    -14
          RAM    CPCN 
          STM    116,DA 
 CPB6     LDN    0           CLEAR BUSY RETURN
          STD    BR 
          RJM    MGR         GO TO MANAGER
  
*         PHASE 2.  PUNCH CARD. 
  
          RJM    PBC         PUNCH BINARY CARD
          RJM    MGR         GO TO MANAGER
  
*         PHASE 3.  CHECK PREVIOUS CARD.
  
          RJM    CKC         CHECK CARD 
          PJN    CPB8        IF NO COMPARE ERROR
 CPB7     LCN    2           DECREMENT BINARY CARD NUMBER 
          RAM    CPCN+1 
          PJN    CPB8        IF NO UNDERFLOW
          SOM    CPCN 
          AOM    CPCN+1 
 CPB8     LJM    CPD5        LOOP FOR NEXT CARD 
 CPC      SPACE  4,10 
**        CPC - PUNCH CODED.
* 
*         USES   BR, T1.
* 
*         CALLS  AOP, CCI, CKC, COB, PBC, RCB, MGR. 
  
  
*         PHASE 1.  LOAD BUFFER.
  
 CPC      RJM    COB         CHECK OUTPUT BUFFER
          SBN    11 
          PJN    CPC1        IF AT LEAST 1 CARD AND 1 WORD
          LDD    BS+4        CHECK LAST STATUS
          LPN    20 
          NJN    CPC1        IF EOR / EOF 
          LJM    MGR1        RETURN TO MANAGER
  
 CPC1     LDN    10          READ CODED CARD
          RJM    RCB
          ZJN    CPC3        IF EMPTY CARD
          LMC    120
          NJN    CPC2        IF CURRENT CARD NOT FULL 
          LDM    CMBE 
          ZJN    CPC2        IF BUFFER EMPTY
          LDD    T2          CHECK NEXT WORD
          ADD    T3 
          ADD    T4 
          ADD    T5 
          ADD    T6 
          NJN    CPC2        IF NOT END OF CARD 
          LDN    1           ADVANCE *OUT* POINTER
          RJM    AOP
 CPC2     LDD    T7          CHECK LAST CHARACTER PROCESSED 
          NJN    CPC3        IF NOT PART OF EOL 
          SOD    T1 
 CPC3     LDD    T1          CLEAR REMAINDER OF CARD IMAGE
          RJM    CCI
          LDD    OT          OUT2 = OUT 
          STM    CPO2 
          LDD    OT+1 
          STM    CPO2+1 
          LDN    0           CLEAR BUSY RETURN
          STD    BR 
          RJM    MGR         GO TO MANAGER
  
*         PHASE 2. PUNCH CARD.
  
          RJM    PBC         PUNCH BINARY CARD
          RJM    MGR         GO TO MANAGER
  
*         PHASE 3.  CHECK PREVIOUS CARD.
  
          RJM    CKC         CHECK CARD 
          LJM    CPD5        LOOP FOR NEXT CARD 
 CPX      SPACE  4,10 
**        CPX - PROCESS TRANSMISSION PARITY ERROR/INCOMPLETE
*         DATA TRANSFER.
* 
*         EXIT   TO *MGR1*. 
  
  
 CPX      AOM    CPPM        SET PUNCH MODE TO OFFSET 
          LJM    MGR1        RETURN TO MANAGER
 CKC      SPACE  4,10 
**        CKC - CHECK CARD. 
* 
*         EXIT   (A) .LT. 0 IF COMPARE ERROR. 
* 
*         USES   BR, CM - CM+4. 
* 
*         CALLS  CUL, FCN, MSG, SDM, SFA, SOP, WST. 
  
  
 CKC5     LDM    CPO2        OUT1 = OUT2
          STM    CPO1 
          LDM    CPO2+1 
          STM    CPO1+1 
          AOD    BR          SET BUSY RETURN
          RJM    CUL         CHECK USER LIMITS
  
 CKC      SUBR               ENTRY/EXIT 
          LDM    CPPM        CHECK PUNCH MODE 
          ZJN    CKC3        IF COMPARE 
          SHN    6
          MJN    CKC1        IF NO COMPARE, NO OFFSET 
          LDN    3           OFFSET CARD
          RJM    FCN
 CKC1     LDN    0           SET PUNCH MODE TO COMPARE
          STM    CPPM 
          LDN    ECLE        CLEAR ERROR MESSAGE
          RJM    MSG
 CKC2     UJN    CKC5        SET OUT POINTERS 
  
 CKC3     LDD    ST          CHECK STATUS 
          SHN    7
          MJN    CKC4        IF COMPARE ERROR 
          LDN    CPO1        STORE OUT POINTER
          RJM    SOP
          UJN    CKC2        SET OUT POINTERS 
  
 CKC4     LDN    3           OFFSET CARD
          RJM    FCN
          LDN    ECPE        *COMPARE ERROR.* 
          RJM    MSG
          RJM    WST         WRITE STATUS 
          LDN    ECEM        *EQXXX COMPARE ERROR.* 
          RJM    SDM
          RJM    SFA         OUT2 = OUT 
          ADN    3
          CRD    CM 
          LDD    CM+3 
          STM    CPO2 
          STM    CPO1        OUT1 = OUT 
          LDD    CM+4 
          STM    CPO2+1 
          STM    CPO1+1 
          AOM    CPPM        SET PUNCH MODE TO OFFSET 
          AOM    CMEC        ADVANCE ERROR COUNT
          LCN    0
          LJM    CKCX        RETURN 
 CCI      SPACE  4,10 
**        CCI - CLEAR CARD IMAGE. 
* 
*         ENTRY  (A) = STARTING ADDRESS TO CLEAR TO.
*                (DA) = DATA BUFFER ADDRESS.
* 
*         EXIT   (T1) = ADDRESS OF END OF CARD IMAGE. 
* 
*         USES   T0 - T1. 
  
  
 CCI1     LDN    0           CLEAR BUFFER 
          STI    T0 
          SOD    T0          DECREMENT ADDRESS
 CCI2     SBD    T1 
          PJN    CCI1        IF NOT START OF DATA 
  
 CCI      SUBR               ENTRY/EXIT 
          STD    T1 
          LDD    DA 
          ADC    121         SET LIMIT ADDRESS
          STD    T0 
          UJN    CCI2        ENTER LOOP 
 PBC      SPACE  4,10 
**        PBC - PUNCH BINARY CARD.
* 
*         ENTRY  (DA) = DATA ADDRESS. 
* 
*         CALLS  FCN, RDB, XDR. 
  
  
 PBC      SUBR               ENTRY/EXIT 
          LDC    120         SET BYTE COUNT FOR BINARY CARD 
          STM    CMLR 
          LDN    1           SELECT BINARY
          RJM    FCN
          LDC    16S12+OAMI  OUTPUT PUNCH RECORD
          RJM    XDR
          RJM    RDB         RELEASE DATA BUFFER
          UJN    PBCX        RETURN 
 PED      SPACE  4,10 
**        PED - PROCESS *END*.
* 
*         EXIT   TO *TOF* IF *END* SET PREVIOUSLY.
* 
*         CALLS  MGR. 
  
  
 PED      LDM    CMSF        CHECK END FLAG 
          LPN    2
          ZJN    PED1        IF NOT SET 
          LJM    TOF         TERMINATE OUTPUT FILE
  
 PED1     LDN    2           SET END FLAG 
          RAM    CMSF 
          RJM    MGR         GO TO MANAGER
*         LJM    PEF         PUNCH EOF
 PEF      SPACE  4,10 
**        PEF - PUNCH END OF FILE.
* 
*         USES   BR.
* 
*         CALLS  ACT, ADB, CCI, FCN, MGR, PBC.
  
  
 PEF      RJM    ADB         ASSIGN DATA BUFFER 
          RJM    CCI         CLEAR CARD IMAGE 
          LDD    BS+4        CHECK BUFFER STATUS
          SHN    21-11
          MJN    PEF2        IF EOI 
          LDN    15 
          LJM    PER1        SET EOF INDICATORS 
  
 PEF2     LDN    17          SET EOI INDICATORS 
          STI    DA 
          STM    117,DA 
          LDN    0           CLEAR BUSY RETURN
          STD    BR 
          LDM    CMEC        ENTER ERROR COUNT
          STM    47,DA
          RJM    MGR         GO TO MANAGER
          RJM    PBC         PUNCH BINARY CARD
          RJM    MGR         GO TO MANAGER
          LDN    3           OFFSET CARD
          RJM    FCN
          RJM    MGR         GO TO MANAGER
          LDN    4           GATE LAST CARD 
          RJM    FCN
          RJM    MGR         GO TO MANAGER
          LDN    3           OFFSET EOI 
          RJM    FCN
          AOD    BR          SET BUSY RETURN
 PEF3     RJM    ACT         PROCESS ACCOUNTING 
 PEF4     RJM    MGR         GO TO MANAGER
          ZJN    PEF3        IF REQUEST NOT ENTERED 
          LDD    BS+4 
          SHN    21-0 
          PJN    PEF4        IF ACCOUNTING NOT COMPLETE 
          LJM    TOF         TERMINATE OUTPUT FILE
 PER      SPACE  4,10 
**        PER - PUNCH END OF RECORD.
* 
*         USES   BR, BS+4.
* 
*         CALLS  CCI, CKC, FCN, MGR, PBC, SFA.
  
  
 PER      LDD    DA          CLEAR CARD IMAGE 
          RJM    CCI
          LDN    7           SET EOR INDICATOR
 PER1     STI    DA 
          STM    117,DA 
          LDN    0           CLEAR BUSY RETURN
          STD    BR 
          RJM    MGR         GO TO MANAGER
          LDM    CPPM 
          ZJN    PER2        IF NO OFFSET 
          LDN    3           OFFSET CARD
          RJM    FCN
          RJM    MGR         GO TO MANAGER
 PER2     RJM    PBC         PUNCH BINARY CARD
          RJM    MGR         GO TO MANAGER
          RJM    CKC         CHECK CARD 
          PJN    PER3        IF NO COMPARE ERROR ON PREVIOUS CARD 
          LJM    CPB7        REPUNCH CARD IN ERROR
  
 PER3     LDN    1           CLEAR EOR/EOF
          STD    BS+4 
          RJM    SFA         STORE BUFFER STATUS
          CWD    BS 
          AOM    CPPM        SELECT OFFSET
          LJM    CPD4        EXIT TO DRIVER 
 CPE      SPACE  4,10 
**        CPE - ERROR PROCESSOR.
* 
*         ENTRY  (A) = EQUIPMENT STATUS FOLLOWING CONNECT.
* 
*         EXIT   TO *PSE*.
* 
*         CALLS  MSG, SDM, WST. 
  
  
 CPE2     LDN    ENRD        *NOT READY*
 CPE3     RJM    MSG         SET BUFFER POINT MESSAGE 
          LJM    PSE         RETURN 
  
 CPE      SHN    21-6 
          PJN    CPE2        IF NO *FEED FAILURE* 
          LDM    CPES 
          NJN    CPE1        IF NOT FIRST FAILURE 
          AOM    CPES 
          RJM    WST         WRITE STATUS 
          LDN    EFFM        *EQXXX FEED FAILURE.*
          RJM    SDM
 CPE1     LDN    EFED        *FEED FAILURE.*
          UJN    CPE3        SET BUFFER POINT MESSAGE 
          TITLE  3447/405 DRIVER SECTION. 
 CRD      SPACE  4,10 
**        CRD - 3447/405 DRIVER.
  
  
 CRD      LDN    0           CLEAR BINARY CARD SEQUENCE ERROR 
          STD    FP+1 
          AOM    CRRC        INITIALIZE LOGICAL RECORD COUNT
          STM    CRSN        INITIALIZE CARD COUNT IN RECORD
          LDC    120         SET RECORD LENGTH
          STM    CMLR 
          RJM    ECB         EMPTY CIRCULAR BUFFER
  
*         *CRD1* IS A SECONDARY ENTRY POINT FOR *CRD*.
  
 CRD1     LDN    0
          STD    BR 
          RJM    MGR         GO TO MANAGER
  
*         *CRD2* IS A SECONDARY ENTRY POINT FOR *CRD*.
* 
*         PHASE 1.  CHECK MODE OF CARD. 
  
 CRD2     RJM    CIB         CHECK INPUT BUFFER 
          SBN    20 
          MJN    CRD1        IF NOT ROOM FOR 1 CARD 
          LDN    0
          STM    CRBE 
          LDN    ECLE        CLEAR ERROR MESSAGE
          RJM    MSG
          LDD    ST          CHECK CARD STATUS
          SHN    21-12
          PJN    CRD3        IF NO ERROR
          RJM    WST         WRITE STATUS 
          LDN    ECEM        *EQXXX COMPARE ERROR.* 
          RJM    SDM         ISSUE ERROR LOG MESSAGE
          RJM    EBF         EMPTY BUFFER 
          LJM    MGR1        RETURN TO MANAGER
  
 CRD3     RJM    ADB         ASSIGN DATA BUFFER 
          LDN    1           NEGATE BCD CONVERSION
          RJM    FCN
          LDM    CRLI        SET DATA ADDRESS 
          RAD    DA 
          LDC    15S12+IAMI  INPUT CARD 
          RJM    XDR
          AOD    BR          SET BUSY RETURN
          RJM    MGR         GO TO MANAGER
          LDM    CRLI 
          NJN    CRD4        IF LITERAL INPUT 
          LDI    DA          CHECK FOR BINARY CARD
          LPN    5
          LMN    5
          NJN    CRC         IF NOT BINARY CARD 
          LJM    CRB         PROCESS BINARY CARD
  
 CRD4     LJM    CRL         PROCESS LITERAL INPUT
 CRC      SPACE  4,10 
**        CRC - PROCESS CODED CARD. 
* 
*         USES   T1 - T3. 
* 
*         CALLS  CHD, CKM, MGR, SCN, WBB. 
  
  
*         PHASE 2.  CONVERT TO DISPLAY CODE AND DELETE TRAILING SPACES. 
  
 CRC      LDD    DA          SET DATA ADDRESS OF BINARY INPUT 
          STD    T1 
          STD    T2          SET LAST NON-SPACE ADDRESS 
          STD    T3          SET DATA ADDRESS FOR STORING DISPLAY CODE
          ADN    120/2       SET END OF DISPLAY CODE IN BUFFER
          STD    T6 
          LDM    CRFR        CHECK JOB CARD FOR KEYPUNCH MODE 
          NJN    CRC1        IF NOT JOB CARD
          RJM    CKM         CHECK KEYPUNCH MODE
 CRC1     RJM    SCN         SET CONVERSION TABLE 
          RJM    CHD         CONVERT HOLLERITH DATA 
          LDI    T2          GET LAST BYTE TRANSLATED 
          LPN    77          CHECK LAST CHARACTER 
          NJN    CRC2        IF NOT 00 CHARACTER
          AOD    T2          RETAIN 00 CHARACTER WITH SPACE PADDING 
          LDC    2R 
          STI    T2 
 CRC2     AOD    T2          ENSURE END OF LINE 
          STM    CRCA 
          LDN    ZERL        GET ZEROED CM WORD 
          CRM    **,ON
 CRCA     EQU    *-1
          AOD    T2          CALCULATE BYTE COUNT + OFFSET (1)
          SBD    DA 
          STD    T1          CALCULATE WORD COUNT ( = BYTE COUNT/5) 
          SHN    -3          BYTE COUNT/8 
          ADD    T1          BYTE COUNT/8 + BYTE COUNT
          SHN    -1          (BYTE COUNT/8 + BYTE COUNT)/2
          ADD    T1          (BYTE COUNT/8 + BYTE COUNT)/2 + BYTE COUNT 
          SHN    -3          DIVIDE BY 8
          ADN    1           ADD IN END OF LINE LENGTH (1)
          RJM    MGR         GO TO MANAGER
          STD    T1          SET WORD COUNT 
  
*         PHASE 3.  DUMP BUFFER.
  
          LDD    DA          WRITE BINARY BUFFER
          RJM    WBB
          LJM    CRD5        GO TO PHASE 4
 CRB      SPACE  4,10 
**        CRB - PROCESS BINARY CARD.
* 
*         USES   BR, T1 - T4. 
* 
*         CALLS  EBF, PCE, MGR, MSG.
  
  
*         PHASE 2.  PROCESS EOR AND EOF, AND CHECK CHECKSUM.
  
 CRB      LDD    DA          SET DATA ADDRESS 
          STD    T1 
          LDI    T1          CHECK FIRST WORD 
          LPN    37 
          LMN    5
          ZJN    CRB1        IF BINARY DATA CARD
          LJM    CRF         PROCESS SPECIAL FORM 
  
 CRB1     LDI    T1          SET WORD COUNT 
          SHN    -6 
          STD    T4 
          SHN    2           SET BYTE LIMIT 
          ADD    T4 
          ZJN    CRB5        IF ZERO WORD COUNT 
          ADD    DA 
          ADN    2
          STD    T2 
          LDI    T1 
          LPN    40 
          STD    T3          CLEAR CHECKSUM 
          NJN    CRB3        IF CORRECTION PUNCH
          AOD    T1          COMPUTE CHECKSUM 
 CRB2     LDI    T1 
          LMC    770000 
          RAD    T3 
          AOD    T1 
          LMD    T2 
          NJN    CRB2        IF NOT END OF BUFFER 
          LDD    T3 
          NJN    CRB5        IF ERROR 
 CRB3     LDM    CRSN        CHECK BINARY SEQUENCE ERROR
          LMM    117,DA 
          NJN    CRB8        IF SEQUENCE ERROR
 CRB4     LDD    T4          SET WORD COUNT 
          STI    DA 
          RJM    MGR         GO TO MANAGER
  
*         PHASE 3.  DUMP BUFFER.
  
          LDI    DA          SET WORD COUNT 
          STD    T1 
          LJM    CRL9        WRITE BINARY BUFFER
  
*         *CRB5* IS A SECONDARY ENTRY POINT FOR *CRB*.
* 
*         PROCESS BINARY CHECKSUM / TRANSMISSION ERRORS.
  
 CRB5     LDN    0           CLEAR BUSY RETURN
          STD    BR 
          LDN    ERCB        *RE-READ 3 CARDS.* 
          RJM    MSG
 CRB6     RJM    MGR         GO TO MANAGER
          LDD    ST 
          LPN    40 
          ZJN    CRB6        IF INPUT TRAY NOT EMPTY
          RJM    EBF         EMPTY BUFFER 
          LDN    1           SET BINARY CARD ERROR FLAG 
          STM    CRBE 
 CRB7     RJM    MGR         GO TO MANAGER
          UJN    CRB7        WAIT FOR *NOT READY* 
  
*         PROCESS CARD OUT OF SEQUENCE ERROR. 
  
 CRB8     RJM    PCE         PROCESS CARD ERROR 
          LDM    117,DA      ALIGN SEQUENCE CHECK 
          STM    CRSN 
          LJM    CRB4        RETURN TO MAIN LOOP
 CRL      SPACE  4,10 
**        CRL - PROCESS LITERAL INPUT.
* 
*         USES   T1 - T3. 
* 
*         CALLS  MGR, WBB.
  
  
*         PHASE 2.  CHECK FOR END OF LITERAL INPUT. 
  
 CRL      LDM    2,DA        CHECK FOR EOI
          LMN    17 
          NJN    CRL5        IF NOT EOI 
          LDD    DA          CHECK COLUMNS 2 THROUGH 79 
          ADN    2+1
          STD    T1 
          ADN    47-1 
          STD    T2 
          ADN    117-47 
          STD    T3 
 CRL1     LDI    T1 
          NJN    CRL5        IF NOT EOI CARD
          AOD    T1 
          LMD    T2 
          NJN    CRL2        IF NOT COLUMN 40 
          AOD    T1          IGNORE COLUMN 40 
 CRL2     LDD    T1 
          LMD    T3 
          NJN    CRL1        IF MORE COLUMNS TO CHECK 
          LDI    T1          CHECK COLUMN 40
          NJN    CRL3        IF COLUMN 80 NOT BLANK 
          LDI    T2          CHECK COLUMN 40
          UJN    CRL4        TEST FOR COLUMN 40 NON BLANK 
  
 CRL3     LMN    17 
 CRL4     NJN    CRL5        IF NOT EOI 
          STM    CRLI        CLEAR LITERAL INPUT FLAG 
          LDN    17          SET EOI INDICATOR
          STI    DA 
          LJM    RER         PROCESS EOI
  
 CRL5     LDM    2,DA        CHECK FOR FORMAT CHANGE
          LMN    25 
          NJN    CRL7        IF NOT FORMAT CHANGE 
          LDM    3,DA 
          LMN    77 
          NJN    CRL8        IF NOT LITERAL INPUT FLAG
          STD    T3          COMPUTE CHECKSUM 
          LDD    DA 
          ADN    2
          STD    T1 
          ADC    120
          STD    T2 
 CRL6     LDD    T3 
          LMI    T1 
          SHN    1
          STD    T3 
          SHN    -14
          RAD    T3 
          AOD    T1 
          LMD    T2 
          NJN    CRL6        IF NOT END OF CARD 
          LDD    T3          COMPARE CHECKSUM 
          LMM    CRLC 
 CRL7     NJN    CRL8        IF NOT IDENTICAL CHECKSUM
          STM    CRLI        CLEAR LITERAL INPUT FLAG 
          LJM    CRD1        GO TO PHASE 1
  
*         PHASE 3.  DUMP BUFFER.
  
 CRL8     RJM    MGR         GO TO MANAGER
          LDN    20          SET WORD COUNT 
          STD    T1 
  
*         *CRL9* IS A SECONDARY ENTRY POINT FOR *CRL*.
  
 CRL9     LDD    DA          WRITE BINARY BUFFER
          ADN    2
          RJM    WBB
*         LJM    CRD5        GO TO PHASE 4
 CRD5     SPACE  4,10 
*         *CRD5* IS A SECONDARY ENTRY POINT FOR *CRD*.
* 
*         PHASE 4.  STORE IN AND UPDATE RECORD COUNT. 
  
  
 CRD5     RJM    RDB         RELEASE DATA BUFFER
          AOM    CRSN        ADVANCE CARD COUNT 
          LDN    ZERL 
          CRD    CM 
          LDD    IN 
          STD    CM+3 
          LDD    IN+1 
          STD    CM+4 
          RJM    SFA         SET FET ADDRESS
          ADN    2
          CWD    CM 
          LDM    CRFR 
          NJN    CRD6        IF NOT FIRST CARD
          AOM    CRFR        ADVANCE FIRST RECORD FLAG
 CRD6     AOM    CMRC+1      INCREMENT CARD COUNT 
          SHN    -14
          RAM    CMRC 
          LJM    CRD1        LOOP TO PHASE 1
 CHD      SPACE  4,50 
**        CHD - CONVERT HOLLERITH DATA. 
* 
*         ENTRY  (DA) = (T1) = (T2) = (T3) = BUFFER ADDRESS.
*                (T6) = END OF DISPLAY CODE BUFFER ADDRESS. 
* 
*         EXIT   (T2) = ADDRESS OF LAST NON-BLANK CHARACTER PAIR. 
* 
*         USES   T1 - T5. 
* 
*         CALLS  PCE. 
  
  
 CHD18    RJM    PCE         PROCESS CARD ERROR 
 CHD19    LDN    1R          SET BLANK CHARACTER
 CHD20    STD    T4          SAVE DISPLAY CODE CHARACTER
          AOD    T1          ADVANCE BUFFER ADDRESS 
          SBD    DA 
          LPN    1
          ZJN    CHD21       IF PACKING LOWER CHARACTER 
          LDD    T4          SET UPPER CHARACTER IN BYTE
          SHN    6
          STI    T3 
          UJN    CHD1        PROCESS NEXT COLUMN
  
 CHD21    LDD    T4          SET LOWER CHARACTER IN BYTE
          RAI    T3 
          LMC    2R 
          ZJN    CHD22       IF BLANK CHARACTER PAIR
          LDD    T3          ADVANCE LAST NON-BLANK CHARACTER ADDRESS 
          STD    T2 
 CHD22    AOD    T3          ADVANCE ADDRESS FOR DISPLAY CODE 
          LMD    T6 
          NJN    CHD1        IF NOT END OF CARD IMAGE 
  
 CHD      SUBR               ENTRY/EXIT 
 CHD1     LDI    T1          CHECK NEXT COLUMN
          ZJN    CHD19       IF BLANK CHARACTER 
  
*         EVALUATE 1, 8, AND 9 PUNCHES. 
  
          LPC    403
          ZJN    CHD5        IF NO 1, 8, OR 9 PUNCH 
          SBN    1
          ZJN    CHD2        IF 9 PUNCH ONLY
          SBN    1
          ZJN    CHD4        IF 8 PUNCH 
          ADC    -376 
          NJN    CHD3        IF COMBINED PUNCHES (ILLEGAL)
          LCN    8D 
 CHD2     ADN    9D          SET VALUE FOR 9 PUNCH
          STD    T5 
          LDI    T1          CHECK FOR PUNCHES 2 THROUGH 8
          LPC    376
          ZJN    CHD12       IF NO PUNCHES 2 THROUGH 8
 CHD3     LJM    CHD18       CONVERT ILLEGAL COMBINATION TO BLANK 
  
 CHD4     LDN    8D          SET VALUE FOR 8 PUNCH
 CHD5     STD    T5 
  
*         EVALUATE PUNCHES 2 THROUGH 7. 
  
          LDI    T1 
          SHN    -2 
          LPN    77 
          ZJN    CHD12       IF NO PUNCHES 2 THROUGH 7
          SBN    1
          ZJN    CHD7        IF 7 PUNCH ONLY
          SBN    1
          ZJN    CHD8        IF 6 PUNCH ONLY
          SBN    2
          ZJN    CHD9        IF 5 PUNCH ONLY
          SBN    4
          ZJN    CHD10       IF 4 PUNCH ONLY
          SBN    10 
          ZJN    CHD11       IF 3 PUNCH ONLY
 CHD6     SBN    20 
          NJN    CHD3        IF ILLEGAL PUNCH COMBINATION 
          LCN    7-2         PRESET 2 PUNCH CONVERSION
 CHD7     ADN    1
 CHD8     ADN    1
 CHD9     ADN    1
 CHD10    ADN    1
 CHD11    ADN    3
          RAD    T5 
  
*         EVALUATE ZONE PUNCHES.
  
 CHD12    LDI    T1          ISOLATE ZONE PUNCHES 
          SHN    -9D
          SBN    6
          PJN    CHD6        IF ILLEGAL COMBINATION 
          ADN    1
          ZJN    CHD15       IF + 0 COMBINATION 
          ADN    1
          ZJN    CHD13       IF + PUNCH ONLY
          ADN    1
          ZJN    CHD17       IF - 0 COMBINATION 
 CHD13    ADN    3
          SHN    4
 CHD14    RAD    T5 
          LDM    CTBL,T5     CONVERT CHARACTER
          LJM    CHD20       ASSEMBLE CARD IMAGE IN DISPLAY CODE
  
 CHD15    LDD    T5 
 CHD16    NJN    CHD6        IF ILLEGAL PUNCH COMBINATION 
          LDN    72 
          UJN    CHD14       ASSEMBLE CARD IMAGE
  
 CHD17    LDD    T5 
          NJN    CHD16       IF ILLEGAL PUNCH COMBINATION 
          LDN    52 
          UJN    CHD14       ASSEMBLE CARD IMAGE
 CKM      SPACE  4,10 
**        CKM - CHECK KEYPUNCH MODE CHANGE. 
* 
*         ENTRY  (DA) = BUFFER ADDRESS OF CARD TO BE CHECKED. 
* 
*         EXIT   (CMCT) = NEW CONVERSION TABLE INDEX. 
  
  
 CKM      SUBR               ENTRY/EXIT 
          LDM    116,DA      EXAMINE COLUMN 79
          LMC    200
          NJN    CKMX        IF NOT *2* 
          LDM    117,DA      EXAMINE COLUMN 80
          LMN    10 
          ZJN    CKM1        IF *6* 
          LMN    1&10 
          NJN    CKMX        IF NOT *9* 
          LDN    C9XD&C6XD   USE O29 CONVERSION TABLE INDEX 
 CKM1     LMN    C6XD        USE O26 CONVERSION TABLE INDEX 
          STM    CMCT 
          UJN    CKMX        RETURN 
 CRE      SPACE  4,10 
**        CRE - NOT READY PROCESSOR.
* 
*         ENTRY  (A) = EQUIPMENT STATUS FOLLOWING CONNECT.
* 
*         EXIT   TO *PSE*.
* 
*         CALLS  MSG. 
  
  
 CRE1     LDN    ENRD        *NOT READY*
 CRE2     RJM    MSG
          LDM    CRBE 
          ZJN    CRE3        IF ERROR FLAG NOT SET
          LDC    CRD2 
          STM    CMPA        SET PHASE 1
 CRE3     LJM    PSE         RETURN 
  
 CRE      SHN    21-12
          PJN    CRE1        IF NO COMPARE ERROR
          LDN    ERCA        *RE-RD 1 CD. COMPARE ERROR.* 
          UJN    CRE2        SET BUFFER POINT MESSAGE 
 CRF      SPACE  4,10 
**        CRF - PROCESS SPECIAL FORM. 
* 
*         USES   T1 - T3. 
  
  
 CRF      LDI    DA          CHECK FIRST WORD 
          LMN    25 
          ZJN    CRF1        IF CONVERSION CHANGE 
          LJM    RER         PROCESS END OF RECORD
  
 CRF1     LDM    1,DA        CHECK FORMAT REQUEST 
          ZJN    CRF2        IF O26 CONVERSION
          LMN    1
          NJN    CRF4        IF NOT O29 
          LDN    C9XD&C6XD
 CRF2     LMN    C6XD        SET CONVERSION MODE
          STM    CMCT 
 CRF3     LJM    CRD1        GO TO PHASE 1
  
 CRF4     LMN    77&1 
          NJN    CRF3        IF UNKNOWN CONVERSION
          STD    T3 
          LDN    2           SET LITERAL INPUT FLAG 
          STM    CRLI 
          LDD    DA 
          STD    T1 
          ADC    120         COMPUTE CHECKSUM 
          STD    T2 
 CRF5     LDD    T3 
          LMI    T1 
          SHN    1
          STD    T3 
          SHN    -14
          RAD    T3 
          AOD    T1 
          LMD    T2 
          NJN    CRF5        IF NOT END OF CARD 
          LDD    T3 
          STM    CRLC        STORE CHECKSUM 
          UJN    CRF3        GO TO PHASE 1
 EBF      SPACE  4,10 
**        EBF - EMPTY BUFFER. 
* 
*         EXIT   TO *XDR1* IF CHANNEL HANGS EMPTY.
* 
*         USES   FC, T3.
* 
*         CALLS  IFN, SDM.
  
  
 EBF2     IAN    CH+40       INITIATE BUFFER FLUSH
          DCN    CH+40
          CFM    EBFX,CH     IF CHANNEL ERROR FLAG CLEAR
          LDN    0
          STD    T3 
          LDD    T5          SAVE FUNCTION CODE FOR ERROR MESSAGE 
          STD    FC 
          LDK    ECRE        *EQXXX CHANNEL PARITY ERROR.*
          RJM    SDM         SEND DAYFILE MESSAGE 
  
 EBF      SUBR               ENTRY/EXIT 
          LDN    14          INPUT TO EOR 
          RJM    IFN         ISSUE FUNCTION 
          LDN    77          DELAY FOR BYTE TRANSMISSION FROM READER
 EBF1     FJM    EBF2,CH     IF CHANNEL NOT HUNG EMPTY
          SBN    1
          NJN    EBF1        IF DELAY NOT EXCEEDED
          DCN    CH+40
          LDN    ERRL-1      FORCE EQUIPMENT TURN OFF 
          STM    CMDR 
          LDC    120         SET BYTES REMAINING COUNT
          LJM    XDR1        PROCESS INCOMPLETE TRANSFER ERROR
 PCE      SPACE  4,15 
**        PCE - PROCESS CARD ERROR. 
* 
*         ENTRY  (T3) = 0 IF BINARY CARD SEQUENCE ERROR.
*                     .NE. 0 IF ILLEGAL HOLLERITH PUNCH DETECTED. 
*                (BA - BA+1) = ABSOLUTE FET ADDRESS.
*                (FP - FP+4) = FILE PARAMETER WORD (FET+5). 
* 
*         EXIT   ERROR STATUS STORED IN (FET+5).
* 
*         USES   FP+1 - FP+2. 
* 
*         CALLS  SFA. 
  
  
 PCE      SUBR               ENTRY/EXIT 
          LDD    FP+1 
          NJN    PCEX        IF PREVIOUS ERROR
          LDM    CRSN        SET CARD NUMBER
          STD    FP+1 
          LDD    T3 
          ZJN    PCE1        IF BINARY CARD ERROR 
          LDC    4000        FLAG ILLEGAL HOLLERITH CODE
 PCE1     LMM    CRRC        SET RECORD NUMBER
          STD    FP+2 
          RJM    SFA         STORE FILE PARAMETER WORD
          ADN    5
          CWD    FP 
          UJN    PCEX        RETURN 
 RER      SPACE  4,10 
**        RER - PROCESS END OF RECORD.
* 
*         USES   BS+4, T2.
* 
*         CALLS  ACT, CKM, CLB, CON, CPS, MGR, RDB, SFA.
  
  
 RER      LDM    CRFR 
          NJN    RER1        IF NOT FIRST CARD
          LJM    RER6        SKIP EMPTY FILE
  
 RER1     LDI    DA          REQUEST WRITE
          LPN    10 
          LMC    WRIF+1000
          STD    T2 
          LDD    FA 
          ZJN    RER2        IF FIRST WRITE 
          LDC    WRIF+1000&24 
 RER2     LMD    T2          SET REQUEST
          RJM    CPS
 RER3     RJM    MGR         GO TO MANAGER
          ZJN    RER1        IF REQUEST NOT ENTERED 
          LDD    BS+4        CHECK OPERATION
          LPN    21 
          LMN    21 
          NJN    RER3        IF REQUEST NOT COMPLETE
          LDI    DA          CHECK CARD 
          LPN    37 
          LMN    17 
          ZJN    RER4        IF EOI 
          RJM    CKM         CHECK KEYPUNCH MODE
          AOM    CRRC        BUMP LOGICAL RECORD COUNT
          LDN    1
          STM    CRSN        RESET SEQUENCE ERROR COMPARITIVE NUMBER
          STD    BS+4        CLEAR LAST OPERATION 
          RJM    SFA
          CWD    BS 
          LJM    CRD1        LOOP TO PHASE 1
  
*         PROCESS EOI.
  
 RER4     RJM    ACT         PROCESS ACCOUNTING 
 RER5     RJM    MGR         GO TO MANAGER
          ZJN    RER4        IF REQUEST NOT ENTERED 
          LDD    BS+4        WAIT ACCOUNTING COMPLETE 
          LMC    1031 
          NJN    RER5        IF ACCOUNTING NOT COMPLETE 
 RER6     RJM    RDB         RELEASE DATA BUFFER
          LDC    *           SET RETURN FROM *WNB*
          STM    CMPA 
          RJM    CON         CONNECT EQUIPMENT
          NJN    RER7        IF CONNECT REJECT
          LDD    ST 
          LPN    1
          ZJN    RER7        IF NOT READY 
          RJM    CLB
          LJM    MGR1        RETURN TO DRIVER VIA MANAGER 
  
 RER7     LDN    0           DROP EQUIPMENT 
          LJM    TOP1        TERMINATE OPERATION
          TITLE  DRIVER SUBROUTINES.
 CON      SPACE  4,15 
**        CON - CONNECT EQUIPMENT.
* 
*         EXIT   (A) .NE. 0 IF FUNCTION REJECT. 
*                (FC) = CONNECT CODE. 
*                (ST) = EQUIPMENT STATUS. 
*                EXITS TO *FCN2* IF FUNCTION TIMEOUT. 
* 
*         USES   FC, ST, T1 - T3. 
* 
*         CALLS  CCE, FCN, IFN, STS, WNB. 
* 
*         MACROS DCHAN, RCHAN.
  
  
 CON      SUBR               ENTRY/EXIT 
          LDM    CMCE        CHECK CHANNEL
          LPN    77 
          STD    T3 
          CHTE   *
          LMN    CH 
          ZJN    CON3        IF CORRECT CHANNEL 
          LDC    TCHS-1 
          STD    T1 
          LDD    CR          RELEASE LAST CHANNEL 
          DCHAN 
          CHTE   CR 
*         LDN    0
 CON1     RAI    T2          MODIFY NEXT CHANNEL
          AOD    T1 
 CON2     LDI    T1 
          STD    T2 
          LDD    T3 
          CHTL   *
          SBN    CH 
          NJN    CON1        IF MORE CHANNELS TO MODIFY 
          LDD    CR          RESERVE NEW CHANNEL
          RCHAN 
 CON3     LDN    10          SELECT MODE II CONNECT 
          RJM    IFN         ISSUE FUNCTION 
          LDM    CMCE        OUTPUT CONNECT CODE
          SCN    77 
          OAN    CH+40
          STD    FC          SAVE CONNECT CODE FOR *REJECT* MESSAGE 
          LDC    100D        TIMEOUT CONVERTER
 CONA     EQU    *-1
*         LDC    200D        (2X PP)
*         LDC    400D        (4X PP)
  
 CON4     EJM    CON5,CH     IF FUNCTION ACCEPT / CONVERTER REJECT
          SBN    4
          PJN    CON4        IF NOT TIMED OUT 
          LJM    FCN2        PROCESS FUNCTION TIMEOUT 
  
 CON5     DCN    CH+40
 CON6     LDN    13          SELECT EQUIPMENT STATUS
          RJM    IFN         ISSUE FUNCTION 
          IAN    CH+40
          DCN    CH+40
          STD    ST          STORE EQUIPMENT STATUS 
          LDN    SCEI        STATUS PARITY ERROR
          RJM    CCE         CHECK FOR CHANNEL ERROR
          NJN    CON6        IF ERROR 
          RJM    STS         GET CONVERTER STATUS 
          NJN    CON9        IF ERROR 
          LDD    EQ 
          SBK    LPDT 
          ZJN    CON7        IF PRINTER 
          RJM    WNB
 CON7     LDN    24          SELECT ABNORMAL *EOP* INTERRUPT
          RJM    FCN
 CON8     LDD    CS          RETURN WITH STATUS 
          LPN    7
 CON9     LJM    CONX        RETURN 
 FCN      SPACE  4,15 
**        FCN - OUTPUT FUNCTION TO EQUIPMENT. 
* 
*         ENTRY  (A) = FUNCTION CODE. 
* 
*         EXIT   (FC) = FUNCTION CODE.
*                IF FUNCTION REJECT, THEN EXIT IS MADE TO *MGR1*. 
*                THUS, ALL CODE SINCE THE LAST *RJM MGR* WILL BE
*                EXECUTED AGAIN PRIOR TO A RETRY ON THE FUNCTION. 
*                IF THE RETRY LIMIT IS REACHED OR IF THE FUNCTION 
*                TIMES OUT, THEN EXIT IS MADE TO *CEP*. 
* 
*         USES   FC.
* 
*         CALLS  SDM, STS.
  
  
 FCN4     RJM    STS         CHECK 6681 STATUS
          ZJN    FCNX        IF FUNCTION ACCEPTED 
          LJM    MGR1        GO TO MANAGER
  
 FCN      SUBR               ENTRY/EXIT 
          FAN    CH          ISSUE FUNCTION 
          STD    FC          SAVE FUNCTION FOR REJECT MESSAGE 
          LDM    CONA 
 FCN1     IJM    FCN4,CH     IF FUNCTION ACCEPTED 
          SBN    4
          PJN    FCN1        IF NOT TIMED OUT 
  
*         *FCN2* IS A SECONDARY ENTRY POINT FOR *FCN*.
* 
*         FUNCTION TIMEOUT ERROR PROCESSOR. 
  
 FCN2     DCN    CH+40
          LDN    EFTM        *EQXXX FUNCTION TIMEOUT.*
          RJM    SDM         FORMAT DAYFILE MESSAGE 
 FCN3     LJM    CEP         CHANNEL ERROR PROCESSOR
 IFN      SPACE  4,10 
**        IFN - ISSUE FUNCTION TO CONVERTER.
* 
*         ENTRY  (A) = FUNCTION CODE. 
* 
*         EXIT   CHANNEL ACTIVE.
*                (T5) = FUNCTION CODE.
*                IF THE FUNCTION TIMES OUT, THEN EXIT IS MADE TO
*                *CEP* VIA *FCN2*.
* 
*         USES   FC, T5.
  
  
 IFN2     ACN    CH 
  
 IFN      SUBR               ENTRY/EXIT 
          SHN    6
          FAN    CH          ISSUE FUNCTION 
          STD    T5          SAVE FUNCTION
          LDN    6           SET TIME LIMIT 
 IFN1     IJM    IFN2,CH     IF FUNCTION ACCEPTED 
          SBN    1
          NJN    IFN1        IF NOT TIMED OUT 
          LDD    T5 
          STD    FC          FUNCTION CODE FOR ERROR MESSAGE
          UJN    FCN2        FUNCTION TIMEOUT ERROR PROCESSOR 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPWBB 
          SPACE  4,10 
 RTBL     BSS    0           START OF RELOCATED CODE
          LOC    CTBLL
 REC      SPACE  4,10 
**        REC - RELEASE EQUIPMENT CONNECT.
* 
*         CALLS  CON, FCN.
  
  
 REC      SUBR               ENTRY/EXIT 
          RJM    CON         CONNECT EQUIPMENT
          NJN    RECX        IF CONNECT REJECT
*         LDN    0           RELEASE AND DISCONNECT EQUIPMENT 
          RJM    FCN
          UJN    RECX        RETURN 
 SDP      SPACE  4,10 
**        SDP - SUB-DRIVER PROCESSOR. 
  
  
 SDP      SUBR               ENTRY/EXIT 
          LDD    BR 
          NJN    SDP2        IF BUSY RETURN REQUESTED 
          RJM    CON         CONNECT EQUIPMENT
          NJN    SDPX        IF CONNECT REJECT
          LDD    ST 
          SHN    21-0 
          MJN    SDP1        IF EQUIPMENT READY 
          LDM    TNRP,EQ
          STD    PA 
          LDD    ST          (A) = EQUIPMENT STATUS 
          UJN    SDP3        ENTER NOT READY PROCESSOR
  
 SDP1     SHN    1+21-1 
          PJN    SDP2        IF EQUIPMENT NOT BUSY
          SHN    2+21-10
          PJN    SDPX        IF NOT END OF OPERATION INTERRUPT
 SDP2     LDM    CMPA        SET PROGRAM ADDRESS
          STD    PA 
          LDM    CMAR        RESET (A)
 SDP3     LJM    0,PA        RETURN TO NEXT DRIVER ADDRESS
 STS      SPACE  4,10 
**        STS - GET CONVERTER STATUS. 
* 
*         EXIT   (A) = BITS 0 - 2 OF 6681 STATUS. 
*                (CS) = CONVERTER STATUS. 
* 
*         CALLS  CCE, IFN, PRE, SDM.
  
  
 STS      SUBR               ENTRY/EXIT 
 STS1     LDN    12          SELECT 6681 STATUS 
          RJM    IFN         ISSUE FUNCTION 
          IAN    CH+40
          DCN    CH+40
          STD    CS 
          LDN    SCEI        STATUS PARITY ERROR
          RJM    CCE         CHECK FOR CHANNEL ERROR
          NJN    STS1        IF ERROR 
          LDD    CS 
          LPN    7
          ZJN    STSX        IF NO ERRORS 
  
*         FUNCTION REJECT/TRANSMISSION PARITY ERROR PROCESSOR.
  
          LDN    FRJI        CHECK ERROR LIMIT EXCEEDED 
          RJM    PRE
          LDD    CS 
          LPN    7
          UJN    STSX        RETURN 
 WNB      SPACE  4,15 
**        WNB - WAIT NOT BUSY.
* 
*         ENTRY  (ST) = DEVICE STATUS.
* 
*         EXIT   IF DEVICE BUSY, THEN EXIT IS MADE
*                TO *MGR1*.  THUS, ALL CODE SINCE 
*                LAST RETURN TO MANAGER WILL BE 
*                EXECUTED AGAIN PRIOR TO PROCEEDING.
*                IF BUSY RETRY COUNT REACHED, 
*                EXIT IS MADE TO *CEP*. 
* 
*         CALLS  SDM. 
  
  
 WNB3     STM    CMCB        CLEAR CONTROLLER BUSY RETRY COUNT
  
 WNB      SUBR               ENTRY/EXIT 
          LDD    ST          CHECK EQUIPMENT STATUS FOR BUSY
          LPN    2
          ZJN    WNB3        IF DEVICE NOT BUSY 
          SOM    CMCB        DECREMENT RETRY COUNT
          ZJN    WNB2        IF RETRY COUNT EXHAUSTED 
 WNB1     LJM    MGR1        RETURN TO MANAGER
  
 WNB2     SOM    CMTC 
          NJN    WNB1        IF NOT AT ABSOLUTE RETRY LIMIT 
          LDN    ECBM        *EQXXX CONTROLLER HUNG BUSY.*
          RJM    SDM         SEND DAYFILE MESSAGE 
          LJM    CEP         CHANNEL ERROR PROCESSOR
 XDR      SPACE  4,20 
**        XDR - TRANSMIT DATA RECORD (TO/FROM EXTERNAL EQUIPMENT).
* 
*         ENTRY  (A) BITS  0-11 = INSTRUCTION (IAM/OAM).
*                         12-17 = CONVERTER FUNCTION. 
* 
*         USES   CS, FC, T1.
* 
*         CALLS  CCE, CRV, FCN, IFN, PRE, STS.
  
  
 XDR      SUBR               ENTRY/EXIT 
          CHTE   *
          LMN    CH          SET INSTRUCTION WITH CHANNEL 
          STM    XDRA 
          SHN    -14         SET I/O FUNCTION 
          STD    FC 
          LDD    DA          SET BUFFER ADDRESS 
          STM    XDRA+1 
          LDD    FC          ISSUE CONVERTER FUNCTION 
          RJM    IFN
          LDM    CMLR 
 XDRA     OAM.   **,CH       OUTPUT (INPUT) DATA RECORD 
*         IAM    **,CH
          FJM    *,CH 
          DCN    CH+40
          NJN    XDR1        IF INCOMPLETE DATA TRANSFER
          LDN    DCPI        CHECK FOR DATA PARITY ERROR
          RJM    CCE
          NJN    XDR2        IF ERROR 
          LDN    DRRI 
          RJM    CRV         CHECK FOR RECOVERED ERROR
          RJM    STS         GET CONVERTER STATUS 
          NJN    XDR2        IF ERROR 
          UJN    XDRX        RETURN 
  
*         *XDR1* IS A SECONDARY ENTRY POINT FOR *XDR*.
  
 XDR1     STD    CS 
          LDN    DRRI        PROCESS RECOVERABLE ERROR
          RJM    PRE
 XDR2     LDN    0           CLEAR AND DISCONNECT EQUIPMENT 
          RJM    FCN
          AOM    CMEC 
          LDM    XDRB,EQ
          STD    T1 
          LJM    0,T1        EXIT TO RETRY PROCESSOR
  
 XDRB     BSS    0           RETRY PROCSSING ADDRESS
          LOC    0
          CON    LPR1        LINE PRINTER 
          CON    CPX         CARD PUNCH 
          CON    CRB5        CARD READER
          LOC    *L+XDRB
 TCHS     SPACE  4,10 
**        TCHS - CHANNEL TABLE. 
  
  
 TCHS     CHTB
  
          ERRNG  ICD-*       RELOCATED CODE OVERLAPS
          LOC    *O 
 RTBLL    EQU    *-RTBL 
          TITLE  PRESET.
 PRS      SPACE  4,15 
**        PRS - PRESET SUB-DRIVER OVERLAY.
* 
*         EXIT   (CR) = CHANNEL RESERVED. 
*                (DB) = FIRST DATA BUFFER ADDRESS.
*                TO *ZBA*.
* 
*         USES   CM - CM+4, T1 - T3.
* 
*         MACROS RCHAN. 
  
  
 PRS      BSS    0           ENTRY
          LDC    CTBLL       MOVE TABLES TO PP RESIDENT 
          STD    T1 
          LDC    RTBL 
          STD    T2 
 PRS1     LDI    T2 
          STI    T1 
          AOD    T1 
          AOD    T2 
          LMC    RTBL+RTBLL 
          NJN    PRS1        IF NOT END OF TABLES 
          LDN    IPRL        CHECK SYSTEM DEFAULT KEYPUNCH MODE 
          CRD    CM 
          LDD    CM+2 
          LPN    1
          NJN    PRS4        IF SYSTEM NOT IN 63 CHARACTER SET MODE 
          LDC    *
          ORG    *-1
          LOC    LPDA 
          UJN    LPD9        PROCESS 63 CHARACTER SET LINE
          LOC    *O 
          STM    LPDA 
          LDN    45          CHANGE 6/12 COLON CONVERSION TO PERCENT
          STM    MCCC 
 PRS4     LDK    MABL        FETCH PP SPEED INDICATOR 
          CRD    CM 
          LDD    CM+4        SET TIMEOUT VALUE
          RAM    PRSA 
          LDN    100D/4      SET CONVERTER TIMEOUT
 PRSA     SHN    2
          STM    CONA 
          LDN    CH          RESERVE CHANNEL
          STD    CR 
          RCHAN 
          LDN    ZERL 
          CRD    CM 
          LDD    MA          CLEAR *CIO* REQUEST PARAMETERS 
          ADN    1
          CWD    CM 
  
*         INITIALIZE SYSTEM PAGE PARAMETERS 
  
          LDN    IPPL        FETCH SYSTEM PAGE PARAMETERS 
          CRD    CM 
          LDD    CM+3        SET PRINT WIDTH
          LPC    PWUL 
          ADN    1
          LMC    -0 
          STM    LPDB 
          LDC    DBUF        SET BUFFER INFORMATION 
          STD    DB 
          STD    T1 
          LDK    DBUFS
          STD    T2 
          LDC    DBUFL
          STD    T3 
          LJM    ZBA         CLEAR DATA BUFFER ASSIGNMENTS
          SPACE  4,10 
          OVERFLOW  OVLA
 DBUF     SPACE  4,20 
**        DBUF - BUFFER AREAS.
  
  
 DBUFS    EQU    PWMX+5      DATA BUFFER SIZE 
 DBUFW    EQU    DBUFS/10D   DATA BUFFER SIZE IN CM WORDS 
 DBUF     EQU    RTBL 
 .L       SET    7777-DBUF
 NDBUF    EQU    .L/DBUFS    NUMBER OF DATA BUFFERS 
 DBUFL    EQU    DBUF+NDBUF*DBUFS  LWA+1 OF DATA BUFFERS
  
*         IF THE FOLLOWING TEST PRODUCES A NEGATIVE NUMBER, 
*         PERFORMANCE MAY BE DEGRADED (SINCE THERE ARE LESS THAN
*         4 DATA BUFFERS).
  
 7        ERRNG  NDBUF-4
  
          ERRNG  10000-DBUFL BUFFERS WRAP PP MEMORY 
 XCD      TTL    1CD/3CY - BATCHIO COMBINED DRIVER. 
          TITLE 
          QUAL   3CY
          IDENT  3CY,XCDX 
*COMMENT  1CD - DRIVE *CCC*-CONNECTED DEVICES.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 3CY      SPACE  4,10 
***       1CD/3CY - BATCHIO COMBINED DRIVER.
* 
*         THIS SUB-DRIVER OVERLAY CONTAINS DRIVERS TO ACCESS DEVICES
*         CONNECTED VIA A CYBER CHANNEL COUPLER (CCC).
 3CY      SPACE  4,10 
          ORG    OVLA 
  
 XCD      SUBR               ENTRY/EXIT 
          CHTE   CCEA 
          LJM    PRS         PRESET 
          TITLE  5870/5970 DRIVER SECTION.
 NPD      SPACE  4,10 
**        NPD - 5870/5970 DRIVER. 
  
  
 NPD      RJM    PSD         PRESET DRIVER
 NPD1     LDC    GBPF+1000   REQUEST BANNER PAGE GENERATION 
          RJM    CPS
 NPD2     RJM    MGR         GO TO MANAGER
          ZJN    NPD1        IF REQUEST NOT ACCEPTED
          LDD    BS+4        CHECK BUFFER STATUS
          LMC    GBPF+1 
          NJN    NPD2        IF OPERATION NOT COMPLETE
          UJN    NPD4        PRINT BANNER PAGE
  
*         PHASE 1.  LOAD BUFFER.
  
 NPD3     SCN    2           SET DRIVER HOLDING 
          LMN    2
          STM    CMHF 
  
*         *NPD4* IS A SECONDARY ENTRY POINT FOR *NPD*.
  
 NPD4     LDN    1           SET BUSY RETURN
          STD    BR 
          RJM    MGR         GO TO MANAGER
          LDM    CMHF 
          NJN    NPD3        IF HOLD INITIATED
          RJM    COB         CHECK OUTPUT BUFFER
          SBN    DBUFW*2+1
          PJN    NPD5        IF AT LEAST 1 LINE AND 1 WORD
          LDD    BS+4 
          LPN    20 
          ZJN    NPD4        IF NOT EOR/EOF/EOI 
 NPD5     RJM    ADB         ASSIGN DATA BUFFER 
          LDN    0
          STD    BR          CLEAR BUSY RETURN
          STM    NPLC        CLEAR LINE COUNT 
          LDM    CMSF        CHECK MODE OF FILE 
          LPN    50 
          ZJN    NPD6        IF NOT 6/12 OR 8/12 ASCII PRINT FILE 
          LDN    DBUFW
 NPD6     ADN    DBUFW       READ CODED BUFFER
          RJM    RCB
          NJN    NPD8        IF NOT EMPTY LINE
 NPD7     LDN    40          SET SPACE CHARACTER
          STI    T1 
          AOD    T1 
          AOM    CMLR        ADVANCE BYTE COUNT FOR LINE
 NPD8     SBN    2
          MJN    NPD7        IF NOT 2 CHARACTERS IN LINE
          LDM    CMSF 
          LPN    10 
          NJN    NPD9        IF 12 BIT ASCII PRINT FILE 
 NPDA     PSN 
*         UJN    NPD9        (SYSTEM IN 63 CHARACTER SET) 
          LDM    -1,T1       CHECK LAST CHARACTER IN LINE 
          LMN    72 
          NJN    NPD9        IF NOT COLON 
          LDN    40          REPLACE WITH BLANK 
          STM    -1,T1
 NPD9     SOM    CMLR        DEDUCT CARRIAGE CONTROL CHARACTER
          SBK    PXMX+1 
          PJN    NPD9        IF LINE TOO LONG 
          LDD    T2          SET FORMAT CONTROL FOR NEXT LINE 
          STM    NPFC 
          LDD    OT          SAVE *OUT* POINTER 
          STM    NPOT 
          LDD    OT+1 
          STM    NPOT+1 
          RJM    MGR         GO TO MANAGER
  
*         PHASE 2.  PROCESS FORMAT CONTROL. 
  
          LDN    4           PRESET SINGLE SPACE AFTER PRINT
          STM    NPWF 
          LDI    DA          CHECK FORMAT CHARACTER 
          LPC    3777 
          STI    DA 
          LMN    40          ASCII BLANK
          ZJN    NPD11       IF ASCII BLANK 
          RJM    PFC         PROCESS FORMAT CONTROL 
          ZJN    NPD10       IF PRINT LINE
          RJM    RDB         RELEASE DATA BUFFER
          LDN    NPOT        UPDATE *FET* 
          RJM    SOP         STORE OUT POINTER
          LJM    NPD4        GO TO PHASE 1
  
 NPD10    LDI    DA          CHECK FOR *PM* MESSAGE 
          SBK    120
          NJN    NPD11       IF NOT *P* 
          LDM    1,DA 
          LPC    3777 
          SBK    115
          NJN    NPD11       IF NOT *PM*
          LDM    CMLR        CHECK RECORD LENGTH
          SBN    1
          ZJN    NPD11       IF ONLY *PM* 
          RJM    PPM         PROCESS PM MESSAGE 
 NPD11    LDM    CMBE 
          ZJN    NPD14       IF BUFFER EMPTY
          LDM    CMSF 
          LPN    10 
          NJN    NPD12       IF 12 BIT ASCII MODE 
          LDM    NPFC        CHECK FORMAT CHARACTER OF NEXT LINE
          SHN    -6 
          LMN    1R+
          UJN    NPD13       CHECK FOR *+*
  
 NPD12    LDM    NPFC        CHECK FORMAT CHARACTER OF NEXT LINE
          LPC    3777 
          LMN    53          (ASCII *+*)
 NPD13    NJN    NPD14       IF NOT *+* 
          LDN    7           WRITE WITHOUT SPACING
          STM    NPWF 
  
*         PHASE 3.  PRINT LINE. 
  
 NPD14    RJM    MGR         RETURN TO MANAGER
          LDN    ECLE        CLEAR *I* DISPLAY
          RJM    MSG
          AOD    DA          DO NOT PRINT FORMAT CHARACTER
          LDM    NPWF        SET WRITE FUNCTION CODE
          RJM    WDR         WRITE DATA RECORD
          RJM    RDB         RELEASE DATA BUFFER
  
*         PHASE 4.  PROCESS POST PRINT OPERATIONS.
  
          LDN    NPOT        STORE *OUT* POINTER
          RJM    SOP
          AOM    NPLC        CHECK USER LIMITS
          RJM    CUL
          LJM    NPD4        GO TO PHASE 1
 NEF      SPACE  4,10 
**        NEF - LIST END OF INFORMATION.
* 
*         USES   BR, T4.
* 
*         CALLS  ACT, MGR, NPN. 
  
  
 NEF      LDD    BS+4        CHECK BUFFER STATUS
          SHN    21-11
          MJN    NEF1        IF EOI 
          LJM    NPN1        RESET BUFFER STATUS
  
 NEF1     LDD    F2+2        CHECK ABORT FLAG 
          LPN    2
          ZJN    NEF2        IF NO ABORT FLAG 
          LDN    0           CLEAR REPEAT COUNT 
          STM    CMER 
          LJM    NPN         PROCESS *END*
  
*         *NEF2* IS A SECONDARY ENTRY POINT FOR *NEF*.
  
 NEF2     AOD    BR 
          LDM    CMSF        CHECK ACCOUNT FLAG 
          LPN    1
          ZJN    NEF3        IF ACCOUNT FLAG NOT SET
          LJM    TOF         TERMINATE OUTPUT FILE
  
 NEF3     AOM    CMSF        SET ACCOUNT FLAG 
          SCN    50          CLEAR 6/12 AND 8/12 ASCII PRINT FLAGS
          STM    CMSF 
 NEF4     LDN    0           SET PRINTER FOR *QAP*
          STD    EQ 
          RJM    ACT         PROCESS ACCOUNTING 
 NEF5     RJM    MGR         GO TO MANAGER
          ZJN    NEF4        IF REQUEST NOT ENTERED 
          LDD    BS+4 
          SHN    21-0 
          PJN    NEF5        IF ACCOUNTING NOT COMPLETE 
          LJM    NPD4        PRINT LINE COUNT 
 NPE      SPACE  4,10 
**        NPE - ERROR PROCESSOR.
* 
*         ENTRY  (A) = DEVICE STATUS. 
* 
*         EXIT   TO *PSE*.
* 
*         CALLS  MSG. 
  
  
 NPE      BSS    0           ENTRY
          LPN    4
          ZJN    NPE1        IF NO INTERVENTION REQUIRED
          LDN    EIVR&ENRD
 NPE1     LMN    ENRD        SEND *NOT READY.* MESSAGE
          RJM    MSG
          LJM    PSE         RETURN 
 NPN      SPACE  4,10 
**        NPN - PROCESS *END*.
* 
*         USES   BS+4, CM - CM+4. 
* 
*         CALLS  SFA. 
* 
*         MACROS NFA. 
  
  
 NPN      LDN    0           CLEAR HOLD FLAG
          STM    CMHF 
          LDM    CMSF        CHECK END FLAG 
          LPN    2
          NJN    NPN2        IF SET PREVIOUSLY
          LDN    2           SET END FLAG 
          RAM    CMSF 
          NFA    FA,R        READ FST INFORMATION 
          CRD    CM 
          LDD    FP+1        RESET FILE STATUS
          ZJN    NPN2        IF NO DAYFILE
          STD    CM+2 
          LDD    FP+2 
          STD    CM+3 
          NFA    FA,R        UPDATE FST INFORMATION 
          CWD    CM 
  
*         *NPN1* IS A SECONDARY ENTRY POINT FOR *NPN*.
  
 NPN1     LDN    1           RESET BUFFER STATUS
          STD    BS+4 
          RJM    SFA         STORE BUFFER STATUS
          CWD    BS 
          LJM    NPD4        RETURN TO MAIN DRIVER
  
 NPN2     LJM    NEF2        PROCESS ACCOUNTING 
 PFC      SPACE  4,20 
**        PFC - PROCESS FORMAT CONTROL. 
* 
*         ENTRY  ((DA)) = FORMAT CONTROL CHARACTER (ASCII). 
* 
*         EXIT   (A) = 0 IF LINE SHOULD BE PRINTED. 
*                (NPLC) = LINE COUNT. 
*                (NPWF) = WRITE FUNCTION CODE.
* 
*         ERROR  TO *MGR1* IF FUNCTION REJECTED.
* 
*         USES   T4.
* 
*         CALLS  FCN, GST.
  
  
 PFC3     LDM    1,T4        SET LINE CHARGE COUNT
          SHN    14 
          STM    NPLC 
          SHN    -14
  
 PFC      SUBR               ENTRY/EXIT 
          LDC    TPFC-4      SET FWA OF FORMAT CONTROL TABLE
          STD    T4 
 PFC1     LDN    4           SET NEXT ADDRESS 
          RAD    T4 
          LDI    T4 
          ZJN    PFCX        IF END OF TABLE
          LMI    DA 
          NJN    PFC1        IF NO MATCH
          LDM    2,T4        SET SECOND WRITE FUNCTION
          STM    NPWF 
          LDM    3,T4        SET FIRST WRITE FUNCTION 
 PFC2     ZJN    PFC3        IF NO FUNCTION TO ISSUE
          RJM    FCN         ISSUE FUNCTION 
          RJM    GST         GET GENERAL STATUS 
          ZJN    PFC2        IF NO ERROR
          LJM    MGR1        RETURN TO *MGR*
 TPFC     SPACE  4,10 
**        TPFC - TABLE OF FORMAT CONTROL CHARACTERS.
* 
*         FOUR WORDS PER ENTRY. 
  
  
 TPFC     BSS    0
          NFMTC  C,,0,66     SKIP TO CHANNEL 6 AFTER PRINT
          NFMTC  D,,0,65     SKIP TO CHANNEL 5 AFTER PRINT
          NFMTC  E,,0,64     SKIP TO CHANNEL 4 AFTER PRINT
          NFMTC  F,,0,63     SKIP TO CHANNEL 3 AFTER PRINT
          NFMTC  G,,0,62     SKIP TO CHANNEL 2 AFTER PRINT
          NFMTC  H,,0,61     SKIP TO CHANNEL 1 AFTER PRINT
          NFMTC  Q,1,0,0     LINE IGNORED 
          NFMTC  R,1,0,0     LINE IGNORED 
          NFMTC  S,1,0,0     LINE IGNORED 
          NFMTC  T,1,0,0     LINE IGNORED 
          NFMTC  V,1,0,0     LINE IGNORED 
          NFMTC  0,,1,1,4    SPACE 1 LINE BEFORE PRINT
          NFMTC  1,,0,21,4   EJECT BEFORE PRINT 
          NFMTC  2,,0,54     ADVANCE TO LAST LINE BEFORE PRINT
          NFMTC  3,,0,46     SKIP TO CHANNEL 6 BEFORE PRINT 
          NFMTC  4,,0,45     SKIP TO CHANNEL 5 BEFORE PRINT 
          NFMTC  5,,0,44     SKIP TO CHANNEL 4 BEFORE PRINT 
          NFMTC  6,,0,43     SKIP TO CHANNEL 3 BEFORE PRINT 
          NFMTC  7,,0,42     SKIP TO CHANNEL 2 BEFORE PRINT 
          NFMTC  8,,0,41     SKIP TO CHANNEL 1 BEFORE PRINT 
*         NFMTC  +,,0,0      PROCESSED IN MAIN DRIVER 
          NFMTC  -,,2,2,4    SPACE 2 LINES BEFORE PRINT 
          NFMTC  /,,0,7      SUPPRESS SPACE AFTER PRINT 
          DATA   0           END OF TABLE 
 PPM      SPACE  4,10 
**        PPM - PROCESS PM MESSAGE. 
* 
*         ENTRY  (DA) = FWA OF LINE RECORD. 
*                (FP+2) = VALIDATION FLAGS. 
*                (CMLR) = RECORD LENGTH - 1.
* 
*         EXIT   (CMLR) = LENGTH OF *DJDE* ENTRY. 
* 
*         USES   T1, T2, T4.
* 
*         CALLS  MVE. 
  
  
 PPM      SUBR               ENTRY/EXIT 
          LDD    F2+2        CHECK VALIDATION 
          LPN    1
          ZJN    PPMX        IF NOT *CBIO* VALIDATED
          LDC    80D+1       INSURE MAX LENGTH OF 80 CHARACTERS 
          SBM    CMLR 
          PJN    PPM1        IF .LE. 80 CHARACTERS
          RAM    CMLR 
 PPM1     LDD    DA          SET LWA+1 OF SOURCE
          ADM    CMLR 
          ADN    1
          STD    T1 
          ADN    PPMAL-1     SET LWA+1 OF DESTINATION 
          STD    T2 
          ADN    PPMBL       SET LWA+1 OF ENDING STRING 
          STD    T4 
          SOM    CMLR        MOVE TEXT STRING 
          RJM    MVE
          LDC    PPMB+PPMBL 
          STD    T1 
          LDD    T4 
          STD    T2 
          LDN    PPMBL       MOVE ENDING STRING 
          RJM    MVE
          LDC    PPMA+PPMAL 
          STD    T1 
          LDD    DA 
          ADN    PPMAL+1
          STD    T2 
          LDN    PPMAL       MOVE BEGINING STRING 
          RJM    MVE
          LDN    PPMAL+PPMBL SET RECORD LENGTH
          RAM    CMLR 
          LJM    PPMX        RETURN 
  
 PPMA     STR    ("DJDE"OTEXT=) 
          DATA   50          (
          STR    (')
 PPMAL    EQU    *-PPMA 
  
 PPMB     STR    (',1,WAIT) 
          DATA   51          )
          STR    (;END;)
 PPMBL    EQU    *-PPMB 
 CON      SPACE  4,15 
**        CON - CONNECT TO EQUIPMENT. 
* 
*         ENTRY  (CMCE) = UNIT NUMBER.
* 
*         EXIT   (A) = GENERAL STATUS.
*                (ST) = GENERAL STATUS. 
* 
*         ERROR  TO *FCN3* IF FUNCTION TIMEOUT. 
* 
*         CALLS  FCN, GST.
  
  
 CON2     DCN    CH+40
          RJM    GST         GET GENERAL STATUS 
  
 CON      SUBR               ENTRY/EXIT 
          LDN    0           ISSUE SELECT UNIT FUNCTION 
          RJM    FCN
          LDM    CMCE        SET UNIT NUMBER
          SHN    -11
          ACN    CH 
          OAN    CH+40
 CON1     ADD    ON 
          EJM    CON2,CH     IF FUNCTION ACCEPTED 
          NJN    CON1        IF NOT TIMED OUT 
          UJN    FCN3        PROCESS FUNCTION TIMEOUT 
 FCN      SPACE  4,15 
**        FCN - OUTPUT FUNCTION TO EQUIPMENT. 
* 
*         ENTRY  (A) = FUNCTION CODE. 
* 
*         EXIT   (FC) = CURRENT FUNCTION CODE.
*                (FC) = PRIOR FUNCTION CODE IF CURRENT FUNCTION CODE IS 
*                       A GENERAL STATUS. 
* 
*         ERROR  TO *CEP* IF FUNCTION TIMEOUT.
* 
*         USES   T1.
* 
*         CALLS  SDM. 
  
  
 FCN      SUBR               ENTRY/EXIT 
          FAN    CH          ISSUE FUNCTION 
          LMN    12 
          ZJN    FCN1        IF GENERAL STATUS FUNCTION 
          LMN    12 
          STD    FC          SAVE FUNCTION CODE FOR ERROR MESSAGE 
 FCN1     LDK    1000D*4     FOUR SECOND DELAY
          ERRPL  1000D*4-7777  DELAY COUNT OVERFLOWS
          STD    T1          SET TIMEOUT COUNTDOWN INCREMENT
 FCN2     LDM    .DLY        DELAY 1 MILLISECOND
          SHN    2
 FCN2.4   IJM    FCNX,CH     IF FUNCTION ACCEPTED 
          SBN    1
          NJN    FCN2.4      IF INNER LOOP NOT EXPIRED
          SOD    T1 
          PJN    FCN2        IF TIMEOUT NOT ELAPSED 
          SOM    CMTC 
          NJN    FCN1        IF TIMEOUT NOT ELAPSED 
  
*         *FCN3* IS A SECONDARY ENTRY POINT FOR *FCN*.
  
 FCN3     DCN    CH+40
          LDN    EFTM        *EQXXX FUNCTION TIMEOUT.*
          RJM    SDM
          LJM    CEP         PROCESS CHANNEL ERROR
 GST      SPACE  4,15 
**        GST - GET GENERAL STATUS OF CCC.
* 
*         ENTRY  CHANNEL INSTRUCTIONS SET.
* 
*         EXIT   (A) = GENERAL STATUS.
*                (ST) = GENERAL STATUS. 
* 
*         ERROR  TO *FCN2* IF FUNCTION TIMEOUT. 
*                TO *CEP* IF STATUS ERROR.
* 
*         CALLS  CCE, FCN, SDM. 
  
  
 GST2     LDD    ST 
  
 GST      SUBR               ENTRY/EXIT 
 GST1     LDN    12          ISSUE GENERAL STATUS FUNCTION
          RJM    FCN
          ACN    CH 
          IAN    CH+40
          DCN    CH+40
          STD    ST 
          LDN    SCEI        STATUS PARITY ERROR
          RJM    CCE         CHECK FOR CHANNEL ERROR
          NJN    GST1        IF ERROR 
          LDD    ST          CHECK FOR STATUS ERROR 
          SHN    -11
          LMN    5
          NJN    GST2        IF NO ERROR
          LDN    ECSE        *EQXXX CCC/NIP STATUS ERROR.*
          RJM    SDM
          LJM    CEP         PROCESS CHANNEL ERROR
 MCI      SPACE  4,10 
**        MCI - MODIFY CHANNEL INSTRUCTIONS.
* 
*         ENTRY  (CMCE) = CHANNEL FOR DEVICE. 
*                (CR) = CURRENT CHANNEL.
* 
*         EXIT   (CR) = CHANNEL RESERVED. 
* 
*         USES   T1 - T3. 
* 
*         MACROS DCHAN, RCHAN.
  
  
 MCI1     RAI    T2          MODIFY NEXT CHANNEL
          AOD    T1 
 MCI2     LDI    T1 
          STD    T2 
          LDD    T3 
          CHTL   *
          SBN    CH 
          NJN    MCI1        IF MORE CHANNELS TO MODIFY 
          LDD    CR          RESERVE NEW CHANNEL
          RCHAN 
  
 MCI      SUBR               ENTRY/EXIT 
          LDM    CMCE        CHECK CHANNEL
          LPN    77 
          STD    T3 
          CHTE   *
          LMN    CH 
          ZJN    MCIX        IF CORRECT CHANNEL 
          LDD    CR          RELEASE LAST CHANNEL 
          DCHAN 
          CHTE   CR          UPDATE *CR* DIRECT CELL
          LDC    TCHS        MODIFY CHANNELS
          STD    T1 
          UJN    MCI2        MODIFY FIRST CHANNEL 
 MVE      SPACE  4,10 
**        MVE - MOVE BUFFER.
* 
*         ENTRY  (A) = NUMBER OF BYTES TO MOVE. 
*                (T1) = LWA+1 OF SOURCE BUFFER. 
*                (T2) = LWA+1 OF DESTINATION BUFFER.
* 
*         USES   T1, T2, T3.
  
  
 MVE1     SOD    T1 
          SOD    T2 
          LDI    T1 
          STI    T2 
          SOD    T3 
 MVE2     NJN    MVE1        IF MOVE NOT COMPLETE 
  
 MVE      SUBR               ENTRY/EXIT 
          STD    T3 
          UJN    MVE1        BEGIN MOVE 
 REC      SPACE  4,10 
**        REC - RELEASE EQUIPMENT CONNECT.
  
  
 REC      SUBR               ENTRY/EXIT 
          UJN    RECX        RETURN 
 SDP      SPACE  4,10 
**        SDP - SUB-DRIVER PROCESSOR. 
* 
*         CALLS  CON, MCI.
  
  
 SDP      SUBR               ENTRY/EXIT 
          LDD    BR 
          NJN    SDP1        IF BUSY RETURN REQUESTED 
          RJM    MCI         MODIFY CHANNEL INSTRUCTIONS
          RJM    CON         CONNECT TO EQUIPMENT 
          ZJN    SDP1        IF CONNECTED AND READY 
          SHN    21-1 
          MJN    SDPX        IF BUSY
          LDM    TNRP,EQ     SET NOT READY PROCESSING ADDRESS 
          STD    PA 
          LDD    ST          (A) = STATUS 
          UJN    SDP2        ENTER ROUTINE
  
 SDP1     LDM    CMPA        SET PROGRAM ADDRESS
          STD    PA 
          LDM    CMAR        RESET (A)
 SDP2     LJM    0,PA        RETURN TO NEXT DRIVER ADDRESS
 WDR      SPACE  4,10 
**        WDR - WRITE DATA RECORD.
* 
*         ENTRY  (A) = WRITE FUNCTION.
*                (DA) = FWA OF DATA RECORD. 
*                (CMLR) = OUTPUT RECORD LENGTH. 
* 
*         ERROR  TO *MGR1* IF RETRY REQUIRED. 
* 
*         CALLS  CRV, FCN, GST, PRE.
  
  
 WDR      SUBR               ENTRY/EXIT 
          RJM    FCN         ISSUE WRITE FUNCTION 
          LDD    DA          SET RECORD ADDRESS 
          STM    WDRA 
          LDM    CMLR        SET RECORD LENGTH
          ACN    CH 
          OAM    **,CH
 WDRA     EQU    *-1         (RECORD ADDRESS) 
          FJM    *,CH        IF TRANSFER NOT COMPLETE 
          DCN    CH+40
          NJN    WDR1        IF INCOMPLETE TRANSFER 
          LDN    DRRI 
          RJM    CRV         CHECK FOR RECOVERED ERROR
          RJM    GST         GET GENERAL STATUS 
          NJN    WDR2        IF ERRORS
          UJN    WDRX        RETURN 
  
 WDR1     STD    CS          SAVE BYTE COUNT
          LDN    DRRI 
          RJM    PRE         PROCESS RECOVERED ERROR
 WDR2     LJM    MGR1        RETURN TO MANAGER
 TCHS     SPACE  4,10 
**        TCHS - CHANNEL TABLE. 
  
  
 TCHS     CHTB
          TITLE  PRESET.
 PRS      SPACE  4,15 
**        PRS - PRESET SUB-DRIVER OVERLAY.
* 
*         EXIT   (CR) = CHANNEL RESERVED. 
*                (DB) = FIRST DATA BUFFER ADDRESS.
*                TO *ZBA*.
* 
*         USES   CM - CM+4, T1 - T3.
* 
*         MACROS RCHAN. 
  
  
 PRS      BSS    0           ENTRY
          LDN    IPRL        CHECK CHARACTER SET MODE 
          CRD    CM 
          LDD    CM+2 
          LPN    1
          NJN    PRS1        IF SYSTEM NOT IN 63 CHARACTER SET MODE 
          ISTORE NPDA,(UJN NPD9)
 PRS1     LDN    CH          RESERVE CHANNEL
          STD    CR 
          RCHAN 
          STM    RCBA 
          LDN    ZERL        CLEAR *CIO* REQUEST PARAMETERS 
          CRD    CM 
          LDD    MA 
          ADN    1
          CWD    CM 
          LDC    DBUF        SET BUFFER INFORMATION 
          STD    DB 
          STD    T1 
          LDC    DBUFS
          STD    T2 
          LDC    DBUFL
          STD    T3 
          LJM    ZBA         CLEAR DATA BUFFER ASSIGNMENTS
          SPACE  4,10 
          OVERFLOW  OVLA
 DBUF     SPACE  4,10 
**        DBUF - DATA BUFFER AREA.
  
  
 DBUFS    EQU    PXMX+5      DATA BUFFER SIZE 
 DBUFW    EQU    DBUFS/10D   DATA BUFFER SIZE IN CM WORDS 
 DBUF     EQU    PRS         FWA OF DATA BUFFERS
 .L       SET    7777-DBUF
 NDBUF    EQU    .L/DBUFS    NUMBER OF DATA BUFFERS 
 DBUFL    EQU    DBUF+DBUFS*NDBUF  LWA+1 OF DATA BUFFERS
  
          ERRNG  10000-DBUFL  BUFFERS WRAP PP MEMORY
          SPACE  4,10 
          END 
