ASMB,R,L,C
      HED <LSTEN> - DS1 INITIALIZATION * (C) HEWLETT-PACKARD CO. 1976 * 
* 
      NAM LSTEN,3,25 91700-16109 REV.A 760308 
      SPC 1 
      ENT LSTEN 
      SPC 1 
      EXT READF,CLOSE,OPEN,RNRQ,PRTN,MESSS,REIO,PGMAD,CNUMD 
      EXT EXEC,$LIBR,$LIBX,$CGRN,RMPAR,PARSE,#PRMY,#RSAX
      EXT #FWAM,#GPRN,#MSTO,#NULL, #QRN,#RTRY,#SRPM 
      EXT #ST00,#ST01,#ST02,#ST03,#ST04,#ST05,#ST06,#ST07 
      EXT #ST08,#ST09,#SVTO,#TBRN,#WAIT,#SWRD,#BUSY 
      EXT #GRPM,#QCLM,#NCLR,#SCLR,#RFSZ,#RXCL,#SBIT,#PLOG 
      EXT #QLOG 
      SUP 
* 
*    NAME:   LSTEN
*    SOURCE: 91700-18109
*    RELOC.: 91700-16109
*    PGMR:   C.C.H.  [ 03/08/76 ] 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  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 5 
*  LSTEN SERVES A DUAL PURPOSE. IT IS USED, PRIMARILY, 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 
*  LSTEN'S SECONDARY PURPOSE IS TO ALLOW THE USER TO RE-ENABLE A
*   COMMUNICATION LINE INTERFACE, WHICH HAS BEEN INACTIVATED BY 
*   UNFORESEEN MALFUNCTIONS. IT MAY ALSO BE USED TO BRING THE 
*   NETWORK TO A QUIESCENT STATE, IN ORDER TO ADJUST SYSTEM TIMING, 
*   OR FOR ANY OTHER PURPOSE WHICH REQUIRES SUSPENSION OF NETWORK 
*   OPERATIONS, AT THIS PARTICULAR NODE.
* 
      SKP 
*  SCHEDULING FOR INITIALIZATION: 
*  -----------------------------
      SPC 1 
*   *ON,LSTEN,(INPUT LU),(ERROR LU) 
* 
*   SCHEDULE <LSTEN> TO ACCEPT RESPONSES FROM A PERIPHERAL DEVICE.
* 
*     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,LSTEN,FI,LE,NM [,SECURITY CODE [,CARTRIDGE NUMBER] ]
* 
*   SCHEDULE <LSTEN> TO ACCEPT RESPONSES FROM A FILE <FILENM>.
* 
*     NOTE: ANY ERRORS WILL BE REPORTED ON LU #1; <LSTEN> WILL THEN ABORT.
* 
* 
*  INITIALIZATION QUERIES AND VALID RESPONSES (IN NORMAL ORDER):
*  ------------------------------------------------------------ 
      SPC 1 
*     NOTE: CONTROL FILE RESPONSES CONSIST OF ONE RECORD PER RESPONSE.
* 
*           /A : ABORT <LSTEN> IS A VALID RESPONSE TO ALL QUERIES.
* 
*   /LSTEN: PRIMARY SYSTEM? <YE OR NO (ONE PRIMARY PER COMM. LINE PAIR!)> 
*     NOTE: NON-PRIMARY SYSTEMS YIELD, FOR SIMULTANEOUS REQUESTS FROM BOTH. 
* 
*   /LSTEN: NUMBER OF CURRENT TRANSACTIONS? <1-100 (/D =DEFAULT OF 32)> 
*     NOTE: EACH TRANSACTION USES 4 WORDS OF SYSTEM-AVAILABLE-MEMORY. 
* 
*   /LSTEN: LINE LU? <LOGICAL UNIT NO. (MUST BE LINKED TO DVR65)> 
*   /LSTEN: LINE LU? </E (TERMINATES INPUT AFTER ALL LU'S ENTERED)> 
* 
*   /LSTEN: MONITOR NAME? <AAAAA (MONITOR NAME)  /D =SCHEDULE ALL)> 
*   /LSTEN: MONITOR NAME? </E (TERMINATES INPUT--NOT USED FOR /D MODE)> 
* 
*   /LSTEN: INPUT # OF FILES: <1 TO 255 (TOTAL FILES OPEN TO ALL NODES)>
*     NOTE: ASKED ONLY FOR /D OPTION, OR WHEN <RFAM> SPECIFIED. 
* 
*   /LSTEN: SECURITY CODE? <AA (ANY TWO ASCII-ALPHABETIC CHARACTERS)> 
* 
*   END LSTEN  (TERMINATION MESSAGE)
* 
      SPC 2 
*  ONCE THE SYSTEM HAS BEEEN INITIALIZED, SUBSEQUENT SCHEDULING OF
*    <LSTEN> WILL CAUSE ENTRY INTO THE SECONDARY MODE OF OPERATION. 
*  IN THIS MODE, THE USER MAY RE-ENABLE COMMUNICATION LINE INTERFACES,
*    SCHEDULE ADDITIONAL MONITORS, ENABLE THE TRANSACTION MONITOR,
*    OR PLACE THE SYSTEM INTO QUIESCENT MODE. ONCE THE SYSTEM HAS BEEN
*    MADE QUIESCENT, THE USER MAY, ONLY, ADJUST THE TIMING VALUES,
*    OR RE-START THE QUIESCENT SYSTEM.
* 
      SKP 
*  SCHEDULING FOR SECONDARY MODE OF OPERATION:
*  ------------------------------------------ 
      SPC 1 
*   *ON,LSTEN,(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#),(ERROR LU#)  < DEFAULT = LU#1 FOR BOTH >
*              /
*   *ON,LSTEN,
*              \
*               FI,LE,NM [,SECURITY CODE [,CARTRIDGE NUMBER] ] <ERROR LU=1> 
* 
*    IN SECONDARY MODE, SCHEDULING <LSTEN> 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:
*  ------------------------------------------ 
      SPC 1 
*      NOTE: /A (ABORT <LSTEN>) IS A VALID RESPONSE TO ALL QUERIES. 
* 
*      **** ACCEPTABLE RESPONSES--NON-QUIESCENT SYSTEM **** 
* 
*   /LSTEN: OPERATION?  </L (RE-ENABLE LINE)> 
*   /LSTEN: LU TO BE RE-ENABLED? < LU# (LINKED TO DVR65)> 
*   /LSTEN: LU TO BE RE-ENABLED? </E (TERMINATE RE-ENABLING PROCESS)> 
* 
*   /LSTEN: OPERATION?  <PM [,P1[,P2[,P3[,P4]]]] (MONITOR PARMB'S)
*                      ( P1-P4: OPTIONAL SCHEDULING PARAMETERS FOR PLOG ) 
* 
*   /LSTEN: OPERATION?  <PC (CANCEL PARMB MONITORING)>
* 
*   /LSTEN: OPERATION?  <QM [,P1[,P2[,P3[,P4]]]] (MONITOR QUEUEING ERRORS)> 
*                      ( P1-P4: OPTIONAL SCHEDULING PARAMETERS FOR PLOG ) 
* 
*   /LSTEN: OPERATION?  <QC (CANCEL QUEUEING-ERROR MONITORING)> 
* 
*      NOTE: OPTIONAL PARAMETERS FOR <PM & QM> ARE PASSED TO <PLOG>, ON 
*            FIRST USE OF EITHER COMMAND. SUBSEQUENT USE OF THE OTHER 
*            COMMAND WILL MERELY ENABLE THE OPTION, WITHOUT CHANGING THE
*            CURRENT OPERATING MODE OF <PLOG>.
* 
*   /LSTEN: OPERATION?  </Q (TEMPORARILY SUSPEND NETWORK TRANSACTIONS)> 
*   /LSTEN: SYSTEM QUIESCENCE 
*   /LSTEN: SECURITY CODE? < AA (MUST MATCH ORIGINAL SECURITY CODE)>
*   END LSTEN  (TERMINATION MESSAGE)
* 
*   /LSTEN: OPERATION?  </S (SCHEDULE MONITOR(S)> 
*   /LSTEN: MONITOR NAME?  <AAAAA (MONITOR NAME)> 
*   /LSTEN: MONITOR NAME?  </E (TERMINATE INPUT)> 
*   /LSTEN: OPERATION?  </E (TERMINATE 'LSTEN')>
*   END LSTEN  (TERMINATION MESSAGE)
* 
*   /LSTEN: OPERATION?  <?? (LIST ALL COMMANDS)>
* 
*   ??: LIST COMMANDS 
*   /A: ABORT!
*   /E: TERMINATE 
*   /L: RE-ENABLE LINE
*   /Q: QUIESCE NETWORK 
*   /S: SCHEDULE MONITOR(S) 
* 
*   QUIESCENT SYSTEM ONLY:
*   /R: RE-START NETWORK
*   /T: ADJUST TIMING 
* 
* 
*      **** ACCEPTABLE RESPONSES--QUIESCENT SYSTEM, ONLY **** 
* 
*   /LSTEN: OPERATION?  </R (RESTART FROM QUIESCENT MODE)>
*   /LSTEN: QUIESCENT RE-START
*   /LSTEN: SECURITY CODE? < AA (MUST MATCH ORIGINAL SECURITY CODE)>
* 
*   /LSTEN: OPERATION?  </T (ADJUST SYSTEM TIMING)> 
*   TIMING MODIFICATION--CURRENT VALUES:
* 
*   MASTER T/O   = NNNNNN 
*   SLAVE  T/O   = NNNNNN 
*   REMOTE-BUSY  = NNNNNN 
*   REMOTE-QUIET = NNNNNN 
* 
* 
*   /LSTEN* MASTER T/O [1 TO 255 (*5 SEC.)]? <1 TO 255 (NUMERIC RESPONSE)>
*                                            (INITIAL VALUE = 5)
* 
*   /LSTEN: SLAVE T/O [1 TO 255 (*5 SEC.)]? <1 TO 255 (NUMERIC RESPONSE)> 
*                                           (INITIAL VALUE = 3) 
* 
*   /LSTEN: REMOTE-BUSY WAIT [1 TO 10 SEC.]? <1 TO 10(NUMERIC)> 
*                                            (INITIAL VALUE =3) 
* 
*   /LSTEN: REMOTE-QUIET WAIT [1 TO 10 SEC.]? <1 TO 10 (NUMERIC)> 
*                                             (INITIAL VALUE =1)
* 
      SKP 
* 
*  ERROR MESSAGES--INTERPRETATION AND APPROPRIATE ACTION: 
*  -----------------------------------------------------
* 
*      [ ALL MESSAGES ARE PRECEDED BY "/LSTEN:" ] 
      SPC 1 
*   CLASS I/O ERROR - A REQUIRED CLASS NUMBER CANNOT BE ALLOCATED.
*                     <LSTEN> IS ABORTED. THIS ERROR MAY REQUIRE
*                     RE-GENERATION WITH A LARGER ALLOTMENT OF CLASS NO'S.
* 
*   END LSTEN - 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 <LSTEN> HAS BEEN ABORTED, THE FIVE WORDS OF RETURNED-
*               DATA CONSIST OF: 100000B,ER, L,ST,EN
* 
*   EOF..INPUT MORE - AN END-OF-FILE CONDITION HAS BEEN DETECTED ON 
*                     THE (INPUT LU#) DEVICE. THE QUESTION IS DISPLAYED 
*                     ON THE (ERROR LU#) DEVICE, AND THE USER MAY SUPPLY
*                     THE REQUIRED RESPONSE FROM THIS DEVICE. 
* 
*   ERROR: MON?: AAAAA - THE SPECIFIED MONITOR <AAAAA> IS NOT IN THE SYSTEM.
*                        ABORT <LSTEN>, USING /A COMMAND, AND THEN LOAD 
*                        THE MONITOR INTO THE SYSTEM. RE-START <LSTEN>. 
* 
*   ERROR: STAT: AAAAA - THE MONITOR'S STATUS IS NOT 'DORMANT', AND 
*                        THEREFORE IT CANNOT BE SCHEDULED.
*                        ABORT <LSTEN>, 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 <LSTEN>. RETRY. 
* 
*   INVALID RESPONSE! - OPERATOR ENTRY ERROR. RETRY.
*                       (NO RETRY ALLOWED FOR QUIESCENT OR RE-START MODE) 
* 
*   LSTEN ABORTED - IF INITIALIZATION WAS IN PROGRESS, THEN ALL ALLOCATED 
*                   RESOURCES HAVE BEEN RETURNED TO RTE.
* 
*   LU ERROR - IMPROPER LU# SPECIFIED, OR LU# NOT LINKED TO DVR65. RETRY. 
* 
*   NO SYSTEM MEMORY! - INSUFFICIENT SYSTEM AVAILABLE MEMORY FOR USE BY 
*                       THE NETWORK. SYSTEM CANNOT BE INITIALIZED.
*                       <LSTEN> IS ABORTED. RE-GENERATION OF RTE MAY
*                       BE REQUIRED.
* 
*   RN ERROR - A REQUIRED RESOURCE NUMBER CANNOT BE ALLOCATED;
*              <LSTEN> IS ABORTED. RE-GENERATION, WITH A LARGER 
*              ALLOTMENT OF RESOURCE NUMBERS, MAY BE REQUIRED.
* 
*   SYSTEM IS NOT QUIESCENT! - TIMING MODIFICATION IS NOT ALLOWED, UNTIL
*                              ALL PENDING TRANSACTIONS HAVE BEEN CLEARED 
*                              FROM THE SYSTEM. AWAIT QUIESCENT CONDITION,
*                              AND RE-SCHEDULE <LSTEN>. 
* 
*   TOO MANY LU'S - MORE THAN 32 LOGICAL UNIT NUMBERS HAVE
*                   BEEN SPECIFIED FOR CONFIGURATION. 
*                   <LSTEN> IS ABORTED. REDUCE THE NUMBER OF
*                   LU'S AND RE-SCHEDULE <LSTEN>. 
* 
*   TR FILE ERROR - THE FILE MANAGER CANNOT PROCESS THE FILE
*                   WHICH WAS SPECIFIED IN THE SCHEDULING 
*                   PARAMETERS. CORRECT THE FILE PROBLEM, 
*                   AND RE-SCHEDULE <LSTEN>.
* 
*   ** UPLIN NOT SCHEDULED - THE SYSTEM TRANSACTION-MONITOR AND CLEANUP 
*                            PROGRAM <UPLIN> COULD NOT BE SCHEDULED.
*                            <LSTEN> IS ABORTED! DETERMINE NATURE OF
*                            PROBLEM AND CORRECT. RE-SCHEDULE <LSTEN>.
* 
      SKP 
PRAM  NOP           INPUT LU OR FIRST 2 CHARS. OF FILE NAME.
      NOP           ERROR LU OR SECOND 2 CHARS. OF FILE NAME. 
      NOP           THIRD TWO CHARS. OF FILE NAME.
      NOP           FILE SECURITY CODE--OPTIONAL. 
      NOP           FILE CARTRIDGE NUMBER--OPTIONAL.
LSTEN JSB RMPAR     GET THE 
      DEF *+2         PARAMETERS
      DEF PRAM          FOR LOCAL USE.
      IFZ 
      EXT DBUG
      LDA PRAM
      CPA D6        DO THEY WANT DEBUG? 
      RSS           YES 
      JMP LSTN1     NO...LET HER RIP
      JSB DBUG      INVOKE DEBUG
      DEF *+1 
      JMP TERM4     TERMINATE AND SAVE RESOURCES. 
      XIF 
LSTN1 LDA #FWAM     GET "ALREADY-INITIALIZED" INDICATOR.
      STA ONTWO     SAVE IN OPTION 1/2 FLAG WORD
      CCA 
      STA TTYF      CLEAR OUT TTY FLAG
* 
      LDA PRAM      SEE IF PRAM IS SUPPLIED 
      LDB B1        IF NOT, DEFAULT TO LU 1 
      SZA           SUPPLIED? 
      LDB A         YES 
      ADA BM100     LU OR FILE? 
      SSA 
      CLA           LU...CLEAR FILE FLAG
      STA FILFG 
      STB RLU       SAVE AS READ LU 
      SZA           LU OR FILE? 
      JMP LSTN2     FILE
* 
      JSB EXEC      LU...SEE WHICH ONE
      DEF *+4 
      DEF D13 
      DEF RLU 
      DEF TEMP1 
* 
      LDA TEMP1     GET STATUS...SEE IF DVR00 
      ALF,ALF 
      AND B77 
      CPA B5        IF EQUIPMENT TYPE-CODE = <05>,
      CLA             CHANGE TO <00> FOR OUR USE. 
      LDB A 
      LDA RLU       GET READ LU 
      SZB,RSS       TTY?
      IOR B400      YES...SET IN ECHO BIT 
      STA RLU       SAVE AS INPUT LU
      STB TTYF      SAVE TTY FLAG 
      LDA PRAM+1
      SZA           IS ERROR LU SUPPLIED? 
      JMP LSTN2+1   YES...SAVE IT.
      SZB,RSS       IS INPUT LU A TTY?
      LDA RLU       YES...SET IF FOR ERROR LU 
      SZA,RSS       STILL ZERO? 
* 
LSTN2 LDA B1        YES...DEFAUT TO SYSTEM
      STA ERLU      SAVE ERROR LU 
* 
      JSB EXEC      FIND OUT STATUS 
      DEF *+4 
      DEF D13 
      DEF ERLU
      DEF TEMP1 
* 
      LDA TEMP1     GET STATUS
      ALF,ALF 
      AND B77 
      CPA B5        IF EQUIPMENT TYPE-CODE = <05>,
      CLA             CHANGE TO <00> FOR OUR USE. 
      LDB ERLU
      SZA           TTY?
      LDB B1        NO...SET TO SYSTEM TTY
      LDA B 
      IOR B400
      STA ERLU
* 
      JSB CHCKN     SEE IF FILE 
      RSS           FILE...OPEN IT
      JMP LSTN3     NOT FILE
* 
      JSB OPEN      OPEN THE FILE 
      DEF *+7 
      DEF INDCB     DIRECTORY CONTROL BLOCK 
      DEF TEMP1     ERROR-RETURN STORAGE
      DEF PRAM      FILE NAME 
      DEF ZERO      OPEN OPTION: EXCLUSIVE/NON-UPDATE 
      DEF PRAM+3    FILE SECURITY CODE
      DEF PRAM+4    FILE CARTRIDGE NUMBER 
* 
      LDA TEMP1     ANY ERRORS? 
      SSA,RSS 
      JMP LSTN3     NO
* 
      JSB SYSER     SYSTEM ERROR
      DEF TRFM      "TR FILE ERROR" 
* 
LSTN3 LDA ONTWO     OPTION 1/2 FLAG 
      LDB TTYF      TTY FLAG (EQUIPMENT TYPE CODE). 
      SZA           OPTION 1? 
      JMP OPTN2     NO...OPTION 2 
* 
      CPB B65       ATTEMPT TO INITIALIZE WITH SDI LU#? 
      RSS            YES. SKIP TO REPORT THE ERROR. 
      JMP INITL      NO. GO TO START THE INITIALIZATION.
* 
      JSB SYSER     INFORM THE USER OF THE
      DEF LUERM     " LU ERROR"--NO RETURN. 
* 
*  INITIALIZATION CONTROL SECTION.
* 
INITL JSB PRMRY     GO TO SEE IF THIS IS PRIMARY SYSTEM.
      JSB SAM       GO SET UP SYS. AVAIL. MEM. FOR LISTS. 
      JSB LUIN      READ IN & INITIALIZE THE SPECIFIED LU'S 
      LDA LUBUF     SEE IF THEY ENTERED ANY LU'S
      CLE,SZA,RSS   ? 
      JMP ABORT     NO...DIDN'T ENTER ANY LU'S
      JSB MSET      SCHEDULE MONITORS & SET UP STREAM LISTS.
      JSB SECOD     SET NETWORK SECURITY CODE FOR THIS NODE.
      JSB SUPLN     SCHEDULE UPLINE PROGRAM 
      JSB SCHDQ     SCHEDULE QUEUEING PROCESSORS, 
      JMP TERM        AND TERMINATE.
* 
      SKP 
*  CHECK FOR PRIMARY SYSTEM--DOES NOT YIELD FOR SIMULTANEOUS REQUESTS.
      SPC 1 
PRMRY NOP           ENTRY/EXIT: PRIMARY SYSTEM CHECK. 
      JSB PRINT     ASK THE USER IF THIS IS THE 
      DEF PRMSG       "PRIMARY SYSTEM?".
      JSB READ      GET THE RESPONSE. 
      CPA B2        IF THE RESPONSE IS ASCII, 
      CCA,RSS         PREPARE TO SET THE PRIMARY FLAG; ELSE,
      JMP PRMER         REPORT THE RESPONSE ERROR.
      CPB /A        IF THE USER WISHES TO EXIT, 
      JMP ABRT4       GO TO ABORT THE PROGRAM.
      CPB "NO"      IF THIS IS NOT THE PRIMARY SYSTEM,
      JMP PRMRY,I     THEN RETURN FOR THE NEXT PROCESS. 
      CPB "YE"      IF THIS IS TO BE THE PRIMARY, 
      RSS             THEN SKIP TO SET THE FLAG.
      JMP PRMER     * ERROR: INFORM THE USER. 
      STA PRMY#     SET THE PRIMARY FLAG IN <RES> =-1.
      JMP PRMRY,I   RETURN FOR THE NEXT PROCESSING STEP.
* 
PRMER JSB ERROR     IMPROPER REPLY: 
      DEF IVRES       INFORM THE USER, AND
      JMP PRMRY+1       ALLOW ANOTHER CHANCE. 
* 
PRMSG DEF *+2 
      DEF D9
      ASC 9, PRIMARY SYSTEM? _
* 
"NO"  ASC 1,NO
"YE"  ASC 1,YE
* 
      SKP 
*  SUBROUTINE TO OBTAIN SYSTEM AVAILABLE MEMORY & INITIALIZE NULL LIST. 
      SPC 1 
SAM   NOP           ENTRY/EXIT: SYS. AV. MEM. SET-UP. 
      LDA D32       INITIALIZE DEFAULT NO.
      STA SVNUM       OF TRANSACTIONS =32.
      LDA DM3       INITIALIZE THE DELAY RE-TRY 
      STA RETRY       COUNTER FOR 3 TRIES.
SOVER JSB PRINT     ASK THE USER TO SPECIFY THE:
      DEF MSG0      " NO. OF CURRENT TRANSACTIONS?" 
      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 (32). 
      CPB /A        IF THE USER WISHES TO EXIT, 
      JMP ABRT4       GO TO ABORT THE PROGRAM.
* 
SERR  JSB ERROR     IMPROPER REPLY: 
      DEF IVRES       GO TO INFORM THE USER OF THE ERROR; 
      JMP SOVER         THEN ALLOW ANOTHER CHANCE.
* 
SVALU STB SVNUM     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 SERR      * ERROR: NUMBER IS INVALID--TRY AGAIN * 
      ADB D100      ADD THE MAXIMUM ALLOWABLE NO. (100).
      SSB           IS THE SPECIFIED NO. ALLOWABLE? 
      JMP SERR        NO. GO INFORM HIM OF THE ERROR! 
* 
SDFLT LDB SVNUM     GET THE NUMBER OF TRANSACTIONS. 
      CMB,INB       FORM A LOOP COUNT 
      INB,SZB,RSS     EQUAL TO (THE NUMBER SPECIFIED-1).
      CCB           PROTECT AGAINST A NULL COUNTER! 
      STB SCNT      SAVE THE LOOP COUNT.
      LDA SVNUM     GET THE NUMBER OF TRANSACTIONS. 
      MPY B4        CALCULATE: MEMORY SIZE(WORDS)  =
      STA SZMEM      (TRANSACTIONS)*(4 WDS./TRANSACTION)
* 
      CLE           GET A 
      JSB RNSUB       RESOURCE NUMBER 
      DEF TBRN#         FOR THE TABLE-ACCESS RN.
      CLE           GET A 
      JSB RNSUB       RESOURCE NUMBER 
      DEF GPRN#         FOR THE GENERAL PRE-PROCESSOR RN. 
      CLE           GET A 
      JSB RNSUB       RESOURCE NUMBER 
      DEF QRN#          FOR THE SYSTEM-QUIESCENT RN.
      CLE           GET A 
      JSB CLSUB      CLASS NUMBER 
      DEF GRPM#       FOR THE GENERAL PRE-PROCESSOR MODULE. 
      CLE           GET A 
      JSB CLSUB      CLASS NUMBER 
      DEF SRPM#       FOR THE SLAVE PRE-PROCESSOR MODULE. 
      CLE           GET A 
      JSB CLSUB      CLASS NUMBER 
      DEF QCLM#       FOR THE QUEUE CLEAN-UP MONITOR. 
      CLE           GET A 
      JSB CLSUB       CLASS NUMBER
      DEF RXCL#       FOR 'RFAM'/'RFAEX' COMMUNICATIONS.
* 
      LDA BPA1      IF THE FIRST WORD OF BASE PAGE
      CPA B2         IS =2, THEN THIS IS A DMS SYSTEM,
      RSS             AND THE CODE MUST BE MODIFIED;
      JMP SREPT        ELSE, BYPASS THE CODE CHANGES. 
      DLD XSBAI     GET THE CROSS-STORE INSTRUCTION,
      DST STLNK      AND CONFIGURE THE TWO NULL-LINK
      DST STERM       INSTRUCTIONS FOR DMS OPERATION. 
* 
SREPT JSB #RSAX     GO TO THE 
      DEF *+3        SYSTEM RESOURCE-CONTROL ROUTINE, 
      DEF ZERO        TO REQUEST SYSTEM AVAILABLE MEMORY, 
      DEF SZMEM        IN THE AMOUNT SPECIFIED BY THE USER. 
* 
      CPA M1        IF THE AMOUNT WILL NEVER BE AVAILABLE,
      JMP NOMER      INFORM THE USER OF THE PROBLEM.
      SZA           HAS THE MEMORY BEEN ALLOCATED?
      JMP NULNK       YES. GO TO LINK THE NULL LIST.
      JSB DELAY       NO. IT'S NOT AVAILABLE NOW--WAIT. 
      JMP NOMER     * RETRIES EXHAUSTED: INFORM USER! 
      JMP SREPT     TRY AGAIN FOR MEMORY ALLOCATION.
* 
NULNK JSB CLEAR     GO TO CLEAR SYSTEM DATA AREA IN <RES>.
      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
SLOOP ADB B4         THE
STLNK STB A,I         NULL   [CONTAINS XSB A,I: DMS]
      NOP              LIST  [NOP: RTE-II, DEF A,I: DMS]
      STB A             WITH
      ISZ SCNT           FOUR-
      JMP SLOOP           WORD
      CLB                  NULL 
STERM STB A,I               ENTRIES. [CONTAINS XSB A,I: DMS]
      NOP                        [NOP: RTE-II, DEF A,I: DMS]
* 
      SKP 
*  INITIALIZE ALL GLOBAL RN'S, CLASS NUMBERS, AND COUNTERS IN 'RES'.
      SPC 1 
      LDA TBRN# 
      STA #TBRN 
      LDA GRPM# 
      STA #GRPM 
      LDA GPRN# 
      STA #GPRN 
      LDA SRPM# 
      STA #SRPM 
      LDA QCLM# 
      STA #QCLM 
      LDA RXCL# 
      STA #RXCL 
      LDA QRN#
      STA #QRN
      LDA MSTO# 
      STA #MSTO 
      LDA SVTO# 
      STA #SVTO 
      LDA RTRY# 
      STA #RTRY 
      LDA WAIT# 
      STA #WAIT 
      LDA PRMY# 
      STA #PRMY 
      CLA 
      STA #BUSY 
* 
      JSB $LIBX     RESTORE THE 
      DEF SAM         SYSTEM'S DEFENSES.
* 
NOMER JSB SYSER     GO TO INFORM THE USER THAT
      DEF NOMEM       MEMORY IS UN-AVAILABLE--NO RETURN.
* 
BPA1  EQU 1742B 
SZMEM NOP           NUMBER OF WORDS OF S.A.M. REQUESTED.
XSBAI XSB A,I       DMS: CROSS-STORE <B> VIA ALTERNATE MAP. 
* 
MSG0  DEF *+2 
      DEF D16 
      ASC 16, NO. OF CURRENT TRANSACTIONS?  _ 
IVRES DEF *+2 
      DEF D9
      ASC 9, INVALID RESPONSE!
NOMEM DEF *+2 
      DEF D9
      ASC 9, NO SYSTEM MEMORY!
* 
      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
      SPC 2 
GRPM# NOP           GENERAL PRE-PROCESSOR CLASS NUMBER. 
SRPM# NOP           SLAVE PRE-PROCESSOR CLASS NUMBER. 
QCLM# NOP           QUEUE CLEAN-UP MONITOR'S CLASS NUMBER.
RXCL# NOP           'RFAM'/'RFAEX' COMMUNICATION CLASS NO.
TBRN# NOP           TABLE-ACCESS RN.
GPRN# NOP           GENERAL PRE-PROCESSOR RN. 
QRN#  NOP           SYSTEM-QUIESCENT RN.
MSTO# ABS 256-5     MASTER-REQUEST TIMEOUT(LOWER BYTE -5) 
SVTO# ABS 256-3     SLAVE-REQUEST TIMEOUT(LOWER BYTE -3)
RTRY# DEC -3        D65MS BUSY-REJECT RETRY COUNT 
WAIT# DEC -1        D65MS QUIESCENT WAIT INTERVAL 
* 
      SKP 
*  OPTION 2 IS ENTERED WHEN SYSTEM IS ALREADY INITIALIZED.
* 
OPTN2 LDA LUAD      INITIALIZE THE POINTER
      STA LUPNT       TO THE LOGICAL UNIT NO. BUFFER
      JSB CHCKN     SEE IF THEY WANT TO READ FROM A FILE
      JMP OPT20     YES 
      LDB RLU       GET LU...INCASE DVR SUPPLIED IN RMPAR 
      LDA TTYF      SEE WHAT TYPE OF DEVICE WE TALK TO
      CPA B65       IS IT DVR65?
      JMP OPT22     YES 
OPT20 JSB PRINT 
      DEF OPMES     " OPERATION?_"
      JSB READ      GET THE RESPONSE. 
      CPA B2        ASCII RESPONSE? 
      RSS             YES. CONTINUE PROCESSING. 
      JMP EXPLN       NO...EXPLAIN THE POSSIBILITIES! 
* 
      CPB /A        REQUEST TO ABORT? 
      JMP ABRT4       YES. DO IT! 
      CPB /E        REQUEST TO TERMINATE? 
      JMP TERM        YES. GO TO OBLIGE.
      CPB PM        REQUEST TO MONITOR PARMB'S? 
      RSS            YES--SKIP; ELSE, CHECK FOR A 
      CPB QM          REQUEST TO MONITOR QUEUEING ERRORS? 
      JMP PLOG         YES. SET UP MONITORING FOR EITHER. 
      CPB /S        REQUEST TO SCHEDULE MONITOR(S)? 
      JMP SKEDM       YES. GO TO SET UP TO SCHEDULE.
      CPB PC        REQUEST TO CANCEL PARMB MONITORING? 
      RSS            YES--SKIP; ELSE, CHECK FOR A 
      CPB QC          REQUEST TO CANCEL Q-ERROR MONITORING? 
      JMP PCLR         YES. GO TO STOP EITHER PROCESS.
      CPB ??        IS THE USER PUZZLED?
      JMP EXPLN       YES...GIVE HIM SOME ASSISTANCE. 
      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 AND /T ARE 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.
      JMP EXPLN     USER IS CONFUSED...HELP HIM!
* 
QCHNG CPB /R        REQUEST TO RE-START FROM QUIESCENCE?
      JMP REQUE       YES. GO TO START IT UP AGAIN. 
      CPB /T        REQUEST TO CHANGE TIMEOUT VALUES, ETC.? 
      JMP TIME        YES. GO PROCESS THE REQUESTED CHANGES.
* 
EXPLN JSB PRNTX     EXPLAIN THE COMMANDS
      DEF EXPMS       TO THE CONFUSED USER. 
      JMP OPT20     REPEAT THE QUESTION.
                                                                                                              