ASMB,R,L,C
      HED <EXECM> REMOTE EXEC-CALL MONITOR *(C) HEWLETT-PACKARD CO. 1976* 
* 
      NAM EXECM,2,30 91700-16127 REV.A 760212 
      SPC 1 
******************************************************************
*  * (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 2 
      EXT D65SV 
      EXT D65CL 
      EXT CNUMO 
      EXT REIO
      EXT #MBRK 
      IFZ 
      EXT DBUG
      XIF 
A     EQU 0 
B     EQU 1 
      SUP 
      EXT EXEC
      SPC 5 
* 
* EXECM 
* SOURCE:91700-18127
* BINARY:91700-16127
* SHANE DICKEY
* JULY 30.1974
* 
* MODIFIED BY: C.C.H. [01/11/76]
* 
* Z OPTION INCLUDES DEBUG 
      SPC 5 
      HED EXEC REQUEST PROCESSOR * (C) HEWLETT-PACKARD CO. 1976 * 
* 
* GET THE I/O CLASS FOR THIS MONITOR SET UP BY LSTEN
* 
EXECM LDA B,I       IS P1 = I/O CLASS?
      IFZ 
      SZA,RSS       IF ZERO INITIALIZE CALL-SET UP
      JMP *+3       AND TERMINATE-IF REAL LSTEN CALL- 
      XIF 
      STA ICLAS     SET UP GET AND DO IT
      IFZ 
      JMP GET 
* 
      JSB DBUG      SET UP DBUG 
      DEF *+1 
* 
      JSB EXEC      SAVE RESOURCES AND TERMINATE
      DEF *+4 
      DEF D6
      DEF ZERO
      DEF D1
* 
      JMP EXECM     LSTEN CALL STARTS HERE
      XIF 
* 
* ISSUE GET ON I/O CLASS
* 
GET   JSB EXEC      THIS GET WILL SUSPEND 
      DEF *+5       EXECM UNTIL QUEUE SENDS 
      DEF D21       A REMOTE EXEC CALL TO THE MONITOR 
      DEF ICLAS     UPON ACTIVATION, REQUEST PARMB WILL BE
      DEF IRBUF     IN THE IRBUF BUFFER AREA
      DEF IRBFL 
* 
* PARMB+24=LU 
* 
      LDA IRBUF+24
      AND MSK2
      STA FSTLU 
* 
* 
* THE ORIGINAL CALL IS RECONSTRUCTED
* THE PREPROCESS FLAG IS CHECKED TO DETERMINE 
* IF THERE IS ANY PREPROCESSING TO BE DONE
* AN EXAMPLE OF THIS WOULD BE THE GATHERING OF
* A DATA BUFFER BEFORE EXECUTION OF A WRITE REQUEST 
* ALSO ERROR CHECKING CAN BE DONE IN PREPROCESS S/R 
* FOLLOWING THE PREPROCESS THE RECONSTITUTED CALL 
* IS EXECUTED AND STATUS IS RETURNED TO EXECM 
* BY EXEC-IT IS THE RETURN OF THIS STATUS INFORMA-
* TION THAT COMPRISES THE MAJOR PART OF POST- 
* PROCESSING, OF COURSE OTHER TYPES OF POSTPROCESSES
* CAN BE ACCOMPLISHED. AN EXAMPLE IS THE WRITING OF 
* AN ACQUIRED DATA BUFFER TO THE TERMINAL FOLLOWING 
* A DATA READ 
* 
* 
* 
* CLEAR THE JSB BUFFER TO ZEROS AT THE START
* 
      LDB DM12      SET UP A COUNTER TO 
      STB CONTR     CLEAR 12 WORDS OF THE JSB BUFFER
      LDA JSBFA     TO 0-THEN SET UP START ADDRESS
      STA AJSBF     TO CLEAR
      CLA 
LOOP7 STA AJSBF,I   CLEAR A WORD
* 
* INCREMENT COUNTERS
* 
      ISZ AJSBF 
      ISZ CONTR 
      JMP LOOP7     IF NOT DONE DO NEXT ONE 
* 
* RECONSTRUCT THE CALL
* 
      LDA PARMB     BUILD A POINTER TO THE
      ADA D6        1ST USER PARAMETER IN 
      STA BLOKA     PARMB & STORE IT IN BLOKA 
      LDA PRMSA     BUILD A POINTER TO THE ASSEMBLY 
      STA APRMS     AREA & SAVE IT-ACTUAL PARAMETERS' 
      LDA JSBFA     BUILD A POINTER TO THE JSB
      STA AJSBF     ASSEMBLY AREA 
      LDA JSBTB     GET JSB TO EXEC & INSERT IT 
      STA AJSBF,I   IN THE BUILDING BUFFER
      ISZ AJSBF 
      ISZ AJSBF 
* 
* AFTER PUTTING IN THE JSB STEP PAST DEF RETURN 
*(THIS WILL BE COMPUTED AND FILLED IN LATER)
* INITIALIZE PARAMETER COUNTER TO DO SAME 
* 
      CLA           THIS WILL BE INCREMENTED
      STA PRCNT 
      STA RECHK     INITIALIZE <REIO> CHECK-COUNT.
* 
* BEFORE THE BUFFER IS BUILT FROM PARMB IT MAY NEED A "MASSAGE".
* THE FOLLOWING CODE ISOLATES THE ADDRESS OF THIS "MASSAGE" S/R 
* AND TRANSFERS TO IT.
* 
* SET UP THE EXEC PREPROCESS S/R ADDRESS
* 
      LDA BLOKA     GET ADDR OF ICODE WORD
      INA 
* 
* THE ICODE PARAMETER MUST NOW BE SET UP
* 
      LDA A,I 
      ALF,ALF 
      AND MSK0
      STA ICODE 
* 
      SKP 
* SET UP THE ERROR REGISTER 
* 
      LDB D9
      ADA EXPRA     PICK UP ICODE, PROCESSOR,ERROR CHECK ICODE
      LDA A,I       AND XFER TO PROCESS IF DEFINED
* 
* BY WAY OF REVIEW: 
*  BLOKA NOW POINTS TO PARMB+6(START OF PARAMETERS) 
*  APRMS NOW POINTS TO PARMS (PARAMETER STORAGE BUFFER) 
*  AJSBF NOW POINTS TO JSBUF+3 (BUILDING BUFFER 3RD WORD) 
*  THE PARAMETER COUNT (PRCNT) IS ZERO
*  ICODE CONTAINS THE REQUESTED EXEC ICODE SETTING
*  THE PARMB IS CONTAINED IN THE IRBUF BUFFER 
* 
      JSB A,I 
* 
* SET THE SIGN BIT & SET UP BOTH RETURNS
* 
      LDB JSBUF+2 
      LDA B,I 
      IOR MSK5
      STA B,I 
* 
      JSB PRE7      COMPUTE "DEF RTRN" & ERROR RETURN 
* 
* SET THE NO DATA TO BE RETURNED FLAG-NOMINAL CASE
* 
      CLA 
      STA DATA2 
* 
* EXECUTE THE CALL
* 
      JSB JSBUF-1 
      STA SAVEA 
      STB SAVEB 
* 
* AFTER THE REQUEST IS EXECUTED THE POST PROCESSING 
* S/R WILL BE EXECUTED IN A MANNER ANALOGOUS TO THAT
* SHOWN ABOVE FOR PREPROCESSING 
* 
* SET UP & CALL S/R THAT CONTROLS POSTPROCESSING
* 
      JSB PST1      RETURN THE A AND B REGISTERS FIRST
* 
* NOW WE ARE DONE UNLESS THE TIME WORDS ARE TO
* BE RETURNED ( EXEC CALL 11) 
* 
      LDB D9
      LDA ICODE 
      AND MSK1
      ADA EXPSA     PICK UP POSTPROCESSOR,ERROR CHECK ICODE 
      LDA A,I       AND EXECUTE POST PROCESSOR
      JSB A,I 
* 
      SKP 
* IF THE DATA FLAG IS SET THE DATA MUST BE
* RETURNED BEFORE THE STATUS REPLY CAN BE SENT BACK 
* 
* SET BIT14 FOR REPLY TO THE SATELLITE. 
* 
      LDA IRBUF     GET STREAM WORD 
      IOR MSK8      ADD REPLY BIT 
      STA IRBUF     & REPLACE IT
      LDA DATA2 
      SZA 
* 
* DETERMINE WHICH TYPE OF REPLY IS TO BE RETURNED 
* 
      JSB SDATA     SEND THE DATA BACK
      JSB SDREQ     SEND THE PREV FORMATTED REQUEST 
* 
* SO RETURN 
* 
      JMP GET       LOOP BACK TO AWAIT NEXT REQUEST 
* 
      SPC 2 
* REPORT <EXECM> ERRORS TO THE SYSTEM OPERATOR. 
* 
ERRPT NOP           ENTRY/EXIT: <EXECM> ERROR-REPORT RTN. 
      DST ERCOD     SAVE THE ASCII ERROR CODE.
      CPB "02"      <B> = ASCII "02" ?
      CCB,RSS         YES. SET <B>=-1 & SKIP FOR MORE CHECKS
      JMP ERRP0       NO. CONTINUE ERROR-REPORT PROCESSING. 
      CPA "DS"      IF ERROR IS "DS02": <PROGL> PREEMPTION, 
      JSB ERR         GO TO ENSURE CLEANUP, VIA <D65SV>.
* 
ERRP0 LDA D10       CALCULATE THE ADDRESS 
      CMA,CLE,INA     OF THE OFFENDING
      ADA ERRPT         CALLING SEQUENCE. 
      STA ERRPT     SAVE THE ADDRESS FOR ASCII CONVERSION.
      JSB CNUMO     GO TO CONVERT 
      DEF *+3         THE ADDRESS TO
      DEF ERRPT         AN OCTAL VALUE IN ASCII CODE. 
      DEF ERADR     SAVE THE CODE FOR ERROR-PRINTOUT. 
* 
      JSB EXEC      GO
      DEF *+5         TO
      DEF IRWW          PRINT 
      DEF D1              THE 
      DEF ERMSG             ERROR 
      DEF D15                 MESSAGE.
      NOP           IGNORE ERRORS--IF ANY.
* 
      JMP GET       GO TO AWAIT THE NEXT REQUEST. 
* 
ERMSG ASC 8, /EXECM ERROR:
ERCOD ASC 4,???? AT 
ERADR ASC 3,000000
* 
      HED PREPROCESSING S/R'S    * (C) HEWLETT-PACKARD CO. 1976 * 
      SKP 
      SPC 10
PRE7  NOP 
* 
* THIS IS THE LAST PREPROCESSING S/R CALLED 
* BY EACH REQUEST 
* IT COMPUTES "DEF RTRN" & SETS 'CCE,RSS' INTO ERROR-RTN. LOC'N.
*  AND 'CLE' INTO NORMAL RETURN LOC'N.
* IF THE 'EXEC' CALL IS A NON-DISC READ/WRITE CALL FOR <130 WORDS,
*  THEN A CONVERSION IS MADE, TO CALL <REIO>, VICE <EXEC>, IN ORDER 
*  TO ALLOW ANOTHER PROGRAM TO GAIN ACCESS TO THE DISC-RESIDENT AREA. 
* 
      LDA JSBFA     PICK UP THE ADDRESS OF THE
      ADA PRCNT     JSB BUFFER & ADD THE # OF PARMS 
      ADA D2        ALREADY INSERTED THEN ADD 1 FOR 
      LDB JSBFA     THE DEF RTRN &  1 FOR 1ST FREE
      INB           WORD. THEN FIND SLOT FOR DEF RTRN 
      STA B,I       AND INSERT IT.
      LDB ERRIN     GET EXEC-ERROR INSTRUCTION (CCE,RSS). 
      STB A,I       STORE IN ERROR-RETURN LOCATION. 
      INA           POINT TO NORMAL-RETURN LOCATION.
      LDB ERRIN+1   GET NORMAL-RETURN INSTRUCTION (CLE).
      STB A,I       STORE IN NORMAL-RETURN LOCATION.
      LDA RECHK     GET THE <REIO> CHECK-COUNT. 
      CPA D2        READ/WRITE CALL & BUFFER <130 WORDS?
      RSS             YES, CONTINUE <REIO> CHECKS.
      JMP PRE7,I      NO--CANNOT USE <REIO> ! 
      LDB JSBRE     GET THE "JSB REIO" INSTRUCTION. 
      ADA PRCNT     IF THE PARAMETER COUNT =4 (NON-DISC), & 
      CPA D6          IT'S A READ/WRITE CALL FOR <130 WORDS,
      STB JSBUF         THEN CONVERT TO CALL VIA <REIO>.
      JMP PRE7,I    RETURN
      SPC 2 
PRE8  NOP           ENTRY EXIT: DATA-READ SUBROUTINE. 
      JSB BCHEK     CHECK FOR "BREAK", BEFORE USE OF LINE.
* 
      LDA FSTLU     GET THE LOGICAL UNIT NUMBER.
      IOR MSK3      INCLUDE MODE FOR DATA-ONLY. 
      STA CONWD     SAVE THE CONFIGURED CONTROL WORD. 
* 
* PICK UP THE DATA
* 
      JSB D65CL     CALL
      DEF *+8         THE 
      DEF IRWR          COMMUNICATION LINE
      DEF CONWD           CONTROL ROUTINE 
      DEF DABUF             TO
      DEF IDBFL               READ
      DEF IRBUF+33              THE 
      DEF IRBUF+34                CALLER'S
      DEF EXTAD                     DATA. 
      JSB ERRPT     * A SYSTEM ERROR HAS BEEN DETECTED! * 
* 
      JMP PRE8,I
* 
CONWD NOP 
* 
      SPC 10
      HED POST PROCESSING S/R'S  * (C) HEWLETT-PACKARD CO. 1976 * 
PST1  NOP 
* 
* NOTE THAT THE RETURN IS BUILT IN THE ORIGINAL 
* REQUEST BUFFER BEHIND DATA TYPE & SUBSTREAM 
* USED BY ALL REMOTE FMP & EXEC CALLS 
* NOTE THAT THERE ARE NO CONTROL BYTES
* IN THE RETURNED BUFFER
* 
      LDA PARMB     PICK UP THE ADDRESS TO RETURN 
      ADA D2        THE VALUES TO 
      STA BLOKA 
* 
      LDA SAVEA     PICK UP SAVED A REG CONTENTS
      STA BLOKA,I 
      ISZ BLOKA 
      LDA SAVEB     PICK UP SAVED B REG CONTENTS
      STA BLOKA,I 
      ISZ BLOKA 
* 
* ADJUST THE RETURNED PARAMETER COUNT 
* 
      LDA D4
      STA RPCNT 
      JMP PST1,I
      SPC 3 
*  BREAK-CHECK SUBROUTINE.
      SPC 1 
BCHEK NOP           ENTRY/EXIT
* 
      JSB #MBRK     GO TO THE BREAK-CHECK ROUTINE 
      DEF *+4 
      DEF STRM      SPECIFY THIS MONITOR'S STREAM-TYPE (5). 
      DEF FSTLU     SPECIFY THE CURRENT LOGICAL UNIT NO.
      DEF IRBUF+33  SPECIFY LOCATION OF THE TIME-TAGS.
* 
      JSB ERRPT     ERROR: REPORT THE PROBLEM.
* 
      JMP GET       BREAK DETECTED--GO AWAIT NEXT REQUEST.
* 
      STB EXTAD     NO BREAK. SAVE EQT EXT. ADDR. FOR D65CL.
      JMP BCHEK,I   RETURN TO THE CALLER. 
* 
      HED EXEC PRE PROCESSING S/R'S * (C) HEWLETT-PACKARD CO. 1976 *
      SPC 5 
OK1   NOP           PROCESS AN EXEC WRITE CALL
* 
* FIRST FIX UP LOGICAL UNIT # 
* 
      JSB OK1A      THEN READ PARAMS INTO JSB BUFFER
* 
* NOW THE DATA RECORD MUST BE PICKED UP.
* 
      LDA IDBFL     GET THE DATA LENGTH.
      SZA           ZERO LENGTH WRITE REQUEST?
      JSB PRE8        NO. GO TO READ DATA FROM THE LINE.
      JMP OK1,I     RETURN FROM PREPROCESSOR
      SPC 5 
OK1A  NOP 
      JSB SIZE
* 
* NOW DO STANDARD STUFF I.E. SET UP TO EMPTY PARMB
* 
      ISZ BLOKA     INCREMENT TO PARMB +07
      LDA BLOKA,I   MOVE ICODE TO PARMS 
      ALF,ALF 
      AND MSK2
      STA APRMS,I 
      LDA APRMS     MOVE DEF ICODE TO JSBUF+2 
      STA AJSBF,I 
      ISZ AJSBF     INCREMENT TO JSBUF+3
      ISZ PRCNT     INCREMENT PARAMETER COUNT TO 1
      ISZ BLOKA     INCREMENT TO PARMB+8
      ISZ APRMS     INCREMENT PARAMETER STORAGE ADDRESS 
* 
      LDB BLOKA,I   GET CONTROL WORD
      STB APRMS,I   PUT IN PARAMETER STORAGE
      LDB APRMS 
      STB AJSBF,I   PUT IT IN THE JSB BUFFER THEN 
      ISZ AJSBF     INCREMENT THE BUFFER POINTER &
      ISZ PRCNT     THE PARAMETER COUNT 
      ISZ APRMS 
* 
* SET UP & CALL STAND & CALL IT TO FILL PARMS 
* 
      LDB DABFA     PICK UP THE DATA BUFFER 
      STB AJSBF,I   ADDRESS & PUT IT IN THE JSB THEN
      ISZ AJSBF     INCREMENT THE BUFFER POINTER &
      ISZ PRCNT     THE PARAMETER COUNT 
      ISZ BLOKA 
      LDA BLOKA 
      IOR MSK5      FOR THE 1ST "STANDARD"
      STA PRAM1     PARAMETER THEN GO AND 
* 
      JSB STAND     PICK THEM UP BEFORE 
      ISZ RECHK     SHOW PASSAGE OF <REIO> USE-CHECK (R/W). 
      JMP OK1A,I    RETURNING 
      SPC 5 
OK3   NOP           THE I/O CONTROL S/R FIRST,
      LDA BLOKA     SETS UP FOR THE 
      IOR MSK5      CALL & THE LOADS THE
      STA PRAM1     STANDARD PARAMETERS 
* 
      JSB STAND     & THEN
      JMP OK3,I     RETURNS 
      SPC 5 
OK11  NOP 
* 
* TIME IN TMBSS BUFFER AFTER CALL 
* 
      LDA ICODA 
      STA AJSBF,I 
      ISZ AJSBF 
      ISZ PRCNT 
      LDA TMBSA 
      STA AJSBF,I 
      ISZ AJSBF 
      ISZ PRCNT 
      JMP OK11,I
      SPC 5 
OK31  NOP 
      JSB OK3 
* 
* PUT IN THE DEF'S TO THE STATUS WORDS
* 
      LDA IST1A 
      STA AJSBF,I 
      ISZ AJSBF 
      ISZ PRCNT 
      LDA IST2A 
      STA AJSBF,I 
      ISZ AJSBF 
      ISZ PRCNT 
      JMP OK31,I
      HED EXEC POST PROCESSING S/R'S * (C) HEWLETT-PACKARD CO. 1976 * 
      SPC 5 
OKP2  NOP           THE READ EXEC CALL SUB-POST-PROC
* 
* SET THE DATA TOO FLAG & RETURN
* 
      LDB IDBFL     GET THE DATA BUFFER LENGTH. 
      STB DATA2     RETURN-DATA FLAG: #0=SEND DATA,0=NO DATA
      JMP OKP2,I    RETURN. 
      SPC 2 
OKP10 NOP 
* 
* THIS SUB-POST-PROCESS IS USED BY EXEC CALLS THAT
* RETURN ONLY A&B REGS (I.E. IT IS A DUMMY S/R) 
* 
      JMP OKP10,I 
      SPC 2 
OKP11 NOP           THE TIME REQ. SUB-POST-PROCESSOR
* 
* SET UP A LOOP TO PICK UP THE FIVE WORDS IN THE
* TIME BSS "TMBSS"
* 
      LDA MD5 
      STA CONTR 
* 
      LDB TMBSA 
LOOP5 LDA B,I 
      STA BLOKA,I   STORE TIME WORD 
      ISZ BLOKA 
* 
* INCREMENT THE RETURNED PARAMETER COUNTER
* 
      ISZ RPCNT 
      INB 
      ISZ CONTR 
      JMP LOOP5 
      JMP OKP11,I 
      SPC 2 
OKP13 NOP 
      LDA ISTA1     RETURN THE TWO STATUS WORDS 
      LDB PARMB     SET B TO RETURN BUFFER+4 ADDRESS
      ADB D4
* 
      STA B,I       RETURN 1ST STATUS WORD
      LDA ISTA2     GET THE NEXT ONE
      INB 
      STA B,I 
      LDA RPCNT     FINALLY ADJUST RETURNED PARAM 
      ADA D2        COUNT & RESTORE 
      STA RPCNT     IT & THEN 
      JMP OKP13,I   RETURN
* 
      SKP 
STUFF NOP 
* 
* NOTE THAT THE E REG NEED BE SET UP AT THE START ONLY
* THEREAFTER (SINCE THE CHARACTERS ARE PICKED UP IN 
* PAIRS) THE START OF EACH WORD IS IN THE 
* RELATIVE LOCATION-& THUS E IS OK FOREVERMORE
* INCREMENT NUMBER OF ASSEMBLED PARAMETERS
* CHECK THE CHAR COUNT FOR "EVENESS"
* 
      LDB D10       SET UP THE ERROR REGISTER 
      LDA PRMLP 
      SLA 
      JMP ERR+1 
      ISZ PRCNT 
* 
* THE LOOP COUNTER IS ALREADY TO GO-PRMLP 
* 
      LDA APRMS     PICK UP THE ADDRESS OF THE
      STA AJSBF,I   PARAMETER  TO BE BUILT & PUT
*                                     IT IN THE JSB BUFFER
* INCREMENT "DEF PARAM" POINTER (JSB BUFFER)
* 
      ISZ AJSBF 
* 
* NOW THE INITIAL CHARACTER MUST BE LOCATED 
* 
      LDA BLOKA     PICK UP 1ST CHAR LOCATION 
      SSA           RIGHT JUSTIFIED?
      CCE,RSS       NO-SET E REG TO 1 
      CLE           YES-SET E REG TO 0
* 
* NOW CLEAR BYTE POINTER
* 
      AND MSK1      CLEAR SIGN & STORE
      STA BLOKA     POINTER TO NEXT PARAMETER 
* 
* PICK UP 1ST CHARACTER 
* 
AGAN4 LDA BLOKA,I   PICK UP 1ST CHAR OF PAIR
      SEZ,RSS       AND LEFT JUSTIFY IT 
      ALF,ALF       IF REQUIRED 
      AND MSK6
      STA PRM4
* 
* PICK UP 2ND CHAR
* 
      SEZ,RSS       HAVE WE CROSSED A WORD BOUNDARY?
* 
* NOTE 2ND CHAR IS OPPOSITE JUSTIFICATION OF 1ST 1
* 
      ISZ BLOKA     YES-INCREMENT SOURCE ADDRESS
* 
      LDA BLOKA,I   PICK UP CHAR & RIGHT JUSTIFY IT 
      SEZ,RSS       IF REQUIRED BEFORE THE MERGING
      ALF,ALF       OF THE TWO CHARS. 
      AND MSK0
* 
* NOW MERGE THE TWO CHARS & STORE THEM
* 
      IOR PRM4
      STA APRMS,I 
      ISZ APRMS 
* 
* NOW A "DEF PRAM" & AT LEAST ONE PARAM WORD
* HAVE BEEN ASSEMBLED-DETERMINE IF THERE ARE
* MORE CHARACTERS IN THIS STRING
* 
      SEZ           HAVE WE CROSSED A WORD BOUNDARY ? 
      ISZ BLOKA     YET-IF SO INCREMENT STORAGE 
      ISZ PRMLP     INCREMENT THE 
      ISZ PRMLP     CHARACTER COUNT-ARE THERE MORE? 
      JMP AGAN4     YES-SET UP TO GET TWO MORE
* 
* WE ARE DONE WITH THIS CHAR SET UP ADDRESS OF
* NEXT CONTROL CHAR TO BE EXTRACTED BY GETCB
* 
      LDA BLOKA     PICK UP CONTROL CHAR ADDRESS-NOW
      SEZ           IS IT IN THE HIGH ORDER BYTE? IF
      IOR MSK5      LEFT JUSTIFIED BIT 15=1 & SET IT
      STA PRAM1     UP FOR THE GETCB CALL TO FOLLOW 
      JMP STUFF,I   AND EXIT
      SPC 1 
SDREQ NOP           SEND THE REPLY WITH STATUS AS A REQUEST.
      LDB IRBFL     GET FRIENDLY PARMB LENGTH(35 WORDS).
      LDA IRBUF     GET THE FIRST WORD OF THE PARMB.
      ALF           POSITION FRIENDLY BIT(#11) TO THE SIGN. 
      SSA,RSS       IS REPLY GOING TO A FRIENDLY SATELLITE? 
      LDB RPCNT       NO. GET MINIMUM REPLY LENGTH. 
      STB RPLEN     CONFIGURE REPLY LENGTH SPECIFICATION. 
* 
* THIS S/R ASSUMES THAT PREVIOUS POST PROCESSING
* S/R HAVE SET UP THE REQUEST BUFFER TO BE SENT 
* IN REPLY TO THE ORIGINAL REQUEST
* THE REQUEST IS CONTAINED IN THE TERMQ BUFFER AREA 
* 
      LDA FSTLU     GET THE LOGICAL UNIT NUMBER.
      STA CONWD     SAVE AS CONFIGURED CONTROL WORD.
* 
      JSB D65SV     SEND REQUEST REPLY TO TERMINAL
      DEF *+7 
      DEF IRWW
      DEF CONWD 
      DEF IRBUF 
      DEF RPLEN 
      DEF DUMMY 
      DEF DUMMY 
      JSB ERRPT 
* 
      JMP SDREQ,I   RETURN
      SPC 10
SIZE  NOP           ENTRY EXIT: BUFFER SIZE ANALYZER. 
      LDB ICODE     GET THE REQUEST CODE. 
      LDA IRBUF+5   GET THE NUMBER OF DATA WORDS. 
      SZA           ZERO WORDS SPECIFIED? 
      JMP NEG?        NO--CHECK FOR NEGATIVE. 
      CPB D1        ZERO-LENGTH READ REQUEST? 
      JMP SETLN       YES--GO TO SET DATA LENGTH. 
      CPB D2        ZERO-LENGTH WRITE REQUEST?
      JMP SETLN       YES--GO TO SET DATA LENGTH. 
      JMP ERR1        NO. ERROR!
NEG?  SSA           NEGATIVE SPECIFICATION? 
      JMP ERR1        YES--ERROR! 
* 
* IT'S POSITIVE BUT IS IT GREATER THAN 512 WORDS
* LONG?-ERROR IF IT IS
* 
SETLN STA IDBFL     SAVE DATA BUFFER LENGTH 
      STA B         SAVE LENGTH FOR <REIO> CHECK. 
      CMA,INA 
      ADA DABFL 
      SSA 
      JMP ERR1
      ADB DM130     IF THE DATA BUFFER LENGTH 
      SSB             IS <130 WORDS, THEN INDICATE
      ISZ RECHK         THE PASSAGE OF AN <REIO> USE-CHECK. 
      JMP SIZE,I
      SPC 1 
* IF A DATA FLAG ERROR HAS BEEN DETECTED
* SEND A STOP REPLY AND THEN SEND AN ERROR REPLY
* 
* TRANSMIT STOP REPLY 
* NOW SEND THE STANDARD ERROR REPLY 
* 
ERR1  LDB D11       SET UP ERROR REGISTER 
      JMP ERR+1 
* 
*  ERROR PROCESSING OF CONFIGURED 'EXEC-CALL' ERRORS. 
* 
EXERR DST IRBUF+4   SAVE ASCII ERROR CODE FOR THE USER. 
      CPA "IO"      IF THE ERROR WAS AN "IOXX", 
      RSS             SKIP TO FURTHER ISOLATE THE TYPE. 
      JMP CKSC      GO TO PROCESS NON-"IOXX" ERRORS.
      CPB "05"      IF THE ERROR CODE 
      CLA,RSS         WAS "IO05" (ILLEGAL TRK/SECTOR),
      CPB "08"          OR "IO08" (DISC WRITE >1 TRK),
      CLA,RSS             PREPARE FOR ERROR CODE #11; 
      LDB D12               ELSE, USE CODE #12 FOR DEFAULT. 
      SZA,RSS       WAS IT "IO05" OR "IO08" ? 
      LDB D11         YES. SET ERROR CODE =11.
      JMP ERR+1     GO TO RETURN THE ERROR INFORMATION. 
* 
CKSC  LDB D12       LOAD THE DEFAULT ERROR CODE.
      CPA "SC"      IF THIS WAS A SCHEDULING ERROR, 
      LDB D8          SET THE ERROR CODE =8.
      JMP ERR+1     GO TO RETURN THE ERROR INFORMATION. 
* 
      SKP 
SDATA NOP 
      JSB BCHEK     CHECK FOR "BREAK", BEFORE LINE USE. 
* 
* SET UP THE TRANSMIT DATA ONLY CALL MODE 
* AND INSERT IT IN THE CALL 
* 
      LDA FSTLU     GET THE LOGICAL UNIT NUMBER.
      IOR MSK3      INCLUDE THE BITS FOR MODE =DATA ONLY. 
      STA CONWD     SAVE THE CONFIGURED CONTROL WORD. 
* 
* EXECUTE THE CALL
* 
      JSB D65CL 
      DEF *+8 
      DEF IRWW
      DEF CONWD 
      DEF DABUF 
      DEF IDBFL     SET UP IN SIZE S-R
      DEF IRBUF+33  PASS TIME-TAGS TO DRIVER
      DEF IRBUF+34
      DEF EXTAD 
      JSB ERRPT 
* 
      JMP SDATA,I 
                                                                                                                                                                                              