ASMB,R,Q,C HED DSTIO: DS/1000 REMOTE EXEC ROUTINE *(C) HEWLETT-PACKARD CO.1980* NAM DSTIO,7 91750-1X101 REV 2013 800506 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: DSTIO * SOURCE: 91750-18101 * RELOC: 91750-1X101 * PGMR: LYLE WEIMAN [3-26-79] * (CODE IS A MODIFIED FORM OF 'DEXEC' FOR I/O CALLS ONLY) SPC 1 * (DISTRIBUTED EXECUTIVE) IS THE DS/1000 USER INTERFACE FOR * 'TRANSPORTABLE' CALLS TO EITHER THE LOCAL, OR REMOTE-NODE RTE SYSTEM * 'EXEC' I-O CALLS ONLY. ITS PURPOSE IS TO BE A SMALL ROUTINE WHICH * CAN BE CALLED FOR DISTRIBUTED-I/O, SO MUCH OF 'DEXEC' HAS BEEN * LEFT OUT, IN PARTICULAR, THE SPECIAL CODE TO HANDLE * LOCAL CALLS LOCALLY. ALL REQUESTS ARE BUILT * AS 'DEXEC' I/O REQUESTS, AND SENT TO 'EXECM', VIA THE USUAL * COMMUNICATIONS MANAGEMENT PATHS, IN THE DESTINATION NODE. * THEREFORE, THE FOLLOWING REQUIREMENTS EXIST FOR I/O TO THE * LOCAL NODE WHEN 'DSTIO' IS USED, WHICH ARE NOT TRUE OF 'DEXEC' : * * 1) NODE MUST BE INITIALIZED * 2) 'EXECM' MUST EXIST AND IT MUST BE AN ACTIVE (SCHEDULED) MONITOR * 3) I/O BUFFER SIZE LIMITED TO 512 WORDS * 4) NO 'Z' BUFFER ALLOWED * * * WILL ACCEPT ONLY REQUEST CODES 1, 2, 3 OR 13. * * ** UNACCEPTABLE REQUESTS WILL BE REJECTED WITH A "DS06" ERROR! * * ** "IO01" IS RETURNED UPON DETECTION OF INCORRECT, MISSING, OR * TOO MANY (>7) PARAMETERS. THIS INCLUDES LUS > 63 TO OLD NODES. * * ** "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. * * ALL ACCEPTABLE REQUEST CODES WILL BE TRANSMITTED TO THE REMOTE * NODE, VIA STREAM #5, TO BE PROCESSED BY . MASTER (THIS NODE), * AND SLAVE (REMOTE NODE) TIMEOUTS, ESTABLISHED WITH , WILL BE * USED TO PROCESS THESE REQUESTS. * * CALLING SEQUENCE: * REQUEST CODES 1 & 2: * CALL DSTIO(NODE,RCODE,CONWD,BUFR,BUFL[,IPRM1[,IPRM2]]) * * REQUEST CODE 3: * CALL DSTIO(NODE,3,CONWD[,OPTIONAL PARAMETER]) SKP * REQUEST CODE 13: * * CALL DSTIO(NODE,13,LU,IEQT5[,IEQT4[,LUSTAT]]) * * NOTE: "CONWD" IS A DOUBLE-WORD INTEGER, DEFINED AS FOLLOWS: * * 15 8 7 0 * +----------------------------------------------+ * WORD 1 !S! RESERVED ! LOGICAL UNIT NUMBER ! * +---------------------+------------------------+ * 2 ! RESERVED !I!SUB-FUNCTION! RESERVED ! * +------------+------------+--------------------+ * 15 11 10 6 5 0 * * S = 0 IF SESSION MAPPING IS TO BE PERFORMED, * 1 IF NO SESSION MAPPING IS TO BE PERFORMED (I.E., "TRUE" * LU IS PROVIDED) * I = 1 IF INTERACTIVE WRITE-READ IS TO BE PERFORMED, ELSE 0 * * RETURN : - NORMAL COMPLETION, IF REQUEST CODE SIGN =0 * CONTAIN 'EXEC' RETURN INFORMATION * * : ERROR DETECTED: ABORT & PRINT MESSAGE, IF RC#15 =0 * * : - FOR DETECTED ERRORS, IF RC#15 =1 * CONTAIN ASCII ERROR CODES * * : - FOR NORMAL COMPLETION, IF RC#15 =1 * CONTAIN 'EXEC' RETURN INFORMATION * * NODE - SPECIFIES CALL-EXECUTION LOCATION: LOCAL=-1, REMOTE= 0 TO 32767 * * * 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). * * IF THE LOGICAL UNIT NUMBER FIELD IS < 64, THEN THE "DEXEC" REQUEST * CAN BE MADE TO EITHER OLD OR NEW NODES. LUS > 63 ARE ACCEPTABLE * FOR NEW NODES ONLY. AUTOMATICALLY ADJUSTS THE REQUEST * LENGTH FOR 2-WORD LUS TO NEW NODES AND 1-WORD LUS TO OLD NODES. * FOR INCREASED EFFICIENCY, LUS < 64 GOING TO NEW NODES ARE * IN A 'SPECIAL 1-WORD FORMAT' MEANING THAT ALL INFORMATION IS * ACTUALLY IN THE FIRST OF THE TWO WORDS AND BIT 12 OF THE ICODE * WORD IS RESET AS AN INDICATOR. THIS BIT IS SET FOR STANDARD * 2-WORD LUS > 63. * * SKP * GLBLK-START * ****************************************************************** * * * G L O B A L B L O C K REV 2013 791213 * * * * GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY: * * * * REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST * * GET, #SLAV, RQCNV, RPCNV, GRPM, DINIT, PTOPM * * EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3 * * DSTIO, LUMAP, #CMGT, INCNV, OTCNV, RMTIO * * RSM, DLGON, #DISM, #DSSM, #MSSM, #SCSM, #UPSM * ****************************************************************** * ***!!!!! THE ORDER OF THE FIRST 8 WORDS (#STR THRU #LVL) IS * ***!!!!! FIXED BY THE REQUIREMENT THAT THE STREAM, ADDRESSES * ***!!!!! ERROR CODES & LEVEL # ALWAYS BE IN THE SAME PLACE, * ***!!!!! REGARDLESS OF MESSAGE FORMAT. THIS ALSO MAKES * ***!!!!! STORE-AND-FORWARD CODE MUCH SIMPLER. * #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 * * LENGTH DEFINITIONS FOR REQUEST BUFFERS. * L#I/O ABS #KEY+1 REQ LEN FOR DSTIO(1),(2),(3),(13) SPC 2 * * > > > > > C A U T I O N < < < < < < < < < < * SPC 2 * USE CAUTION IF THE PARAMETER PORTION CHANGES FOR THE VARIOUS * REQUESTS. THE LENGTH IS COMPUTED ON-THE-FLY AS PARAMETERS * ARE MOVED TO THE REQUEST BUFFER. * * ADJUSTMENTS ARE AUTOMATIC IF ONLY THE REQUEST HEADER CHANGES. * ENT DSTIO * EXT #TILT,#NODE,#MAST,.ENTR,#MSTC,#RQB EXT .LDX,.SAX,.DSX,.MVW SKP * SUP DSTIO NOP LDA DSTIO GET THE RETURN POINTER. STA EXIT SAVE FOR '.ENTR' PROCESSING. JSB .LDX DEF N#PRM # PARAMETERS CLA JSB .SAX INITIALIZE PARAMETER AREA DEF PRAMS-1 JSB .DSX JMP *-3 * JMP GETPR GO TO OBTAIN PARAMETER ADDRESSES. SPC 1 JSB RQLEN,I LOCAL-EXECUTION CALL TO 'EXEC'/'REIO' PRAMS EQU * PARAMETER ADDRESSES AREA NODE NOP NODE NUMBER RCODE NOP REQUEST CODE IOCNW NOP I/O CONTROL WORD IOBUF NOP USER BUFFER ADDRESS IOBFL NOP USER BUFFER LENGTH IPRM1 NOP USER'S 1ST OPTIONAL PARAMETER IPRM2 NOP USER'S 2ND OPTIONAL PARAMETER SPC 1 EXIT NOP SPC 2 .NPRM EQU EXIT-PRAMS NUMBER OF PARAMETERS ALLOWED GETPR JSB .ENTR GET DIRECT ADDRESSES DEF PRAMS FOR THE USER-SPECIFIED PARAMETERS. * LDA RCODE GET THE ADDRESS OF THE REQUEST CODE. SZA,RSS WAS THE PARAMETER PROVIDED? JMP ERR NOT PROVIDED, ERROR! * * JSB .LDX DEF C#DLW CLA,CCE =0: BUFFER INIT; =1: CONWORD PREP. JSB .SAX INITIALIZE REQUEST BUFFER DEF #RQB-1 JSB .DSX JMP *-3 * STA WRLEN SET THE 'NO DATA' STA RDLEN DEFAULT CONDITIONS. * ERA SET THE 'ERROR-RETURN' FLAG FOR * THE <#MAST> CALLING SEQUENCE STA CONWD * LDA #NODE SET LOCAL NODE ADDRESS, IN CASE WE STA #RQB+#ENO REJECT BECAUSE OF AN ERROR. LDA B20 SET ERROR CODE QUALIFIER = 1 STA #RQB+#ECQ LDA NODE,I GET THE DESTINATION STA #RQB+#DST SAVE IT IN THE REQUEST * LDA STDEX GET THE STREAM TYPE STA #RQB+#STR SET IT IN THE REQUEST * DLD IOCNW,I GET LOGICAL UNIT # STA #RQB+#CNW SAVE THE DOUBLE- STB #RQB+#CWX WORD LU LDA PRAMS+2 WAS A THIRD SZA,RSS PARAMETER SPECIFIED? JMP ERIO1 NO, ERROR! LDA RCODE,I GET THE REQUEST CODE. RAL,CLE,ERA REMOVE THE NO-ABORT BIT, AND SAVE IN STA #RQB+#ICD SAVE IN REQUEST BUFFER AND B77 MASK REQUEST CODE ONLY STA ICODE & ICODE FOR MAPPING & POST-PROCESSING CPA D13 REQUEST CODE 13? JMP ICD13 JUMP TO PRE-PROCESSOR SZA REQUEST CODE =0? ADA UPLIM NO. SEE IF IT'S WITHIN SSA,RSS THE RANGE: 0 < RC < 4 ? JMP ERR ERROR, OUT OF RANGE: RC=0, OR RC>3! * * SELECT THE PRE-PROCESSOR ROUTINE, VIA MAPPED REQUEST CODE. * LDB ICODE ADB SUBAD MAP ICODE IN PRE-PROCESS MENU JMP B,I GO DO IT * 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 * UPLIM ABS SUBAD-* REQUEST CODE LIMIT-VALUE:-(MAX.RCODE +1) HED DSTIO: PRE-PROCESSORS * (C) HEWLETT-PACKARD CO. 1979 * IC1/2 EQU * REQUEST CODES 1 & 2 DLD IOCNW,I LOAD (DOUBLE) CONTROL/LU WORD BLF,SLB DOUBLE-BUFFER REQUEST (BIT#12 =1)? JMP ERIO4 YES--ERROR FOR REMOTE REQUESTS! * LDA IOBUF GET BUFFER ADDRESS SZA,RSS WAS IT SUPPLIED? JMP ERIO1 NO BUFFER, ERROR! STA BUFA SET IT IN CALL TO #MAST * LDB IOBFL 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 <#MAST>; SLB,RSS ELSE, IF THIS IS A WRITE(2) REQUEST, STA WRLEN THEN CONFIGURE 'WRLEN' FOR <#MAST>. * LDA IOBFL,I GET LENGTH AGAIN STA #RQB+#BFL SAVE IN REQUEST * LDB IPRM1 GET ADDR OF 1ST OPT. PARAM SZB,RSS SPECIFIED ? JMP SRQLN NO, SHORT REQUEST * LDA IPRM1,I GET FIRST OPTIONAL PARAMETER STA #RQB+#PM1 CLA PREPARE FOR MISSING PARAMETER. LDA IPRM2,I GET SECOND OPTIONAL PARAMETER STA #RQB+#PM2 * LDB #RQB+#CWX 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 SRQLN * LDA RDLEN FORCE ADEQUATE S.A.M TO BE # STA WRLEN ALLOCATED AT RECEIVING NODE. # * LDB IPRM2 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 LONGT 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 IPRM1 GET THE 'WRITE' BUFFER ADDRESS LDB IOBUF AND THE 'READ' BUFFER ADDRESS. CPA B IF THEY ARE THE SAME, THEN THE JMP LONGT 'WRITE' DATA NEED NOT BE MOVED; ELSE, JSB .MVW MOVE 'WRITE' DATA TO 'READ' BUFFER. DEF LENCK NOP * LONGT EQU * LDA CONWD GET THE <#MAST> CONTROL WORD. ARS SET THE LONG TIMEOUT BIT(#14). STA CONWD RESTORE CONWD [140000B]. JMP SRQLN SPC 3 ICOD3 EQU * RC=03 CLA LDA IOBUF,I GET OPTIONAL PARAMETER STA #RQB+#PRM SET IT IN THE REQUEST JMP SRQLN GO TO ESTABLISH REQUEST LENGTH. SPC 2 ICD13 EQU * RC = 13 LDA IEQT5 DID CALLER SPECIFY AT LEAST ONE SZA,RSS RETURN PARAMETER? JMP ERIO1 NO, GET OUT! SRQLN LDA L#I/O SET THE LENGTH OF THE REQUEST/REPLY JMP SETLN 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 FOR RETURN. ADB DM513 CHECK FOR VALIDITY OF LENGTH SSB,RSS JMP ERIO4 >512, TOO MUCH * JMP LENCK,I RETURN. SKP * SEND THE REMOTE EXEC REQUEST VIA "#MAST" AND AWAIT REPLY * SETLN STA RQLEN ESTABLISH REQUEST LENGTH FOR <#MAST>. LDA #RQB+#CNW GET LU AND B300 CHECK FOR LU > 63 SZA,RSS JMP LU1WD USE ONE-WORD LU FORMAT * * USE DOUBLE-WORD LU FORMAT. THIS IS FLAGGED BY SETTING * BIT 12 IN THE CONTROL WORD OF THE REQUEST. * LDA #RQB+#ICD IOR BIT12 STA #RQB+#ICD JMP SETX * * USE SINGLE-WORD LU FORMAT. MERGE THE SUB-FUNCTION WITH THE * LU WORD. * LU1WD EQU * LDA #RQB+#CNW ELA,CLE,ERA CLEAR "SIGN" BIT, IF SET STA B LDA #RQB+#CWX LOAD SUB-FUNCTION AND B7700 MASK IOR B INCLUDE LU CLB AND DUMMY PARAMETER STA #RQB+#CNW AND CONFIGURE STB #RQB+#CWX THE REQUEST. * SETX EQU * RESUME MAIN FLOW * JSB #MAST CALL MASTER REQUEST INTERFACE ROUTINE DEF *+7 DEF CONWD CONTROL WORD 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 C#DLW MAXIMUM REPLY LENGTH EXPECTED =15 WORDS. JMP ERROR * ERROR DETECTED BY "#MAST"--REPORT IT STA LENCK SAVE TRANSACTION SEQ. # LDA #MSTC DID <#MAST> WAIT SZA AROUND FOR THE REPLY? JMP RTSQ NO---RETURN TO CALLER * LDB ICODE IF THE REQUEST CODE WAS FOR A: CPB D13 - DEVICE-STATUS REQUEST, THEN THE DEVICE JMP IPD13 PARAMETERS NEED POST-PROCESSING * * DSTIO POST-PROCESSING: MOVE DATA TO REPLY BUFFER & CHECK FOR ERRORS. * IPOST LDA #RQB+#ENO SSA ANY ERROR ? JMP ERROR YES * XIT EQU * LDA RCODE,I GET ICODE SSA WAS THE NO ABORT BIT SET ? ISZ EXIT YES PUSH RETURN ADDRESS * ATEND LDB #RQB+#EC2 GET FROM THE REPLY BUFFER. LDA #RQB+#EC1 GET FROM THE REPLY BUFFER. JMP EXIT,I RETURN TO CALLER * RTSQ EQU * HERE ON NO-WAIT CALLS LDA LENCK RETURN THE TRANSACTION SEQUENCE STA #RQB+#EC1 NUMBER TO CALLER JMP XIT SKP SPC 1 IPD13 LDA #RQB+#ST1 GET THE FIRST RETURN-PARAMETER. STA IEQT5,I PASS: EQT5 * LDB #RQB+#ST2 GET THE NEXT RETURN-PARAMETER. STB IEQT4,I OPTIONAL EQT4 LDB #RQB+#ST3 RC=13: OPTIONAL LU STATUS & SUB. CHAN; STB LUST,I JMP IPOST GO FINISH SPC 2 * DSTIO 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". SPC 2 ERR LDB "06" IMPROPER REQUEST: "DS06". RSS LDB "04" ILLEGAL NODE: "DS04" LDA "DS" ERRS DST #RQB+#EC1 ERROR CODE INTO REQ.BUFR ERRA EQU *-1 ERROR MESSAGE ADDRESS [DEF #RQB+#EC1] SPC 2 ERROR LDA RCODE,I GET ICODE SSA NO ABORT BIT SET ? JMP ATEND YES, IT IS * CCA ADA DSTIO WE HAVE THE ADDRESS OF THE JSB LDB ERRA GET ADDRESS OF THE ERROR MESSAGE JSB #TILT WE DO NOT COME BACK FROM THIS CALL * SKP * DATA AREA * "01" ASC 1,01 "04" ASC 1,04 "06" ASC 1,06 "IO" ASC 1,IO "DS" ASC 1,DS N#PRM ABS .NPRM * * EQUATES IEQT5 EQU IOCNW DEFINE RETURN OF EQT WORD 5 INFO (RC=13) IEQT4 EQU IOBUF " " " " " 4 " " " LUST EQU IOBFL " " " LU STATUS " " " A EQU 0 B EQU 1 * * * C#DLW ABS #DLW MAX. REQUEST/REPLY LENGTH. DM513 DEC -513 D5 DEC 5 STDEX EQU D5 STREAM TYPE FOR "DEXEC" CALLS D13 DEC 13 RQLEN NOP ICODE NOP WRLEN NOP RDLEN NOP CONWD NOP BIT12 OCT 10000 BIT 12 B77 OCT 77 B20 OCT 20 B300 OCT 300 B7700 OCT 7700 * END