ASMB,Q,C
      HED EXECW: SCHEDULE-WITH-WAIT PROCESSOR *(C) HEWLETT-PACKARD CO. 1980*
      NAM EXECW,19,30 91750-16112 REV.2013 800507 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.   *
*  ***************************************************************
* 
*    NAME:   EXECW
*    SOURCE: 91750-18112
*    RELOC:  91750-16112
*    PGMR:   C. HAMILTON  [07/28/77]
* 
* 
* 
* 
*  <EXECW> IS THE DS/1000 MONITOR, WHOSE FUNCTION IS TO PROCESS ALL 
*   REQUESTS, WHICH ARE FORWARDED TO THIS NODE VIA SLAVE STREAM #3. ALL OF
*   THESE REQUESTS WILL HAVE BEEN ORIGINATED THROUGH A USER'S REQUEST TO THE
*   <DEXEC> USER-INTERFACE MODULE. REQUESTS PROCESSED BY <EXECW> ARE
*   HANDLED ON A 'FIRST COME, FIRST SERVED' BASIS! THUS, IF <EXECW> IS
*   'WAITING' FOR COMPLETION OF A PREVIOUSLY-SCHEDULED PROGRAM, A NEW 
*   REQUEST CANNOT BE HONORED, UNTIL THE PREVIOUS REQUEST HAS COMPLETED.
* 
*  THE CURRENT USER'S NODE NUMBER WILL BE STORED IN #CNOD, IN <RES>.
*    ( WHEN <EXECW> IS INACTIVE, #CNOD WILL CONTAIN -1 )
* 
*   NOTE: SPECIAL PROCESSING IS PROVIDED FOR THE RTE-M&L ABSOLUTE 
*         LOADER <APLDR> (SEE INFORMATION FOR SUBROUTINE 'APLCK').
* 
*   THOSE REQUESTS WHICH ARE ACCEPTABLE FOR PROCESSING VIA <EXECW>
*    MAY BE CLASSIFIED UNDER THE FOLLOWING 'EXEC' REQUEST CODES:
* 
*     6 - TERMINATE A PROGRAM (PREVIOUSLY SCHEDULED VIA <EXECW>)
*         ** NOTE: NOT SUPPORTED IN RTE-L ENVIRONMENT  REJECTED: DS06!
* 
* 
*     9 - SCHEDULE A PROGRAM WITH 'WAIT' (REPLY RETURNED UPON COMPLETION) 
* 
*    23 - QUEUE-SCHEDULE A PROGRAM WITH 'WAIT' (SCHEDULE WHEN AVAILABLE)
*         (REPLY RETURNED UPON COMPLETION OF SCHEDULED PROGRAM) 
* 
* 
*   NOTE: FOR RC=9,23 PARAMETERS RETURNED FROM THE SCHEDULEE-VIA 'PRTN' OR
*         'PRTM'-WILL BE PASSED TO THE CALLER. [<EXECW> SETS <B>=-1,
*          TO INFORM <DEXEC> THAT PARAMETERS HAVE BEEN RETURNED.] 
*          ALSO, IF REQUEST CODE  BIT #11=1, THE SCHEDULED PROGRAM MAY BE 
*          CLONED, BY THE #SCSM ROUTINE.
* 
*    24 - QUEUE-SCHEDULE A PROGRAM IMMEDIATELY (SCHEDULE WHEN AVAILABLE)
*         (REPLY RETURNED AS SOON AS PROGRAM IS SCHEDULED)
      SKP 
* 
*  ERRORS, ORIGINATING IN <EXECW> (ERROR QUALIFIER =3): 
* 
*  "DS06" - ILLEGAL REQUEST CODE (NOT 6,9,23,24)
* 
*  "DS08" - INSUFFICIENT MEMORY FOR 'STRING BUFFER', OR <APLDR> NOT DORMANT.
* 
*  "RS01" - NO REMOTE SESSION SCB.
*  "SC01" - MISSING SCHEDULING PARAMETER. 
*  "SC02" - ILLEGAL SCHEDULING PARAMETER. 
*  "SC05" - ATTEMPT TO CONTROL <EXECW>, OR UNDEFINED PROGRAM. 
* 
*  "XXNN" - [ RTE SYSTEM-ORIGINATED ERRORS, ERROR QUALIFIER =0 ]
      SKP 
* GLBLK-START 
* 
******************************************************************
*                                                                *
*     G L O B A L   B L O C K               REV 2001 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) 
#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 
* 
      EXT #ATCH,#CNOD,#GET,#LNOD,#NODE,#RPB,#SCSM,#SLAV 
      EXT $LIBR,$LIBX,$OPSY,DTACH,EXEC,RMPAR,PGMAD
      EXT .CAX,.DSX,.MVW,.CBT 
A     EQU 0 
B     EQU 1 
RQB   EQU #RPB
      SUP 
      SPC 2 
EXECW JSB RMPAR     RETRIEVE THE
      DEF *+2        SCHEDULING 
      DEF SAVCL       PARAMETER(S). 
* 
      CLB 
      LDA $OPSY     GET THE SYSTEM SPECIFICATION. 
      AND D4        ISOLATE THE RTE-M&L BIT(#2).
      SZA           IF NOT RTE-M OR L, SKIP 
      STB SCHD0      ELSE, PREVENT <APLDR> PROCESSING.
* 
      STB DABUF     CLEAR NAME BUFFER, WORD #1. 
      JSB PGMAD     GO TO 
      DEF *+3        OBTAIN 
      DEF DABUF       <EXECW'S> 
      DEF XEQT         ID ADDRESS.
* 
      LDB RQBAD     GET A 
      JMP *+2        DIRECT 
      LDB B,I         ADDRESS 
      RBL,CLE,SLB,ERB  FOR THE
      JMP *-2           REQUEST 
      STB RQBAD          BUFFER.
* 
*  CALL <D65GT> TO 'GET' A NEW REQUEST. 
* 
GET   JSB DTACH     DETACH FROM A POSSIBLE SCB ASSOCIATION. 
      DEF *+1 
* 
      JSB #GET      WE WAIT FOR A REQUEST TO ARRIVE 
      DEF *+6 
      DEF SAVCL     MONITOR'S CLASS 
RQBAD DEF RQB       REQUEST BUFFER ADDRESS. 
      DEF L#DLW     MAXIMUM REQUEST LENGTH. 
DABFA DEF DABUF     DATA BUFFER ADDRESS.
      DEF DBMAX     MAXIMUM DATA BUFFER SIZE. 
      JMP GET       IGNORE INITIAL ERRORS!
* 
      DST SAVA      <A> = REQUEST LENGTH; <B> = DATA LENGTH.
      LDA L#MHD     INITIALIZE FOR A
      STA RPLYL      MINIMUM-LENGTH REPLY.
* 
      SKP 
* 
*  EXAMINE AND VERIFY THE REQUEST CODE (VALID CODES: 6,9,23,24) 
* 
      LDA RQB+#ICD  GET THE REQUEST CODE. 
      AND CLNMS     EXCLUDE THE 'CLONE-OK' BIT (#11). 
      CPA D6        TERMINATION REQUEST?
      JMP PKILL     YES, GO TO KILL THE PROGRAM.
      CPA D9        SCHEDULE WITH WAIT? 
      JMP SCHED      YES. GO TO SCHEDULE & WAIT.
      CPA D23       QUEUE-SCHEDULE WITH WAIT? 
      JMP SCHED      YES--THAT'S ACCEPTABLE.
      CPA D24       QUEUE-SCHEDULE WITHOUT WAIT?
      JMP SCHED      YES--ACCEPT THAT REQUEST, ALSO.
* 
ERDS6 DLD DS06      ERROR "DS06": BAD REQUEST CODE. 
      JMP ERRTN     RETURN ERROR-CODE TO CALLER.
ERS01 DLD RS01      "RS01": NO REMOTE SESSION SCB.
      JMP ERRTN 
ERSC1 DLD SC01      ERROR "SC01": MISSING PARAMETER.
      JMP ERRTN 
ERSC2 DLD SC02      ERROR "SC02": INVALID PARAMETER.
      JMP ERRTN     RETURN ERROR-CODES TO CALLER. 
ERSC5 DLD SC05      ERROR "SC05": IMPROPER PROGRAM REFERENCE. 
      JMP ERRTN 
ERDS8 DLD DS08      ERROR "DS08": INSUFFICIENT RESOURCES. 
* 
ERRTN CCE           ERROR RETURN. 
      DST RQB+#EC1  CONFIGURE REPLY BUFFER WITH ERROR CODES.
      LDA RQB+#ECQ  REMOVE THE OLD
      AND UPMSK      ERROR QUALIFIER INFORMATION; 
      IOR B60         INCLUDE THE EXECW QUALIFIER (3),
      STA RQB+#ECQ     RESTORE THE MODIFIED WORD, AND 
      JMP SNODE         GO ESTABLISH NODE OF DETECTION. 
* 
SCDON CLB,CLE       SCHEDULE-RETURN (NO PARAMETERS).
* 
DONE  DST RQB+#EC1  STORE REGISTERS IN WORDS 5&6 OF REPLY.
SNODE LDA #NODE     GET THE LOCAL NODE NUMBER, AND
      ELA,CLE,RAR    INCLUDE ASCII-ERROR FLAG (BIT#15). 
      STA RQB+#ENO  STORE THE ERROR INDICATOR--IF ANY.
      LDA DM1       RESET #CNOD =-1, TO INDICATE
      JSB STCND      THAT <EXECW> IS INACTIVE.
* 
      JSB NCLON     GO TO REMOVE THE CLONE--IF ANY. 
* 
*  CALL <#SLAV> TO INDICATE, TO THE USER, THAT THE REQUEST IS COMPLETE. 
* 
      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 IT AS LAST WORD OF REPLY. 
      ISZ RPLYL     INCLUDE IDENTIFIER IN REPLY LENGTH. 
* 
      SKP 
      JSB #SLAV     TRANSMIT
      DEF *+4        THE REPLY
      DEF RPLYL        BACK TO THE ORIGINAL 
      DEF DABUF         REQUESTOR'S 
      DEF D0             NODE.
      NOP           IGNORE ERRORS--WE CAN DO NOTHING! 
      JMP GET       RETURN FOR THE NEXT REQUEST/COMPLETION. 
* 
      SKP 
*   PROGRAM COMPLETION, SCHEDULE W/WAIT, & QUEUE-SCHEDULEING   RC=6,9,23,24 
* 
PKILL LDB $OPSY     PROGRAM TERMINATION.
      CPB DM31      IF ENVIRONMENT IS RTE-L, THEN 
      JMP ERDS6      TERMINATION OF A SON IS NOT SUPPORTED. 
* 
SCHED IOR BIT15     ADD NO-ABORT BIT(#15) TO REQUEST CODE,
      STA RCODE      AND SAVE FOR THE CALL TO 'EXEC'. 
      LDA RQB+#SID  GET SESSION ID WORD FROM REQUEST. 
      AND B377      ISOLATE DEST. SESSION ID (BITS# 7-0). 
      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!
* 
      JSB CLONE     CREATE A CLONE PROGRAM--IF REQUESTED. 
* 
      JSB PGMAD     GO TO GET THE SCHEDULEE'S STATUS. 
      DEF *+6       THE PROGRAM OF INTEREST 
RQNAM DEF RQB+#PGN   IS NAMED IN THE REQUEST BUFFER.
      DEF TEMP      RETURNED: ID ADDRESS
      DEF TEMP+1    RETURNED: PROGRAM STATUS
      DEF TEMP+2    RETURNED: ID SEGMENT TYPE 
      DEF TEMP+3    RETURNED: FATHER'S ID ADDRESS 
      SZA           ANY ATTEMPT TO
      CPA XEQT       REMOTELY-CONTROL <EXECW> 
      JMP ERSC5       IS UN-ACCEPTABLE! ERROR: "SC05".
* 
      LDB RCODE     GET THE REQUEST CODE. 
      ELB,CLE,ERB   REMOVE THE NO-ABORT BIT(#15). 
      CPB D6        PROGRAM TERMINATION REQUEST?
      JMP CKLIN      YES. SKIP TO DETERMINE LINEAGE.
      JMP SCHD0      NO. IT'S A NORMAL SCHEDULE REQUEST.
* 
CKLIN LDA TEMP+3    GET THE FATHER'S ID SEGMENT ADDRESS.
      CPA XEQT      OUR OFFSPRING?
      JMP SCHD0+1    YES, WE CAN HONOR THE REQUEST. 
      JMP ERSC5      NO. WE CANNOT PROCESS THE REQUEST. 
* 
SCHD0 JSB APLCK     CHECK FOR <APLDR> [NOP: RTE-II/III/IV]
      LDA SAVA      GET THE REQUEST LENGTH. 
      ADA N#FNO     IF THE LENGTH [AFTER APLCK COMPENSATION]
      SSA,RSS        EXCEEDS MAX, THEN
      JMP ERSC2       IT IS AN INVALID REQUEST! 
* 
      LDA L#MIN     GET THE MINIMUM BUFFER SIZE.
      CMA,INA       NEGATE. 
      LDB RTNDF     GET THE DEFAULT RETURN POINTER. 
      ADA SAVA      SUBTRACT THE 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 PR3DF     <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 ADB D2        ADVANCE POINTER PAST ERROR INSTRUCTIONS.
      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+1    GO TO CLEAR THE NEXT LOCATION. 
* 
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 SET-UP. 
      LDA DABFA     GET LOCAL DATA BUFFER ADDRESS,
      STA STRAD      AND ESTABLISH STRING-POINTER IN CALL.
SCHD4 DLD ERRIN     LOAD THE ERROR-DETECTION INSTRUCTIONS.
      DST RTNAD,I   STORE THEM AT END OF CALLING SEQUENCE.
      LDA RQB+#SRC  GET THE SOURCE-NODE.
      JSB STCND     ESTABLISH CURRENT USER'S NODE IN <RES>. 
      LDB DM1       PREPARE FOR RETURN-PARAMETER CHECKING.
* 
*    THE  CONFIGURED 'EXEC' CALLING SEQUENCE IS EXECUTED BELOW: 
* 
      JSB EXEC      BUFFER FOR ASSEMBLING 'EXEC' REQUESTS.
RTNAD DEF PR3AD     RETURN POINTER (CONFIGURED).
      DEF RCODE     REQUEST CODE (SUPPLIED BY CALLER) 
      DEF RQB+#PGN  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 CPA DM1       REJECTING A STRING-PASSING REQUEST? 
      JMP ERDS8      YES, SKIP TO RETURN "DS08".
      SEZ            NO. WAS A SYSTEM-LEVEL ERROR DETECTED? 
      JMP DONE        YES. RETURN THE ERROR CODES TO CALLER!
* 
      CPB DM1       IF NO PARAMETERS WERE RETURNED, 
      JMP SCDON      THEN RETURN TO CALLER WITH <B>=0;
      STA STCND       ELSE, SAVE THE STATUS TEMPORARILY.
* 
      LDA B         SOURCE=RETURN-PARAMETERS IN I.D.SEGMENT.
      LDB RTPRM     DESTN.=EIGHTH WORD OF REPLY BUFFER. 
      JSB .MVW      MOVE THE PARAMETERS TO THE REPLY BUFFER.
      DEF D5
      NOP 
* 
      LDA L#RPM     SET THE 
      STA RPLYL      REPLY LENGTH.
      LDA STCND     RECOVER THE PROGRAM STATUS. 
      CCB,CLE       INDICATE: PARAMETERS RETURNED--NO ERROR.
      JMP DONE      COMPLETE THE REQUEST PROCESSING.
* 
*  SESSION MONITOR INTERFACING ROUTINE: CLONE A PROGRAM.
* 
CLONE NOP           CREATE A CLONE, 
      CLA            IF THE CLONE-OK BIT(#11) OF RC IS SET. 
      JSB #SCSM     CALL THE CLONE ESTABLISHMENT ROUTINE. 
      JMP ERSC5     CANNOT BE DONE: ERROR 'SC05'! 
* 
      LDA RQNAM     GET REQ. BUFFER ADDRESS OF PGM. NAME, 
      LDB SVNAM      AND SAVE-BUFFER ADDRESS, TOO.
      JSB .MVW      MOVE THE CLONE
      DEF D3         PROGRAM NAME 
      NOP             TO A SAFE PLACE.
* 
      JMP CLONE,I   RETURN. 
* 
NCLON NOP           LIQUIDATE A CLONE PROGRAM.
      LDA SVNAM     GET ADDRESS OF SAVED PGM. NAME. 
      JSB #SCSM     GO TO ELIMINATE THE CLONE.
      JMP NCLON,I   RETURN. 
* 
SVNAM DEF SAVBF 
SAVBF BSS 3         SAVE BUFFER FOR CLONE'S NAME. 
* 
      SKP 
*  SET #CNOD IN <RES>: + NODE # = CURRENT <EXECW> CALLER; -1 = INACTIVE.
* 
STCND NOP 
      JSB $LIBR 
D0    NOP 
      STA #CNOD     SET <A> INTO #CNOD, IN <RES>. 
      JSB $LIBX 
      DEF STCND     RETURN. 
* 
*  SPECIAL PROCESSING FOR <APLDR> IN RTE-M OR L ENVIRONMENT:
* 
*   IF NOT SCHEDULING <APLDR>, RETURN; ELSE, CHECK <APLDR> STATUS.
*   IF NOT DORMANT, REJECT "DS08"; ELSE, STORE SECURITY CODE AND
*    CARTRIDGE REFERENCE NO. INTO <APLDR> I.D. SEGMENT WORDS #27,28 
*    IN AN 'M', OR, IN THE 2ND SCHEDULE PARAMETER AND #ACRN IN
*    <RES>, RESPECTIVELY, IN AN 'L'.
*   STORE REQUEST'S SOURCE-NODE INTO #CNOD IN <RES>, AND ALSO STORE 
*    FILE-LOCATION NODE INTO #LNOD IN <RES>.
* 
APLCK NOP 
      ADA D12       POINT TO I.D. SEGMENT WORD #13 (NAME).
      RAL           FORM A BYTE ADDRESS 
      STA B          FOR THE PROGRAM'S I.D. SEGMENT "NAME". 
* 
      LDA APLBA     GET THE REFERENCE BYTE ADDRESS. 
      JSB .CBT      IF THIS IS AN <APLDR> SCHEDULE REQUEST, 
      DEF D5
      NOP 
      JMP APSET      THEN GO TO PROCESS IT'S PARAMETERS;
      JMP APLCK,I     ELSE, NO FURTHER SPECIAL
      JMP APLCK,I      PROCESSING IS REQUIRED.
* 
APSET LDA TEMP+1    GET THE I.D. SEGMENT STATUS WORD. 
      AND B17       ISOLATE <APLDR'S> CURRENT STATUS. 
      SZA           IF IT IS NOT AVAILABLE, 
      JMP ERDS8      THEN, NOTHING MORE CAN BE DONE!
* 
      LDA SAVA      COMPENSATE FOR THE
      CPA L#FNO      THREE ADDITIONAL 
      ADA DM3         REQUEST-PARAMETERS, USED TO 
      STA SAVA         SPECIFY <APLDR> DOWN-LOADING.
* 
      LDA $OPSY 
      CPA DM31      L-SERIES ?
      JMP APSE1     YES, HANDLE EXTRA PARAMETERS
* 
      CLE,ERB       CONVERT FROM BYTE, TO WORD ADDRESS. 
      ADB D12       POINT TO I.D. SEGMENT WORD #27. 
      LDA RQB+#IBF  GET THE SECURITY CODE.
      JSB $LIBR 
      NOP 
      STA B,I       SET SECURITY CODE INTO I.D. WORD #27. 
      CLE,INB 
      LDA RQB+#IBL  GET THE CARTRIDGE REFERENCE NUMBER. 
      STA B,I       SET CRN INTO I.D. SEGMENT WORD #28. 
* 
      LDB RQB+#FNO  GET LOCATION-NODE FOR THE RELOC. FILE.
      STB #LNOD     SET #LNOD IN <RES>, FOR <APLDR>.
      JSB $LIBX 
      DEF APLCK     RETURN. 
* 
APSE1 LDA RQB+#IBF  GET SECURITY CODE 
      STA RQB+#PMS+1  MAKE IT SECOND PRAM.
      DLD RQB+#IBL  GET CRN & NODE #
      DST DABUF      SAVE IN DATA BUFFER. 
      LDA D2        INSERT STRING LENGTH
      STA RQB+#IBL   INTO REQUEST BUFFER. 
      ADA SAVA      COMPENSATE FOR
      STA SAVA       STRING PASSING.
      JMP APLCK,I   RETURN TO MAIN PROCESSING.
* 
* 
APLBA DBL *+1       REFERENCE-NAME BYTE ADDRESS.
      ASC 3,APLDR 
* 
      SKP 
DM31  DEC -31 
DM3   DEC -3
DM1   DEC -1
D2    DEC 2 
D3    DEC 3 
D4    DEC 4 
D5    DEC 5 
D6    DEC 6 
D9    DEC 9 
D12   DEC 12
B17   OCT 17
D23   DEC 23
D24   DEC 24
B60   OCT 60
B377  OCT 377 
CLNMS OCT 173777    BIT #11 EXCLUSION MASK. 
BIT15 OCT 100000
DS06  ASC 2,DS06
DS08  ASC 2,DS08
RS01  ASC 2,RS01
SC01  ASC 2,SC01
SC02  ASC 2,SC02
SC05  ASC 2,SC05
RCODE NOP           REQUEST CODE FOR CALL TO 'EXEC'.
RPLYL NOP 
RTPRM DEF RQB+#RPM
PR3DF DEF RQB+#PMS
RTNDF DEF PR3AD 
DBMAX ABS #DBS      MAXIMUM DATA BUFFER SIZE. 
LASTA DEF ENDBF 
L#FNO ABS #FNO+1    MAXIMUM 'APLDR' REQUEST LENGTH. 
L#MIN ABS #PGN+3
N#FNO ABS -#FNO-1 
L#RPM ABS #RPM+5
L#DLW ABS #DLW
L#MHD ABS #MHD
TEMP  BSS 4 
UPMSK OCT 177400
XEQT  NOP           CONFIGURED ID ADDRESS: <EXECW>. 
* 
* * * DO NOT CHANGE ORDER OF NEXT SIX STATEMENTS * * *
* 
ERRIN CCE,RSS 
      CLE 
SAVA  NOP 
      NOP 
SAVCL NOP 
DABUF BSS #DBS      DATA BUFFER.
* * * * * * * * * * * * * * * * * * * * * * * * * * * 
* 
      BSS 0         [ SIZE OF <EXECW> ] 
* 
      END EXECW 
                                                                                                                                                                                                                    