ASMB,R,Q,C
      HED INCNV   91750-16129 REV 2013 * (C) HEWLETT-PACKARD CO. 1980 
      NAM INCNV,19,20 91750-16129 REV.2013 791219 
      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 HEWLETT-PACKARD COMPANY.       *
******************************************************************
      SPC 2 
      ENT INCNV 
* 
      EXT EXEC,DTACH,#GETR,#GRPM,#CVBF,#INCV,.MVW 
      EXT $CVT1,CNUMD,REIO,#NODE,#OTCV,#ICV0,#LEVL
      EXT $TIME,#QCLM,#NRVS 
* 
      SUP 
*                                         ************************
* NAME:   INCNV                           *                      *
* SOURCE: 91750-18129                     * THIS VERSION RUNS IN *
* RELOC:  91750-16129                     *    MESSAGE FORMAT    *
* PGMR:   JIM HARTSELL                    *    LEVEL 1 NODES     *
*                                         *                      *
*                                         ************************
* 
* 
* INCNV IS AN INCOMING-MESSAGE CONVERTER THAT CONVERTS MESSAGES FROM
* A LOWER UPGRADE LEVEL "UP" TO THE LEVEL AT WHICH THE LOCAL NODE 
* OPERATES.  THE LOCAL UPGRADE LEVEL IS INDICATED BY #LEVL (IN RES).
* THE INCOMING FORMAT LEVEL, IF BIT 12 IN THE STREAM WORD IS SET, IS
* IN THE HEADER AT OFFSET +4 (OTHERWISE ZERO).  A GIVEN VERSION OF
* INCNV CAN ONLY CONVERT UP TO THE "LEVEL" OF THE NODE IN WHICH IT RUNS.
* ALL VERSIONS OF INCNV CAN CONVERT UP FROM LEVEL 0.
* 
* FOR EXAMPLE:  A NODE WHICH OPERATES AT UPGRADE LEVEL 0 ONLY KNOWS 
* HOW TO BUILD MESSAGES FOR LEVEL 0 FORMAT.  IT DOESN'T KNOW ANYTHING 
* ABOUT HIGHER LEVEL FORMATS.  WHEN THE MESSAGE IS RECEIVED BY A HIGHER 
* LEVEL NODE, THE INCNV MODULE AT THAT NODE WILL CONVERT UP TO THE
* HIGHER LEVEL. 
* 
* TO EXTEND INCNV FOR THE NEXT UPGRADE LEVEL, 
* 
*    1. SET MAX, ADD, HDR EQUATES FOR NEW LEVEL.
*    2. REPLACE GLOBAL EQUATE BLOCK WITH NEW FORMAT DEFINITIONS.
*    3. ADD ENTRY TO FMTBL & TOTBL. 
*    4. ADD FROMX AND TOX TABLE.
*    5. ADD ENTRY TO SPECL (ADD "EXT" IF ROUTINE REQUIRED). 
* 
* 
MAX   EQU 31      MAX REQ SIZE FOR ALL OLDER LEVELS.
ADD   EQU 7       ADDITIONAL SIZE FOR NEWEST LEVEL. 
HDR   EQU 7       MAX HEADER SIZE, ALL OLDER LEVELS.
      SKP 
* 
* THE FOLLOWING GLOBAL EQUATE BLOCK MUST DEFINE MESSAGE HEADER FORMAT 
* FOR LEVEL OF NODE IN WHICH THIS VERSION OF INCNV IS RUNNING.
* 
* 
* GLBLK-START 
* 
******************************************************************
*                                                                *
*     G L O B A L   B L O C K               REV XXXX 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 
*         ******************************************* 
*         *                                         * 
*         *    C O N V E R S I O N   T A B L E S    * 
*         *                                         * 
*         ******************************************* 
      SPC 2 
* 
* WHEN CONVERTING FROM AN OLDER FORMAT TO THE NEXT UPPER LEVEL, THE 
* FORMAT LEVEL NUMBER OF THE OLDER FORMAT IS USED AS THE OFFSET INTO
* BOTH THE "FROM TABLE" (FMTBL) AND THE "TO TABLE" (TOTBL).  IN OTHER 
* WORDS, WHEN THE OLDER FORMAT IS LEVEL 0, THEN OFFSET 0 IN BOTH TABLES 
* SPECIFIES CONVERSION FROM FORMAT LEVEL 0 (FROM0) TO FORMAT LEVEL 1 (TO1). 
* 
      SPC 3 
FMTBL DEF *+1 
      DEF FROM0     FROM LEVEL 0. 
      DEF FROM1     FROM LEVEL 1. 
*                     . 
*                     . 
*                     . 
      SPC 5 
TOTBL DEF *+1 
      DEF TO1       TO LEVEL 1. 
      DEF TO2       TO LEVEL 2. 
*                     . 
*                     . 
*                     . 
      SPC 3 
* 
* TABLE OF ENTRY POINTS FOR OPTIONAL EXTERNAL REQUEST-SPECIFIC
* CONVERSION ROUTINES.  USE SUBROUTINE NAMES OF THE FORM #ICV0, #ICV1,... 
* IF APPLICABLE FOR THAT LEVEL.  IF NO REQUEST-SPECIFIC CONVERSION
* IS NEEDED, JUST USE THE DUMMY "NULL". 
* 
SPECL DEF *+1 
      DEF #ICV0     LEVEL 0 TO LEVEL 1 SPECIFICS (EXT). 
*                     . 
*                     . 
*                     . 
      SPC 3 
*                            TABLES CONTINUED NEXT PAGE.... 
      SKP 
* 
* THE FOLLOWING TABLES WORK IN PAIRS TO SPECIFY MAPPING FROM ONE FORMAT 
* LEVEL TO ANOTHER, I.E., FROM0-TO1, FROM1-TO2, ETC.  THE SAME OFFSET IS
* USED INTO BOTH TABLES FOR EACH WORD THAT IS TRANSFERRED.
* 
* THE "FROM" HALF SPECIFIES AN OFFSET FOR EVERY WORD TO BE TRANSFERRED TO 
* THE NEXT LEVEL.  THE FIRST AND SECOND WORDS SPECIFY THE SIZE OF THE 
* HEADER FOR THE REQUEST AND REPLY, RESPECTIVELY.  THE THIRD WORD INDICATES 
* THE # OF *REQUEST* WORDS TO BE MOVED (NEG) TO THE NEXT UPPER FORMAT LEVEL.
* 
* WARNING:  THE SIZE OF THE FORMAT LEVEL 0 REQUEST HEADER AT "FROM0" IS 
* TEMPORARILY MODIFIED BY INCNV FOR PTOP AND DLIST (7 WORD HEADER)
* REQUESTS. 
* 
* THE "TO" HALF SPECIFIES THE TARGET OFFSET INTO THE NEWER FORMAT WHERE 
* THE CORRESPONDING WORD FROM THE OLDER FORMAT IS TO BE STORED.  THE FIRST
* AND SECOND WORDS SPECIFY THE SIZE OF THE HEADER FOR THE REQUEST AND 
* REPLY, RESPECTIVELY.  THE THIRD WORD INDICATES THE # OF *REPLY* WORDS 
* TO BE MOVED (NEG) TO THE NEXT UPPER FORMAT LEVEL. 
* 
      SPC 3 
FROM0 DEC 4         SIZE OF FORMAT 0 REQUEST HEADER.
      DEC 7         SIZE OF FORMAT 0 REPLY HEADER.
      DEC -4        NEG. # WORDS TRANSFERRED IF *REQUEST*.
B1    DEC 1         WORD 1 = STREAM WORD. 
      DEC 2         WORD 2 = SEQUENCE #.
      DEC 3         WORD 3 = SOURCE NODE #. 
B4    DEC 4         WORD 4 = DEST. NODE #.
      DEC 5         WORD 5 = EC1. 
      DEC 6         WORD 6 = EC2. 
B7    DEC 7         WORD 7 = ERROR NODE NUMBER. 
* 
FROM1 DEC 0         RESERVED FOR LEVEL 2 CONVERTER. 
*                     . 
*                     . 
*                     . 
      SPC 2 
TO1   DEC 13        SIZE OF FORMAT 1 REQUEST HEADER.
      DEC 13        SIZE OF FORMAT 1 REPLY HEADER.
      DEC -7        NEG. # WORDS TRANSFERRED IF *REPLY*.
      DEC 1         WORD 1 = STREAM WORD. 
      DEC 2         WORD 2 = SEQUENCE #.
      DEC 3         WORD 3 = SOURCE NODE #. 
      DEC 4         WORD 4 = DEST. NODE #.
      DEC 5         WORD 5 = EC1. 
      DEC 6         WORD 6 = EC2. 
      DEC 7         WORD 7 = ERROR NODE NUMBER. 
* 
TO2   DEC 0         RESERVED FOR LEVEL 2 CONVERTER. 
*                     . 
*                     . 
*                     . 
      SKP 
A     EQU 0 
B     EQU 1 
* 
INCNV JSB DTACH     DETACH FROM POSSIBLE SESSION. 
      DEF *+1 
* 
      LDA FROM0     SAVE SIZE OF FORMAT LEVEL 0 
      STA SAVEF       REQUEST HEADER. 
* 
* GET A REQUEST TO BE CONVERTED (SHOULD BE ANY FORMAT LEVEL BELOW 
* THAT OF NODE IN WHICH INCNV IS RUNNING).
* 
INGET LDA RQBA      RESET ADDR OF OUTPUT BUFFER.
      STA RQADR 
      LDA SAVEF     RESTORE SIZE OF FORMAT LEVEL 0
      STA FROM0       REQUEST HEADER. 
* 
      CLA             CLEAR ERROR FLAGS.
      STA TEMP
      STA EFLAG 
* 
      JSB #GETR     GET A REQUEST (AND DATA). 
      DEF *+6 
      DEF #INCV     CLASS # FOR INCNV.
RQBA  DEF RQB       INTERNAL REQUEST BUFFER.
      DEF C#MAX     MAXIMUM REQUEST LENGTH. 
      DEF #CVBF+1   EXTERNAL DATA BUFFER. 
      DEF #CVBF     MAXIMUM DATA LENGTH.
      ISZ TEMP      ERROR RETURN. SET FLAG. 
* 
      STA RQLEN     SAVE ACTUAL REQUEST LENGTH. 
      STB DAINL     SAVE ACTUAL DATA LENGTH.
* 
      JSB EXEC      CLEAR BUFFER IN S.A.M.
      DEF *+5 
      DEF CLS21 
      DEF #INCV 
      DEF #CVBF+1 
      DEF B0
      NOP           IGNORE ERROR RETURN.
* 
      LDA TEMP      ERROR ON ORIGINAL "GET"?
      SZA 
      JMP INGET     YES.
* 
      LDA #GRPM     INITIALIZE TO SEND TO GRPM. 
      STA CLASS 
* 
* GET FORMAT LEVEL # OF RECEIVED REQUEST. 
* 
GTFMT LDB RQB+#STR  FIRST CHECK BIT 12 OF STREAM WORD.
      STB STMWD     SAVE STREAM WORD. 
      BLF 
      CLA 
      SLB,RSS 
      JMP SAVLV     BIT 12 NOT SET = LEVEL 0. 
      LDA RQB+#LVL  GET "FORMAT LEVEL" WORD.
      AND B17       ISOLATE BITS 0-3. 
SAVLV STA CURLV     SAVE AS "CURRENT LEVEL".
* 
      CMA           IF INCOMING LEVEL 
      ADA #LEVL       IS EQUAL TO OR GREATER
      SSA             THAN #LEVL, 
      JMP SFAIL       THEN SYSTEM FAILURE (GRPM). 
* 
      LDA STMWD     DETERMINE WHETHER REQUEST OR REPLY. 
      RAL,RAL       ISOLATE BIT 14 OF STREAM WORD.
      AND B1
      STA ADJMT     0 = REQUEST, 1 = REPLY. 
* 
* CROSS-CHECK LOCAL NRV AGAINST REMOTE NRV:  COMPARE LEVEL OF INCOMING
* REQUEST/REPLY AGAINST THE LEVEL SPECIFIED IN THE LOCAL NRV FOR THE
* SENDING NODE.  THEY SHOULD BE THE SAME.  IF NOT: FOR REQUEST, SEND
* "DS07" REPLY BACK TO GRPM --- FOR REPLY, SEND "DS07" TO QCLM, FLUSH 
* THE REPLY, AND LET MASTER CALLER TIME OUT ("DS05"). 
* 
      LDB ADJMT 
      LDA RQB+#SRC  IF REQUEST, GET SOURCE NODE.
      SZB 
      LDA RQB+#DST  IF REPLY, GET DESTINATION NODE. 
      STA TARGT 
* 
      JSB #NRVS     GET LEVEL # OF SENDING NODE.
      DEF *+4 
      DEF TARGT 
      DEF TEMP
      DEF LEVEL       RETURNED LEVEL NUMBER.
      JMP NRVER     ERROR RETURN. 
* 
      LDA LEVEL     CROSS-CHECK LEVEL NUMBERS.
      CPA CURLV 
      JMP MHEAD     MATCH. OK.
* 
NRVER DLD "DS07     NRV ERROR!  STORE "DS07". 
      DST RQB+#EC1
      LDA RQB+#ECQ  SET QUALIFIER = 2.
      IOR B40 
      STA RQB+#ECQ
      LDA #NODE     INDICATE ASCII ERROR CODE.
      IOR BIT15 
      STA RQB+#ENO
* 
      LDA ADJMT     CHECK WHETHER REQ OR REPLY. 
      SZA 
      JMP SQCLM     REPLY. "DS07" TO QCLM, "DS05" TO USER.
      LDA RQB+#STR  REQUEST. SET REPLY BIT AND
      IOR BIT14       SEND TO GRPM. 
      STA RQB+#STR
      JMP APEND 
* 
* IF CONVERTING PTOP OR DLIST REQUEST FROM FORMAT LEVEL 0, MODIFY 
* THE HEADER SIZE SPECIFICATION AT "FROM0". 
* 
MHEAD ADA CURLV     COMBINE ADJMT AND CURLV.
      SZA           IF BOTH ARE ZERO, 
      JMP NXLEV 
      LDA STMWD       CHECK STREAM WORD OF REQUEST. 
      AND B77       ISOLATE STREAM. 
      CLB           SET DEFAULT MOD = NONE. 
      CPA B1        IF DLIST, 
      RSS 
      CPA B4        OR PTOP,
      LDB B7          SET MOD = 7 WORD HEADER.
      SZB 
      STB FROM0     STORE NEW SIZE IF REQUIRED. 
* 
* BEGIN CONVERSION TO NEXT UPWARD LEVEL.  PERFORM REQUEST-SPECIFIC
* CONVERSIONS, IF ANY.
* 
NXLEV LDB CURLV     GET CURRENT LEVEL NUMBER. 
      ADB SPECL     ADD TO TABLE OF REQUEST-
      LDB B,I         SPECIFIC ROUTINE
      STB TEMP
      LDA RQADR       AND GO DO IT. 
      LDB RQLEN 
      JSB TEMP,I
      JSB ERROR     ERROR RETURN. 
      STB RQLEN     SAVE POSSIBLY MODIFIED LENGTH.
* 
      LDB CURLV     FIND "FROM" INDEX TABLE.
      ADB FMTBL 
      LDB B,I       GET POINTER TO REQ HEADER SIZE. 
      STB FPTR
      ADB ADJMT     IF REPLY, BUMP POINTER. 
      STB FSZPT     POINTER TO "FROM" HEADER SIZE.
      LDA B,I       GET SIZE OF THE HEADER (POS.).
      ADA RQADR     ADD TO START OF HEADER. 
      STA BODAD     ADDRESS OF BODY OF REQUEST. 
      ISZ FPTR
      ISZ FPTR      POINT TO # WORDS TO MOVE (IF REQUEST).
* 
* CLEAR THE TEMPORARY BUFFER. 
* 
      LDA TMPBF 
      STA TPTR
      LDB N#HDR 
      CLA 
CLRTM STA TPTR,I
      ISZ TPTR
      INB,SZB 
      JMP CLRTM 
* 
* MOVE CURRENT HEADER TO TEMPORARY BUFFER (OLDER FORMAT). 
* 
      LDA RQADR 
      LDB TMPBF 
      JSB .MVW
      DEF FSZPT,I 
      NOP 
* 
* SET UP POINTERS AND COUNTERS FOR NEWER FORMAT.
* 
      LDB CURLV     FIND "TO" INDEX TABLE.
      ADB TOTBL 
      LDB B,I       GET POINTER TO REQ HEADER SIZE. 
      STB TPTR
      ADB ADJMT     IF REPLY, BUMP POINTER. 
      STB TSZPT     POINTER TO "TO" HEADER SIZE.
      LDA B,I       GET THE SIZE OF THE HEADER. 
      CMA,INA 
      STA TEMP      SAVE FOR CLEARING BUFFER. 
      ADA BODAD 
      STA RQADR     ADDR OF NEWER HEADER. 
* 
      LDA FSZPT,I   COMPUTE DIFFERENCE IN SIZE
      CMA,INA         FROM OLDER TO NEWER FORMAT. 
      ADA TSZPT,I 
      ADA RQLEN     ADD TO CURRENT SIZE.
      STA RQLEN 
      ISZ TPTR
      ISZ TPTR      POINT TO # WORDS TO MOVE (IF REPLY).
* 
* CLEAR TARGET AREA FOR NEWER FORMAT OF REQUEST.
* 
      LDB RQADR 
      CLA 
CLEAR STA B,I 
      INB 
      ISZ TEMP
      JMP CLEAR 
* 
* CONVERT FROM OLDER FORMAT TO NEXT UPPER LEVEL.
* 
      LDA FPTR,I    GET # WORDS TO MOVE FOR REQUEST.
      LDB ADJMT 
      SZB           IF REPLY, 
      LDA TPTR,I    GET # WORDS TO MOVE FOR REPLY.
      STA TEMP
      ISZ FPTR
      ISZ TPTR
* 
CONV  LDA FPTR,I    GET A WORD-INDEX INTO OLDER FORMAT. 
      ADA N1        ADJUST TO ZERO. 
      ADA TMPBF     ADDR OF WORD IN OLDER FORMAT REQUEST. 
      LDA A,I       CONTENTS OF WORD. 
      LDB TPTR,I    GET A WORD-INDEX INTO NEWER FORMAT. 
      ADB N1        ADJUST TO ZERO. 
      ADB RQADR     ADDR OF WORD IN NEWER FORMAT REQUEST. 
      STA B,I       STORE FROM OLD TO NEW LOCATION. 
* 
      ISZ FPTR      BUMP POINTERS.
      ISZ TPTR
      ISZ TEMP      INCR. # WORDS TO MOVE.
      JMP CONV      LOOP TILL DONE. 
* 
      ISZ CURLV     BUMP TO NEXT LEVEL UP.
* 
* CHECK IF ANOTHER LEVEL. 
* 
      LDA CURLV 
      CPA #LEVL     REACHED LEVEL # OF THIS NODE? 
      RSS 
      JMP NXLEV     NO. KEEP ON CONVERTING. 
* 
* CONVERSION FINISHED --- 
* STORE FORMAT LEVEL NUMBER IN THE MESSAGE (LEVEL IS NOW THE SAME 
* AS THAT OF NODE IN WHICH INCNV IN RUNNING, THUS INCNV CAN NOW USE 
* ITS GLOBAL EQUATES TO STORE DIRECTLY INTO THE MESSAGE HEADER).
* 
      LDA RQADR,I   SET BIT 12 (LEVEL 1 & ABOVE). 
      IOR BIT12 
      STA RQADR,I 
* 
      LDB RQADR     STORE LEVEL NUMBER. 
      ADB C#LVL 
      LDA B,I 
      AND B7760 
      IOR CURLV 
      STA B,I 
* 
      LDA EFLAG     IF REQUEST-SPECIFIC ERROR OCCURRED
      SZA             ON THE WAY OF BEING CONVERTED UP, 
      JMP REJCT       SEND IT BACK DOWN VIA OTCNV.
* 
      LDA DAINL     WAS DATA LENGTH TOO LARGE? (NOT 
      CMA,INA       CHECKED WHEN RECEIVED BECAUSE GRPM
      ADA #CVBF     WOULD THROW REJECTED LOWER LEVEL
      SSA,RSS       REPLY RIGHT BACK TO INCNV.) 
      JMP APEND     NO. 
* 
      CLA           YES. SET ERROR = "DS03".
      STA DAINL 
      DLD "DS03 
      DST RQB+#EC1
      LDA RQB+#ECQ    (QUALIFIER = 1) 
      IOR B20 
      STA RQB+#ECQ
      LDA #NODE 
      IOR BIT15 
      STA RQB+#ENO
      LDA RQB+#STR  CHECK WHETHER REQUEST OR REPLY. 
      RAL 
      SSA 
      JMP APEND     REPLY.
* 
      RAR 
      IOR BIT14     REQUEST: SET REPLY BIT. 
      STA RQB+#STR
* 
REJCT LDA #OTCV     SEND REPLY TO OTCNV TO CONVERT
      STA CLASS       BACK DOWN TO LEVEL OF SOURCE NODE.
* 
* PROCESS THE LOCAL APPENDAGE AREA. 
* 
APEND LDA RQLEN     CLEAR THE LOCAL APPENDAGE AREA. 
      ADA RQADR 
      STA BODAD 
      LDB C#LSZ 
      CMB,INB 
      CLA 
CLAP  STA BODAD,I 
      ISZ BODAD 
      INB,SZB 
      JMP CLAP
* 
      LDB RQLEN     ADD NUMBER OF WORDS 
      ADB C#LSZ       IN LOCAL APPENDAGE AREA.
      STB RQLEN 
* 
      ADB RQADR     SET BIT 8 OF LAST WORD
      ADB N1          OF REQUEST ("LAST LU"). 
      LDA B,I 
      IOR BIT8
      STA B,I 
* 
* SEND CONVERTED REQUEST BACK TO GRPM OR OTCNV. 
* 
      JSB EXEC      SEND REQUEST BACK TO GRPM.
      DEF *+8 
      DEF CLS20 
      DEF CONWX     "Z" BIT & "WRITE" INDICATOR SET.
      DEF #CVBF+1   ADDRESS OF DATA BUFFER. 
      DEF DAINL     DATA LENGTH.
RQADR NOP           ADDRESS OF NEW REQUEST. 
      DEF RQLEN     LENGTH OF NEW REQUEST.
      DEF CLASS     CLASS # OF GRPM OR OTCNV. 
      NOP           IGNORE ERROR RETURN.
* 
      JMP INGET     GO GET NEXT MESSAGE BUFFER. 
* 
* ERROR IN REQUEST-SPECIFIC CONVERSION.  FORMAT MAY STILL BE AS RECEIVED
* FROM GRPM.  ERROR REPLY CAN BE ANY LEVEL BELOW THAT OF NODE IN WHICH
* INCNV IS RUNNING.  SEND TO OTCNV TO CONVERT BACK DOWN.
* 
ERROR NOP 
      CLA,INA       FLAG ERROR SO REJECT CAN BE 
      STA EFLAG       HANDLED AFTER CONVERSION COMPLETE.
      JMP ERROR,I 
* 
* REPORT ERROR IN NODAL ROUTING VECTOR (NRV). 
* 
SFAIL LDA CURLV     FORMAT LEVEL # RECEIVED.
      CCE 
      JSB $CVT1 
      STA EMSG+7
* 
      LDB RQADR     SOURCE NODE NUMBER. 
      ADB C#SRC       (RELATIVE POSITION FROM LEVEL TO
      LDA B,I         LEVEL IS NOT SUPPOSED TO CHANGE!) 
      STA TEMP
* 
      JSB CNUMD 
      DEF *+3 
      DEF TEMP
      DEF EMSG+15 
* 
      JSB REIO      DISPLAY ON SYS CONSOLE. 
      DEF *+5 
      DEF ICOD2 
      DEF B1
      DEF EMSG
      DEF ELEN
      NOP           IGNORE ERROR RETURN.
* 
      JMP INGET     GO BACK TO GET NEXT REQUEST.
* 
EMSG  ASC 18, RECV'D LEVEL XX MSG FROM NODE XXXXX 
ELEN  DEC 18
      SKP 
* 
* SEND ERROR TO QCLM AND FLUSH THE MESSAGE. 
* 
SQCLM LDB RQADR 
      ADB B4
      STB TEMP      POINT TO WORD 5 OF "QCLM BUFFER". 
      DLD TEMP,I    MOVE #EC1 & #EC1 TO "A & B REGISTERS".
      ISZ TEMP
      DST TEMP,I
      ISZ TEMP
      ISZ TEMP
      DLD $TIME     RECORD TIME OF ERROR. 
      DST TEMP,I
* 
      LDA #QCLM     GET CLASS NUMBER FOR QCLM.
      SZA,RSS 
      JMP INGET     IF NO QCLM, FORGET MESSAGE. 
* 
      JSB EXEC      MAILBOX WRITE/READ TO QCLM. 
      DEF *+8 
      DEF CLS20 
      DEF B0
      DEF RQADR,I 
      DEF D12 
      DEF B1        TYPE 1. 
      DEF B0
      DEF #QCLM 
      NOP           IGNORE ERROR RETURN.
* 
      JMP INGET     GO BACK TO GET NEXT MESSAGE.
      SPC 5 
* 
* DUMMY REQUEST-SPECIFIC CONVERSION SUBROUTINE. 
* 
NULL  NOP 
      JMP NULL,I
      SKP 
* 
* CONSTANTS AND STORAGE.
* 
B0    OCT 0 
B17   OCT 17
B20   OCT 20
B40   OCT 40
B77   OCT 77
D12   DEC 12
N1    DEC -1
ICOD2 OCT 100002
CLS20 OCT 100024
CLS21 OCT 100025
CONWX OCT 10100 
BIT8  OCT 400 
BIT12 OCT 10000 
BIT14 OCT 40000 
BIT15 OCT 100000
B7760 OCT 177760
"DS03 ASC 1,DS03
"DS07 ASC 1,DS07
* 
CLASS NOP 
CURLV NOP 
TARGT NOP 
LEVEL NOP 
FPTR  NOP 
TPTR  NOP 
BODAD NOP 
DAINL NOP 
RQLEN NOP 
FSZPT NOP 
TSZPT NOP 
ADJMT NOP 
TEMP  NOP 
SAVEF NOP 
STMWD NOP 
EFLAG NOP 
* 
N#HDR ABS -HDR
C#MAX ABS MAX 
C#LVL ABS #LVL
C#SRC ABS #SRC
C#LSZ ABS #LSZ
* 
* TEMPORARY BUFFER TO HOLD OLDER FORMAT OF REQUEST. 
* 
TMPBF DEF *+1 
      BSS HDR 
* 
* BUFFER FOR CURRENT REQUEST AND HEADER EXPANSION.
* 
      BSS ADD       ADDITIONAL ROOM FOR REQ EXPANSION.
RQB   BSS MAX+#LSZ  BUFFER FOR INCOMING REQUEST.
* 
      BSS 0         SIZE OF MODULE (+ #CVBF). 
* 
      END INCNV 
                                                                                                                                                                                                                        