ELM 
          IDENT  ELM,ELM
          PERIPH
          BASE   MIXED
          SST 
*COMMENT  ELM - ERROR LOG MESSAGE PROCESSOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  ELM - ERROR LOG MESSAGE PROCESSOR. 
          SPACE  4
***       ELM - ERROR LOG MESSAGE PROCESSOR.
*         S. L. BETH.        77/03/24.
          SPACE  4
***       ELM IS CALLED BY USER PROGRAMS TO LOG MESSAGES
*         IN THE BINARY MAINTENANCE LOG.
          SPACE  4
***       CALL. 
* 
* 
*T RA+1   18/  *ELM*,6/  R,18/  0,18/  ADDR 
* 
*         ECS ERROR INFORMATION HAS THE FOLLOWING FORMAT. 
* 
*T ADDR   VFD    24/  0,12/  L, 12/  DC,11/  STATUS,1/  C 
*T        VFD    36/ 0,6/ RW,6/ 0,12/ WC
*T        VFD    6/, 6/ CD, 6/ RT, 18/ CMA, 24/ EMA 
*T        VFD    60/  BAD DATA
*T        VFD    60/  GOOD DATA 
* 
*         L      LENGTH OF ERROR BLOCK. 
* 
*         DC     DEVICE CODE *EC* = ECS.
* 
*         STATUS
*                1 = DAYFILE MESSAGE LIMIT. 
* 
*         C      COMPLETION BIT.
* 
*         RW     READ / WRITE FLAG. 
*                1 = READ.
*                2 = WRITE. 
* 
*         WC     WORD COUNT OF BLOCK TRANSFER.
* 
*         CD     RECOVERY CONDITIONS. 
*                0 = BLOCK REREAD RECOVERED.
*                1 = DATA NOT RECOVERED.
* 
*         RT     RETRY COUNT. 
* 
*         CMA    CM ADDRESS OF TRANSFER.
* 
*         EMA    EXTENDED MEMORY ADDRESS OF TRANSFER. 
          SPACE  4
***       OPERATOR MESSAGES.
* 
* 
*         * ELM - ARGUMENT ERROR.* PROCESSOR WAS CALLED WITH AN 
*                ILLEGAL DEVICE CODE OR ERROR BLOCK ADDRESS.
* 
*         * ELM - EXTENDED MEMORY NOT ASSIGNED.* A CALL WAS MADE TO 
*                REPORT AN EXTENDED MEMORY ERROR AND THE CONTROL POINT
*                DID NOT HAVE EXTENDED MEMORY ASSIGNED. 
* 
*         * ELM - DAYFILE MESSAGE LIMIT.* A CALL WAS MADE TO REPORT 
*                AN ERROR AND THE USERS DAYFILE MESSAGE LIMIT HAD BEEN
*                REACHED. 
          SPACE  4
*CALL     COMPMAC 
*CALL     COMSCPS 
*CALL     COMSDFS 
*CALL     COMSMSP 
*CALL     COMSPIM 
          SPACE  4,10 
**        EQUATES FOR ERROR BUFFER. 
  
  
 BLKL     EQU    2           BLOCK LENGTH 
 DVCD     EQU    3           DEVICE CODE
 COMP     EQU    4           COMPLETION BIT 
 RWFG     EQU    1*5+3       READ/WRITE FLAG
 WDCT     EQU    1*5+3       WORD COUNT 
 COND     EQU    2*5         RECOVERY CONDITIONS
 RTCT     EQU    2*5+1       RETRY COUNT
 CMAD     EQU    2*5+1       RELATIVE CM ADDRESS
 EMAD     EQU    2*5+3       RELATIVE EM ADDRESS
 BDDA     EQU    3*5         BAD DATA 
 GDDA     EQU    4*5         GOOD DATA
 BUFL     EQU    5*5         BUFFER LENGTH
          SPACE  4
*         EQUATES FOR STATUS REPLIES. 
  
  
 LDFM     EQU    1           DAYFILE LIMIT REACHED
          SPACE  4
**        DIRECT LOCATION ASSIGNMENTS.
  
  
 CN       EQU    27          RECOVERED/UNRECOVERED FLAG 
 CW       EQU    30 - 34     CONTROL WORDS
 ST       EQU    36          STATUS TO RETURN 
 ELM      TITLE  MAIN PROGRAM.
**        ELM - MAIN PROGRAM. 
  
  
          ORG    PPFW 
  
 ELM      RJM    PRS         GET ERROR PROCESSOR ADDRESS
          ZJN    ELM1        IF DAYFILE MESSAGE LIMIT 
          STM    ELMA 
          RJM    *           CALL ERROR PROCESSOR 
 ELMA     EQU    *-1
          LDN    1           DECREMENT DAYFILE MESSAGE LIMIT
          STD    CM+1 
          STD    CM+2 
          LDD    MA 
          CWM    ELMB,ON
          MONITOR UADM       UPDATE DAYFILE LIMIT 
 ELM1     LDD    ST          SET STATUS AND COMPLETION BIT
          SHN    1
          ADN    1
          RAM    BUF+COMP 
          LDD    IR+3 
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          CWM    BUF,ON 
          MONITOR DPPM       DROP PPU 
          LJM    PPR         RETURN TO PP RESIDENT
  
  
*         BUFFER FOR *UADM* FUNCTION. 
  
  
 ELMB     CON    CDCS        DECREMENT FIELD
          CON    ACLW 
          CON    36D*100+12D
          CON    0
          CON    0
 ABT      SPACE  4,10 
**        ABT - ABORT PROGRAM.
* 
*         ENTRY  (A) = ERROR MESSAGE ADDRESS. 
  
  
 ABT      RJM    DFM
          MONITOR ABTM
          LJM    PPR         RETURN TO PP RESIDENT
          TITLE  ECS - ERROR PROCESSOR. 
**        ECS - PROCESS ECS ERROR MESSAGES. 
* 
*         ENTRY  (BUF) = ECS ERROR BUFFER.
* 
*         EXIT   TO *ABT* IF ECS NOT ASSIGNED.
  
  
 ECS      SUBR               ENTRY/EXIT 
          LDD    CP          READ ECS CONTROL WORD
          ADN    ECSW 
          CRD    CW 
          LDD    CW+4        CHECK FOR ECS ASSIGNED 
          NJN    ECS1        IF USER ECS ASSIGNED 
          LDC    =C* ELM - EXTENDED MEMORY NOT ASSIGNED.* 
          LJM    ABT         ABORT JOB
  
 ECS1     LDM    BUF+RWFG    SET READ/WRITE FLAG IN MESSAGE 
          SHN    -6 
          LPN    2
          STM    MSGA+6 
          LDN    PARE        SET ERROR CODE 
          STM    MSGA+12
          LDC    /COMSDFS/HS0040+/COMSDFS/DELM*400
          STM    MSGA+1 
          LDM    BUF+RTCT    ADD RETRY COUNT TO MESSAGE 
          SCN    77 
          RAM    MSGA+6 
          LDM    BUF+COND    SET RECOVERED/UNRECOVERED STATUS 
          LPN    1
          RAM    MSGA+6 
          LDK    MMFL        ADD MACHINE ID TO MESSAGE
          CRD    CM 
          LDD    CM 
          STM    MSGA+10
  
*         THE WORD COUNT SUPPLIED IN THE PARAMETER BLOCK IS THE WORD
*         COUNT OF THE ENTIRE BLOCK SPECIFIED BY THE USER.  THE 
*         EXTENDED MEMORY ADDRESS, HOWEVER, APPLIES TO A PARTICULAR 
*         ADDRESS IN ERROR.  THE WORD COUNT REPORTED IN THE BML 
*         MESSAGE IS THEREFORE ALWAYS ONE, TO INDICATE THE EXTENDED 
*         MEMORY ADDRESS IS AN ACTUAL ERROR ADDRESS INSTEAD OF THE
*         ADDRESS OF A BLOCK CONTAINING AN ERROR. 
  
          LDN    1           ADD WORD COUNT TO MESSAGE
          STM    MSGA+21
  
*         DETERMINE THE MESSAGE ID WHICH CORRESPONDS TO THIS DEVICE 
*         AND ADD IT TO THE BML MESSAGE HEADER. 
  
          LDK    UEML        ADD EST ORDINAL TO MESSAGE 
          CRD    CM 
          LDD    CM+2 
          LPC    777
          STD    T5 
          STM    MSGA+5 
          ZJN    ECS3        IF NO EQUIPMENT
          SFA    EST         GET EST ENTRY FOR DEVICE 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4        GET WORD *DILL* FROM THE MST 
          SHN    3
          ADK    DILL 
          CRD    CM 
          LDN    ECSBL
          STD    T1 
 ECS2     LCN    2           SCAN TABLE FOR A MATCH 
          RAD    T1 
          ZJN    ECS3        IF DEVICE NOT FOUND IN TABLE 
          LDM    ECSB-2,T1
          LMD    CM+3 
          LPC    707
          NJN    ECS2        IF A MATCH HAS NOT YET BEEN FOUND
          LDM    ECSB-1,T1
 ECS3     STM    MSGA+0      ADD MESSAGE ID TO MESSAGE
  
*         CONVERT EM ADDRESS AND ADD IT TO THE BML MESSAGE. 
  
          LDD    CW+2        ADJUST FOR RAE 
          SHN    14 
          ADD    CW+3 
 ECSA     SHN    0
*         SHN    17+UESC
          STD    T0 
          SHN    -6 
          SCN    77 
          RAM    BUF+EMAD+1 
          STM    MSGA+23
          SHN    -14
          ADD    T0 
          RAM    BUF+EMAD 
          STM    MSGA+22
  
*         CONVERT CM ADDRESS AND ADD IT TO THE BML MESSAGE. 
  
          LDD    RA 
          SHN    6
          RAM    BUF+CMAD+1 
          STM    MSGA+16
          SHN    -14
          RAM    BUF+CMAD 
          LPN    77 
          STM    MSGA+15
  
*         ADD BAD DATA AND GOOD DATA TO MESSAGE.  BAD DATA, (DATA 
*         RECEIVED OR SENT ON THE FIRST TRY) IS ALWAYS PROVIDED IN THE
*         PARAMETER BLOCK.  GOOD DATA (DATA RECEIVED ON THE SECOND
*         ATTEMPT) IS ONLY PROVIDED IN THE CASE OF A RECOVERED READ 
*         EXTENDED MEMORY ERROR IN WHICH THE DATA FROM THE SECOND 
*         READ ATTEMPT IS DIFFERENT FROM THE DATA RECEIVED THE FIRST
*         TIME. 
  
          LDN    2
          STD    T1 
          LDD    MA 
          CWM    BUF+BDDA,ON
          CWM    BUF+GDDA,ON
          SBN    2
          CRM    MSGA+24,T1 
          LDM    BUF+COND    CHECK FOR GOOD DATA
          LPN    1
          NJN    ECS4        IF NO GOOD DATA
          LDM    BUF+RWFG 
          SHN   -7
          LPN    1
          NJN    ECS4        IF A WRITE PARITY ERROR
          LDN    3
 ECS4     STM    MSGA+17
          LDN    6*5         SET BML MESSAGE LENGTH 
          STD    CM+1 
          LDC    MSGA+BMLN   ISSUE BML MESSAGE
          RJM    DFM
          AOM    ELMB+4      BUMP MESSAGE INCREMENT 
  
*         IF THE ERROR WAS UNRECOVERED, ISSUE AN ERROR MESSAGE TO THE 
*         ERRLOG AND TO THE SYSTEM AND JOB DAYFILES INDICATING THE TYPE 
*         OF ERROR AND THE DEVICE ON WHICH THE ERROR OCCURRED.
  
          LDM    BUF+COND 
          LPN    1
          STD    CN 
          ZJN    ECS5        IF THE ERROR WAS RECOVERED 
          LDD    T5          SET EQUIPMENT ORDINAL IN MESSAGE 
          LPN    7
          SHN    6
          RAM    ECSG+2 
          LDD    T5 
          SHN    -3 
          RJM    C2D
          STM    ECSG+1 
          LDC    ECSG        ISSUE SYSTEM AND DAYFILE MESSAGES
          RJM    DFM
          LDC    ECSG+ERLN   ISSUE ERRLOG MESSAGE 
          RJM    DFM
  
*         INCREMENT THE RECOVERED OR UNRECOVERED ERROR COUNTER IN THE 
*         MST FOR THE CURRENT DEVICE. 
  
 ECS5     LDD    T5          SET EST ORDINAL
          ZJN    ECS6        IF NO EQUIPMENT DEFINED
          STD    CM+1 
          LDD    CN          SET BYTE NUMBER
          ADN    3
          STD    CM+2 
          LDK    ICTS        SET SUBFUNCTION
          STD    CM+3 
          MONITOR  SMDM      INCREMENT COUNTER
 ECS6     LJM    ECSX        RETURN 
  
  
  
 ECSB     BSS    0           TABLE OF MESSAGE IDENTIFERS
  
          CON    112,/COMSDFS/RM0070    (DP)  ECS I  - DC135 DDP
          CON    110,/COMSDFS/RM0071    (DE)  ECS I  - COUPLER
          CON    212,/COMSDFS/RM0072    (DP)  ECS II - DC135 DDP
          CON    210,/COMSDFS/RM0073    (DE)  ECS II - COUPLER
          CON    111,/COMSDFS/RM0074    (DP)  ECS I  - DC145 DDP
          CON    211,/COMSDFS/RM0075    (DP)  ECS II - DC145 DDP
          CON    320,/COMSDFS/RM0076    (DE)  LCME   - COUPLER
          CON    510,/COMSDFS/RM0207    (DE)  ESM    - COUPLER
          CON    511,/COMSDFS/RM0210    (DP)  ESM    - LOW SPEED PORT 
  
 ECSBL    EQU    *-ECSB+2    MESSAGE ID TABLE LENGTH
  
 ECSG     DATA   C*EQ000 PE MASS STORAGE ERROR.*
          SPACE  4,10 
*         COMMON DECKS. 
  
*CALL     COMPC2D 
  
          USE    LITERALS 
  
  
*         MESSAGE SKELETONS.
  
  
 MSGA     BSSZ   6*5         BML MESSAGE BUFFER 
 PRS      SPACE  4,10 
**        PRS - PRESET PROGRAM. 
* 
*         EXIT   (BUF) = ERROR DATA BUFFER. 
*                (A) = MESSAGE PROCESSOR ADDRESS. 
*                (A) = 0 IF DAYFILE LIMIT REACHED.
*                TO *ABT* IF ARGUMENT ERROR DETECTED. 
* 
*         USES   T1, CM - CM+4, ST. 
  
  
 PRS      SUBR               ENTRY/EXIT 
          LDK    MEFL 
          CRD    CM 
          LDD    CM+2 
          SHN    -11
          ADC    SHNI+17
          STM    ECSA 
          LDN    0           CLEAR STATUS REPLY 
          STD    ST 
          LDD    IR+3        CHECK CALL PARAMETERS
          LPN    77 
          SHN    14 
          ADD    IR+4 
          ADN    BUFL/5 
          SHN    -6 
          SBD    FL 
          MJN    PRS2        IF BUFFER NOT BEYOND FL
 PRS1     LDC    =C* ELM - ARGUMENT ERROR.* 
          LJM    ABT         ABORT JOB
  
 PRS2     LDN    BUFL/5      READ ERROR BUFFER
          STD    T1 
          LDD    IR+3 
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          CRM    BUF,T1 
          LDD    CP          CHECK FOR DAYFILE LIMIT
          ADK    ACLW 
          CRD    CM 
          LDD    CM+1 
          NJN    PRS3        IF DAYFILE LIMIT NOT REACHED 
          LDN    LDFM        SET DAYFILE LIMIT STATUS 
          STD    ST 
          LDN    0
          LJM    PRSX        RETURN 
  
 PRS3     LCN    1           FIND ERROR PROCESSOR 
          STD    T1 
 PRS4     LDN    2
          RAD    T1 
          LDM    PRSA,T1
          ZJN    PRS5        IF END OF TABLE
          LMM    BUF+DVCD 
          NJN    PRS4        IF NO MATCH
          LDM    PRSA+1,T1   SET PROCESSOR ADDRESS
          LJM    PRSX        RETURN 
  
 PRS5     LJM    PRS1        ABORT
  
**        LIST OF ERROR PROCESSORS. 
* 
*         ENTRY = 2 WORDS.
*T,       12/  DEVICE CODE,12/  PROCESSOR 
  
  
 PRSA     VFD    12/2REC,12/ECS 
          CON    0
  
  
 BUF      EQU    *           ERROR DATA BUFFER
          END 
