ASMB,R,L,C
      HED <RQCNV> 3000 REQUEST CONVERTER (C) HEWLETT-PACKARD CO. 1979 
      NAM RQCNV,19,25 91741-16004 REV 1913 790104 
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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 2 
      EXT EXEC,$LIBR,$LIBX,$RNTB,#QXCL,RNRQ 
      EXT #RSAX,#TST,#NULL,#LDEF,#TBRN
      EXT #RQCV,#QRN,#RPCV,$OPSY
      SPC 2 
**************************** RQCNV *******************************
*                                                                *
*      SOURCE: 91741-18004                                       *
*                                                                *
*      BINARY: 91741-16004                                       *
*                                                                *
*      PROGRAMMER: JIM HARTSELL                                  *
*                                                                *
*      FEBRUARY 14, 1977                                         *
*                                                                *
*----------------------------------------------------------------*
*                                                                *
*          MODIFIED BY DMT BEGINNING NOVEMBER 7, 1978            *
*                                                                *
******************************************************************
      SPC 2 
L     EQU 304          MAXIMUM LINE BUFFER SIZE.
DBL   EQU 512          MAXIMUM SLAVE DATA LENGTH. 
* 
* RQCNV IS THE INTERFACE TO THE DS/1000 SLAVE MONITORS FOR REQUESTS 
* ORIGINATING FROM THE HP 3000.  ALL INCOMING REQUESTS ARE CONVERTED
* TO DS/1000 FORMATS FOR PROCESSING AT THE RTE SYSTEM.
* 
      SUP 
A     EQU 0 
B     EQU 1 
      SPC 1 
RQCNV LDA $OPSY 
      RAR,SLA       IS THIS AN RTE-III OR IV? 
RSSI  RSS           YES.
      JMP GET       NO. 
      LDB RSSI      GET "RSS" INSTRUCTION.
      STB MODI2     MODIFY TO DO CROSS-MAP LOAD.
      STB MODI3     MODIFY TO DO CROSS-MAP STORE. 
      DLD MWII      MODIFY TO DO "MWI"
      DST DMS2        CROSS-MAP MOVE. 
      DLD MWFI      MODIFY TO DO "MWF"
      DST DMS3        CROSS-MAP MOVE. 
* 
************************************************************
*                                                          *
* MAIN PROCESSING SECTION FOR ALL REQUESTS FROM THE 3000.  *
*                                                          *
************************************************************
* 
GET   EQU * 
* 
      JSB EXEC      WAIT FOR A REQUEST. 
      DEF *+5 
      DEF CLS21 
      DEF #RQCV       RQCNV'S I/O CLASS.
      DEF RQBUF       3000 REQUEST BUFFER.
      DEF MAXRQ 
      NOP             IGNORE ERRORS.
* 
      STB RCVLN     SAVE ACTUAL # WORDS RECEIVED. 
      CLA           CLEAR TST POINTER INTO S.A.M. 
      STA TSTAD 
      STA STREM     CLEAR LOCAL TST HEADER. 
      STA LCSEQ 
      STA HLDCL 
      STA MCLAS 
      STA FCNCD 
      STA MASK
* 
      LDA PARMA     CLEAR DS/1000 REQUEST BUFFER AREA.
      STA TEMP
      LDB PRMBL 
      CMB,INB 
      CLA 
CLR   STA TEMP,I
      ISZ TEMP
      INB,SZB 
      JMP CLR 
* 
**** EVENTUALLY, BREAK SHOULD BE HANDLED BY REMOTE SESSION MONITOR **** 
      LDA RQ0       CHECK FOR MESSAGE CLASS 6,
      AND B377       STREAM 22 OCTAL (BREAK). 
      ALF,ALF 
      STA B 
      LDA RQ2 
      AND B377
      IOR B 
      CPA M6S22 
      JMP SNREP     YES. JUST SEND A REPLY. 
* 
* CHECK TRANSACTION STATUS TABLE (TST) FOR MATCHING SEQUENCE #
* IN 8-WORD FIXED-FORMAT HEADER. A MATCH WILL BE FOUND FOR
* RFA/P-TO-P/DEXEC WRITE AND READ CONTINUATIONS. NOTE THAT
* THE CONTINUATION BIT IS NOT SET IF THIS IS THE LAST ONE.
* 
      DLD #TST      GET TST ADDR AND # OF ENTRIES.
      STA TEMP
      CMB,INB 
      STB TEMP1 
      SZA 
      SZB,RSS 
      JMP REJCT     REJECT IF NO TST. (SHOULDN'T HAPPEN)
* 
TSTLP LDB TEMP      CHECK NEXT ENTRY. 
      JSB LODWD     ENTRY IN USE? 
      SZA,RSS 
      JMP NXTST     NO. GO ON TO NEXT ENTRY.
      INB           YES.
      JSB LODWD     (CROSS) LOAD LOCAL SEQ. #.
      CPA RQ5 
      JMP CONT1     MATCH. GO PROCESS CONTINUATION. 
* 
NXTST LDB TEMP      BUMP TO NEXT ENTRY. 
      ADB TSTLN 
      STB TEMP
      ISZ TEMP1 
      JMP TSTLP 
* 
* NO TST ENTRY. PERFORM "GRPM" FUNCTIONS FOR NEW REQUEST. 
* 
      LDA RQ0       IF WORD COUNT BYTE = 8, THIS
      ALF,ALF       IS A RESIDUAL CONTINUATION
      AND B377      REQUEST AFTER A TIMEOUT.
      CPA D8
      JMP REJCT 
* 
      LDB #NULL 
      SZB,RSS       ANY TCBS AVAILABLE? 
      JMP REJCT     NO. REJECT. 
* 
      LDA RQ0       GET 3000 MESSAGE CLASS. 
      AND B377
      STA TEMP1 
      LDA RQ2       GET 3000 STREAM TYPE. 
      AND B377
      STA TEMP2 
* 
      LDB MAPTB     MAP DS/3000 MSG CLASS AND 
      STB TEMP       STREAM TO DS/1000 STREAM.
* 
MAPLP LDA B,I       GET NEXT MAP TABLE ENTRY. 
      CPA N1
      JMP REJCT     NOT IN TABLE. 
      CPA TEMP1     COMPARE MESSAGE CLASS.
      RSS 
      JMP NMACH     NO MATCH ON THIS ONE. 
* 
      INB           MATCH.
      LDA B,I       COMPARE DS/3000 STREAM TYPE.
      SZA           IF TABLE ENTRY = 0, IT'S A MATCH. 
      CPA TEMP2     NON-ZERO: TEST IT.
      JMP MATCH     MATCH. GO GET DS/1000 STREAM TYPE.
* 
NMACH LDB TEMP      BUMP TO NEXT MAP TABLE ENTRY. 
      ADB D3
      STB TEMP
      JMP MAPLP     CONTINUE SEARCH.
* 
MATCH INB 
      LDA B,I       GET DS/1000 STREAM TYPE.
      STA STREM 
* 
      ADA #LDEF 
      ADA D2        POINT TO LIST HEADER POINTER. 
      LDB A,I       POINT TO LIST HEADER. 
      INB 
      LDA B,I 
      STA MCLAS     SAVE MONITOR'S CLASS #. 
      INB 
      LDB B,I       GET ID SEG ADDR OF MONITOR. 
      RBL,CLE,ERB 
      SZB,RSS       IF MONITOR NOT ENABLED, 
      JMP REJCT       REJECT REQUEST. 
      ADB D15 
      LDA B,I 
      AND D15 
      CPA D4        AVAILABLE MEMORY SUSPEND? 
      JMP REJCT     YES. REJECT THE REQUEST.
* 
      LDB $RNTA 
      RSS 
      LDB B,I       RESOLVE INDIRECT. 
      RBL,CLE,SLB,ERB 
      JMP *-2 
      LDA #QRN      GET QUIESCENT RN. 
      AND B377      ISOLATE TABLE INDEX.
      ADB A         COMPUTE POSITION IN RN TABLE. 
      LDA B,I       GET IT. 
      AND B377
      SZA           QUIESCING?
      JMP REJCT     YES. SEND IT BACK.
      STA PARMB+2   SET SOURCE NODE # = 0.
* 
      CCA           SET DESTINATION NODE = LOCAL. 
      STA PARMB+3 
* 
      JSB #RSAX     BUILD TCB FOR THIS STREAM.
      DEF *+5 
      DEF D3
      DEF D0        PASS ORIGINATORS SEQUENCE # 
      DEF STREM       & STREAM
      DEF PARMB+2       & ORIGIN NODE #.
* 
      SSB           OK? 
      JMP REJCT     NO. 
      STA PARMB+1   YES. STORE SEQ # IN PARMB.
      STA LCSEQ     SAVE FOR TST ENTRY. 
* 
      INB           SET "3K" BIT IN WORD 2 OF TCB.
      JSB LODWD 
      IOR BIT14 
      JSB STRWD 
      ADB D2
      LDA LCSEQ     STORE "LOCAL SEQ #" AS
      JSB STRWD     "ORIG SEQ #" IN TCB.
* 
      LDB #NULL     IF WE USED
      SZB            LAST TCB,
      JMP OK
      JSB RNRQ          LOCK TABLE
      DEF *+4            ACCESS RN
      DEF LGNW             [GLOBAL LOCK]
      DEF #TBRN            [NO WAIT]
      DEF TEMP             [NO ABORT] 
* 
* IF CONTINUATION BIT IS SET IN DS/3000 REQUEST, ALLOCATE 
* A HOLDING CLASS FOR COLLECTION OF DATA BLOCKS BEFORE
* PASSING REQUEST TO DS/1000 MONITOR. 
* 
OK    LDA RQ2       BIT 13 OF STREAM WORD 
      RAL,RAL        IS CONTINUATION BIT. 
      SSA,RSS 
      JMP CONV      NO CONTINUATION.
* 
      LDA B1315     INITIALIZE CLASS # FOR
      STA HLDCL     NO RELEASE & NO WAIT. 
* 
      JSB EXEC      QUICK ALLOCATE - NO ABORT.
      DEF *+5 
      DEF CLS19      CLASS CONTROL. 
      DEF D0         LU = "BIT BUCKET" FOR ALLOCATION.
      DEF D0         DUMMY PARAM FOR ALLOCATION.
      DEF HLDCL      CLASS NUMBER STORAGE ADDRESS.
      JMP REJCT     ERROR.
* 
      JSB EXEC      COMPLETE PREVIOUS ALLOC. REQUEST. 
      DEF *+5 
      DEF CLS21      CLASS GET - NO ABORT.
      DEF HLDCL 
      DEF D0
      DEF D0
      JMP REJCT     ERROR.
* 
* CONVERT DS/3000 REQUEST TO DS/1000 FORMAT.
* 
CONV  JSB D1000 
* 
      STA RQLEN     SAVE LENGTH OF DS/1000 REQUEST. 
* 
* BUILD ENTRY IN TRANSACTION STATUS TABLE (TST).
* 
      DLD #TST      FIND EMPTY SLOT (AVAIL. ENTRY). 
      STA TEMP
      CMB,INB 
      STB TEMP1 
BLOOP LDB TEMP      CHECK NEXT ENTRY. 
      JSB LODWD     CROSS LOAD WORD 1.
      SZA,RSS       ZERO? 
      JMP STTST     YES. (B) = ADDR IN S.A.M. 
* 
      LDB TEMP      NO. GO TO NEXT ENTRY. 
      ADB TSTLN 
      STB TEMP
      ISZ TEMP1 
      JMP BLOOP 
      JMP REJCT     NO AVAILABLE ENTRY. 
* 
STTST STB TSTAD     SAVE ADDR OF TST ENTRY IN S.A.M.
      LDA TSTLN     LENGTH OF A TST ENTRY.
      CAX           PREPARE FOR A DMS "MWI".
      LDA LTSTA     GET LOCAL TST AREA ADDRESS. 
      JSB $LIBR 
      NOP 
DMS2  MVW TSTLN     MOVE ENTRY TO TST [DMS: "MVI"]. 
      JSB $LIBX 
      DEF *+1 
      DEF *+1 
* 
STDL  LDB ARQ0      PREPARE FOR DATA ADDRESS POINTER. 
      LDA RQ0       IS THERE DATA?
      ALF,ALF 
      AND B377
      ADB A 
      STB DABUF     SET ADDR OF POSSIBLE DATA.
      ADA N8
      CMA,INA 
      LDB RQ7 
      INB 
      BRS 
      ADA B 
      STA DALEN     SAVE LENGTH OF DATA (OR ZERO).
* 
* CHECK IF THERE WILL BE A CONTINUATION OF DATA.
* 
      LDA RQ2       CONTINUATION BIT SET IN 
      RAL,RAL       DS/3000 REQUEST?
      SSA 
      JMP CONT2     YES. GO USE HOLDING CLASS.
* 
* CLASS WRITE THE DS/1000 REQUEST TO REQUIRED MONITOR.
* 
PUT   JSB EXEC      DO CLASS WRITE/READ.
      DEF *+8 
      DEF CLS20      NO ABORT.
      DEF CONWX      CONTROL WORD W/"Z" BIT & "WRITE".
      DEF DABUF,I    DATA ADDRESS.
      DEF DALEN      DATA LENGTH (COULD BE ZERO). 
      DEF PARMB      REQUEST ADDRESS. 
      DEF RQLEN      REQUEST LENGTH.
      DEF MCLAS      I/O CLASS OF MONITOR.
      JMP REJCT     ERROR RETURN. 
* 
      JMP GET       GO GET NEXT REQUEST.
      SKP 
* 
* PROCESS CONTINUATION REQUEST. 
* 
CONT1 LDA TEMP      SAVE ADDR OF TST ENTRY IN S.A.M.
      STA TSTAD 
* 
      LDA RQ0       IF REQUEST IS A 
      ALF,ALF        CONTINUATION 
      AND B377        WITHOUT DATA, 
      ADA N8
      CLE,ELA 
      CMA,INA 
      ADA RQ7 
      SZA                PASS IT TO RPCNV.
      JMP CONRQ          (OTHERWISE PROCESS CONT.)
      SPC 1 
************************************************************
*                                                          *
*  LET RPCNV HANDLE INTERMEDIATE CONTINUATION REQUESTS FOR *
*  DREAD/PREAD/DEXEC(1).                                   *
*                                                          *
************************************************************
* 
      JSB EXEC      CLASS WRITE/READ TO RPCNV.
      DEF *+8 
      DEF CLS20      NO ABORT.
      DEF D0         SEND ONLY ONE BUFFER.
      DEF RQBUF      DS/3000 CONT. REQ. 
      DEF D8         # OF WORDS.
      DEF D8         FLAG TO RPCNV. 
      DEF TSTAD      TST ENTRY ADDR.
      DEF #RPCV      REPLY CONVERTER CLASS. 
      JMP REJCT      ERROR RETURN.
      JMP GET       GET NEXT REQUEST. 
      SPC 1 
************************************************************
*                                                          *
* SECONDARY SECTION FOR DWRIT/PWRIT/DEXEC(2) WHEN DATA     *
* RECORD LENGTH IS GREATER THAN 256 WORDS (CONTINUATIONS). *
*                                                          *
************************************************************
* 
CONRQ LDA D6        MOVE 1ST 6 WORDS OF TST ENTRY 
      CAX            TO LOCAL TST STORAGE AREA. 
      LDA TSTAD 
      LDB LTSTA 
      JSB $LIBR 
      NOP 
DMS3  MVW D6        MOVE: [DMS: "MWF"]. 
      JSB $LIBX 
      DEF *+1 
      DEF *+1 
* 
      JSB #RSAX     IS SLAVE TCB STILL AROUND?
      DEF *+4 
      DEF D5
      DEF LCSEQ 
      DEF STREM 
* 
      SSB 
      JMP REJCT     NO! REJECT. 
* 
      LDB ARQ0      YES. SET DATA POINTER & LENGTH. 
      LDA RQ0 
      ALF,ALF 
      AND B377
      ADB A 
      STB DABUF 
      ADA N8
      CMA,INA 
      LDB RQ7 
      INB 
      BRS 
      ADA B 
      STA DALEN 
* 
      JMP CONT3     GO STACK THE DATA BLOCK.
* 
* WRITE DS/1000 REQUEST TO HOLDING CLASS. LOCAL TST STORAGE 
* AREA CONTAINS APPLICABLE TST ENTRY. 
* 
CONT2 JSB EXEC      WRITE THE DS/1000 REQUEST TO
      DEF *+8        THE HOLDING CLASS. 
      DEF CLS20 
      DEF D0
      DEF PARMB      ADDRESS OF REQUEST.
      DEF RQLEN      LENGTH.
      DEF RQLEN 
      DEF D0
      DEF HLDCL 
      JMP REJCT     ERROR.
* 
* WRITE THE DATA BLOCK TO THE HOLDING CLASS. LOCAL TST
* STORAGE AREA CONTAINS APPLICABLE TST ENTRY. 
* 
CONT3 JSB EXEC      WRITE DATA BLOCK TO HOLDING CLASS.
      DEF *+8 
      DEF CLS20 
      DEF D0
      DEF DABUF,I    ADDRESS OF DATA. 
      DEF DALEN      LENGTH OF THIS BLOCK.
      DEF DALEN 
      DEF D0
      DEF HLDCL 
      JMP REJCT     ERROR.
* 
      LDA RQ2       CONTINUATION BIT SET (IS THERE MORE?).
      RAL,RAL 
      SSA,RSS 
      JMP GATHR     NO. GO PREPARE FOR MONITOR. 
* 
* SEND INTERMEDIATE REPLY FOR THIS CONTINUATION REQUEST.
* 
SNREP LDA RQ0       SET WDCNT = 8.
      AND B377
      IOR LFT8
      STA RQ0 
      LDA RQ2       SET REPLY BIT.
      IOR BIT15 
      STA RQ2 
      LDA RQ4       REVERSE PROCESS NUMBERS.
      ALF,ALF 
      STA RQ4 
      LDA LCSEQ     STORE LOCAL SEQUENCE NUMBER.
      STA RQ5 
      CLA           SET N = 0.
      STA RQ7 
* 
      LDA #QXCL 
      SSA 
      JMP GET       LINE IS DISCONNECTED. IGNORE. 
* 
      JSB EXEC      WRITE "REPLY" TO QUEX'S CLASS.
      DEF *+8 
      DEF CLS20 
      DEF D0
      DEF RQBUF 
      DEF D8
      DEF D8
      DEF D0
      DEF #QXCL 
      JMP REJCT     ERROR.
* 
      JMP GET       GO WAIT FOR CONTINUATION. 
* 
* GATHER DS/1000 REQUEST AND DATA BLOCKS FOR
* PASSAGE TO DS/1000 SLAVE MONITOR. 
* 
GATHR JSB EXEC      GET DS/1000 REQUEST.
      DEF *+6 
      DEF CLS21 
      DEF HLDCL     NO WAIT, NO RELEASE.
      DEF PARMB 
      DEF PRMBL 
      DEF LOG 
      JMP REJCT     ERROR.
* 
      SSA           ANYTHING THERE? 
      JMP REJCT     NO. 
* 
      LDA LOG 
      STA RQLEN     SAVE LEN OF DS/1000 REQUEST.
* 
      LDA ARQ8      INIT DATA BUFFER POINTER. 
      STA DABUF     SET POINTER TO DATA.
      STA TEMP
      CLA           INIT TOTAL DATA LENGTH. 
      STA DALEN 
* 
GDATA JSB EXEC      GET A DATA BLOCK. 
      DEF *+6 
      DEF CLS21 
      DEF HLDCL     NO WAIT, NO RELEASE.
      DEF TEMP,I    DATA BUFFER POINTER.
      DEF MAXDA     MAX DATA LENGTH.
      DEF LOG 
      JMP REJCT     ERROR.
* 
      SSA,RSS       ANYTHING THERE? 
      JMP ADJST     YES.
      LDA DALEN     NO. DID WE GET ANY DATA?
      SZA,RSS 
      JMP REJCT     NO. REJECT. 
      JSB RLEAS     YES. RELEASE HOLDING CLASS. 
      JMP PUT       GO SEND REQUEST TO MONITOR. 
* 
ADJST LDA TEMP      ADJUST FOR NEXT DATA BLOCK. 
      ADA LOG 
      STA TEMP
      LDA DALEN 
      ADA LOG 
      STA DALEN 
* 
      JMP GDATA     GET MORE DATA.
      SKP 
* 
* SEND A "REJECT" REPLY TO THE 3000 FOR THIS REQUEST. 
* LOCAL TST STORAGE AREA CONTAINS CURRENT TST 6-WORD HEADER 
* AND FIXED-FORMAT HEADER FROM CURRENT REQUEST. "TSTAD" 
* CONTAINS ADDRESS OF TST ENTRY IN S.A.M. 
* 
REJCT LDB TSTAD     DELETE TST ENTRY IN S.A.M.
      CLA 
      SZB           SKIP IF NO TST CREATED. 
      JSB STRWD 
* 
      LDA LCSEQ     WAS SLAVE TCB CREATED?
      SZA,RSS 
      JMP HLD       NO. 
* 
      JSB #RSAX     YES. DELETE SLAVE TCB.
      DEF *+4 
      DEF D7
      DEF LCSEQ 
      DEF STREM 
* 
HLD   LDA HLDCL     HOLDING CLASS ALLOCATED?
      SZA 
      JSB RLEAS     YES. RELEASE IT.
* 
      LDA RQ2       SET REJECT BIT IN REQUEST.
      IOR BIT14 
      STA RQ2 
      LDA D8
      STA RQLEN 
      JMP SNREP     GO SEND REJECT REPLY. 
      SPC 3 
* 
* SUBROUTINE TO FLUSH AND RELEASE THE HOLDING CLASS.
* 
RLEAS NOP 
* 
CREPT CCA           SET RELEASE RE-TRY SWITCH 
      STA TEMP      TO -1.
* 
CLRTN JSB EXEC      RELEASE CLASS NUMBER. 
      DEF *+5 
      DEF CLS21     NO ABORT. 
      DEF HLDCL     HOLDING CLASS #.
      DEF D0
      DEF D0
      RSS 
* 
      ISZ TEMP      RELEASE PROCESSING COMPLETED? 
      JMP RLEND     YES.
      INA,SZA       NO. ARE ALL PENDING REQUESTS CLEARED? 
      JMP CREPT     NO. CONTINUE TO CLEAR REQUESTS. 
* 
      LDA HLDCL     YES. SET FOR DE-ALLOCATE. 
      AND CLMSK 
      STA HLDCL 
      JMP CLRTN     DO FINAL DEALLOCATION.
* 
RLEND CLA           CLEAR SLOT IN LOCAL TST.
      STA HLDCL 
      LDB TSTAD     IF TST ENTRY EXISTS,
      SZB,RSS 
      JMP RLEAS,I 
      ADB D2        CLEAR SLOT THERE, TOO.
      JSB STRWD 
      JMP RLEAS,I   RETURN TO CALLER. 
      SKP 
* 
* SUBROUTINE TO LOAD FROM ALTERNATE MAP (IF RTE-III OR IV). 
* 
LODWD NOP 
MODI2 LDA B,I       (RSS IF DMS SYSTEM) 
      JMP LODWD,I   RETURN IF RTE-II. 
      XLA B,I       LOAD WORD FROM ALTERNATE MAP. 
      JMP LODWD,I 
* 
MWII  MWI 
      NOP 
* 
MWFI  MWF 
      NOP 
      SPC 3 
* 
* SUBROUTINE TO STORE INTO ALTERNATE MAP (IF RTE-III OR IV).
* 
STRWD NOP 
      JSB $LIBR 
      NOP 
MODI3 STA B,I       (RSS IF DMS SYSTEM) 
      JMP OUT 
      XSA B,I       STORE WORD INTO ALTERNATE MAP.
OUT   JSB $LIBX 
      DEF STRWD 
      SKP 
**************************************************************
*                                                            *
* SUBROUTINE TO CONVERT DS/3000 REQUESTS TO DS/1000 FORMAT.  *
*                                                            *
**************************************************************
* 
D1000 NOP 
* 
* KEY OFF 3000 MESSAGE CLASS NUMBER.
* 
      LDA RQ0 
      AND B377      ISOLATE MESSAGE CLASS.
      ADA N3        SUBRACT 3.
      LDB D5
      JSB BNDCK     CHECK RANGE: 0 - 5. 
      ADA JTAB1     TABLE ADDRESS + MESSAGE CLASS.
      LDA A,I 
      LDB RQ2       GET DS/3000 STREAM WORD.
      JMP A,I       GO TO MESSAGE CLASS PROCESSORS. 
* 
JTAB1 DEF *+1 
      DEF MSCL3     OPERATOR COMMAND. 
      DEF MSCL4     PREAD/PWRIT/PCONT.
      DEF MSCL5     $STDLIST/$STDIN.
      DEF REJCT 
      DEF MSCL7     POPEN/PCLOS.
      DEF MSCL8     RFA/DEXEC.
* 
************************************************
* MESSAGE CLASS 3 ..... OPERATOR COMMANDS.     *
************************************************
* 
MSCL3 CPB B20 
      RSS 
      JMP REJCT     ILLEGAL STREAM TYPE.
* 
      LDA D7        STORE DS/1000 STREAM TYPE.
      IOR BIT3K     SET "3K" BIT. 
      STA PARMB 
      LDA RQ7       STORE COMMAND LENGTH. 
      STA PARMB+4   (+ BYTES) 
      INA 
      ARS           CONVERT +BYTES TO +WORDS. 
      STA TEMP
* 
      CMA,INA       CHECK LENGTH AGAINST LIMIT. 
      ADA PRMBL 
      ADA N5
      SSA 
      JMP REJCT     COMMAND IS TOO LONG. REJECT.
* 
      LDA ARQ8      MOVE ASCII COMMAND. 
      LDB NAMA
      MVW TEMP
* 
      LDA TEMP      SET LENGTH OF DS/1000 REQUEST.
      ADA D5
      JMP D1000,I   RETURN. 
* 
************************************************
* MESSAGE CLASS 4 ..... PREAD/PWRIT/PCONT.     *
************************************************
* 
MSCL4 LDA D4        STORE DS/1000 STREAM TYPE.
      IOR BIT3K     SET "3K" BIT. 
      STA PARMB 
      LDA B         GET DS/3000 STREAM WORD.
      AND B377      ISOLATE STREAM. 
      ADA NB22      SUBRACT 22 OCTAL. 
      LDB D2
      JSB BNDCK     CHECK RANGE: 0 - 2. 
      ADA D2        FORM PTOP FCODE.
      STA PARMB+7   STORE IN REQUEST. 
      STA FCNCD     STORE IN TST ENTRY. 
* 
      LDA ARQ10     MOVE PCB AND TAG FIELD. 
      LDB PCBA
      MVW D23 
* 
      LDA FCNCD 
      CPA D4
      JMP MSC4A     SKIP IF PCONT.
      LDA RQ9       CHECK FOR DATA LIMIT. 
      JSB LIMCK 
      STB PARMB+10  STORE IL PARAM IN PARMB.
* 
MSC4A LDA D31       SET LENGTH OF DS/1000 REQUEST.
      JMP D1000,I   RETURN. 
* 
************************************************
* MESSAGE CLASS 5 ..... $STDLIST/$STDIN        *
************************************************
* 
MSCL5 LDA RCVLN     CHECK LENGTH AGAINST LIMIT. 
      CMA,INA 
      ADA PRMBL 
      LDB PRMBL 
      SSA 
      STB RCVLN     TOO LONG. TRUNCATE MESSAGE. 
* 
      LDA ARQ0      MOVE REQ TO PARMB AREA. 
      LDB PARMA 
      MVW RCVLN 
      LDA LCSEQ     STORE SEQUENCE NUMBER.
      STA PARMB+5 
* 
      LDA RCVLN     SET LENGTH OF REQUEST.
      STA RQLEN 
      JMP STDL      PASS ON TO "CNSLM". 
* 
************************************************
* MESSAGE CLASS 7, STREAM 21 ..... POPEN/PCLOS.*
************************************************
* 
MSCL7 LDA B 
      AND B377
      CPA B21 
      RSS 
      JMP REJCT     ILLEGAL STREAM. 
* 
      LDA D4        STORE DS/1000 STREAM TYPE.
      IOR BIT3K     SET "3K" BIT. 
      STA PARMB 
* 
      LDA RQ10      GET DS/3000 "RFA" CODE. 
      AND B377
      ADA NB25      SUBTRACT 25 OCTAL.
      LDB D1
      JSB BNDCK     CHECK RANGE: 0 - 1. 
      SZA 
      JMP PCLOS 
* 
* CONVERT POPEN REQUEST.
* 
      CLA,INA       STORE PTOP FCODE. 
      STA PARMB+7 
      STA FCNCD     STORE IN TST ENTRY. 
* 
      LDA ARQ11     MOVE PROGRAM NAME.
      LDB PCBA
      MVW D3
      LDA ARQ29     MOVE TAG FIELD. 
      LDB PCBA
      ADB D3
      MVW D20 
* 
      LDA RQ55      STORE POPEN MASK IN TST ENTRY.
      STA MASK
* 
      LDA D31       SET LENGTH OF DS/1000 REQUEST.
      JMP D1000,I   RETURN. 
* 
* CONVERT PCLOS REQUEST.
* 
PCLOS LDA D5        STORE PTOP FCODE. 
      STA PARMB+7 
      STA FCNCD     STORE IN TST ENTRY. 
* 
      LDA ARQ11     MOVE PCB. 
      LDB PCBA
      MVW D3
* 
      LDA D11       SET LENGTH OF DS/1000 REQUEST.
      JMP D1000,I 
* 
************************************************
* MESSAGE CLASS 8, STREAM 20 ..... RFA.        *
************************************************
* 
MSCL8 LDA B 
      AND B377
      CPA B20 
      RSS 
      JMP STM21     STREAM 21 IS DEXEC. 
* 
      LDA D6        STORE DS/1000 STREAM TYPE.
      IOR BIT3K     SET "3K" BIT. 
      STA PARMB 
      LDA ARQ12     MOVE DCB (GARBAGE FOR DSTAT). 
      LDB NAMA
      MVW D3
* 
      LDA RQ8       GET FCN CODE FROM DS/3000 REQUEST.
      ADA N150      SUBRACT 150.
      LDB D12 
      JSB BNDCK     CHECK RANGE: 0 - 12.
      ADA JMAP1     TABLE ADDRESS + 3000 FCN CODE.
      LDA A,I       GET DS/1000 FCN CODE. 
      STA PARMB+4   STORE IN DS/1000 REQUEST. 
      STA FCNCD     STORE IN TST ENTRY. 
* 
      ADA JTAB3     TABLE ADDRESS + 1000 FCN CODE.
      LDB A,I 
      LDA XEQT      GET ID SEG ADDR OF RQCNV (DUMMY). 
      JMP B,I       GO CONVERT THE RFA REQUEST. 
* 
JMAP1 DEF *+1       DS/3000 - DS/1000 FCN MAPPING TABLE.
D3    DEC 3          DCRET
D8    DEC 8          DPURG
D6    DEC 6          DOPEN
D12   DEC 12         DWRIT
D9    DEC 9          DREAD
D7    DEC 7          DPOSN
D11   DEC 11         DWIND
D1    DEC 1          DCLOS
D5    DEC 5          DNAME
D2    DEC 2          DCONT
D4    DEC 4          DLOCF
D0    DEC 0          DAPOS
D10   DEC 10         DSTAT
* 
JTAB3 DEF *+1       TABLE OF CONVERSION ROUTINE ADDRESSES.
      DEF DAPOS 
      DEF DCLOS 
      DEF DCONT 
      DEF DCRET 
      DEF DLOCF 
      DEF DNAME 
      DEF DOPEN 
      DEF DPOSN 
      DEF DPURG 
      DEF DREAD 
      DEF DSTAT 
      DEF DWIND 
      DEF DWRIT 
* 
* CONVERT DS/3000 RFA REQUEST TO DS/1000 FORMAT.
* 
DAPOS STA PARMB+5 
      LDA RQ15      MOVE RECNUM PARAM.
      STA PARMB+8 
      LDA RQ16      MOVE REL BLOCK PARAM. 
      STA PARMB+9 
      LDA RQ17      MOVE BLOCK OFFSET PARAM.
      STA PARMB+10
* 
      LDA D11       SET LENGTH OF DS/1000 REQUEST.
      JMP D1000,I   RETURN. 
* 
DCLOS STA PARMB+5 
      LDA RQ15      MOVE ITRUN PARAM. 
      STA PARMB+8 
      LDA D9        SET LENGTH OF DS/1000 REQUEST.
      JMP D1000,I   RETURN. 
* 
DCONT STA PARMB+5 
      DLD RQ15      MOVE ICON1, ICON2 
      DST PARMB+8 
* 
      LDA D10       SET LENGTH OF DS/1000 REQUEST.
      JMP D1000,I   RETURN. 
* 
DCRET STA PARMB+9 
      LDA RQ19      MOVE ICR PARAM. 
      STA PARMB+8 
      LDA RQ18      MOVE ISECU PARAM. 
      STA PARMB+10
      DLD RQ15      MOVE ISIZE(1), ISIZE(2).
      DST PARMB+11
      LDA RQ17      MOVE ITYPE PARAM. 
      STA PARMB+13
* 
      LDA D14       SET LENGTH OF DS/1000 REQUEST.
      JMP D1000,I   RETURN. 
* 
DLOCF STA PARMB+5 
      LDA D8        SET LENGTH OF DS/1000 REQUEST.
      JMP D1000,I   RETURN. 
* 
DNAME STA PARMB+9 
      LDA RQ19      MOVE ICR PARAM. 
      STA PARMB+8 
      LDA RQ18      MOVE ISECU PARAM. 
      STA PARMB+10
      DLD RQ15      MOVE NEWNAME PARAM. 
      DST PARMB+11
      LDA RQ17
      STA PARMB+13
* 
                                                                  