ASMB,Q,C
      HED EXECM: 'EXEC' REQUEST PROCESSOR * (C) HEWLETT-PACKARD CO. 1980 *
      NAM EXECM,19,30 91750-16111 REV.2013 801008 ALL 
      SPC 1 
*  ***************************************************************
*  * (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 THE HEWLETT-PACKARD COMPANY.   *
*  ***************************************************************
      SPC 1 
* 
*    NAME:   EXECM        DS/1000 'EXEC' REQUEST MONITOR
*    SOURCE: 91750-18111
*    RELOC:  91750-16111
*    PGMR:   C. HAMILTON  [07/21/78]
*    MDF'D:  GAB [02/06/79] FOR EXTENDED INSTR REPLACE W/JSB'S
*    MDF'D:  JDH [02/16/79] FOR DS REQUEST EQUATED OFFSETS. 
*    MDF'D:  CCH [10/08/80] FOR 91750 
* 
      SPC 2 
      EXT #ATCH,CLRQ,DTACH,LUTRU,PGMAD
      EXT $LIBR,$LIBX,$OPSY,EXEC,RMPAR,XLUEX
      EXT #EXHC,#EXTC,#GETR,#GRPM,#NODE,#PLOG,#RPB
      EXT #NQUE,#RQUE,#RSAX,#SKEY,#SLAV 
      EXT .CAX,.DSX,.STX,.STY 
A     EQU 0 
B     EQU 1 
      SUP 
      SKP 
* GLBLK-START 
* 
******************************************************************
*                                                                *
*     G L O B A L   B L O C K               REV 2013 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 
* DXBLK-START 
* 
******************************************************************
*                                                                *
*      D E X E C   B L O C K                REV 2013 800221      *
*                                                                *
*      OFFSETS INTO DS/1000 DEXEC MESSAGE BUFFERS, USED BY:      *
*                                                                *
*       DEXEC, EXECM, EXECW, RQCNV, RPCNV, FLOAD, REMAT          *
*                                                                *
******************************************************************
* 
* OFFSETS INTO DEXEC REQUEST BUFFERS. 
* 
#ICD  EQU #REQ      ICODE FOR DEXEC(ALL)
#CNW  EQU #ICD+1    CONWD FOR DEXEC(1,2,3,13) 
#CWX  EQU #CNW+1    DLUEX EXTENSION FOR DEXEC(1,2,3,13)                   V 
#BFL  EQU #CWX+1    IBUFL FOR DEXEC(1,2)
#PM1  EQU #BFL+1    IPRM1 FOR DEXEC(1,2)
#PM2  EQU #PM1+1    IPRM2 FOR DEXEC(1,2)
#ZOF  EQU #PM1      Z-BUFFER OFFSET FOR DEXEC(1,2,3,13) 
#ZLN  EQU #PM2      Z-BUFFER LENGTH FOR DEXEC(1,2,3,13) 
#PR2  EQU #PM2+1    2ND OPT. PARAMETER FOR DEXEC(3) [RTE-L].
#KEY  EQU #PR2+1    KEYWORD(RN) FOR DEXEC(1,2,3) [RTE-L]. 
#PRM  EQU #CWX+1    IPRAM FOR DEXEC(3)
#PGN  EQU #ICD+1    PRGNM FOR DEXEC(6,9,10,12,23,24,99) 
#INU  EQU #PGN+3    INUMB FOR DEXEC(6)
#DPM  EQU #INU+1    PARMS FOR DEXEC(6)         (5-WORD AREA)
#PMS  EQU #PGN+3    PARMS FOR DEXEC(9,10,23,24)(5-WORD AREA)
#IBF  EQU #PMS+5    IBUFR FOR DEXEC(9,10,23,24) 
#IBL  EQU #IBF+1    IBUFL FOR DEXEC(9,10,23,24) 
#FNO  EQU #IBL+1    FNOD  FOR DEXEC(9)          (APLDR) 
#RSL  EQU #PGN+3    IRESL FOR DEXEC(12) 
#MPL  EQU #RSL+1    MTPLE FOR DEXEC(12) 
#HRS  EQU #MPL+1    IHRS  FOR DEXEC(12) 
#MIN  EQU #HRS+1    IMIN  FOR DEXEC(12) 
#SEC  EQU #MIN+1    ISECS FOR DEXEC(12) 
#MSC  EQU #SEC+1    MSECS FOR DEXEC(12) 
#PAR  EQU #ICD+1    PARTI FOR DEXEC(25)        (PARTITION #)
#IST  EQU #PGN+3    ISTAT FOR DEXEC(99) 
* 
* OFFSETS INTO DEXEC REPLY BUFFERS. 
* 
#EQ5  EQU #EC1      EQT 5 FOR DEXEC(1,2,3)
#XML  EQU #EC2      TRANSMISSION LOG (DEXEC 1,2)
#RPM  EQU #REP      PRAMS FOR DEXEC(9,23)      (5-WORD AREA)
#TMS  EQU #REP      MSEC  FOR DEXEC(11) 
#TSC  EQU #TMS+1    SEC   FOR DEXEC(11) 
#TMN  EQU #TSC+1    MIN   FOR DEXEC(11) 
#THR  EQU #TMN+1    HRS   FOR DEXEC(11) 
#TDA  EQU #THR+1    DAY   FOR DEXEC(11) 
#TYR  EQU #TDA+1    YEAR  FOR DEXEC(11) 
#ST1  EQU #REP      ISTA1 FOR DEXEC(13) 
#ST2  EQU #ST1+1    ISTA2 FOR DEXEC(13) 
#ST3  EQU #ST2+1    ISTA3 FOR DEXEC(13) 
#ST4  EQU #ST3+1    ISTA4 FOR DEXEC(13) [RTE-L].
#PAG  EQU #REP      IPAGE FOR DEXEC(25) 
#IPN  EQU #PAG+1    IPNUM FOR DEXEC(25) 
#PST  EQU #IPN+1    ISTAT FOR DEXEC(25) 
#KST  EQU #REP      ISTAT FOR DEXEC(99) 
* 
* MAXIMUM SIZE OF DEXEC REQUEST/REPLY BUFFER. 
* 
#DLW  EQU #MHD+11+#LSZ   M A X I M U M   S I Z E   ! ! !
* 
* MAXIMUM SIZE OF DEXEC/EXECM DATA BUFFER.
* 
#DBS  EQU 512            M A X I M U M  S I Z E    ! ! !
* 
* DXBLK-END 
      SKP 
EXECM JSB RMPAR     RETRIEVE THE
      DEF *+2        SCHEDULING 
      DEF SAVCL       PARAMETER(S). 
* 
FIRST JSB CONFG     CONFIGURE: 1RST TIME; 'NOP' THEREAFTER. 
* 
      CLA           ESTABLISH PARAMETERS
      STA RQB+#PGN   TO REQUEST THE ADDRESS OF THE
      JSB PSTAT       ID SEGMENT FOR THIS PROGRAM.
* 
      LDA TEMP      SAVE THE ID SEGMENT ADDRESS 
      STA XEQT       FOR SCHEDULE/TERMINATION VALIDATION. 
      LDA SAVCL     GET  <EXECM> CLASS NUMBER.
      CCE 
      ALR,ERA       REMOVE BUFFER-SAVE BIT(#14) FROM CLASS. 
      STA PURCL     SAVE FOR CLASS-PURGE ROUTINE. 
* 
*  <EXECM> WAITS IN GENERAL WAIT QUEUE, UNTIL A NEW REQUEST ARRIVES,
*          OR UNTIL A CLASS READ/WRITE/CONTROL REQUEST COMPLETES. 
* 
GET   JSB DTACH     DETACH FROM A POSSIBLE SCB ASSOCIATION. 
      DEF *+1 
* 
      CLA           PREPARE FOR A TEST OF 
      STA RQB+#STR   RECEIVED BUFFER, IN ORDER TO IDENTIFY
      STA RQB+#SEQ    NEW REQUESTS OR I/O COMPLETIONS.
* 
      JSB #GETR     PERFORM A CLASS 'GET',
      DEF *+7        IN ORDER TO UN-OBTRUSIVELY AWAIT 
      DEF SAVCL       ARRIVAL OF REQUESTS & I/O COMPLETION. 
RQBAD DEF RQB       SPECIFY:  REQUEST BUFFER ADDRESS. 
      DEF MAXRQ     SPECIFY:  REQUEST LENGTH. 
DABFA DEF DABUF     SPECIFY:  DATA BUFFER ADDRESS.
      DEF DBMAX     SPECIFY:  MAXIMUM DATA BUFFER SIZE. 
      DEF SAVA      SPECIFY:  STATUS RETURN LOCATION. 
      JMP CLNUP     * BAD CLASS: TRY TO CLEAN UP *
* 
      STA REQLN     <A> = ACTUAL LENGTH OF HEADER.
      STB SAVB      <B> = ACTUAL LENGTH OF DATA.
      JSB .STX      SAVE THE RETURNED REQUEST CODE
      DEF SAMRC      FROM THE LAST CLASS I/O REQUEST. 
      JSB .STY      RETRIEVE THE CLASS BUFFER ADDRESS 
      DEF #SKEY      AND SAVE FOR USE AS A SEARCH KEY.
* 
      LDA L#MHD     PREPARE FOR A 
      STA RPLYL      MINIMUM-LENGTH REPLY.
      CLA           SET <A> =0, TO PREPARE
      STA DALEN      FOR REPLY W/O DATA.
      STA XMERQ     INITIALIZE ERROR QUALIFIER =0(SYSTEM).
* 
      SKP 
      LDA RQB+#SEQ  SAVE THE LOCAL
      STA TEMP       SEQUENCE NUMBER, TEMPORARILY.
* 
      JSB #RSAX     SEARCH THE SLAVE LIST,
      DEF *+4        IN ORDER TO IDENTIFY THIS
      DEF D5          'GET' BUFFER AS AN I/O
      DEF RQB+#SEQ     COMPLETION, OR AS A
      DEF RQB+#STR      NEW REQUEST.
      SSB           WAS THIS A NEW REQUEST? 
      JMP RWCMP      NO--ASSUME AN I/O COMPLETION.
* 
      STA RQB+#SEQ   YES, SAVE ORIG. SEQ. NO. FOR LOGGING.
      STB TCBAD     SAVE TCB ADDRESS FOR INTER. WRITE-READ. 
      JSB PLOG      EXAMINE NEED FOR REQUEST LOGGING. 
* 
      LDA L#MHD     FORM A NEGATIVE VALUE 
      CMA,INA        FOR THE MINIMUM REQUEST LENGTH.
      LDB REQLN     GET THE CURRENT REQUEST LENGTH. 
      ADA B         COMPUTE: REQLN-MINIMUM. 
      CMB,INB       COMPUTE DIFFERENCE BETWEEN SUPPLIED 
      ADB L#IBL      AND MAXIMUM REQUEST LENGTHS. 
      SSA,RSS       IF LESS THAN MINIMUM, 
      SSB            OR GREATER THAN MAXIMUM, THEN
      JMP CLNUP       THE REQUEST IS UNACCEPTABLE.
* 
      LDA RQB+#ICD  GET REQUEST CODE PARAMETER FROM CALLER. 
      AND B377      REMOVE THE <DLUEX> FLAG (BIT#12). 
      STA RCODE     SAVE THE REQUEST CODE FOR LATER USE.
      CPA D99       SPECIAL REQUEST FOR PROGRAM STATUS? 
      JMP PGMST      YES--GO TO ACCOMODATE THE CALLER.
* 
      STA B          NO.SAVE REQUEST CODE FOR VALIDITY CHECK. 
      SZB           IF REQUEST CODE=0--REJECT: ERROR "DS06"!
      ADB UPLIM     FORM A NEGATIVE TABLE INDEX.
      SSB,RSS       0 < REQUEST CODE < 27 ? 
      JMP ERDS6       NO! OUT OF RANGE--ERROR: "DS06".
* 
      IOR BIT15     INCLUDE NO-ABORT BIT(#15),
      STA EXCOD      AND CONFIGURE REQUEST CODE FOR CALL. 
* 
      ADB TABAD     COMPUTE PRE-PROCESSOR ADDRESS.
      JMP B,I       GO TO EXECUTE THE PRE-PROCESSING. 
* 
      SKP 
*  ERROR PROCESSING SECTION.
* 
ERS01 DLD "RS"      "RS01": SESSION SCB DOES NOT EXIST! 
      JMP XMERR 
ERDS6 LDB "06"      "DS06": ILLEGAL REQUEST CODE. 
      JMP GETDS 
ERDS8 LDB "08"      "DS08": INSUFFICIENT RESOURCES. 
GETDS LDA "DS"
      JMP XMERR 
ERIO1 LDB "01"      "IO01": IMPROPER OR MISSING PARAMETER.
      JMP GETIO 
ERI12 LDB "12"      "IO12": LU NOT DEFINED FOR THIS SESSION.
GETIO LDA "IO"
      JMP XMERR 
ERSC1 LDB "01"      "SC01": MISSING SCHEDULING PARAMETER. 
      JMP GETSC 
ERSC2 LDB "02"      "SC02": ILLEGAL SCHEDULING PARAMETER. 
      JMP GETSC 
ERSC5 LDB "05"      "SC05": PROGRAM NOT DEFINED.
GETSC LDA "SC"
* 
XMERR STA TEMP      SAVE REGISTER, TEMPORARILY. 
      LDA BIT5      SET ERROR QUALIFIER FIELD (BITS #7-4) 
      STA XMERQ      TO 2: EXECM SIMULATED ERROR. 
      LDA TEMP      RETRIEVE ASCII ERROR INFORMATION. 
      CPB DM1       IF THIS IS A PROGRAM STATUS ERROR,
      CLE,RSS        THEN AVOID SETTING THE ASCII ERROR FLAG. 
ERRTN CCE           ERROR RETURN. 
      JMP DONE
* 
XMERQ NOP           QUALIFIER: 0-SYSTEM,40B-EXECM,100B-#RQUE. 
* 
"01"  ASC 1,01
"02"  ASC 1,02
"05"  ASC 1,05
"06"  ASC 1,06
"08"  ASC 1,08
"12"  ASC 1,12
"DS"  ASC 1,DS
"IO"  ASC 1,IO
"RS"  ASC 2,RS01
"SC"  ASC 1,SC
* 
      SKP 
*  REPLY PROCESSING SECTION.
* 
DONE  DST RQB+#EC1  STORE REGISTERS IN WORDS 5&6 OF REPLY.
DONE0 CLA,SEZ,RSS   IF THIS IS A NORMAL RETURN, 
      JMP CLEAR      GO TO CLEAR THE REPLY-ERROR INDICATOR. 
      STA DALEN       ELSE, PREPARE FOR REPLY SANS DATA.
      LDB L#MHD     ESTABLISH THE 
      STB RPLYL      MINIMUM-LENGTH REPLY.
* 
CLEAR LDA #NODE     GET THE LOCAL NODE NUMBER.
      ELA,CLE,RAR   INCLUDE ASCII-ERROR FLAG (BIT#15).
      STA RQB+#ENO  STORE THE ERROR INDICATOR--IF ANY.
      SSA,RSS       ANY ERRORS DETECTED?
      JMP SRPLY      NO, SIMPLY SEND THE REPLY. 
* 
      LDA RQB+#ECQ   YES. REMOVE THE OLD
      AND UPMSK       ERROR QUALIFIER INFORMATION 
      IOR XMERQ        AND INCLUDE NEW QUALIFIER. 
      STA RQB+#ECQ  CONFIGURE THE QUALIFIER WORD. 
* 
SRPLY LDB RQBAD     GET THE REPLY BUFFER ADDRESS. 
      ADB RPLYL     COMPUTE THE NEXT AVAILABLE LOCATION.
      LDA $OPSY     GET THE OP-SYSTEM IDENTIFIER, 
      STA B,I        AND RETURN AS LAST WORD OF REPLY.
      ISZ RPLYL     INCLUDE IDENTIFIER IN REPLY LENGTH. 
* 
      JSB #SLAV     PROCESS THE SLAVE'S REPLY.
      DEF *+4 
      DEF RPLYL     HEADER LENGTH.
      DEF DABUF     DATA BUFFER ADDRESS.
      DEF DALEN     DATA BUFFER LENGTH. 
      JMP CLNUP     * ERROR: TRY TO CLEAN UP *
      JMP CLNP0     O.K.: RELEASE BUFFER & AWAIT NEXT ONE.
* 
      HED EXECM: READ/WRITE/CONTROL REQUESTS * (C) HEWLETT-PACKARD CO.1980 *
RWC   JSB ATCHS     ATTACH SCB & GET TRUE LU.       RC=1,2,3
* 
      LDA RQB+#CWX  GET THE CALLER'S CONTROL WORD.
      ALF,ELA       POSITION INTERACTIVE BIT(#11) TO <E>. 
* 
      LDA RCODE     GET THE REQUEST CODE. 
      LDB RQB+#BFL  GET BUFFER LENGTH 
      STB DALEN      AND CONFIGURE CALL WITH DATA LENGTH. 
      SEZ,RSS       IS THE INTERACTIVE BIT(#11) SET?
      JMP RWCTL      NO. CHECK FOR READ, WRITE OR CONTROL.
* 
      CPA D1         YES. IS THE CALL PROPERLY SPECIFIED? 
      JMP INTER           YES. DO WRITE PORTION OF REQUEST. 
      JMP ERDS6           NO. REQUEST IS INVALID: "DS06"! 
* 
INTER ISZ RCODE     CONVERT REQUEST CODE TO 'WRITE(2)'. 
      LDA RQB+#PM2  GET WRITE LENGTH FROM OPT. PRAM. #2 
      STA DALEN     INITIALIZE WRITE LENGTH FOR <#RQUE>.
      SSA           IF CHARACTERS WERE SPECIFIED, 
      ARS            CONVERT TO A NEGATIVE WORD COUNT.
      SSA,RSS       IF CHARACTERS--SKIP: ALREADY CONVERTED. 
      CMA,INA       VERIFY THAT THE 
      ADA SAVB       SPECIFIED LENGTH IS
      SSA             CONTAINED WITHIN RECEIVED BUFFER; 
      JMP ERIO1        ELSE, IT'S A PARAMETER ERROR!
* 
      LDB TCBAD     POINT TO THE THIRD WORD 
      ADB D2         OF THE TRANSACTION CONTROL BLOCK.
DMS2  LDA B,I       RETRIEVE THE LOCAL SEQUENCE NUMBER. 
      NOP           [CONTAINS XLA B,I IN DMS ENVIRONMENT] 
      CPA RQB+#SEQ  IF TCB APPEARS TO BE UNCHANGED, 
      CLA,RSS 
      JMP CLNUP       ELSE, ITS PROBABLY BEEN DELETED.
* 
      STA RQB+#PM1  AVOID THE SPECIFICATION OF
      STA RQB+#PM2   ERRONEOUS OPTIONAL PARAMETERS. 
* 
      LDA D16       INDICATE A 20 MINUTE TIMEOUT. 
      ADB DM1       POINT TO 2ND WORD OF TCB: TIME COUNTER. 
      JSB $LIBR 
D0    NOP 
DMS1  STA B,I       MODIFY SLAVE TCB TIME VALUE (WD #2).
      NOP           [CONTAINS XSA B,I IN DMS ENVIRONMENT] 
      JSB $LIBX 
      DEF *+1 
      DEF RWCTL 
* 
      SKP 
RWCTL LDA RCODE     GET REQUEST CODE
      LDB RQB+#CWX   AND USER'S CONTROL WORD. 
      BLF,CLE,ERB   POSITION Z-BIT(#12) TO <E>. 
      CLB,SEZ       CLEAR <B> AND TEST FOR Z BUFFER.
      LDB DABFA     Z BUFFER, SO GET DATA BUF. POINTER. 
      SEZ           TEST AGAIN FOR Z BUFFER; IF SET,
      CPA D2         THEN TEST FOR A WRITE REQUEST. 
      ADB RQB+#ZOF  GET PARAMETER OR COMPUTE Z BUF. ADDR. 
      STB RQB+#ZOF  SAVE PARAMETER OR Z BUF POINTER.
      IOR D16N      FORM A CLASS REQUEST CODE 
      STA EXCOD      FROM THE CALLER'S REQUEST VALUE. 
* 
      LDB $OPSY     GET OP-SYSTEM IDENTIFIER. 
      CPB DM31      IF THIS IS AN RTE-L OPERATING SYSTEM, 
      JMP LSWCH      GO SELECT APPROPRIATE CALLING SEQUENCE.
      CPA D19N      IT'S RTE-M OR RTE-IV. CONTROL REQUEST?
      JMP CONT4      YES. GO EXECUTE A CLASS CONTROL REQUEST. 
* 
      JSB XLUEX     RC=1,2 (M,IV) 
      DEF *+8       REQUEST ALLOCATION OF A CLASS BUFFER: 
      DEF D17N      CLASS READ (NO ABORT: 100021B)
      DEF CONW1     CONWORDS (LU =0 + FLAGS, ETC.)
      DEF DABUF     DATA BUFFER ADDRESS.
      DEF DALEN     DATA BUFFER LENGTH. 
      DEF RQB+#ZOF  Z BUF. POINTER OR OPTIONAL PARAM. 
      DEF RQB+#ZLN  Z BUF. LENGTH OR OPTIONAL 2ND PARAM.
      DEF #EXTC     TEMPORARY CLASS (NO-WAIT).
      JMP ERRTN     SYSTEM-DETECTED ERROR--TELL CALLER. 
* 
      SSA           IF THE REQUEST WAS NOT PROPERLY QUEUED, 
      JMP ERDS8      THEN TELL CALLER: RESOURCE PROBLEM!
      JMP SAVRQ     GO SAVE REQUEST AND START I/O OPERATION.
* 
CONT4 JSB XLUEX     RC=3 (M,IV) 
      DEF *+7       REQUEST ALLOCATION OF A CLASS BUFFER: 
      DEF D19N      CLASS CONTROL (NO ABORT: 100023B) 
      DEF CONW1     CONWORDS (LU =0 + FLAGS, ETC.)
      DEF RQB+#PRM  OPTIONAL PARAMETER. 
      DEF #EXTC     TEMPORARY CLASS (NO WAIT).
      DEF RQB+#PM1  2ND OPTIONAL PARAMETER. 
      DEF RQB+#PM2  3RD OPTIONAL PARAMETER. 
      JMP ERRTN     SYSTEM-DETECTED ERROR: TELL CALLER! 
* 
      SSA           IF REQUEST WAS NOT PROPERLY QUEUED, 
      JMP ERDS8      THEN TELL CALLER: RESOURCE PROBLEM!
* 
      CLA           PREVENT DATA OVERLAY
      JMP SDLEN     GO SET PARAM. AND SAVE REQUEST. 
* 
      SKP 
* 
LSWCH CPA D19N      IF THIS IS AN RTE-L CONTROL REQUEST 
      JMP CONTL      GO EXECUTE THE SPECIAL CALLING SEQUENCE. 
* 
      JSB XLUEX     RC=1,2 (RTE-L)
      DEF *+10      REQUEST ALLOCATION OF A CLASS BUFFER: 
      DEF D17N      CLASS READ (NO ABORT: 100021B)
      DEF CONW1     CONWORDS (LU =0 + FLAGS, ETC.)
      DEF DABUF     DATA BUFFER ADDRESS.
      DEF DALEN     DATA BUFFER LENGTH. 
      DEF RQB+#ZOF  Z BUF. ADDRESS OR OPTIONAL PARAMETER. 
      DEF RQB+#ZLN  Z BUF. LENGTH OR 2ND OPTIONAL PARAMETER.
      DEF #EXTC     TEMPORARY CLASS (NO WAIT).
      DEF ZERO      (OPTIONAL PARAMETER IV--NOT USED) 
      DEF RQB+#KEY  KEYWORD (RN)--IF ANY. 
      JMP ERRTN     SYSTEM-DETECTED ERROR: TELL CALLER! 
* 
      SSA           IF THE REQUEST WAS NOT PROPERLY QUEUED, 
      JMP ERDS8      THEN TELL CALLER: RESOURCE PROBLEM.
      JMP SAVRQ     GO SAVE REQUEST AND START I/O OPERATION.
* 
CONTL JSB XLUEX     RC=3 (RTE-L)
      DEF *+10      REQUEST ALLOCATION OF A CLASS BUFFER: 
      DEF D19N      CLASS CONTROL (NO ABORT: 100023B).
      DEF CONW1     CONWORDS (LU =0 + FLAGS, ETC.)
      DEF RQB+#PRM  OPTIONAL PARAMETER. 
      DEF #EXTC     TEMPORARY CLASS (NO WAIT).
      DEF RQB+#PR2  2ND OPTIONAL PARAMETER. 
      DEF RQB+#ZOF  Z BUF. ADDRESS OR 3RD OPTIONAL PARAMETER. 
      DEF RQB+#ZLN  Z BUF. LENGTH OR 4TH OPTIONAL PARAMETER.
      DEF ZERO      (OPTIONAL PARAMETER IV--NOT USED).
      DEF RQB+#KEY  KEYWORD (RN)--IF ANY. 
      JMP ERRTN     SYSTEM-DETECTED ERROR: TELL CALLER. 
* 
      SSA           IF THE REQUEST WAS NOT PROPERLY QUEUED, 
      JMP ERDS8      THEN TELL CALLER: RESOURCE PROBLEM.
* 
      LDA RQB+#PR2  ENSURE RTE-L PROCESSING OF 2ND PARAM. 
SDLEN STA DALEN     SET PARAMETER FOR REQUEUEING. 
      JMP SAVRQ     GO SAVE REQUEST AND START I/O OPERATION.
* 
      SKP 
SAVRQ JSB #GETR     PERFORM A ZERO LENGTH 'GET' 
      DEF *+4        IN ORDER TO OBTAIN A SEARCH KEY. 
      DEF #EXTC     TEMPORARY CLASS (NO WAIT/BUFFER SAVE).
      DEF *         DUMMY BUFFER ADDRESS. 
      DEF ZERO      NO DATA IS TO BE TRANSFERRED. 
      JMP RLTMP     SYSTEM DETECTED ERROR.
* 
      JSB .STY      RETRIEVE CLASS BUFFER ADDRESS(IN S.A.M.)
      DEF #SKEY     SAVE AS SEARCH KEY. 
* 
      JSB EXEC      POST THE SEARCH KEY AND THE REQUEST 
      DEF *+8        IN THE HOLDING CLASS FOR SAFE KEEPING. 
      DEF D20N      CLASS WRITE-READ (NO ABORT).
      DEF ZERO      LU =0: MAILBOX OPERATION. 
      DEF #SKEY     FIRST WORD IS SEARCH KEY. 
      DEF SAVLN     LENGTH OF PARTIAL REQUEST + SEARCH KEY. 
      DEF ZERO      OPTIONAL PARAMETERS 
      DEF ZERO       ARE NOT REQUIRED.
      DEF #EXHC     <EXECM'S> REQUEST HOLDING CLASS(NO WAIT). 
      JMP RLTMP     SYSTEM DETECTED ERROR: REPORT IT! 
* 
      SSA           IF THE REQUEST WAS NOT PROPERLY QUEUED, 
      JMP RLTMP      CLEAN UP AND INFORM THE CALLER.
* 
      LDA RCODE     GET CURRENT REQUEST CODE. 
      LDB RQB+#PRM  PREPARE FOR CONTROL REQUEST REQUEUEING. 
      CPA D3        IF PROCESSING A CONTROL REQUEST, THEN 
      STB DABUF      MOVE OPTIONAL PRAM. #1 FOR OVERLAY.
* 
      JSB #RQUE     TRANSFER THE
      DEF *+10       QUEUED REQUEST 
      DEF EXCOD       ONTO THE
      DEF RQB+#CNW     SPECIFIED DEVICE.
      DEF DABUF     OVERLAY DATA (EXCEPT FOR RC=3), IN ORDER
      DEF DALEN      TO SET CORRECT LENGTH INTO CLASS HEADER. 
      DEF RQB+#ZOF  Z BUFFER/OPTIONAL PRAM.3. 
      DEF RQB+#ZLN  Z LENGTH/OPTIONAL PRAM.4. 
      DEF SAVCL     SPECIFY COMPLETION VIA <EXECM'S> CLASS. 
      DEF #EXTC     OBTAIN BUFFER FROM TEMPORARY CLASS. 
      DEF RQB+#KEY  PASS KEYWORD(RN)--IF ANY. 
      JMP RLT&H     ERROR: CLEAN UP & TELL CALLER.
* 
      JMP CLNP0     RELEASE CURRENT REQUEST & AWAIT ANOTHER.
* 
      SKP 
RLT&H DST RQB+#EC1  SAVE ERROR CODE FROM <#RQUE>. 
      LDA BIT6      SET ERROR QUALIFIER (BITS#7-4) =4,
      STA XMERQ      TO INDICATE <#RQUE> AS ERROR SOURCE. 
* 
      JSB #NQUE     FIND THE RECENTLY-SAVED REQUEST BUFFER. 
      DEF *+9 
      DEF DM30      SEARCH WITHIN THE DATA BUFFER.
      DEF ZERO      LU =0: CLASS TO CLASS REQUEUEING. 
      DEF #SKEY     SEARCH KEY= CLASS BUFFER ADDRESS. 
      DEF DM1       1'S COMPLEMENT: 1 WORD SEARCH FOR WORD#1. 
      DEF ZERO      IGNORE THE NON-EXISTENT 
      DEF ZERO       Z BUFFER SPECIFICATIONS. 
      DEF EXTCL     REQUEUE BUFFER TO TEMPORARY CLASS.
      DEF #EXHC     BUFFER CAN BE FOUND IN HOLD CLASS.
      NOP           IGNORE ERRORS (THIS IS ERROR RECOVERY). 
* 
RLTMP JSB EXEC      DO ZERO-LENGTH 'GETS' 
      DEF *+5        UNTIL THE CLASS IS 'CLEAN'.
      DEF D21N
      DEF EXTCL 
      DEF * 
      DEF ZERO
      JMP ERTST     ERROR, JUMP OUT NOW--SOMETHING IS AMISS!
      CCE,INA,SZA   ALL BUFFERS RELEASED? [E=1,FOR ERRORS]
      JMP RLTMP      NO, CONTINUE RELEASING THEM. 
* 
ERTST CPA XMERQ      YES. WAS ERROR DETECTED BY <#RQUE> ? 
      JMP ERDS8           NO, RETURN DS08: RESOURCE PROBLEM!
      JMP DONE0           YES. ERROR CODES ARE ALREADY SET. 
* 
      SKP 
*  READ/WRITE/CONTROL CLASS-COMPLETION PROCESSING 
* 
RWCMP JSB #RQUE     LOCATE THE SAVED REQUEST BUFFER.
      DEF *+9 
      DEF DM30      SEARCH WITHIN THE DATA BUFFER.
      DEF ZERO      LU =0: CLASS TO CLASS REQUEUEING. 
      DEF #SKEY     SEARCH KEY= CLASS BUFFER ADDRESS. 
      DEF DM1       1'S COMPLEMENT: 1 WORD SEARCH FOR WORD#1. 
      DEF ZERO      IGNORE THE NON-EXISTENT 
      DEF ZERO       Z BUFFER SPECIFICATIONS. 
      DEF EXHCL     REQUEUE THE LOCATED REQUEST 
      DEF EXHCL      ONTO THE HEAD OF THE HOLDING CLASS.
      JMP CLNP0     REQUEST NOT LOCATED: CLEANUP. 
* 
      JSB EXEC      RETRIEVE PART OF THE ORIGINAL REQUEST.
      DEF *+5 
      DEF D21N
      DEF EXHCL      FROM HEAD OF HOLDING CLASS.
      DEF #SKEY     PASS REQUEST DATA DIRECTLY
      DEF SAVLN      INTO <#SLAV'S> REQUEST BUFFER. 
      JMP CLNP0     CLEAN UP (CANNOT REPLY SANS NODE NO.) 
* 
      CLE 
      LDB SAMRC     GET THE I/O COMPLETION CODE.
      CPB D3        IF IT IS A CONTROL REQUEST, 
      JMP FINIS      THEN GO TO PREPARE THE REPLY. [<E>=0]
* 
      LDA RQB+#CWX  GET THE CALLER'S CONTROL WORD.
      ALF,ELA       POSITION WRITE-READ BIT(#11) TO <E>.
      LDA RQB+#BFL  GET THE CALLER'S DATA-LENGTH VALUE. 
      CPB D1        IF A 'READ' HAS COMPLETED, THEN 
      JMP LENCK      GO TO PROCESS THE REPLY DATA-LENGTH. 
* 
      CLB,SEZ,CLE,INB,RSS  IF NORMAL WRITE-COMPLETION,
      JMP FINIS             GO TO PREPARE THE REPLY.
* 
      STA DALEN     WRITE-READ: SAVE READ LENGTH FOR <#RQUE>, 
      STB RCODE      AND INITIALIZE 'RCODE' FOR 'REQUE'.
      JMP RWCTL     PROCESS A 'READ' FOR SPECIFIED DEVICE.
* 
LENCK LDB SAVB      GET THE TRANSMISSION LOG: +CHARS/+WORDS 
      CLE,SSA,RSS   IF CHARACTERS WERE SPECIFIED, SKIP; 
      JMP SETLN      ELSE, GO TO SAVE THE WORD COUNT. 
* 
      SLB,BRS       CONVERT CHARACTER COUNT TO WORDS, AND 
      INB            IF ODD ADD ONE TO THE WORD COUNT.
SETLN LDA RQB+#CNW  IF THE USER'S LOGICAL UNIT NO.
      AND B377       FOR THE REQUESTED READ OPERATION WAS 
      SZA,RSS         LU #0 (THE 'BIT BUCKET'), THEN RETURN 
      CLB              ONLY TRANSMISSION LOG WITHOUT DATA.
      STB DALEN     SAVE THE REPLY DATA-LENGTH FOR <#SLAV>. 
* 
FINIS DLD SAVA      GET THE REGISTERS FOR CALLER. 
      JMP DONE      GO COMPLETE THE REPLY.[<E>=0: NO ERRORS]
* 
      SPC 2 
 HED EXECM: TERMINATION/SCHEDULE/STATUS REQUESTS *(C) HEWLETT-PACKARD CO.1980*
* 
*     PROGRAM SCHEDULE, TIMED EXECUTION, AND PROGRAM TERMINATION
* 
PKILL LDA $OPSY     PROGRAM TERMINATION.                RC=6
      CPA DM31      IF ENVIRONMENT IS RTE-L, THEN 
      JMP ERDS6      TERMINATION OF A SON IS NOT SUPPORTED! 
* 
SCHED JSB ATCHS     GO TO ATTACH A POSSIBLE SCB.
* 
      JSB PSTAT     GO TO GET PROGRAM STATUS.       RC=10,12
      SZA           ANY ATTEMPT TO
      CPA XEQT       REMOTELY CONTROL <EXECM> 
      JMP ERSC5       IS UN-ACCEPTABLE! ERROR: "SC05".
* 
      LDB RCODE     GET THE REQUEST CODE. 
      CPB D6        PROGRAM TERMINATION REQUEST?
      JMP *+2        YES. SKIP TO DETERMINE LINEAGE.
      JMP SCHD0      NO. IT'S A NORMAL SCHEDULE REQUEST.
* 
      LDA TEMP+3    GET THE FATHER'S I.D. SEGMENT ADDRESS.
      CPA XEQT      OUR OFFSPRING?
      JMP SCHD0      YES, WE CAN HONOR THE REQUEST. 
      JMP PASON      NO. <EXECW> MUST HAVE BEEN THE SIRE. 
* 
SCHD0 LDA L#PGN     GET THE MINIMUM BUFFER SIZE.
      LDB RTNDF     GET THE DEFAULT RETURN POINTER. 
      ADA REQLN     SUBTRACT MINIMUM FROM ACTUAL SIZE.
      ADB A         COMPUTE THE ACTUAL RETURN ADDRESS,
      STB RTNAD      AND CONFIGURE THE RETURN POINTER.
      SZA,RSS       ANY ADDITIONAL PARAMETERS?
      JMP SCHD2      NO. GO CLEAR REMAINDER OF CALL BUFFER. 
      SSA           WERE WE SUPPLIED WITH ENOUGH PARAMETERS?
      JMP ERSC1      NO. * ERROR: SC01 !
* 
      JSB .CAX       YES. SAVE ADDITIONAL PARAMETER COUNT.
      LDA UPRDF     <A>= ADDRESS OF NEXT USER-PARAMETER 
      LDB RTNDF     <B>=ADDRESS OF NEXT CALL-BUFFER LOCATION. 
SCHD1 STA B,I       STORE PARAM ADDR INTO CALL BUFFER.
      INA           ADVANCE PARAMETER POINTER.
      INB           ADVANCE CALL BUFFER POINTER.
      JSB .DSX      ALL PARAMETERS PROCESSED? 
      JMP SCHD1      NO. PROCESS THE NEXT ONE.
* 
      CLA           PREPARE TO CLEAR REST OF CALL BUFFER. 
SCHD2 CPB LASTA     LAST CALL BUFFER LOCATION CLEARED?
      JMP SCHD3      YES. GO TO COMPLETE THE CALL.
      STA B,I        NO. CLEAR THE LOCATION.
      INB           ADVANCE THE CALL BUFFER POINTER, AND
      JMP SCHD2      GO TO CLEAR THE NEXT LOCATION. 
* 
      SKP 
SCHD3 LDA STRAD+1   GET THE STRING-SIZE POINTER--IF ANY.
      SZA,RSS       PASSING A STRING TO THE PROGRAM?
      JMP SCHD4      NO. BYPASS DATA BUFFER RECOVERY. 
      LDA SAVB       YES. GET THE DATA BUFFER SIZE. 
      CMA,INA,SZA,RSS FORM A NEGATIVE VALUE. ANY DATA?
      JMP ERSC2        NO--IMPROPER PARAMETERS! 
* 
      LDB DBMAX     GET MAXIMUM DATA BUFFER SIZE. 
      ADB A         IF THE TRANSMITTED DATA BUFFER
      SSB            EXCEEDS THE ALLOWABLE SIZE,
      JMP ERSC2       THEN THE REQUEST CANNOT BE PROCESSED! 
* 
      LDA DABFA     GET THE LOCAL DATA BUFFER ADDRESS.
      STA STRAD     ESTABLISH STRING BUFFER ADDRESS IN CALL.
* 
SCHD4 DLD ERRIN     LOAD THE ERROR-DETECTION INSTRUCTIONS.
      DST RTNAD,I   STORE THEM AT END OF CALLING SEQUENCE.
* 
* THE CONFIGURED 'EXEC' CALLING SEQUENCE IS EXECUTED BELOW. 
* 
      JSB EXEC      BUFFER FOR ASSEMBLING EXEC REQS.
RTNAD DEF PR3AD     RETURN POINTER (CONFIGURED).
      DEF EXCOD     REQUEST CODE (SUPPLIED BY CALLER) 
      DEF RQB+#CNW  POINTER TO FIRST REQUEST PARAMETER. 
PR3AD NOP           CONFIGURED POINTERS (7-MAX.) TO 
      NOP            USER-SUPPLIED CALLING-PARAMETERS,
      NOP             WHICH RESIDE IN THE REQUEST BUFFER. 
      NOP           UN-USED CALLING-SEQUENCE LOCATIONS ARE
      NOP            DYNAMICALLY CHANGED TO 'NOP'.
STRAD NOP           STRING-BUFFER ADDRESS--IF ANY.
      NOP           STRING-LENGTH POINTER--IF ANY.
      NOP           [ ERROR-DETECTION INSTRUCTIONS: WILL BE 
      NOP             POSITIONED TO FOLLOW LAST POINTER ] 
ENDBF JMP DONE      REQUEST COMPLETED. <E>=0:NORMAL;=1:ERROR
* 
      SPC 2 
* 
*     TIME REQUEST PROCESSING                                          RC=11
* 
STIME LDA L#TYR     GET THE REPLY SIZE. 
      STA RPLYL     SET THE REPLY LENGTH
* 
      JSB EXEC      REQUEST CURRENT SYSTEM TIME.
      DEF *+4 
      DEF EXCOD     RCODE = 11 (SIGN IS SET). 
      DEF RQB+#TMS  TIME IS RETURNED TO REPLY BUFFER. 
      DEF RQB+#TYR  SO IS THE YEAR. 
      CCE,RSS       RETURN ERROR-INFO TO THE CALLER!
      CLE           ALL IS WELL, SO 
      JMP DONE       RETURN THE TIME DATA.
      SKP 
*     I/O OR PARTITION STATUS-REQUEST PROCESSING
* 
PARST EQU *                                            RC=25
ISTAT LDA L#ST3     GET THE REPLY SIZE.                RC=13
      STA RPLYL     SET THE LENGTH OF THE REPLY 
      LDA RCODE     GET THE REQUEST CODE. 
      CPA D25       IF REQUEST IS FOR PARTITION STATUS, 
      JMP STPAR      GO TO COMPLY.
* 
      JSB ATCHS     ATTACH A POSSIBLE SCB, AND GET TRUE LU. 
* 
      LDB $OPSY     IF EXECUTING IN AN
      CPB DM31       RTE-L OPERATING SYSTEM, THEN 
      JMP LSTAT       USE SPECIAL I/O STATUS PROCESSING.
* 
      JSB XLUEX     REQUEST STATUS FOR THE I/O DEVICE.
      DEF *+6 
      DEF EXCOD     RCODE = 13 (SIGN IS SET). 
      DEF RQB+#CNW  CONWORD (EXTENDED LU FORMAT)
      DEF RQB+#ST1  RETURN- EQT WORD#5
      DEF RQB+#ST2  RETURN- EQT WORD#4
      DEF RQB+#ST3  RETURN- LOGICAL UNIT STATUS 
      CCE,RSS       'EXEC' ERROR-INFO RETURNED TO CALLER. 
      CLE           NO ERROR
      JMP DONE      RETURN TO CALLER WITH STATUS INFO.
* 
STPAR JSB EXEC      PROCESS A PARTITION STATUS REQUEST
      DEF *+6 
      DEF EXCOD     RCODE = 25 (SIGN IS SET)
      DEF RQB+#CNW  REFERENCE TO PARTITION NUMBER.
      DEF RQB+#ST1  RETURN- FIRST PAGE NUMBER.
      DEF RQB+#ST2  RETURN- NUMBER OF PAGES.
      DEF RQB+#ST3  RETURN- PARTITION STATUS. 
      CCE,RSS       ERROR DETECTED. 
      CLE           NO ERROR
      JMP DONE      RETURN TO CALLER WITH STATUS INFO.
* 
LSTAT JSB XLUEX     REQUEST DEVICE STATUS FROM RTE-L. 
      DEF *+7 
      DEF EXCOD     RCODE =13 (SIGN IS SET).
      DEF RQB+#CNW  CONWORD (EXTENDED LU FORMAT). 
      DEF RQB+#ST1  RETURN: DVT WORD #6.
      DEF RQB+#ST2  RETURN: IPT WORD #6.
      DEF DABUF     RETURN: $DVTP, OR $DVTP BUFFER ADDRESS. 
      DEF RQB+#ZLN  RETURN: $DVTP+1, OR BUFFER LENGTH.
      CCE,RSS       RETURN FOR SYSTEM-DETECTED ERROR. 
      CLE           NORMAL RETURN.
      SEZ           IF AN ERROR WAS DETECTED, 
      JMP DONE       RETURN WITH ERROR CODES. 
* 
      DST RQB+#EQ5  SAVE REGISTERS, TEMPORARILY.
      LDA RQB+#CWX  GET THE USER'S CONTROL WORD #2. 
      ALF,SLA       WAS EXTENSIVE $DVTP INFO REQUESTED? 
      JMP ZRQST      YES, GO TO PROCESS RETURN OF DATA. 
* 
      LDA DABUF      NO, GET RETURNED $DVTP WORD #1,
      LDB RQB+#ZLN    AND $DVTP WORD #2.
      DST RQB+#ST3  RETURN BOTH IN REPLY BUFFER.
      JMP DONE0     BYPASS <A&B> UPDATE, AND SEND REPLY.
* 
ZRQST LDA RQB+#ZLN  RETRIEVE USER'S REQUEST LENGTH VALUE. 
      SSA,RSS       IF NEGATIVE, SKIP TO MAKE POSITIVE; 
      JMP ZWRDS      ELSE, GO CONFIGURE REPLY LENGTH. 
      ARS           CONVERT TO NEGATIVE WORDS, AND
      CMA,INA        FINALLY, TO POSITIVE WORDS.
ZWRDS STA DALEN     CONFIGURE REPLY DATA LENGTH.
      CMA,INA       SET RETURNED <A&B> REGISTERS TO 
      STA B          NEGATIVE LENGTH: SIGNALS DATA RETURNED.
      JMP DONE      GO TO SEND THE REPLY. 
* 
      SKP 
* 
* PASS CURRENT REQUEST FROM STREAM 5 TO STREAM 3. 
* 
PASON JSB CLTCB     GO TO CLEAR RECORD FROM <EXECM'S> STREAM. 
      STA RQB+#SEQ  REPLACE THE ORIGINAL SEQUENCE NUMBER. 
      LDA RQB+#STR  GET THE STREAM WORD  RC=6,9,23,24<EXECW>
      XOR D6        CONVERT TO STREAM-3 <EXECW>.
      STA RQB+#STR  REPLACE STREAM TYPE IN REQUEST BUFFER.
      LDA D2        INDICATE AN OVERLAY REQUEST 
      STA RPLYL      FOR THE TWO MODIFIED WORDS.
* 
      JSB #RQUE     RE-QUEUE
      DEF *+9        THE REQUEST
      DEF D20N
      DEF ZBIT
      DEF DABUF 
      DEF DALEN 
      DEF RQB 
      DEF RPLYL 
      DEF #GRPM       TO <GRPM'S> CLASS 
      DEF SAVCL        FROM <EXECM'S> CLASS 
      CCE,RSS       ERROR: SKIP TO INFORM ORIGINATOR. 
      JMP GET       GO TO AWAIT NEXT REQUEST/COMPLETION.
* 
      DST RQB+#EC1  SAVE ERROR CODE FROM <#RQUE>. 
      LDA BIT6      SET ERROR QUALIFIER (BITS#7-4) =4,
      STA XMERQ      TO INDICATE <#RQUE> AS ERROR SOURCE. 
      JMP DONE0     GO TO RETURN ERROR TO ORIGINATOR [E=1]. 
* 
      SKP 
*  THE FOLLOWING PROGRAM-STATUS REQUEST PROCESSING IS SUPPORTED 
*  >>>>>>>>>>>>>>>> IN DS/1000 NETWORKS--ONLY! <<<<<<<<<<<<<<<< 
* 
PGMST LDA L#KST     ESTABLISH REPLY LENGTH TO          RC=99
      STA RPLYL      INCLUDE ONE RETURN PARAMETER.
      JSB PSTAT    GO TO GET THE PROGRAM'S STATUS.
      SZA          DOES THE PROGRAM EXIST?
      JMP GETST     YES. GO TO PROCESS THE STATUS.
      CCB           NO. SET <B>=-1 FOR ERROR INDICATION,
      STB RQB+#KST   AND SAVE FOR RETURN TO CALLER. 
      JMP GETDS    GO TO RETURN THE ERROR INFORMATION.
* 
GETST LDA B        GET THE STATUS WORD. 
      AND D15      ISOLATE THE STATUS.
      RAL,ERA      INCLUDE THE 'SEGMENT' FLAG.
      STA RQB+#KST SAVE FOR RETURN TO THE CALLER. 
      CLB,CLE      <B> =0 FOR RETURN TO CALLER. 
      JMP DONE     RETURN THE INFO TO THE CALLER. 
* 
      HED EXECM: PROCESSING SUBROUTINES.* (C) HEWLETT-PACKARD CO. 1980 *
* REMOTE SESSION PROCESSOR: ATTACH TO SESSION CONTROL BLOCK & TRANSLATE LU. 
* 
ATCHS NOP           ENTER: <A&B> = DON'T CARE.
      LDA RQB+#SID  GET SESSION ID WORD FROM HEADER.
      AND B377      ISOLATE DEST. SESSION ID (BITS 0-7) 
      STA TEMP      SAVE SESSION ID FOR CALL. 
* 
      JSB #ATCH     ATTACH TO THE SESSION CONTROL BLOCK.
      DEF *+2 
      DEF TEMP
      CPA DM1 
      JMP ERS01     ERROR: RS01 SCB NOT FOUND!
* 
      LDA RCODE     GET USER'S REQUEST CODE.
      CPA D13       STATUS REQUEST? 
      JMP GETRU      YES. GO TO TRANSLATE THE LOGICAL UNIT. 
* 
      AND DM4       IF THE REQUEST CODE IS NOT
      SZA            READ, WRITE, OR CONTROL, 
      JMP ATCHS,I     THEN, LU TRANSLATION IS NOT REQUIRED. 
* 
GETRU LDB RQB+#ICD  GET REQUEST CODE PARAMETER. 
      BLF           POSITION 'DLUEX' FLAG TO LSB. 
      LDA RQB+#CNW  GET USER'S CONTROL WORD.
      AND B377      ISOLATE 8-BIT LOGICAL UNIT FIELD. 
      SLB,RSS       IF THIS IS A STANDARD CONWORD,
      AND B77        THEN LOGICAL UNIT FIELD IS 6 BITS WIDE.
      STA TEMP      SAVE THE LU FOR A CALL TO 'LUTRU'.
      XOR RQB+#CNW  ISOLATE REMAINDER OF SINGLE-WORD CONWORD. 
      SLB           IF THIS IS A SINGLE-WORD CONWORD, SKIP; 
      LDA RQB+#CWX   ELSE, GET SECOND PART FROM USER, 
      STA RQB+#CWX     CONFIGURE WORD#2 OF CONWORD(S),
      STA CONW2         AND CONWORD #2 FOR 'XLUEX' CALL.
      SLB,RSS       IF THIS WAS NOT A 'DLUEX' REQUEST,
      JMP UNMAP      THEN, GO TO TRANSLATE THE LOGICAL UNIT.
* 
      LDA RQB+#CNW  GET WORD #1 OF CONWORD PAIR.
      SSA           IF USER DOES NOT DESIRE LU TRANSLATION, 
      JMP ATCHS,I    THEN NO FURTHER PROCESSING IS REQUIRED.
* 
UNMAP JSB LUTRU     TRANSLATE THE USER'S
      DEF *+3        LOGICAL UNIT NUMBER
      DEF TEMP        FROM HIS KNOWN REFERENCE
      DEF TEMP+1       TO THE ACTUAL SYSTEM LU NUMBER.
* 
      LDA TEMP+1    GET THE ACTUAL LOGICAL UNIT NUMBER. 
      CPA DM1       IF 'LUTRU' RETURNED A -1, THEN
      JMP ERI12      THE LU IS NOT DEFINED FOR THIS SESSION!
* 
      IOR BIT15     SET SIGN FOF WORD #1: ALREADY UN-MAPPED.
      STA RQB+#CNW  CONFIGURE ACTUAL LU INTO CONTROL WORD.
      JMP ATCHS,I   RETURN: <A&B> = MEANINGLESS.
* 
      SKP 
* 
CLNUP JSB CLTCB     ELIMINATE RECORD OF OFFENDING REQUEST.
      JMP CLNP0     COMPLETE THE CLEAN UP PROCESS.
* 
      SPC 3 
CLTCB NOP           ENTRY/EXIT: TCB-CLEARING PROCESSOR. 
      JSB #RSAX     GO TO THE TCB-MANAGEMENT PROCESSOR
      DEF *+4        TO CLEAR THE RECORD OF THE CURRENT 
      DEF D7          SLAVE-STREAM ENTRY - WHICH IS 
      DEF RQB+#SEQ     IDENTIFIED BY IT'S SEQUENCE NUMBER-
      DEF RQB+#STR      AND <EXECM'S> STREAM NO.
      SSB,RSS       IF THE OPERATION WAS SUCCESSFUL,
      JMP CLTCB,I    RETURN TO CALLER. [<A>= ORIG. SEQ. NO.]
* 
CLNP0 LDB $OPSY     GET OP-SYSTEM IDENTIFIER. 
      CPB DM31      IF THIS IS AN RTE-L SYSTEM, 
      JMP CLRTN      SKIP BLOCK-SIZE RESET OPERATION. 
* 
      JSB #RQUE     RESET THE POSSIBLE
      DEF *+9        NEGATIVE BLOCK-SIZE WORD,
      DEF D20N        BEFORE ATTEMPTING TO
      DEF ZBIT         RELEASE THE CLASS BUFFER.
      DEF * 
      DEF D0
      DEF * 
      DEF D0
      DEF DM1 
      DEF PURCL 
      NOP           ERROR--IGNORE.
* 
CLRTN JSB EXEC      RETURN THE CURRENT CLASS BUFFER.
      DEF *+5 
      DEF D21N      CLASS GET.
      DEF PURCL     <EXECM> CLASS/BUFFER RELEASE/SAVE CLASS.
      DEF *         DUMMY DATA-BUFFER ADDRESS.
      DEF D0        DATA NOT DESIRED. 
      NOP 
      JMP GET       RETURN TO AWAIT A NEW REQUEST/COMPLETION. 
* 
      SPC 3 
PSTAT NOP           PROGRAM STATUS SUBROUTINE.
      JSB PGMAD 
      DEF *+6 
      DEF RQB+#PGN  PROGRAM 'NAME' IS IN REQUEST BUFFER.
      DEF TEMP      RETURNED SPEC'D ID SEGMENT ADDRESS. 
      DEF TEMP+1    RETURNED PROGRAM STATUS.
      DEF TEMP+2    RETURNED ID SEGMENT TYPE. 
      DEF TEMP+3    RETURNED FATHER ID SEGMENT. 
      JMP PSTAT,I   RETURN. 
* 
      SKP 
PLOG  NOP           REQUEST BUFFER LOGGING ROUTINE. 
      LDB #PLOG     GET THE REQUEST-LOGGER'S CLASS NO.
      SZB,RSS       IS LOGGING DESIRED? 
      JMP PLXIT      NO. RETURN TO NORMAL PROCESSING. 
* 
      STB PSTAT      YES. SAVE THE CLASS NO. LOCALLY. 
* 
      JSB EXEC      COPY
      DEF *+8        THE
      DEF D20N        REQUEST & DATA
      DEF ZBIT         BUFFERS, 
      DEF DABUF         IN THE
      DEF SAVB           EXPECTED 
      DEF RQB             FORMAT, 
      DEF REQLN            TO THE 
      DEF PSTAT             LOGGER'S
      NOP                    CLASS. 
* 
PLXIT LDA TEMP      RESTORE THE LOCAL 
      STA RQB+#SEQ   SEQUENCE NO. TO REQUEST BUFFER.
      JMP PLOG,I    CONTINUE NORMAL PROCESSING. 
* 
      SKP 
DM1   DEC -1
DM4   DEC -4
DM30  DEC -30 
DM31  DEC -31 
D1    DEC 1 
D2    DEC 2 
D3    DEC 3 
D5    DEC 5 
D6    DEC 6 
D7    DEC 7 
D13   DEC 13
D15   DEC 15
D16   DEC 16
D25   DEC 25
D16N  OCT 100020
D17N  OCT 100021
D19N  OCT 100023    CLASS-CONTROL--NO ABORT 
D20N  OCT 100024    CLASS WRITE-READ--NO ABORT. 
D21N  OCT 100025
D99   DEC 99        PROGRAM STATUS REQUEST CODE.
B77   OCT 77
B377  OCT 377 
BIT5  OCT 40
BIT6  OCT 100 
BIT12 OCT 10000 
* MAINTAIN ORDER OF 'BIT15', 'CONW1', AND 'CONW2'.
BIT15 OCT 100000
CONW1 EQU BIT15     WORD #1 OF DUAL CONWORD (LU=0). 
CONW2 NOP                #2 OF DUAL CONWORD (FLAGS, ETC.) 
EXCOD NOP           REQUEST CODE WITH NO-ABORT FLAG (BIT#15). 
RCODE NOP           CURRENT REQUEST CODE. 
ZBIT  EQU BIT12     DOUBLE-BUFFER BIT(#12). 
REQLN NOP           REQUEST BUFFER LENGTH.
SAMRC NOP           RETURNED I/O REQUEST CODE.
TCBAD NOP           TCB ADDRESS.
* 
RPLYL NOP           REPLY LENGTH (CONFIGURED).
DALEN NOP           BUFFER LENGTH/CONTROL PARAMETER 
EXHCL NOP           HOLD CLASS W/O BUFFER SAVE BIT. 
EXTCL NOP           TEMP CLASS W/O BUFFER SAVE BIT. 
LASTA DEF ENDBF 
RTNDF DEF PR3AD 
UPRDF DEF RQB+#PMS
UPMSK OCT 177400
XEQT  NOP           CONFIGURED ID ADDRESS OF <EXECM>. 
ZERO  EQU D0
* 
* * * DO NOT CHANGE ORDER OF NEXT 4 STATEMENTS * * *
* 
ERRIN CCE,RSS       CONFIGURED-'EXEC'-REQUEST 
      CLE            ERROR-DETECTION INSTRUCTIONS.
SAVA  NOP           REGISTER STORAGE FOR <A>
SAVB  NOP                        AND FOR <B>. 
* * * * * * * * * * * * * * * * * * * * * * * * * * * 
      SKP 
* 
*     PRE-PROCESSOR 'JUMP' TABLE. 
* 
LOW1  DEF RWC      RCODE 1 = READ  REQ
      DEF RWC      RCODE 2 = WRITE REQ
      DEF RWC      RCODE 3 = CONTROL
      DEF ERDS6    RCODE 4 = UNDEFINED(DISC ALLOC)
      DEF ERDS6    RCODE 5 = UNDEFINED (PKG.TRK.REL)
      DEF PKILL    RCODE 6 = PROGRAM TERMINATION
      DEF ERDS6    RCODE 7 = UNDEFINED(PRG.SUSPEND) 
      DEF ERDS6    RCODE 8 = UNDEFINED(SEG.LOAD)
      DEF PASON    RCODE 9 = SCHEDULE W/WAIT <EXECW>
      DEF SCHED    RCODE 10= PROGRAM SCHED(WON'T WAIT)
      DEF STIME    RCODE 11= TIME REQUEST 
      DEF SCHED    RCODE 12= EXECUTION TIME 
      DEF ISTAT    RCODE 13= I/O STATUS 
      DEF ERDS6    RCODE 14= UNDEFINED (STRING GET) 
      DEF ERDS6    RCODE 15= UNDEFINED (GLOBAL TRK. ALLOC.) 
      DEF ERDS6    RCODE 16= UNDEFINED (GLOBAL TRK. RLS.) 
      DEF ERDS6    RCODE 17= UNDEFINED (CLASS READ) 
      DEF ERDS6    RCODE 18= UNDEFINED (CLASS WRITE)
      DEF ERDS6    RCODE 19= UNDEFINED (CLASS CONTROL)
      DEF ERDS6    RCODE 20= UNDEFINED (CLASS WRITE-READ) 
      DEF ERDS6    RCODE 21= UNDEFINED (CLASS GET)
      DEF ERDS6    RCODE 22= UNDEFINED (SWAP CONTROL) 
      DEF PASON    RCODE 23= QUEUE-SCHEDULE W/WAIT <EXECW>
      DEF PASON    RCODE 24= QUEUE-SCHEDULE W/O WAIT <EXECW>
      DEF PARST    RCODE 25= PARTITION STATUS 
      DEF ERDS6    RCODE 26= UNDEFINED (MEMORY SIZE RTE-IV) 
TABAD DEF *,I 
* 
UPLIM ABS LOW1-*   REQUEST CODE LIMIT-VALUE: -(MAX. RCODE+1)
* 
DBMAX ABS #DBS      CONSTANT: MAXIMUM DATA BUFFER SIZE. 
L#MHD ABS #MHD      MINIMUM REPLY LENGTH
L#IBL ABS #IBL+1    MAXIMUM REQ LENGTH. 
L#TYR ABS #TYR+1    RC=11 (TIME REQUEST) REPLY LENGTH.
L#ST3 ABS #ST3+1    I/O OR PARTITION STATUS REPLY LENGTH. 
L#KST ABS #KST+1    RC=99 (PROGRAM STATUS) REPLY LENGTH.
MAXRQ ABS #DLW      MAXIMUM REQUEST LENGTH. 
SAVLN ABS #BFL+2    MAXIMUM HOLD-CLASS REQUEST LENGTH.
L#PGN ABS -#PGN-3   -(MINIMUM REQUEST LENGTH) FOR RC=10.
      SPC 1 
DABUF BSS #DBS      DATA BUFFER 
RQB   EQU #RPB      REQUEST BUFFER (EXTERNAL) 
SAVCL NOP           CLASS NO. W/BUFFER-SAVE & CLASS-SAVE
PURCL NOP           CLASS NO. W/CLASS-SAVE ONLY.
TEMP  BSS 4 
* 
      HED EXECM: INITIAL CONFIGURATION * (C) HEWLETT-PACKARD CO. 1980 
      ORG DABUF     CONFIGURATION: EXECUTED ON FIRST ENTRY. 
* 
CONFG NOP 
      LDA $OPSY     GET THE SYSTEM SPECIFICATION. 
      AND D2        ISOLATE THE DMS BIT(#1).
      SZA,RSS       IF THIS IS NOT A DMS SYSTEM,
      JMP NODMS      THEN NO NEED TO MODIFY CODE; 
      DLD XSAI      CHANGE THE 'STA B,I' INSTRUCTION
      DST DMS1       TO DMS'S  'XSA B,I' EQUIVALENT.
      DLD XLAI      CHANGE THE 'LDA B,I' INSTRUCTION
      DST DMS2       TO DMS'S  'XLA B,I' EQUIVALENT.
NODMS JSB DIRCT     GET A DIRECT ADDRESS FOR THE
      DEF RTNDF      CONFIGURED-CALL RETURN POINTER.
      JSB DIRCT     GET A DIRECT ADDRESS FOR THE
      DEF UPRDF      POINTER INTO THE REQUEST BUFFER. 
      JSB DIRCT     GET A DIRECT ADDRESS FOR THE
      DEF RQBAD      POINTER TO THE REQUEST BUFFER. 
      JSB DIRCT     GET A DIRECT ADDRESS FOR THE
      DEF DABFA      POINTER TO THE DATA BUFFER.
* 
      JSB CLRQ      CLEAR AND 
      DEF *+3        RELEASE
      DEF D2NA        <EXECM'S> 
      DEF #EXHC       HOLDING CLASS.
      NOP           [IGNORE ERRORS] 
* 
      JSB CLRQ      REQUEST A 
      DEF *+3        NEW HOLDING CLASS
      DEF D1NA        FOR USE BY <EXECM>
      DEF #EXHC        IN TEMPORARY REQUEST STORAGE.
      JMP TERM      ERROR!! WE CANNOT PROCEED!
* 
      LDA #EXHC     GET THE RETURNED CLASS NUMBER.
      IOR CLCD1     INCLUDE NO-WAIT/SAVE BUFFER BITS, 
      STA #EXHC      AND CONFIGURE HOLDING CLASS WORD.
      XOR CLCD2     FORM NO-WAIT/SAVE CLASS PARAMETER,
      STA EXHCL      AND CONFIGURE THE CLASS CLEANUP WORD.
* 
      JSB CLRQ      CLEAR AND 
      DEF *+3        RELEASE
      DEF D2NA        <EXECM'S> 
      DEF #EXTC        TEMPORARY CLASS. 
      NOP           [IGNORE ERRORS] 
* 
      JSB CLRQ      REQUEST A 
      DEF *+3        NEW TEMPORARY CLASS
      DEF D1NA        FOR USE BY <EXECM>
      DEF #EXTC        IN DETERMINING BUFFER ADDRESS. 
      JMP TERM      ERROR!! WE CANNOT PROCEED!
* 
      LDA #EXTC     GET RETURNED CLASS NUMBER.
      IOR CLCD1     INCLUDE NO WAIT/SAVE BUFFER BITS, 
      STA #EXTC      AND CONFIGURE TEMP. CLASS WORD.
      XOR CLCD2     FORM NO-WAIT/SAVE CLASS PARAMETER,
      STA EXTCL      AND CONFIGURE CLASS CLEANUP WORD.
* 
      CLB           NO NEED TO GO 
      STB FIRST      THRU THIS AGAIN. 
      JMP CONFG,I   GO TO START OPERATIONS. 
* 
CLCD1 OCT 140000    NO WAIT/SAVE BUFFER.
CLCD2 OCT 060000    NO WAIT/SAVE CLASS. 
D1NA  OCT 140001
D2NA  OCT 140002
XLAI  XLA B,I       'XLA' INSTRUCTION.
XSAI  XSA B,I       'XSA' INSTRUCTION.
* 
DIRCT NOP           DIRECT ADDRESS TRACK-DOWN ROUTINE.
      LDA DIRCT,I   GET LOCATION OF DEF INSTRUCTION.
      STA B         SAVE, TEMPORARILY.
      LDA A,I       TRACK DOWN
      RAL,CLE,SLA,ERA  A
      JMP *-2            DIRECT ADDRESS.
      STA B,I       ESTABLISH DIRECT ADDRESS, AS REQUESTED. 
      ISZ DIRCT     SET RETURN FOR P+2, 
      JMP DIRCT,I    AND RETURN TO THE CALLER.
* 
TERM  JSB EXEC      CALL IT QUITS!
      DEF *+2       WE CANNOT OBTAIN
      DEF D6         SUFFICIENT RESOURCES!
* 
      ORR           <EXECM> SIZE
* 
      END EXECM 
                                                                                                                                                                                                    