*DECK DB$BABT 
      PROC DB$BABT (ABRTCODE,ABRTPARM); 
      BEGIN 
 #
* *   DB$BABT - ABORT DBREC RUN                  PAGE  1
* *   P. A. MURRAY                               DATE  06/23/81 
* 
* DC  PURPOSE 
* 
*     TO ABORT THE DBREC RUN AFTER ISSUING MESSAGES TO OUTPUT AND 
*     DAYFILE (SIMILAR TO DB$MABT FOR DBMSTRD). 
* 
* DC  ENTRY CONDITIONS
* 
* D   PARAMETERS
# 
      ITEM ABRTCODE I;             # ABORT CODE = DFRNGABT IF CALLED BY#
                                   # DB$STD, 0 FOR ALL OTHER ROUTINES  #
      ITEM ABRTPARM C(10);         # PARAMETER TO BE DISPLAYED WITH    #
                                   # SOME OF THE MESSAGES              #
# 
* D   ASSUMPTIONS 
* 
*     A FATAL ERROR HAS OCCURRED DURING SYNTAX CRACKING FROM WHICH DBREC
*     CANNOT RECOVER. 
* 
* DC  EXIT CONDITIONS 
* 
*     A MESSAGE HAS BEEN ISSUED TO THE DAYFILE AND OUTPUT FILE.  THE
*     INPUT AND OUTPUT FILES ARE COSED, AND THE DBREC RUN IS ABORTED. 
* 
* DC  CALLING ROUTINES
* 
*     DB$BOOM    OUT OF MEMORY -- CMM OVERFLOW
*     DB$STD     SYNTAX TABLE DRIVER
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$ABRT;           # ISSUE ABORT FUNCTION              #
      XREF PROC DB$EPRT;           # PRINT A STRING ON OUTPUT FILE     #
      XREF PROC DB$MSG;            # ISSUE MESSAGE TO THE DAYFILE      #
      XREF PROC DB$UCLF;           # CLOSE INPUT AND OUTPUT FILES      #
      XREF PROC DB$UOPF;           # OPEN INPUT AND OUTPUT FILES       #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     OPEN THE OUTPUT FILE (IN CASE IT HASN'T BEEN OPENED YET.
* 
*     IF ABRTCODE EQUALS DFRNGABT (INDICATING THAT THIS ROUTINE WAS 
*     CALLED FROM DB$STD), ISSUE THE INTERNAL ERROR MESSAGE AND THE 
*     APPROPRIATE ERROR MESSAGE TO THE DAYFILE AND OUTPUT FILE. 
* 
*     ISSUE THE ABORT MESSAGE TO THE DAYFILE AND OUTPUT FILE.  CLOSE THE
*     INPUT AND OUTPUT FILES.  ABORT THE DBREC RUN. 
* 
 #
CONTROL EJECT;
  
  
#     LOCAL DEFS                                                       #
  
      DEF DFABTILN  #29#;          # LENGTH OF INTERR MESSAGE          #
      DEF DFABTMLN  #31#;          # LENGTH OF ABTMSG                  #
      DEF DFABT8LN  #40#;          # LENGTH OF AB8MESS                 #
      DEF DFRNGABT  #8#;           # ABORT CODE - STD TABLE ERR        #
  
#     LOCAL VARIABLES                                                  #
  
      ARRAY ABTMSG S(4);
        BEGIN 
        ITEM ABTMSGCC C(00,00,01) = [" "];
        ITEM ABTMSGF  C(00,06,30) = ["       **** DBREC ABORT ****  "]; 
        ITEM ABTMSGT  U(03,06,54) = [0];
        END 
  
      ARRAY AB8MESS S(5);          # MESSAGE 8 (ABORT CODE = 8)        #
        BEGIN 
        ITEM AB8MSGF C(00,00,30) = [" VARIABLE RANGE ERR/TBL ERR - "];
        ITEM AB8MSGV C(03,00,10); 
        ITEM AB8MSGT U(04,00,60) = [0]; 
        END 
  
      ARRAY INTERR S(3);
        BEGIN 
        ITEM INTERRF C(00,00,30) = ["         DBREC INTERNAL ERROR "];
        ITEM INTERRT U(03,00,60) = [0]; 
        END 
      CONTROL EJECT;
  
# S T A R T   O F   D B $ B A B T   E X E C U T A B L E   C O D E      #
  
  
      DB$UOPF;                     # BE SURE OUTPUT IS OPEN            #
  
      IF ABRTCODE EQ DFRNGABT      # IF ABORT CODE IS STD TABLE ERR... #
      THEN
        BEGIN 
        DB$MSG(INTERR);            # ISSUE INTERNAL ERROR MESSAGE      #
        DB$EPRT(INTERR,DFABTILN); 
        AB8MSGV[0] = ABRTPARM;     # INSERT PARAMETER INTO MESSAGE     #
        DB$MSG(AB8MESS);
        DB$EPRT(AB8MESS,DFABT8LN);
        END 
  
      DB$MSG(ABTMSG);              # ISSUE ABORT MESSAGE TO DAYFILE    #
      ABTMSGCC[0] = "-";           # TRIPLE SPACE MESSAGE FOR OUTPUT   #
      DB$EPRT(ABTMSG,DFABTMLN); 
      DB$UCLF;                     # CLOSE INPUT AND OUTPUT FILES      #
  
      DB$ABRT;                     # ABORT DBREC                       #
  
      END 
      TERM; 
