*DECK DB$WEF
USETEXT RQPARTX 
      PROC DB$WEF(FIT); 
      BEGIN 
 #
* *   DB$WEF - WRITE MESSAGE TO ERROR FILE       PAGE  1
* *   J E ESLER                                  DATE  07/22/77 
* 
* DC  PURPOSE 
* 
*     WRITE A CDCS ERROR DIAGNOSTIC TO THE CRM ERROR FILE.
*     WRITE NON-FIT ERROR MESSAGES TO THE USER DAYFILE. 
* 
* DC  ENTRY CONDITIONS
* 
*     INPUT PARAMETERS
*         ADDRESS OF FIT
*     REQUEST PACKET CONTAINS 
*         ADDRESS OF ERROR MESSAGE
* 
* DC  EXIT CONDITIONS 
* 
*     THE MESSAGE HAS BEEN PROCESSED ACCORDING TO THE FIT EPR FIELD 
*     SETTING.
* 
* DC  CALLING ROUTINES
* 
*     DB$RQST - REQUEST PROCESSOR 
*     DB$RLCK - RELATION READ STATUS CHECKER
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$MSG;      #DAYFILE MESSAGE PROCESSOR#
      XREF PROC ER$SRM;      #CRM ERROR PROCESSOR#
# 
* DC  NON-LOCAL VARIABLES 
* 
*     REQUEST PACKET (RQPHRDCLS)
 #
        CONTROL NOLIST; 
      XREF
        BEGIN 
        END 
      CONTROL LIST; 
      XREF ARRAY DB$RA0;;     #ARRAY AT RA+0# 
# 
*     LOCAL VARIABLES 
# 
      BASED ARRAY ERRBUF S (1);        #ERROR MESSAGE#
        BEGIN 
        ITEM ERRWD C(0,0,10); 
        ITEM ERREOL U(0,48,12); 
        END 
      ITEM J;                          #SCRATCH ITEM# 
      ARRAY FIT;;                      #FIT#
      ITEM K;                          #SCRATCH ITEM# 
      ITEM NCHARS;                     #NUMBER OF CHARACTERS IN MSG#
      ARRAY TXT S(1);                  # CRM ERROR PROCESSOR TEXT INSRT#
        BEGIN 
        ITEM TXTEOL B(0,0,1) = [TRUE]; # LAST ENTRY                    #
        ITEM TXTTYPE U(0,1,3) = [2];   # CHARACTER TYPE INSERTION      #
        ITEM TXTMODE U(0,4,2) = [2];   # CSTRING                       #
        ITEM TXTVAL U(0,12,48);        # UNUSED                        #
        ITEM TXTLOC I(0,42,18);        # LOCATION OF TEXT              #
        ITEM TXTPOS U(0,24,6) = [0];   # UNUSED                        #
        ITEM TXTLEN U(0,30,12);        # LENGTH (CHARACTERS)           #
        END 
      CONTROL EJECT;
 #
* DC  DESCRIPTION 
* 
*     IF THE ERROR MESSAGE IS NOT ASSOCIATED WITH A FIT, PUT IT ON THE
*     DAYFILE. THIS SHOULD NOT OCCUR, SINCE SUCH MESSAGES ARE NORMALLY
*     FATAL, AND DO NOT REACH THIS ROUTINE. 
 #
      P<ERRBUF> = RQPKEBUF[0];
      IF LOC(FIT) EQ 0 THEN 
        BEGIN 
        IF RQPKERR[0] NQ 0 THEN 
          DB$MSG(ERRBUF); 
        RETURN; 
        END 
 #
*     DETERMINE THE LENGTH OF THE MESSAGE.
*     CALL ER$SRM, THE CRM ERROR FILE PROCESSOR.
 #
      IF RQPKERR[0] NQ 0 THEN          # LOG ERROR MESSAGE             #
        BEGIN 
        NCHARS = 120;                  #MAX LINE LENGTH#
        FOR J = 0 STEP 1 UNTIL 11 DO   # FIND END OF MESSAGE           #
          BEGIN 
          IF ERREOL[J] EQ 0 THEN
            BEGIN 
            NCHARS = (J + 1) * 10;
            FOR K = 9 STEP -1 WHILE C<K,1>ERRWD[J] EQ 0 AND K GQ 0 DO 
              NCHARS = NCHARS - 1;
            J = 11;                    # END LOOP - FOUND END OF LINE  #
            END 
          END 
        TXTLEN[0] = NCHARS; 
        TXTLOC[0] = LOC(ERRBUF);
        ER$SRM(LOC(FIT),RQPKERR[0],0,LOC(TXT),1,1,0,DB$RA0);
        END 
      END 
      TERM
