ASMB,Q,R,C
      HED <DSMOD> DS/1000 MAINTENANCE PROGRAM REV 2013
      NAM DSMOD,19,26 91750-16092 REV 2013 800707 ALL 
      SPC 1 
* 
*    NAME:   DSMOD
*    SOURCE: 91750-18192
*    RELOC.: 91750-16192
*    PGMR:   L. WEIMAN
* 
*  ***************************************************************
*  * (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.       *
*  ***************************************************************
      SPC 2 
*  'DSMOD' MAY BE USED TO PERFORM A VARIETY OF NETWORK TABLE AND
*  PARAMETER MODIFICATION FUNCTIONS.  IT CONTAINS THE FOLLOWING CAPABILITIES: 
* 
*     1) RE-ENABLE A LINK 
*     2) DISPLAY THE NETWORK ROUTING VECTOR, AT LOCAL NODE
*     3) CHANGE THE LOCAL NODE'S NRV
*     4) QUIESCE NODE 
*     5) (UN)-QUIESCE NODE
*     6) SCHEDULE ADDITIONAL MONITORS 
*     7) ADJUST TIMNG PARAMETERS
* 
* 
*     'DSMOD' MAY NOT BE RUN UNTIL AFTER THE NODE HAS BEEN INITIALIZED
*     (VIA 'DINIT').
      SPC 2 
* +----------------------------------------------------------------+
* 
* !SCHEDULING TO ENABLE A LINE:                                  !
* +--------------------------------------------------------------+
* 
*   *ON,DSMOD,(LINE LU#),(ERROR LU#)  <DEFAULT ERROR LU =1> 
* 
*    THIS PROCEDURE IS USED TO RE-ENABLE THE LINE INTERFACE FOR A 
*      SINGLE LOGICAL UNIT NUMBER. THERE IS NO INTERACTION WITH THE 
*      USER, UNLESS AN ERROR IS DETECTED. IN THE EVENT OF ERROR 
*      DETECTION, THE USER WILL BE QUERIED ON THE (ERROR LU#) DEVICE. 
* 
*               (INPUT LU# OR FILE),(ERROR LU#)  <DEFAULT = LU#1 FOR BOTH>
*              /
*   *ON,DSMOD,
*              \
*               FI,LE,NM [,SECURITY CODE [,CARTRIDGE NUMBER] ] <ERROR LU=1> 
* 
*    SCHEDULING <DSMOD> 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. 
* 
* +-------------------------------------------------------------------+ 
* !               QUERIES AND VALID RESPONSES:                        ! 
* +-------------------------------------------------------------------+ 
* 
*     NOTES: ANY LINE WHICH BEGINS WITH AN ASTERISK IS TREATED AS A COMMENT.
*      /A (ABORT <DSMOD>) IS A VALID RESPONSE TO ALL QUERIES. 
* 
*      **** ACCEPTABLE RESPONSES--NON-QUIESCENT SYSTEM **** 
* 
*       --------------  TO RE-ENABLE A LINE   ----------------- 
* 
*   /DSMOD: OPERATION?  </L 
*   /DSMOD: ENABLE LU# ? < LU# (LINKED TO COMMUNICATION LINK DRIVER)> 
*        (REPEAT FOR AS MANY AS DESIRED)
*   /DSMOD: ENABLE LU# ? </E (TERMINATE RE-ENABLING PROCESS)> 
* 
*       ---------------- TO DISPLAY THE NODAL ROUTING VECTOR -------- 
* 
*   /DSMOD: OPERATION?  </N 
*   NRV SPECIFICATIONS: 
*   LOCAL NODE#:  NNNNN, NO. OF NODES=  NNNNN 
*    NODE= NNNNN, LU=    NN, TO=   NNN
*   LAST <APLDR> LOAD-NODE= NNNNN (OR "NONE")  [DISPLAYED FOR RTE-M & -L ONLY]
* 
*        --------------- TO ADJUST SYSTEM TIMING  --------------------
*   /DSMOD: OPERATION?  </T 
*   TIMING MODIFICATION--CURRENT VALUES:
* 
*   MASTER T/O   = NNNNNN 
*   SLAVE  T/O   = NNNNNN 
*   REMOTE-BUSY  = NNNNNN 
*   REMOTE-QUIET = NNNNNN 
*   MAXIMUM HOP COUNT = NNNNN 
*   /DSMOD: NETWORK MANAGEMENT SECURITY CODE? 
*      THE NETWORK MANAGEMENT SECURITY CODE MUST BE ENTERED CORRECTLY,
*      OR 'DSMOD' WILL ABORT.  IF A NON-ASCII CODE IS ENTERED, THE
*      QUESTION WILL BE REPEATED. 
* 
* 
*   /DSMOD: MASTER T/O [5 TO 1275 SECONDS] ? <5 TO 1275 (NUMERIC RESPONSE)> 
*           [ RESOLUTION = 5 SECONDS ]       (DEFAULT VALUE = 45) 
* 
*   /DSMOD: SLAVE T/O  [5 TO 1275 SECONDS] ? <5 TO 1275 (NUMERIC RESPONSE)> 
*           [ RESOLUTION = 5 SECONDS ]       (DEFAULT VALUE = 30) 
* 
*   /DSMOD: REMOTE-BUSY RETRIES [1 TO 10]? <1 TO 10(NUMERIC)> 
*                                            (DEFAULT VALUE =3) 
* 
*   /DSMOD: REMOTE-QUIET WAIT [0 TO 7200 SEC.]? <0 TO 7200 (NUMERIC)> 
*                                             (DEFAULT VALUE =0)
*   /DSMOD: MAXIMUM HOP COUNT?
*                                 (ENTER ANY POSITIVE NUMBER) 
* 
*          ---------------- TO TEMPORARILY SUSPEND NETWORK TRANSACTIONS ----- 
*                           (I.E., "QUIESCE" THE NODE)
* 
*   /DSMOD: OPERATION?  </Q 
*   /DSMOD: SYSTEM QUIESCENCE 
*   /DSMOD: NETWORK MANAGEMENT SECURITY CODE? 
*      THE NETWORK MANAGEMENT SECURITY CODE MUST BE ENTERED CORRECTLY,
*      OR 'DSMOD' WILL ABORT.  IF A NON-ASCII CODE IS ENTERED, THE
*      QUESTION WILL BE REPEATED. 
*   END DSMOD  (TERMINATION MESSAGE)
* 
*     NOTE: WHEN QUIESCENT, <UPLIN> PRINTS "SYSTEM IS QUIESCENT" ON LU#1. 
* 
*             --------- TO SCHEDULE ADDITIONAL MONITORS ------- 
* 
*   /DSMOD: OPERATION?  </S 
*   /DSMOD: MONITOR NAME?  <AAAAA (MONITOR NAME)> 
*   /DSMOD: MONITOR NAME?  </E (TERMINATE INPUT)> 
*   /DSMOD: OPERATION?  </E (TERMINATE 'DSMOD')>
*   END DSMOD  (TERMINATION MESSAGE)
* 
*                   --------- TO CHANGE THE NRV  -----------------
*   /DSMOD: OPERATION? CN 
*   /DSMOD: NETWORK MANAGEMENT SECURITY CODE? 
*      THE NETWORK MANAGEMENT SECURITY CODE MUST BE ENTERED CORRECTLY,
*      OR 'DSMOD' WILL ABORT.  IF A NON-ASCII CODE IS ENTERED, THE
*      QUESTION WILL BE REPEATED. THE CODE IS NOT ECHOED TO THE TERMINAL, 
*      FOR SECURITY REASONS.
*     /DSMOD:NODE # TO CHANGE? <NN>  ENTER NODE NUMBER.  MUST ALREADY 
*                                    EXIST IN NRV.
* 
*     THE CURRENT NRV ENTRY FOR THAT NODE IS PRINTED.  YOU
*     MAY CHANGE ANY OR ALL FIELDS, EXCEPT CPU NUMBER. SIMPLY DEFAULT 
*     A FIELD IF YOU WISH IT TO RETAIN THE SAME VALUE.
*     THE QUESTION WILL BE REPEATED UNTIL YOU ENTER "/E" TO EXIT
*     (OR NON-NUMERIC VALUE). 
* 
*     /DSMOD: LU,TIMEOUT,UPGRADE LEVEL[,N]? 
* 
*     THE "N" AT THE END IS REQUIRED WHEN THE ENTRY IS A NEIGHBOR TO
*     THE LOCAL NODE, AND MUST BE CORRECT, OR "NEIGHBOR ADDRESSING" 
*     CANNOT BE USED. 
* 
*     AFTER EACH ENTRY HAS BEEN MADE, THE NEW VALUES ARE
*     PRINTED.
      SKP 
*            --------------- TO LIST ALL COMMANDS ------------------------
* 
*   /DSMOD: OPERATION?  <?? 
* 
*   ??: LIST COMMANDS 
*   /A: ABORT!
*   /E: TERMINATE 
*   /I: CHANGE 3000 ID SEQ
*   /L: RE-ENABLE LINE
*   /N: DISPLAY NRV 
*   /Q: QUIESCE NODE
*   /S: SCHEDULE MONITOR(S) 
*   /T: ADJUST TIMING 
*   CN: CHANGE NRV
* 
*   QUIESCENT SYSTEM ONLY:
* 
*   /R: RE-START NODE 
* 
*      **** ACCEPTABLE RESPONSES--QUIESCENT SYSTEM, ONLY **** 
* 
* 
*   /DSMOD: OPERATION?  </R (RESTART FROM QUIESCENT MODE)>
*   /DSMOD: QUIESCENT RE-START
*   /DSMOD: NETWORK MANAGEMENT SECURITY CODE? 
*      THE NETWORK MANAGEMENT SECURITY CODE MUST BE ENTERED CORRECTLY,
*      OR 'DSMOD' WILL ABORT.  IF A NON-ASCII CODE IS ENTERED, THE
*      QUESTION WILL BE REPEATED. 
      SKP 
* 
*  ERROR MESSAGES--INTERPRETATION AND APPROPRIATE ACTION: 
*  -----------------------------------------------------
* 
*      [ ALL MESSAGES ARE PRECEDED BY "/DSMOD:"]
      SPC 1 
*   CLASS I/O ERROR - A REQUIRED CLASS NUMBER CANNOT BE ALLOCATED.
*                     <DSMOD> IS ABORTED. THIS ERROR MAY REQUIRE
*                     RE-GENERATION WITH A LARGER ALLOTMENT OF CLASS NO'S.
* 
* 
*   END DSMOD - 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 <DSMOD> 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 <DSMOD>, USING /A COMMAND, AND THEN LOAD 
*                        THE MONITOR INTO THE SYSTEM. RE-START <DSMOD>. 
* 
*   ERROR: STAT: AAAAA - THE MONITOR'S STATUS IS NOT 'DORMANT', AND 
*                        THEREFORE IT CANNOT BE SCHEDULED.
*                        ABORT <DSMOD>, 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 <DSMOD>. RETRY. 
* 
*   INVALID RESPONSE! - OPERATOR ENTRY ERROR. RETRY.
*                       (NO RETRY ALLOWED FOR QUIESCENT OR RE-START MODE) 
* 
*   DSMOD ABORTED - /A COMMAND ENTERED, OR IRRECOVERABLE ERROR OCCURRED.
*                   EXPLANATION WILL HAVE BEEN PRINTED PRIOR TO THIS
*                   MESSAGE.  IF INPUT FROM A FILE, LINE # OF LAST ERROR
*                   ALSO PRINTED. 
* 
*   LU ERROR - IMPROPER LU# SPECIFIED, OR LU# NOT TIED TO COMMUNICATION 
*              LINK DRIVER.  RETRY. 
* 
*   NODE SPEC. ERROR - IMPROPER NODAL REFERENCE VALUE. <DSMOD> ABORTED! 
*                      CORRECT INITIALIZATION ANSWERS AND RESTART <DSMOD>.
*                      THIS MESSAGE OCCURS WHEN CHANGING THE NRV IF 
*                      THE NRV TABLE IS EMPTY, OR IF THE SPECIFIED NODE 
*                      NUMBER CANNOT BE LOCATED IN THE TABLE, OR IF 
*                      THE NEW NODE NUMBER ALREADY EXISTS IN THE TABLE. 
* 
*   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;
*              <DSMOD> 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 <DSMOD>.
* 
*     NO MSG.CNVRTS!  --MAY OCCUR WHEN CHANGING THE NRV, IF AN ENTRY IS MADE
*                       FOR A NODE WHICH DOES NOT SPECIFY THE SAME LEVEL
*                       NUMBER AS THE LOCAL NODE, AND THE MESSAGE CONVERTERS
*                       WERE NOT SCHEDULED WHEN THE NODE WAS INITIALIZED. 
      SPC 2 
      EXT READF,CLOSE,OPEN,RNRQ,PRTN,REIO,PGMAD,IFTTY 
      EXT EXEC,MESSS,$LIBR,$LIBX,$BMON,#PKUP,PARSE
      EXT CLRQ,XLUEX,D$LID,D$RID
      EXT #INCV,#OTCV,#MSTO,#QRN,#LDEF,#GTOP,$OPSY
      EXT #BREJ,#SVTO,#WAIT,#NODE,#NRV,#NCNT
      EXT #RFSZ,#BUSY,#MAQS,#RR4,#RR5,#RR6
      EXT #LNOD,#LEVL,#MDCT 
      EXT #FWAM,#MHCT,#LU3K,EXEC
      EXT .MVW,.MBT,.SBT
      EXT .LDX,.CMW,#NMSC 
      SPC 2 
*     DEFINE ENTRY POINTS FOR REMOTE SESSION SET-UP ROUTINES
      ENT PRNT#,READ#,INBF#,PRNL#,ERFR#,EXFR#,ABRT# 
* 
      EXT #DSSM 
      SUP 
      SKP 
DSMOD 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
* 
*     SET "OPTYP" ACCORDING TO LOCAL NODE OP-SYSTEM TYPE. 
*     RELEVENT BITS:
*     BIT 15 = 1 IF DMS NODE, ELSE 0
*     BIT 0  = 1 IF RTE-III OR IV.  0 FOR RTE-M OR L
      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,
      DLD XLBAI 
      DST DSMD0 
      DST DSMD1 
      DST DSMD2 
      DLD MWII
      DST STNOP 
      DLD MWFI      PICK UP MWF INSTRUC 
      DST STND2 
*                   PICK UP READ LU 
NODMS EQU * 
      CLB           INITIALIZE EQUIPMENT TYPE CODE
      STB ERFLG     CLEAR ERROR FLAG
      STB TYPEQ      TO INDICATE AN INTERACTIVE DEVICE. 
      STB CLFLG     CLEAR CLASS I/O FLAG. 
* 
      LDA NAME      GET THE INPUT LU--IF ANY. 
      LDB DEFLU     IF LU NOT SUPPLIED, USE DEFAULT.
      SZA           SUPPLIED? 
      LDB A         YES, USE SUPPLIED VALUE 
      AND =B37400   MASK OFF LOW ORDER BITS 
      SZA           TEST FOR LU OR FILE:
      CLB           FILE...CLEAR FILE FLAG
      STB RLU       SAVE READ LU OR 0 (FILE). 
      STB XLU         AND SAVE PURE LU
      SZB,RSS       LU OR FILE? 
      JMP LSTN1     FILE
* 
      JSB TTY?      CHECK 
      DEF RLU        READ LU. 
      SZB,RSS       TTY?
      IOR B400      YES...SET IN ECHO BIT 
      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 
* 
      LDA #FWAM     HAS THIS NODE 
      SZA              BEEN INITIALZED? 
      JMP *+3       YES, CONTINUE 
      JSB SYSER     NO--CATASTROPHIC ERROR. 
      DEF NINIT       "NODE NOT INITIALIZED" & ABORT
* 
      JSB TTY?      CHECK 
      DEF ERLU       ERROR LU.
      SZB           INTERACTIVE?
SDFLU LDA DEFLU     NO...SET TO DEFAULT.
      IOR B400
      STA ERLU
* 
      JSB CHCKN     SEE IF FILE 
      JMP OPTN2     NOT FILE
* 
      LDA NAME      WAS 1ST PARAMETER 
      SSA              NEGATIVE?
      JMP CLASS         YES--GO SET UP TO GET SPECIAL "CLASS FILE"
* 
      JSB OPENX     OPEN THE FILE 
      JMP *+2       OPEN ERROR! 
      JMP OPT20     OPEN WAS SUCCESSFUL.
* 
      JSB SYSER     SYSTEM ERROR
      DEF TRFM      "TR FILE ERROR" 
      SKP 
*  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 
* 
*     A SPECIAL "CLASS FILE" OPTION HAS BEEN BUILT IN, TO ALLOW 
*     AUTOMATIC INITIALIZATION IN NODES WITH NO RESIDENT DISC.
*     THE INITIALIZATION COMMANDS ARE PASSED TO DINIT VIA A CLASS 
*     BUFFER, AND A DUMMY DCB IS SET UP TO LOOK LIKE IT'S BEEN
*     READ FROM A DISC, I.E., "FAKED" SO READF WILL TRANSFER
*     EACH RESPONSE TO DINIT AS READ. 
* 
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 OPT20     CONTINUE WITH NORMAL PROCESSING.
      SKP 
OPTN2 JSB CHCKN     SEE IF THEY WANT TO READ FROM A FILE
      JMP *+2       NO...IT'S AN LU.
      JMP OPT20     YES 
      CPB #LU3K     IS IT THE HP3000 LU?
      JMP OPT23     .YES
      CPA B65       IS IT DVA65?
      JMP OPT22     YES 
      CPA B66       DVA66?
      JMP OPT22 
      SKP 
*     HERE TO OBTAIN NEXT NEW COMMAND 
* 
OPT20 EQU * 
      JSB READ      GET THE RESPONSE. 
       DEF OPMES
      CPB /E        REQUEST TO TERMINATE? 
      JMP TERM        YES. GO TO OBLIGE.
      CPB "EX"
      JMP TERM
      CPB /S        REQUEST TO SCHEDULE MONITOR(S)? 
      JMP SKEDM       YES. GO TO SET UP TO SCHEDULE.
      CPB /T        REQUEST TO MODIFY TIMING? 
      JMP TIME        YES.
      CPB /N        REQUEST TO DISPLAY NRV? 
      JMP DSNRV        YES. SATISY THE REQUEST. 
      CPB /I
      JMP IDSEQ 
      CPB CN        CHANGE NRV? 
      JMP CHNRV     YES.
      CPB /P        CHANGE NON-SESSION ACCESS PASSWORD? 
      JMP CUPSW     YES 
      CPB /U        CHANGE DEFAULT SESSION USER-NAME? 
      JMP CUSNM     YES 
      JSB RNRQ      GO TO RTE 
      DEF *+4        TO OBTAIN THE
      DEF GLCNW       STATUS OF THE 
      DEF #QRN         SYSTEM QUIESCENT 
      DEF TEMP1         RESOURCE NUMBER.
      LDB PARSB+1   GET THE USER COMMAND, AGAIN.
      LDA TEMP1     GET THE STATUS OF #QRN. 
      CPA B7        IF THE SYSTEM IS ALREADY QUIESCENT, 
      JMP QCHNG       THEN ONLY /R IS ALLOWED; ELSE,
      CPB /L        REQUEST TO RE-ENABLE A LINE?
      JMP OPT21       YES. GO TO DETERMINE THE LU NUMBER. 
      CPB /Q        REQUEST TO MAKE THIS NODE QUIESCENT?
      JMP QUIES       YES.GO TO PROCESS THE REQUEST.
QCHNG CPB /R        REQUEST TO RE-START FROM QUIESCENCE?
      JMP REQUE     YES. GO TO START IT UP AGAIN. 
      JSB PRNTX     EXPLAIN THE COMMANDS
      DEF EXPMS       TO THE CONFUSED USER. 
      JMP OPT20     REPEAT THE QUESTION.
      SKP 
*     HERE ON "CHANGE NRV" COMMAND (CN) 
* 
CHNRV EQU * 
      JSB NMSCX     OBTAIN & VERIFY NETWORK MANAGEMENT SECURITY CODE
*                   (RETURN ONLY IF CODES MATCH)
* 
CHN0  EQU * 
      DLD #NCNT     SET UP POINTERS, COUNTERS, ETC. 
      SZA,RSS       IS THERE AN NRV SET UP? 
      JMP FRMER     NO, ERROR!
      STA NCNT
      STB NPNT
      CMA,INA       SAVE
      STA NRVSZ       POSITIVE # NODES
      LDA #NODE     SAVE LOCAL NODE 
      STA XNODE        NUMBER IN LOCAL STORAGE
* 
      JSB READ      GET RESPONSE
       DEF NODEX
      CPA B1        NUMERIC?
      RSS           YES, GO ON... 
      JMP OPT20     NON-NUMERIC, GO GET NEW COMMAND.
      SPC 2 
CHN1  EQU * 
      STB NRV1      SAVE NODE # WE'RE SEARCHING FOR 
      LDB NPNT      BEGIN SEARCH OF NRV FOR SPECIFIED NODE
DSMD0 LDA B,I       [XLA B,I IF DMS]
      NOP           [REQUIRED FOR XLA]
      CPA NRV1      MATCH?
      JMP CHN2      YES, ALLOW IT TO BE CHANGED 
      ADB NRVS.     NO, ADVANCE TO NEXT ENTRY 
      STB NPNT      SAVE POINTER
      ISZ NCNT      ANY MORE IN TABLE?
      JMP DSMD0     YES, CONTINUE SEARCH
      JMP FRMER     TABLE EMPTY, NODE NOT FOUND!
      SPC 2 
CHN2  EQU * 
      JSB PRNRV     PRINT THIS NRV ENTRY
      JSB READ      GET RESPONSE. 
       DEF NODEF
* 
      SZA,RSS       LU DEFAULTED? 
      JMP STND.       YES, SKIP TESTS FOR IT. 
      CPA B2        ASCII?
      JMP FRMER     YES, ERROR! 
      LDA PARSB+1 
      AND =B177400  LU > 255? 
      SZA 
      JMP FRMER     YES, ERROR! 
      LDA PARSB+1    RECOVER LU 
      STA TEMP        SAVE LU 
      LDA NRV3        INCLUDE REMAINING BITS FROM 3RD NRV WORD
      AND =B177400
      IOR TEMP
      STA NRV3
* 
* 
STND. EQU * 
      LDB PARSB+4   GET TIMEOUT SPECIFICATION TYPE. 
      CPB B2        IF THE PARAMETER IS INVALID,
      JMP FRMER      THEN SCREAM ABOUT IT!
      LDA PARSB+5   GET TIME-OUT SPECIFICATION
      SZB,RSS       DEFAULTED?
      JMP MSGFM       YES, LEAVE FIELD AS IS
      SSA           T/O<0?
      JMP FRMER     YES, ERROR
      SZA,RSS       ZERO? 
      JMP STND5 
      CMA,INA 
      LDB A 
      ADB D1275 
      SSB 
      JMP FRMER 
      JSB CFSEC 
      ALF,ALF       POSITION TO HIGH HALF-WORD
* 
STND5 EQU * 
      STA TEMP
      LDA NRV2
      AND B377
      IOR TEMP
      STA NRV2
* 
MSGFM EQU *         HERE TO MERGE UPGRADE LEVEL NUMBER
      LDB PARSB+8   IS THIS NUMERIC, OR 
      CPB B2           DEFAULTED? 
      JMP FRMER     NO, SCREAM ABOUT IT.
      LDA PARSB+9   GET UPGRADE LEVEL NUMBER
      SSA           NEGATIVE? 
      JMP FRMER     YES, ERROR! 
      AND B17       MASK
      SZB,RSS       DEFAULTED?
      JMP STND6     YES, SKIP THIS BLOCK
      STA TEMP
      ADA NMXLV      > MAX LEVEL? 
      SSA,RSS 
      JMP FRMER        YES, THIS IS AN ERROR. 
* 
      LDA NRV2
      AND B177. 
      IOR TEMP      INCLUDE THE UPGRADE LEVEL NUMBER
      STA NRV2
* 
STND6 EQU * 
      LDA PARSB+12  IS "NEIGHBOR" FIELD DEFAULTED?
      SZA,RSS 
      JMP STND7 
      LDB PARSB+13  LOAD "NEIGHBOR" INDICATION, IF ANY
      LDA NRV3      LOAD LU WORD
      AND NOT8       CLEAR "NEIGHBOR" INDICATOR 
      CPB "N        "NEIGHBOR" ?
      IOR B400      YES, SET "NEIGHBOR" BIT 
      STA NRV3
* 
STND7 EQU * 
      JSB CKNRE     CHECK THIS NRV ENTRY (RETURN ONLY IF OK)
* 
      LDA NRV2      GET LEVEL # 
      AND B17       MASK LEVEL FIELD
      STA B 
      LDA #LEVL     GET LOCAL NODE'S LEVEL
      AND B17        MASK LEVEL FIELD 
      CMA,INA 
      ADA B 
      SSA,RSS       IS NEW ENTRY LEVEL < LOCAL? 
      JMP STNX      NO, WE DON'T NEED TO WORRY ABOUT CONVERTERS 
* 
*     WHEN THE NEW NODE IS OF A LOWER LEVEL THAN THE LOCAL, 
*     WE NEED TO CHECK WHETHER THE MESSAGE CONVERTERS ARE 
*     SCHEDULED.  IF NOT, THEN REJECT THE NEW ENTRY.
* 
      LDA #INCV     CHECK CLASS NUMBER (THAT'S THE EASIEST WAY) 
      SZA 
      JMP STNY      CLASS # ASSIGNED, CHECK FOR OTCNV'S CLASS 
*     MESSAGE CONVERTERS NOT SCHEDULED. THAT'S A BAD ERROR! 
NCVTR EQU * 
      JSB ERROR 
      DEF NCVT. 
      JMP CHN0
* 
STNY  EQU * 
      LDA #OTCV     DOES OTCNV HAVE A CLASS #?
      SZA,RSS 
      JMP NCVTR     NO, GIVE ERROR! 
* 
STNX  EQU * 
      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 
* 
      JSB PRNRV     PRINT NEW NRV ENTRY FOR USER
      JMP CHN0      GO LOOK FOR ANOTHER NODE TO CHANGE
* 
NRVSZ NOP           # WORDS IN NRV
NOT8  OCT 177377     NOT BIT 8
      SPC 2 
      SKP 
* 
FRMER EQU * 
      JSB ERROR 
      DEF NOSZR     NODE SPEC. ERROR
* 
      JMP OPT20     RETRY NRV SET-UP
* 
LUERX JSB SYSER 
      DEF LUERM 
* 
* 
* 
* 
* * * * 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.
XNODE NOP           LOCAL SAVE OF LOCAL NODE #
* 
*     NRV ENTRY TEMPLATE.  DO NOT DISTURB ORDER!
* 
NRV1  NOP           STORAGE FOR CPU NUMBER
NRV2  NOP           STORAGE FOR TIME-OUT/UPGRADE LEVEL #
NRV3  NOP           STORAGE FOR COMMUNICATION LINK LU 
@NRV1 DEF NRV1
NMXLV DEC -2        - (MAXIMUM UPGRADE LEVEL ALLOWED + 1) 
      SKP 
      SKP 
* 
*     SUBROUTINE TO CHECK VALIDITY OF AN NRV ENTRY
* 
CKNRE NOP 
      LDA NRV3      CHECK THAT LU SPECIFIED 
      AND B377      MASK LU PART... 
      SZA,RSS          IS A BONA FIDE COMMUNICATION 
      JMP *+4              LU 
      JSB LUTST 
      JMP LUERX     ILLEGAL LU--TAKE ERROR EXIT.
      JMP LUERX     IT'S NOT A GOOD LU! SCREAM ABOUT IT!
      LDB NRV1      LOAD CPU NUMBER 
      LDA NRV3      IF THIS ENTRY IS FOR THE LOCAL NODE,
      CPB #NODE        SET THE "NEIGHBOR" BIT.
      IOR B400
      STA NRV3
      LDA NRV2      LOAD UPGRADE LEVEL
      CPB #NODE     SAME AS LOCAL NODE? 
      LDA #LEVL     YES, FORCE LOCAL NODE'S UPGRADE LEVEL 
      STA NRV2
      JMP CKNRE,I   RETURN TO CALLER
      SKP 
*  ROUTINE TO OPEN ANSWER FILE. 
* 
OPENX NOP 
* 
      JSB OPEN      OPEN THE 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? 
      ISZ OPENX      NO--RETURN VIA P+2.
      JMP OPENX,I   RETURN. 
* 
      SKP 
SKEDM EQU *         <E>=1 TO DISALLOW DEFAULT SCHEDULING. 
      JSB MSET      GO TO SCHEDULE MONITOR(S).
      JMP OPT20     RETURN TO CHECK FOR OTHER OPTIONS.
* 
OPT21 JSB LUIN      GO TO ENABLE THE LINE.
      JMP OPT20     CHECK FOR OTHER OPTIONS.
* 
OPT22 STB NRV3     SAVE THE SPECIFIED LOGICAL UNIT NO.
      JSB LUSET     GO TO SET UP THE LOGICAL UNIT NO. 
      JMP OPT2E     * RTE-DETECTED ERROR--TRY AGAIN! *
      JMP TERM      DON'T ASK FOR MORE INPUT
* 
OPT23 JSB EN3K      RE-ENABLE HP3000 LINK 
      JMP TERM      AND TERMINATE 
* 
OPT2E JSB ERROR     REPORT THE
      DEF LUERM      " LU ERROR", 
      JMP TERM        AND TERMINATE.
* 
GLCNW OCT 100006    GLOBAL LOCK/CLEAR--NO WAIT. 
CUSNM EQU *         CHANGE DEFAULT SESSION USER-NAME
      CLA,RSS       CALL #DSSM W/ (A) = 0 
* 
CUPSW EQU *         CHANGE PASSWORD 
      CLA,INA       CALL #DSSM W/ (A) = 1 
      JSB #DSSM     CALL EXTERNAL ROUTINE FOR THIS SET-UP 
      JMP OPT20     GET NEXT OPTION 
      SKP 
*  NRV DISPLAY ROUTINE. 
* 
DSNRV LDA #NCNT     GET ADDRESS OF NO. OF NODES.
      STA NCNT      SAVE THE NUMBER OF NODES. 
      CMA,INA,SZA,RSS  ANYTHING SPECIFIED?
      JMP OPT20      NO--IGNORE THE REQUEST!
      JSB CNVTD     CONVERT + NODE COUNT TO ASCII 
      DBL NNODS 
* 
      LDA #NODE     GET LOCAL NODE NUMBER.
      JSB CNVTD     CONVERT IT TO ASCII,
      DBL LOCLN      AND CONFIGURE THE MESSAGE. 
      JSB PRNTX     PRINT THE FIRST MESSAGE 
      DEF NODM1      WITHOUT A HEADER.
* 
      LDA #NRV      GET THE NRV ADDRESS,
      STA NPNT        AND SAVE THE POINTER. 
* 
DLOOP EQU * 
      JSB PRNRV     PRINT THIS NRV ENTRY
      LDA NPNT      UPDATE POINTER
      ADA NRVS. 
      STA NPNT
* 
      ISZ NCNT      ANY MORE TO PROCESS?
      JMP DLOOP      YES, CONTINUE. 
      SPC 1 
      LDA OPTYP     GET THE SYSTEM SPECIFICATION. 
      SLA           FOR DISC-BASED RTE SYSTEMS, 
      JMP OPT20      THE PROCESS IS COMPLETE. 
* 
      LDA #LNOD     GET THE DOWN-LOAD NODE NUMBER.
      CPA M1        IF IT HAS NOT BEEN USED,
      JMP PRAPM      THEN IGNORE THE CONVERSION.
      JSB CNVTD     CONVERT TO ASCII, 
      DBL APNOD      AND CONFIGURE THE MESSAGE. 
* 
PRAPM JSB PRNTX     PRINT <APLDR> NODE NUMBER (OR "NONE"),
      DEF APMSG      WITHOUT A HEADER.
      JMP OPT20     PROCESS COMPLETE--CHECK FOR NEW REQUEST.
      SKP 
*     SUBROUTINE TO PRINT NEXT NRV ENTRY LINE 
*     NPNT --> NEXT NRV ENTRY 
* 
PRNRV NOP 
* 
      LDA NPNT      MOVE ENTRY TO LOCAL STORAGE 
      LDB @NRV1 
      JSB .LDX
      DEF NRVS. 
STND2 JSB .MVW (MWF IF IN DMS)
      DEF NRVS. 
      NOP 
* 
      LDA NRV1      GET A NODE NUMBER.
      CPA M1        BLANK ENTRY?
      JMP BLEN      YES, PRINT  "BLANK ENTRY" 
* 
      JSB CNVTD     CONVERT & CONFIGURE 
      DBR NODEN 
* 
      LDA NRV2      GET TIMEOUT/MSG FORMAT NUMBER 
      AND B377      ISOLATE THE MSG. FORMAT # 
      JSB CNVTD     CONVERT 
      DBL .LVL.      & CONFIGURE. 
      STB TEMP      <B> --> NEXT AVAILABLE BYTE 
* 
      LDA NRV2      OBTAIN
      ALF,ALF          TIME-OUT 
      AND B377           VALUE
      SZA           ZERO? 
      IOR DM256       NO, SET ALL BITS IN UPPER BYTE
      CMA,INA           MAKE THE VALUE POSITIVE (OR 0). 
      MPY B5        CONVERT # INTERVALS TO # SECONDS
      JSB CNVTD     CONVERT TO ASCII
      DBR NRVTO 
      LDA NRV3      GET COMMUNICATION LU
      AND B377      MASK LU 
      JSB CNVTD     CONVERT AND CONFIGURE 
      DBR VECTR        (<B> RETURNS NEXT ADDRS) 
* 
      LDB @SPC      <B> --> SPACES
      LDA NRV3
      AND B400      IS THIS NODE
      SZA               A NEIGHBOR OF OURS? 
      LDB @.N.      . YES <B> -->  ,(N) 
      LDA 1 
      LDB TEMP      <B> --> NEXT AVAILABLE BYTE 
      JSB .MBT      MOVE IN SPACES OR NEIGHBOR INDICATION 
      DEF D6
      NOP 
      JSB PRNTX     PRINT NODAL ADDRESS DATA
      DEF NRVMS      WITHOUT THE HEADER.
      JMP PRNRV,I   RETURN TO CALLER
* 
BLEN  JSB PRNTX 
      DEF BLEN1 
      JMP PRNRV,I   RETURN TO CALLER
* 
BLEN1 DEF *+2 
      DEF D8
BLNKS ASC 7,   BLANK ENTRY
      OCT 6412
      SPC 3 
NODM1 DEF *+2 
      DEF NODMX 
      ASC 10,NRV SPECIFICATIONS:
      OCT 6412
      ASC 7, LOCAL NODE#: 
LOCLN ASC 3,
      ASC 8, NO. OF NODES = 
NNODS ASC 3,
NODMX ABS *-NODM1-2 
* 
NRVMS DEF *+2 
      DEF NODML 
      ASC 3, NODE=
NODEN ASC 3,
      ASC 2, LU=
VECTR ASC 3,
      ASC 5, TO(SEC.)=
NRVTO ASC 3,
      ASC 4, LEVEL= 
.LVL. ASC 5,             UPGRADE LEVEL & NEIGHBOR INDICATION
NODML ABS *-NRVMS-2 
* 
APMSG DEF *+2 
      DEF D17 
      ASC 13, LAST <APLDR> LOAD-NODE= 
APNOD ASC 3,NONE
      OCT 6412
@.N.  DBL *+1 
      ASC 3,,(N)
* 
BT137 OCT 37700 
      SKP 
*  CHANGE 3000 ID SEQUENCE
* 
IDSEQ EQU * 
      JSB READ      GET THE RESPONSE
       DEF DSMS4
      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 READ
       DEF DSMS5
      LDA PRNTL 
      CPB /E
      CLA 
      LDB D$RID 
      INB           SKIP WORD FOR RETURN PARAM. 
      JSB STRID 
      JMP OPT20 
* 
* 
DSMS4 DEF *+2 
      DEF D10 
      ASC 10,LOCAL ID SEQUENCE? _ 
DSMS5 DEF *+2 
      DEF D10 
      ASC 10,REMOTE ID SEQUENCE?_ 
* 
* SUBROUTINE TO STORE ID SEQ 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
      SKP 
*  NETWORK TIMING-VALUE MODIFICATION SECTION
* 
TIME  JSB GETV      GO TO GET CURRENT VALUES. 
      JSB PRNTX     PRINT SECTION HEADER. 
      DEF TMES      " TIMING MODIFICATION"
* 
      JSB NMSCX     OBTAIN & VERIFY NM SECURITY CODE
*                   (RETURN ONLY IF CODES MATCH)
      JSB GTIME     GET MASTER TIMEOUT VALUE
      DEF MSTMG       MESSAGE 
      DEF D1275       UPPER LIMIT 
      JMP TI.SV       DEFAULT ESCAPE
      JSB CFSEC     CONVERT TIME IN SECONDS TO
      STA #MSTO       COUNT OF 5-SEC INTERVALS
* 
TI.SV JSB GTIME     GET SLAVE TIMEOUT VALUE 
      DEF SLVMG 
      DEF D1275 
      JMP TI.BR 
      JSB CFSEC 
      STA #SVTO 
* 
TI.BR JSB GTIME     GET BUSY REJECT RETRY WAIT
      DEF BZMG
      DEF D10 
      JMP TI.WA 
      ADA M1
      ALF,ALF       BITS 11-8 HAVE BUSY RETRY COUNT 
      AND B7400     ISOLATE THEM
      STA #BREJ 
* 
TI.WA JSB GTIME     GET REMOTE-QUIET WAIT 
      DEF WAITM 
      DEF D7200 
      JMP TI.GH 
      STA #WAIT 
* 
TI.GH EQU *         GET MAXIMUM HOP COUNT 
      JSB GTIME 
      DEF MHCM
      DEF D327. 
      JMP TI.GD 
      STA #MHCT 
* 
TI.GD EQU *         GET MAXIMUM LINE "DOWN" COUNTER 
      JSB GTIME 
      DEF MDCM
      DEF D327. 
      JMP OPT20 
      STA #MDCT 
      JMP OPT20     DONE WITH THIS SECTION
      SKP 
*     SUBROUTINE TO ASK FOR, GET, AND VERIFY A TIMING PARAMETER 
* 
GTIME NOP 
      LDA GTIME,I   GET MSG ADDR
      STA GTI1
      ISZ GTIME 
      LDA GTIME,I   GET MAX ALLOWED VALUE ADDR
      STA VCKAD     SAVE IT 
      ISZ GTIME 
* 
GTI2  EQU * 
      JSB READ      GET RESPONSE
GTI1  NOP 
      SZA,RSS       ANY CHANGE DESIRED? 
      JMP GTIME,I   NO
      CPA B1        NUMERIC RESPONSE? 
      JMP VCHEK     YES, CHECK THE LIMITS 
      CPB /E        DONE WITH TIMING PARAMETERS?
      JMP OPT20     YES 
* 
GTER  JSB ERXFR     INVALID RESPONSE
      DEF IVRES 
      JMP GTI2
* 
VCHEK SSB           VALUE NEGATIVE? 
      JMP GTER      YES, ERROR
      LDA GTI1
      CMB,INB,SZB,RSS WAS VALUE NON-ZERO? 
      CPA TI.WA+1   NO, IS THIS QUIESCENT WAIT? 
      RSS           YES, LOWER LIMIT OK 
      JMP GTER      NO, INPUT ERROR 
      LDA 1 
      ADB VCKAD,I   MAX-INPUT VALUE 
      SSB           TOO LARGE?
      JMP GTER      YES 
      ISZ GTIME     NO, RETURN IT IN A
      JMP GTIME,I 
* 
      SKP 
* 
*  ROUTINE TO GET CURRENT SYSTEM TIMING VALUES FOR REPORT TO USER.
* 
GETV  NOP           ENTRY/EXIT
      LDA #MSTO     GET MASTER TIMEOUT VALUE. 
      ADA DM256     FORM FULL DATA WORD.
      CMA,INA       MAKE IT POSITIVE. 
      MPY B5        CONVERT TO SECONDS
      JSB CNVTD     GO TO CONVERT IT TO ASCII.
      DBR MSVAL+5   SPECIFY DESTINATION OF RESULT.
* 
      LDA #SVTO     GET SLAVE TIMEOUT VALUE.
      ADA DM256     FORM FULL DATA WORD.
      CMA,INA       MAKE IT POSITIVE. 
      MPY B5        CONVERT TO SECONDS
      JSB CNVTD     GO TO CONVERT IT TO ASCII.
      DBL SLVAL+5   SPECIFY DESTINATION OF RESULT.
* 
      LDA #BREJ     GET REMOTE-BUSY RETRY COUNT.
      ALF,ALF       RIGHT JUSTIFY 
      IOR DM16      SET BITS 15-4 
      CMA           MAKE IT POSITIVE
      JSB CNVTD     GO TO CCONVERT IT TO ASCII. 
      DBL RTVAL+6   SPECIFY DESTINATION OF RESULT.
* 
      LDA #WAIT     GET QUIESCENT-WAIT INTERVAL VALUE.
      CMA,INA       MAKE IT POSITIVE. 
      JSB CNVTD     GO TO CONVERT IT TO ASCII.
      DBR WTVAL+6   SPECIFY DESTINATION OF RESULT.
      LDA #MHCT     LOAD "MAXIMUM HOP COUNT"
      CMA,INA 
      JSB CNVTD     CONVERT 
      DBR GTNUM+7 
      LDA #MDCT     MAKE VALUE POSITIVE 
      CMA,INA 
      JSB CNVTD     CONVERT & PRINT MSG 
      DBL MDVAL+13
      JMP GETV,I    RETURN. 
      SKP 
* CNVTD- CONVERTS BINARY TO DECIMAL (LEFT JUST) 
*     <A> = BINARY
* 
CNVTD NOP           ENTRY/EXIT: ASCII CONVERSION ROUTINE. 
      STA FLAG
      LDA @SPC
      LDB CNVTD,I 
      JSB .MBT      CLEAR AREA
      DEF D6
      NOP 
      LDA FLAG
      LDB CNVTD,I   <B> --> OUTPUT AREA 
      ISZ CNVTD 
      STA NBR 
      SSA,RSS       NEGATIVE NUMBER?
      JMP DEC1      . NO
      CMA,INA 
      STA NBR 
      SSA           SPECIAL LOW NUMBER (-32768)?
      JMP DEC4      . YES 
      LDA DASH
      JSB .SBT
DEC1  STB ADR       SAVE OUTPUT POINTER 
      LDA DTBL
      STA D         D --> DIVISOR TABLE 
      LDA DM4 
      STA CTR 
      STA FLAG      CLEAR OUTPUT FLAG (SET TO 1)
* 
DEC2  LDB NBR 
      LSR 16
      DIV D,I 
      ISZ D 
      STB NBR       REMAINDER 
      SZA           OUTPUT OTHER THAN ZERO? 
      JMP *+4       . YES OUTPUT IT 
      LDB FLAG
      SSB           OK TO OUTPUT? 
      JMP DEC3      . NO FINISH LOOP
      IOR "0" 
      STA FLAG      SET OUTPUT FLAG (BIT15=0) 
      LDB ADR       <B> --> OUTPUT FIELD
      JSB .SBT
      STB ADR       SAVE OUTPUT FIELD 
DEC3  ISZ CTR 
      JMP DEC2
* 
      LDA NBR       <A> := ONES DIGIT 
      LDB ADR       <B> --> OUTPUT
      IOR "0" 
      JSB .SBT
      JMP CNVTD,I   AND RETURN
* 
DEC4  LDA @32K      MOVE IN -32768
      JSB .MBT
      DEF D6
      NOP 
      JMP CNVTD,I 
* 
@32K  DBL *+1 
      ASC 3,-32768
DTBL  DEF *+1 
      DEC 10000 
      DEC 1000
      DEC 100 
      DEC 10
* 
"0"   OCT 60
DASH  ASC 1,--
@SPC  DBL *+1 
      ASC 3,
* 
CTR   BSS 1 
FLAG  BSS 1         BIT15=1 NO OUTPUT; BIT15=0 OUTPUT 
D     BSS 1 
ADR   BSS 1 
NBR   BSS 1 
* 
      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
      SKP 
* 
TMES  DEF *+2 
      DEF TMESL     MESSAGE LENGTH
      ASC 18,TIMING MODIFICATION--CURRENT VALUES: 
      OCT 6412
MSVAL ASC 9,MASTER T/O=XXXXXX 
      OCT 6412
SLVAL ASC 8,SLAVE T/O=XXXXXX
      OCT 6412
RTVAL ASC 9,REMOTE-BUSY=XXXXXX
      OCT 6412
WTVAL ASC 10,REMOTE-QUIET=XXXXXX
      OCT 6412
GTNUM ASC 11,MAX. HOP COUNT=XXXXXX
      OCT 6412
MDVAL ASC 16,MAX LINE DWN CNT IN 5 MIN=XXXXXX 
      OCT 6412
TMESL ABS *-TMES-2
* 
MSTMG DEF *+2 
      DEF D16 
      ASC 16,MASTER T/O [5 TO 1275 SECONDS]?_ 
SLVMG DEF *+2 
      DEF D16 
      ASC 16,SLAVE T/O [5 TO 1275 SECONDS] ?_ 
BZMG  DEF *+2 
      DEF D15 
      ASC 15,REMOTE-BUSY RETRIES[1 TO 10]?_ 
WAITM DEF *+2 
      DEF D17 
      ASC 17,REMOTE-QUIET WAIT[0 TO 7200 SEC]?_ 
MHCM  DEF *+2 
      DEF D16 
      ASC 16,MAXIMUM HOP COUNT[1 TO 32767]? _  ...
MDCM  DEF *+2 
      DEF D20 
      ASC 20,MAX LINE DWN CNT IN 5 MIN?[1 TO 32767]?_  .... 
* 
VCKAD EQU GETV
* 
      SKP 
*  SUBROUTINE TO VERIFY THAT LU IS LINKED TO COMMUNICATION LINK DRIVER. 
* 
LUTST NOP 
      LDA NRV3      GET LU #
      IOR BIT15 
      STA LU1         CONFIGURE FOR 'XLUEX' CALL
      CLA           CLEAR 2ND WORD
      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 
      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 
LU2   NOP           NOTE: MUST FOLLOW 'LU1' IMMEDIATELY!
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       STORE LU
      LDA B3000     SET FOR ENABLE LISTEN REQUEST 
      STA LU2       SAVE THE CONFIGURED CONTROL WORD. 
* 
      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           ROTATE STATUS 
      SLA           WAS THERE AN INITIALIZATION ERROR?
      JMP *+4       .YES
* 
*  SEND "UP" INDICATION TO GRPM IF OLD LINK 
      LDA NRV3      <A> = LU #
      JSB #RR4
      JMP LUSET,I       RETURN TO THE CALLER. 
* 
      LDA NRV3
      AND B377
      JSB CNVTD     CONVERT LU NUMBER TO ASCII
      DBL CNER. 
      JSB PRINT     AND PRINT ERROR 
      DEF CNERR 
      JMP LUSET,I   RETURN TO CALLER
      SKP 
*   SUBROUTINE TO RE-ENABLE HP3000 LU 
* 
*      TURN OFF QUEX. UPLIN WILL BRING IT BACK UP, AND QUEX WILL
*      GO THROUGH ITS ABORT CYCLE.
EN3K  NOP 
      JSB MESSS     CALL RTE MESSAGE PROCESSOR. 
      DEF *+3 
      DEF OFFQX 
      DEF D9
      NOP 
      JMP EN3K,I    RETURN
* 
OFFQX ASC 5,OF,QUEX,1 
      SKP 
*     HERE ON ANY ABORT CONDITIONS
*     WILL CLEAR ALL LU'S, FLAGS, 
*      DE-ALLOCATE CLASS NUMBERS, 
*       AND TERMINATE ALL MONITORS. 
*     CALLING SEQUENCE
*     JMP ABORT 
* 
ABORT EQU * 
      JSB PRINT     PRINT "DSMOD ABORTED" 
@ABPR DEF ABRTM 
      LDA @ABPR     RETURN ERROR TO 'FATHER' PRGM 
      STA $RTRN 
*  PROGRAM TERMINATION PROCESSOR. 
* 
TERM  EQU * 
      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 
*  COMMUNICATION LINE ENABLING ROUTINE. 
* 
LUIN  NOP 
      JSB READ      READ A RECORD 
       DEF UPLUM
      CPA B1        WAS INPUT BINARY? 
      JMP SAVLU       YES. GO TO PROCESS THE LU.
      CPB /E        END OF LIST?
      JMP LUIN,I      YES. RETURN 
LUERR JSB ERXFR 
      DEF LUERM     "LU ERROR"
      JMP LUIN+3    TRY AGAIN 
* 
SAVLU STB NRV3      SAVE TEMPORARILY. 
      CPB #LU3K     HP3000 LU?
      JMP DT005       YES 
*     GO VERIFY THAT LU IS LINKED TO BONA FIDE COMMUNICATION
*     DRIVER. 
      JSB LUTST 
      JMP LUERR     NOT AN LU --- ERROR 
      JMP LUERR     NOT A COMM. DRIVER----ERROR 
      JSB LUSET     GO TO SET UP & ENABLE THE LU. 
      JMP LUERR     * RTE-DETECTED ERROR--TRY AGAIN! *
* 
      JMP LUIN+1    GO TO REQUEST ANOTHER LU NUMBER.
* 
DT005 JSB EN3K      ENABLE HP3000 LU
      JMP LUIN+1    GO TO REQUEST ANOTHER LU NUMBER 
      SKP 
D0    DEC 0 
D2    DEC 2 
D3    DEC 3 
D12   DEC 12
D15   DEC 15
D16   DEC 16
D17   DEC 17
D20   DEC 20
D32   DEC 32
D255  DEC 255 
D1275 DEC 1275
D7200 DEC 7200
DM4   DEC -4
DM5   DEC -5
DM16  DEC -16 
DM17  DEC -17 
DM100 DEC -100
DM256 DEC -256
B17   EQU D15 
B65   OCT 65
B66   OCT 66
B77   OCT 77
B377  OCT 377 
B400  OCT 400 
B7400 OCT 7400
B3000 OCT 3000
B177. OCT 177760
D327. DEC 32767 
SD3   OCT 100003
SD13  OCT 100015
M1    EQU CNODE 
* 
*     NOTE: DO NOT CHANGE ORDER OF RLU & XLU
* 
RLU   NOP 
XLU   NOP 
* 
TEMP  NOP 
XSBAI XSB A,I       DMS: CROSS-STORE <B> VIA ALTERNATE MAP. 
XLBAI XLA B,I       CROSS-LOAD
MWII  MWI                MOVE TO ALTERNATE MAP
      NOP           (THIS 'NOP' REQ'D HERE!)
MWFI  MWF           MOVE FROM ALTERNATE MAP 
      NOP           (THIS 'NOP' REQ'D HERE!)
* 
TEMP1 NOP 
/A    ASC 1,/A
/E    ASC 1,/E
"EX"  ASC 1,EX
/I    ASC 1,/I
/L    ASC 1,/L
/N    ASC 1,/N
/P    ASC 1,/P
/Q    ASC 1,/Q
/R    ASC 1,/R
/S    ASC 1,/S
/T    ASC 1,/T
/U    ASC 1,/U
CN    ASC 1,CN
TYPEQ NOP 
CLFLG NOP 
OPTYP NOP 
      SKP 
*  CLASS NUMBER ALLOCATION SUBROUTINE.
* 
*  ENTER: <A>&<B> - DON'T CARE (DESTROYED ON RETURN). 
*         <P+1>   - CLASS NUMBER ADDRESS. 
* 
CLSUB NOP           ENTRY/EXIT: CLASS SUBROUTINE. 
      LDB CLSUB,I   GET THE CLASS NUMBER ADDRESS. 
      ISZ CLSUB     SET RETURN TO <P+2>.
      LDA B,I       GET THE CLASS NUMBER--IF ANY
      ALR,RAR       REMOVE BUFFER-SAVE BIT(#14) 
      SEZ,RSS       IF REQUEST TO GET A CLASS,
      CLA             USE ZERO CLASS NUMBER.
      IOR CLREQ      SET NO-WAIT/CLASS-SAVE BITS(15,13).
      STA B,I       SAVE MODIFIED CLASS NO. SPECIFICATION.
      STB CLSAD     CONFIGURE THE CALL WITH CLASS NO. ADDR. 
      SEZ           DE-ALLOCATION REQUEST?
      JMP DEALC       YES.
* 
      JSB CLRQ      ALLOCATE A CLASS NUMBER 
      DEF *+4 
      DEF CLACD     CLASS ALLOCATION CODE 
CLSAD NOP           CLASS NUMBER ADDRESS STORED HERE
      DEF ZERO      DO NOT ASSIGN OWNERSHIP 
      JMP CLERR     --ERROR RETURN
      SSA           WAS CLASS NUMBER ALLOCATED? 
      JMP NOCL#     NO CLASS NUMBERS AVAILABLE
* 
* 
      LDA CLSAD,I   SET PROPER BITS IN CLASS NUMBER 
      ALR,RAR       CLEAR "NO WAIT" BIT 
      IOR CBITS     SET "SAVE BUFFER" & "NO DE-ALLOCATE" BITS 
      STA CLSAD,I 
      JMP CLSUB,I   RETURN TO CALLER
* 
DEALC JSB CLRQ      DE-ALLOCATE THE CLASS 
      DEF *+3 
      DEF CLDAL     CLASS NUMBER DE-ALLOCATION CODE 
      DEF CLSAD,I 
      NOP           (IGNORE ERRORS) 
* 
      JMP CLSUB,I   RETURN TO CALLER
* 
CLACD OCT 140001    ALLOCATE CLASS, NO-WAIT, NOABORT
CLDAL OCT 140002    DE-ALLOCATE CLASS, NO-WAIT, NO ABORT
CLS21 OCT 100025
CLREQ OCT 120000
CBITS OCT 60000 
* 
NOCL# EQU *         HERE IF NO CLASS NUMBER 
      JSB SYSER     CATASTROPHIC ERROR: 
      DEF NOCL.       NO CLASS NUMBERS
CLERR JSB SYSER     GO TO INFORM THE USER OF A
      DEF CLSER       CATASTROPHIC CLASS-PROCESSING ERROR.
      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 
*     ROUTINE TO ASK FOR, OBTAIN & VERIFY A SECURITY CODE 
*     SPECIFIED IS IN ASCII.
* 
SCODX NOP 
      LDA SCODX,I   LOAD ADDRESS OF "PROMPT" MESSAGE
      STA SCOD.     SAVE IN-LINE
      ISZ SCODX     BUMP RETURN POINTER 
      JSB SWPLU     TEMPORARILY SUPPRESS THE "ECHO" BIT 
* 
SCOD0 EQU * 
      JSB READ      INPUT RESPONSE
SCOD. NOP 
      CPA B2        RESPONSE ASCII? 
      RSS           YES,... 
      JMP SCOD0     NO, REPEAT QUESTION 
      JSB SWPLU     RESTORE "ECHO" BIT
      LDB PARSB+1   RECOVER SECURITY CODE 
      SPC 1 
      UNL 
      JSB S 
      LST 
      JMP SCODX,I   RETURN. 
* 
      SPC 1 
*     SUBROUTINE TO OBTAIN NETWORK MANAGEMENT ACCESS SECURITY CODE
NMSCX NOP 
      JSB SCODX 
      DEF SECNM     "NETWORK MANAGEMENT SECURITY CODE?" 
      CPB #NMSC     CODES MATCH?
      JMP NMSCX,I   YES, RETURN 
      JMP ABORT     NO--TOUGH LUCK
* 
*     SUBROUTINE TO SWITCH 'RLU' AND 'XLU' (XLU = RLU W/O ECHO BIT) 
SWPLU NOP 
      DLD RLU 
      SWP 
      DST RLU 
      JMP SWPLU,I   RETURN TO CALLER
      SPC 1 
SECNM DEF *+2 
      DEF D17 
      ASC 17,NETWORK MANAGEMENT SECURITY CODE?_ 
* 
      UNL 
S     NOP 
      BLF,BLF 
      CMB 
      JMP S,I 
      LST 
      SKP 
*  SYSTEM QUIESCEING ROUTINE (SUSPEND NETWORK COMMUNICATIONS).
* 
*  [ CAUTION: DO NOT MAKE CHANGES TO <SECOD>,<QUIES>, OR <REQUE> RTNS.] 
* 
QUIES JSB PRINT     " SYSTEM QUIESCENCE"
      DEF QHED
      JSB NMSCX     OBTAIN & VERIFY NM SECURITY CODE
*                   (RETURN ONLY IF CODES MATCH)
      JSB RNRQ      GO TO RTE 
      DEF *+4         TO REQUEST
      DEF B2            A GLOBAL LOCK 
      DEF #QRN            UPON THE QUIESCENT
      DEF TEMP1             RESOURCE NUMBER.
* 
*  LOOP TO WAIT FOR TCB TO GO TO ZERO 
* 
QLOOP EQU * 
      LDA #BUSY 
      SZA,RSS 
      JMP DISAB 
      JSB EXEC      GO TO SLEEP FOR 5 SEC 
       DEF *+6
       DEF D12
       DEF D0 
       DEF D2 
       DEF D0 
       DEF DM5
      JMP QLOOP 
      JSB #MAQS     SEE IF MA IS DONE 
* 
*  LOOP TO DISABLE ALL LINKS IN NRV 
* 
DISAB EQU * 
      DLD #NCNT 
      SZA,RSS       IS NRV THERE? 
      JMP DISLV     .NO, SKIP DISABLE LOOP
      STA NCNT
      STB NPNT
      ADB XMTL.     POINT TO LU 
DSMD1 LDA B,I 
      NOP 
      AND XMASK 
      IOR BIT15 
      STA LU1 
      LDA CLSTN 
      STA LU2 
      STB NPNT
      JSB XLUEX 
       DEF *+3
       DEF SD3
       DEF LU1
       NOP
      LDB NPNT
      ADB NRVS. 
      ISZ NCNT
      JMP DSMD1 
* 
DISLV EQU * 
      JSB #RR5      DISABLE ALL LUS IN LV TABLE 
      JSB PRINT 
       DEF QEND 
      JMP TERM      GO TO TERMINATION.
* 
XMASK EQU B377
CLSTN OCT 3100
XMTL. DEC 2 
      SKP 
*  RE-START A FORMERLY QUIESCED SYSTEM. 
* 
*  [ CAUTION: DO NOT MAKE CHANGES TO <SECOD>,<QUIES>, OR <REQUE> RTNS.] 
* 
REQUE JSB PRINT 
      DEF RQHED     " QUIESCENT RE-START" 
      JSB NMSCX     OBTAIN & VERIFY NM SECURITY CODE
*                   (RETURN ONLY IF CODES MATCH)
* 
*  LOOP TO ENABLE LINKS IN NRV
* 
      DLD #NCNT 
      STA NCNT
      STB NPNT
      ADB XMTL. 
DSMD2 LDA B,I 
      NOP 
      AND XMASK 
      STA NRV3
      STB NPNT
      JSB LUSET 
      LDB NPNT
      ADB NRVS. 
      ISZ NCNT
      JMP DSMD2 
      JSB #RR6      ENABLE ALL RR LINKS 
      JSB RNRQ      GO TO RTE 
      DEF *+4         TO REQUEST
      DEF B4            AN UNLOCKING OF 
      DEF #QRN            THE QUIESCENT 
      DEF TEMP1             RESOURCE NUMBER.
      JMP OPT20     CHECK FOR OTHER OPTIONS.
* 
      SPC 1 
QHED  DEF *+2 
      DEF D9
      ASC 9,SYSTEM QUIESCENCE 
QEND  DEF *+2 
      DEF D10 
      ASC 10,SYSTEM IS QUIESCENT
RQHED DEF *+2 
      DEF D9
      ASC 9,QUIESCENT RE-START
      SKP 
*                  DEFINE TOTAL # OF MONITORS 
* 
*     [ ADD 1 TO THE VALUE FOR EACH NEW MONITOR TO BE ADDED ] 
* 
#MON  EQU 11
MNMON ABS -#MON     DEFINE NEGATIVE NUMBER OF MONITORS. 
      SPC 1 
NAMA  DEF NAMES 
      SPC 1 
NAMES ASC 3,DLIST   DIRECTORY LISTING MONITOR.
B1    DEC 1         STREAM 1
ZERO  OCT 0         NO ABORT! 
* 
CNSLM ASC 3,CNSLM   HP3000 CONSOLE MONITOR
B2    DEC 2         STREAM 2
      OCT 100000    ABORT O.K.
* 
      ASC 3,EXECW   SCHEDULE-WITH-WAIT MONITOR. 
B3    DEC 3         STREAM 3
      OCT 100000    ABORT O.K.
* 
      ASC 3,PTOPM   PROGRAM-TO-PROGRAM MONITOR. 
B4    DEC 4         STREAM 4
      OCT 0         NO ABORT! 
* 
      ASC 3,EXECM   REMOTE EXEC-REQUEST MONITOR.
B5    DEC 5         STREAM 5
D5    EQU B5
      OCT 0         NO ABORT! 
* 
RFAM  ASC 3,RFAM    REMOTE FILE ACCESS MONITOR. 
D6    DEC 6         STREAM 6
B6    EQU D6
      OCT 0         NO ABORT! 
* 
      ASC 3,OPERM   REMOTE OPERATOR-REQUEST MONITOR.
B7    DEC 7         STREAM 7
D7    EQU B7
      OCT 100000    ABORT O.K.
* 
      ASC 3,VCPMN   VIRTUAL CONTROL PANEL MONITOR 
D8    DEC 8         STREAM 8
B10   EQU D8
      OCT 0         NOT ABORTABLE!
* 
      ASC 3,PROGL   ABSOLUTE PROGRAM-LOADING MONITOR. 
D9    DEC 9         STREAM 9
      OCT 0         NO ABORT! 
* 
      ASC 3,RDBAM   REMOTE DATA BASE ACCESS MONITOR 
D10   DEC 10        STREAM 10 
      OCT 0         NO ABORT! 
* 
      ASC 3,APLDX   MINI-APLDR
D11   DEC 11        STREAM 11 
      OCT 100000    ABORT OK! 
      SKP 
* 
*     ROUTINE TO SCHEDULE USER-SPECIFIED SLAVE MONITORS.
* 
MSET  NOP           ENTRY/EXIT: MONITOR SCHEDULING RTN. 
MLOOP LDA MNMON     INITIALIZE A COUNTER
      STA MCNT        FOR THE NO. OF MONITORS TO SCHEDULE.
      LDB NAMA      INITIALIZE THE
      STB NAMPT       PROGRAM NAME-ARRAY POINTER. 
* 
* 
      JSB READ      GET THE USER'S RESPONSE.
       DEF MONMS
      CPB /E        ALL DONE? 
      JMP MSET,I      YES. RETURN FOR NEXT OPERATION. 
      CPA B2        IF RESPONSE WAS ASCII-ALPHA. CHARACTERS,
      RSS            THEN SKIP TO CHECK FOR A VALID NAME; 
      JMP NAMER       ELSE, INFORM THE USER OF HIS ERROR! 
* 
*     VERIFY THAT PROGRAM NAMED IS ONE OF THE DS/1000 MONITORS
* 
      LDB NAMPT     POINT TO FIRST NAME.
MCOMP STB NAMPT     SAVE THE POINTER. 
      LDA PARS2     ADDRESS OF USER'S MONITOR NAME. 
      JSB .CMW      COMPARE THE THREE WORDS.
      DEF B3
      NOP 
      JMP MFOUN     ALL COMPARE--GO TO SCHEDULE.
      NOP           NO COMPARISON.
      ADB B2        ADD OFFSET FOR NEXT NAME ENTRY. 
      ISZ MCNT      HAVE ALL OF THE NAMES BEEN CHECKED? 
      JMP MCOMP       NO. GO TO CHECK THE NEXT ONE. 
* 
NAMER JSB ERROR     INFORM THE USER OF HAVING SUPPLIED AN 
      DEF INVNM       " INVALID NAME!"
      JMP MLOOP     GO BACK TO TRY AGAIN. 
* 
      SKP 
MFOUN EQU * 
      JSB MSKED     GO TO SCHEDULE THE MONITOR. 
      JMP MLOOP     GO TO ASK FOR THE NEXT NAME.
* 
PARS2 DEF PARSB+1 
CNSDF DEF CNSLM 
RFMDF DEF RFAM
SCHNW OCT 100012
STMPT NOP 
NAMPT NOP 
MCNT  NOP 
      SPC 1 
*  DO NOT CHANGE ORDER OF 'MCLAS' & 'IDAD'  * 
      SPC 1 
MCLAS NOP 
IDAD  NOP 
* 
QUES  ASC 2,MON?
ASTAT ASC 2,STAT
SMES  DEF *+2 
      DEF D9
      ASC 3,ERROR:
ERCOD ASC 3,    : 
SNAM  ASC 3,XXXXX 
MONMS DEF *+2 
      DEF D7
      ASC 7,MONITOR NAME?_
INVNM DEF *+2 
      DEF B7
      ASC 7,INVALID NAME! 
* 
NODEF DEF *+2 
      DEF D15 
      ASC 15,LU,TIMEOUT,UPGRADE LEVEL[,N]?_  .... 
* 
@SNAM DEF SNAM
* 
      SKP 
*  SUBROUTINE TO SCHEDULE A MONITOR & INITIALIZE ITS LIST-HEADER ENTRY. 
* 
MSKED NOP           ENTRY/EXIT: MONITOR SCHEDULER.
      LDA NAMPT     GET THE NAME-ARRAY POINTER. 
      CPA CNSDF     ABOUT TO SCHEDULE <CNSLM>?
      RSS           YES. CHECK FURTHER. 
      JMP GETID     NO. GO AHEAD AND SCHEDULE 
      LDB #LU3K     IS HP3000 CONNECTED?
      SZB,RSS       YES. GO AHEAD AND SCHEDULE. 
      JMP MSKED,I   NO. IGNORE SCHEDULING OF <CNSLM>
* 
GETID JSB PGMAD     GO TO GET MONITOR'S ID SEGMENT ADDRESS. 
      DEF *+2 
      DEF NAMPT,I   ADDRESS OF MONITOR'S NAME.
      SZA,RSS       IS THE MONITOR PRESENT? 
      JMP MON?        NO. INFORM THE USER.
      STA IDAD        YES. SAVE I.D. SEGMENT ADDRESS. 
      LDA B         GET MONITOR'S STATUS INTO <A>.
      AND B17       ISOLATE THE MONITOR'S STATUS. 
      SZA           IS IT DORMANT?
      JMP STERR       NO. INFORM USER OF ERROR. 
* 
      JSB CLSUB      GET A CLASS NUMBER 
      DEF MCLAS       FOR THE MONITOR.
      LDB NAMPT     GET THE NAME-ARRAY POINTER. 
      ADB B3        ADVANCE TO THE STREAM-LIST ENTRY. 
      LDA B,I       GET STREAM NUMBER 
      ADA B2         COMPUTE
      ADA #LDEF       LIST HEADER 
      LDA 0,I           ADDRESS.
      INA           POINT TO CLASS NUMBER IN HEADER 
      STA STMPT     SAVE FOR 'RES' INITIALIZATION.
      INB           ADVANCE TO THE ABORT-FLAG ENTRY.
      STB PRNTX     SAVE ADDRESS
* 
      LDA NAMPT     GET THE NAME-ARRAY POINTER
      CPA RFMDF     IF 'RFAM' IS BEING SCHEDULED, THEN
      JSB FILIN      GET THE FILE COUNT FOR IT. 
* 
      LDA MCLAS     GET CLASS NO. & 
      STA STMPT,I   STORE INTO STREAM LIST-HEADER IN 'RES'. 
      ISZ STMPT     BUMP POINTER TO 3RD WORD
      LDA NAMPT     MOVE MONITOR NAME 
      LDB STMPT         TO
      JSB .MVW            SLAVE STREAM
      DEF D3              HEADER
      NOP 
* 
*     SET SIGN BIT IN 3RD WORD OF STREAM HEADER IF MONITOR IS 
*     ABORTABLE.
* 
      LDA STMPT,I 
      IOR PRNTX,I   MERGE ABORTABLE-BIT (IF PRESENT)
      STA STMPT,I   RESTORE IN STREAM HEADER
      SKP 
* 
      JSB EXEC      GO TO RTE 
      DEF *+5         TO SCHEDULE 
      DEF SCHNW         THE MONITOR 
      DEF NAMPT,I         WITHOUT WAIT. 
      DEF MCLAS             SCHEDULING PARAMETER #1.
      DEF ERLU                SCHEDULING PARAMETER #2.
      JMP STCOD     * ERROR--REPORT TO USER * 
      SZA           WAS IT CORRECTLY SCHEDULED? 
      JMP STERR       NO--INCORRECT STATUS ERROR. 
* 
      JMP MSKED,I       RETURN TO THE CALLER (<A>=STATUS).
* 
MON?  DLD QUES      GET THE MONITOR-MISSING INDICATOR.
      JMP STCOD     SAVE FOR THE ERROR MESSAGE. 
STERR DLD ASTAT     GET THE STATUS-PROBLEM INDICATOR. 
STCOD DST ERCOD     SAVE THE ERROR CODE.
* 
      LDA NAMPT     MOVE THE MONITOR NAME 
      LDB @SNAM      FOR USE IN 
      JSB .MVW         ERROR MESSAGE
      DEF B3
      NOP 
* 
      JSB ERROR     GO TO PRINT THE 
      DEF SMES        ERROR MESSAGE.
      JMP MSKED,I   RETURN TO THE CALLER. 
      SPC 3 
*     SUBROUTINE TO GET SIZE OF OVERFLOW FILE FOR USE BY 'RFAM' 
* 
FILIN NOP 
      JSB READ      GET RESPONSE
       DEF FILMG
      CPA B1        INPUT NUMERIC?
      JMP GFIL2     YES 
* 
      JSB ERXFR     "FILE ERROR"
      DEF FERMG 
      JMP FILIN+3   RETRY 
* 
GFIL2 STB #RFSZ     SAVE NUMBER OF FILES
      JMP FILIN,I     AND RETURN TO CALLER. 
      SKP 
*  SUBROUTINE TO PRINT MESSAGES ON INTERACTIVE TERMINALS--ONLY. 
* 
*  CALLING SEQUENCES: 
* 
*  JSB PRINT....PRINT:" /DSMOD:<MESSAGE>"    JSB PRNTX....PRINT:"<MESSAGE>" 
*  DEF MESSAGE                               DEF MESSAGE
* 
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 RDER      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 D20         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 ERFLG     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
      STA PRTLU     SAVE AS PRINT LU
* 
      SKP 
      JSB REIO      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,/DSMOD: 
MSGBF BSS 20
* 
*     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 SYSAD     CONFIGURE CALL TO PRINT ROUTINE.
      ISZ ERFLG     SET ERROR FLAG. 
      JSB PRINT 
SYSAD NOP 
      JMP ABORT     AFTER MESSAGE...ABORT 
      SKP 
*     SUBROUTINE TO READ FROM A SELECTED INPUT DEVICE 
*     WILL PARSE THE INPUT AND PLACE RESULT IN A BUFFER 
*     CALLED PARSB. IF FIRST PARAMETER = '/A' WILL GO TO 'ABORT'. 
*     CALLING SEQUENCE: 
* 
*     JSB READ
*      DEF MESSAGE TO BE PROMPTED 
*     UPON RETURN A REG=PARSB, B REG=PARSB+1
* 
READ  NOP 
      LDB READ,I
      STB .PRAD 
      ISZ READ
      LDA DM4       ALLOW THREE 
      STA RETRY      ERROR-RETRIES. 
READA EQU * 
      JSB PRINT 
.PRAD NOP 
      LDA RLU       GET READ LU 
      LDB RDER      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.
      STA PRTLU     SAVE READ LU
      JSB REIO      ISSUE THE READ
      DEF *+5 
      DEF B1
      DEF PRTLU 
DINBF DEF INBUF 
      DEF INBFS 
      SZB           EOF HIT?
      JMP READC     NO
REDER JSB ERXFR     INDICATE ERROR, AND ALLOW RE-TRY. 
      DEF READM 
      JMP READA     TRY AGAIN 
      SPC 1 
READB EQU * 
      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 READ-ERROR FLAG 
      STA RDER
      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.
* 
RDER  NOP 
ASTSK OCT 25000     ASCII "*" IN HIGH BYTE
      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 ERRAD     CONFIGURE CALL TO PRINT ROUTINE.
      ISZ ERFLG     FORCE MESSAGE TO ERROR DEVICE.
      JSB PRINT     PRINT THE ERROR MESSAGE.
ERRAD NOP 
      CLA           CLEAR THE 
      STA ERFLG      ERROR-DEVICE FLAG. 
      ISZ ERROR     BYPASS THE MESSAGE-SPECIFICATION. 
      JMP ERROR,I   AND RETURN
      SPC 1 
ERFLG NOP 
      SPC 2 
*  PRINT THE ERROR MESSAGE AND REPEAT THE QUESTION ON THE (ERROR LU) DEVICE.
* 
*  CALLING SEQUENCE:
* 
*  JSB ERXFR
*  DEF <ERROR MESSAGE>
* 
ERXFR NOP           ENTRY/EXIT: ERROR TRANSFER ROUTINE
      ISZ RDER      SET READ ERROR FLAG.
      ISZ RETRY     ALL RETRIES BEEN EXHAUSTED? 
      JMP *+2        NO. TRY AGAIN. 
      JMP ABORT      YES--ABORT THE PROCESS!
* 
      LDA ERXFR,I   GET MESSAGE ADDRESS.
      STA ERAD1 
      ISZ ERFLG     FORCE THE USE OF THE (ERROR LU).
      JSB PRINT     GO TO PRINT 
ERAD1 NOP 
* 
      CLA           CLEAR OUT 
      STA ERFLG       THE ERROR FLAG, 
      ISZ ERXFR     SET RETURN ADDRESS
      JMP ERXFR,I    AND RETURN.
* 
* 
*  SUBROUTINE TO CHECK DRIVER TYPE
*   CALLING SEQUENCE:  JSB TTY? 
*                      DEF <LU> 
*    UPON RETURN, A-REG=LU NUMBER, B-REG=0 IF INTERACTIVE, ELSE DRIVER TYPE 
* 
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. 
      SZA,RSS       INTERACTIVE?
      JMP *+4       .YES, SKIP SET UP 
      LDA B 
      ALF,ALF 
      AND B377      MASK ALL BUT DRIVER TYPE
* 
      LDB A         MOVE TO B-REG.
      LDA CHKLU,I   A-REG := LU NUMBER. 
      JMP TTY?,I    RETURN. 
      SKP 
      SKP 
.NRVS EQU 3         # WORDS PER NRV ENTRY 
      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 10        RTE FILE NAMR PARAMETERS. 
ITYPE EQU NAME+3
ISEC  EQU NAME+4
ICR   EQU NAME+5
PRM2  NOP           ERROR LU/CLASS NUMBER (2ND PARAM) 
PRM3  NOP           RECORD LEN(3RD PARAM) 
* 
DEFLU NOP           DEFAULT LU NUMBER.
      SPC 2 
NINIT DEF *+2       "NODE NOT INITIALIZED"
      DEF D10 
      ASC 10,NODE NOT INITIALIZED 
* 
NCVT. DEF *+2 
      DEF D7
      ASC 7,NO MSG.CNVTRS!
* 
FERMG DEF *+2 
      DEF D5
      ASC 5,FILE ERROR
* 
"N    ASC 1,N 
* 
LUERM DEF *+2 
      DEF B5
      ASC 5,LU ERROR
* 
TRFM  DEF *+2 
      DEF D7
      ASC 7,TR FILE ERROR 
* 
FILMG DEF *+2 
      DEF D6
      ASC 6,# OF FILES?_   .... 
* 
READM DEF *+2 
      DEF D5
      ASC 5,READ ERROR
* 
ABRTM DEF *+2 
      DEF D7
      ASC 7,DSMOD ABORTED! 
* 
NOCL. DEF *+2 
      DEF D6
      ASC 6,NO CLASS #S 
* 
CLSER DEF *+2 
      DEF D8
      ASC 8,CLASS I/O ERROR 
* 
ENDMG DEF *+2 
      DEF B5
      ASC 5,END DSMOD 
* 
UPLUM DEF *+2 
      DEF B6
      ASC 6,ENABLE LU#?_
* 
NODEX DEF *+2 
      DEF D9
      ASC 9,NODE # TO CHANGE?_ .... 
* 
OPMES DEF *+2 
      DEF D6
      ASC 6,OPERATION? _  ... 
* 
NOSZR DEF *+2 
      DEF D9
      ASC 9,NODE SPEC. ERROR! 
* 
* 
CNERR DEF *+2 
      DEF D12 
      ASC 9,INIT. FAILED ON LU
CNER. BSS 3 
* 
EXPMS DEF *+2 
      DEF EXPML     MESSAGE LENGTH
      OCT 6412      CARRIAGE-RETURN/LINE-FEED 
      ASC 9,??: LIST COMMANDS 
      OCT 6412
      ASC 5,/A: ABORT!
      OCT 6412
      ASC 7,/E: TERMINATE 
      OCT 6412
      ASC 11,/I: CHANGE 3000 ID SEQ 
      OCT 6412
      ASC 10,/L: RE-ENABLE LINE 
      OCT 6412
      ASC 8,/N: DISPLAY NRV 
      OCT 6412
      ASC 13,/P: CHANGE NON-SESN PASWD
      OCT 6412
      ASC 9,/Q: QUIESCE NODE
      OCT 6412
      ASC 12,/S: SCHEDULE MONITOR(S)
      OCT 6412
      ASC 9,/T: ADJUST TIMING 
      OCT 6412
      ASC 17,/U: CHANGE DEFAULT SESN USR-NAME 
      OCT 6412
      ASC 8,CN: CHANGE NRV
      OCT 6412
      OCT 6412
      ASC 12,QUIESCENT SYSTEM ONLY: 
      OCT 6412
      ASC 9,/R: RE-START NODE 
      OCT 6412
EXPML ABS *-EXPMS-2 MESSAGE LENGTH
* 
IVRES DEF *+2 
      DEF D9
      ASC 9,INVALID RESPONSE! 
* 
      SPC 3 
A     EQU 0 
B     EQU 1 
NRVS. ABS .NRVS     # WORDS IN EACH TCB ENTRY 
INBFS EQU D20 
INBUF BSS 20
PARSB BSS 34
INDCB BSS 144       USED FOR ANSWER FILES.
* 
*     DEFINE ENTRY POINTS FOR ACCESS TO INTERNAL ROUTINES 
* 
PRNT# EQU PRINT 
READ# EQU READ
INBF# EQU INBUF 
PRNL# EQU PRNTL 
ERFR# EQU ERXFR 
EXFR# EQU ERXFR 
ABRT# EQU ABORT 
      SPC 1 
      BSS 0         << SIZE OF 'DSMOD' >> 
      SPC 1 
      END DSMOD 
        