CONFIG
          IDENT  CONFIG,FWA 
          ABS 
          SST 
          ENTRY  CONFIG 
          ENTRY  RFL= 
          ENTRY  SSJ= 
          SYSCOM B1 
 CONFIG   TITLE  CONFIG - CONFIGURE MASS STORAGE. 
*COMMENT  CONFIG - CONFIGURE MASS STORAGE.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CONFIG   SPACE  4,10 
*****     CONFIG - CONFIGURE MASS STORAGE.
* 
*         A. J. BEEKMAN.               77/04/25.
*         W. E. GOEBEL       80/02/29.
* 
*         *CONFIG* PROVIDES THE CAPABILITY TO REPAIR OR RECONFIGURE 
*         844 OR 885 DEVICES ON-LINE. 
          SPACE  4,10 
***       *CONFIG* ACCEPTS OPERATOR INPUT THROUGH A K-DISPLAY, VERIFIES 
*         THE ENTERED PARAMETERS AND THEN USES THESE PARAMETERS WHILE 
*         CALLING THE PP PROGRAM *1RM* TO RECONFIGURE OR SUSPEND
*         844 OR 885 TYPE RMS DEVICES.
          SPACE  4,10 
***       COMMAND.
* 
*         CONFIG.   *CONFIG* IS INITIATED BY *CMS* WHEN AN IDLED
*                DEVICE IS FOUND. 
          SPACE  4,10 
***       K-DISPLAY INPUT DATA. 
* 
*         DATA ITEMS ARE PARTITIONED WITH SEPARATOR CHARACTERS, I.E., 
*         ANY NON-ALPHANUMERIC CHARACTER EXCEPT *=*.  EACH VALUE
*         MUST BE PRECEDED BY A PARAMETER AND SEPARATED FROM THE
*         PARAMETER BY AN *=*.  ONLY ONE DATA ITEM (PARAMETER=
*         VALUE OR COMMAND) MAY BE ENTERED ON A LINE OF INPUT AND NO
*         LINE TERMINATOR IS NECESSARY. 
* 
*         THE FOLLOWING IS A DESCRIPTION OF PARAMETERS. 
* 
*         EQ=EEE EST ORDINAL *EEE* IS TO BE PROCESSED.
*                THIS PARAMETER IS ENTERED WHEN THE PROCESSING
*                OF EQUIPMENTS IS ORDER-DEPENDENT.  THIS IS 
*                NEEDED, FOR EXAMPLE, WHEN A UNIT MUST FIRST BE 
*                FREED UP TO REPLACE A FAILING UNIT.  IN THIS 
*                CASE A UNIT IS DELETED FROM AN EQUIPMENT WHERE 
*                IT IS NOT IN USE SO THAT IT CAN REPLACE A UNIT 
*                WHICH IS FAILING.
* 
*         CH=C1,C2  CHANNEL(S) TO BE USED UNDER NEW DEVICE
*                DEFINITION.  THIS PARAMETER IS USED WHEN THE 
*                ENTIRE DEVICE IS TO BE REDEFINED TO AN ALTERNATE 
*                CHANNEL STRING.  IT CAN ALSO BE USED TO ADD OR 
*                DELETE CHANNELS FROM AN EQUIPMENT DEFINITION.
* 
*         UL=U1,U2,... UN  UNIT LIST FOR NEW CONFIGURATION.  WHEN 
*                A UNIT IS TO BE REPLACED, ADDED OR DELETED 
*                THE ENTIRE UNIT CONFIGURATION MUST BE ENTERED
*                WITH THIS PARAMETER.  IF A UNIT IS TO BE 
*                ADDED OR DELETED THE EQUIPMENT MUST BE GLOBALLY
*                UNLOADED IF SHARED OR HAVE UNAVAILABLE STATUS
*                OTHERWISE. 
* 
*         UR=UU  UNIT *UU* IS TO BE RECABLED.  THIS OPTION IS USED
*                WHEN A UNIT IS TO BE REPLACED BY A NEW UNIT WITH 
*                THE SAME UNIT NUMBER.  THIS IS DONE BY PHYSICALLY
*                DISCONNECTING THE OLD UNIT AND RECABLING IN THE
*                REPLACEMENT UNIT.  MULTIPLE UNITS MAY BE 
*                SPECIFIED FOR RECABLING. 
          SPACE  4,10 
***       K-DISPLAY COMMANDS. 
* 
*         GO.    INITIATE PROCESSING OF RECONFIGURATION RUN USING 
*                PARAMETERS ENTERED.  THE K-DISPLAY PARAMETERS WILL BE
*                SET TO THE DEFAULT VALUES WHEN CONTROL IS RETURNED.
* 
*         SUSPEND.  ALL REQUESTS TO CURRENT EQUIPMENT ARE SUSPENDED.
*                THIS IS DONE SO THAT THE DRIVE MAY BE REPAIRED 
*                ON LINE.  MULTIPLE EQUIPMENTS MAY BE SUSPENDED 
*                CONCURRENTLY.
* 
*         CLEAR. CLEARS THE SUSPEND AND IDLE STATUS FOR CURRENT 
*                EQUIPMENT.  THIS IS ENTERED WHEN THE EQUIPMENT IS
*                TO BE RETURNED FOR NORMAL SYSTEM USE.
* 
*         END.   ENDS *CONFIG* PROCESSING.
* 
*         RERUN. SET THE PARAMETERS TO THEIR DEFAULT VALUES AND UPDATE
*                THE LIST OF EQUIPMENTS TO BE RECONFIGURED. 
* 
*         RESET. RESET THE PARAMETERS TO THEIR DEFAULT VALUES.
* 
* 
*         THE FOLLOWING COMMANDS ARE ENTERED IN RESPONSE TO AN
*         ERROR CONDITION DETECTED BY *1RM*.
* 
*         ABORT. THIS COMMAND IS ENTERED TO DISCONTINUE PROCESSING
*                OF THE CURRENT COMMAND IN PROGRESS.
* 
*         IGNORE.  THE ERROR CONDITION DETECTED BY *1RM* IS TO
*                BE IGNORED.  THIS COMMAND SHOULD BE USED WITH
*                DISCRETION.  IT SHOULD BE USED ONLY WHEN THE 
*                ERROR BEING POSTED IS WELL UNDERSTOOD AND
*                CAN LEGITIMATELY BE IGNORED. 
* 
*         NEXT.  THIS COMMAND IS ENTERED IN RESPONSE TO AN
*                885 SERVO TIMING CHECK WHEN THE TIMING DATA
*                IS IN THE REQUIRED RANGE.  ENTRY OF THIS 
*                COMMAND WILL CAUSE PROCESSING TO CONTINUE
*                WITH EITHER THE NEXT UNIT OR THE NEXT STEP 
*                OF PROCESSING. 
* 
*         RECHECK.  THIS COMMAND IS ENTERED TO RETRY A PROCESS
*                WHICH PREVIOUSLY GAVE AN ERROR.  IF THE ERROR
*                PERSISTS THE MESSAGE WILL BE POSTED AGAIN
*                WITH ANOTHER OPPORTUNITY FOR OPERATOR ACTION.
          SPACE  4,10 
***       OPERATIONAL CONSIDERATIONS. 
* 
*         WHEN REPLACING A FAILING UNIT WITH A NEW UNIT THE 
*         NEW UNIT MUST NOT BE DEFINED IN THE EST.  IF THE
*         REPLACEMENT UNIT IS DEFINED IN THE EST IT MUST
*         FIRST BE DELETED FROM THE EQUIPMENT IN WHICH IT IS
*         DEFINED.
*         WHEN ADDING OR DELETING A UNIT FROM AN EQUIPMENT
*         THE EQUIPMENT MUST BE UNLOADED. 
* 
* 
*         WHEN RUNNING IN A MMF ENVIRONMENT CERTAIN PROBLEMS ARISE. 
*         THEY ARE AS FOLLOWS - 
* 
*         1) WHEN A UNIT IS INTRODUCED INTO AN EQUIPMENT
*         *CONFIG* WILL CHECK IF THE REPLACEMENT UNIT IS NOT IN 
*         USE IN THE MACHINE INITIATING THE RECONFIGURATION, BUT IT 
*         CANNOT CHECK IF IT IS IN USE BY THE OTHER MACHINES.  THE
*         DESIGN OF THIS PROGRAM DOES NOT SOLVE THIS PROBLEM AND IT 
*         IS LEFT TO THE OPERATORS TO ENSURE THAT THE REPLACEMENT 
*         UNIT IS TRULY FREE IN THE MMF COMPLEX.
* 
*         2) WHEN REPLACING A UNIT WITH A NEW UNIT, *CONFIG*
*         WILL CHECK FOR ALL MACHINES ACCESSING THE DEVICE TO COMPLY
*         WITH THE RECONFIGURATION.  HOWEVER, IF THE MACHINE DOES NOT 
*         HAVE THE DEVICE LOADED THERE IS NO WAY TO CHECK FOR ITS 
*         COMPLIANCE.  IN THIS CASE THE RECONFIGURATION WILL PROCEED
*         ON THE MACHINES WITH THE DEVICE LOADED AND THE OTHER
*         MACHINES WILL NOT BE ABLE TO USE THIS DEVICE. 
* 
*         3) THE ADDITION AND DELETION OF A UNIT IS INTENDED
*         FOR LOCAL MACHINE USE.  WHEN AN ADD OR DELETE IS COMPLETED
*         ON ONE MACHINE, THE REDEFINITION REQUESTED BIT WILL BE
*         CLEARED FOR THAT EQUIPMENT.  THUS, NO OTHER MACHINE WILL
*         RECOGNIZE THE REQUEST FOR RECONFIGURATION ON THIS EQUIPMENT.
*         IF MORE THAN ONE MACHINE IN THE COMPLEX WISHES TO ADD OR
*         DELETE UNITS FROM THE SAME SHARED EQUIPMENT, *IDLE,EQXXX.*
*         WILL HAVE TO BE ENTERED FROM EACH MACHINE.
          SPACE  4,10 
***       ROUTINES CALLED.
* 
*         *1RM*, *CMS*. 
          SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
* 
*         * INCORRECT COMMAND.* = INCORRECT ARGUMENTS WERE ENTERED
*         ON THE *CONFIG* COMMAND.
* 
*         * USER ACCESS NOT VALID.* = *CONFIG* WAS CALLED FROM A NON- 
*         SYSTEM ORIGIN JOB OR WITHOUT MASS STORAGE SUBSYSTEM ID. 
* 
*         * CONFIG UTILITY COMPLETE.* = ALL IDLED EQUIPMENTS HAVE 
*         BEEN PROCESSED. 
          SPACE  4,10 
***       OPERATOR MESSAGES.
* 
*         IF ONE OF THE ERRORS BELOW IS ENCOUNTERED, THE OPERATOR WILL
*         BE ABLE TO CORRECT THE ERROR VIA THE K-DISPLAY.  ALL
*         PARAMETERS OR COMMANDS AFTER THE ONE IN ERROR WILL BE 
*         IGNORED.
* 
* 
*         **** DEVICE NOT FIRST IN CHAIN. 
*                AN EQUIPMENT OTHER THAN THE FIRST EQUIPMENT IN A 
*                LINKED DEVICE WAS ENTERED TO BE RECONFIGURED.  THIS
*                IS NOT ALLOWED IN ORDER TO PREVENT DESTROYING THE
*                INTEGRITY OF A LINKED DEVICE RECONFIGURATION.
* 
*         **** EQUIPMENT STATUS INCORRECT.
*                THE EQUIPMENT BEING REDEFINED IS NOT UNLOADED AND
*                AS SUCH THE NUMBER OF UNITS CANNOT BE CHANGED. 
* 
*         **** ERROR IN CHANNEL NUMBER. 
*                MAY INDICATE - 
*                1) IF .LE. 10 PP-S, NOT WITHIN RANGE OF 0-13B. 
*                2) IF .GT. 10 PP-S, NOT WITHIN RANGES OF 0 - 13B 
*                   OR 20B-33B. 
*                3) 1 (OR MORE) OF CHANNELS SPECIFIED IS DOWN.
* 
*         **** ERROR IN EST ORDINAL.
*                MAY INDICATE - 
*                1) EQUIPMENT NOT MASS STORAGE. 
*                2) EQUIPMENT IS NOT *844* OR *885*.
* 
*         **** ERROR IN UNIT LIST.
*                MAY INDICATE - 
*                1) A UNIT NUMBER WAS DUPLICATED IN THE UNIT LIST.
*                2) MORE THAN 3 UNITS WERE SPECIFIED FOR AN *885*.
* 
*         **** INCORRECT ENTRY. 
*                1) A KEYWORD WAS NOT FOUND.
*                2) TOO MANY DIGITS WERE ENTERED AS A PARAMETER.
*                3) A NON-DIGIT CHARACTER WAS FOUND IN A
*                   PARAMETER.
*                4) A CHARACTER WAS FOUND AFTER THE POST RADIX. 
*                5) AN 8 OR 9 WAS FOUND WITH A *B* POST RADIX.
* 
*         **** INCORRECT SEPARATOR. 
*                A *=* SEPARATOR WAS FOUND FOLLOWING A PARAMETER
*                VALUE OR COMMAND IN THE INPUT STRING.
* 
*         **** INTRODUCED UNIT IN USE.
*                MAY INDICATE - 
*                A UNIT BEING INTRODUCED INTO AN EQUIPMENT IS 
*                DEFINED ON ANOTHER EQUIPMENT.
* 
* 
*         THE FOLLOWING COMMANDS ARE POSTED ON THE K-DISPLAY BY 
*         *1RM*.  WHEN *1RM* DETECTS A CONDITION WHICH MAY BE 
*         RESPONDED TO BY THE OPERATOR, A MESSAGE IS POSTED AND 
*         THE LEGAL COMMANDS ARE POSTED ON THE K-DISPLAY.  THE
*         FOLLOWING LIST OF ERROR MESSAGES LISTS THOSE LEGAL
*         COMMANDS AND INDICATES IF AN OPERATOR RESPONSE IS 
*         REQUIRED OR OPTIONAL. 
* 
* 
*         UNIT XX, CHYY WRITE/READ VERIFY ERROR.
*                PART OF THE VALIDATION PROCEDURE WHEN RETURNING
*                AN EQUIPMENT FOR SYSTEM USE (CLEAR COMMAND) IS 
*                TO WRITE A SECTOR OF DATA TO THE DEVICE, READ IT 
*                BACK AND VERIFY THE DATA.  WHEN THIS VERIFICATION
*                FAILS THE ABOVE MESSAGE APPEARS. 
*         COMMANDS - REQUIRED.
*                ABORT, IGNORE, RECHECK.
* 
* 
*         ERROR IN PERFORMING SERVO CHECK ON UNIT XX. 
*                THE SERVO ADJUSTMENT PROCEDURE HAS ENCOUNTERED 
*                A DISK ERROR CONDITION.
*         COMMANDS - REQUIRED.
*                ABORT, IGNORE, RECHECK.
* 
* 
*         UNIT XX SERVO TIMING= XXX.  ACCEPTABLE RANGE IS 325 TO 345. 
*                WHEN RECONFIGURING AN 885 HDA A SERVO ADJUSTMENT 
*                PROCEDURE IS EXECUTED.  THIS PROCEDURE MEASURES
*                SERVO TIMING CHARACTERISTICS WHICH MUST BE IN THE
*                SPECIFIED RANGE.  A DRIVE ADJUSTMENT MUST BE MADE
*                BY A CE UNTIL THE TIMING IS IN THE SPECIFIED 
*                RANGE. 
*         COMMANDS - REQUIRED.
*                ABORT, RECHECK.
*                NEXT.  ONLY IF TIMING IS IN RANGE. 
*                IGNORE.  ONLY IF TIMING IS NOT IN RANGE. 
* 
* 
*         ERROR ON LINK DEVICE. 
*                WHEN A DEVICE IS SHARED BETWEEN MAINFRAMES THE 
*                LINK DEVICE IS READ TO SYNCHRONIZE PROCESSING
*                BETWEEN MACHINES.  WHEN AN ERROR OCCURS IN 
*                READING THE LINK DEVICE THIS ERROR MESSAGE 
*                IS ISSUED. 
*         COMMANDS - REQUIRED.
*                ABORT, IGNORE. 
* 
* 
*         SPIN DOWN UNIT XX.
*                THIS IS A DIRECTIVE TO THE OPERATOR OR CE TO 
*                SPIN DOWN THE SPECIFIED UNIT IN PREPARATION
*                FOR MOVING THE PACK OR HDA.
*         COMMAND - OPTIONAL. 
*                ABORT, IGNORE. 
* 
* 
*         MOVE PACK FROM UNIT XX TO UNIT YY AND SPIN UP.
*                THIS DIRECTIVE IS ISSUED TO THE OPERATOR FOR 
*                EACH UNIT TO BE MOVED DURING A RECONFIGURATION.
*                UNIT XX HAS PREVIOUSLY BEEN DIRECTED TO BE 
*                SPUN DOWN AND ITS PACK OR HDA IS NOW TO BE 
*                MOVED TO UNIT YY.
*         COMMANDS - OPTIONAL.
*                ABORT, IGNORE. 
* 
* 
*         UNIT XX, CHYY LABEL READ ERROR. 
*                IN VERIFYING THAT THE CORRECT LABEL IS PRESENT 
*                ON UNIT XX A DISK ERROR OCCURRED WHICH PREVENTED 
*                THE LABEL FROM BEING READ SUCCESSFULLY.
*                THE CHANNEL IS SPECIFIED IN THE MESSAGE AND
*                MAY BE HELPFUL IF THE VERIFY ERROR OCCURS
*                ONLY FROM A SINGLE CHANNEL IN A DUAL ACCESS
*                CONFIGURATION. 
*         COMMANDS - REQUIRED.
*                ABORT, IGNORE, RECHECK.
* 
* 
*         UNIT XX, CHYY LABEL VERIFICATION ERROR. 
*                THE LABEL SECTOR WAS READ BUT THE DATA IN THE
*                LABEL SECTOR IS NOT CORRECT. 
*         COMMANDS - REQUIRED.
*                ABORT, IGNORE, RECHECK.
* 
* 
*         WAITING FOR MACHINE ID=XX.
*                A SHARED DEVICE IS BEING PROCESSED AND IT HAS
*                BEEN DETECTED THAT MACHINE IDXX IS NOT AT THE
*                SAME STAGE OF PROCESSING AS THIS MACHINE.
*         COMMANDS - REQUIRED.
*                ABORT, IGNORE. 
          SPACE  4,10 
****      ASSEMBLY CONSTANTS. 
  
  
 OBUFL    EQU    1001B       OUTPUT BUFFER LENGTH 
 KCML     EQU    12          COMMAND LINES IN K-DISPLAY 
 KEQL     EQU    7           MAX NUMBER OF IDLED EQUIPMENTS DISPLAYED 
 KLNL     EQU    7           K-DISPLAY LINE LENGTH INCLUDING HEADER 
 NSCI     EQU    80          NUMBER OF CHARACTERS TO SCAN ON INPUT
  
  
****
          SPACE  4,10 
*CALL     COMCMAC 
*CALL     COMCDCM 
*CALL     COMCDCP 
*CALL     COMSSSD 
*CALL     COMSSSJ 
          LIST   G,X
*CALL     COMS1RM 
          LIST   *
 MACROS   TITLE  MACROS.
 CALL1RM  SPACE  4,10 
**        CALL1RM - CALL *1RM* TO PERFORM SPECIFIED FUNCTION. 
* 
*         CALL1RM  F
*                F = FUNCTION CODE AS DEFINED IN *COMS1RM*. 
* 
*         USES   X - 6. 
* 
*         CALLS  CRM. 
  
  
 CALL1RM  MACRO  F
          MACREF CALL1RM
          SX6    F*2+1
          RJ     CRM
 CALL1RM  ENDM
 GETLCW   SPACE  4,10 
**        GETLCW - GET LOW CORE WORDS.
* 
*         GETLCW WC,LC,AD 
*                WC = WORD COUNT OF LOW CORE WORDS TO READ. 
*                LC = ADDRESS OF LOW CORE WORDS.
*                AD = ADDRESS TO STORE LOW CORE WORDS.
* 
*         USES   X - 1, 2, 3. 
* 
*         CALLS  GLC. 
  
  
 GETLCW   MACRO  WC,FR,AD 
          MACREF GETLCW 
          R=     X1,WC
          R=     X2,FR
          R=     X3,AD
          RJ     GLC
 GETLCW   ENDM
 KEYWORD  SPACE  4,10 
**        KEYWORD - DEFINE COMMAND AND PARAMETER ENTRY POINTS.
* 
*         KEYWORD  E
*                E = KEYBOARD KEYWORD SYNTAX. 
*                AN *=* IS APPENDED TO THE KEYWORD OF AN EQUIVALENCED 
*                PARAMETER.  THIS MACRO DEFINES BOTH COMMAND AND
*                PARAMETER KEYWORDS.
  
  
 KEYWORD  MACRO  KEYWRD,PR
          MACREF KEYWORD
 KYMX     SET    KYMX+1 
          IFC    NE,*PR*0*,1
 PR       SUBR
 KEY      RMT 
 A        MICRO  1,,=KEYWRD=
          ORG    TKEY+."A"
          VFD    42/0L_KEYWRD,18/PR 
 KEY      RMT 
 KEYWORD  ENDM
  
 KYMX     SET    0           INITIALIZE KEYWORD COUNT 
 MOVEDL   SPACE  4,15 
**        MOVEDL - MOVE DISPLAY LINE. 
* 
*         *MOVEDL* IS USED TO MOVE A DISPLAY LINE TO A K-DISPLAY
*         BUFFER WHICH HAS THE X,Y COORDINATES IN THE FIRST 24 BITS 
*         OF EACH LINE. 
* 
*         MOVEDL COUNT,FROM,TO
* 
*                COUNT =  WORD COUNT OF BLOCK TO BE MOVED.
*                FROM = ADDRESS OF FIRST WORD OF SOURCE.
*                TO = ADDRESS OF FIRST WORD OF DESTINATION. 
* 
*         USES   X - 1, 2, 3. 
* 
*         CALLS  MPL. 
  
  
 MOVEDL   MACRO  COUNT,FROM,TO
          MACREF  MOVEDL
          R=     X1,COUNT 
          R=     X2,FROM
          R=     X3,TO
          RJ     MPL
 MOVEDL   ENDM
          TITLE  KEYWORD DEFINITION FOR *CONFIG* COMMANDS.
  CDEF   CLEAR,(CLEAR IDLE AND SUSPEND ON CURRENT EQUIPMENT.) 
  CDEF   END,(CLEAR ALL DEVICE IDLES AND END *CONFIG*.) 
  CDEF   GO,(INITIATE PROCESSING OF ENTERED CONFIGURATION.) 
  CDEF   RERUN,(RESTART *CONFIG* UTILITY PROCESSING.) 
  CDEF   RESET,(RESET CURRENT EQUIPMENT TO DEFAULT PARAMETERS.) 
  CDEF   SUSPEND,(SUSPEND SYSTEM OPERATION ON CURRENT EQUIPMENT.) 
  CDEF   (CH=C1,C2),(C1 AND OPTIONALLY C2 ARE NEW ACCESS CHANNELS.) 
  CDEF   (EQ=EEE),(SET EST ORDINAL EEE TO BE PROCESSED.)
  CDEF   (UL=U1,U2,...),(SET UNIT LIST AS SPECIFIED.) 
  CDEF   (UR=UU),(UNIT UU IS TO BE RECABLED WITH A NEW DRIVE.)
          TITLE  RESERVED LOCATIONS AND FETS. 
          ORG    102B 
  
*         RESERVED LOCATIONS. 
  
  
 FWA      BSS    0
 ESTA     CON    0           EST ADDRESS
 LMSO     CON    0           LAST MASS STORAGE EST ORDINAL + 1
 MMFF     CON    0           MULTI-MAINFRAME FLAG 
 NPPU     CON    0           NUMBER OF PPU-S IN SYSTEM
 SLMP     CON    0           STRING BUFFER LIMIT POINTER
 SPTR     CON    0           STRING BUFFER POINTER
 TEMP     CON    0           TEMPORARY
          SPACE  4,10 
*         *1RM* CALL BLOCK. 
  
  
 B1RM     BSS    0           *1RM* CALL BLOCK 
  
          LOC    0
  
*         WHILE *1RM* IS ACTIVE K-DISPLAY INPUT IS INTERPRETED BY 
*         *CONFIG* AND THE COMMAND CODE PASSED TO *1RM*.  THE 
*         COMMANDS WHICH ARE LEGAL FOR *1RM* TO ACCEPT ARE SET IN 
*         THE CALL BLOCK BY *1RM* IN THE FORM OF A BIT MAP.  THIS 
*         BIT MAP IS ALSO USED TO GENERATE A DESCRIPTION OF LEGAL 
*         COMMANDS IN THE DISPLAY.
  
 RFNB     VFD    48/0 
          VFD    11/0        *1RM* FUNCTION CODE
          VFD    1/0         FUNCTION IN PROGRESS BIT 
  
 TPAR     BSS    0           TABLE OF LEGAL PARAMETERS
          POS    .CLEAR 
          VFD    1/1
          POS    .END 
          VFD    1/1
          POS    .GO
          VFD    1/1
          POS    .RERUN 
          VFD    1/1
          POS    .RESET 
          VFD    1/1
          POS    .SUSPEND 
          VFD    1/1
          POS    .CH
          VFD    1/1
          POS    .EQ
          VFD    1/1
          POS    .UL
          VFD    1/1
          POS    .UR
          VFD    1/1
 TCOM     CON    0           COMMANDS TO PASS TO *1RM*
 CUEQ     CON    0           CURRENT EQUIPMENT
 URCD     CON    0           UNITS TO RECONFIGURE OR RECABLE
 ESTD     CON    0           NEW EST ENTRY FOR CURRENT EQUIPMENT
 MSTD     BSS    MSTL        NEW MST FOR CURRENT EQUIPMENT
          LOC    *O 
          SPACE  4,10 
*         FETS. 
  
  
 O        BSS    0           OUTPUT FILE
 OUTPUT   FILEB  OBUF,OBUFL,(FET=7) 
          TITLE  CONFIG - MAIN LOOP.
**        CONFIG - MAIN LOOP. 
  
  
 CONFIG   SB1    1
          RJ     PRS         PRESET 
          RJ     BCL         OUTPUT INITIAL CONFIGURATION 
  
*         INITIATE K-DISPLAY. 
  
          SA1    MMFF 
          ZR     X1,CON1     IF NOT MMF MODE
          CALL1RM  RCDF      CLEAR DAT INTERLOCK
 CON1     RJ     RRC         SET VALUES ON K-DISPLAY
          MX6    -5 
          SA6    TEMP 
          CONSOLE  KL 
 CON2     RJ     UKD         UPDATE K-DISPLAY 
          RECALL
          SA1    B1RM+CUEQ   CHECK FOR EQUIPMENT PRESENT
          NZ     X1,CON3     IF EQUIPMENT PRESENT 
          SA1    TEMP 
          ZR     X1,CON1     IF TIME TO CHECK FOR EQUIPMENT 
          SX6    X1+B1
          SA6    A1 
  
*         CHECK FOR INPUT.
  
 CON3     SA1    KBUF 
          ZR     X1,CON2     IF NO INPUT
          RJ     ISB         INPUT STRING BUFFER
          SX7    B0          ASSEMBLE KEYWORD 
          RJ     ASC
          ZR     X4,CON3     IF NO DATA ASSEMBLED 
          SB4    1R=
          NE     B4,B5,CON4  IF NOT *=* SEPARATOR 
          SX1    6
          IX1    X1*X4
          SX5    B5 
          SB4    X1-54
          AX5    B4 
          BX6    X6+X5
 CON4     RJ     SPT
          NZ     X5,CON5     IF PARAMETER NOT FOUND 
          SA1    CONA        SIMULATE RETURN JUMP 
          SB4    X3 
          BX6    X1 
          SA6    B4 
          JP     B4+1        JUMP TO PROCESSOR
  
*         RETURN FROM PARAMETER PROCESSING. 
  
 CON5     ZR     X5,CON3     IF NO ERROR
          RJ     IDE         PROCESSES ERROR
          EQ     CON3        LOOP FOR MORE INPUT
  
  
 CONA     EQ     CON5        SIMULATED RETURN JUMP TO PROCESSOR 
          TITLE  *1RM* COMMAND DEFINITIONS. 
ABORT     SPACE  4,10 
**        ABORT - ABORT THE CURRENT COMMAND SEQUENCE. 
  
  
          KEYWORD  ABORT,0
 IGNORE   SPACE  4,10 
**        IGNORE - IGNORE CURRENT ERROR CONDITION.
  
  
          KEYWORD  IGNORE,0 
 NEXT     SPACE  4,10 
**        NEXT - PROCEED TO NEXT UNIT.
  
  
          KEYWORD  NEXT,0 
 RECHECK  SPACE  4,10 
**        RECHECK - RETRY PROCESS GIVING ERROR. 
  
  
          KEYWORD  RECHECK,0
          TITLE  CLC - *CLEAR* COMMAND PROCESSOR. 
**        CLC - *CLEAR* COMMAND PROCESSOR.
* 
*         ENTRY  (CUEQ) = CURRENT EQUIPMENT TO RECONFIGURE. 
* 
*         EXIT   REDEFINITION REQUEST CLEARED FOR CURRENT EQUIPMENT.
* 
*         USES   A - 1, 6.
*                X - 1, 5, 6. 
* 
*         MACRO  CALL1RM. 
  
  
          KEYWORD  CLEAR,CLP
          SA1    B1RM+CUEQ
          ZR     X1,CLPX     IF NO EQUIPMENT
          RJ     FUM         CHECK FOR UNIT IN USE
          NZ     X5,CLPX     IF ERROR DETECTED
          CALL1RM  RCLF 
          RJ     RRC         SET NEW EQUIPMENT
          EQ     CLPX        RETURN 
          TITLE  END - END COMMAND PROCESSOR. 
**        END - *END* COMMAND PROCESSOR.
* 
*         COMPLETE RECONFIGURATION RUN. 
* 
*         USES   X - 1,    5. 
*                A - 1. 
*                B - 0. 
* 
*         CALLS  CAE. 
* 
*         MACROS  CALL1RM, EXCST, KEYWORD, MESSAGE, SETFS.
  
  
          KEYWORD  END,END
 END1     RJ     CAE         CLEAR ALL EQUIPMENT IDLE REQUESTS
          SA1    MMFF 
          ZR     X1,END2     IF NOT MMF MODE
          CALL1RM  RCDF      CLEAR DAT INTERLOCK
 END2     SA1    B1RM+RFNB
          SX5    B0+         INDICATE NO ERROR
          NZ     X1,ENDX     IF *1RM* STILL ATTACHED
          MESSAGE  ENDA      * CONFIG UTILITY COMPLETE.*
          SETFS  O,0
          EXCST  ENDB        FORCE CALL TO *CMS*
          ENDRUN
  
  
 ENDA     DATA   C* CONFIG UTILITY COMPLETE.* 
 ENDB     DATA   4LCMS. 
          TITLE  GOC - *GO* COMMAND PROCESSOR.
**        GOC - *GO* COMMAND PROCESSOR. 
* 
*         ENTRY  (CUEQ) = CURRENT EQUIPMENT TO RECONFIGURE. 
* 
*         EXIT   (X5) = ERROR MESSAGE ADDRESS.
* 
*         USES   A - 1, 2, 3, 4, 6, 7.
*                X - ALL. 
* 
*         CALLS  BCL, CLD, FUM. 
* 
*         MACROS  CALL1RM, KEYWORD. 
  
  
          KEYWORD  GO,GOC 
          RJ     CLD         CHECK FOR LEGAL DEVICE 
          NZ     X5,GOCX     IF INCORRECT DEVICE
          RJ     FUM         FIND UNIT IN OTHER MST 
          NZ     X5,GOCX     IF ERROR IN CONFIGURATION
          CALL1RM  RDDF 
          RJ     BCL         BUILD CONFIGURATION LIST 
          RJ     RRC         RESET NEW EQUIPMENT
          EQ     GOCX        RETURN 
          TITLE  RRC - *RERUN* COMMAND PROCESSOR. 
**        RRC - *RERUN* COMMAND PROCESSOR.
* 
*         ENTRY  (ESTA) = EST ADDRESS.
*                (MMFF) .NE. 0 IF MMF MODE. 
* 
*         EXIT   (X1) = CURRENT EQUIPMENT.
*                (X5) = ERROR MESSAGE.
*                (CUEQ) = CURRENT EQUIPMENT TO RECONFIGURE. 
*                (CUEQ), (ESTB), (MSTD), AND K-DISPLAY RESET. 
* 
*         USES   A - 1, 2, 5, 6, 7. 
*                B - 5, 6.
*                X - 0, 1, 2, 5, 6, 7.
* 
*         CALLS  EST, RSC, SML. 
* 
*         MACROS  CALL1RM, GETLCW, KEYWORD. 
  
  
          KEYWORD  RERUN,RRC
          CALL1RM  RUMF 
          RJ     EST         READ EST INTO *ESTB* 
  
*         SEARCH FOR EQUIPMENT TO RECONFIGURE.
  
          SX5    NOPE-1      INITIALIZE EST ORDINAL FOR SEARCH
          SB5    B0          SET EQUIPMENT NOT FOUND
          BX6    X6-X6       CLEAR CURRENT EQUIPMENT
          SB6    B0          SET SHARED EST ORDINAL 
          SA6    B1RM+CUEQ
          SA6    B1RM+URCD   CLEAR UNITS TO RECONFIGURE 
 RRC1     RJ     SML         FIND EQUIPMENT 
          ZR     X5,RRC3     IF END OF EQUIPMENTS 
          PL     X1,RRC1     IF DEVICE IDLE BIT NOT SET 
          NZ     B5,RRC2     IF EQUIPMENT PREVIOUSLY FOUND
          SB5    X5 
 RRC2     R=     X1,ESTE     CHECK FOR SHARED DEVICE
          IX1    X5*X1
          SA1    ESTB+X1+EQDE  READ EST ENTRY 
          LX1    59-57
          PL     X1,RRC1     IF NOT SHARED
          NZ     B6,RRC1     IF SHARED EQUIPMENT FOUND
          SB6    X5 
          EQ     RRC1        NEXT EQUIPMENT 
  
 RRC3     SX6    B6 
          NZ     B6,RRC4     IF SHARED EQUIPMENT FOUND
          SX6    B5 
 RRC4     SA6    B1RM+CUEQ
          RJ     RSC         RESET PARAMETERS 
          SA1    B1RM+CUEQ
          SX5    B0 
          EQ     RRCX        RETURN 
          TITLE  RSC - *RESET* COMMAND PROCESSOR. 
**        RSC - *RESET* COMMAND PROCESSOR.
* 
*         ENTRY  (CUEQ) = CURRENT EQUIPMENT.
* 
*         EXIT   (X5) = 0.
* 
*         USES   A - 1, 2, 6, 7.
*                B - 2, 3, 5, 6, 7. 
*                X - 0, 1, 2, 4, 5, 6, 7. 
* 
*         CALLS  COD, ZTB.
* 
*         MACROS  KEYWORD, MOVE.
  
  
          KEYWORD  RESET,RSC
          SA5    B1RM+CUEQ
          R=     X1,ESTE
          IX1    X5*X1
          SA1    ESTB+X1+EQDE  RESET EST ENTRY
          BX6    X1 
          BX7    X7-X7
          SA6    B1RM+ESTD
          SA7    B1RM+URCD   CLEAR UNITS TO RECONFIGURE 
          RJ     RMT         READ CURRENT EQUIPMENT MST 
          MOVE   MSTL,MSTB,MSTC 
          MOVE   MSTL,MSTB,B1RM+MSTD
          RJ     UKD         UPDATE K-DISPLAY INFORMATION 
          EQ     RSCX        RETURN 
          TITLE  SSP - *SUSPEND* COMMAND PROCESSOR. 
**        SSP - *SUSPEND* COMMAND PROCESSOR.
*         ONLY 885 AND 844 TYPE DEVICES ARE ALLOWED FOR THIS
*         COMMAND.  THIS IS BECAUSE THE *6DI* DRIVER IS THE 
*         ONLY ONE TO DETECT AND HONOR THE SUSPEND STATUS.
* 
*         ENTRY  (CUEQ) = CURRENT EQUIPMENT.
* 
*         EXIT   (X5) = ERROR MESSAGE ADDRESS.
* 
*         USES   X - 1,    5. 
*                A - 1. 
* 
*         CALLS  EQP. 
* 
*         MACROS  CALL1RM, KEYWORD. 
  
  
          KEYWORD  SUSPEND,SSP
          SA1    B1RM+CUEQ
          ZR     X1,SSPX     IF NO EQUIPMENT
          SA1    B1RM+ESTD   CHECK FOR 885 OR 844 
          LX1    59-55
          SX5    EREN        **** ERROR IN EST ORDINAL. 
          PL     X1,SSPX     IF NOT *LDAM*
          CALL1RM  RSPF 
          EQ     SSPX        RETURN 
          TITLE  CHP - *CH* PARAMETER PROCESSOR.
**        CHP - *CH* PARAMETER PROCESSOR. 
* 
*         ENTRY  (SPTR) = STRING BUFFER ADDRESS OF PREVIOUS CHARACTER.
*                (SLMP) = STRING BUFFER LIMIT POINTER.
* 
*         EXIT   (X5) = 0 IF NO ERROR.
*                     = ERROR MESSAGE ADDRESS IF ERROR. 
*                (SPTR) = UPDATED STRING BUFFER POINTER.
*                VALUE SET IN K-DISPLAY AND PARAMETER TABLE.
* 
*         USES   X - 0, 1, 2, 5, 6. 
*                A - 1, 2, 6. 
*                B - 1, 2.
* 
*         CALLS  CCH, CHA, VON. 
  
  
          KEYWORD  CH=,CHP
          SX0    3           VALIDATE CHANNEL NUMBER
          RJ     VON
          NZ     X5,CHPX     IF ERROR 
          SX0    1S11        ACCESS PATH ENABLED FLAG 
          SX2    X6 
          BX6    X0+X6
  
*         CHECK THAT CHANNELS ARE AVAILABLE.
  
          RJ     CHA
          NZ     X5,CHPX     IF ERROR IN CHANNEL NUMBER 
          PL     X1,CHP1     IF CHANNEL IS UP 
          SX0    3000B       MARK CHANNEL DOWN
          BX6    X0+X6
 CHP1     LX6    12          SAVE CHANNEL 
          SA6    CHPA 
  
*         CHECK FOR SECOND CHANNEL. 
  
          SX0    3
          RJ     VON
          NZ     X5,CHPX     IF ERROR 
          ZR     X4,CHP3     IF NO SECOND CHANNEL 
          SX0    1S11        ACCESS PATH ENABLED FLAG 
          SA1    CHPA        SAVE CHANNEL NUMBER
          SX2    X6+
          BX6    X0+X6
          BX6    X1+X6
          RJ     CHA
          NZ     X5,CHPX     IF ERROR IN CHANNEL NUMBER 
          PL     X1,CHP2     IF CHANNEL IS UP 
          SX0    3000B       MARK CHANNEL DOWN
          BX6    X0+X6
 CHP2     SA6    CHPA        SAVE CHANNEL 
 CHP3     SA1    B1RM+ESTD   INSERT CHANNELS IN REPLACEMENT ENTRY 
          SA2    CHPA 
          MX0    24 
          LX2    24 
          LX0    -12
          BX6    -X0*X1      CLEAR CHANNEL FIELD
          BX6    X2+X6
          SA6    A1 
          RJ     CCH         CHECK FOR MATCHING CHANNELS
          NZ     X1,CHP4     IF AT LEAST ONE CHANNEL MATCHES
  
*         SET *URCD* TO INDICATE ALL UNITS CHANGED. 
  
          SA1    B1RM+MSTD+DDLL  GET UNIT COUNT 
          AX1    48 
          MX0    -3 
          BX1    -X0*X1 
          SB2    X1 
          MX6    1
          AX6    B2 
          SB2    B2+B1
          LX6    B2 
          SA1    B1RM+URCD   MERGE CHANGED UNITS
          BX6    X1+X6
          SA6    A1 
 CHP4     RJ     SEQ         SET EQUIPMENT PARAMETERS IN K-DISPLAY
          BX5    X5-X5       CLEAR ERROR STATUS 
          EQ     CHPX        RETURN 
  
  
 CHPA     CON    0           TEMPORARY
          TITLE  EQP - *EQ* PARAMETER PROCESSOR.
**        EQP - *EQ* PARAMETER PROCESSOR. 
*         ANY MASS STORAGE DEVICE IS ALLOWED FOR THIS COMMAND.
*         THIS IS BECAUSE DEVICE IDLE MAY BE SET FOR ANY MASS 
*         STORAGE DEVICE. 
* 
*         ENTRY  (CUEQ) = CURRENT EQUIPMENT.
*                (SPTR) = STRING BUFFER ADDRESS OF PREVIOUS CHARACTER.
*                (SLMP) = STRING BUFFER LIMIT POINTER.
* 
*         EXIT   (X5) = 0 IF NO ERROR.
*                     = ERROR MESSAGE ADDRESS IF ERROR. 
*                (SPTR) = UPDATED STRING BUFFER POINTER.
*                K-DISPLAY UPDATED TO SHOW NEW EQUIPMENT. 
* 
*         USES   X - 0, 4, 5, 6.
*                A - 6. 
*                B - 0. 
* 
*         CALLS  CLD, RSC, VON. 
  
  
          KEYWORD  EQ=,EQP
          SX0    3+1         VALIDATE EST ORDINAL 
          RJ     VON
          NZ     X5,EQPX     IF ERROR 
          ZR     X4,EQP1     IF NO EQUIPMENT ENTERED
          SA6    B1RM+CUEQ   SET EQUIPMENT
 EQP1     RJ     CLD         CHECK FOR LEGAL DEVICE 
          NZ     X5,EQP2     IF ERROR IN EQUIPMENT
          RJ     RSC         RESET PARAMETERS 
          SX5    B0 
          EQ     EQPX        RETURN 
  
 EQP2     SX6    B0          CLEAR CURRENT EQUIPMENT
          SX5    EREN        **** ERROR IN EST ORDINAL. 
          SA6    B1RM+CUEQ
          RJ     RSC         RESET PARAMETERS 
          EQ     EQPX        RETURN 
          TITLE  ULP - UNIT LIST PARAMETER PROCESSOR. 
**        ULP - *UL=* PARAMETER PROCESSOR.
* 
*         ENTRY  (CUEQ) = CURRENT EQUIPMENT.
* 
*         EXIT   (MSTD) UPDATED WITH NEW UNIT LIST. 
*                K-DISPLAY UPDATED WITH NEW CONFIGURATION.
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 6, 7.
*                A - 1, 6.
*                B - 3, 4, 5. 
* 
*         CALLS  SEQ, VON.
* 
*         MACRO  KEYWORD. 
  
  
 ULP8     SX5    ERUN        **** ERROR IN UNIT LIST. 
  
          KEYWORD  UL=,ULP
          BX6    X6-X6       CLEAR ASSEMBLY 
          PX6    X6 
          SA6    ULPA 
 ULP1     SX0    3           VALIDATE UNIT NUMBERS
          RJ     VON
          NZ     X5,ULPX     IF ERROR IN ASSEMBLY 
          ZR     X4,ULP4     IF NO DIGITS 
          SA1    ULPA 
          UX1,B4 X1 
          SB3    B4+B4       COMPUTE SHIFT COUNT FOR NEW UNIT 
          SB3    B3+B4
          SB3    B3+B3
          SB4    B4+B1
          LX4    X6,B3       POSITION NEW UNIT
          BX6    X1+X4
          PX6    X6,B4
          SA6    ULPA 
          SA2    B1RM+ESTD   CHECK FOR 885
          MX0    -11
          LX2    -12
          BX2    -X0*X2 
          SX3    X2-2RDM
          SX2    X2-2RDQ
          ZR     X3,ULP2     IF 885 
          NZ     X2,ULP3     IF NOT 885 
 ULP2     AX4    B3          CHECK NUMBER OF UNITS AND UNIT NUMBER
          SB3    3
          LX4    59-5 
          GT     B4,B3,ULP8  IF MORE THAN 3 UNITS 
          PL     X4,ULP8     IF UNIT NUMBER NOT 4X OR 5X
          LX4    59-4-59+5
          NG     X4,ULP8     IF UNIT NUMBER NOT 4X OR 5X
 ULP3     SX1    B5-1R, 
          ZR     X1,ULP1     IF MORE UNITS
          SX1    B5-1R. 
          SX5    ERIS        **** ERROR IN SEPARATOR. 
          NZ     X1,ULPX     IF NOT END OF LINE 
 ULP4     SA1    ULPA        BUILD DDLL WORD
          UX1,B4 X1 
          ZR     B4,ULP5     IF NULL EQUIPMENT
          SB4    B4-2000B 
 ULP5     PX6    X6,B4
          SA1    B1RM+MSTD+DDLL 
          SA6    A1 
          MX0    -6 
          MX3    1           INITIALIZE LOOP PARAMETERS 
          BX4    X4-X4
          MX2    -8          LOOP COUNTER 
 ULP6     ZR     X2,ULP7     IF END OF LOOP 
          BX7    X1-X6
          BX7    -X0*X7 
          LX0    6           ADVANCE UNIT 
          AX2    1
          LX3    1
          ZR     X7,ULP6     IF NO CHANGE IN UNIT NUMBER
          BX4    X4+X3
          EQ     ULP6        CHECK NEXT UNIT
  
 ULP7     SA1    B1RM+URCD   MERGE BITS IN CALL BLOCK 
          BX6    X1+X4
          SA6    A1 
          RJ     SEQ         SET EQUIPMENT PARAMETERS IN DISPLAY
          EQ     ULPX        RETURN 
  
  
 ULPA     CON    0           SCRATCH LOCATION 
 URP      TITLE  URP - UNITS FOR RECABLING PARAMETER PROCESSOR. 
**        URP - *UR=* PARAMETER PROCESSOR.
* 
*         ENTRY  (URCD) = CURRENT LIST OF UNITS.
*                (MSTD) = CURRENT REDEFINITION PARAMETERS.
* 
*         EXIT   (X5) = ERROR MESSAGE ADDRESS.
* 
*         USES   X - 0, 1, 2, 3,    5, 6. 
*                A - 1, 6.
*                B - 1, 2.
* 
*         CALLS  VON. 
* 
*         MACRO  KEYWORD. 
  
  
 URP2     SA1    B1RM+URCD   ADD UNIT TO LIST 
          BX6    X1+X3
          SA6    A1 
          RJ     SEQ         SET EQUIPMENT PARAMETERS IN K-DISPLAY
  
          KEYWORD  UR=,URP   ENTRY/EXIT 
          SX0    3           ASSEMBLE UNIT NUMBER 
          RJ     VON
          NZ     X5,URPX     IF ERROR IN ASSEMBLY 
  
*         FIND UNIT IN CURRENT UNIT LIST. 
  
          SA1    B1RM+MSTD+DDLL 
          MX0    -6 
          MX2    -3 
          LX1    -48
          BX2    -X2*X1 
          LX1    48 
          SB2    X2          SET UNIT COUNT 
          SX3    B1          SET UNIT MASK
 URP1     BX5    X6-X1       CHECK FOR UNIT NUMBER MATCH
          BX5    -X0*X5 
          ZR     X5,URP2     IF MATCH 
          SB2    B2-B1       ADVANCE UNIT NUMBER
          AX1    6
          LX3    1
          PL     B2,URP1     IF MORE UNITS TO CHECK 
          SX5    ERUN        **** ERROR IN UNIT LIST. 
          EQ     URPX        RETURN 
          TITLE  UTILITY SUBROUTINES. 
 ASC      SPACE  4,20 
**        ASC - ASSEMBLE CHARACTERS.
* 
*         ENTRY  (SPTR) = STRING BUFFER ADDRESS OF PREVIOUS CHARACTER.
*                (SLMP) = STRING BUFFER LIMIT POINTER.
*                (X7) = 1 IF IGNORE LEADING ZEROES. 
* 
*         EXIT   (X4) = NUMBER OF CHARACTERS ASSEMBLED. 
*                (X5) = RIGHT JUSTIFIED ASSEMBLED CHARACTERS. 
*                (X6) = LEFT JUSTIFIED ASSEMBLED CHARACTERS.
*                (B5) = SEPARATOR.
*                (SPTR) = UPDATED STRING BUFFER ADDRESS.
* 
*         USES   A - 1, 4, 6, 7.
*                X - 1, 2, 3, 4, 5, 6, 7. 
*                B - 2, 3, 4, 5, 7. 
  
  
*         PROCESS END OF BUFFER.
  
 ASC3     SA4    SLMP        SET STRING BUFFER EMPTY
          SB2    X4+
          SB5    1R.         SET TERMINATOR 
  
*         SET ASSEMBLED CHARACTERS. 
  
 ASC4     SX4    10          CALCULATE NUMBER OF CHARACTERS 
          SX3    B4 
          IX4    X4-X3
          SX6    B2          SET BUFFER POINTER 
          SA6    SPTR 
          BX6    X6-X6
          ZR     X4,ASCX     IF NO CHARACTERS ASSEMBLED 
          SX2    6           LEFT JUSTIFY CHARACTERS
          IX3    X3*X2
          SB4    X3 
          LX6    X5,B4
  
 ASC      SUBR               ENTRY/EXIT 
          SA7    ASCA        INITIALIZE IGNORE ZEROES FLAG
          BX5    X5-X5
          SB4    10 
          SA1    SPTR        SET STRING POINTER 
          SB2    X1 
          SA1    SLMP        SET MAXIMUM CHARACTER SCAN 
          SB3    X1 
  
*         ASSEMBLE CHARACTERS FROM BUFFER.
  
 ASC1     SB2    B2+B1
          GE     B2,B3,ASC3  IF END OF STRING BUFFER
          SA1    B2 
          SB5    X1          SET SEPARATOR
          SB7    X1-1R
          ZR     B7,ASC1     IF BLANK 
          SB7    X1-1R+ 
          PL     B7,ASC4     IF SEPARATOR 
          SA4    ASCA 
          ZR     X4,ASC2     IF NOT TO IGNORE ZEROES
          SB7    X1-1R0 
          ZR     B7,ASC1     IF LEADING ZERO
          SX7    B0          CLEAR IGNORE ZEROES FLAG 
          SA7    A4 
 ASC2     LX5    6           ASSEMBLE CHARACTER 
          SB4    B4-1        DECREMENT COUNT
          BX5    X5+X1
          NZ     B4,ASC1     IF MORE CHARACTERS TO ASSEMBLE 
          EQ     ASC4        SET ASSEMBLED CHARACTERS 
  
  
 ASCA     CON    0           IGNORE LEADING ZEROES FLAG 
 BCL      SPACE  4,20 
**        BCL - BUILD CURRENT CONFIGURATION LIST. 
* 
*         EXIT   CURRENT MASS STORAGE CONFIGURATION ON OUTPUT.
* 
*         USES   A - 1, 2.
*                X - 1, 2, 5, 6.
* 
*         CALLS  BED, EST, RMT. 
* 
*         MACROS CLOCK, DATE, GETLCW, WRITEC, WRITER. 
  
  
 BCL2     WRITER O,R         FLUSH BUFFER 
  
 BCL      SUBR               ENTRY/EXIT 
          RJ     EST         READ EST INTO *ESTB* 
          DATE   BCLA+3      PUT DATE AND TIME IN HEADER
          CLOCK  BCLA+4 
          WRITEC O,BCLA      WRITE HEADER 
          WRITEC X2,BCLB     WRITE DESCRIPTION LINE 
          WRITEC X2,(=C*          *)  WRITE BLANK LINE
  
*         SEARCH FOR MASS STORAGE EQUIPMENTS. 
  
          SX5    NOPE-1      INITIALIZE EST ORDINAL FOR SEARCH
 BCL1     SX5    X5+B1       INCREMENT EST ORDINAL
          SA1    LMSO 
          IX1    X1-X5
          ZR     X1,BCL2     IF END OF MASS STORAGE DEVICES 
          R=     X1,ESTE
          IX1    X5*X1
          SA1    ESTB+X1+EQDE  READ EST ENTRY 
          PL     X1,BCL1     IF NOT MASS STORAGE
          RJ     RMT         READ MST 
          RJ     BED         BUILD EQUIPMENT DISPLAY LINE 
          WRITEC O,BEDB,BEDBL  WRITE DISPLAY LINE TO BUFFER 
          EQ     BCL1        DISPLAY NEXT MS EQUIPMENT
  
  
 BCLA     DATA   C*1  MASS STORAGE CONFIGURATION. 00/00/00. 00.00.00.*
 BCLB     DATA   C*0 ORD  TYPE   CHANNELS   UNITS*
 BED      SPACE  4,10 
**        BED - BUILD EQUIPMENT DISPLAY LINE. 
* 
*         ENTRY  (X5) = EST ORDINAL.
*                (MSTB) = MST FOR EQUIPMENT.
* 
*         EXIT   (BEDC) = DISPLAY LINE FOR EQUIPMENT. 
*                (BEDB) = DISPLAY LINE PRECEDED BY BLANK WORD.
* 
*         USES   A - 0, 1, 2, 3, 6. 
*                X - 0, 1, 2, 3, 6. 
*                B - 4, 5, 6, 7.
* 
*         CALLS  COD, S2L.
* 
*         MACROS MOVE.
  
  
 BED      SUBR               ENTRY/EXIT 
          MOVE   BEDAL,BEDA,BEDC
          SX1    X5+         CONVERT EST ORDINAL
          NZ     X5,BED1     IF NOT REDEFINITION EQUIPMENT
          SA1    B1RM+CUEQ
 BED1     SA0    BEDC        DISPLAY WORD ADDRESS 
          SX1    X1+1000B    ENSURE THREE DIGITS
          RJ     COD         CONVERT EST ORDINAL
          MX1    -18
          BX6    -X1*X6 
          SA2    A0 
          LX1    42          POSITION MASK
          LX6    42 
          BX2    X1*X2
          BX3    X2+X6       MERGE EST ORDINAL INTO LINE
          R=     X2,ESTE
          IX2    X5*X2
          SA2    ESTB+X2+EQDE  MERGE EQUIPMENT TYPE 
          LX2    -12
          MX0    -11
          BX1    -X0*X2 
          LX0    24 
          BX3    X0*X3
          LX1    24 
          BX6    X1+X3
          SA6    A0 
          SA3    MSTB+DDLL   MERGE UNIT COUNT 
          MX0    -3 
          LX3    -48
          BX1    -X0*X3 
          LX3    59-58+48 
          NG     X3,BED2     IF NULL EQUIPMENT
          SX1    X1+B1
 BED2     SX6    X1+2R-0
          MX0    -12
          SB5    X1          SAVE UNIT COUNT FOR UNIT LIST PROCESSING 
          LX0    12 
          LX6    12 
          SA3    A0 
          BX3    X0*X3
          BX6    X6+X3
          SA6    A0 
          SA0    A0+B1       NEXT DISPLAY WORD
          MX0    -6          MERGE CHANNELS IN DISPLAY LINE 
          LX2    -24
          BX1    -X0*X2 
          SB7    36 
          RJ     S2L
          R=     X1,ESTE
          IX1    X5*X1
          SA1    ESTB+X1+EQDE  CONVERT SECOND CHANNEL 
          LX1    -24
          MX0    -6 
          BX1    -X0*X1 
          ZR     X1,BED3     IF NO SECOND CHANNEL 
          SB7    18 
          RJ     S2L         SET SECOND CHANNEL IN DISPLAY WORD 
          SA1    A0          INSERT COMMA 
          SX6    1R,-1R 
          LX6    30 
          IX6    X1+X6
          SA6    A0 
 BED3     SA0    A0+B1       NEXT DISPLAY WORD
          SB7    36          INITIALIZE UNIT POSITION IN DISPLAY WORD 
          SB6    B0          LOGICAL UNIT NUMBER
 BED4     GE     B6,B5,BED5  IF END OF UNITS
          SA1    MSTB+DDLL
          SB4    B6+B6       COMPUTE SHIFT COUNT
          SB4    B4+B6
          SB4    B4+B4
          AX1    B4 
          MX0    -6 
          BX1    -X0*X1 
          RJ     S2L         SET UNIT NUMBER IN DISPLAY LINE
          SB6    B6+B1       INCREMENT UNIT COUNT 
          SB7    B7-18
          PL     B7,BED4     IF NOT NEW DISPLAY WORD
          SB7    B7+60
          SA0    A0+B1
          EQ     BED4        NEXT UNIT
  
 BED5     SA1    MSTB+ACGL   SET STATUSES IN DISPLAY LINE 
          BX6    X6-X6
          LX1    59-11
          PL     X1,BED6     IF NOT DEVICE IDLE 
          SX6    1RI&1R-
 BED6     SA1    MSTB+DALL
          AX1    56 
          LX6    6
          SX2    3
          BX1    X2-X1
          NZ     X1,BED7     IF NOT DOWN
          SX6    X6+1RS&1R- 
 BED7     LX6    12 
  
*         MERGE STATUS BITS IN DISPLAY LINE.
  
          SA1    BEDC+5 
          LX6    18 
          BX6    X1-X6
          SA6    A1 
          EQ     BEDX        RETURN 
  
  
 BEDA     DATA   L* 1. DQ    CH00     UL=-- -- -- -- -- -- -- --   ST = 
,----*
 BEDAL    EQU    *-BEDA 
          ERRNZ  BEDAL+1-KLNL  LINE LENGTH ERROR
 BEDB     DATA   10H            BLANK SPACING FOR OUTPUT
 BEDC     BSS    BEDAL       DISPLAY LINE BUFFER
 BEDBL    EQU    *-BEDB      LENGTH OF OUTPUT LINE
 CAE      SPACE  4,10 
**        CAE - CLEAR ALL EQUIPMENT IDLE STATUS.
* 
*         EXIT   (X5) = ERROR MESSAGE ADDRESS.
*                     = 0 IF NO EQUIPMENT FOUND.
* 
*         CALLS  CLP, RRC.
  
  
 CAE      SUBR               ENTRY/EXIT 
 CAE1     RJ     RRC
          ZR     X5,CAEX     IF NO EQUIPMENT FOUND
          RJ     CLP
          NZ     X5,CAEX     IF ERROR IN CLEAR REQUEST
          EQ     CAE1        CHECK FOR NEXT EQUIPMENT 
 CCH      SPACE  4,10 
**        CCH - CHECK FOR MATCHING CHANNELS.
* 
*         ENTRY  (X1) = EST TO CHECK. 
*                (ESTD) = NEW EST ENTRY.
* 
*         EXIT   (X1) = 0 IF NO CHANNEL MATCH.
* 
*         USES   A - 2, 4.
*                X - 0, 1, 2, 3, 4. 
*                B - 2. 
  
  
 CCH      SUBR               ENTRY/EXIT 
          SA4    B1RM+ESTD
          LX1    -24
          LX4    24 
          MX0    -6 
          BX3    -X0*X1      BUILD CHANNEL MASK FOR NEW EQUIPMENT 
          LX1    -12
          BX2    -X0*X1 
          SX1    B1 
          SB2    X2 
          LX2    X1,B2
          SB2    X3 
          ZR     X3,CCH1     IF NO SECOND CHANNEL 
          LX3    X1,B2
          BX2    X2+X3
 CCH1     BX3    -X0*X4      BUILD CHANNEL MASK FOR COMPARE EQUIPMENT 
          SB2    X3 
          LX4    12 
          LX3    X1,B2
          BX4    -X0*X4 
          SB2    X4 
          ZR     X4,CCH2     IF NO SECOND CHANNEL 
          LX4    X1,B2
          BX3    X3+X4
 CCH2     BX1    X2*X3       NON-ZERO IF ANY CHANNEL MATCHES
          EQ     CCHX        RETURN 
 CHA      SPACE  4,10 
**        CHA - CHECK CHANNEL AVAILABLE.
* 
*         ENTRY  (X2) = CHANNEL NUMBER. 
*                (NPPU) = NUMBER OF PP-S. 
* 
*         EXIT   (X5) = 0 IF CHANNEL AVAILABLE. 
*                     = ERROR MESSAGE ADDRESS IF ERROR. 
*                (X1) .LT. 0 IF CHANNEL AVAILABLE ((X5) = 0)) BUT DOWN. 
*                (X6) = RESTORED TO ENTRY VALUE.
* 
*         USES   A - 1, 5, 6, 7.
*                X - 1, 3, 4, 5, 6, 7.
*                B - 2, 3.
* 
*         MACROS GETLCW.
  
  
 CHA4     SX5    ERCN        **** ERROR IN CHANNEL NUMBER.
  
 CHA      SUBR               ENTRY/EXIT 
          SX7    13B         SET UPPER CHANNEL OF LOWER BANK
          IX1    X7-X2
          BX5    X5-X5       SET CHANNEL AVAILABLE
          PL     X1,CHA0     IF CHANNEL IN LOWER BANK 
          SA1    NPPU        NUMBER OF PP-S 
          SX5    X1-11
          NG     X5,CHA4     IF ONLY CHANNELS 0 - 13
          SX3    20B         LOWER CHANNEL IN UPPER BANK
          SX4    33B         UPPER CHANNEL IN UPPER BANK
          IX5    X2-X3
          NG     X5,CHA4     IF NOT IN UPPER BANK 
          IX5    X4-X2       CHECK UPPER LIMIT
          NG     X5,CHA4     IF ERROR 
 CHA0     BX7    X2          SAVE CHANNEL NUMBER
          SA7    CHAA 
          BX7    X6          PRESERVE X6
          GETLCW 1,CHTP,CHTB
          BX2    X1          FWA OF CHANNEL STATUS TABLE
          LX2    0-12        POSITION CHANNEL STATUS TABLE ADDRESS
          SX2    X2 
          GETLCW CTALL,X2,CHTB
          BX6    X7          RESTORE X6 
          SA5    CHAA        DETERMINE CHANNEL TABLE WORD INDEX 
          SB2    B0 
 CHA1     SX5    X5-5        DIVIDE BY 5 LOOP 
          NG     X5,CHA2     IF DIVIDE COMPLETE 
          SB2    B2+B1
          EQ     CHA1        CONTINUE DIVIDE
  
 CHA2     SA1    CHTB+B2
          SB3    X5+6 
 CHA3     LX1    12          POSITION CHANNEL BYTE
          SB3    B3-B1
          NZ     B3,CHA3     IF CHANNEL NOT IN CORRECT POSITION 
          LX1    59-5        SET POSSIBLE CHANNEL DOWN FLAG 
          SX5    B0          SET CHANNEL AVAILABLE
          EQ     CHAX        RETURN 
  
  
 CHAA     CON    0           TEMPORARY CHANNEL STORAGE BUFFER 
 CLD      SPACE  4,20 
**        CLD - CHECK LEGALITY OF DEVICE. 
*         DEVICE MUST BE MASS STORAGE, IDLED, AND 
*         FIRST IN CHAIN IF LINKED DEVICE.
* 
*         ENTRY  (CUEQ) = CURRENT EQUIPMENT.
* 
*         EXIT   (X5) = ERROR MESSAGE ADDRESS.
*                     = 0 IF LEGAL DEVICE.
* 
*         USES   A - 1, 5.
*                X - 1, 5.
* 
*         CALLS  RMT. 
  
  
 CLD      SUBR               ENTRY/EXIT 
          SA5    B1RM+CUEQ
          R=     X1,ESTE
          IX1    X5*X1
          SA1    ESTB+X1+EQDE  READ EST ENTRY 
          PL     X1,CLD1     IF NOT MASS STORAGE
          RJ     RMT         READ MST TO *MSTB* 
          SA1    MSTB+ACGL   CHECK FOR IDLED DEVICE 
          LX1    59-11
          PL     X1,CLD1     IF NOT IDLED DEVICE
          SA1    MSTB+STLL
          SX5    7774B       MASK FOR CHAINED EST ORDINAL, FLAG 
          BX5    X5*X1
          ZR     X5,CLDX     IF LEGAL DEVICE
          SX5    ERDF        **** DEVICE NOT FIRST IN CHAIN.
          EQ     CLDX        RETURN 
  
 CLD1     SX5    EREN        **** ERROR IN EST ORDINAL. 
          EQ     CLDX        RETURN 
 CRM      SPACE  4,10 
**        CRM - CALL *1RM* TO PROCESSES FUNCTION. 
* 
*         ENTRY  (X6) = FUNCTION REQUEST. 
*                (TPAR) = CURRENT PARAMETER LEGALITY TABLE. 
*                (CUEQ) = EQUIPMENT IF APPLICABLE TO FUNCTION.
*                (URCD) = UNITS TO BE RECONFIGURED. 
*                (ESTD) = EST WITH RECONFIGURATION CHANGES. 
*                (MSTD) = MST WITH RECONFIGURATION CHANGES. 
* 
*         USES   A - 1, 2, 5, 6, 7. 
*                X - 1, 2, 5, 6, 7. 
*                B - 6. 
* 
*         CALLS  ASC, IDE, ISB, SPT, UKD. 
* 
*         MACROS RECALL, SYSTEM.
  
  
 CRM3     SA1    CRMB        RESTORE PARAMETER LIST 
          BX7    X1 
          SA7    B1RM+TPAR
          RJ     UKD         UPDATE K-DISPLAY 
  
 CRM      SUBR               ENTRY/EXIT 
          SA2    B1RM+TPAR   SAVE LEGAL PARAMETERS
          SA1    B1RM+RFNB   CHECK FOR *1RM* ACTIVE 
          BX7    X2 
          SA6    A1 
          SA7    CRMB 
          BX6    X6-X6       CLEAR LEGAL PARAMETERS 
          SA6    A2 
          SA6    B1RM+TCOM   CLEAR COMMAND PASSING AREA 
          NZ     X1,CRM1     IF *1RM* ACTIVE
          SA1    CRMC 
          BX6    X1 
          SA6    CRMA 
          SYSTEM SPC,R,CRMA 
 CRM1     RECALL
          SA1    B1RM+RFNB
          LX1    59-0 
          PL     X1,CRM3     IF FUNCTION COMPLETE 
          RJ     UKD         UPDATE K-DISPLAY 
          SA5    KBUF        CHECK FOR INPUT ENTERED
          ZR     X5,CRM1     IF NO INPUT DATA 
          RJ     ISB         INPUT STRING BUFFER
          SX7    B0          ASSEMBLE KEYWORD 
          RJ     ASC
          ZR     X4,CRM1     IF NO DATA ASSEMBLED 
          RJ     SPT         SEARCH PARAMETER TABLE 
          ZR     X5,CRM2     IF NO ERROR
          RJ     IDE         PROCESS ERROR
          EQ     CRM1        RECHECK FUNCTION 
  
 CRM2     SB6    A3-TKEY     PASS PARAMETER TO *1RM*
          MX6    1
          LX6    B6 
          SA6    B1RM+TCOM
          EQ     CRM1        CHECK FOR FUNCTION COMPLETE
  
  
 CRMA     CON    0           *1RM* CALL BUFFER
 CRMB     CON    0           PARAMETER TABLE SAVE AREA
 CRMC     VFD    18/0L1RM,6/,18/MSG1,18/B1RM  *1RM* CALL
 EST      SPACE  4,10 
**        EST - READ EST INTO *ESTB*. 
* 
*         ENTRY  NONE.
* 
*         EXIT   *ESTB* = EST ENTRIES (THROUGH LAST MASS STORAGE + 1).
*                (LMSO) = LAST MASS STORAGE EST ORDINAL + 1.
* 
*         CALLS  RSB=.
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 2, 6, 7. 
*                B - NONE.
  
  
 EST      SUBR               ENTRY/EXIT 
          SA2    ESTA        SET *COMCRSB* ENTRY CONDITIONS 
          SX1    ESTB        SET ADDRESS TO TRANSFER TO 
          MX3    -12
          AX2    12 
          BX3    -X3*X2 
          SX7    X3 
          AX2    24          SET ADDRESS TO TRANSFER FROM 
          R=     X6,ESTE
          IX3    X3*X6       SET WORD COUNT 
          SX4    B0          SET SUBSYSTEM (= *CMR*)
          MX6    1
          SA6    X1 
          SA7    LMSO        SAVE EST SIZE TO SEARCH
          RJ     RSB=        READ EST 
          EQ     ESTX        RETURN 
 FUM      SPACE  4,20 
**        FUM - FIND REPLACEMENT UNIT IN MST-S. 
* 
*         ENTRY  (CUEQ) = CURRENT EQUIPMENT.
* 
*         EXIT   (X5) = ERROR MESSAGE ADDRESS.
*                (B5) = UNIT POSITION IF UNIT IN MST. 
* 
*         USES   A - 1, 2, 4. 
*                X - 0, 1, 2, 3, 4, 5, 6, 7.
*                B - 2, 3, 4, 5, 6. 
* 
*         CALLS  CCH, SML.
  
  
 FUM6     SX5    ERSI        **** EQUIPMENT STATUS INCORRECT. 
          EQ     FUMX        RETURN 
  
 FUM7     SX5    ERIU        **** INTRODUCED UNIT IN USE. 
  
 FUM      SUBR               ENTRY/EXIT 
          SA1    B1RM+ESTD   CHECK FOR SHARED DEVICES 
          SX5    B0 
          LX1    59-57
          PL     X1,FUM1     IF DEVICE NOT SHARED 
          SA2    MSTC+ACGL   CHECK FOR GLOBAL UNLOAD
          LX2    59-5 
          NG     X2,FUM3     IF GLOBAL UNLOAD SET 
          EQ     FUM2        CHECK UNIT NUMBER
  
 FUM1     LX1    57-54
          NG     X1,FUM3     IF NON-SHARED DEVICE UNAVAILABLE 
 FUM2     SA1    MSTC+DDLL   CHECK FOR UNIT NUMBER CHANGE 
          SA2    B1RM+MSTD+DDLL 
          BX1    X1-X2
          MX0    -3 
          AX1    48 
          BX1    -X0*X1 
          NZ     X1,FUM6     IF CHANGE IN NUMBER OF UNITS 
 FUM3     RJ     SML         SEARCH FOR MASS STORAGE, *LDAM* DEVICES
          ZR     X5,FUMX     IF ALL MS EQUIPMENTS CHECKED 
  
*         CHECK THAT CHANNELS ARE THE SAME. 
  
          R=     X1,ESTE
          IX1    X5*X1
          SA1    ESTB+X1+EQDE  READ EST ENTRY 
          RJ     CCH         COMPARE CHANNELS 
          ZR     X1,FUM3     IF NO CHANNEL MATCHES
          SA1    MSTB+STLL
          LX1    59-2 
          NG     X1,FUM3     IF DEVICE IN USE IN CHAIN
  
*         SEARCH FOR MATCHING UNIT NUMBER.
  
          SA2    B1RM+MSTD+DDLL 
          SA4    MSTB+DDLL
          BX3    X4+X2
          LX3    59-58
          SA1    MSTB+DALL
          SX6    3
          AX1    56 
          BX1    X6-X1
          ZR     X1,FUM3     IF DEVICE DOWN 
          NG     X3,FUM3     IF EITHER EQUIPMENT IS NULL
          LX2    12          EXTRACT CURRENT UNIT COUNT 
          MX6    -3 
          LX4    12 
          BX1    -X6*X4      EXTRACT UNIT COUNT FOR COMPARISON UNIT 
          SB5    B0          INITIALIZE UNIT POSITION IN ERROR
          LX4    -12
          BX7    -X6*X2 
          LX2    -12
          SB2    B0          INITIALIZE COMPARISON LOOP 
          MX6    -6          SET UNIT MASK
          SB4    6
 FUM4     SB3    B0 
          AX0    X2,B2       EXTRACT UNIT TO CHECK
          SB6    X1          SET COMPARISON UNIT COUNT
          BX0    -X6*X0 
 FUM5     AX3    X4,B3       POSITION COMPARISON EQUIPMENT UNIT 
          BX3    -X6*X3 
          SB3    B3+B4
          BX3    X3-X0
          ZR     X3,FUM7     IF UNIT NUMBER MATCH 
          SB6    B6-B1
          PL     B6,FUM5     IF MORE UNITS TO CHECK 
          SX7    X7-1 
          PL     X7,FUM4     IF MORE UNITS TO CHECK 
          EQ     FUM3        CHECK NEXT EQUIPMENT 
 GLC      SPACE  4,10 
**        GLC - GET LOW CORE WORDS. 
* 
*         ENTRY  (X1) = WORD COUNT. 
*                (X2) = LOW CORE ADDRESS. 
*                (X3) = ADDRESS TO STORE WORDS. 
* 
*         EXIT   (X1) = FIRST LOW CORE WORD.
*                LOW CORE WORD(S) RETURNED. 
* 
*         USES   A - 1, 6.
*                X - 1, 2, 6. 
* 
*         MACROS SYSTEM.
  
  
 GLC      SUBR               ENTRY/EXIT 
          MX6    42 
          LX1    36 
          SA6    X3 
          LX2    18 
          BX6    X1+X3
          BX6    X2+X6
          SA6    GLCA 
          SYSTEM RSB,,A6
          SA1    X3 
          EQ     GLCX        RETURN 
  
  
 GLCA     CON    0           *RSB* STATUS WORD
 IDE      SPACE  4,10 
**        IDE - ISSUE INPUT DATA ERROR MESSAGE TO K-DISPLAY.
* 
*         ENTRY  (SLMP) = STRING BUFFER LIMIT POINTER.
*                (X5) = ADDRESS OF ERROR MESSAGE. 
* 
*         EXIT   ERROR MESSAGE SET IN K-DISPLAY.
*                STRING BUFFER SET EMPTY. 
* 
*         USES   A - 5, 6.
*                X - 5, 6.
* 
*         MACROS MOVE, WRITEC.
  
  
 IDE      SUBR               ENTRY/EXIT 
          MOVE   6,ERR+X5,MSG1  MOVE MESSAGE TO BUFFER
          SA5    SLMP        SET BUFFER EMPTY 
          BX6    X5 
          SA6    SPTR 
          WRITEC O,MSG1,6    RECORD ERROR ON OUTPUT FILE
          EQ     IDEX        RETURN 
 ISB      SPACE  4,20 
**        ISB - INPUT STRING BUFFER.
* 
*         ENTRY  (SPTR) = STRING BUFFER ADDRESS.
*                (SLMP) = STRING BUFFER LIMIT.
* 
*         EXIT   (SPTR) = UPDATED STRING BUFFER.
*                (SLMP) = LWA+1 OF STRING BUFFER. 
* 
*         USES   A - 4, 5, 6, 7.
*                X - 4, 5, 6, 7.
*                B - 2. 
* 
*         CALLS  USB. 
* 
*         MACROS MESSAGE, MOVE, RECALL, WRITEC. 
  
  
*         MOVE INPUT TO STRING BUFFER.
  
 ISB2     MOVE   6,A5,MSG2   MOVE INPUT TO DISPLAY
          MOVE   6,ERR+ERBL,MSG1  CLEAR MESSAGE LINE
          MESSAGE  A5,3,R    ENTER DIRECTIVES IN CONTROL POINT DAYFILE
          WRITEC O,KBUF-1,6  RECORD INPUT DIRECTIVES ON OUTPUT
          SB2    A5          MOVE INPUT TO STRING BUFFER
          RJ     USB
          SX6    X6+B1       SET LWA+1 OF CHARACTER STRING
          SA6    SLMP 
          SX7    B6-B1
          BX6    X6-X6       CLEAR INPUT BUFFER 
          SA6    A5 
          SA7    SPTR 
  
 ISB      SUBR               ENTRY/EXIT 
          SA4    SPTR 
          SA5    SLMP 
          BX7    X5-X4
          NZ     X7,ISBX     IF BUFFER NOT EMPTY
  
*         WAIT FOR INPUT. 
  
 ISB1     SA5    KBUF 
          NZ     X5,ISB2     IF INPUT ENTERED 
          RECALL
          EQ     ISB1        LOOP FOR INPUT 
  
  
 USBB     BSS    NSCI+10     STRING BUFFER
 MPL      SPACE  4,15 
**        MPL - MOVE AND POSITION LINE. 
* 
*         *MPL* IS USED TO MOVE A DISPLAY LINE TO A K-DISPLAY 
*         BUFFER WHICH HAS THE X,Y COORDINATES IN THE FIRST 24 BITS 
*         OF EACH LINE. 
* 
*         ENTRY  (X1) = WORD COUNT OF BLOCK TO BE MOVED.
*                (X2) = ADDRESS OF FIRST WORD OF SOURCE.
*                (X3) = ADDRESS OF FIRST WORD OF DESTINATION. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 2, 4, 6. 
  
  
 MPL      SUBR               ENTRY/EXIT 
          SA4    X3          GET X,Y COORDINATES FROM DESTINATION 
          MX7    24 
          SA2    X2+         GET FIRST WORD FROM ORIGIN 
 MPL1     BX4    X7*X4
          LX2    36 
          BX6    -X7*X2 
          BX6    X6+X4
          SX1    X1-1        DECREMENT COUNT
          SA6    X3          STORE WORD IN DESTINATION
          BX4    X2          PARTIAL WORD FROM SOURCE 
          SX3    X3+B1       ADDRESS OF NEXT DESTINATION LOCATION 
          SA2    A2+B1       GET NEXT FULL SOURCE WORD
          NZ     X1,MPL1     IF MORE TO MOVE
          BX6    X7*X4
          ZR     X6,MPLX     IF LAST PARTIAL WORD IS EMPTY
          SA6    X3          STORE LAST PARTIAL WORD
          EQ     MPLX        RETURN 
 RMT      SPACE  4,10 
**        RMT - READ MST FOR EQUIPMENT. 
* 
*         ENTRY  (X5) = EST ORDINAL.
* 
*         EXIT   (MSTB) = MST FOR EQUIPMENT.
*                MST READ INTO SPECIFIED BUFFER.
* 
*         USES   A - 1. 
*                X - 1, 6.
* 
*         MACROS GETLCW.
  
  
 RMT      SUBR               ENTRY/EXIT 
          R=     X1,ESTE
          IX1    X5*X1
          SA1    ESTB+X1+EQDE  READ EST ENTRY FOR MST ADDRESS 
          MX6    -12
          BX6    -X6*X1 
          LX6    3
          GETLCW MSTL,X6,MSTB 
          EQ     RMTX        RETURN 
 SEQ      SPACE  4,10 
**        SEQ - SET EQUIPMENT PARAMETERS IN DISPLAY.
* 
*         ENTRY  (CUEQ) = CURRENT EQUIPMENT.
*                (MSTC) = MST FOR CURRENT EQUIPMENT.
*                (MSTD) = CHANGED MST PARAMETERS. 
* 
*         EXIT   PARAMETERS SET IN DISPLAY BUFFER.
* 
*         USES   A - 0, 1, 4, 5, 6. 
*                X - 0, 1, 3, 4, 5, 6, 7. 
* 
*         CALLS  BED, RMT.
* 
*         MACROS MOVE, MOVEDL.
  
  
 SEQ3     MOVEDL BEDAL,NONE,DSCC  CLEAR CURRRENT EQUIP CONFIGURATION
          MOVEDL BEDAL,BLKL,DSRC  CLEAR REQUESTED EQUIP CONFIGURATION 
          MOVEDL SEQAL,BLKL,DSAB  CLEAR CHANGED UNITS LINE
  
 SEQ      SUBR               ENTRY/EXIT 
          SA5    B1RM+CUEQ
          ZR     X5,SEQ3     IF NO EQUIPMENT PRESENT
          RJ     RMT         READ MST 
          RJ     BED         BUILD DISPLAY LINE 
          MOVEDL BEDAL,BEDC,DSCC  SET CURRENT EQUIPMENT CONFIGURATION 
          MOVE   MSTL,B1RM+MSTD,MSTB  USE CHANGED PARAMETERS
          MOVE   1,B1RM+ESTD,ESTB 
          BX5    X5-X5
          RJ     BED         BUILD DISPLAY LINE 
          MOVEDL BEDAL,BEDC,DSRC  SET REQUESTED EQUIP CONFIGURATION 
  
*         INDICATE CHANGED UNITS ON K-DISPLAY.
  
          MOVEDL SEQAL,SEQA,DSAB  SET CHANGED UNITS 
          SA0    DSAB+1 
          SA4    B1RM+URCD   GET CHANGED UNITS
          SX7    1R*
          MX0    -6 
          MX3    1
 SEQ1     ZR     X4,SEQX     IF END OF UNITS
          LX4    -1 
          SX1    X0 
          LX7    -18
          ZR     X1,SEQ2     IF NOT NEW WORD
          SA0    A0+B1
 SEQ2     LX0    -18
          PL     X4,SEQ1     IF NOT THIS UNIT 
          SA1    A0          MERGE * IN UNIT POSITION 
          BX4    -X3*X4 
          BX1    X0*X1
          BX6    X1+X7
          SA6    A1 
          EQ     SEQ1        LOOP FOR NEXT UNIT 
  
  
 SEQA     DATA   L* CHANGED UNITS                          *
 SEQAL    EQU    *-SEQA 
 SPT      SPACE  4,20 
**        SPT - SEARCH PARAMETER TABLE. 
* 
*         ENTRY  (X6) = SEARCH ELEMENT. 
*                (TPAR) = PARAMETER LEGALITY MASK 
* 
*         EXIT   (X3) = PARAMETER TABLE ENTRY.
*                (X5) = ERROR MESSAGE ADDRESS.
*                     = 0 ON CLEAR ERROR STATUS.
*                (A3) = PARAMETER TABLE ADDRESS.
* 
*         USES   A - 1, 3.
*                X - 0, 1, 3, 4, 5. 
  
  
 SPT      SUBR               ENTRY/EXIT 
          SA1    B1RM+TPAR   LEGAL PARAMETER DESCRIPTION
          MX0    42 
          SA3    TKEY        INITIALIZE PARAMETER SEARCH
          SX5    ERIE        **** INCORRECT ENTRY.
 SPT1     SA3    A3+B1
          BX4    X0*X3
          ZR     X3,SPTX     IF END OF TABLE
          BX4    X6-X4
          LX1    59-0 
          NZ     X4,SPT1     IF NO MATCH
          PL     X1,SPTX     IF COMMAND NOT LEGAL 
          SX5    B0          CLEAR ERROR STATUS 
          EQ     SPTX        RETURN 
 SML      SPACE  4,20 
**        SML - SEARCH EST FOR MASS STORAGE *LDAM* DEVICES. 
* 
*         ENTRY  (X5) = PREVIOUS EST ORDINAL. 
*                (ESTB) = EST BUFFER INITIALIZED. 
* 
*         EXIT   (X5) = 0 IF ALL EQUIPMENTS CHECKED.
*                (X5) = EST ORDINAL FOR REDEFINITION. 
*                (X1) .LT. 0 IF IDLED DEVICE. 
*                (MSTB) = MST FOR EQUIPMENT.
* 
*         USES   A - 1, 2.
*                X - 1, 2, 5, 6.
* 
*         CALLS  RMT. 
  
 SML2     SX5    0           RETURN END OF EST STATUS 
  
  
 SML      SUBR               ENTRY/EXIT 
 SML1     SA1    LMSO 
          SX5    X5+B1
          IX1    X1-X5
          ZR     X1,SML2     IF END OF MASS STORAGE DEVICES 
          R=     X1,ESTE
          IX1    X5*X1
          SA1    ESTB+X1+EQDE  READ EST ENTRY 
          PL     X1,SML1     IF NOT MASS STORAGE
          SA2    B1RM+CUEQ
          LX1    59-55
          PL     X1,SML1     IF NOT *LDAM*
          BX6    X2-X5
          ZR     X6,SML1     IF CURRENT EQUIPMENT 
          RJ     RMT         READ MST 
          SA1    MSTB+ACGL   CHECK REDEFINITION STATUS
          LX1    59-11
          EQ     SMLX        RETURN 
 S2L      SPACE  4,10 
**        S2L - SET 2 DIGITS IN DISPLAY LINE. 
* 
*         ENTRY  (B7) = SHIFT COUNT.
*                (A0) = DISPLAY LINE ADDRESS. 
*                (X1) = DIGITS TO DISPLAY.
* 
*         USES   A - 2, 6.
*                X - 1, 2, 6. 
* 
*         CALLS  COD. 
  
  
 S2L      SUBR               ENTRY/EXIT 
          SX1    X1+100B     INSURE TWO DIGITS
          RJ     COD         CONVERT TO DISPLAY CODE
          MX1    -12
          BX6    -X1*X6 
          SA2    A0 
          LX1    B7 
          LX6    B7 
          BX2    X1*X2
          BX6    X2+X6
          SA6    A0 
          EQ     S2LX        RETURN 
 UKD      SPACE  4,10 
**        UKD - UPDATE K-DISPLAY INFORMATION. 
* 
*         ENTRY  (TPAR) CONTAINS LEGAL PARAMETERS.
* 
*         EXIT   K-DISPLAY UPDATED. 
* 
*         USES   A - 4, 5, 6. 
*                X - 4, 5, 6. 
*                B - 5, 6.
* 
*         CALLS  BED, SEQ, SML. 
* 
*         MACROS MOVEDL.
  
  
 UKD      SUBR               ENTRY/EXIT 
          SA5    B1RM+TPAR   COPY LEGAL PARAMETER DEFINITION TO DISPLAY 
          SB5    B0 
          SB6    B0 
 UKD1     ZR     X5,UKD2     IF END OF PARAMETERS 
          SB5    B5+KLNL
          LX5    -1 
          PL     X5,UKD1     IF NOT LEGAL PARAMETER 
          MX6    1           CLEAR PARAMETER BIT
          BX5    -X6*X5 
          MOVEDL KLNL,UKDC-KLNL+B5,DSAA+B6  MOVE DESCRIPTION
          SB6    B6+KLNL
          NZ     X5,UKD1     IF MORE LEGAL PARAMETERS 
 UKD2     SB5    KLNL*KCML   CLEAR REMAINDER OF PARAMETER DESCRIPTIONS
          GE     B6,B5,UKD4  IF PARAMETER AREA FULL 
 UKD3     MOVEDL KLNL,BLKL,DSAA+B6
          SB6    B6+KLNL
          LT     B6,B5,UKD3  IF MORE TO CLEAR 
  
*         SET OTHER EQUIPMENTS TO RECONFIGURE IN DISPLAY. 
  
 UKD4     SX6    B0          SAVE POSITION
          SX5    B0          INITIALIZE EQUIPMENT SEARCH LOOP 
          SA6    UKDB 
 UKD5     RJ     SML         FIND EQUIPMENT 
          ZR     X5,UKD6     IF END OF EQUIPMENTS 
          PL     X1,UKD5     IF DEVICE IDLE BIT NOT SET 
          RJ     BED         BUILD EQUIPMENT DISPLAY LINE 
          SA4    UKDB 
          MOVEDL BEDAL,BEDC,DSAE+X4 
          SA4    UKDB        INCREMENT DISPLAY LINE 
          SX6    X4+KLNL
          SA6    A4 
          SB5    X6 
          SB6    KLNL*KEQL
          LT     B5,B6,UKD5  IF NOT END OF DISPLAY LINES
          EQ     UKD8        COMPLETE PROCESSING
  
 UKD6     SA4    UKDB 
          SB6    KLNL*KEQL
          SB5    X4+
          NZ     X4,UKD7     IF AN EQUIPMENT ALREADY ENTERED
          SB5    KLNL 
          MOVEDL BEDAL,NONE,DSAE
 UKD7     MOVEDL BEDAL,BLKL,DSAE+B5  MOVE BLANK LINES 
          SB5    B5+KLNL
          LT     B5,B6,UKD7  IF NOT END OF DISPLAY LINES
 UKD8     RJ     SEQ         SET PARAMETERS FOR CURRENT EQUIPMENT 
          EQ     UKDX        RETURN 
  
  
 UKDB     CON    0           TEMPORARY
  
 UKDC     BSS    0           PARAMETER DESCRIPTIONS 
 COMMAND  HERE
 VON      SPACE  4,20 
**        VON - VALIDATE OCTAL NUMBERS. 
* 
*         ENTRY  (X0) = MAXIMUM NUMBER OF CHARACTERS + 1 ALLOWED. 
*                (SPTR) = STRING BUFFER ADDRESS OF PREVIOUS CHARACTER.
*                (SLMP) = STRING BUFFER LIMIT POINTER.
* 
*         EXIT   (X4) = NUMBER OF CHARACTERS ASSEMBLED. 
*                (X5) = ERROR MESSAGE ADDRESS.
*                (X6) = BINARY VALUE OF NUMBER. 
*                (B5) = SEPARATOR.
*                (SPTR) = UPDATED STRING BUFFER POINTER.
* 
*         USES   A - 1, 2, 4, 6.
*                X - 1, 2, 4, 5, 6, 7.
*                B - 7. 
* 
*         CALLS  ASC, DXB.
  
  
 VON3     SX5    ERIE        **** INCORRECT ENTRY.
  
 VON      SUBR               ENTRY/EXIT 
  
*         CHECK SYNTAX OF VALUE.
  
          SX7    B0 
          RJ     ASC
          SA2    SPTR        CHECK FOR POST RADIX 
          SA1    X2-1 
          SX2    X1-1R0 
          PL     X2,VON2     IF NO POST RADIX 
          SX7    X1-1RB 
          ZR     X7,VON1     IF OCTAL POST RADIX
          SX2    X1-1RD 
          NZ     X2,VON3     IF NOT DECIMAL POST RADIX
 VON1     SX4    X4-1        DECREMENT NUMBER OF CHARACTERS 
 VON2     IX7    X4-X0
          PL     X7,VON3     IF TOO MANY DIGITS 
          SX5    ERIS        **** INCORRECT SEPARATOR.
          SX2    B5-1R= 
          ZR     X2,VONX     IF INCORRECT SEPARATOR 
          BX5    X5-X5
          ZR     X4,VONX     IF NO CHARACTERS 
  
*         CHECK BINARY VALUES.
  
          BX5    X6          CONVERT TO BINARY
          SB7    B0 
          PX6    X4,B5
          SA6    VONA 
          RJ     DXB
          NZ     X4,VON3     IF ERROR IN CONVERSION 
          SA4    VONA        RESTORE CHARACTER COUNT
          UX4,B5 X4 
          BX5    X5-X5       CLEAR ERROR
          EQ     VONX        RETURN 
  
  
 VONA     CON    0           SCRATCH LOCATION 
          TITLE  ERROR MESSAGES.
*         ERROR MESSAGES. 
  
  
 ERR      BSS    0           ERROR MESSAGE FIRST WORD ADDRESS 
          LOC    0
 ERBL     DIS    6, 
 ERCN     DIS    6,**** ERROR IN CHANNEL NUMBER.
 ERDF     DIS    6,**** DEVICE NOT FIRST IN CHAIN.
 EREN     DIS    6,**** ERROR IN EST ORDINAL. 
 ERIE     DIS    6,**** INCORRECT ENTRY.
 ERIS     DIS    6,**** INCORRECT SEPARATOR.
 ERSI     DIS    6,**** EQUIPMENT STATUS INCORRECT. 
 ERIU     DIS    6,**** INTRODUCED UNIT IN USE. 
 ERUN     DIS    6,**** ERROR IN UNIT LIST. 
          LOC    *O 
          ERRNZ  ERBL 
 TKEY     SPACE  4,10 
**        TKEY - TABLE OF KEYWORDS. 
* 
*         ENTRY  42/  KEYWORD,18/  PRO
*                KEYWORD =
*                PRO = PROCESSOR ADDRESS. 
  
  
 TKEY     EQU    *-1
  
          DUP    KYMX+1,1 
          CON    0
  
          LIST   G
 KEY      HERE
          LIST   *
          ORG    TKEY+KYMX+1
          CON    0           END OF TABLE 
          TITLE  DISPLAY BUFFER.
*         DISPLAY AREA DATA.
  
  
 KL       VFD    24/KBUF,18/DSB,18/DSA  SCREEN CONTROL WORD 
          DATA   10H
 KBUF     BSSZ   8           KEYBOARD BUFFER
          NOREF  K
          SPACE  4,10 
*         LEFT SCREEN DISPLAY BUFFER. 
  
  
 DSA      VFD    10/0,1/0,1/0,48/0  64 CHARACTERS/LINE, FORMATTED 
  
  
  KDL 18,T,(MASS STORAGE FAILURE RECOVERY)
  KDL 1,K,(CURRENT EQUIPMENT CONFIGURATION) 
 DSCC     EQU    *
  KDL 4,K,(12. DQ-3  CH20,21 UL= 40 41 42 -- -- -- -- --   ST = ----) 
 K        SET    K+2         SKIP TWO LINES 
  KDL 1,K,(REQUESTED EQUIPMENT CONFIGURATION) 
 DSRC     EQU    *
  KDL 4,K,(12. DQ-3  CH20,21 UL= 47 41 42 -- -- -- -- --   ST = ----) 
 DSAB     EQU    *
  KDL 8,K,( CHANGED UNITS    *                     )
 K        SET    K+2         SKIP TWO LINES 
  KDL 1,K,(IDLED EQUIPMENTS)
 DSAE     EQU    *
          DUP    KEQL,1 
  KDL 4,K,(                                                         ) 
 MSG1     EQU    *+1
  KDL 1,M,(                                                            )
 MSG2     EQU    *+1
  KDL 1,I,(                                                            )
          CON    0           END OF DISPLAY 
 DSB      SPACE  4,10 
*         RIGHT SCREEN DISPLAY BUFFER.
  
  
 DSB      VFD    10/0,1/0,1/0,48/0  64 CHARACTERS/LINE, FORMATTED 
  
  KDL 1,T,(K DISPLAY COMMANDS)
 DSAA     EQU    *
          DUP    KCML,1 
  KDL 1,K,( 
,   ) 
          CON    0           END OF DISPLAY 
          SPACE  4,10 
*         LINE SKELETONS. 
  
  
 NONE     DATA   10HNONE. 
 BLKL     DATA   64L
          TITLE  COMMON DECKS.
**        COMMON DECKS. 
  
  
*CALL     COMCCIO 
*CALL     COMCCOD 
*CALL     COMCCPM 
*CALL     COMCDXB 
*CALL     COMCLFM 
*CALL     COMCMVE 
*CALL     COMCRSB 
*CALL     COMCSYS 
*CALL     COMCUSB 
*CALL     COMCWTC 
*CALL     COMCWTW 
*CALL     COMCZTB 
          TITLE  BUFFERS. 
          USE    LITERALS 
  
  
*         BUFFERS.
  
  
 SSJ=     BSSZ   SSJL 
 CHTB     EQU    *           CHANNEL STATUS TABLE BUFFER
 ESTB     EQU    CHTB+CTALL  EST BUFFER 
 MSTC     EQU    ESTB+ESTE*ESMX  CURRENT EQUIPMENT MST
 MSTB     EQU    MSTC+MSTL   MST READ BUFFER
 OBUF     EQU    MSTB+MSTL   OUTPUT BUFFER
 BUFL     EQU    OBUF+OBUFL  END OF BUFFERS 
 RFL=     EQU    BUFL+10B 
 PRS      TITLE  PRESET.
**        PRS - PRESET. 
* 
*         EXIT   (NPPU) = NUMBER OF PPUS. 
*                (ESTA) = EST ADDRESS.
*                (MMFF) .NE. 0 IF MMF MODE. 
* 
*         USES   A - 1, 6.
*                X - 0, 1, 2, 3, 5, 6.
* 
*         CALLS  PRK. 
* 
*         MACROS ABORT, EREXIT, GETLCW, MESSAGE.
  
  
 PRS      SUBR               ENTRY/EXIT 
          EREXIT END1 
  
*         CHECK NUMBER OF ARGUMENTS.
  
          SX5    PRSA        * USER ACCESS NOT VALID.*
          SA1    SSJ=        CHECK SUBSYSTEM ID 
          MX0    -12
          BX1    -X0*X1 
          SX6    X1-MSSI
          NZ     X6,PRS1     IF USER ACCESS NOT VALID 
          SA1    ACTR        CHECK NUMBER OF ARGUMENTS
          SX5    PRSB        * INCORRECT COMMAND.*
          MX0    -18
          BX2    -X0*X1 
          ZR     X2,PRS2     IF NO ARGUMENTS
 PRS1     MESSAGE X5
          ABORT 
  
*         GET NUMBER OF PPUS IN SYSTEM. 
  
 PRS2     GETLCW 1,PPUL,NPPU
          MX0    -12
          LX1    -24
          BX6    -X0*X1 
          SA6    A1 
  
*         GET NUMBER OF MASS STORAGE EQUIPMENTS AND SET EST ADDRESS.
  
          GETLCW 1,ESTP,ESTA
  
*         SET MULTI-MAINFRAME STATUS. 
  
          GETLCW 1,MMFL,MMFF
          AX1    36 
          BX6    -X0*X1 
          SA6    A1+
          SX3    PRSD 
          RJ     PRK         PRESET K-DISPLAY BUFFER
          EQ     PRSX        RETURN 
  
 PRSA     DATA   C* USER ACCESS NOT VALID.* 
 PRSB     DATA   C* INCORRECT COMMAND.* 
 PRSC     CON    0           *GETQP* BUFFER WORD
 PRSD     KDL    *           Y-COORDINATE TABLE 
  
 PRK      HERE               REMOTE BLOCK FROM *COMCDCP*
          SPACE  4
          END 
