*DECK DB$BURP 
USETEXT BRGENTX 
      PROC DB$BURP(URPNUM); 
      BEGIN 
 #
* *   DB$BURP - USER REPORT GENERATOR            PAGE  1
* *   E. P. JOHNSON                              DATE  05/23/81 
* * 
* 
* DC  PURPOSE 
* 
*     TO CONTROL THE FORMATTING OF THE USER REPORT MESSAGE TEXT AND TO
*     WRITE THAT TEXT TO THE OUTPUT FILE. 
* 
* DC  ENTRY CONDITIONS
* 
* D   PARAMETERS
# 
      ITEM URPNUM I;                   # USER REPORT NUMBER.           #
# 
* D   ASSUMPTIONS 
* 
*     THE FORMAT OF THE USER REPORT MESSAGE TABLE, DB$BUTX, CORRESPONDS 
*     TO THE FORMAT OF THE MSGTABLE BASED ARRAY.
* 
* DC  EXIT CONDITIONS 
* 
*     NORMAL - THE USER REPORT MESSAGE TEXT HAS BEEN FORMATTED AND
*              WRITTEN TO THE DBREC OUTPUT FILE.
* 
*     ABNORMAL - IF THE USER REPORT NUMBER IS NOT IN THE USER REPORT
*                TABLE, THEN DBREC IS ABORTED BECAUSE THIS IS AN
*                INTERNAL ERROR.
* 
* DC  CALLING ROUTINES
* 
*     DB$BALJ                ALLOCATE THE JOURNAL LOG FILE(S).
*     DB$BALL                ALLOCATE DIRECTIVE CONTROLLER. 
*     DB$BALQ                ALLOCATE THE QUICK RECOVERY FILE.
*     DB$BALR                ALLOCATE THE RESTART IDENTIFIER FILE.
*     DB$BALT                ALLOCATE THE TRANSACTION RECOVERY FILE(S). 
*     DB$BDLG                DUMP THE JOURNAL LOG FILE TO TAPE. 
*     DB$BDPF                DUMP DIRECTIVE CONTROLLER. 
*     DB$BUNS                USE NEW SCHEMA.
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$BFTX;               # FORMAT THE MESSAGE TEXT.      #
      XREF PROC DB$BUNT;               # DBREC INTERNAL ERROR PROCESSOR#
      XREF PROC DB$UPRT;               # WRITE A STRING TO THE OUTPUT  #
                                       # FILE.                         #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     - SET THE POINTER OF THE MESSAGE TABLE BASED ARRAY TO THE 
*       LOCATION OF THE USER REPORT TABLE.
* 
*     - SEARCH THE USER REPORT TABLE FOR THE DESIGNATED MESSAGE BY
*       COMPARING THE GIVEN USER REPORT NUMBER WITH THE NUMBERS IN THE
*       TABLE.
* 
*     - IF THE USER REPORT NUMBER IS NOT IN THE TABLE, THEN ABORT 
*       DBREC BECAUSE THIS IS AN INTERNAL ERROR.
* 
*     - FORMAT THE MESSAGE TEXT.
* 
*     - WRITE THE MESSAGE TEXT TO THE DBREC OUTPUT FILE.
* 
*     - RETURN TO THE CALLER. 
* 
 #
  
# EXTERNALLY REFERENCED ARRAYS.                                        #
  
      XREF ARRAY DB$BUTX;;             # USER MESSAGE TEXT ARRAY.      #
  
# LOCAL VARIABLES.                                                     #
  
      ITEM FOUND B;                    # MESSAGE NUMBER FOUND FLAG.    #
      ITEM I I;                        # LOOP VARIABLE.                #
      ITEM TOINDEX I;                  # CHARACTER POSITION IN THE     #
                                       # MESSAGE BUFFER.               #
      ARRAY MESSAGE [0:0] S(DFMSGBUFLENW);
                                       # MESSAGE BUFFER.               #
        BEGIN 
        ITEM MESBUF C(00,00,DFMSGBUFLENC);
        END 
*CALL BMGTBDCLS 
  
  
# S T A R T   O F   D B $ B U R P   E X E C U T A B L E   C O D E      #
  
  
# SET THE POINTER OF THE MESSAGE TABLE BASED ARRAY TO THE LOCATION     #
# OF THE USER REPORT TABLE.                                            #
  
      P<MSGTABLE> = LOC(DB$BUTX); 
  
# SEARCH THE USER REPORT TABLE FOR THE DESIGNATED MESSAGE BY COMPARING #
# THE GIVEN USER REPORT NUMBER WITH THE NUMBERS IN THE TABLE.          #
  
      FOUND = FALSE;                   # INITIALIZE FOUND TO FALSE.    #
  
      FOR I=I 
        WHILE MSGNUM[0] NQ 0
         AND NOT FOUND
      DO
        BEGIN 
  
# IF THE USER REPORT NUMBER EQUALS THE MESSAGE NUMBER, THEN SET FOUND  #
# TO TRUE. ELSE, SET THE POINTER OF THE MESSAGE TABLE BASED ARRAY TO   #
# THE NEXT TABLE ENTRY.                                                #
  
        IF URPNUM EQ MSGNUM[0]
        THEN
          BEGIN 
          FOUND = TRUE; 
          END 
        ELSE
          BEGIN 
          P<MSGTABLE> = P<MSGTABLE> + MSGELENW[0];
          END 
        END 
  
# IF THE USER REPORT NUMBER IS NOT IN THE TABLE, THEN ABORT DBREC      #
# BECAUSE THIS IS AN INTERNAL ERROR.                                   #
  
      IF NOT FOUND
      THEN
        BEGIN 
        DB$BUNT(" DB$BURP-1");
  
        END 
  
# FORMAT THE MESSAGE TEXT.                                             #
  
      TOINDEX = 0;                     # SET TOINDEX TO THE STARTING   #
                                       # CHARACTER POSITION OF THE     #
                                       # MESSAGE TEXT IN THE MESSAGE   #
                                       # BUFFER.                       #
      MESBUF[0] = " ";
  
      DB$BFTX(P<MSGTABLE>,MESSAGE,TOINDEX); 
  
# WRITE THE MESSAGE TO THE DBREC OUTPUT FILE. THE LENGTH OF THE MESSAGE#
# IS RETURNED IN TOINDEX BY THE TEXT FORMATTER, DB$BFTX.               #
  
      DB$UPRT(MESBUF[0],TOINDEX); 
  
# RETURN TO THE CALLER.                                                #
  
      RETURN; 
  
      END 
      TERM
