ASMB,R,L,C
      HED QCLM 91740-16016 REV 1913 * (C) HEWLETT-PACKARD CO. 1979
      NAM QCLM,19,28 91740-16016 REV 2001 791024
      SPC 2 
******************************************************************
*  * (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 
****************************************************************
* 
*     QCLM  COMMUNICATION ERROR LOG 
* 
*     NAME:         QCLM
*     SOURCE:       91740-18016 
*     RELOC:        91740-16016 
*     PGMR:         CHUCK WHELAN
* 
*     DATE WRITTEN  DEC 1976
* 
*     MODIFIED BY: LYLE WEIMAN, JAN. '78
*************************************************************** 
      SPC 2 
      EXT EXEC,#QCLM
      EXT $TIME 
      EXT CNUMO,CNUMD,KCVT,TMVAL
      SUP 
      SPC 3 
* 
QCLM  EQU * 
      LDA #QCLM     GET QCLM CLASS NUMBER 
      ALR,RAR         AND REMOVE NO WAIT BIT
      STA QCLS
QCLM2 JSB EXEC      AWAIT WRITES TO QCLM CLASS
      DEF *+6 
      DEF K21 
      DEF QCLS      CLASS WORD IN STORAGE 
      DEF IBUF      BUFFER ADDRESS
      DEF K9
      DEF XEQT      ADDRESS OF ID SEG OF CALLER 
* 
* 
*     DETERMINE THE ERROR TYPE
* 
      LDA AREG
      CPA BREG      A=B?
      RSS           YES 
      JMP REGLS     NO, JUST GIVE REG CONTENTS
      CPA N4        A=B=-4? 
      JMP MSGB      YES, TCB NOT FOUND
      CPA N5        A=B=-5? 
      JMP MSGC      YES, COMM. READ ERROR 
      CPA N6
      JMP MSGD
* 
REGLS LDB PREG      P CONTENTS
      SZB,RSS       ZERO? 
      JMP MSGA      YES, GIVE "REPLY FLUSHED" 
* 
*     HERE FOR UNEXPECTED ERRORS (I.E., CATASTROPHIC) 
* 
      LDA XEQT      TRANSFER NAME OF PROGRAM WHICH
      ADA K12         SENT US THE MESSAGE 
      RAL           CONVERT TO BYTE ADDRESS 
      LDB @ORGN 
      MBT K5
*                   CONVERT REGISTER VALUES TO OCTAL
      JSB CNUMD 
      DEF *+3 
      DEF SEQ#
      DEF .SEQ. 
      JSB CNUMD 
      DEF *+3 
      DEF STREM 
      DEF .STR. 
      LDA FLDAD     GET THE ADDRESS OF THE 1ST WORD 
      STA PNTR1       USE AS DESTINATION POINTER
      LDA @PREG     GET ADDRESS WHERE P, A AND B REGISTER CONTENTS ARE STORED 
      STA PNTR2       USE AS ORIGIN POINTER 
      LDA N3        SET TO CONVERT 3 WORDS
      STA CNTR1 
* 
OUTLP EQU *         SET FOR OCTAL CONVERSION
      JSB CNUMO     CONVERT TO OCTAL
      DEF *+3 
PNTR2 NOP           POINTER TO VALUE TO BE CONVERTED
PNTR1 NOP           STORE ASCII HERE. 
* 
      LDA PNTR1     GET THE DESTINATION POINTER 
      ADA K5         MOVE IT TO 
      STA PNTR1       THE NEXT ENTRY. 
      ISZ PNTR2     STEP TO NEXT QCB WORD 
      ISZ CNTR1     ALL DONE ?
      JMP OUTLP     NO, CONTINUE
* 
      JSB EXEC      OUTPUT THE CATASTROPHIC ERROR MESSAGE 
      DEF *+5 
      DEF K2        WRITE 
      DEF K1        CRT 
      DEF MSG       MESSAGE ADDRESS 
      DEF MSGL      MESSAGE LENGTH
* 
      JMP QCLM2     GO, GET NEXT COMPLAINT
      SPC 3 
* 
*      HERE FOR "REPLY FLUSHED" ERROR.
* 
* 
MSGA  DLD AREG      B&A HAVE ASCII ERROR CODE 
      SWP           REVERSE FOR PRINTING
      DST REGA
      JSB MSGX      MOVE AND WRITE MESSAGE
      DEF MSA         (RETURN MADE DIRECTLY TO 'QCLM2') 
* 
*     HERE FOR "TCB NOT FOUND, POSSIBLE TIMEOUT"
* 
MSGB  JSB MSGX      MOVE AND WRITE MESSAGE
      DEF MSB 
* 
*     HERE FOR "COMMUNICATIONS READ ERROR"
MSGC  EQU * 
      DLD $TIME     GET CURRENT TIME-OF-DAY 
      DST TOD       SAVE FOR TIME CONVERSION
      JSB CVTIM     CONVERT TIME-OF-DAY TO ASCII
      LDA EQTA      CONVERT LINE EQT ADDRESS TO EQT # 
      CMA,INA 
      ADA STREM 
      STA STREM 
      CLB 
      DIV K15 
      INA 
      STA STREM 
      JSB CNUMD     CONVERT TO DECIMAL
      DEF *+3 
      DEF STREM 
      DEF MSC.
      LDA SEQ#      LOAD I/O STATUS 
      AND =B377     MASK STATUS ALONE 
      STA SEQ#
      JSB CNUMO     CONVERT I/O STATUS TO OCTAL 
      DEF *+3 
      DEF SEQ#
      DEF .STAT 
      JSB EXEC
      DEF *+5 
      DEF K2
      DEF K1
      DEF MSC 
      DEF MSCL
      JSB EXEC
      DEF *+5 
      DEF K2
      DEF K1
      DEF .TIME 
      DEF TIMEL 
      JMP QCLM2     BACK TO CLASS GET 
* 
*     HERE FOR "MESSAGE LEVEL NOT CONVERTED" ERROR
* 
MSGD  EQU * 
      JSB MSGX
       DEF MSD
* 
MSGX  NOP 
      JSB CVTIM     CONVERT TIME-OF-DAY TO ASCII
      JSB CNUMD     CONVERT ORIGINATION NODE #
      DEF *+3 
      DEF SRC#
      DEF .ORGN 
      JSB CNUMD     CONVERT DESTINATION NODE #
      DEF *+3 
      DEF DESTN 
      DEF .DEST 
      LDA STREM     GET STREAM TYPE 
      RAL,ELA       REPLY BIT TO (E)
      DLD REQST     LOAD "RQST" 
      SEZ,RSS       REPLY?
      JMP ..1       NO, REQUEST 
      DLD REPLY     LOAD "RPLY" 
..1   EQU * 
      DST MSG4      STORE IN MESSAGE BUFFER 
      LDA STREM     GET STREAM WORD AGAIN 
      LDB BLANK 
      SSA           3000 MASTER?
      LDB "3K"      YES.
      STB .3K 
      LDA STREM     CONVERT STREAM TYPE 
      AND =B77
      STA STREM 
      JSB KCVT      CONVERT TO ASCII
      DEF *+2 
      DEF STREM 
      STA .STRM 
      LDA MSGX,I    FROM ADDR 
      LDB MS2A      TO ADDR 
      MVW K16       MOVE MSG TO OUTPUT BUFFER 
* 
      JSB EXEC      OUTPUT ERROR MESSAGE
      DEF *+5 
      DEF K2
      DEF K1
      DEF MSG2
      DEF M2LEN 
      JSB EXEC      PRINT MORE ABOUT IT 
      DEF *+5 
      DEF K2
      DEF K1
      DEF MSG4
      DEF MSG4L 
      JMP QCLM2     GO BACK TO CLASS "GET"
* 
      SKP 
* 
*     SUBROUTINE TO OBTAIN TIME-OF-DAY AND CONVERT IT TO
*     ASCII.  RESULTS RETURNED IN BUFFER ".TIME"
* 
CVTIM NOP 
      JSB TMVAL     CONVERT TIME-OF-DAY TO HOURS,MINUTES, SECONDS 
      DEF *+3 
      DEF TOD 
      DEF TMAR
      JSB KCVT      CONVERT HOUR NUMBER TO ASCII
      DEF *+2 
      DEF TMAR+3
      STA .HR 
      JSB KCVT      CONVERT MINUTES TO ASCII
      DEF *+2 
      DEF TMAR+2
      STA .MIN
      JSB KCVT      CONVERT SECONDS 
      DEF *+2 
      DEF TMAR+1
      STA .SEC
      JSB EXEC      GET ACTUAL DAY NUMBER 
      DEF *+3 
      DEF K11 
      DEF TMAR
      JSB CNUMD     CONVERT DAY NUMBER
      DEF *+3 
      DEF TMAR+4
      DEF .DAY
      JMP CVTIM,I   RETURN
      SKP 
* 
*  DATA AREA
* 
*     FORMAT OF BUFFER PASSED TO QCLM:
*     --------------------------------
* 
*     ****************************************
*  1  * STREAM WORD                          *  NOTE: ON 'READ' ERRORS, WORD
*     *--------------------------------------*  1 IS LINE EQT ADDRESS, WORD 
*  2  * SEQUENCE NUMBER                      *  2 CONTAINS I O STATUS.
*     *--------------------------------------*
*  3  * SOURCE (ORIGINATING) NODE NUMBER     *
*     *--------------------------------------*
*  4  * DESTINATION NODE NUMBER              *
*     *--------------------------------------*
*  5  * P-REGISTER WHEN ERROR DETECTED       *
*     *--------------------------------------*  NOTE: CERTAIN COMBINATIONS
*  6  * A-REGISTER WHEN ERROR DETECTED       *  OF A- AND B-REGISTER VALUES 
*     *--------------------------------------*  ARE USED TO FLAG SUCH CONDI-
*  7  * B-REGISTER WHEN ERROR DETECTED       *  TIONS AS "COMMUNICATIONS
*     *--------------------------------------*  READ ERROR", "TCB NOT FOUND,
*  8  * TIME OF DAY WHEN ERROR DETECTED      *  ETC.
*  9  *    (2 WORDS)                         *
*     ****************************************
* 
*   FIRST OPTIONAL PARAMETER = ID SEGMENT ADDRESS OF SENDER 
*   (USUALLY 'GRPM'). 
* 
*      **************************************** 
K1    DEC 1 
K2    DEC 2 
K5    DEC 5 
K9    DEC 9 
K11   DEC 11
K12   DEC 12
K14   DEC 14
K15   DEC 15
K16   DEC 16
K21   DEC 21
N3    DEC -3
N4    DEC -4
N5    DEC -5
N6    DEC -6
@MSC  DEF MSC 
@ORGN DBL ORIGN 
@PREG DEF PREG
XEQT  NOP 
FLDAD DEF CVFLD 
CNTR1 NOP 
QCLS  NOP 
MS2A  DEF MSFL2 
* 
IBUF  BSS 9 
* 
STREM EQU IBUF
SEQ#  EQU IBUF+1
SRC#  EQU IBUF+2
DESTN EQU IBUF+3
PREG  EQU IBUF+4
AREG  EQU IBUF+5
BREG  EQU IBUF+6
TOD   EQU IBUF+7
MSG   OCT 6412
      ASC 08, DS ERROR: PROG= 
ORIGN ASC 3,
      ASC 2,STRM
.STR. ASC 3,
      ASC 3, SEQ#=
.SEQ. ASC 3,
      OCT 6412      CARRIAGE-RETURN/LINE-FEED 
      ASC 2, P= 
CVFLD ASC 3,
      ASC 2, A= 
      ASC 3,
      ASC 2, B= 
      ASC 3,
MSGL  ABS *-MSG 
* 
MSA   EQU * 
REGA  ASC 2,        STORAGE FOR "DSXX" ERROR CODE 
      ASC 16, REPLY FLUSHED 
MSB   ASC 16, TCB NOT FOUND, POSSIBLE TIMEOUT 
MSC   ASC 13, COMM. READ ERROR, EQT # 
MSC.  ASC 3,
      ASC 6,,I/O STATUS=
.STAT ASC 3,
MSCL  ABS *-MSC 
MSD   ASC 16, MESSAGE LEVEL NOT CONVERTED 
* 
MSG2  EQU * 
      ASC 05, DS ERROR: 
MSFL2 ASC 16, 
M2LEN ABS *-MSG2
REQST ASC 2,RQST
REPLY ASC 2,RPLY
MSG4  ASC 5,RPLY STRM 
.STRM ASC 1,        STREAM TYPE CONVERTED TO ASCII
BLANK ASC 1,
.3K   NOP           "3K" IF RQST IS FROM 3000 
      ASC 5, ORG NODE=
.ORGN ASC 3,        ORIGINATION NODE #, CONVERTED TO ASCII
      ASC 5, DEST NODE= 
.DEST ASC 3,        DESTINATION NODE #, CONVERTED TO ASCII
      OCT 6412      CR/LF 
.TIME ASC 5, TIME: DAY
.DAY  ASC 3,        DAY NUMBER, CONVERTED TO ASCII
      ASC 1,
.HR   NOP           HOUR, CONVERTED TO ASCII
      ASC 1,: 
.MIN  ASC 1,        MINUTE, CONVERTED TO ASCII
      ASC 1,: 
.SEC  ASC 1,        SECOND, CONVERTED TO ASCII
MSG4L ABS *-MSG4
TIMEL ABS *-.TIME-1 
"3K"  ASC 1,3K
TMAR  BSS 5 
* 
SIZE  BSS 0 
* 
EQTA  EQU 1650B     ADDRESS OF 1ST EQUIPMENT TABLE ENTRY
      END QCLM
                            