*COMDECK COMPMSG
          CTEXT  COMPMSG - DEFINES PRODUCT OVERLAY MESSAGE MACRO
  
***       COMPMSG - DEFINES PRODUCT OVERLAY MESSAGE MACRO 
* 
*         D. J. JOHNSON      09/23/82.
  
          COMMENT            COPYRIGHT CONTROL DATA CORPORATION.  1982. 
  
          SPACE  4,10 
***       THIS COMMON DECK DEFINES THE MACRO MMSG.  IT IS USED FOR
*         MALET PRODUCT OVERLAY ERROR MESSAGES WHICH ARE WRITTEN TO THE 
*         COMMUNICATIONS BLOCK PRODUCT OVERLAY MESSAGE BUFFER FOR 
*         REFERENCE BY THE MALET EXECUTIVE.  EACH MESSAGE IS A DISPLAY
*         CODE STRING OF CHARACTERS TERMINATED BY A 12-BIT BYTE OF
*         ZEROS.
* 
*         THE MMSG MACRO HAS THREE REQUIRED PARAMETERS, THE MESSAGE 
*         NAME, ERROR CODE, AND TEXT, PLUS ONE OPTIONAL PARAMETER, AN 
*         ABORT FLAG.  THE NAME REFERENCES AN 18-BIT VALUE WHICH IS 
*         DEFINED TO BE 6 BITS EACH OF THE ABORT FLAG, A UNIQUE MESSAGE 
*         ORDINAL (ASSIGNED BY THE MACRO), AND THE ERROR CODE.  THE 
*         ERROR CODE IS A PREVIOUSLY DEFINED VALUE WHICH COORDINATES
*         ERROR MESSAGES WITH MALET DOCUMENTATION.  THE MESSAGE TEXT
*         IS A 1 TO 30 CHARACTER STRING WHICH MAY BE COPIED TO A
*         DISPLAY OR PRINT FILE AS DETERMINED BY AN ERROR HANDLER.
*         THE ABORT FLAG, WHEN PRESENT, INDICATES TO THE ERROR HANDLER
*         THAT A MODULE IS TO BE ABORTED WHENEVER THE FLAGGED ERROR 
*         IS REFERENCED.
* 
*         EACH MALET PRODUCT OVERLAY DEFINES ITS ERROR MESSAGES BY
*         MAKING ONE MMSG REFERENCE FOR EACH MESSAGE.  THE MESSAGES 
*         MUST BE IN A CONTIGUOUS STRING TERMINATED BY A WORD OF
*         ZEROS.  DURING THE PRODUCT OVERLAY INITIALIZATION PROCESS 
*         THE TABLE OF MESSAGES MUST BE WRITTEN TO THE PRODUCT OVERLAY
*         MESSAGE BUFFER IN THE MALET COMMUNICATIONS BLOCK TO MAKE
*         THEM ACCESSIBLE TO THE MALET EXECUTIVE. 
          EJECT 
**        MMSG - BUILD PRODUCT OVERLAY ERROR MESSAGES 
* 
*         MMSG  MACRO  NAME,ECODE,MSG,FABT
* 
*         NAME = 6/FABT,6/MESSAGE ORDINAL,6/ECODE.
* 
*         ECODE = ERROR CODE TO BE ASSIGNED (6 BITS). 
* 
*         MSG = ERROR MESSAGE (1 - 30 CHARACTERS).
* 
*         FABT = FORCE ABORT (UPPER 6 BITS OF NAME).
* 
*         REFERENCES - BD.MSGML (MAXIMUM MESSAGE LENGTH)
*                      BD.MSGMN (MAXIMUM NUMBER OF MESSAGES)
* 
          PURGMAC MMSG
 MMSG     MACRO  NAME,ECODE,MSG,FABT
          IF     -DEF,MMSGORD,1 
 MMSGORD  SET    0                        INITIALIZE ORDINAL
          IFC    EQ,$FABT$$,2             TEST FOR NO FORCE ABORT 
 NAME     EQU    MMSGORD*100B+ECODE 
          ELSE   1
 NAME     EQU    FABT*10000B+MMSGORD*100B+ECODE 
 MMSGBGN  SET    *                        SAVE CURRENT ADDRESS
          IFC    EQ,$MSG$$,2              TEST NULL MESSAGE 
          DATA   1H                       INSURE DATA ITEM
          ELSE   1
          DATA   H$MSG$                   STORE MESSAGE 
          DATA   0                        SET END OF MESSAGE
          IFGT   *-MMSGBGN,BD.MSGML*5+1,1 TEST MESSAGE TOO LONG 
 P        ERR    MESSAGE TOO LONG 
 MMSGORD  SET    MMSGORD+1                BUMP ORDINAL
          IFGT   MMSGORD,BD.MSGMN,1       TEST TOO MANY MESSAGES
 P        ERR    TOO MANY MESSAGES
 MMSGL    SET    MMSGORD*BD.MSGML         SET CM WORD COUNT 
          ENDM
  
          ENDX
