ASMB,L,R,C
      HED DEXEC: DS/1000 REMOTE EXEC ROUTINE *(C) HEWLETT-PACKARD CO.1980*
      NAM DEXEC,7 91740-16038 REV 2001 790405 
      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:   DEXEC
*    SOURCE: 91740-18038
*    RELOC:  91740-16038
*    PGMR:   C. HAMILTON  [ 04/05/79 ]
      SPC 1 
*  <DEXEC> (DISTRIBUTED EXECUTIVE) IS THE DS/1000 USER INTERFACE FOR
*   'TRANSPORTABLE' CALLS TO EITHER THE LOCAL, OR REMOTE-NODE RTE SYSTEM. 
* 
*  <DEXEC> WILL ACCEPT ALL VALID REQUEST CODES FOR 'LOCAL' EXECUTION. 
* 
*  FOR EXECUTION AT A REMOTE NODE, <DEXEC> WILL ACCEPT REQUEST CODES: 
*    1, 2, 3, 6, 9, 10, 11, 12, 13, 23, 24, 25, <99>  * ONLY *
* 
*  ** UNACCEPTABLE REQUESTS WILL BE REJECTED WITH A "DS06" ERROR! 
* 
*  ** "IO01" IS RETURNED UPON DETECTION OF INCORRECT, MISSING, OR 
*      TOO MANY (>9) PARAMETERS.
* 
*  ** "IO04" WILL BE RETURNED FOR BUFFER-ERROR SPECIFICATIONS:
*      'Z-BIT(#12)' SET IN CONWD, REMOTE READ/WRITE BUFFER LENGTH 
*      GREATER THAN 512 WORDS, INTERACTIVE WRITE LENGTH > READ LENGTH.
* 
*  ** "SC01" INDICATES A MISSING SCHEDULING PARAMETER.
* 
*  ** "SC05" INDICATES AN IMPROPER PROGRAM NAME SPECIFICATION.
* 
* REQUEST CODES: 1,2,3,6,10,11,12,13,25,99 WILL BE TRANSMITTED TO THE REMOTE
*   NODE, VIA STREAM #5, TO BE PROCESSED BY <EXECM>. MASTER (THIS NODE),
*   AND SLAVE (REMOTE NODE) TIMEOUTS, ESTABLISHED WITH <LSTEN>, WILL BE 
*   USED TO PROCESS THESE REQUESTS. REQUEST CODES: 9,23,24 WILL BE
*   TRANSMITTED TO THE REMOTE NODE, VIA STREAM #3, TO BE PROCESSED BY 
*   <EXECW>. A LONG MASTER TIMEOUT (APPROX. 20 MIN.) WILL BE ALLOWED, 
*   IN ORDER TO PROVIDE SUFFICIENT TIME FOR SCHEDULE-WITH-WAIT REQUESTS.
* 
*  CALLING SEQUENCE:     CALL DEXEC(NODE,P1,P2,P3,P4,P5,P6,P7,P8,P9)
* 
*  RETURN (X&Y INTACT) : <P+1> - NORMAL COMPLETION, IF REQUEST CODE SIGN =0 
*                                <A&B> CONTAIN 'EXEC' RETURN INFORMATION
* 
*                      : ERROR DETECTED: ABORT & PRINT MESSAGE, IF RC#15 =0 
* 
*                      : <P+1> - FOR DETECTED ERRORS, IF RC#15 =1 
*                                <A&B> CONTAIN ASCII ERROR CODES
* 
*                      : <P+2> - FOR NORMAL COMPLETION, IF RC#15 =1 
*                                <A&B> CONTAIN 'EXEC' RETURN INFORMATION
* 
*    NODE - SPECIFIES CALL-EXECUTION LOCATION: LOCAL=-1, REMOTE= 0 TO 32767 
*           [ CALL WILL ALSO EXECUTE, LOCALLY, IF THE 'LOCAL' NODE IS USED ]
* 
*    P1 TO P9 - NORMAL 'EXEC' CALLING PARAMETERS (P1 = REQUEST CODE, ETC.)
* 
*    <DEXEC> WILL ALLOW THE USER TO PERFORM A COMBINED, INTERACTIVE,
*     WRITE-READ OPERATION IN A SINGLE CALLING SEQUENCE. SUCH A REQUEST 
*     WILL BE MOST USEFUL FOR EFFICIENTLY COMMUNICATING WITH A REMOTE 
*     OPERATOR. TO SPECIFY AN INTERACTIVE WRITE-READ: REQUEST CODE =1,
*     CONWORD BIT#11 =1, P8 = WRITE BUFFER ADDRESS, AND P9 = WRITE
*     BUFFER LENGTH (<=READ BUFFER LENGTH). 
* 
* 
* * RCODE=99: PROGRAM STATUS; P2:PGM.NAME ADDR; P3: OPTIONAL STATUS ADDR. 
*   RTN: <A>#15=1: SHORT I.D.,#3-0: STATUS; <A>=-1:ERROR; <B> ALWAYS=0. 
      SKP 
      ENT DEXEC 
      EXT .ENTR,$LIBR,$LIBX,EXEC,REIO 
      EXT #NODE,D65AB,D65MS,PGMAD 
      SUP 
DEXEC NOP 
      DST SAVEA     SAVE <A&B> FOR RETURN-PARAMETER CHECKS. 
      STX SAVEX     SAVE <X> REGISTER.
      STY SAVEY     SAVE <Y> REGISTER.
      ERA,ALS       MOVE <E> TO SIGN BIT. 
      SOC           IF THE OVERFLOW BIT IS SET, 
      INA            THEN SET BIT #0, ALSO. 
      STA SAVEO     SAVE THE STATES OF <E> & <O>. 
      LDA DEXEC     GET THE RETURN POINTER. 
      STA EXIT      SAVE FOR '.ENTR' PROCESSING.
      LDX D12 
      CLA 
      SAX PRAMS-1   INITIALIZE PARAMETER AREA 
      DSX 
      JMP *-3 
      JMP GETPR     GO TO OBTAIN PARAMETER ADDRESSES. 
      SPC 1 
CALEX JSB RQLEN,I   LOCAL-EXECUTION CALL TO 'EXEC'/'REIO' 
PRAMS REP 10        PARAMETER ADDRESSES/LOCAL EXECUTION AREA
      NOP 
      NOP 
      NOP 
      SEZ,RSS       LOCAL EXECUTION: ANY ERRORS DETECTED? 
      ISZ EXIT       NO. ESTABLISH RETURN TO <P+2>. 
      STA IRBUF+4   SAVE <A>, TEMPORARILY.
      JMP RSTEO     GO TO RESTORE REGISTERS AND RETURN. 
      SPC 1 
EXIT  NOP 
GETPR JSB .ENTR     GET DIRECT ADDRESSES
      DEF PRAMS       FOR THE USER-SPECIFIED PARAMETERS.
      LDA PRAMS+1   GET THE ADDRESS OF THE REQUEST CODE.
      SZA,RSS       WAS THE PARAMETER PROVIDED? 
      JMP ERR        NOT PROVIDED, ERROR! 
      LDB PRAMS+1,I GET THE REQUEST CODE. 
      RBL,CLE,ERB   REMOVE THE NO-ABORT BIT, AND SAVE IN <B>
      STB ICODE      & ICODE FOR MAPPING & POST PROCESSING. 
* 
      LDA PRAMS,I   GET THE DESTINATION 
      CPA #NODE     FOR US ?
      JMP LOCAL      YES. GO TO LOCAL PROCESSING. 
      INA,SZA,RSS     IS IT AN ABSOLUTE LOCAL REFERENCE?
      JMP LOCAL        YES. GO TO LOCAL PROCESSING. 
      SKP 
* 
SPLOC LDX D15       NOT LOCAL--SET COUNT FOR REQUEST BUFFER.
      CLA,CCE       <A>=0: BUFFER INIT; <E>=1: CONWORD PREP.
      SAX IRBUF-1   INITIALIZE REQUEST BUFFER 
      DSX 
      JMP *-3 
* 
      STA WRLEN     SET THE 'NO DATA' 
      STA RDLEN      DEFAULT CONDITIONS.
* 
      ERA           SET THE 'ERROR-RETURN' FLAG FOR 
      STA CONWD      THE <D65MS> CALLING SEQUENCE.
* 
      LDA PRAMS,I   GET THE DESTINATION 
      STA IRBUF+3   SAVE IT IN THE REQUEST
* 
      LDA D5        GET THE STREAM TYPE 
      STA IRBUF     SET IT IN THE REQUEST 
* 
      LDA ICODE     GET THE REQUEST CODE
      STA IRBUF+4   INITIALIZE WORD #5 OF REQUEST BUFFER. 
      CPA D99       IF THE REQUEST IS FOR PROGRAM STATUS, 
      JMP PGMST      THEN PROCESS IT INDEPENDENTLY. 
      SZA           REQUEST CODE =0?
      ADA UPLIM      NO. SEE IF IT'S WITHIN 
      SSA,RSS             THE RANGE: 0 < RC < 27 ?
      JMP ERR       ERROR, OUT OF RANGE: RC=0, OR RC>26!
      LDA PRAMS+2 
      SZA,RSS       WAS A THIRD PARAMETER SPECIFIED?
      JMP ERIO1      NO, ERROR! 
* 
*  SELECT THE PRE-PROCESSOR ROUTINE, VIA MAPPED REQUEST CODE. 
* 
      ADB SUBAD     MAP ICODE IN PRE-PROCESS MENU 
      JMP B,I       GO DO IT [<A>= THIRD PARAMETER ADDRESS] 
* 
      SKP 
*  PRE-PROCESSOR JUMP TABLE 
* 
SUBAD DEF SUBS-1,I
SUBS  DEF IC1/2     READ                               RC=01
      DEF IC1/2     WRITE                              RC=02
      DEF ICOD3     CONTROL                            RC=03
      DEF ERR       * TRACK ALLOCATION                 RC=04
      DEF ERR       * TRACK RELEASE                    RC=05
      DEF ICOD6     PROGRAM TERMINATION                RC=06
      DEF ERR       * PROGRAM SUSPEND                  RC=07
      DEF ERR       * SEGMENT LOAD                     RC=08
      DEF SCHW      SCHEDULE W/WAIT                    RC=09
      DEF ICD10     SCHEDULE W/O WAIT                  RC=10
      DEF ICD11     TIME                               RC=11
      DEF ICD12     TIME SCHEDULE                      RC=12
      DEF ICD13     I/O STATUS                         RC=13
      DEF ERR       * GET STRING                       RC=14
      DEF ERR       * GLOBAL TRACK ALLOCATE            RC=15
      DEF ERR       * GLOBAL TRACK RELEASE             RC=16
      DEF ERR       * CLASS READ                       RC=17
      DEF ERR       * CLASS WRITE                      RC=18
      DEF ERR       * CLASS CONTROL                    RC=19
      DEF ERR       * CLASS WRITE/READ                 RC=20
      DEF ERR       * CLASS GET                        RC=21
      DEF ERR       * SWAP CONTROL                     RC=22
      DEF SCHW      QUEUE-SCHEDULE W/WAIT              RC=23
      DEF SCHW      QUEUE-SCHEDULE W/O WAIT            RC=24
      DEF PARST     PARTITION STATUS                   RC=25
      DEF ERR       *  MEMORY STATUS (RTE-IV)          RC=26
* 
UPLIM ABS SUBAD-*   REQUEST CODE LIMIT-VALUE:-(MAX.RCODE +1)
      HED DEXEC: PRE-PROCESSORS * (C) HEWLETT-PACKARD CO. 1980 *
IC1/2 LDA PRAMS+2,I GET CONTROL WORD                  RC=1,2
      STA IRBUF+5   SET IN REQUEST
      ALF,SLA       DOUBLE-BUFFER REQUEST (BIT#12 =1)?
      JMP ERIO4      YES--ERROR FOR REMOTE REQUESTS!
* 
      LDA PRAMS+3   GET BUFFER ADDRESS
      SZA,RSS       WAS IT SUPPLIED?
      JMP ERIO1      NO BUFFER, ERROR!
      STA BUFA      SET IT IN CALL TO D65MS 
* 
      LDB PRAMS+4   GET THE BUFFER-LENGTH ADDRESS.
      SZB,RSS       WAS IT SUPPLIED?
      JMP ERIO1      NO BUFFER LENGTH PROVIDED, ERROR!
      JSB LENCK     GO VERIFY & GET BUFFER WORD COUNT.
      LDB ICODE     GET THE REQUEST CODE. 
      SLB           IF THIS IS A READ(1) REQUEST, 
      STA RDLEN      THEN CONFIGURE READ LENGTH FOR <D65MS>;
      SLB,RSS         ELSE, IF THIS IS A WRITE(2) REQUEST,
      STA WRLEN        THEN CONFIGURE 'WRLEN' FOR <D65MS>.
* 
      LDA PRAMS+4,I GET LENGTH AGAIN
      STA IRBUF+6   SAVE IN REQUEST 
* 
      LDB PRAMS+5   GET ADDR OF 1ST OPT. PARAM
      SZB,RSS       SPECIFIED ? 
      JMP SRQLN      NO, SHORT REQUEST
* 
      LDA PRAMS+5,I GET FIRST OPTIONAL PARAMETER
      STA IRBUF+7 
      CLA           PREPARE FOR MISSING PARAMETER.
      LDA PRAMS+6,I GET SECOND OPTIONAL PARAMETER 
      STA IRBUF+8 
* 
      LDB IRBUF+5   GET THE USER'S CONTROL WORD.
      BLF           POSITION WRITE-READ BIT(#11) TO SIGN. 
      SSB,RSS       IF THIS IS A WRITE-READ REQUEST: SKIP;
      JMP NOMOV      ELSE, NO ADDITIONAL PROCESSING NEEDED. 
* 
      LDA RDLEN     FORCE ADEQUATE S.A.M TO BE             #
      STA WRLEN      ALLOCATED AT RECEIVING NODE.          #
* 
      LDB PRAMS+6   GET ADDRESS FOR WRITE-BUFFER LENGTH.
      JSB LENCK     GO VERIFY & GET 'WRITE' WORD COUNT. 
      STA LENCK     SAVE THE WORD-MOVE LENGTH, TEMPORARILY. 
      CMA,INA,SZA,RSS  NEGATE THE COUNT, & IF =0, 
      JMP NOMOV         NO NEED TO MOVE THE 'WRITE' BUFFER. 
* 
      ADA RDLEN     IF THE WRITE LENGTH 
      SSA            IS GREATER THAN THE 'READ' LENGTH, 
      JMP ERIO4       THEN THE REQUEST IS INVALID!
* 
      LDA PRAMS+5   GET THE 'WRITE' BUFFER ADDRESS
      LDB PRAMS+3    AND THE 'READ' BUFFER ADDRESS. 
      CPA B         IF THEY ARE THE SAME, THEN THE
      JMP NOMOV      'WRITE' DATA NEED NOT BE MOVED; ELSE,
      MVW LENCK       MOVE 'WRITE' DATA TO 'READ' BUFFER. 
* 
      LDA CONWD     GET THE <D65MS> CONTROL WORD. 
      ARS           SET THE LONG TIMEOUT BIT(#14).
      STA CONWD     RESTORE CONWD [140000B].
* 
NOMOV LDA D9        SET REQUEST LENGTH
      JMP SETLN     WE ARE ALL SET
      SPC 3 
ICOD3 LDA A,I       GET THE CONTROL WORD               RC=03
      STA IRBUF+5   SET IT IN THE REQUEST 
      CLA 
      LDA PRAMS+3,I GET OPTIONAL PARAMETER
      STA IRBUF+6   SET IT IN THE REQUEST 
SRQLN LDA D7        GO TO ESTABLISH A 
      JMP SETLN      REQUEST LENGTH = 7 WORDS.
      SPC 3 
ICOD6 LDB PRAMS+9   IF MORE THAN EIGHT PARAMETERS      RC=06
      SZB,RSS        WERE PASSED, OR IF THE 
      CPB PRAMS+3     'INUM' PARAMETER WAS NOT PASSED,
      JMP ERIO1         THEN THE CALL IS INCORRECT! 
* 
      SPC 3 
PGMST LDA PRAMS+2   PROGRAM STATUS SHARES SCHED CODE.  RC=99
* 
ICD10 JSB NAMP      GO TO PROCESS THE PROGRAM NAME.    RC=10
* 
      LDX DM7       BUILD LOOP COUNTER
LOOP3 LAX PRAMS+10  GET PARAMETER ADDRESS 
      SZA,RSS       IS IT THERE?
      JMP DON10     NO-EXIT 
      LDA A,I       YES, GET ITS VALUE
      SAX IRBUF+15  STORE INTO REQUEST
      ISY           ADVANCE THE PARAMETER COUNT.
      ISX           PROCESSING STRING-LENGTH PARAMETER? 
      JMP LOOP3      NO, CONTINUE 
      LDB PRAMS+9    YES. GET THE STRING-LENGTH ADDRESS.
      JSB LENCK     GO TO CHECK THE STRING-BUFFER LENGTH. 
      STA WRLEN     CONFIGURE WRITE LENGTH FOR <D65MS>. 
      LDB PRAMS+8   GET THE STRING BUFFER ADDRESS.
      STB BUFA      CONFIGURE 'D65MS' TO PASS DATA. 
* 
DON10 CYA           GET THE PARAMETER COUNT 
      JMP SETLN     GO TO ESTABLISH REQUEST LENGTH. 
      SPC 2 
ICD11 LDA D13       GO TO ESTABLISH A                  RC=11
      JMP SETLN      REQUEST/REPLY LENGTH =13 WORDS.
* 
      SKP 
      SPC 2 
ICD12 JSB NAMP      GO TO PROCESS THE PROGRAM NAME.    RC=12
* 
      LDX D3        SET A LOOP COUNTER
      CLA 
      LDA PRAMS+5,I GET 6TH PARAMETER 
      SSA 
      JMP LOOP1 
      ADX D3        ABSOLUTE TIME, MORE PARAMETERS
* 
LOOP1 LAX PRAMS+2   GET A PARAMETER ADDRESS 
      SZA,RSS 
      JMP ERSC1     ABSENT, ERROR 
      LDA A,I       GET THE PARAMETER 
      SAX IRBUF+7   SET IT IN THE REQUEST 
IRBF7 EQU *-1       [ DEF IRBUF+7 ] 
      ISY           ADVANCE THE PARAMETER COUNT 
      DSX           ALL DONE ?
      JMP LOOP1     NO, CONTINUE
* 
      CYA           GET THE PARAMETER COUNT.
      JMP SETLN     READY TO SEND 
* 
      SPC 2 
PARST EQU *         PARTITION STATUS                   RC=25
* 
ICD13 LDA A,I       GET CONTROL WORD/PARTITION NUMBER. RC=13
      STA IRBUF+5   SET IT IN THE REQUEST 
* 
      LDA PRAMS+3   DO THEY HAVE ANY ROOM ? 
      SZA,RSS 
      JMP ERIO1     NO, GET OUT!
* 
      LDB ICODE     GET THE REQUEST CODE. 
      CPB D25       IF THIS IS A PARTITION-STATUS REQUEST,
      CLB,RSS        THEN SKIP TO CHECK FOR ENOUGH PRAMS; 
      JMP IC13X       ELSE, OTHER PARAMETERS ARE OPTIONAL.
* 
      CPB PRAMS+5   USER PREPARED TO ACCEPT 3 PARAMETERS? 
      JMP ERIO1      NO. THE CALL IS INCORRECT! 
* 
IC13X LDA D10       SET THE LENGTH OF THE REQUEST/REPLY.
      JMP SETLN 
* 
      SPC 2 
SCHW  LDB D3        SET THE STREAM-TYPE           RC=9/23/24
      STB IRBUF      FOR THE SCHEDULE-WITH-WAIT MONITOR.
      RBR,RBR       MODIFY THE <D65MS> CONTROL WORD FOR 
      STB CONWD      WRITE & LONG TIMEOUT (140000B).
      JMP ICD10     PROCESS ALL PARAMETERS. 
      SKP 
*  COMMON PRE-PROCESSING SUBROUTINES
* 
LENCK NOP           BUFFER LENGTH PROCESSING. 
      LDB B,I       GET THE BUFFER LENGTH.
      SSB,RSS       WORDS OR -BYTES?
      JMP WORDS      POSITIVE WORDS.
      BRS            NEGATIVE BYTES--CONVERT TO -WORDS. 
      CMB,INB       MAKE THAT +WORDS
WORDS LDA B         SAVE +WORDS IN <A> FOR RETURN.
      ADB DM513     CHECK FOR VALIDITY OF LENGTH
      SSB,RSS 
      JMP ERIO4     >512, TOO MUCH
* 
      JMP LENCK,I   RETURN. 
* 
      SPC 1 
NAMP  NOP           CHECK AND MOVE PROGRAM NAME.
      LDB A,I       IF THE FIRST TWO CHARACTERS 
      SZB,RSS        ARE NULLS, THEN
      JMP ERSC5       THE CALL IS INCORRECT!
* 
      LDB NAMA      GET POINTER TO NAME, IN REQUEST 
      MVW D3        MOVE THE NAME TO THE REQUEST
      LDY D8        INITIALIZE THE PARAMETER COUNTER. 
      JMP NAMP,I    RETURN
* 
      SKP 
*  SEND THE REMOTE EXEC REQUEST VIA "D65MS" AND AWAIT REPLY 
* 
SETLN STA RQLEN     ESTABLISH REQUEST LENGTH FOR <D65MS>. 
* 
      JSB D65MS     CALL MASTER REQUEST INTERFACE ROUTINE 
      DEF *+8 
      DEF CONWD     CONTROL WORD
      DEF IRBUF     REQUEST BUFFER
      DEF RQLEN     REQUEST LENGTH
BUFA  DEF *         CONFIGURED DATA BUFFER ADDRESS--IF ANY. 
      DEF WRLEN     WRITE DATA LENGTH -- IF ANY 
      DEF RDLEN     READ  DATA LENGTH -- IF ANY 
      DEF D15       MAXIMUM REPLY LENGTH EXPECTED =15 WORDS.
      JMP ERROR     * ERROR DETECTED BY "D65MS"--REPORT IT
* 
      LDB ICODE     IF THE REQUEST CODE WAS FOR A:
      CPB D11       - TIME REQUEST, THEN THE
      JMP IPD11        TIME VALUES MUST BE POST-PROCESSED;
      CPB D13       - DEVICE-STATUS REQUEST, THEN THE DEVICE
      JMP IPD13        PARAMETERS NEED POST-PROCESSING; 
      CPB D25       - PARTITION-STATUS REQUEST, THEN THE
      JMP IPD13        PARTITION PARAMETERS NEED PROCESSING;
      CPB D99       - PROGRAM-STATUS REQUEST, THEN CHECK THE
      JMP IPD13        STATUS PARAMETER FOR POST-PROCESSING.
* 
      SKP 
*  DEXEC  POST-PROCESSING: MOVE DATA TO REPLY BUFFER & CHECK FOR ERRORS.
* 
IPOST LDA IRBUF+6 
      SSA           ANY ERROR ? 
      JMP ERROR     YES 
      LDA PRAMS+1,I GET ICODE 
      SSA           WAS THE NO ABORT BIT SET ?
      ISZ EXIT      YES PUSH RETURN ADDRESS 
* 
      LDB ICODE     GET THE REQUEST CODE. 
      CPB D9        SCHEDULE WITH WAIT? 
      CCA,RSS        YES. SET VALUE FOR PARAMETER CHECK.
      CPB D23       QUEUE SCHEDULE WITH WAIT? 
      CCA,RSS        YES. SET VALUE FOR PARAMETER CHECK.
      JMP ATEND      NO. PARAMETER PROCESSING NOT REQUIRED. 
* 
      LDB SAVEB     GET CALLER'S ORIGINAL <B> CONTENTS. 
      CPA IRBUF+5   IF <EXECW> RETURNED PARAMETERS, THEN
      JMP MVPRM      GO TO MOVE PARAMETERS TO I.D. SEGMENT. 
      JMP ATEND+1   IGNORE <B> FROM REPLY BUFFER. 
* 
MVPRM LDA IRBF7     GET ADDRESS OF RETURNED PARAMETERS. 
      LDB XTEMP     GET ADDRESS OF I.D. SEG. TEMP AREA. 
      JSB $LIBR     GAIN ACCESS TO SYSTEM AREA. 
      NOP 
      MVW D5        MOVE PARAMETERS TO CALLER'S I.D. SEG. 
      LDB XTEMP     POINT CALLER'S <B> TO PARAMETERS. 
      JSB $LIBX     RESTORE PROTECTION
      DEF *+1        AND RETURN TO
      DEF ATEND+1     COMPLETE THE PROCESSING.
* 
ATEND LDB IRBUF+5   GET <B> FROM THE REPLY BUFFER.
      LDX SAVEX     RESTORE THE ORIGINAL CONTENTS 
      LDY SAVEY      OF BOTH THE <X> & <Y> REGISTERS. 
RSTEO LDA SAVEO     GET ORIGINAL STATES FOR <E> & <O>.
      CLO           INITIALIZE OVERFLOW TO CLEAR STATE. 
      SLA,ELA       RESTORE <E>, AND IF <O> WAS SET,
      STO            THEN RESTORE IT, ALSO. 
      LDA IRBUF+4   SET <A> FOR RETURN TO CALLER. 
      JMP EXIT,I    RETURN TO <DEXEC'S> CALLER
      SKP 
IPD11 LDA IRBF7     GET ADDRESS OF THE TIME VALUES. 
      LDB PRAMS+2   GET USER'S BUFFER ADDRESS 
      MVW D5        PASS 5 WORDS TO THE USER
      LDB IRBUF+12  GET THE CURRENT 'YEAR'. 
      STB PRAMS+3,I PASS THE YEAR (OPTIONALLY)
      JMP IPOST     FINISH THE JOB
      SPC 1 
IPD13 LDA IRBUF+7   GET THE FIRST RETURN-PARAMETER. 
      STA PRAMS+3,I PASS: EQT5/STARTING PAGE/PROG. STATUS 
      CPB D99       IF THE REQUEST WAS FOR PROGRAM STATUS,
      JMP IPOST      THE POST-PROCESSING IS COMPLETE; 
* 
      LDB IRBUF+8     ELSE, GET THE NEXT RETURN-PARAMETER.
      STB PRAMS+4,I RC=13: OPTIONAL EQT4; RC=25: NO. PAGES. 
      LDB IRBUF+9   RC=13: OPTIONAL LU STATUS & SUB. CHAN;
      STB PRAMS+5,I  ELSE, IF RC=25: PARTITION STATUS.
      JMP IPOST     GO FINISH 
      SPC 2 
*  DEXEC ERROR ROUTINES.
* 
ERIO1 LDB "01"      INCORRECT,MISSING,OR TOO MANY PARAMETERS
      JMP GETIO 
ERIO4 LDB "04"      IMPROPER BUFFER SPECIFICATION.
GETIO LDA "IO"
      JMP ERRS      ERROR: "IO0X".
ERSC1 LDB "01"      MISSING SCHEDULEING PARAMETER.
      JMP GETSC 
ERSC5 LDB "05"      INCORRECT PROGRAM NAME. 
GETSC LDA "SC"
      JMP ERRS      ERROR: "SC0X" 
      SPC 2 
ERR   DLD DS06      IMPROPER REQUEST: "DS06". 
ERRS  DST IRBUF+4   ERROR CODE INTO REQ.BUFR
ERRA  EQU *-1       ERROR MESAGE ADDRESS [DEF IRBUF+4]. 
      SPC 2 
ERROR LDA PRAMS+1,I GET ICODE 
      SSA           NO ABORT BIT SET ?
      JMP ATEND     YES, IT IS
* 
      CCA 
      ADA DEXEC     WE HAVE THE ADDRESS OF THE JSB
      LDB ERRA      GET ADDRESS OF THE ERROR MESSAGE
      JSB D65AB     WE DO NOT COME BACK FROM THIS CALL
* 
* 
"01"  ASC 1,01
"04"  ASC 1,04
"05"  ASC 1,05
"IO"  ASC 1,IO
"SC"  ASC 1,SC
DS06  ASC 1,DS06
* 
      HED DEXEC: LOCAL PROCESSING * (C) HEWLETT-PACKARD CO. 1980
LOCAL CPB D99       IF THIS IS A PROGRAM STATUS REQUEST,
      JMP LOCST      THEN PROCESS IT INDEPENDENTLY. 
      CPB D1        IF THIS IS A READ REQUEST,
      JMP *+2        THEN SKIP FOR FURTHER CHECKING;
      JMP LCHEK       ELSE, CONTINUE LOCAL PROCESSING.
      LDA PRAMS+2,I GET THE CONWORD.
      ALF           IF THE INTERACTIVE BIT(#11) 
      SSA            IS SET, THEN THE REQUEST MUST BE 
      JMP SPLOC       PASSED TO <EXECM> FOR PROCESSING. 
* 
LCHEK LDB GETPR+1   GET ADDRESS OF DEF'S FOR CALL.
      LDX DM10      UP TO 9 PARAMETERS; MORE = ERROR; 
LOCL  INB           ADVANCE THE RETURN POINTER. 
      LAX PRAMS+11  GET A PARAMETER ADDRESS 
      SZA,RSS       PRESENT ? 
      JMP LOC1      NO
      ISX           MORE THAN 10 PARAMETERS PASSED? 
      JMP LOCL       NO. CONTINUE CHECKING. 
      JMP ERIO1      YES. TOO MANY--BUFFER MAY BE DESTROYED!
* 
LOC1  STB PRAMS     SET THE "DEF RETURN"
      DLD CCERS     GET ERROR-DETECTION INSTRUCTIONS. 
      DST PRAMS,I   INSERT AT RETURN LOCATIONS. 
      LDB ICODE     GET REQUEST CODE. 
      LDA EXECX     GET "EXEC" ADDRESS
      ADB DM3 
      SSB,RSS       IS IT READ OR WRITE?
      JMP LOCLN     NO, DO "EXEC" CALL
      LDB PRAMS+5 
      SZB,RSS       OPT.PARAMETERS SPECIFIED? 
      LDA REIOX     NO, OK TO USE REIO! 
LOCLN STA RQLEN     SAVE ADDR FOR MP CHECK
      LDX SAVEX     RESTORE THE <X> REGISTER, 
      DLD SAVEA      AND THE <A&B> REGISTERS, 
      JMP CALEX       AND GO EXECUTE THE CALL.
* 
LOCST JSB PGMAD     GET THE CURRENT STATUS
      DEF *+2        FOR THE USER-SPECIFIED 
      DEF PRAMS+2,I   PROGRAM NAME. 
      SZA           DOES THE PROGRAM EXIST? 
      JMP GETST      YES. GO TO PROCESS THE STATUS. 
      CCA            NO. SET <A>=-1 FOR ERROR INDICATION. 
      STA PRAMS+3,I RETURN ERROR TO USER'S PARAM.--IF ANY.
      JMP ERXIT     TAKE THE ERROR EXIT.
* 
GETST LDA B         GET THE PROGRAM'S STATUS WORD.
      AND D15       ISOLATE THE STATUS BITS(#3-0), AND
      RAL,ERA        SET SHORT I.D. BIT(#15)--IF TRUE.
      STA PRAMS+3,I RETURN IT TO CALLER'S PARAMETER--IF ANY.
      LDB PRAMS+1,I GET THE CALLER'S REQUEST CODE.
      CLE,SSB       IF THE NO-ABORT BIT(#15) IS SET,
      ISZ EXIT       THEN SET RETURN POINTER TO <P+2>,
ERXIT CLB             CLEAR <B>--IT CONTAINS NO DATA, 
      LDX SAVEX        RESTORE THE <X> REGISTER, & RETURN 
      JMP EXIT,I        STATUS IN <A> (OR -1:ERROR); <B>=0. 
      HED DEXEC: CONSTANTS AND STORAGE * (C) HEWLETT-PACKARD CO. 1980 * 
* 
A     EQU 0 
B     EQU 1 
XTEMP EQU 1721B     ADDRESS OF I.D. SEGMENT TEMP AREA.
* 
SAVEA NOP 
SAVEB NOP 
SAVEO NOP 
SAVEX NOP 
SAVEY NOP 
* 
* * * MAINTAIN ORDER OF NEXT TWO INSTRUCTIONS * * * 
* 
CCERS CCE,RSS 
      CLE 
* 
IRBUF BSS 15
DM513 DEC -513
DM10  DEC -10 
DM7   DEC -7
DM3   DEC -3
D1    DEC 1 
D3    DEC 3 
D5    DEC 5 
D7    DEC 7 
D8    DEC 8 
D9    DEC 9 
D10   DEC 10
D11   DEC 11
D12   DEC 12
D13   DEC 13
D15   DEC 15
D23   DEC 23
D25   DEC 25
D99   DEC 99
RQLEN NOP 
ICODE NOP 
WRLEN NOP 
RDLEN NOP 
NAMA  DEF IRBUF+5 
EXECX DEF EXEC
REIOX DEF REIO
CONWD NOP 
* 
      END 
                                                                                                                                                                                    