ASMB,Q,R,C,N
      IFZ 
      HED <DINIT> DS/1000 INITIALIZATION--SHUTDOWN VERSION REV 2013 
      NAM DINIT,19,26 91750-16069 REV 2013 800820 ALL (SD)
      EXT .CAY,.LAY,.SAX,.ADX,.ADY
      EXT #BUSY,#PNLH,PGMAD,#MAST,#RQB
      XIF 
      IFN 
      HED <DINIT> DS/1000 INITIALIZATION--NON-SHUTDOWN VERS, REV 2013 
      NAM DINIT,19,26 91750-16068 REV 2013 800820 ALL (NSD) 
      XIF 
      SPC 1 
      EXT READF,CLOSE,OPEN,RNRQ,PRTN,XLUEX,IFTTY
      EXT EXEC,MESSS,$LIBR,$LIBX,$OPSY,#PKUP,PARSE,#RSAX
      EXT D$XS5,D$LID,D$RID 
      EXT .MVW,.CAX,.DSX,.LDX,.CMW,CLRQ 
      SPC 1 
      EXT #MA1,#MA2,#MA3,#DISM
      EXT #RR1,#RR2,#RR3,#RR5 
* RES ENTRY POINTS
      EXT #ST04,#ST10,#MRTH,$BMON,#NMSC,#LV 
      EXT #FWAM,#NULL,#QRN,#LDEF
      EXT #SWRD,#NODE,#NRV,#NCNT,#EXHC,#EXTC
      EXT #GRPM,#NCLR,#SCLR,#RFSZ 
      EXT #CNOD,#LEVL,#GTOP,#LU3K 
      EXT #POOL,#MTBL,#RSM,#MAHC,#MARN,#MCTR
      SPC 1 
      ENT #PRNT,#READ,#PRSB,#INBF,#PRNL,#EXFR,#CLSB 
      ENT #ABRT,#SYSR,#MSKD,#RNSB,#RSM.,#MA1.,#MA2. 
* 
      SUP 
* 
*    NAME:   DINIT
*    SOURCE: 91750-18068
*    RELOC.: 91750-16068 (NON-SHUTDOWN VERSION)  %DINIT 
*                  16069 (SHUTDOWN VERSION)      %DINIS 
*    PGMR:   LYLE WEIMAN
*            TOM MILNER 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
*     USE "Z" OPTION TO INCLUDE SHUTDOWN CAPABILITY 
*     USE "N" OPTION TO EXCLUDE SHUTDOWN CAPABILITY 
* 
      SPC 2 
*   DINIT IS USED TO INITIALIZE 
*   THE DISTRIBUTED SYSTEMS NETWORK THROUGH ESTABLISHMENT OF THE
*   REQUIRED RESOURCES (CLASS NUMBERS, RESOURCE NUMBERS, TRANSACTION
*   LISTS, POINTERS, TIMERS, AND CONSTANTS), THROUGH THE ACTIVATION 
*   OF 'LISTEN' MODE FOR EACH SPECIFIED COMMUNICATION LINE INTERFACE, 
*   AND BY SCHEDULING THOSE MONITOR-PROGRAMS WHICH SERVICE INCOMING 
*   REQUESTS FROM REMOTE NETWORK NODES. 
      SPC 3 
*   ONLY THE SHUTDOWN VERSION OF 'DINIT' HAS ANY USE AFTER INITIALIZATION.
*    (SEE LIST OF COMMANDS BELOW, UNDER "SECONDARY MODE OF EXECUTION")
      SKP 
* +----------------------------------------------------------------+
* |SCHEDULING FOR INITIALIZATION:                                  |
* +----------------------------------------------------------------+
* 
*   *ON,DINIT,(INPUT LU OR NAMR),(ERROR LU) 
* 
*   SCHEDULE <DINIT> TO ACCEPT RESPONSES FROM A PERIPHERAL DEVICE, OR,
*   IN A DISC-BASED SYSTEM (WITH STRING PASSAGE), A FILE. 
* 
*     NOTE: IF SCHEDULING PARAMETERS ARE NOT SUPPLIED, LU #1 IS THE DEFAULT.
*           IF THE (INPUT LU) IS LINKED TO AN INTERACTIVE DEVICE, 
*             INTERROGATORY REMARKS WILL BE DISPLAYED ON THE DEVICE.
*           THE (ERROR LU), IF SPECIFIED, MUST BE LINKED TO AN
*             INTERACTIVE DEVICE. 
* 
*   *ON,DINIT,FI,LE,NM [,SECURITY CODE [,CARTRIDGE NUMBER] ]
* 
*   SCHEDULE <DINIT> TO ACCEPT RESPONSES FROM A FILE <FILENM> IN RTE-M. 
* 
*     NOTE: ANY ERRORS WILL BE REPORTED ON LU #1; <DINIT> WILL THEN ABORT.
* 
*   CALL EXEC(10,NAME,-1,ICLAS,IRELN) 
* 
*   USE A START-UP PROGRAM TO SCHEDULE <DINIT> WITH RESPONSES PASSED
*   IN I/O CLASS <ICLAS> AND LENGTH <IRELN>. (THIS MODE IS INDICATED
*   BY A NEGATIVE FIRST PARAMETER.) THIS WORKS FOR RTE-M AND -L ONLY. 
* 
*     NOTE: ANY LINE IN THE INPUT FILE WHICH BEGINS WITH AN 
*     ASTERISK (*) IS TREATED AS A COMMENT. 
* 
* +--------------------------------------------------------------+
* |INITIALIZATION QUERIES AND VALID RESPONSES (IN NORMAL ORDER): |
* +--------------------------------------------------------------+
* 
*           NOTE: CONTROL FILE RESPONSES CONSIST OF 1 RECORD / RESPONSE.
*           /A : ABORT <DINIT> IS A VALID RESPONSE TO ALL QUERIES.
* 
*   /DINIT: SYSTEMS CONNECTED TO THIS NODE
*   /DINIT: HP 1000? <YES OR NO>
*   /DINIT: HP 3000? <YES OR NO>
* 
*   /DINIT: NO. OF ACTIVE TRANSACTIONS? <1-100 (/D =DEFAULT OF 20)
*           NOTE: EACH TRANSACTION USES 5 WORDS OF SAM.>
* 
*   /DINIT: HOW MANY NODES REQUIRE MSG ACCOUNTING? <0 TO # NODES, 
*           ANSWER TO THIS QUESTION PROVIDES TABLE SPACE FOR MESSAGE
*           ACCOUNTING.  ANSWER 0 IF NONE DESIRED >.
* 
*                        ---  NOTE ---
*           THE FOLLOWING QUESTIONS ARE ASKED ONLY IF A HP3000
*           IS CONNECTED. 
* 
*   /DINIT: MAX NO. OF CONCURRENT HP3000 USERS? <1-10 (/D=DEFAULT OF 4) 
*           NOTE: EACH CONCURRENT USER REQUIRES 14 WORDS OF SAM > 
* 
*   /DINIT: LU OF HP3000?  <ENTER AN LU CONNECTED TO DVG 61, 66, OR 67> 
* 
*   /DINIT: LOCAL ID SEQUENCE? <15 CHAR MAX: /E IF NONE.
*           NOTE: ASKED ONLY FOR MODEM LINK > 
* 
*   /DINIT: REMOTE ID SEQUENCE? <15 CHAR MAX: /E IF NONE
*           NOTE: ASKED ONLY FOR MODEM LINK >.
* 
*              ---    END HP3000 OPTION   --- 
* 
* 
*   /DINIT: LOCAL CPU #? < RANGE: 0 TO 32767, 
*                        DEFINES LOCAL NODE #>
* 
*   /DINIT: NUMBER OF NODES? <NN (NO. OF NODES) > 
* 
*   /DINIT: NUMBER OF RE-ROUTING LINKS? < 0-32767,  THIS DEFINES
*           THE SIZE OF RE-ROUTING TABLES.  THIS QUESTION IS ASKED
*           ONLY IF RE-ROUTING IS GENERATED INTO THE NODE.
* 
*   /DINIT: CPU#[,LU][,TIMEOUT][,UPGRADE LEVEL][,N][,MA][,MA TIMEOUT]?
* 
*           <CPU# : 0 TO 32767 [NODAL ADDRESS]
*           <LU   : IF THIS IS A RE-ROUTING LINK ENTER ZERO. OTHERWISE
*                   ENTER A VALID LINK LU IN THE RANGE 1-255 >
*           <TIMEOUT : 0 TO 255 [MASTER T/O VALUE] >
*           <UPGRADE LEVEL : INDICATES UPGRADE LEVEL OF THE SPECIFIED 
*                   NODE. IF NOT SPECIFIED, THIS DEFAULTS TO 1. 
*                   FOR 91740 PRODUCT : UPGRADE LEVEL = 0 
*                   FOR 91750 PRODUCT : UPGRADE LEVEL = 1 > 
*           <"N"  : INDICATES THIS IS A NEIGHBOR (IE., ONE HOP AWAY)
*                   NODE.  THIS IS REQUIRED IF NEGATIVE LU ADDRESSING 
*                   IS GOING TO BE USED.
*           <"MA" : INDICATES THAT MA IS REQUIRED FOR THIS NODE.
*                   THIS CANNOT BE THE LOCAL NODE. >
*           <MA TIMEOUT : THIS IS THE MA TIMEOUT VALUE. THIS VALUE
*                   TIMES THE RETRY VALUE CANNOT EXCEED THE MASTER
*                   TIMEOUT VALUE.
* 
*           NOTE: THE ABOVE QUESTION IS REPEATED ONCE PER NUMBER OF 
*           NODES IN THE NETWORK KNOWN BY THIS LOCAL NODE.
* 
*    /DINIT: ENABLE LU? <LU>[,COST] 
* 
*            < ANY VALID LINK LU (IE., DEVICE TYPE 65 OR 66) IN THE 
*              RANGE 1-255. NOTE: THE FIRST N LU'S CORRESPONDS TO 
*              THE NUMBER OF RE-ROUTING LINKS ANSWER ABOVE. THAT IS 
*              IF THERE ARE 2 RE-ROUTING LINKS THEN ONLY THE FIRST
*              2 LU'S WILL BE CONSIDERED RE-ROUTEABLE. THIS QUESTION IS 
*              REPEATED UNTIL THE USER ENTERS "/E".>
* 
*               ---   END OF HP1000 OPTION  --- 
* 
* 
*   /DINIT: MONITOR NAME? <AAAAA (MONITOR NAME)  /D =SCHEDULE ALL > 
*                         </E TERMINATES INPUT--NOT USED FOR /D MODE >
* 
*   /DINIT: INPUT # OF FILES: <1 TO 255 (TOTAL FILES OPEN TO ALL NODES)>
*           < NOTE: ASKED ONLY FOR /D OPTION, OR WHEN <RFAM> SPECIFIED> 
* 
*   /DINIT: NETWORK USER SECURITY CODE? <AA (ANY TWO ASCII CHARACTERS THAT
*           DO NOT REPRESENT A NUMERIC VALUE, OR TWO NUMERICS FOLLOWED BY 
*           ANY ALPHABETIC OR SPECIAL CHARACTER, SUCH AS . OR ')> 
*           THIS SECURITY CODE MUST BE KNOWN TO ALL USERS OF 'REMAT', AS IT 
*           IS REQUIRED TO USE THE "SWITCH" COMMAND.
* 
*   /DINIT: NETWORK MANAGEMENT SECURITY CODE? (ENTER ASCII AS FOR ABOVE 
*                                                SECURITY CODE) 
*           THIS CODE IS REQUIRED FOR THE FOLLOWING:
*           1) NODE QUIESCENCE
*           2) QUIESCENT NODE RE-START
*           3) TIMING MODIFICATION
*           4) SHUTDOWN (IF OPTION PRESENT) 
*           5) CHANGING NRV 
*           IT IS NOT NECESSARY FOR THIS CODE TO BE KNOWN BY ANYONE 
*           EXCEPT THE NETWORK MANAGER. 
*           DO NOT FORGET THE CODES YOU USE, AS THEY CANNOT BE OBTAINED AGAIN!
* 
* 
*           FOLLOWING INITIALIZATION, THE PROGRAM TERMINATES. 
* 
*           IF RUN AGAIN, THE NON-SHUTDOWN VERSION WILL PRINT THE MESSAGE:
* 
*    "NODE ALREADY INITIALIZED" 
* 
*           THAT IS, THE NON-SHUTDOWN VERSION IS USEFUL ONLY FOR
*           INITIALIZING THE NODE.
* 
*           THE SHUTDOWN VERSION WILL PRINT:
* 
*     "SHUTDOWN?" 
* 
*           SHUTDOWN WILL PROCEED ONLY IF THE USER RESPONDS WITH "YES". 
* 
      SKP 
* +--------------------------------------------------------------+
* |SCHEDULING FOR SECONDARY MODE OF OPERATION:                   |
* +--------------------------------------------------------------+
* 
*               (INPUT LU# OR FILE),(ERROR LU#)  <DEFAULT = LU#1 FOR BOTH>
*              /
*   *ON,DINIT, : -1,CLASS #,RECORD LENGTH  <USUALLY PROGRAMATIC 
*              \                                 SCHEDULE VIA EXEC> 
*               FI,LE,NM [,SECURITY CODE [,CARTRIDGE NUMBER] ] <ERROR LU=1> 
* 
*    IN SECONDARY MODE, SCHEDULING <DINIT> WITH AN INTERACTIVE TERMINAL 
*      AS THE (INPUT LU#) DEVICE, OR UNDER THE CONTROL OF A COMMAND FILE, 
*      WILL ALLOW THE USER TO SELECT SEVERAL POSSIBLE OPERATIONS. 
* 
* +-------------------------------------------------------------------+ 
* |SECONDARY MODE QUERIES AND VALID RESPONSES:                        | 
* +-------------------------------------------------------------------+ 
* 
* 
*    ----------- TO SHUTDOWN DS ACTIVITY & RELEASE RESOURCES ---
* 
*   /DINIT: SHUTDOWN? YES 
*   /DINIT: SYSTEM SHUTDOWN 
*   /DINIT: # ACTIVE TCBS: NNNNN
*   /DINIT: # ACTIVE REMOTE SESSIONS: NNNNN 
*   /DINIT: NETWORK MANAGEMENT SECURITY CODE? 
*      THE NETWORK MANAGEMENT SECURITY CODE MUST BE ENTERED CORRECTLY,
*      OR 'DINIT' WILL ABORT.  IF A NON-ASCII CODE IS ENTERED, THE
*      QUESTION WILL BE REPEATED. 
*   END DINIT   (TERMINATION MESSAGE) 
* 
*     "SHUTDOWN" MAY BE INVOKED WHENEVER DINIT IS SCHEDULED IN THE
*     SECONDARY MODE.  WHEN SHUTDOWN IS COMPLETE, ALL RESOURCES OF
*     ANY KIND WHICH WERE ALLOCATED TO NETWORK-RELATED ACTIVITY 
*     DURING THE PREVIOUS INITIALIZATION ARE RETURNED TO RTE. 
*     THIS INCLUDES ALL CLASS NUMBERS, CLASS BUFFERS, RESOURCE NUMBERS, 
*     NETWORK-RELATED PROGRAMS (GRPM,RTRY,QCLM,UPLIN,QUEX,QUEZ, 
*     RPCNV,RQCNV,QUEUE,ETC.) AND ALL ALLOCATED SAM ARE RETURNED TO RTE.
* 
*              THIS MEANS ALL SYSTEM RESOURCES
* 
*     ALL COMMUNICATION LOGICAL UNITS 
*     DEFINED IN THE NRV ARE CLEARED: THEY WILL NOT RESPOND TO INCOMING 
*     MESSAGES.  ALL SLAVE MONITORS ARE ABORTED AND THEIR CLASS NUMBERS 
*     AND ANY BUFFERS OUTSTANDING ARE CLEARED (NOTE: ALL FILES CURRENTLY
*     OPEN TO 'RFAM' WILL BE LOST.  FILES WHICH HAVE BEEN WRITTEN ON WILL 
*     BE CORRUPTED).   ALL MASTER PROGRAMS WAITING
*     FOR REPLIES ARE GIVEN A MASTER TIME-OUT ERROR.  IF THEY REPEAT THEIR
*     REQUEST, THEY WILL RECEIVE A DS00 ERROR.
* 
*     THEREFORE,  USE CARE IN DETERMINING WHEN TO RE-INITIALIZE.
* 
*     THE NEXT TIME DINIT IS SCHEDULED, IT WILL REQUEST INITIALIZATION. 
* 
*     THE USER SHOULD ALSO BE AWARE THAT WHENEVER DS/1000 IS
*     INITIALIZED, A BLOCK OF SAM IS ALLOCATED SEMI-PERMANENTLY FOR THE 
*     DS-RELATED TABLE AREAS (TCBS, NRV, ETC.).  IT IS NOT RETURNED TO
*     RTE UNTIL DS IS SHUTDOWN OR THE SYSTEM IS RE-BOOTED.  INITIALIZING
*     DS WHILE OTHER PROGRAMS HAVE SAM: BLOCKS ALLOCATED WILL FRAGMENT SAM: 
*     THAT IS, IT MAY DIVIDE THE "LARGEST POSSIBLE SAM BLOCK" (THE
*     SIZE OF WHICH RTE DETERMINES AT BOOT-UP) INTO TWO PORTIONS.  IT WILL
*     THEN NOT BE POSSIBLE FOR A PROGRAM TO OBTAIN SUCH A LARGE BLOCK,
*     ALTHOUGH RTE WON'T KNOW THIS, WHICH MAY CAUSE A "DEADLOCK" CONDITION: 
*     THE PROGRAM WILL BE WAITING FOR A BLOCK WHICH CAN NEVER BE GRANTED. 
*     IT WILL BE PLACED INTO UNAVAILABLE MEMORY SUSPENSION DURING THIS
*     TIME, WHICH WILL HAVE THE SIDE EFFECT OF PREVENTING ANY 
*     OTHER PROGRAMS OF LOWER PRIORITY FROM GAINING ANY SAM AT ALL, 
*     EVEN SMALL BLOCKS WHICH COULD BE GRANTED (THIS IS A POLICY ENFORCED 
*     BY RTE WHOSE PURPOSE IS TO ASSURE THAT HIGH-PRIORITY PROGRAMS 
*     ARE NOT LOCKED OUT BECAUSE A SERIES OF SMALL-BLOCK SAM ALLOCATIONS
*     BY LOW-PRIORITY PROGRAMS PREVENTS A LARGE BLOCK FROM EVER BECOMING
*     FREE).  THIS IN TURN MAY FORCE MORE PROGRAMS INTO UNAVAILABLE 
*     MEMORY SUSPENSION THAN ACTUALLY BELONG THERE. 
* 
*     THIS LEADS TO THE CONCLUSION THAT IT MAY BE HAZARDOUS (IN TERMS 
*     OF AVOIDING DEADLOCKS AND MAXIMIZING OVERALL THRUPUT) TO
*     FREQUENTLY RE-INITIALIZE THE DS SYSTEM.  IT ALSO FOLLOWS THAT IT
*     SHOULD BE INITIALIZED ON BOOT-UP.  HOWEVER, THE USER WHO NEEDS TO 
*     SHUT THE SYSTEM DOWN OCCASIONALLY, AND THEN START IT UP AGAIN 
*     AND WHO CANNOT AFFORD TO SHUT THE SYSTEM DOWN TO RE-BOOT, SHOULD
*     TRY TO ARRANGE FOR INITIALIZATION TO OCCUR AT TIMES WHEN THE
*     OTHER DEMANDS UPON SAM ARE VERY SMALL OR NON-EXISTENT.
* 
* 
*     NOTE 1: THE NUMBER OF ACTIVE TCBS AND # OF ACTIVE HP 3000 SESSIONS
*     ARE PRINTED IN ORDER TO GIVE SOME INDICATION OF THE RELATIVE
*     DISTRIBUTED-SYSTEMS REMOTE ACTIVITY.  IF THERE EXIST EITHER ACTIVE
*     TCBS OR ACTIVE HP 3000 SESSIONS, THEN SHUTTING DOWN WILL PROBABLY 
*     INTERFERE WITH SOME USER OF THE SYSTEM (THAT IS, TERMINATE ALL
*     HIS PROCESSES ABNORMALLY, PERHAPS CAUSING OPEN FILES TO BE CORRUPTED
*     OR, IN EXTREME CASES, PERHAPS DESTROYING A REMOTE DATA BASE). 
*     IT IS STRONGLY RECOMMENDED THAT THE USER FIRST BROADCAST HIS
*     INTENTION TO SHUT THE SYSTEM DOWN TO ALL REMOTE USERS, GIVING 
*     THEM TIME TO CLOSE THEIR FILES AND LOG OFF BEFORE DOING SO. 
* 
*     IF THE SECURITY CODE ENTERED IS NON-NUMERIC, OR DOES NOT MATCH
*     THE ORIGINAL SET-UP SECURITY CODE, SHUTDOWN WILL NOT OCCUR. 
*     IF YOU HAVE ASKED FOR SHUTDOWN, BUT DECIDE YOU DON'T WANT TO AFTER
*     SEEING THAT THE SYSTEM IS BEING USED, ENTER A ZERO FOR THE SECURITY 
*     CODE (OR ANY NUMERIC, OR ANY INCORRECT SECURITY CODE).
* 
*     NOTE 2: ONCE SHUTDOWN HAS BEEN COMPLETED, THE NEXT TIME DINIT 
*     IS SCHEDULED IT WILL ENTER THE INITIALIZATION MODE. 
      SKP 
* 
*  ERROR MESSAGES--INTERPRETATION AND APPROPRIATE ACTION: 
*  -----------------------------------------------------
* 
*      [ ALL MESSAGES ARE PRECEDED BY "/DINIT:"]
      SPC 1 
*   CLASS I/O ERROR  - A REQUIRED CLASS NUMBER CANNOT BE ALLOCATED. 
*                      <DINIT> IS ABORTED. THIS ERROR MAY REQUIRE 
*                      RE-GENERATION WITH A LARGER ALLOTMENT OF CLASS NO'S. 
* 
* 
*   END DINIT        - NORMAL COMPLETION MESSAGE. THE TEN CHARACTERS
*                      COMPRISING THE MESSAGE ARE ALSO RETURNED IN THE 5-WORD 
*                      TEMPORARY STORAGE AREA OF A SCHEDULER'S I.D. SEGMENT.
*                      THEY MAY BE RECOVERED THROUGH THE USE OF <RMPAR>.
*                      IF <DINIT> HAS BEEN ABORTED, THE FIVE WORDS OF 
*                      RETURNED-DATA CONSIST OF: 100000B,ER, L,ST,EN
* 
*   ERROR: MON?: AAAAA
*                    - THE SPECIFIED MONITOR <AAAAA> IS NOT IN THE SYSTEM.
*                      ABORT <DINIT>, USING /A COMMAND, AND THEN LOAD 
*                      THE MONITOR INTO THE SYSTEM. RE-START <DINIT>. 
* 
*   ERROR: STAT: AAAAA
*                    - THE MONITOR'S STATUS IS NOT 'DORMANT', AND 
*                      THEREFORE IT CANNOT BE SCHEDULED.
*                      ABORT <DINIT>, USING /A COMMAND, AND THEN USE
*                      RTE OPERATOR COMMANDS TO CHANGE THE STATUS.
* 
*   FILE ERROR       - IMPROPER RESPONSE TO "INPUT # OF FILES". RETRY.
* 
*   INVALID NAME!    - MONITOR NAME IS NOT RECOGNIZED BY <DINIT>. RETRY.
* 
*   INVALID RESPONSE! - OPERATOR ENTRY ERROR. RETRY.
*                       (NO RETRY ALLOWED FOR QUIESCENT OR RE-START MODE) 
* 
*   DINIT ABORTED     -IF INITIALIZATION WAS IN PROGRESS, THEN ALL ALLOCATED
*                      RESOURCES HAVE BEEN RETURNED TO RTE. 
* 
*   NODE SPEC. ERROR  -IMPROPER NODAL REFERENCE VALUE. <DINIT> ABORTED! 
*                      CORRECT INITIALIZATION ANSWERS AND RESTART <DINIT>.
* 
*   LU ERROR           IMPROPER LU# SPECIFIED, OR LU# NOT LINKED TO 
*                      COMMUNICATION LINK DRIVER.  RETRY. 
* 
*   THIS LU ALREADY HAS A NEIGHBOR! 
*                    - THE NEIGHBOR BIT WAS SET FOR TWO DIFFERENT NODES 
*                      USING THE SAME LU.  EITHER ABORT DINIT OR INPUT
*                      THE LINE AGAIN CORRENTLY.
* 
*   INVALID TIMEOUT!   THE TIMEOUT VALUE SPECIFIED WAS NOT IN THE RANGE 
*                      0-1275.  EITHER ABORT DINIT OR INPUT THE LINE
*                      AGAIN CORRECTLY. 
* 
*   INVALID UPGRADE LEVEL!
*                    - THE UPGRADE LEVEL IS NOT IN THE RANGE 0-15. EITHER 
*                      ABORT DINIT OR INPUT THE LINE AGAIN CORRECTLY. 
* 
*   NO SYSTEM MEMORY! - INSUFFICIENT SYSTEM AVAILABLE MEMORY FOR USE BY 
*                      THE NETWORK. SYSTEM CANNOT BE INITIALIZED. 
*                      <DINIT> IS ABORTED. RE-GENERATION OF RTE MAY 
*                      BE REQUIRED. 
* 
*   READ ERROR       - END-OF-FILE OR FMGR ERROR HAS BEEN DETECTED
*                      ON THE INPUT DEVICE/FILE. THE QUESTION IS REPEATED 
*                      ON THE (ERROR LU) DEVICE. THE USER MAY SUPPLY THE
*                      REQUIRED RESPONSE FROM THIS DEVICE.
* 
*   RN ERROR         - A REQUIRED RESOURCE NUMBER CANNOT BE ALLOCATED;
*                      <DINIT> IS ABORTED. RE-GENERATION, WITH A LARGER 
*                      ALLOTMENT OF RESOURCE NUMBERS, MAY BE REQUIRED.
* 
*   TR FILE ERROR    - THE FILE MANAGER CANNOT PROCESS THE FILE 
*                      WHICH WAS SPECIFIED IN THE SCHEDULING
*                      PARAMETERS. CORRECT THE FILE PROBLEM,
*                      AND RE-SCHEDULE <DINIT>. 
* 
*   WARNING XXXXX IS A REQUIRED DS/1000 PROCESSOR!
*                    - DS/1000 WILL NOT RUN CORRECTLY UNTIL THIS
*                      PROGRAM IS LOADED.  IF THE PROGRAM IS 'UPLIN', 
*                      DINIT WILL ABORT.  IF NOT, DINIT WILL CONTINUE,
*                      BUT THE PERFORMANCE IS UNPREDICTABLE UNTIL THIS
*                      MODULE IS LOADED.  'UPLIN' WILL SCHEDULE THE 
*                      MODULE WHEN IT IS LOADED AUTOMATICALLY.
* 
*   NODE ALREADY INITIALIZED
*                    - (NON-SHUTDOWN VERSION ONLY).  ONCE DS/1000 IS
*                      INITIALIZED THERE IS NOTHING MORE FOR 'DINIT' TO 
*                      DO.
* 
*   ANSWER YES OR NO   - THE QUESTION REQUIRES A "YES" OR "NO" ANSWER 
      SKP 
* GLBLK-START 
* 
******************************************************************
*                                                                *
*     G L O B A L   B L O C K               REV XXXX 790531      *
*                                                                *
*     GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY:      *
*                                                                *
*         REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST        *
*         GET,   #SLAV, RQCNV, RPCNV, GRPM,  LSTEN, PTOPM        *
*         EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3        *
*                                                                *
******************************************************************
* 
***!!!!! THE FIRST 7 WORDS (#STR THRU #ENO) MUST BE FIXED !!!!!***
#STR  EQU 0         STREAM WORD.
#SEQ  EQU #STR+1    SEQUENCE NUMBER.
#SRC  EQU #SEQ+1    SOURCE NODE #.
#DST  EQU #SRC+1    DEST. NODE #. 
#EC1  EQU #DST+1    REPLY ECOD1.
#EC2  EQU #EC1+1    REPLY ECOD2.
#ENO  EQU #EC2+1    NUMBER OF NODE REPORTING ERROR. 
* 
#ECQ  EQU #ENO+1    ERROR CODE QUALIFIER (BITS 4 TO 7)
#LVL  EQU #ECQ      MESSAGE FORMAT LEVEL (BITS 0 TO 3)
#MAS  EQU #LVL+1    MA "SEND" SEQ. #
#MAR  EQU #MAS+1    MA "RECV" SEQ. #
#MAC  EQU #MAR+1    MA "CANCEL" FLAGS 
#HCT  EQU #MAC+1    HOP COUNT 
#SID  EQU #HCT+1    SESSION ID WORD 
* 
#EHD  EQU #SID      LAST ITEM OF HEADER 
#MHD  EQU #EHD+1    MINIMUM HEADER SIZE 
#REQ  EQU #MHD      START OF REQUEST SPECIFIC AREA
#REP  EQU #MHD      START OF REPLY SPECIFIC AREA
* 
#MXR  EQU #MHD+24   <<< MAXIMUM DS REQ/REPLY BUFFER SIZE >>>
#LSZ  EQU 2         <<< SIZE OF LOCAL APPENDAGE AREA >>>
* 
******************************************************************
* 
* GLBLK-END 
      SKP 
* PPBLK-START 
* 
******************************************************************
*                                                                *
*      P T O P   B L O C K                 REV XXXX 790420       *
*                                                                *
*      OFFSETS INTO DS/1000 PTOP MESSAGE BUFFERS, USED BY:       *
*                                                                *
*   POPEN, PTOPM, GET/ACEPT/REJCT, RQCNV, RPCNV, LSTEN, REMAT    *
*                                                                *
******************************************************************
* 
* OFFSETS INTO PTOP REQUEST AND REPLY BUFFERS.
* 
#FCD  EQU #REP      FUNCTION CODE.
#PCB  EQU #FCD+1    PCB AREA (3 WORDS). 
#TAG  EQU #PCB+3    TAG AREA (20 WORDS).
* 
* MAXIMUM SIZE OF PTOP REQUEST/REPLY BUFFER.
* 
#PLW  EQU #MXR      M A X I M U M   S I Z E    ! ! !
* 
* PPBLK-END 
      SKP 
PRAM  BSS 5 
      SPC 2 
*** THREE SCHEDULING PARAMETERS ARE SET UP BY #PKUP *** 
* 
*  PARAMETER MASK FOR #PKUP-- 
PMASK BYT 3,1       3 PARAMETERS, 1ST IS NAMR.
* 
***  NOTE: DO NOT CHANGE ORDER OF NEXT 4 LINES! 
NAME  BSS 4         RTE FILE NAMR PARAMETERS. 
ISEC  BSS 1 
ICR   BSS 5 
PRM2  NOP           ERROR LU/CLASS NUMBER (2ND PARAM) 
PRM3  NOP           RECORD LEN (3RD PARAM)
* 
DEFLU NOP           DEFAULT LU NUMBER.
      SPC 2 
*     DEFINE MASTER TCB FORMAT
* 
SEQ#  EQU 2         OFFSET TO SEQUENCE NUMBER 
MSCLS EQU 3         MASTER CLASS NUMBER 
      SKP 
DINIT EQU * 
      JSB #PKUP     GET THE 
       DEF *+4         PARAMETERS 
       DEF PMASK         FOR LOCAL USE. 
       DEF NAME 
       DEF DEFLU
* 
      LDA @ENMG     INITIALIZE ADDRESS OF RETURN PARAMS TO
      STA $RTRN         'FATHER' PROGRAM
      LDA $OPSY     GET THE SYSTEM SPECIFICATIONS.
      RAR,RAR       BIT#15: 1=DMS  BIT#0: 1=RTE, 0=RTE-M. 
      STA OPTYP     SAVE THE USEFUL SYSTEM SPECIFICATIONS.
      SSA,RSS 
      JMP NODMS     THIS IS A NON-DMS SYSTEM
* 
      DLD XSBAI     GET THE CROSS-STORE INSTRUCTION,
      DST STLNK      AND CONFIGURE THE TWO NULL-LINK
      DST STERM       INSTRUCTIONS FOR DMS OPERATION. 
      DST LOOP3 
      DLD XCBAI 
      DST NCHEK 
      DLD MWII
      DST STNOP 
      DLD MWFI      PICK UP MWF INSTRUC 
      DLD XLABI     PICK UP XLA B,I 
      DST DSNR8 
      IFZ 
      DST DSNR4 
      DST DSNR5 
      DST DSNR7 
      DST DSNR9 
      XIF 
* 
*                   PICK UP READ LU 
NODMS LDA NAME      GET THE INPUT LU--IF ANY. 
      LDB #FWAM     GET "ALREADY-INITIALIZED" INDICATOR.
      STB ONTWO     SAVE IN OPTION 1/2 FLAG WORD
      CLB           INITIALIZE EQUIPMENT TYPE CODE
      STB TYPEQ      TO INDICATE AN INTERACTIVE DEVICE. 
      STB CLFLG     CLEAR CLASS I/O FLAG. 
      STB LINE#     CLEAR INPUT LINE NUMBER COUNT 
* 
      LDB DEFLU     IF LU NOT SUPPLIED, USE DEFAULT.
      SZA           SUPPLIED? 
      LDB A         YES 
      AND BT137     LU OR FILE? 
      SZA 
      CLB           FILE...CLEAR FILE FLAG
      STB RLU       SAVE READ LU OR 0 (FILE). 
      SZB,RSS       LU OR FILE? 
      JMP LSTN1     FILE
* 
      JSB TTY?      CHECK 
      DEF RLU        READ LU. 
      SZB,RSS       TTY?
      STA RLU       SAVE AS INPUT LU
      STB TYPEQ     SAVE INPUT DEVICE EQUIPMENT CODE. 
* 
*  PICK UP ERROR LU 
LSTN1 LDA PRM2
      SZA           IS ERROR LU SUPPLIED? 
      JMP LSTN2     YES...SAVE IT.
      LDA RLU         NO. GET THE INPUT LU. 
      SZA,RSS       IS INPUT FROM FILE? 
      JMP SDFLU       YES...USE DEFAULT.
LSTN2 STA ERLU      SAVE ERROR LU 
* 
      JSB TTY?      CHECK 
      DEF ERLU       ERROR LU.
      SZB           INTERACTIVE?
SDFLU LDA DEFLU     NO...SET TO DEFAULT.
      STA ERLU
* 
      JSB CHCKN     SEE IF ERROR DEVICE IS A FILE 
      JMP LSTN3     NOT FILE
* 
      LDA NAME      WAS 1ST PARAMETER 
      SSA            NEGATIVE?
      JMP CLASS        YES--DO CLASS READ.
* 
      JSB OPEN      OPEN THE ANSWER FILE
       DEF *+7
       DEF INDCB
       DEF TEMP1     ERROR-RETURN LOC'N.
       DEF NAME      FILE NAME LOC'N. 
       DEF ZERO      EXCLUSIVE OPEN.
       DEF ISEC      SECURITY CODE (OR 0).
       DEF ICR       CARTRIDGE NO. (OR 0).
      SSA,RSS       ERRORS? 
      JMP LSTN3     OPEN WAS SUCCESSFUL.
* 
      JSB SYSER     SYSTEM ERROR
       DEF TRFM      "TR FILE ERROR"
* 
LSTN3 EQU * 
      LDB ONTWO     OPTION 1/2 FLAG 
      SZB           OPTION 1? 
      IFN 
      JMP NINZD     NO SECONDARY MODE FOR NON-SHUTDOWN
      XIF 
      IFZ 
      JMP OPTN2     NO...OPTION 2 
      XIF 
      JMP INITL     INITIALIZE THE NODE!
* 
      IFN 
NINZD JSB SYSER     NODE HAS ALREADY BEEN INITIALIZED 
       DEF .NINZ
      XIF 
* 
*  SET UP DCB FOR DUMMY READFS
DMDCB OCT 0,0       DIRECTORY ADDR
      DEC 2         FILE TYPE 
      DEC 1,1       TRACK,SECTOR OF FILE
      DEC 2         # OF SECTORS (128 WORDS TOTAL)
RECL  BSS 1         RECORD LEN (3RD PARAMETER)
D128  OCT 200       1 BLOCK IN DCB
      DEC 96        # SECTORS/TRACK 
OPNFL BSS 1         "OPEN" FLAG 
      DEC 1,1       CURRENT TRACK,SECTOR
      DEF INDCB+16  ADDRESS OF DCB DATA 
      OCT 100000    DATA IS IN DCB
      DEC 1         RECORD #
      DEC 0         EXTENT #
@DMDC DEF DMDCB 
@DCB  DEF INDCB 
* 
CLASS STA CLFLG     SET CLASS I/O FLAG < 0. 
      LDA $BMON     CHECK FOR NEW DCB FORMAT
      SZA           NEW?
      JMP ABORT     NEW FORMAT NOT ALLOWED. 
      LDA PRM3      GET RECORD
      STA RECL       LENGTH.
      JSB #GTOP     OBTAIN "OPEN" FLAG
      STA OPNFL     AND SAVE IT.
      JSB EXEC      MOVE
       DEF *+5        DCB 
       DEF CLS21       DATA 
       DEF PRM2         VIA 
       DEF INDCB+16      CLASS
       DEF D128          I/O. 
       JMP ABORT     [ERROR RETURN] 
      LDA @DMDC     MOVE
      LDB @DCB       DCB HEADER 
      JSB .MVW        INFORMATION.
       DEF D15
       NOP
      JMP LSTN3     CONTINUE WITH NORMAL PROCESSING.
      SKP 
*---------------------------------------------------------------+ 
*  INITIALIZATION CONTROL SECTION.                              | 
*---------------------------------------------------------------+ 
INITL JMP *+4       ENTER HERE FOR FIRST RUN
      JSB QUERY     INVALID RESPONSE
       DEF IVRES
      JMP *+3 
      JSB PRINT     TELL USER:
       DEF MSG1        "SYSTEMS CONNECTED TO THIS NODE:"
* 
      LDA ASC10     ASK USER TO SPECIFY 
      JSB CPUCK       "HP 1000?"
RMSA  NOP 
* 
      LDA ASC30     ASK USER TO SPECIFY 
      JSB CPUCK       "HP 3000?"
RM3K  NOP           3000 FLAG 
* 
      IOR RMSA      \ MAKE SURE 
      SZA,RSS        > AT LEAST ONE TYPE NODE 
      JMP INITL+1   /    WAS SPECIFIED
*---------------------------------------------------------------+ 
*     BEGIN TO GET SAM REQUIREMENTS                             | 
*---------------------------------------------------------------+ 
      JSB PRINT     ASK THE USER TO SPECIFY THE:
       DEF MSG0      " NO. OF ACTIVE TRANSACTIONS?" 
      JMP *+3 
TRERR JSB QUERY     IMPROPER REPLY TO # OF TRANSACTIONS 
       DEF IVRES
      LDA D20       INITIALIZE DEFAULT NO.
      STA PRAM        OF TRANSACTIONS =20.
      JSB READ      READ THE RESPONSE.
      CPA B1        IF THE RESPONSE WAS NUMERIC,
      JMP SVALU       GO TO PROCESS IT; ELSE, DETERMINE 
      CPB /D          IF DEFAULT VALUE IS TO BE USED. 
      JMP SDFLT     USE THE DEFAULT VALUE (20). 
      JMP TRERR     INVALID RESPONSE - ASK AGAIN
* 
SVALU STB PRAM      SAVE NO. OF TRANSACTIONS, TEMPORARILY.
      SSB,RSS       IF VALUE NEGATIVE--INFORM USER OF ERROR.
      CMB,INB,SZB,RSS NEGATE THE NUMBER & CHECK FOR ZERO. 
      JMP TRERR     * ERROR: NUMBER IS INVALID--TRY AGAIN * 
      ADB D100      ADD THE MAXIMUM ALLOWABLE NO. (100).
      SSB           IS THE SPECIFIED NO. ALLOWABLE? 
      JMP TRERR       NO. GO INFORM HIM OF THE ERROR! 
* 
SDFLT LDB PRAM      GET THE NUMBER OF TRANSACTIONS. 
      CMB,INB       FORM A LOOP COUNT 
      STB NTCBS     SAVE THE LOOP COUNT.
      LDA PRAM      GET THE NUMBER OF TRANSACTIONS. 
      MPY TCBSZ     CALCULATE: MEMORY SIZE(WORDS)  =
      SZB,RSS 
      SSA           CHECK SAM SIZE
      JMP TOBIG 
      STA SZTCB     SAVE SIZE OF TCB AREA 
      STA SAMSZ      START OUT W/ SAMSZ= SIZE OF TCB AREA 
* 
      CLA           FIND OUT HOW MUCH SAM TO ALLOCATE FOR 
      JSB #DISM       REMOTE SESSIONS 
      SSA 
      JMP TOBIG     CHECK SAM SIZE
      STA POOLZ     SAVE SIZE 
      ADA SAMSZ     ADD TO SIZE OF SAM REQ'D
      SSA           CHECK SAM SIZE
      JMP TOBIG 
      STA SAMSZ 
* 
      LDA RMSA         ANY RTE-TO-RTE 
      SZA                  NODES? 
      JSB #MA1      COMPUTE SIZE OF M.A. TABLES 
      SSA           CHECK SAM SIZE
      JMP TOBIG 
      STA MASIZ     SAVE SIZE OF M.A. TABLES
      ADA SAMSZ 
      SSA           CHECK SAM SIZE
      JMP TOBIG 
      STA SAMSZ 
* 
      LDA RM3K
      SZA,RSS 
      JMP #1K?      NO HP3000--SKIP BELOW CODE
*---------------------------------------------------------------+ 
*     GET 3K PARAMETERS                                         | 
*---------------------------------------------------------------+ 
      JSB PRINT     ASK USER TO SPECIFY 
       DEF MSG4        "MAX NO. CONCURRENT HP3000 USERS?" 
      JMP *+3 
#3K?  JSB QUERY     ASK USER AGAIN
       DEF IVRES
* 
      LDA B4        INITIALIZE DEFAULT NUMBER OF
      STA TST#+1       CONCURRENT USERS = 4 
      JSB READ      READ RESPONSE 
      CPA B1        RESULT NUMERIC? 
      JMP SVAL1       YES--PROCESS IT 
      CPB /D        DEFAULT WANTED? 
      JMP SDFL1       USE DEFAULT OF 4
      JMP #3K?
SVAL1 STB TST#+1    SAVE # OF USERS 
      SSB,RSS       IF NEGATIVE--ERROR
      CMB,INB,SZB,RSS NEGATE NUMBER & CHECK FOR ZERO
      JMP #3K?      REPORT ERROR
      ADB D10       ADD MAXIMUM NUMBER ALLOWED (10) 
      SSB           BEYOND RANGE? 
      JMP #3K?        YES--REPORT ERROR 
SDFL1 LDA TST#+1
      MPY D14 
      SZB,RSS 
      SSA           CHECK SAM SIZE
      JMP TOBIG 
      STA TSTSZ     SAVE # WORDS IN TST.
      ADA SAMSZ     ADD NO. WORDS FOR TRANSACTIONS
      SSA           CHECK SAM SIZE
      JMP TOBIG 
      STA SAMSZ     STORE TOTAL SAM NEEDED
*--   INITIALIZE THE 3000 LINK
      JSB PRINT     ASK THE USER
       DEF D3MS1       "LU OF HP3000?". 
D3010 JSB READ      GET THE RESPONSE. 
      CPA B1        IF THE RESPONSE WAS NUMERIC,
      JMP D3020       GO TO PROCESS IT; ELSE DETERMINE
D3ER1 JSB QUERY 
       DEF LUERM       "LU ERROR".
      JMP D3010       TRY AGAIN.
* 
D3020 STB LU3K#     SAVE HP3000 LU INTERNALLY FOR NOW.
      LDA B 
      IOR BIT15 
      STA LU1 
      CLB 
      STB LU2       SET SUB-FUNCTION = 0
* 
      JSB XLUEX     GO TO RTE 
       DEF *+4         TO GET THE 
       DEF SD13          EQUIPMENT TYPE-CODE
       DEF LU1             LINKED TO THE LU # 
       DEF PRINT             SUPPLIED BY THE USER.
       JMP D3ER1     INVALID LU.
* 
      CLA 
      STA D$XS5     D$XS5 := 0 (HARD-WIRED) 
      LDA PRINT     ISOLATE THE 
      ALF,ALF         EQUIPMENT 
      AND B77           TYPE-CODE.
      CPA B66              DVA66, OR
      JMP D3025 
      CPA B67              DVG67, 
      JMP #1K?
      JMP D3ER1             IT IS AN INVALID LU.
* 
D3025 LDA B2        SWTCH := 2  (MODEM) 
      STA D$XS5 
* 
* GET LOCAL AND REMOTE ID SEQUENCES.
* 
* 
      JSB PRINT     ASK THE USER
       DEF D3MS4      "LOCAL ID SEQUENCE?"
      JSB READ      GET THE RESPONSE. 
      LDA PRNTL     GET # BYTES THAT WERE INPUT.
      CPB /E        IF ID SEQ NOT WANTED, 
      CLA           LENGTH IS 0 
      LDB D$LID 
      JSB STRID     STORE LOCAL ID SEQ IN "RES".
* 
      JSB PRINT     ASK THE USER
       DEF D3MS5      "REMOTE ID SEQUENCE?" 
      JSB READ      GET THE RESPONSE. 
      LDA PRNTL     GET # BYTES THAT WERE INPUT.
      CPB /E        IF ID SEQ NOT WANTED, 
      CLA           LENGTH IS 0 
      LDB D$RID 
      INB           SKIP WORD FOR RETURN PARAM. 
      JSB STRID     STORE REMOTE ID SEQ IN "RES". 
* 
#1K?  LDA RMSA      IF THERE ARE NO HP 1000 LINKS,
      SZA,RSS          THEN SKIP
      JMP SGCO          FOLLOWING BLOCK.
* 
*     GET SIZE OF NRV ENTRIES 
* 
      JSB PRINT     ASK FOR NUMBER OF NODES 
       DEF NUMB?
      JMP *+3 
INIT1 JSB QUERY     NODE SPEC ERROR - ASK USER AGAIN
       DEF NOSZR
      JSB READ      GET THE ANSWER. 
      CPA B1        NUMERIC?
      RSS 
      JMP INIT1     NO, PRINT ERROR 
      SZB           ZERO? 
      SSB           OR NEGATIVE?
      JMP INIT1     YES--ERROR! 
      STB NRVSZ     SAVE # ENTRIES IN NRV 
      CMB,INB       SET MAX. HOP COUNT
      STB MHCT# 
      STB NCNT
* 
*     CALL RE-ROUTING ROUTINE HERE TO FIND OUT SIZE OF RE-ROUTING TABLE 
* 
*     (B) = - # OF NODES
      JSB #RR1
      SSA           CHECK SAM SIZE
      JMP TOBIG 
      STA RRSIZ     SAVE SIZE OF RE-ROUTING TABLE 
      ADA SAMSZ     ADD TO SIZE OF SAM REQ'D
      SSA 
      JMP TOBIG 
      STA SAMSZ 
* 
*     COMPUTE AMOUNT OF SAM REQUIRED: 
*     TCBS, PNLS, NRV, RSM, RR, MA TABLES (SOME OPTIONAL) 
      LDA NRVSZ     COMPUTE # WORDS NEEDED FOR NRV
      MPY NRVS. 
      SZB,RSS 
      SSA           CHECK SIZE OF SAM 
      JMP TOBIG 
      STA SZNRV 
      ADA SAMSZ 
      SSA 
      JMP TOBIG 
      STA SAMSZ 
* 
* 
      DLD CNODE     INITIALIZE RES NODAL ADDRESSES
      DST #CNOD 
* 
*---------------------------------------------------------------+ 
*    ALLOCATE CLASS AND RESOURCE NUMBERS, INITIALIZE TCB NULL   | 
*       LIST AND TRANSACTION STATUS TABLE AREA.                 | 
*                                                               | 
*   POINTER NAME:                  SAM AREA DIVIDED AS FOLLOWS: | 
*                                +--------------------+         | 
*     #FWAM------------------->  !  TCB               !         | 
*                                !   AREA             !         | 
*                                +--------------------+         | 
*     #TST-------------------->  !  TST AREA          !         | 
*                                +--------------------+         | 
*     #NRV-------------------->  !  NRV AREA          !         | 
*                                +--------------------+         | 
*     #MTBL------------------->  !  M.A. AREA         !         | 
*                                +--------------------+         | 
*                                ! RE-ROUTING TABLES: !         | 
*                                !                    !         | 
*     #LV--------------------->  ! LINK VECTOR TABLE  !         | 
*                                !                    !         | 
*     #CM--------------------->  ! "COST" MATRIX      !         | 
*                                +--------------------+         | 
*     #POOL------------------->  ! REMOTE SESSION     !         | 
*                                !   TABLES           !         | 
*                                +--------------------+         | 
*                                                               | 
*     SIZE OF ENTIRE AREA STORED IN #SAVM.                      | 
*---------------------------------------------------------------+ 
      SPC 2 
SGCO  EQU * 
      LDA SAMSZ         SET-UP SAM BLOCK
      STA TEMP      SAVE TOTAL WORDS REQUIRED 
      LDA DM3 
      STA RETRY     SET # OF RETRIES FOR "DELAY" ROUTINE
SREPT JSB #RSAX     GO TO THE 
       DEF *+4        SYSTEM RESOURCE-CONTROL ROUTINE,
       DEF ZERO        TO REQUEST SYSTEM AVAILABLE MEMORY,
       DEF TEMP         IN THE AMOUNT SPECIFIED BY THE USER.
       DEF LSECD
* 
      SSA,RSS       REQUEST GRANTED?
      JMP SETPS       YES. GO TO SET POINTERS 
      JSB DELAY       NO. IT'S NOT AVAILABLE NOW--WAIT. 
      JMP NOMER     * RETRIES EXHAUSTED: INFORM USER! 
      JMP SREPT     TRY AGAIN FOR MEMORY ALLOCATION.
* 
SETPS EQU * 
      JSB CLEAR     CLEAR OUT 'RES' AREA
      LDA #FWAM 
      ADA SZTCB       AFTER THE T.C.B.S 
      STA TST#
      ADA TSTSZ     THE N.R.V. AREA FOLLOWS IMMEDIATELY 
      STA #NRV          AFTER THE TST 
      STA NPNT
      ADA SZNRV     THE M.A. TABLE AREA FOLLOWS IMMEDIATELY 
      STA #MTBL        AFTER THE NRV
      ADA MASIZ     THE RE-ROUTING TABLES FOLLOW IMMEDIATELY
      STA #LV             AFTER THE M.A. TABLES 
      ADA RRSIZ     THE REMOTE SESSION TABLE FOLLOWS IMMEDIATELY
      STA #POOL         AFTER THE RR TABLES 
      CLA           IF THERE IS NO SESSION ANYWHERE 
      CPA POOLZ        IN THE NET, THEN ZERO
      STA #POOL           THE POOL POINTER
* 
      JSB RNSUB       GET A RESOURCE NUMBER 
       DEF TBRN.         FOR THE TABLE-ACCESS RN. 
      JSB RNSUB       GET A RESOURCE NUMBER 
       DEF QRN.          FOR THE SYSTEM-QUIESCENT RN. 
* 
      LDA RM3K
      SZA,RSS 
      JMP SGPP      NO HP3000--SKIP THIS CODE 
* 
      CCA           GET A 
      JSB CLSUB       CLASS NUMBER
       DEF QXCL.         FOR "QUEX" 
      JSB RNSUB     GET A RESOURCE NUMBER 
       DEF QZRN.         FOR "QUEZ" LISTEN MODE 
      JSB RNRQ      GLOBAL LOCK RN
       DEF *+4
       DEF GLOCK
       DEF QZRN#
       DEF TEMP1
      JSB RNSUB       GET A RESOURCE NUMBER 
       DEF CLRN.         FOR QUEX CLEANUP 
      CCA 
      JSB CLSUB       GET A CLASS NUMBER
       DEF RQCV.         FOR REQUEST CONVERTER
      CCA 
      JSB CLSUB     GET A CLASS NUMBER
       DEF RPCV.         FOR REPLY CONVERTER
* 
      LDA RMSA
      SZA,RSS 
      JMP NULNK     JUMP IF NO DS/1000
* 
SGPP  CLA           GET A 
      JSB CLSUB      CLASS NUMBER 
       DEF GRPM.       FOR THE GENERAL PRE-PROCESSOR MODULE.
      CLA           GET A 
      JSB CLSUB      CLASS NUMBER 
       DEF RTRY.       FOR THE WRITE RETRY MODULE 
      CLA           GET A 
      JSB CLSUB      CLASS NUMBER 
       DEF QCLM.       FOR THE ERROR LOG MONITOR. 
NULNK EQU * 
* 
*     <A> = # OF NODES IN NRV 
      LDA NRVSZ 
      JSB #MA2      SETUP MA VARIABLES
* 
      LDA NRVSZ     SET SIZE OF NRV 
      CMA,INA 
      STA #NCNT 
* 
*     GET DEFAULT SESSION USER NAME (IF NEEDED) 
* 
      CLA,INA 
      JSB #DISM 
* 
      LDA RMSA      ARE THERE 
      SZA,RSS         HP 1000 LINKS?
      JMP INRES       NO, SKIP THIS BLOCK 
* 
*     THIS BLOCK SETS UP THE ROUTE VECTORS
* 
      JSB PRINT     ASK FOR THE CPU # 
       DEF LOC? 
      JMP *+3 
LCPU? JSB QUERY     ASK USER AGAIN FOR CPU# 
       DEF NOSZR
      JSB READ      READ CPU NUMBER 
      CPA B1        NUMERIC?
      CLE,SSB       YES--NEGATIVE?
      JMP LCPU?     * IMPROPER RESPONSE!
      STB #NODE     SAVE CPU NUMBER IN RES
      JMP GETN0 
* 
TOBIG JSB SYSER     TOO MUCH SAM REQUESTED
       DEF MUCHO
NOMER JSB SYSER     SAM CANNOT BE ALLOCATED 
       DEF NOMEM
      SKP 
*---------------------------------------------------------------+ 
*     GET NRV INFORMATION FROM USER                             | 
*---------------------------------------------------------------+ 
GETN0 CLA 
      STA MAP+1     CLEAR OUT NEIGHBOR BIT MAP
      LDA MAP 
      LDB MAP 
      INB 
      JSB .MVW
       DEF D15
       NOP
      JMP GETN
* 
$CPU  JSB QUERY     NODE SPEC. ERROR
       DEF NOSZR
      JMP GETN+2
$DUP  JSB QUERY     MULTIPLE NEIGHBORS ON SAME LU 
       DEF MNAY 
      JMP GETN+2
$LU   JSB QUERY     INVALID LU! 
       DEF LUERM
      JMP GETN+2
$TO   JSB QUERY     INVALID TIMEOUT 
       DEF TOBAD
      JMP GETN+2
$LVL  JSB QUERY     INVALID UPGRADE LEVEL 
       DEF INLVL
      JMP GETN+2
* 
GETN  EQU * 
      JSB PRINT     ASK FOR NRV DATA: 
       DEF NODEF     "CPU#,LU,TIMEOUT,UPGRADE LEVEL,N,MA?"
      LDA #LEVL     DEFAULT: TIMEOUT=0, LEVEL=CURRENT 
      STA NRV2
      CLA           DEFAULT: NEIGHBOR=FALSE, LU=0 
      STA NRV3
      JSB READ      GET RESPONSE. 
      SZA,RSS       NULL ENTRY? 
      JMP $CPU      . YES, INVALID
      CPA B2        ASCII?
      JMP $CPU      . YES, BADO BADO ...
      STB NRV1      SAVE CPU NUMBER 
      SSB            CPU # NEGATIVE?
      JMP $CPU      * INVALID RESPONSE! 
      LDA NRVSZ     GET THE NUMBER OF NODES.
      ADA NCNT      SUBTRACT NUMBER NOT YET PROCESSED,
      SZA,RSS        IF NONE PROCESSED YET, 
      JMP STNOD       BYPASS DUPLICATE CPU# CHECK.
      JSB .CAX      INITIALIZE COUNTER =CPU#'S PROCESSED. 
      LDA #NRV      GET POINTER TO FIRST CPU#.
NCHEK NOP           [DMS XCB GOES HERE FOR RTE-III/IV]
      CPB A,I       IF THIS NODE IS A DUPLICATE,
      JMP $CPU       THEN YELL ABOUT IT!
      ADA NRVS.     ADVANCE POINTER TO NEXT CPU#. 
      JSB .DSX      ALL CPU#'S BEEN CHECKED?
      JMP NCHEK      NO. CONTINUE CHECKING. 
* 
STNOD EQU * 
      LDA PARSB+5   GET THE LU--IF ANY. 
      LDB PARSB+4   WAS LU
      SZB           DEFAULTED?
      STA NRV3        SAVE IN TEMPLATE. 
      LDB PARSB+8   GET TIMEOUT SPECIFICATION TYPE. 
      CPB B2        IF THE PARAMETER IS INVALID,
      JMP $TO        THEN SCREAM ABOUT IT!
      LDA PARSB+9   GET TIME-OUT SPECIFICATION
      SZB           DEFAULTED?
      JMP *+4 
      LDA NRV2
      ALF,ALF 
      AND B377
      CMA,INA,SZA,RSS  IF IT IS NULL, OR ZERO,
      JMP MSGFM        THEN IGNORE IT.
      SSA,RSS       T/O<0?
      JMP $TO       YES, ERROR
      LDB A 
      ADB D1275 
      SSB 
      JMP $TO 
      JSB CFSEC 
      ALF,ALF       POSITION TO HIGH HALF-WORD
* 
MSGFM EQU *         HERE TO MERGE UPGRADE LEVEL NUMBER
      STA TEMP
      LDB PARSB+12  IS THIS NUMERIC, OR 
      CPB B2           DEFAULTED? 
      JMP $LVL      NO, SCREAM ABOUT IT.
      LDA PARSB+13  GET UPGRADE LEVEL NUMBER
      SSA                 NEGATIVE? 
      JMP $LVL             YES, SCREAM ABOUT IT.
      SZB,RSS       DEFAULTED?
      LDA NRV2      YES 
      LDB A 
      ADB NMXLV      > MAX LEVEL
      SSB,RSS            ALLOWED? 
      JMP $LVL      . YES LEVEL ERROR 
      IOR TEMP      MERGE TIME-OUT & UPGRADE LEVEL NUMBER 
      STA NRV2
*---------------------------------------------------------------+ 
*     CHECK VALIDITY OF NRV                                     | 
*     NRV1 = CPU NODE NUMBER                                    | 
*     NRV2 = TIME-OUT/MSG FMT #                                 | 
*     NRV3 = NEIGHBOR/COMM-LINK LU                              | 
*                                                               | 
*     VALIDITY CHECKS: IF COMM-LINK LU # 0, THEN VERIFY THAT    | 
*       IT'S A BONAFIDE COMMUNICATION LINK DRIVER.              | 
*                                                               | 
*     ADDITIONAL PROCESSING:                                    | 
*       MULTIPLE NEIGHBORS ON THE SAME LU ARE FLAGGED AS        | 
*       ERRORS.                                                 | 
*                                                               | 
*       "NEIGHBOR BIT SET IN NRV3 IF NRV1 = LOCAL NODE #, AND   | 
*       LEVEL # FORCED TO LOCAL NODE'S LEVEL, AS TAKEN FROM     | 
*       #LEVL IN "RES".                                         | 
*                                                               | 
*       IF THE MESSAGE FORMAT LEVEL FOR THE NODE IS NOT THE     | 
*       SAME AS THE LOCAL NODE, THEN A FLAG IS SET WHICH WILL   | 
*       CAUSE THE MESSAGE CONVERTERS (INCNV, OTCNV) TO BE       | 
*       SCHEDULED LATER.                                        | 
*---------------------------------------------------------------+ 
* 
      LDB PARSB+17  GET "NEIGHBOR" INDICATOR, IF ANY
      LDA NRV3      LOAD LU WORD
      CPB "N        "NEIGHBOR" INDICATOR SET? 
      RSS           . YES, CHECK FOR MULTIPLE NEIGHBORS 
      JMP LINK?     . NO, CHECK FOR COMM LINK 
* 
      SZA,RSS       IGNORE CHECKING FOR LU=0
      JMP LINK? 
      JSB SMF       MAP LU INTO BIT MAP 
      STA SMF          AND SAVE BIT TEMPORARILY 
      AND B,I       TEST BIT
      SZA 
      JMP $DUP      BIT IS SET - BADO BADO
      IOR SMF       BIT IS CLEAR OK, SET BIT IN MAP 
      STA B,I 
      LDA NRV3
      IOR B400      SET NEIGHBOR BIT IN NRV 
      STA NRV3
* 
LINK? AND B377      CHECK THAT LU SPECIFIED 
      SZA,RSS          IS A BONA FIDE COMMUNICATION 
      JMP LUOK             LU 
      JSB LUTST 
      JMP $LU       ILLEGAL LU--TAKE ERROR EXIT 
      JMP $LU       IT'S NOT A GOOD LU! SCREAM ABOUT IT!
* 
LUOK  LDB NRV1      IF THIS ENTRY IS FOR THE LOCAL NODE, THEN 
      LDA NRV3
      CPB #NODE        SET THE "NEIGHBOR" BIT.
      IOR B400
      STA NRV3
      LDA NRV2
      CPB #NODE       LOCAL NODE ENTRY? 
      LDA #LEVL        YES, FORCE LOCAL NODE UPGRADE LEVEL. 
      STA NRV2
      XOR #LEVL        IF MESSAGE FORMAT NOT SAME AS LOCAL NODE,
      AND B17            THEN SET FLAG TO CAUSE MESSAGE 
      SZA                  CONVERTERS TO BE 
      ISZ MSCFL              SCHEDULED. 
* 
*--   CHECK/SETUP MESSAGE ACCOUNTING FOR THIS NODE
      LDA MSTO#     <A> = MASTER TIMEOUT
      JSB #MA3      CHECK IF MA WANTED FOR THIS NODE
* 
*--   SETUP REROUTING LINK VECTOR 
      LDA NRV1      <A> = NODE #
      LDB PARSB+4   <B> = PARSE BUFFER TYPE CODE
      JSB #RR2
      SPC 2 
*                   HERE TO MOVE NRV TEMPLATE TO NEXT NRV ENTRY 
      JSB $LIBR     LOWER SYSTEM DEFENSES 
       NOP
      LDA @NRV1     LOAD SOURCE ADDRESS 
      LDB NPNT      LOAD DESTINATION ADDRESS
      JSB .LDX      LOAD # WORDS TO MOVE
       DEF NRVS.
STNOP JSB .MVW      [MWI IF IN DMS CPU] 
       DEF NRVS.
       NOP
      JSB $LIBX     RESTORE SYSTEM PROTECTIONS
       DEF *+1
       DEF *+1
* 
      LDA NPNT      UPDATE
      ADA NRVS.       POINTER 
      STA NPNT
* 
      ISZ NCNT      HAVE ALL NODES BEEN PROCESSED YET?
      JMP GETN      NO, CONTINUE
      SPC 2 
      LDA MSCFL     ARE THERE ALIEN-FORMAT NODES
      SZA,RSS         IN THE NETWORK? 
      JMP INRES     NO. 
* 
*     ASSIGN CLASS NUMBERS FOR MESSAGE CONVERTERS 
* 
      CCA           ASSIGN A
      JSB CLSUB        CLASS NUMBER FOR 
       DEF INCV.          "INCNV" 
      CCA           ASSIGN A
      JSB CLSUB       CLASS NUMBER FOR
       DEF OTCV.         "OTCNV"
      JMP INRES 
      SPC 1 
* 
* SMF-  MAPS LU <A> INTO ADDRESS <B> AND BIT POSITION <A> 
* 
SMF   NOP           STORAGE MAPPING FUNCTION
      CLB 
      DIV D16 
      STA SMF1
      LDA B 
      IOR SMF2      FORMAT SHIFT INSTRUCTION
      STA *+2 
      CLA,INA 
      DEF *-*       (MODIFIED TO LSL XX)
      SZA,RSS 
      CLA,INA       2**0 = 1
      LDB SMF1
      ADB MAP       <B> --> MAP RECORD
      JMP SMF,I 
SMF1  BSS 1 
SMF2  LSL 16        SKELETON INSTRUCTION
MAP   DEF *+1 
      BSS 16        NEIGHBOR BIT MAP
* 
* 
* 
* 
* * * * DO NOT CHANGE ORDER OF NEXT TWO STATEMENTS * * * *
* 
CNODE OCT -1        <EXECW> CURRENT-USER NODE; -1=INACTIVE. 
      OCT -1        <APLDR> DOWN-LOAD NODE: INITIAL VALUE.
* 
NCNT  NOP           NODE LOOP COUNTER (-NO. OF NODES).
NPNT  NOP           LOCAL NRV TABLE POINTER.
* 
*     NRV ENTRY TEMPLATE.  DO NOT DISTURB ORDER!
* 
*     NOTE: NRV1 & NRV2 ARE USED IN THE "ABORT" ROUTINE TO
*     CLEAR "LISTEN" MODE IN THE DRIVER, AS A COUNTER & A POINTER,
*     RESPECTIVELY. 
NRV1  NOP           STORAGE FOR CPU NUMBER
NRV2  NOP           STORAGE FOR TIME-OUT/UPGRADE LEVEL #
NRV3  NOP           STORAGE FOR COMMUNICATION LINK LU 
@NRV1 DEF NRV1
* 
SAMSZ NOP           # WORDS IN SAM BLOCK
TSTSZ NOP           # WORDS IN TST
NRVSZ NOP           # WORDS IN NRV
*     MSCFL IS A FLAG, CONTAINING 0, OR > 0 IF ALIEN MESSAGE FORMAT 
*     NODES EXIST IN NETWORK.  THAT IS, IF MSCFL = 0 AT THE END OF THE NRV
*     SPECIFICATION ENTRIES (AT INITIALIZATION TIME), THEN THE MESSAGE
*     FORMAT CONVERTERS DO NOT NEED TO BE SCHEDULED.  OTHERWISE, THEY DO. 
MSCFL DEC 0 
      SKP 
*---------------------------------------------------------------+ 
*     ROUTINE TO INITIALIZE THE "RES" AREA                      | 
*---------------------------------------------------------------+ 
* 
INRES EQU * 
      LDA NTCBS     COUNT FOR NUMBER OF TCBS
      STA TEMP
      JSB $LIBR     GAIN ACCESS TO
       NOP             SYSTEM RESOURCES.
      LDA #FWAM     GET THE ADDRESS OF THE S.A.M. BLOCK,
      STA #NULL       AND INITIALIZE HEAD OF NULL LIST. 
      STA B         LINK
      JMP SLOPX 
* 
SLOOP ADB TCBSZ      THE
STLNK STB A,I         NULL   [CONTAINS XSB A,I: DMS]
      NOP              LIST  [NOP: RTE-II, DEF A,I: DMS]
      STB A             WITH
SLOPX ISZ TEMP           FIVE-
      JMP SLOOP           WORD
      CLB                  NULL 
STERM STB A,I               ENTRIES. [CONTAINS XSB A,I: DMS]
      NOP                        [NOP: RTE-II, DEF A,I: DMS]
* 
* 
      CPB RM3K      DS/3000 ENABLED?
      JMP INIT      NO, BYPASS THIS CODE
* 
      LDA TSTSZ 
      JSB .CAX      X-REG := # WORDS IN TST 
      LDA TST#      GET POINTER TO TST AREA 
* 
LOOP3 STB A,I       [XSB A,I FOR DMS] 
      NOP           STORE 
      INA            ZEROES 
      JSB .DSX        IN
      JMP LOOP3        TST
* 
*  INITIALIZE ALL GLOBAL RN'S, CLASS NUMBERS, AND COUNTERS IN 'RES'.
* 
INIT  LDA QCLM#     GET THE CLEANUP MONITOR'S CLASS NO. 
      CCE 
      ALR,ERA       REMOVE THE BUFFER SAVE BIT & SET NO WAIT BIT
      STA QCLM#     SAVE THE CLASS WORD.
* 
      LDA LSBFA     SOURCE = LOCAL BUFFER.
      LDB #SCLR     DESTN  = <RES> DATA AREA. 
      JSB .MVW      MOVE THE DATA TO <RES>. 
       DEF MVSIZ
       NOP
* 
      JSB $LIBX     RESTORE MEMORY PROTECTION 
       DEF *+1
       DEF *+1
* 
      LDA RMSA      ARE THERE HP 1000 LINKS?
      SZA,RSS 
      JMP MONIT     NO, SKIP NEXT BLOCK 
      JMP LUEN      ENABLE LU'S 
* 
* 
* 
*  DO NOT CHANGE ORDER OF ENTRIES (MATCHES ORDER IN <RES>)!!
*     THIS TABLE IS COPIED INTO AN AREA OF "RES" AT THE END OF
*     THE INITIALIZATION PHASE.  1ST LOCN ADDRESS IS CONTAINED
*     IN 'LSBFA', THE NUMBER OF WORDS TO MOVE IS GIVEN BY 
*     'MVSIZ'.
* 
LSBFA DEF TBRN#     LOCAL 'RES' DATA BUFFER ADDRESS.
TBRN# NOP           TABLE-ACCESS RESOURCE NUMBER. 
QRN#  NOP           SYSTEM-QUIESCENT RESOURCE NUMBER. 
GRPM# NOP           GENERAL PRE-PROCESSOR CLASS NUMBER. 
QCLM# NOP           QUEUE CLEAN-UP MONITOR'S CLASS NUMBER.
      NOP           ACTIVE TRANSACTION COUNTER. 
MSTO# ABS 256-9     MASTER-REQUEST TIMEOUT(LOWER BYTE -9).
      ABS 256-6     SLAVE-REQUEST TIMEOUT(LOWER BYTE -6). 
RTRY# NOP           WRITE-RETRY MODULE'S CLASS NUMBER.
      NOP           #MAST QUIESCENT WAIT INTERVAL.
      NOP           NODE SECURITY CODE. 
      OCT 6000      REMOTE-BUSY REJECT RETRY COUNT (-3).
INCV# NOP           INCOMING MSG CNVTR CLASS #
OTCV# NOP           OUTBOUND MSG CNVTR CLASS #
MHCT# NOP           MAXIMUM HOP COUNT 
MDCT# DEC -10       MAX.# TIMES A LINK CAN GO DOWN IN 5 MIN 
RPCV# NOP           HP3000 REPLY CONVERTER CLASS NO.
RQCV# NOP           HP3000 REQUEST CONVERTER CLASS NO.
LU3K# NOP           LU NUMBER OF HP3000 
QZRN# NOP           QUEZ RN 
CLRN# NOP           QUEX CLEAN-UP RESOURCE NUMBER 
QXCL# NOP           QUEX CLASS NO.
TST#  NOP           HP3000 TRANS. STATUS TBL. ADDR
      NOP           SIZE OF TST 
MVSIZ ABS *-TBRN#   NUMBER OF WORDS TO MOVE INTO 'RES' AREA.
* 
*     END OF FIXED-ORDER TABLE
* 
      SKP 
*---------------------------------------------------------------+ 
*     THIS BLOCK ENABLES THE HP 1000 LINKS.                     | 
*---------------------------------------------------------------+ 
* 
LUEN  EQU * 
      JSB PRINT 
       DEF UPLUM     " LINE LU?_" 
      JSB READ      READ A RECORD 
      CPA B1        WAS INPUT BINARY? 
      JMP SAVLU       YES. GO TO PROCESS THE LU.
      CPB /E        END OF LIST?
      JMP MONIT       YES. RETURN 
LUERR JSB QUERY 
       DEF LUERM     "LU ERROR" 
      JMP LUEN+2    TRY AGAIN 
* 
SAVLU STB NRV3      SAVE TEMPORARILY. 
      CPB #LU3K     HP3000 LU?
      JMP LUEN      . YES, IGNORE 3K LINES
*     GO VERIFY THAT LU IS LINKED TO A VALID COMMUNICATION DRIVER.
      JSB LUTST 
      NOP           ILLEGAL LU
      JMP LUERR     NOT A COMMUNICATION DRIVER--ERROR 
* 
      JSB LUSET     GO TO SET UP & ENABLE THE LU. 
      JMP LUERR     * RTE-DETECTED ERROR--TRY AGAIN! *
*     CALL RE-ROUTING ROUTINE TO SET THIS LU IN TABLE 
*       (PARSB CONTAINS PARSED RESPONSE TO LAST QUESTION) 
      JSB #RR3
      JMP LUEN      GO TO REQUEST ANOTHER LU NUMBER.
      SKP 
*---------------------------------------------------------------+ 
*     SCHEDULE REQUESTED SLAVE MONITORS                         | 
*---------------------------------------------------------------+ 
MONIT EQU * 
      JSB PRINT     "MONITOR?"
       DEF MONMS
      JSB READ      GET USER'S RESPONSE 
      CPB /E        DONE? 
      JMP GETSC     . YES 
      CPB /D        DEFAULT?
      JMP ALLMN     . YES SCHEDULE ALL REMAINING MONITORS 
* 
      LDA MNMON 
      STA MCTR      NUMBER OF MONITORS
      LDA @MON
      STA MPTR      PTR TO 1ST MONITOR SRT ENTRY
* 
*     LOOK FOR THE MONITOR REQUESTED
* 
MON1  EQU * 
      LDA @MNAM 
      LDB MPTR,I
      ADB D2        <B> --> NAME IN SRT 
      JSB .CMW
        DEF D3
       NOP
      JMP MON2      FOUND HIM!
      NOP 
      ISZ MPTR
      ISZ MCTR
      JMP MON1      TRY AGAIN...
* 
      JSB ERROR     "INVALID MONITOR NAME"
       DEF INVNM
      JMP MONIT 
* 
MON2  LDB MPTR,I    <B> --> SRT ENTRY 
      JSB PMON      PROCESS MONITOR 
      JMP MONIT 
      SPC 2 
MPTR  BSS 1 
MCTR  BSS 1 
@MNAM DEF PARSB+1 
      SPC 3 
*     PROCESS ALL MONITORS
* 
ALLMN EQU * 
      LDA MNMON 
      STA MCTR
      LDA @MON
      STA MPTR      <A> --> [.] --> 1ST MONITOR SRT ENTRY 
ALL1  LDB MPTR,I            <B> --> MONITOR SRT ENTRY 
      JSB PMON      PROCESS MONITOR 
      ISZ MPTR
      ISZ MCTR
      JMP ALL1
      JMP GETSC 
      SPC 3 
*     ROUTINE TO ASSIGN CLASS, SETUP LIST HEADER, AND SCHEDULE
*     A SLAVE MONITOR. ON ENTRY <B> --> SRT ENTRY.
* 
PMON  NOP 
      STB PMON3 
      STB PMON4 
      LDA D1        CHECK IF MONITOR ALREADY
      AND B,I          PROCESS AND BYPASS IF
      SZA                 IT HAS BEEN.
      JMP PMON,I
* 
      LDA PMON3,I   3K MONITOR? 
      SSA,RSS 
      JMP PMON2     . NO CONTINUE 
      LDA #LU3K     3K CONNECTED? 
      SZA,RSS 
      JMP PMON,I    . NO RETURN 
* 
PMON2 CLA           GET A CLASS # FOR MONITOR 
      JSB CLSUB 
PMON3  DEF *-*       SRT ENTRY ADDRESS
* 
      LDB PMON3     <B> --> SRT 
      JSB CALC      COMPUTE LIST HEADER ADDRESS 
      INB           <B> --> CLASS WORD IN HEADER
      LDA @CLAS,I 
      STA B,I       MOVE IN CLASS 
* 
      INB           <B> --> PGM NAME IN HEADER
      STB PMON5 
      LDA PMON3 
      ADA D2        <A> --> PGM NAME IN SRT 
      JSB .MVW      MOVE NAME INTO LIST HEADER
       DEF D3 
       NOP
* 
      INA           <A> --> ABORTABLE BIT 
      LDA A,I       GET ABORT BIT 
      IOR PMON5,I 
      STA PMON5,I      AND MERGE IT WITH NAME 
* 
      LDB PMON4 
      CPB @RFAM     REQUEST TO SCHEDULE RFAM? 
      RSS           . YES 
      JMP PMON7     . NO JUST SCHEDULE
      JSB PRINT     "INPUT # OF FILES"
       DEF FILMG
      JMP *+3 
PMON6 JSB QUERY 
       DEF FERMG     "FILE ERROR" 
      JSB READ
      CPA D1        NUMERIC?
      RSS          . YES OK 
      JMP PMON6     . NO BADO BADO... 
      STB #RFSZ     SAVE FILE/DCB COUNT FOR RFAM
* 
PMON7 EQU * 
      JSB SCHED     SCHEDULE MONITOR
PMON4  DEF *-*
      SZA,RSS       IF <A> <> 0 THEN MONITOR NOT SCHEDULED. BACK-OUT
      JMP PMON,I    RETURN
* 
      LDB PMON4     <B> --> SRT 
      JSB SNUFF     MONITOR NOT SCHEDULED, BACKOUT RESOURCES
      JMP PMON,I
* 
PMON5 DEF *-*       ADDRESS OF PGM NAME IN SLAVE HEADER 
      SPC 3 
*     SCHEDULE PROGRAM (P+1 --> SRT ENTRY, <A> RETURNS 0 IF OK) 
* 
SCHED NOP 
      LDA SCHED,I 
      RAL,CLE,SLA,ERA    RESOLVE INDIRECT ADDRESS 
      LDA A,I               INTO DIRECT ADDRESS 
      STA SCHD4     SRT ADDRESS 
      ISZ SCHED 
      INA 
      LDB A,I       <B> --> CLASS 
      INA           <A> --> PROGRAM NAME (SRT+2)
      DST SCHD1 
* 
      JSB EXEC      SCHEDULE PGM WITHOUT WAIT 
       DEF *+5
       DEF SCHNW
SCHD1  DEF *-*
       DEF *-*      PARM #1 (PROGRAM CLASS) 
       DEF ERLU     PARM #2 
       JMP SCHD2    ERROR RETURN
      SZA,RSS 
      JMP SCHD3     GOOD RETURN - UPDATE FLAGS
      DLD ASTAT     STATUS ERROR
SCHD2 DST SERR
      LDA SCHD1 
      LDB @SCHD 
      JSB .MVW      MOVE IN MONITOR NAME
       DEF D3 
       NOP
      JSB ERROR     PRINT PGM SCHEDULE ERROR
       DEF SMES 
      CCA           SET ERROR INDICATOR - COULDN'T SCHEDULE 
      JMP SCHED,I   RETURN
* 
SCHD3 EQU *         PROGRAM SCHEDULED -- UPDATE FLAGS 
      LDA SCHD4,I 
      IOR D1        SET "SCHEDULED" FLAG
      STA SCHD4,I 
      CLA           INDICATE SCHEDULE SUCCESSFUL
      JMP SCHED,I   RETURN
* 
SCHD4 BSS 1 
ASTAT ASC 2,STAT
SMES  DEF *+2 
      DEF D9
      ASC 3,ERROR:
SERR  ASC 6,EEEE  XXXXX 
@SCHD DEF SERR+3
SCHNW DEF 10,I
      SKP 
*---------------------------------------------------------------+ 
*     GET SECURITY CODES FROM THE USER                          | 
*---------------------------------------------------------------+ 
GETSC EQU * 
      JSB SECOD     SET NETWORK USER ACCESS SECURITY CODE FOR THIS NODE.
       DEF SECMS
      STB #SWRD 
      JSB SECOD     SET NETWORK MANAGEMENT ACCESS SECURITY CODE 
       DEF SECNM
      STB #NMSC 
      JMP SQUE
      SPC 2 
*     ROUTINE TO ASK FOR, OBTAIN & VERIFY A SECURITY CODE 
*     SPECIFIED IS IN ASCII.
* 
SECOD NOP 
      LDA SECOD,I   LOAD ADDRESS OF "PROMPT" MESSAGE
      STA SCOD.     SAVE IN-LINE
      DLD ECHO      TEMPORARILY REMOVE THE 'ECHO' BIT 
      SWP 
      DST ECHO
      ISZ SECOD     BUMP RETURN POINTER 
* 
SCOD0 EQU * 
      JSB PRINT     ASK FOR SECURITY CODE 
SCOD.  NOP           ADDRESS OF "PROMPT" MSG STORED HERE
      JSB READ      INPUT RESPONSE
      CPA B2        RESPONSE ASCII? 
      RSS           YES,... 
      JMP SCOD0     NO, TRY AGAIN.
      DLD ECHO      RESTORE ECHO BIT
      SWP 
      DST ECHO
      LDB PARSB+1 
      SPC 1 
      UNL 
      JSB S 
      LST 
      JMP SECOD,I   RETURN. 
      SPC 1 
*     SUBROUTINE TO OBTAIN NETWORK MANAGEMENT ACCESS SECURITY CODE
NMSCX NOP 
      JSB SECOD 
      DEF SECNM     "NETWORK MANAGEMENT SECURITY CODE?" 
      CPB #NMSC     CODES MATCH?
      JMP NMSCX,I   YES, RETURN 
      JMP ABORT     NO--TOUGH LUCK
      UNL 
S     NOP 
      BLF,BLF 
      CMB 
      JMP S,I 
      LST 
      SPC 1 
SECMS DEF *+2 
      DEF D14 
      ASC 14,NETWORK USER SECURITY CODE?_ 
SECNM DEF *+2 
      DEF D17 
      ASC 17,NETWORK MANAGEMENT SECURITY CODE?_ 
      SKP 
*---------------------------------------------------------------+ 
*     SCHEDULE QUEUEING PROCESSORS                              | 
*                                                               | 
*     1000-1000 LINKS   GRPM, RTRY, QCLM                        | 
*     1000-1000 LINKS W/ OLD NODES - INCNV, OTCNV               | 
*     3000 LINK  - RQCNV, RPCNV                                 | 
*---------------------------------------------------------------+ 
SQUE  EQU * 
      LDA RMSA      1000-1000 LINKS?
      SZA,RSS 
      JMP SQUE1     . NO CHECK 3000 
* 
      JSB SCHED     SCHEDULE GRPM 
       DEF GRPM.
      SZA 
      JSB QWARN 
      JSB SCHED     SCHEDULE RTRY 
       DEF RTRY.
      SZA 
      JSB QWARN 
      JSB SCHED     SCHEDULE QCLM 
       DEF QCLM.
      SZA 
      JSB QWARN 
      LDA #MCTR     MA IN SYSTEM? 
      SZA,RSS 
      JMP SQUE0     . NO CONTINUE 
* 
      JSB EXEC      PUT 'MATIC' INTO TIME LIST
       DEF *+6
       DEF D12N     INITIAL OFFSET SCHEDULE 
       DEF MA1.+2   PROGRAM NAME
       DEF D2       RESOLUTION (2=SECONDS)
       DEF D1       MULTIPLE (1=EVERY SECOND) 
       DEF DM2      RUN AFTER 2 SECONDS 
       JMP *+4      ERROR! COULD NOT SCHEDULE MATIC!
       JMP SQUE0
      DEF MA1.      SRT ADDRESS FOR ERROR PROCESSING
      NOP           FAKE OUT QWARN
      JSB QWARN 
* 
*     IF OLDER NODES SCHEDULE CONVERTERS
* 
SQUE0 LDA MSCFL 
      SZA,RSS 
      JMP SQUE1     NO OLDER NODES
* 
      JSB SCHED     SCHEDULE INCNV
       DEF INCV.
      SZA 
      JSB QWARN 
      JSB SCHED     SCHEDULE OTCNV
       DEF OTCV.
      SZA 
      JSB QWARN 
* 
*     IF 3000 LINK, THEN SCHEDULE 3K PROCESSORS 
* 
SQUE1 LDA RM3K
      SZA,RSS 
      JMP TERM      NO 3K LINK
* 
      JSB SCHED     SCHEDULE RQCNV
       DEF RQCV.
      SZA 
      JSB QWARN 
      JSB SCHED     SCHEDULE RPCNV
       DEF RPCV.
      SZA 
      JSB QWARN 
      JMP TERM
      SPC 2 
QWARN NOP           WARN USER THAT A REQUIRED 
      LDB QWARN        DS/1000 PROCESSOR
      ADB DM3             CANNOT BE SCHEDULED 
      LDA B,I       <A> --> SRT 
      ADA D2        <A> --> PGM NAME
      LDB @QMSG 
      ADB D7        <B> --> WHERE TO PUT NAME 
      JSB .MVW      MOVE NAME 
       DEF D3 
       NOP
      JSB ERROR     WARN USER 
@QMSG  DEF QWMSG
      JMP QWARN,I 
      SKP 
*---------------------------------------------------------------+ 
*  PROGRAM TERMINATION PROCESSOR.                               | 
*---------------------------------------------------------------+ 
TERM  CLA 
      CPA #FWAM     SAM ALLOCATED?
      JMP *+3       NO
      CPA ONTWO     IS THIS INITIAL ENTRY?
      JSB SUPLN     YES! SCHEDULE "UPLIN" 
      JSB CHCKN     WAS THERE A FILE
      JMP TERM1     NO...DON'T CLOSE IT 
      LDA CLFLG     IS IT A DUMMY DCB?
      SSA 
      JMP TERM1     YES...DON'T CLOSE IT
* 
      JSB CLOSE     CLOSE 
       DEF *+3         THE
       DEF INDCB         CONTROL
       DEF TEMP1           FILE.
* 
TERM1 LDA $RTRN     IF PROGRAM IS BEING ABORTED 
      CPA @ABPR       THEN IGNORE 
      JMP TERM3         THE END MESSAGE.
* 
      JSB PRNTX     GO TO PRINT THE 
@ENMG DEF ENDMG       TERMINATION MESSAGE--SANS HEADER. 
* 
TERM3 EQU * 
      ISZ $RTRN     BUMP POINTER
      ISZ $RTRN       TO ACTUAL MESSAGE 
      JSB PRTN      RETURN ERROR INFORMATION
      DEF *+2         TO THE BATCH PROCESSOR
$RTRN NOP            (CONTAINS DEF TO ENMSG OR ABRTM) 
      JSB EXEC      GO TO THE 
       DEF *+2         RTE EXECUTIVE
       DEF D6            TO TERMINATE 
      SKP 
*  SUBROUTINE TO ASK CPU QUESTIONS & INTERPRET RESPONSES
CPUCK NOP 
      STA MSG2+4
      JSB PRINT     PRINT THE QUESTION
       DEF MSG2 
      JSB READ      READ THE RESPONSE 
      CLA,INA 
      CPB "YE"      YES?
      JMP CPUC2     YES, SET THE FLAG 
      CLA 
      CPB "NO"      NO? 
      JMP CPUC2          CLEAR FLAG 
      JSB QUERY     INFORM USER OF ERROR
       DEF ERR1       "ANSWER YES OR NO"
      JMP CPUCK+4   RETRY QUESTION
* 
CPUC2 STA CPUCK,I   SET CPU FLAG
      ISZ CPUCK     SET CORRECT RETURN ADDRESS
      JMP CPUCK,I   RETURN
* 
ASC10 ASC 1,10
ASC30 ASC 1,30
* 
D14   DEC 14
      SKP 
D100  DEC 100 
DM100 DEC -100
* 
* 
RRSIZ NOP           SIZE OF RE-ROUTING TABLES 
NTCBS NOP           NUMBER OF TCBS ALLOCATED. 
MASIZ NOP           SIZE OF M.A. TABLES (IN WORDS)
SZNRV NOP           SIZE OF NRV AREA (IN WORDS) 
SZTCB NOP           SIZE OF TCB AREA (IN WORDS) 
POOLZ NOP 
      SKP 
*---------------------------------------------------------------+ 
*        ******  SYSTEM RESOURCE TABLE  ******                  | 
*        CONTAINS INFO ABOUT ALL PROGRAMS, CLASSES, AND         | 
*        RESOURCE NUMBERS ALLOCATED. FORMAT IS AS FOLLOWS:      | 
*                                                               | 
*     +0 FLAGS      (SEE BELOW)                                 | 
*     +1 @RS        ADDRESS OF WHERE TO PUT CLASS/RN            | 
*     +2 PGM        (OPTIONAL) PROGRAM NAME                     | 
*     +5 STREAM     (OPTIONAL) STREAM WORD                      | 
*     +6 ABORT      (OPTIONAL) ABORTABLE BIT                    | 
*     +7 CLASS      (OPTIONAL) SAVE AREA FOR CLASS WORD         | 
*                                                               | 
*     FLAGS                                                     | 
*   ---------------------                                       | 
*     OCT 1         PROGRAM SCHEDULED                           | 
*     OCT 2         CLASS # ALLOCATED                           | 
*     OCT 4         RN ASSIGNED                                 | 
*     OCT 040000    SLAVE MONITOR                               | 
*     OCT 100000    NEEDED ONLY FOR THE 3K                      | 
*---------------------------------------------------------------+ 
      SPC 1 
#MON  EQU 11        NUMBER OF SLAVE MONITORS
MNMON ABS -#MON 
@MON  DEF MON       START OF MONITORS 
@RFAM DEF M6.       RFAM ENTRY ADDRESS
* 
SRT   DEF *+1       START OF SYSTEM RESOURCE TABLE
      DEF UPLI. 
MON   EQU *         START OF SLAVE MONITOR LIST 
      DEF M1.       ORDER OF THE FOLLOWING IS FIXED 
      DEF M2.                    "
      DEF M3.                    "
      DEF M4.                    "
      DEF M5.                    "
      DEF M6.                    "
      DEF M7.                    "
      DEF M8.                    "
      DEF M9.                    "
      DEF M10.
      DEF M11.      END OF FIXED ORDER... ADD MONITORS AFTER HERE 
      DEF TBRN. 
      DEF QRN.
      DEF QXCL. 
      DEF QZRN. 
      DEF CLRN. 
      DEF RQCV. 
      DEF RPCV. 
      DEF GRPM. 
      DEF RTRY. 
      DEF QCLM. 
      DEF INCV. 
      DEF OTCV. 
      DEF RSM.
      DEF MA1.
      DEF MA2.
      DEF EX1.
      DEF EX2.
SRTLN ABS *-SRT-1   NUMBER OF SRT ENTRIES 
      SPC 1 
*--   SLAVE MONITORS
M1.   OCT 040000
      DEF *+6 
      ASC 3,DLIST   DIRECTORY LIST MONITOR
      DEC 1         STREAM 1
      NOP           NO ABORT
      BSS 1         CLASS 
M2.   OCT 140000
      DEF *+6 
      ASC 3,CNSLM   HP3K CONSOLE MONITOR
      DEC 2         STREAM 2
      OCT 100000    OK TO ABORT 
      BSS 1         CLASS 
M3.   OCT 040000
      DEF *+6 
      ASC 3,EXECW   SCHEDULE-WITH-WAIT MONITOR
      DEC 3         STREAM 3
      OCT 100000    OK TO ABORT 
      BSS 1         CLASS 
M4.   OCT 040000
      DEF *+6 
      ASC 3,PTOPM   PROGRAM TO PROGRAM MONITOR
      DEC 4         STREAM 4
      NOP           NO ABORT! 
      BSS 1         CLASS 
M5.   OCT 040000
      DEF *+6 
      ASC 3,EXECM   REMOTE EXEC-REQUEST MONITOR 
      DEC 5         STREAM 5
      NOP           NO ABORT! 
      BSS 1         CLASS 
M6.   OCT 040000
      DEF *+6 
      ASC 3,RFAM    REMOTE FILE ACCESS MONITOR
      DEC 6         STREAM 6
      NOP           NO ABORT! 
      BSS 1         CLASS 
M7.   OCT 040000
      DEF *+6 
      ASC 3,OPERM   REMOTE OPERATOR-REQUEST MONITOR 
      DEC 7         STREAM 7
      OCT 100000    OK TO ABORT 
      BSS 1         CLASS 
M8.   OCT 040000
      DEF *+6 
      ASC 3,VCPMN   VIRTUAL CONTROL PANAL MONITOR 
      DEC 8         STREAM 8
      NOP           NO ABORT! 
      BSS 1         CLASS 
M9.   OCT 040000
      DEF *+6 
      ASC 3,PROGL   ABSOLUTE PROGRAM LOADING MONITOR
      DEC 9         STREAM 9
      NOP           NO ABORT! 
      BSS 1         CLASS 
M10.  OCT 040000
      DEF *+6 
      ASC 3,RDBAM   REMOTE DATA BASE ACCESS MONITOR 
      DEC 10        STREAM 10 
      NOP           NO ABORT! 
      BSS 1         CLASS 
M11.  OCT 40000 
      DEF *+6 
      ASC 3,APLDX   'MINI-APLDR' FOR MEMORY-BASED RTE-LS
      DEC 11        STREAM 11 
      OCT 100000    OK TO ABORT 
      BSS 1         CLASS NUMBER
* 
TBRN. NOP 
      DEF TBRN# 
QRN.  NOP 
      DEF QRN#
QXCL. OCT 100000
      DEF QXCL# 
      ASC 3,QUEX
QZRN. OCT 100000
      DEF QZRN# 
      ASC 3,QUEZ
CLRN. NOP 
      DEF CLRN# 
RQCV. OCT 100000
      DEF RQCV# 
      ASC 3,RQCNV 
RPCV. OCT 100000
      DEF RPCV# 
      ASC 3,RPCNV 
GRPM. NOP 
      DEF GRPM# 
      ASC 3,GRPM
RTRY. NOP 
      DEF RTRY# 
      ASC 3,RTRY
QCLM. NOP 
      DEF QCLM# 
      ASC 3,QCLM
INCV. NOP 
      DEF INCV# 
      ASC 3,INCNV 
OTCV. NOP 
      DEF OTCV# 
      ASC 3,OTCNV 
UPLI. NOP 
      NOP 
      ASC 3,UPLIN 
#RSM. EQU * 
RSM.  NOP 
      DEF #RSM
      ASC 3,RSM 
#MA1. EQU * 
MA1.  NOP 
      DEF #MARN     RN FOR TABLE ACCESS 
      ASC 3,MATIC 
#MA2. EQU * 
MA2.  NOP 
      DEF #MAHC     MA HOLD CLASS 
EX1.  NOP 
      DEF #EXHC     EXECM HOLD CLASS
EX2.  NOP 
      DEF #EXTC     EXECM WORK CLASS
      SKP 
* 
*  DELAY SUBROUTINE: DELAY EXECUTION FOR 1-SECOND.
*    <RETRY> SET (BEFORE ENTRY) TO NEGATIVE NUMBER OF PASSES
*     ALLOWED THROUGH <DELAY>, BEFORE RETURN TO P+1 ERROR-RETURN. 
*     NORMAL RETURN IS TO P+2, FOLLOWING DELAY OF 1-SECOND. 
* 
DELAY NOP           ENTRY/EXIT: DELAY SUBROUTINE. 
      JSB EXEC      WAIT
       DEF *+6         1 SECOND 
       DEF D12           TO ALLOW 
       DEF ZERO            SYSTEM 
       DEF B1                CONDITIONS TO
       DEF ZERO                CHANGE 
       DEF DM100                 AS REQUIRED. 
      ISZ RETRY     IF RETRY COUNT IS NOT EXHAUSTED,
      ISZ DELAY       THEN SET RETURN TO P+2; ELSE, IF
      JMP DELAY,I      EXHAUSTED, RETURN TO P+1--ERROR! 
* 
RETRY NOP           RE-TRY COUNTER
* 
      SKP 
* 
* SUBROUTINE TO STORE ID SEQUENCE IN "RES". 
*   (A) = # BYTES 
*   (B) = ADDRESS IN "RES". 
*   INBUF = ASCII INPUT BUFFER (ADDR = DINBF).
* 
STRID NOP 
      STB TEMP1     DESTINATION ADDR. 
* 
      LDB A         IS # BYTES .LE. 16? 
      ADB DM17
      SSB,RSS 
      LDA D16       NO. TRUNCATE TO 16 BYTES. 
      STA TEMP1,I   STORE # BYTES.
      SZA,RSS 
      JMP STRID,I   IF NO ID, RETURN
      STA B 
      BRS           GET LAST CHARACTER IN BUFFER. 
      ADB M1
      ADB DINBF 
      LDA B,I 
      AND D255
      CPA D32       IS IT A BLANK?
      JMP STR1      YES.
      LDA TEMP1,I   NO. ARE THERE 16 BYTES? 
      CPA D16 
      RSS 
      JMP STR2      NO. 
STR1  LDA B,I       YES. CLEAR THE BLANK (OR 16TH BYTE),
      AND DM256 
      STA B,I 
      LDA TEMP1,I    AND DECREMENT BYTE COUNT.
      ADA M1
      STA TEMP1,I 
      INA 
STR2  ISZ TEMP1 
      CLE,ERA       NO. OF WORDS TO STORE.
      SZA,RSS 
      JMP STRID,I   IF NO ID, RETURN
      LDB TEMP1     DESTINATION ADDRESS 
      STA TEMP1     # OF WORDS
      LDA DINBF     SOURCE ADDRESS
      JSB .MVW      PERFORM MOVE
       DEF TEMP1
       NOP
* 
      JMP STRID,I   RETURN TO CALLER
* 
D32   DEC 32
      SKP 
* 
      SPC 1 
* UTILITY SUBROUTINE
CFSEC NOP           ENTRY/EXIT
      CCB           CONVERT SECONDS TO
      DIV B5         FIVE SECOND INTERVALS. 
      ADB B2        IF THE REMAINDER IS 
      SSB            THREE OR MORE, 
      ADA M1          ROUND TO NEXT INTERVAL. 
      SZA,RSS       INSIST UPON A 
      CCA            MINIMUM COUNT = -1.
      AND D255      MASK OFF HIGH BITS
      JMP CFSEC,I   RETURN
* 
D255  DEC 255 
      SKP 
*  SUBROUTINE TO VERIFY THAT LU IS LINKED TO COMMUNICATION LINK DRIVER. 
*     CALLING SEQUENCE: 
*     "NRV3" CONTAINS LU # TO TEST. 
* P   JSB LUTST 
* P+1 <RETURN TAKEN HERE IF LU IS INVALID>
* P+2 <RETURN HERE IF NOT COMMUNICATION DRIVER> 
* P+3 <RETURN HERE IF VALID COMM. DRIVER> 
* 
LUTST NOP 
      LDA NRV3      CONFIGURE DOUBLE-WORD LU
      IOR BIT15 
      STA LU1 
      CLA 
      STA LU2 
      JSB XLUEX     GO TO OBTAIN
       DEF *+4         THE EQUIPMENT TYPE 
       DEF SD13         CODE FOR THE
       DEF LU1            SPECIFIED LOGICAL UNIT. 
       DEF LUSET
       JMP LUTST,I    TAKE THE ERROR EXIT!
      ISZ LUTST     BUMP RETURN TO P+1
* 
      LDA LUSET     GET STATUS WORD.
      ALF,ALF 
      AND B77       ISOLATE THE EQUIPMENT TYPE-CODE.
      CPA B65       IS THE LU LINKED TO 'DVA65'?
      ISZ LUTST       YES. TAKE GOOD EXIT (P+2).
      CPA B66       LINKED TO DVA 66? 
      ISZ LUTST     YES.  TAKE GOOD EXIT (P+2)
      JMP LUTST,I     NO. ERROR: RETURN TO P+1. 
* 
LU1   NOP           NOTE: LU1 & LU2 MUST BE TOGETHER! 
LU2   NOP           NOTE: LU1 & LU2 MUST BE TOGETHER! 
BIT15 OCT 100000
OPT   NOP 
      SPC 2 
*  SUBROUTINE TO SET-UP & ENABLE A COMMUNICATION LINK 
* 
LUSET NOP 
* 
      LDA NRV3      GET THE LOGICAL UNIT NUMBER.
      AND B377      MASK LU FIELD 
      STA OPT 
      IOR BIT15 
      STA LU1          CONFIGURE DOUBLE-WORD LU 
      LDA B3000     SET FOR ENABLE LISTEN REQUEST 
      STA LU2 
* 
      JSB XLUEX     GO TO RTE 
       DEF *+4         TO REQUEST THAT
       DEF SD3           'COMMUNICATION DRIVER' SET UP &
       DEF LU1             ENABLE CONFIGURED LU 
       DEF OPT             LISTEN MODE FOR THE LU 
       JMP LUSET,I   * RTE-DETECTED ERROR--TRY AGAIN! * 
      ISZ LUSET     ADJUST FOR "GOOD" RETURN
      RAR           POSITION BIT 1 TO LSB 
      SLA,RSS       INITIALIZATION ERROR? 
      JMP LUSET,I   NO, GOOD INITIALIZATION, RETURN TO THE CALLER.
* 
*     PRINT MESSAGE: INITIALIZATION FAILED, LU NN 
* 
      LDA NRV3      CONVERT LU NUMBER TO ASCII
      AND B377
      JSB DECML 
       DEF CNER.
      JSB PRINT     PRINT THE MESSAGE 
       DEF CNERR
      JMP LUSET,I   RETURN TO CALLER
      SPC 3 
      SKP 
* 
* DECML- CONVERTS BINARY TO DECIMAL (LEFT JUSTIFIED)
*     <A> = BINARY
*     JSB DECML 
*     DEF WHERE TO PUT 6 CHARACTERS 
* 
      EXT .MBT,.SBT 
* 
DECML NOP 
      STA DEC8.     SAVE <A>
      LDB DECML,I 
      ISZ DECML 
      CLE,ELB       CONVERT TO BYTE ADDRESS 
      STB DEC7. 
      LDA @SPAC 
      JSB .MBT      MOVE IN SPACES
       DEF D6 
       NOP
      LDA DEC8. 
      LDB DEC7. 
      SSA,RSS       NEGATIVE NUMBER?
      JMP DEC1.     . NO
      CMA,INA 
      STA DEC8. 
      SSA           SPECIAL LOW NUMBER (-32768)?
      JMP DEC4.     . YES 
      LDA DASH
      JSB .SBT
DEC1.  STB DEC7.     SAVE OUTPUT POINTER
      LDA DTBL
      STA D         D --> DIVISOR TABLE 
      LDA DM4 
      STA DEC5. 
      STA DEC6.     CLEAR OUTPUT FLAG (SET TO 1)
* 
DEC2. LDB DEC8. 
      LSR 16
      DIV D,I 
      ISZ D 
      STB DEC8.     REMAINDER 
      SZA           OUTPUT OTHER THAN ZERO? 
      JMP *+4       . YES OUTPUT IT 
      LDB DEC6. 
      SSB           OK TO OUTPUT? 
      JMP DEC3.     . NO FINISH LOOP
      IOR "0" 
      STA DEC6.     SET OUTPUT FLAG (BIT15=0) 
      LDB DEC7.     <B> --> OUTPUT FIELD
      JSB .SBT
       STB DEC7.     SAVE OUTPUT FIELD
DEC3. ISZ DEC5. 
      JMP DEC2. 
* 
      LDA DEC8.     <A> := ONES DIGIT 
      LDB DEC7.     <B> --> OUTPUT
      IOR "0" 
      JSB .SBT
       JMP DECML,I   AND RETURN 
* 
DEC4. LDA @32K      MOVE IN -32768
      JSB .MBT
        DEF D6
       NOP
      JMP DECML,I   RETURN
      SPC 2 
@32K  DBL *+1 
      ASC 3,-32768
@SPAC DBL *+1 
      ASC 3,
DTBL  DEF *+1 
      DEC 10000 
      DEC 1000
      DEC 100 
      DEC 10
* 
"0"   OCT 60
DASH  ASC 1,--
* 
DEC5. BSS 1 
DEC6. BSS 1         BIT15=1 NO OUTPUT; BIT15=0 OUTPUT 
D     BSS 1 
DEC7. BSS 1 
DEC8. BSS 1 
      SKP 
ZERO  EQU M1.+6 
D1    EQU M1.+5 
D2    EQU M2.+5 
D3    EQU M3.+5 
D4    EQU M4.+5 
D5    EQU M5.+5 
D6    EQU M6.+5 
D7    EQU M7.+5 
D8    EQU M8.+5 
D9    EQU M9.+5 
D10   EQU M10.+5
D11   DEC 11
D12   DEC 12
D12N  DEF 12,I
D13   DEC 13
D15   DEC 15
D16   DEC 16
D17   DEC 17
D20   DEC 20
D26   DEC 26
D36   DEC 36
D1275 DEC 1275
DM2   DEC -2
NMXLV EQU DM2       -(MAXIMUM ALLOWABLE UPGRADE LEVEL + 1)
DM3   DEC -3
DM16  DEC -16 
DM17  DEC -17 
DM256 DEC -256
B1    EQU D1
B2    EQU D2
B4    EQU D4
B5    EQU D5
B17   EQU D15 
B65   OCT 65
B66   OCT 66
B67   OCT 67
B77   OCT 77
B377  OCT 377 
B400  OCT 400 
B3000 OCT 3000
BT137 OCT 37700 
BLNKS ASC 1,        TWO ASCII BLANKS ("  ") 
SD3   OCT 100003
SD13  OCT 100015
M1    EQU CNODE 
XSBAI XSB A,I       DMS: CROSS-STORE <B> VIA ALTERNATE MAP. 
XCBAI XCB A,I            CROSS-COMPARE
XLABI XLA B,I 
MWII  MWI                MOVE TO ALTERNATE MAP
      NOP           (THIS 'NOP' REQ'D HERE!)
MWFI  MWF           MOVE FROM ALTERNATE MAP 
      NOP           (THIS 'NOP' REQ'D HERE!)
LSECD DEC 3360      SECURITY CODE FOR SAM ALLOCATION CALL 
RLU   NOP 
ECHO  OCT 400       ECHO BIT       < DO NOT CHANGE   >
      NOP           NON ECHO BIT   <   THIS ORDER !  >
* 
TEMP1 NOP 
/A    ASC 1,/A
/D    ASC 1,/D
/E    ASC 1,/E
"YE"  ASC 1,YE
C#FCD ABS #FCD
L#PCB ABS #PCB+3
"NO"  ASC 1,NO
TYPEQ NOP 
CLFLG NOP 
ONTWO NOP 
OPTYP NOP 
      SPC 3 
A     EQU 0 
B     EQU 1 
GLOCK OCT 100002
TEMP  NOP 
TCBSZ EQU D6        # WORDS IN EACH TCB ENTRY 
INBFS EQU D20 
INBUF BSS 20
PARSB BSS 34
INDCB BSS 144       USED FOR ANSWER FILES.
      SPC 1 
*     DEFINE NRV SIZE 
NRVS. EQU D3        SIZE OF NRV ENTRY 
      SKP 
*  CLASS NUMBER ALLOCATION SUBROUTINE.
* 
*  ENTER: <A> = -1  CLEAR BITS 15 & 14
*         <P+1>   - SRT ENTRY ADDRESS 
*   NOTE: DE-ALLOCATION ERRORS ARE IGNORED! 
* 
      BSS 1         (STORAGE) 
CLSUB NOP           ENTRY/EXIT: CLASS SUBROUTINE. 
      STA CLSUB-1   SAVE FLAG 
      LDB CLSUB,I   GET THE CLASS NUMBER ADDRESS. 
      ISZ CLSUB     SET RETURN TO <P+2>.
      RBL,CLE,SLB,ERB   RESOLVE INDIRECTS 
      LDB B,I              TO DIRECT ADDRESS
      STB @F        ADDRESS OF SRT FLAG 
      INB 
      LDB B,I       EFFECTIVE ADDRESS OF CLASS LOCATION 
      STB @CLAS 
* 
      JSB CLRQ      ALLOCATE A CLASS NUMBER 
       DEF *+4
       DEF CLACD     CLASS ALLOCATION CODE
@CLAS  DEF *-*       CLASS NUMBER ADDRESS STORED HERE 
       DEF ZERO 
       JMP CLERR     --ERROR RETURN 
      SSA           ALLOCATION ERROR? 
      JMP NOCL#     NO CLASS NUMBERS. 
      LDA D2
      IOR @F,I      SET CLASS ALLOCATED BIT 
      STA @F,I
* 
      LDA @CLAS,I   SET PROPER BITS IN CLASS NUMBER 
      ALR,RAR       CLEAR "NO WAIT" BIT 
      IOR CBITS     SET "SAVE BUFFER" & "NO DE-ALLOCATE" BITS 
      LDB CLSUB-1 
      SSB 
      ALR,RAR 
      STA @CLAS,I 
      JMP CLSUB,I   RETURN TO CALLER
* 
NOCL# JSB SYSER     CATASTROPHIC ERROR: 
       DEF NOCL.        NO CLASS NUMBERS
      SPC 2 
* 
@F    BSS 1 
CLACD OCT 140001    ALLOCATE CLASS, NO-WAIT, NO ABORT 
CLS18 OCT 100022
CLS21 OCT 100025
CBITS OCT 60000 
* 
CLERR JSB SYSER     GO TO INFORM THE USER OF A
       DEF CLSER       CATASTROPHIC CLASS-PROCESSING ERROR. 
* 
* 
      SKP 
*  RESOURCE NUMBER ALLOCATION ROUTINE.
*  ENTER: <A>&<B> - DON'T CARE (DESTROYED ON RETURN)
*         <P+1>   - ADDRESS OF SRT ENTRY
*   NOTE: RN'S ARE LOCKED LOCALLY, TO PREVENT USE UNTIL <DINIT> COMPLETES.
* 
RNSUB NOP           ENTRY/EXIT: RN ALLOCATION/RELEASE RTN.
      LDA RNSUB,I   GET THE STORAGE ADDRESS FOR THE RN. 
      ISZ RNSUB 
      RAL,CLE,SLA,ERA   RESOLVE INDIRECT ADDRESSES
      LDA A,I              TO DIRECT ADDRESS
      STA @F        SAVE ADDRESS OF SRT FLAG
      INA 
      LDA A,I       EFFECTIVE ADDRESS OF WHERE TO PUT RN
      STA RNAD      CONFIGURE THE CALL WITH RN ADDRESS. 
* 
      JSB RNRQ      GO TO RTE TO REQUEST A
       DEF *+4         GLOBALLY ALLOCATED/LOCALLY LOCKED
       DEF GALC          RESOURCE NUMBER. 
RNAD   NOP
       DEF RNST      DUMMY STATUS INFO STORAGE. 
       JMP RNERR     ERROR! 
      LDA D4
      IOR @F,I      SET "RN ALLOCATED BIT"
      STA @F,I
      JMP RNSUB,I     OR NORMAL COMPLETION: RETURN. 
* 
RNERR JSB SYSER     ALLOCATION ERROR: INFORM THE CALLER.
       DEF RNERM     CATASTROPHIC ERROR--NO RETURN! 
* 
GALC  OCT 140021    GLOBAL ALLOCATE/LOCAL LOCK/NO ABORT 
RNST  EQU SECOD     RN STATUS STORAGE (NOT USED). 
      SKP 
*  SCHEDULE <UPLIN>, THE TRANSACTION MONITOR & CLEANUP PROGRAM, 
*   TO RUN EVERY FIVE SECONDS.
* 
SUPLN NOP 
      CLA,INA 
      STA UPLI.     SET SCHEDULED BIT 
      JSB EXEC      GO TO THE 
       DEF *+6         RTE EXECUTIVE
       DEF SCHTM         TO TIME-SCHEDULE 
       DEF UPLI.+2         <UPLIN>
       DEF B2                TO BE RUN
       DEF B5                  EVERY FIVE SECONDS;
       DEF DM2                   TO BEGIN IN TWO SECONDS. 
       RSS           IF A SYSTEM ERROR IS DETECTED, SKIP; 
      JMP SUPLN,I     ELSE, RETURN TO THE CALLER. 
* 
      LDA SRT,I 
      ADA D2        <A> --> "UPLIN" 
      LDB @QMSG 
      ADB D7        <B> --> WARNING MESSAGE 
      JSB .MVW
       DEF D3 
       NOP
      JSB SYSER     INFORM THE USER OF A CATASTROPHIC ERROR:
       DEF QWMSG       'UPLIN' WAS NOT SCHEDULED. [NO RETURN] 
* 
SCHTM OCT 100014
      SKP 
*  SUBROUTINE TO PRINT MESSAGES ON INTERACTIVE TERMINALS--ONLY. 
* 
*  CALLING SEQUENCES: 
* 
*  JSB PRINT....PRINT:" /DINIT:<MESSAGE>"    JSB PRNTX....PRINT:"<MESSAGE>" 
*  DEF MESSAGE                               DEF MESSAGE
* 
*     NOTE: MESSAGE LENGTH LIMITED TO 72 CHARACTERS 
* 
* 
PRNTX NOP           ENTRY/EXIT: PRINT W/O HEADER
      LDA PRNTX     GET THE RETURN ADDRESS. 
      STA PRINT     SAVE FOR THE RETURN.
      LDA A,I       GET THE MESSAGE ADDRESS,
      STA OLDAD      AND SAVE FOR ERROR-TRANSFER ROUTINE. 
      DLD A,I       GET THE MESSAGE SPECIFICATIONS, 
      DST PRNT1       AND CONFIGURE THE CALLING SEQUENCE. 
      JMP PRNT0     GO TO PRINT THE MESSAGE W/O HEADER. 
* 
PRINT NOP           NORMAL ENTRY/EXIT 
      DLD NORMA     RE-ESTABLISH THE
      DST PRNT1       NORMAL MESSAGE SPECIFICATIONS.
      LDA MSGAD     INITIALIZE THE
      STA BUFPT      MESSAGE BUFFER POINTER.
      LDB PRINT     GET ADDRESS OF MESSAGE INFORMATION. 
      LDB B,I       TRACK DOWN
      RBL,CLE,SLB,ERB  A DIRECT 
      JMP *-2             ADDRESS.
      LDA $ERR      IF THE ERROR-TRANSFER ROUTINE IS
      SZA,RSS        IN CONTROL, BYPASS 'OLDAD' UPDATING. 
      STB OLDAD     SAVE IT FOR THE ERROR-TRANSFER ROUTINE. 
      DLD B,I       GET BUFFER ADDRESS AND LENGTH.
      STA MSPNT     SAVE FOR SOURCE POINTER.
      LDB B,I       GET THE MESSAGE LENGTH. 
      STB PRNTL      INCLUSION OF THE HEADER. 
      CMB,INB       IF THE MESSAGE LENGTH 
      ADB D36         EXCEEDS THE MAXIMUM 
      SSB              BUFFER SIZE, THEN
      JMP PRNTA         IGNORE THE REQUEST; ELSE, 
      DLD MSPNT     TRANSFER THE MESSAGE
      JSB .MVW       TO THE PRINT BUFFER. 
       DEF PRNTL
       NOP
      LDA PRNTL     GET THE MESSAGE LENGTH. 
      ADA B5        ADD IN THE HEADER SIZE. 
      STA PRNTL     SAVE TOTAL MESSAGE LENGTH.
* 
PRNT0 LDA TYPEQ     GET TTY FLAG
      LDB $ERR      GET ERROR FLAG
      SZB,RSS       ERROR OR
      SZA,RSS       OR INTERACTIVE
      RSS           YES...PRINT MESSAGE 
      JMP PRNTA     NO ERROR AND NOT INTERACTIVE
      LDA RLU       GET INTERACTIVE LU
      SZB           ERROR?
      LDA ERLU      YES...ERROR LU
      IOR ECHO         (SET ECHO BIT) 
      STA PRTLU     SAVE AS PRINT LU
* 
      JSB EXEC      PRINT MESSAGE 
       DEF *+5
       DEF B2 
       DEF PRTLU     PRINT LU 
PRNT1  DEF HEDMS     MESSAGE ADDRESS. 
       DEF PRNTL     MESSAGE LENGTH.
PRNTA ISZ PRINT     POINT TO RETURN ADDRESS 
      JMP PRINT,I   RETURN
      SPC 1 
ERLU  NOP           ERROR LOGICAL UNIT NO.
PRTLU NOP 
PRNTL NOP 
OLDAD NOP           PREVIOUS MESSAGE ADDRESS. 
BUFPT NOP 
NORMA DEF HEDMS 
      DEF PRNTL 
MSPNT NOP 
MSGAD DEF MSGBF 
HEDMS OCT 6412      CARRIAGE-RETURN/LINEFEED. 
      ASC 4,/DINIT: 
MSGBF BSS 36
* 
*     ROUTINE TO DECIDE WHICH TYPE OF INPUT DEVICE
*     EITHER FILE OR LU 
*     IF LU, A-REG WILL CONTAIN LU TYPE, B-REG = READ LU, E=0 
*     CALLING SEQUENCE
*     JSB CHCKN 
*     <LU RETURN> 
*     <FILE RETURN> 
* 
CHCKN NOP 
      LDB RLU       GET READ-DEVICE LU. 
      LDA TYPEQ     GET EQUIPMENT TYPE CODE.
      CLE,SZB,RSS   LU OR FILE
      ISZ CHCKN     FILE
      JMP CHCKN,I   AND RETURN
* 
*     SUBROUTINE TO PRINT SYSTEM ERROR MESSAGES AND 
*     ABORT 
*     CALLING SEQUENCE
*     JSB SYSER 
*      DEF ERR MESSAGE
* 
SYSER NOP 
      LDA SYSER,I   GET MESSAGE SPECIFICATION ADDRESS.
      STA *+3       CONFIGURE CALL TO PRINT ROUTINE.
      ISZ $ERR      SET ERROR FLAG. 
      JSB PRINT 
       DEF *-*
      JMP ABORT     AFTER MESSAGE...ABORT 
      SPC 3 
*     SUBROUTINE TO READ FROM A SELECTED INPUT DEVICE.
*     IT PARSES THE INPUT AND PLACES THE RESULT IN A BUFFER 
*     CALLED PARSB. IF FIRST PARAMETER = '/A' WILL GO TO 'ABORT'. 
* 
*     CALLING SEQUENCE: 
*     JSB READ
*     UPON RETURN A REG=PARSB, B REG=PARSB+1
* 
READ  NOP 
      LDA DM4       ALLOW THREE 
      STA RETRY      ERROR-RETRIES. 
READA LDA RLU       GET READ LU 
      LDB $ERR      IS THIS AN ERROR READ?
      SZB 
      LDA ERLU      YES...READ FROM ERROR DEVICE. 
      SZA,RSS       IF THE SOURCE IS FROM A FILE, 
      JMP READB      THEN GO TO FILE READ ROUTINE.
      IOR ECHO      SET ECHO BIT
      STA PRTLU     SAVE READ LU
      JSB EXEC
       DEF *+5
       DEF B1 
       DEF PRTLU
DINBF  DEF INBUF
       DEF INBFS
      SZB           EOF HIT?
      JMP READC     NO
REDER JSB QUERY     INDICATE ERROR, AND ALLOW RE-TRY. 
       DEF READM
      JMP READA     TRY AGAIN 
      SPC 1 
READB EQU * 
      ISZ LINE#     BUMP LINE NUMBER COUNTER
      JSB READF     READ FROM A FILE
       DEF *+6
       DEF INDCB
       DEF TEMP1
       DEF INBUF
       DEF INBFS
       DEF PRNTL
      LDB PRNTL     GET LENGTH
      SSA,RSS       FILE ERROR? 
      SZB,RSS        OR ZERO-LENGTH RECORD? 
      JMP REDER       YES--PROCESS THE ERROR. 
* 
READC EQU * 
      CLE,ELB       CONVERT TO BYTE LENGTH
      STB PRNTL     SAVE LENGTH 
      LDA INBUF     GET 
      AND =B77400     FIRST 
      CPA ASTSK       CHARACTER: ASTERISK(*) ?
      JMP READA     YES, READ ANOTHER ONE 
      JSB PARSE     GO PARSE INPUT
       DEF *+4
       DEF INBUF
       DEF PRNTL
       DEF PARSB
      CLA,CLE       CLEAR OUT ERROR FLAG
      STA $ERR
      DLD PARSB     LOAD A AND B REG
      CPB /A        IF RECORD'S FIRST 2 CHARS. =/A
      JMP *+2        SKIP TO CHECK NEXT TWO.
      JMP READ,I    ELSE, RETURN. 
      LDB PARSB+2   GET NEXT TWO CHARACTERS.
      CPB BLNKS     IF THEY ARE BLANKS, 
      JMP ABORT      THEN PROCESS THE ABORT REQUEST!
      LDB PARSB+1   ELSE, RESTORE <B>,
      JMP READ,I     AND RETURN.
* 
DM4   DEC -4
* 
RDER  NOP 
ASTSK OCT 25000     ASCII "*" IN HIGH BYTE
LINE# NOP           LINE NUMBER COUNTER (FILE INPUT ONLY) 
      SPC 2 
*  ROUTINE TO PRINT ERROR MESSAGE.
* 
*  CALLING SEQUENCE:
* 
*     JSB ERROR 
*      DEF <ERROR MESAGE> 
* 
*  WILL SET ERROR FLAG FOR RETRY
* 
ERROR NOP 
      LDA ERROR,I   GET MESSAGE SPECIFICATION ADDRESS.
      STA *+3       CONFIGURE CALL TO PRINT ROUTINE.
      ISZ $ERR      FORCE MESSAGE TO ERROR DEVICE.
      JSB PRINT     PRINT THE ERROR MESSAGE.
       DEF *-*
      CLA           CLEAR THE 
      STA $ERR         ERROR FLAG.
      ISZ ERROR     BYPASS THE MESSAGE-SPECIFICATION. 
      JMP ERROR,I   AND RETURN
      SPC 1 
$ERR  NOP           ERROR OCCURED FLAG
      SPC 2 
*  PRINT THE ERROR MESSAGE AND REPEAT THE QUESTION ON THE (ERROR LU) DEVICE.
* 
*  CALLING SEQUENCE:
* 
*  JSB QUERY
*  DEF <ERROR MESSAGE>
* 
QUERY NOP           ENTRY/EXIT: ERROR TRANSFER ROUTINE
      ISZ $ERR      SET ERROR FLAG. 
      ISZ RETRY     ALL RETRIES BEEN EXHAUSTED? 
      JMP *+2        NO. TRY AGAIN. 
      JMP ABORT      YES--ABORT THE PROCESS!
* 
      LDA QUERY,I   GET MESSAGE ADDRESS.
      STA *+2 
      JSB PRINT     GO TO PRINT 
       DEF *-*
* 
      JSB PRINT     GO TO REPEAT THE QUESTION 
       DEF OLDAD,I     ON THE (ERROR LU) DEVICE.
      ISZ QUERY     SET RETURN ADDRESS
      JMP QUERY,I    AND RETURN.
      SKP 
*  SUBROUTINE TO CHECK DRIVER TYPE
*   CALLING SEQUENCE:  JSB TTY? 
*                      DEF <LU> 
*    UPON RETURN, A-REG=LU NUMBER, B-REG=0 IF INTERACTIVE 
* 
TTY?  NOP 
      LDA TTY?,I    STORE ADDRESS OF
      STA CHKLU      LU IN EXEC CALL. 
      ISZ TTY?      SET RETURN ADDRESS. 
      JSB IFTTY     CALL IFTTY TO DETERMINE STATUS. 
      DEF *+2 
CHKLU DEF *-* 
      INA           CHANGE IFTTY'S -1 TO 0. 
      LDB A         MOVE TO B-REG.
      LDA CHKLU,I   A-REG := LU NUMBER. 
      JMP TTY?,I    RETURN. 
      SPC 1 
* CALCULATE SLAVE LIST HEADER ADDRESS, <B> --> SRT
* 
CALC  NOP 
      ADB D5        <B> --> STREAM WORD 
      LDB B,I       GET STREAM WORD 
      ADB D2        COMPUTE 
      ADB #LDEF        LIST HEADER
      LDB B,I             ADDRESS 
      JMP CALC,I
      SKP 
*---------------------------------------------------------------+ 
*          DS/1000 SHUTDOWN CODE                                | 
*---------------------------------------------------------------+ 
      IFZ 
*  OPTION 2 IS ENTERED WHEN SYSTEM IS ALREADY INITIALIZED.
* 
OPTN2 EQU * 
      JSB PRINT 
       DEF SHMES     "SHUTDOWN?"
      JSB READ
      CPB YE
      JMP SHUTD 
      JMP TERM      SHUTDOWN NOT WANTED, TERMINATE
* 
      SPC 3 
$1    EQU 1 
$7    EQU 7 
*     SYSTEM SHUTDOWN ROUTINE (RELEASE ALL NETWORK-RELATED RESOURCES) 
* 
SHUTD EQU * 
      JSB PRINT 
       DEF SDHED     "SYSTEM SHUTDOWN"
      LDA #BUSY     CONVERT # ACTIVE TCBS TO ASCII
      JSB DECML 
       DEF SHT.1
      JSB PRINT 
       DEF SHTM1
* 
*     COUNT NUMBER OF ACTIVE REMOTE SESSIONS, SCANNING THE
*     PROCESS NUMBER LIST (CONTAINS REMOTE RTE & REMOTE MPE SESSIONS) 
* 
      CLA           INITIALIZE # OF 
      STA TEMP        ENTRIES COUNTER 
      LDB #PNLH     GET ADDRESS OF PROCESS # LIST 
SHUT. EQU *         START OF PNL-COUNTING LOOP
      SZB,RSS       END OF LIST?
      JMP SHUT0     YES 
DSNR7 LDA B,I       (XLA B,I IF IN DMS) 
      NOP           (RESERVED FOR XLA INSTR. IF DMS)
      ISZ TEMP      BUMP COUNTER
      STA B 
      JMP SHUT.     CONTINUE IN LOOP
* 
SHUT0 EQU * 
      LDA TEMP      CONVERT # SESSIONS TO ASCII 
      JSB DECML 
       DEF SHT.2
      JSB PRINT 
       DEF SHTM2
* 
*     NOW WE'VE PRINTED THE NUMBER OF ACTIVE TCBS AND 
*     SESSIONS, SO GIVE THE GUY A CHANCE TO BACK OUT
*     IF SHUTDOWN WOULD CAUSE ANY OF THE LOCAL SYSTEM 
*     USERS ANY INTERFERENCE.  THIS SAME TEST VERIFIES
*     THAT THIS PERSON HAS AUTHORITY TO SHUT THE SYSTEM 
*     DOWN. 
* 
      JSB NMSCX     OBTAIN & VERIFY NM SECURITY CODE
*                   (RETURN ONLY IF CODES MATCH)
      JSB PRINT     "BEGINNING SHUTDOWN"
       DEF SBEGN
* 
      JSB PGMAD     IF GRPM IS NOT ACTIVE 
       DEF *+2         IGNORE SENDING MESSAGES
       DEF GRPM.+2
      CPB D3        WAITING?
      RSS           . YES OK
      JMP SHUT4     . NO, IGNORE COMMUNICATIONS 
* 
*     CHECK FOR SLAVE PROGRAM-TO-PROGRAM COMMUNICATION ACTIVITY 
      LDA #ST04+1   GET "PTOPM" CLASS NUMBER
      SZA,RSS       ACTIVE? 
      JMP SHUT2     NO. 
* 
*     ISSUE "SO" TO PTOPM, SO AS TO ABORT ALL SLAVES CURRENTLY
*     ACTIVE. 
* 
      CLA           PLACE A ZERO IN PROGRAM NAME
      STA #RQB+#PCB  PORTION OF REQUEST, MEANING
      STA #RQB+#PCB+1  "ABORT ALL SLAVES  " 
      STA #RQB+#PCB+2 
      LDA D6
      STA #RQB+#FCD SAVE PTOP FUNCTION CODE 
      LDA B4
      STA #RQB+#STR SET STREAM TYPE (4) 
      LDA #NODE     LOCAL NODE #
      STA #RQB+#DST SET REQST DESTINATION NODE
      JSB #MAST     SEND REQUEST (NO DATA)
       DEF *+7
       DEF BIT15     NO ABORT 
       DEF L#PCB     SIZE OF REQUEST
       DEF ZERO 
       DEF ZERO        NO DATA ASSOCIATED WITH REQST
       DEF ZERO        NO REPLY DATA
       DEF L#PCB     MAX REPLY LENGTH 
       NOP           #MAST DETECTED ERROR (IGNORE)
      SPC 2 
SHUT2 EQU * 
*     CHECK FOR SLAVE REMOTE DATA BASE ACCESS COMMUNICATION ACTIVITY. 
      LDA #ST10+1   GET "RDBAM" CLASS NUMBER
      SZA,RSS       ACTIVE? 
      JMP SHUT3       NO. 
* 
*     ISSUE A CLEAN-UP REQUEST TO RDBAM, SO AS TO ABORT ALL REMOTE
*     DATA BASE ACCESS PROGRAMS CURRENTLY ACTIVE. 
* 
      CCA           PLACE A -1 IN RDBA INDEX
      STA #RQB+#EHD+1 AND MODE WORDS OF REQUEST,
      STA #RQB+#EHD+2 MEANING "ABORT ALL ACTIVE RDBA SLAVES". 
      LDA D10       SET STREAM TYPE (10). 
      STA #RQB+#STR 
      LDA #NODE     LOCAL NODE NUMBER,
      STA #RQB+#DST   SET REQUEST DESTINATION NODE. 
* 
      JSB #MAST     SEND REQUEST (NO DATA)
       DEF *+7
       DEF BIT15    NO ABORT
       DEF C#FCD    SIZE OF REQUEST 
       DEF ZERO       NO DATA ASSOCIATED WITH REQUEST 
       DEF ZERO 
       DEF ZERO       NO REPLY DATA 
       DEF D7       MAX REPLY LENGTH
       NOP           #MAST DETECTED ERROR (IGNORE). 
      SPC 2 
SHUT3 EQU * 
      JSB RNRQ      LOCK THE QUIESCENCE RN TO 
       DEF *+4         PREVENT NEW REQUESTS FROM
       DEF GLOCK       BEING RECEIVED FROM REMOTE NODES, OR 
       DEF #QRN 
       DEF TEMP1       ISSUED BY LOCAL MASTERS. 
* 
SHUT4 EQU * 
      CCA           LOG OFF ANY REMOTELY CREATED LOCAL
      JSB #DISM        SESSIONS 
      CLA 
      STA ONTWO     CLEAR THE "OPTION 1/2" FLAG 
      STA #NULL     SET # AVAILABLE TCBS TO ZERO
* 
      CLA,INA 
      STA UPLI.     INDICATE PROGRAM SCHEDULED
      LDB SRT,I     <B> --> UPLIN' SRT ENTRY
      JSB SNUFF     KILL UPLIN
* 
*     SEND TIME-OUT INDICATION TO ALL MASTERS CURRENTLY WAITING 
*     FOR REPLIES.
* 
      LDB #MRTH     ADDR OF LIST HEADER 
CKMST EQU * 
      SZB,RSS       END OF LIST?
      JMP SHUT5     YES.
DSNR4 LDA B,I       (CROSS) LOAD ADDR OF NEXT TCB 
      NOP           [RESERVED FOR XLA]
      STA LSTAD     SAVE NEXT TCB ADDRESS 
      ADB =LSEQ#    ADVANCE POINTER TO SEQUENCE NUMBER
DSNR9 LDA B,I       LOAD(CROSS-LOAD) SEQUENCE NUMBER
      NOP           (NECESSARY FOR XLA, IF IN DMS)
      STA TEMP      SAVE SEQUENCE NUMBER, BRIEFLY.
      ADB =LMSCLS-SEQ# ADVANCE POINTER TO SEQUENCE NUMBER 
DSNR5 LDA B,I       (CROSS) LOAD CLASS NUMBER 
      NOP             [RESERVED FOR XLA]
      STA CLASN     STORE 
      JSB EXEC      WRITE ZERO-LENGTH RECORD INTO CLASS 
       DEF *+8         (FORCES DS05 ERROR TO BE RETURNED TO 
       DEF CLS18        USER) 
       DEF ZERO 
       DEF ZERO 
       DEF ZERO 
       DEF ZERO 
       DEF ZERO 
       DEF CLASN     MASTER CLASS # 
       NOP           IGNORE ERRORS
      LDB LSTAD     RECOVER NEXT TCB ADDRESS
      JMP CKMST     GO CHECK FOR ANOTHER MASTER 
      SPC 2 
*     SET UP TO CALL "ABRT" SUBROUTINE, WHICH WILL RELEASE REMAINING
*     RESOURCES 
SHUT5 EQU *         SETUP DATA FOR ABORT ROUTINE
      LDA #SCLR     <RES> DATA AREA 
      LDB LSBFA     <LOCAL> DATA AREA 
      JSB .MVW      MOVE VARIABLES TO LOCAL AREA
       DEF MVSIZ
       NOP
      CLA 
      STA #GRPM     INDICATE GRPM NO LONGER AVAILABLE 
*--   SCAN THRU SLAVE LIST AND CHECK SLAVES 
      JSB .LDX      <X> --> 1ST MONITOR'S SRT 
       DEF @MON,I 
      LDA #LDEF 
      ADA D3
      LDA A,I 
      JSB .CAY      <Y> --> 1ST SLAVE HEADER
      LDB MNMON     -( # OF MONITORS )
SHUT6 JSB .LAY      GET CLASS WORD FROM SLAVE LIST
       DEF $1 
      SZA,RSS       IGNORE IF NOT PRESENT 
      JMP SHUT7 
      JSB .SAX      SAVE CLASS # IN SRT 
       DEF $7 
      LDA D3
      JSB .SAX      INDICATE PROGRAM AND CLASS
       DEF 0
SHUT7 JSB .ADX      <X> --> NEXT SRT ENTRY
       DEF D8 
      JSB .ADY      <Y> --> NEXT SLAVE HEADER 
       DEF D5 
      ISZ B 
      JMP SHUT6 
*--   SETUP FLAGS FOR ABORT ROUTINE 
      LDA D2        CLASS ONLY
      STA MA2.
      STA EX1.
      STA EX2.
      LDA D3        PROGRAM & CLASS 
      STA QXCL. 
      STA RQCV. 
      STA RPCV. 
      STA GRPM. 
      STA RTRY. 
      STA QCLM. 
      STA INCV. 
      STA OTCV. 
      STA RSM.
      INA           RN ONLY 
      STA TBRN. 
      STA QRN.
      STA CLRN. 
      INA           PROGRAM & RN
      STA QZRN. 
      STA MA1.
* 
      JSB ABRT      ABORT ALL PGM/RN/CLASS RESOURCES
* 
      JSB PRINT     "SHUTDOWN COMPLETE" 
       DEF SHTMS
      JMP TERM
      SPC 2 
SHTMS DEF *+2 
      DEF D9
      ASC 9,SHUTDOWN COMPLETED
*     DEFINE REQUEST/REPLY BUFFER FORMAT
      SPC 4 
*---------------------------------------------------------------+ 
*                   SHUTDOWN CONSTANTS                          | 
*---------------------------------------------------------------+ 
      SPC 1 
YE    ASC 1,YE
CLASN NOP 
LSTAD NOP 
SHTM1 DEF *+2 
      DEF D11 
      ASC 8,# ACTIVE TCBS = 
SHT.1 BSS 3         STORAGE FOR # ACTIVE TCBS COUNT(IN ASCII) 
SHTM2 DEF *+2 
      DEF D14 
      ASC 11,# OF REMOTE SESSIONS:
SHT.2 BSS 3         STORAGE FOR # REMOTE SESSIONS 
SDHED DEF *+2 
      DEF D8
      ASC 8,SYSTEM SHUTDOWN 
SBEGN DEF *+2 
      DEF D9
      ASC 9,BEGINNING SHUTDOWN
      XIF 
      SKP 
*---------------------------------------------------------------+ 
*     ABORT ROUTINE. "KILLS" ALL PROGRAMS THAT WERE SCHEDULED,  | 
*     DEALLOCATE CLASS NUMBER AND RESOURCE NUMBERS, AND CLEARS  | 
*     ALL LU'S.                                                 | 
*---------------------------------------------------------------+ 
* 
ABORT EQU * 
      JSB ABRT      CALL SUBROUTINE 
      LDA LINE#     WAS INPUT FROM
      SZA,RSS         A FILE? 
      JMP *+5       NO. 
*     CONVERT LINE NUMBER TO ASCII & PRINT, AS
*     A TROUBLESHOOTING AID TO USER.
      JSB DECML 
       DEF .LIN.
      JSB PRINT 
       DEF .LINX
* 
      JSB PRINT     PRINT "DINIT ABORTED" 
@ABPR  DEF ABRTM
      LDA @ABPR     RETURN ERROR TO 'FATHER' PRGM 
      STA $RTRN 
      JMP TERM
      SPC 2 
ABRT  NOP           SUBROUTINE TO ABORT EVERYTHING
      LDA ONTWO     OPTION 1 OR 2 
      SZA 
      JMP ABRT4     OPTION 2
* 
      CPA #FWAM     IF SAM HAS NOT BEEN ALLOCATED,
      JMP ABRT4       THEN GOTO COMPLETION. 
* 
      LDB SRT,I     <B> --> UPLIN ENTRY 
      JSB SNUFF     "KILL" UPLIN
* 
* 
*     TURN OFF "LISTEN MODE" FOR EACH COMMUNICATION DRIVER
* 
      DLD #NCNT     SET UP NRV SCAN LOOP
      SZA,RSS       NRV?
      JMP ABRT2     NO. 
      DST NRV1
      ADB XMTL.     ADVANCE POINTER TO TRANSMISSON LU WRD 
*                   GET TRANSMISSION LU 
DSNR8 LDA B,I       (XLA B,I IN DMS)
      NOP           (PART OF XLA INSTR. ABOVE IF IN DMS)
      AND XMASK     MASK LU 
      IOR BIT15 
      STA LU1       SAVE FIRST HALF OF DOUBLE-WORD LU 
      LDA CLSTN     CLEAR "DINIT MODE" SUB-FUNCTION 
      STA LU2        SAVE 2ND HALF OF DOUBLE-WORD LU
      STB PRINT     SAVE (B)
      JSB XLUEX     ISSUE "CLEAR LISTEN MODE" CALL TO DRIVER
       DEF *+3
       DEF NBRT3     NO-ABORT, CODE 3 
       DEF LU1
       NOP
      LDB PRINT     RECOVER (B) 
      ADB NRVS.     ADVANCE TO NEXT NRV ENTRY 
      ISZ NRV1     BUMP COUNTER.  DONE? 
      JMP DSNR8     NOT YET DONE
* 
      JSB #RR5      DISABLE LUS IN LV TABLE 
* 
      LDA D2        DE-ALLOCATE 
      JSB #DISM       RSM RESOURCES 
* 
ABRT2 EQU * 
      LDA SRTLN     KILL ALL RESOURCES
      CMA,INA 
      STA MCTR
      LDA SRT 
      STA MPTR
ABRT3 LDB MPTR,I
      ISZ MPTR
      JSB SNUFF     KILL ALL RESOURCES FOR THIS ENTRY 
      ISZ MCTR
      JMP ABRT3     REPEAT TILL DONE
      JSB #RSAX     GO TO THE SYSTEM-RESOURCE 
       DEF *+4        CONTROL-ROUTINE, IN ORDER TO
       DEF B1          RETURN SYSTEM AVAILABLE MEMORY,
       DEF #FWAM        WHICH WAS PREVIOUSLY ALLOCATED. 
       DEF LSECD
      CLA           CLEAR #FWAM FLAG
      STA #FWAM 
      JSB CLEAR     GO TO CLEAR SYSTEM DATA AREA IN <RES>.
* 
ABRT4 EQU * 
      JMP ABRT,I    RETURN TO CALLER
* 
CLSTN OCT 3100      SUBFUNCTION BITS FOR "CLEAR LISTEN MODE" CALL TO DRIVER 
XMASK EQU B377      TRANSMISSION LU FIELD MASK
      SPC 3 
XMTL. EQU B2
NBRT3 OCT 100003    NO-ABORT CONTROL CONTROL
* 
*  ROUTINE TO CLEAR 'DINIT'-INITIALIZED ENTRIES IN <RES>. 
      SPC 1 
CLEAR NOP           ENTRY/EXIT
      LDA #NCLR     INITIALIZE A COUNTER FOR THE
      STA TEMP        SIZE OF THE <RES> AREA TO BE CLEARED. 
      LDB #SCLR     GET A POINTER TO THE START OF THE AREA. 
      CLA 
*     CLEAR THE "ALIEN MESSAGE FORMAT NODES" FLAG, INDICATING 
*     THERE ARE NONE. 
      STA MSCFL 
CLOOP STA B,I         CLEAR THE 
      INB               'DINIT'-INITIALIZED 
      ISZ TEMP            STORAGE LOCATIONS 
      JMP CLOOP             IN 'RES'. 
      JMP CLEAR,I   RETURN
      SKP 
*---------------------------------------------------------------+ 
*     ROUTINE TO "KILL" A PROGRAM OR CLASS OR RN                | 
*                                                               | 
*     ON ENTRY <B> --> SRT ENTRY                                | 
*     NOTE: HAVING A CLASS# AND AN RN ARE MUTUALLY EXCLUSIVE    | 
*---------------------------------------------------------------+ 
* 
SNUFF NOP 
      RBL,CLE,SLB,ERB    RESOLVE INDIRECT ADDRESS 
      LDB B,I               INTO DIRECT ADDRESS 
      STB SNUF5     <B> --> SRT ENTRY 
      LDA B,I       CHECK FLAGS 
      SLA,RSS       WAS PROGRAM SCHEDULED?
      JMP SNUF1     . NO
      LDA B 
      ADA D2        <A> --> PROGRAM NAME
      LDB @OFF      <B> --> WHERE TO PUT IT 
      ADB D2
      JSB .MVW
       DEF D3 
       NOP
      LDA @OFF
      LDB @BUF
      JSB .MVW      MOVE MESSAGE TO BUFFER
       DEF D7 
       NOP
      JSB MESSS     "OFF,PGMNM ,FL" 
       DEF *+4
@BUF   DEF BUF
       DEF D13
       DEF ZERO     NO PRINTED MESSAGE
* 
SNUF1 LDA SNUF5 
      INA 
      LDA A,I       <A> --> CLASS OR RN 
      STA SNUF3 
      STA SNUF4 
      LDA SNUF5,I   CHECK FLAGS 
      RAR 
      SLA,RSS       CLASS # ASSIGNED? 
      JMP SNUF2     . NO
* 
      JSB CLRQ      DEALLOCATE CLASS #
       DEF *+4
       DEF CLCLS
SNUF3  DEF *-*
       DEF ZERO 
       NOP
      CLA 
      STA SNUF3,I   CLEAR OUT CLASS # 
      JMP SNUF6 
* 
CLCLS OCT 140002    DEALLOCATE CLASS, NO WAIT, NO ABORT 
* 
SNUF2 RAR 
      SLA,RSS       RN ASSIGNED?
      JMP SNUF6     . NO
      JSB RNRQ      DEALLOCATE RN 
       DEF *+4
       DEF DALC 
SNUF4  DEF *-*
       DEF PRINT    (DUMMY) 
       NOP
* 
SNUF6 EQU * 
      LDA SNUF5,I 
      LDB A 
      AND =B140000  CLEAR RESOURCE FLAGS
      STA SNUF5,I 
      RBL 
      SSB,RSS       SLAVE MONITOR?
      JMP SNUFF,I   . NO RETURN 
      LDB SNUF5     <B> --> SRT 
      JSB CALC      CALCULATE LIST HEADER ADDRESS 
      LDA @ZERO 
      JSB .MVW      MOVE ZEROS INTO SLAVE HEADER
       DEF D5 
       NOP
      JMP SNUFF,I   AND RETURN
* 
DALC  OCT 140040    GLOBAL DEALLOCATE 
SNUF5 BSS 1 
@ZERO DEF *+1 
      OCT 0,0,0,0,0 
@OFF  DEF *+1 
      ASC 7,OFF,XXXXX ,FL 
BUF   BSS 6 
      SKP 
*---------------------------------------------------------------+ 
*          DINIT MESSAGES                                       | 
*---------------------------------------------------------------+ 
QWMSG DEF *+2 
      DEF D26 
      ASC 26, WARNING! XXXXX IS A REQUIRED PROCESSOR FOR DS/1000! 
MUCHO DEF *+2 
      DEF D15 
      ASC 15,SIZE OF SAM AREA EXCEEDS 32K!
D3MS1 DEF *+2 
      DEF D7
      ASC 7,LU OF HP3000?_
D3MS4 DEF *+2 
      DEF D10 
      ASC 10,LOCAL ID SEQUENCE? _ 
D3MS5 DEF *+2 
      DEF D10 
      ASC 10,REMOTE ID SEQUENCE?_ 
MSG0  DEF *+2 
      DEF D12 
      ASC 12,# ACTIVE TRANSACTIONS? _ 
IVRES DEF *+2 
      DEF D9
      ASC 9,INVALID RESPONSE! 
NOMEM DEF *+2 
      DEF D9
      ASC 9,NO SYSTEM MEMORY! 
MSG4  DEF *+2 
      DEF D16 
      ASC 16,MAX # CONCURRENT HP3000 USERS? _ 
* 
MONMS DEF *+2 
      DEF D7
      ASC 7,MONITOR NAME?_
INVNM DEF *+2 
      DEF D7
      ASC 7,INVALID NAME! 
LOC?  DEF *+2 
      DEF D6
      ASC 6,LOCAL CPU#?_
* 
NUMB? DEF *+2 
      DEF D6
      ASC 6,# OF NODES?_
* 
NODEF DEF *+3 
      DEF *+1 
      DEC 32
      ASC 26, CPU#,LU,TIMEOUT,UPGRADE LEVEL,"N","MA",MA TIMEOUT?
      OCT 6412
      ASC 5,         _
* 
MSG1  DEF *+2 
      DEF D16 
      ASC 16,SYSTEMS CONNECTED TO THIS NODE: _   .... 
* 
MSG2  DEF *+2 
      DEF D5
      ASC 5, HP 1000?_  ....
ERR1  DEF *+2 
      DEF D9
      ASC 9,ANSWER YES OR NO! 
FERMG DEF *+2 
      DEF D5
      ASC 5,FILE ERROR
* 
RNERM DEF *+2 
      DEF B5
      ASC 1, R
"N    ASC 1,N 
      ASC 3,ERROR   " RN ERROR" 
* 
* 
TRFM  DEF *+2 
      DEF D7
      ASC 7,TR FILE ERROR 
* 
FILMG DEF *+2 
      DEF D5
      ASC 5,# FILES? _  ... 
* 
READM DEF *+2 
      DEF D5
      ASC 5,READ ERROR
* 
ABRTM DEF *+2 
      DEF D7
      ASC 7,DINIT ABORTED!
* 
CLSER DEF *+2 
      DEF D8
      ASC 8,CLASS I/O ERROR 
* 
NOCL. DEF *+2 
      DEF D6
      ASC 6,NO CLASS #S 
* 
ENDMG DEF *+2 
      DEF B5
      ASC 5,END DINIT 
* 
UPLUM DEF *+2 
      DEF D10 
      ASC 10,ENABLE LU#[,COST]? _   ... 
* 
SHMES DEF *+2 
      DEF D6
      ASC 6, SHUTDOWN? _
* 
NOSZR DEF *+2 
      DEF D9
      ASC 9,NODE SPEC. ERROR! 
MNAY  DEF *+2 
      DEF D16 
      ASC 16,THIS LU ALREADY HAS A NEIGHBOR!
LUERM DEF *+2 
      DEF B4
      ASC 4,LU ERROR
TOBAD DEF *+2 
      DEF D8
      ASC 8,INVALID TIMEOUT!
INLVL DEF *+2 
      DEF D11 
      ASC 11,INVALID UPGRADE LEVEL! 
* 
      IFN 
.NINZ DEF *+2 
      DEF D12 
      ASC 12,NODE ALREADY INITIALIZED 
      XIF 
* 
.LINX DEF *+2 
      DEF D11 
      ASC 8,ERROR IN LINE # 
.LIN. ASC 3,
* 
CNERR DEF *+2 
      DEF D12 
      ASC 9,INIT FAILED ON LU 
CNER. BSS 3 
* 
* 
      BSS 0         << SIZE OF 'DINIT' >> 
      SPC 1 
* 
*     DEFINE INTERNAL SYMBOLS FOR USE BY "OPTIONAL" EXTERNAL ROUTINES 
* 
#PRNT EQU PRINT 
#READ EQU READ
#PRSB EQU PARSB 
#INBF EQU INBUF 
#PRNL EQU PRNTL 
#EXFR EQU QUERY 
#CLSB EQU CLSUB 
#ABRT EQU ABORT 
#SYSR EQU SYSER 
#MSKD EQU SCHED 
#RNSB EQU RNSUB 
      END DINIT 
                                                                                  