*DECK DB$CERR 
USETEXT UTMPTTX 
USETEXT UTCITTX 
USETEXT MDBCMTX 
      PROC DB$CERR(ERRIDENT,ERRVALUE);
  
 #
  
  *   DB$CERR - ERROR HANDLER FOR FATAL ERRORS   PAGE  1
  *   STEVEN P. LEVIN                            DATE  11/25/75 
  
  DC  PURPOSE 
  
      HANDLE TERMINATING CST BUILDER MODULE CALLING AND ITEM SETTING, 
      FORMING ERROR MESSAGE LINES FOR OUTPUT, SETTING ERROR INDICATION
      ITEMS IN COMMON, AND RETURNING TO THE CALLER OF THE CST BUILDER 
      (GOING THROUGH THE MODULE DB$CBLD) FOR FATAL CST BUILDER ERRORS.
  
  DC  ENTRY CONDITIONS
  
      THE PARAMETER ERRIDENT IS AN EIGHT-CHARACTER ITEM OF THE FORM 
      "NNNNMMMM" WHERE "NNNN" IS A DISPLAY CODE ERROR NUMBER AND
      "MMMM" INDICATES THE MODULE THAT FOUND THE ERROR CONDITION. 
      THE PARAMETER ERRVALUE IS A VALUE RELATING TO THE ERROR FOUND.
      THE FOLLOWING COMMON ITEMS SHOULD HAVE BEEN GIVEN VALID VALUES: 
      CURCMMID - CURRENT CMM OVERFLOW-ACTION STACK ENTRY IDENTIFIER 
      CURNAME  - CURRENT DATA BASE ELEMENT NAME (BLANK IF NONE) 
      CURORDNL - CURRENT DATA BASE ELEMENT ORDINAL (0 IF NONE)
      CURSCRAT - CURRENT SCRATCH NAME (USED AS A TEMPORARY AT TIMES)
      CURTYPE  - CURRENT DATA BASE ELEMENT TYPE (0 IF NONE) 
      ERRCNT   - ERROR COUNT FOR THE MASTER DIRECTORY UTILITY DBMSTRD 
      NAMESCHE - BLANK-FILLED SCHEMA NAME 
      NAMESUBS - BLANK-FILLED SUBSCHEMA NAME
      OUTTIME  - CP TIME IN SECONDS AT CST BUILDER START (FOR OUTPUT) 
      STATMAST - MASTER DIRECTORY FILE STATUS (4 IF CRM ERROR FOUND)
      THE MANAGED MEMORY BLOCK POINTER WORDS IN COMMON SHOULD CONTAIN 
      ZERO FOR NON-EXISTING (NOT ALLOCATED OR ALREADY FREED) MEMORY 
      BLOCKS AND CONTAIN PROPER NON-ZERO BLOCK POINTER VALUES FOR 
      EXISTING (ALLOCATED, BUT NOT YET FREED) MANAGED MEMORY BLOCKS.
  
  DC  EXIT CONDITIONS 
  
      THERE IS NO NORMAL RETURN FROM THE MODULE DB$CERR.  INSTEAD, AT 
      THE END OF DB$CERR, THERE IS AN UNCONDITIONAL JUMP TO THE LABEL 
      DB$CBLE IN THE MODULE DB$CBLD, THE CST BUILDER MAIN MODULE. 
      THIS LABEL IS FOR THE DB$CBLD RETURN STATEMENT TO THE MASTER
      DIRECTORY CREATOR, SO THEREBY AN ERROR RETURN WILL BE EFFECTED. 
      PRIOR TO THIS JUMP TO DB$CBLE, DB$CERR WILL DO THE FOLLOWING: 
      DB$UFRE WILL BE CALLED ONCE FOR EACH MEMORY BLOCK TO BE FREED.
      DB$CCLS WILL BE CALLED TO CLOSE THE SUBSCHEMA AND SCHEMA
      DIRECTORY FILES (ASSUMING THEY ARE OPEN AND CAN BE CLOSED). 
      DB$MDOE WILL BE CALLED TO DELETE AN OVERFLOW-ACTION STACK ENTRY.
      SOME ITEMS IN COMMON WILL BE RESET FOR CST BUILDER TERMINATION
      AND ERROR INDICATION.  (SEE "NON-LOCAL VARIABLES" LISTED BELOW.)
      SOME OF THE CALLS TO MODULES MENTIONED ABOVE AND RESETS OF ITEMS
      IN COMMON ARE DONE TO ENABLE THE CST BUILDER TO BE SERIALLY 
      REUSABLE EVEN AFTER ERRORS (OTHER THAN ERRORS FATAL TO DBMSTRD).
      IN ADDITION TO CALLING THE MODULES MENTIONED ABOVE AND RESETTING
      ITEMS IN COMMON, DB$CERR WILL ALSO FORM ERROR MESSAGE LINES AND 
      WILL CALL DB$EPRT OR DB$UPRT TO HAVE EACH LINE PUT ON OUTPUT. 
  
  DC  CALLING ROUTINES
  
      MANY OF THE CST BUILDER MODULES CAN CALL DB$CERR TO HANDLE SOME 
      ERROR CONDITION THAT THEY CAN DETECT DURING THEIR PROCESSING. 
      THE SPECIFIC MODULES WHICH CAN CALL DB$CERR CAN BE FOUND FROM 
      THE LIST OF ERRORS WHICH APPEARS UNDER "DESCRIPTION" BELOW. 
      THIS CAN BE DONE BY PREFIXING ENTRIES IN THE MOD COLUMN UNDER 
      "DESCRIPTION" BY "DB$" TO OBTAIN COMPLETE PROC OR FUNC NAMES. 
  
  DC  CALLED ROUTINES 
  
      DB$CCLS - CLOSE THE SUBSCHEMA AND SCHEMA DIRECTORY FILES
      DB$CDIS - FUNCTION TO CONVERT A NUMBER INTO DISPLAY CODE
      DB$CFIL - FUNCTION TO BLANK OR BINARY ZERO CHARACTER FILL STRING
      DB$EPRT - UTILITY PROC TO ENSURE PRINTING OF AN (ERROR) MESSAGE 
      DB$MDOE - DELETE A CMM OVERFLOW-ACTION STACK TRIGGER/PROC ENTRY 
      DB$UENL - UTILITY PROC TO ENSURE THERE ARE ENOUGH LINES ON PAGE 
      DB$UFRE - FREE A MANAGED MEMORY BLOCK USED AS WORKING STORAGE 
      DB$UPRT - UTILITY PROC TO PRINT A MESSAGE (LINE) ON OUTPUT FILE 
      SECOND  - FORTRAN LIBRARY SUBPROGRAM FOR CENTRAL PROCESSOR TIME 
  
  DC  NON-LOCAL VARIABLES 
  
      CURCMMID - CURRENT CMM OVERFLOW ACTION STACK ENTRY IDENTIFIER 
      CURSCRAT - CURRENT SCRATCH NAME (USED AS A TEMPORARY AT TIMES)
      CURTYPE  - CURRENT DATA BASE ELEMENT TYPE (0 IF NONE) 
      ERRCNT   - ERROR COUNT FOR THE MASTER DIRECTORY UTILITY DBMSTRD 
      OVERFERR - MANAGED MEMORY OVERFLOW ERROR SPECIAL PROC ADDRESS 
      OVERFLOW - MANAGED MEMORY OVERFLOW DAMAGING TO BLOCKS FLAG
      PCCAPLNG - LENGTH IN WORDS OF THE NEW CST MAPPING CAPSULE TABLE 
      PCSIZCST - LENGTH IN WORDS OF CST EXCLUDING MAP CAPSULE TABLE 
      PCSTATWD - CST BUILDER ERROR STATUS WORD (NON-ZERO IFF AN ERROR)
      STATMAST - MASTER DIRECTORY FILE STATUS (3 IF A BAD CST BUILT)
  
  DC  DESCRIPTION 
  
      SEARCH FOR ERRIDENT IN ERARRAY, AND SAVE THE VALUE OF CURTYPE.
      CALL DB$UFRE ONCE FOR EACH MANAGED MEMORY BLOCK TO BE FREED.
      CALL DB$CCLS TO CLOSE THE SUBSCHEMA AND SCHEMA DIRECTORY FILES. 
      CALL DB$MDOE TO DELETE A CMM OVERFLOW-ACTION STACK ENTRY. 
      SET COMMON ITEMS RELEVANT TO PROCESSING DONE.  SET LOCAL ITEMS. 
      CALL DB$UENL TO ENSURE THERE ARE ENOUGH LINES LEFT ON THE PAGE. 
      FILL IN AND OUTPUT MESSAGE FATALITY, SUBSCHEMA AND SCHEMA LINES.
      FILL IN AND OUTPUT MESSAGE DATA BASE ELEMENT LINES, AS NEEDED.
      FILL IN AND OUTPUT MESSAGE IDENTIFIER AND DETAIL TEXT LINES.
      FILL IN AND OUTPUT MESSAGE SECONDS LINE AND OUTPUT A BLANK LINE.
      SET ITEMS IN COMMON WHICH INDICATE THE ERROR CONDITION OCCURRED.
      GO TO LABEL DB$CBLE IN PROC DB$CBLD TO EFFECT THE ERROR RETURN. 
  
      THE FOLLOWING LIST INDICATES ALL THE ERROR IDENTIFIERS DB$CERR
      CAN HANDLE, THE CST BUILDER MODULES (PROCEDURES OR FUNCTIONS) IN
      WHICH THE ERRORS ARE DETECTED (WITHOUT THE PREFIX "DB$"), THE 
      ERROR VALUES, THE FATALITIES, THE OUTPUT FORMATS USING THE ERROR
      VALUES, AND VERY TERSE COMMENTS ON THE ERRORS.  PLEASE REFER TO 
      THE COMMENTS WHICH IMMEDIATELY FOLLOW THIS LIST FOR A MORE
      DETAILED EXPLANATION ABOUT THE MEANING OF EACH OF THE COLUMNS.
  
      ERROR-ID MOD  ERROR-VALUE   FT FR COMMENT 
  
      7001COPN COPN FILENAME       1  7 SUBSCHEMA NOT FOUND - LFN E-V 
      7002COPN COPN CURSCRAT CHAR  1  6 SUBSCHEMA HAS SCHEMA NAME E-V 
      7003COPN COPN FILENAME       1  7 SUBSC BAD DDL VERSION, LFN E-V
      7004COPN COPN EXCESS AREAS   1  5 SUBSC AREA COUNT EXCESS IS E-V
      7005COPN COPN EXCESS RECS    1  5 SUBSC REC COUNT EXCESS IS E-V 
      7006COPN COPN EXCESS RELS    1  5 SUBSC REL COUNT EXCESS IS E-V 
      7007COPN COPN FILENAME       2  7 SCHEMA CAN"T BE FOUND, LFN E-V
      7008COPN COPN CURSCRAT CHAR  2  6 SCHEMA HAS THE SCHEMA NAME E-V
      7009COPN COPN FILENAME       2  7 SCHEMA BAD DDL VERSION LFN E-V
      7010COPN COPN EXCESS ITEMS   2  5 SCHEMA MAX ITEM/REC EXCESS E-V
      7011COPN COPN SCNUMDBP       2  5 SCHEMA MISMATCH DBP COUNT E-V 
      7051CNSC CNSC CURSCRAT CHAR  1  6 SCHEMA HAS NO ENTRY NAMED E-V 
      7101CBEG CBEG SCNUMARE       2  5 SCHEMA MISMATCH AREA COUNT E-V
      7102CBEG CBEG CORE NEEDED    1  3 RAISE MAXIMUM FL AT LEAST E-V 
      7151CCHK CCHK HDRNUMREL[0]   2  5 SCHEMA MISMATCH REL COUNT E-V 
      7152CCHK CCHK HDRNUMAR[0]    2  5 SCHEMA MISMATCH AREA COUNT E-V
      7153CCHK CCHK CURSCRAT CHAR  2  6 SEARCH FAIL - SCHEMA AREA E-V 
      7154CCHK CCHK CURSCRAT CHAR  2  6 SCHEMA BAD CHECKSUM - AREA E-V
      7155CCHK CCHK CURSCRAT CHAR  2  6 SEARCH FAIL - SCHEMA RELTN E-V
      7156CCHK CCHK CURSCRAT CHAR  2  6 SCHEMA BAD CHECKSUM - REL E-V 
      7157CCHK CCHK CURSCRAT CHAR  1  6 SEARCH FAIL - SUBSC AREA E-V
      7158CCHK CCHK CURSCRAT CHAR  1  6 SUBSC BAD CHECKSUM - AREA E-V 
      7159CCHK CCHK CURSCRAT CHAR  1  6 SEARCH FAIL - SUBSC RELTN E-V 
      7160CCHK CCHK CURSCRAT CHAR  1  6 SUBSC BAD CHECKSUM - RELTN E-V
      7201UALC UALC LOCPOINT       1  2 ALLOCATE OVERFLOW, POINTER E-V
      7202UAWS UAWS LOCPOINT       1  2 CMM GROW OVERFLOW, POINTER E-V
      7301CERR CERR OLD ERRIDENT   3 10 UNRECOGNIZABLE ERROR IDENT E-V
      7331CECM CECM CORE NEEDED    3  3 OVERFLOW - UP FL AT LEAST E-V 
      7371CEMD CERM ERRSTAT        3  1 MASTER DIRECTORY CRM ERROR E-V
      7372CESB CERM ERRSTAT        1  1 SUBSCHEMA FILE CRM ERROR E-V
      7373CESC CERM ERRSTAT        2  1 SCHEMA DIRECTORY CRM ERROR E-V
      7401COPT COPT CSORTYPE[0]    3  4 ILLEGAL PROC OPTIONS TYPE E-V 
      7402COPT COPT PONUMBER       2  5 NO OPTION - CST PROC ENTRY E-V
      7403COPT COPT POCOLUMN[I]    1  3 CST PROC TABLE LEN CANT BE E-V
      7404COPT COPT UPPER LIMIT    2  3 CST DBP LIST LEN MUST BE < E-V
      7451CORD CORD DB PROC NAME   2  7 SEARCH FAIL - SCHEM DBP IS E-V
      7452CORD CORD DB PROC NAME   1  7 SEARCH FAIL - SUBSC DBP IS E-V
      7501CLOK CLOK CSLKTYPE[0]    3  4 ILLEGAL DB ELEMENT TYPE IS E-V
      7502CLOK CLOK LOCKTYPE       2  4 SCHEMA HAS A BAD LOCK TYPE E-V
      7503CLOK CLOK LOCKTYPE       1  4 SUBSCHEMA BAD LOCK TYPE IS E-V
      7504CLOK CLOK PLNUMBER       2  5 NO OPTION - CST LOCK ENTRY E-V
      7505CLOK CLOK PLNUMBER       1  5 NO OPTION - CST LOCK ENTRY E-V
      7601CEND CEND EXCESS WORDS   1  3 CST NON-CAPSULE EXCESS LEN E-V
      7602CEND CEND EXCESS WORDS   1  3 CST MAP CAPSULE EXCESS LEN E-V
      7603CEND CEND LENTOREC       1  4 TRUNCATION - CST REC POINT E-V
      7604CEND CEND POINTER        1  4 TRUNCATION - RSB REC POINT E-V
      7605CEND CEND LENTOREL       1  4 TRUNCATION - CST REL POINT E-V
      7606CEND CEND POINTER        1  4 TRUNCATION - RSB REL POINT E-V
      7607CEND CEND LENTOOPT       1  4 TRUNCATION - PROC OPTN PNT E-V
      7608CEND CEND LEN TO LOCKS   1  4 TRUNCATION - PRIV LOCK PNT E-V
      7609CEND CEND POINTER        1  4 TRUNCATION - RSB LOCK PNT E-V 
      7610CEND CEND POINTER        1  4 TRUNCATION - RSB SEARCH PT E-V
      7611CEND CEND POINTER        1  4 TRUNCATION - RSB DATA PNT E-V 
      7612CEND CEND POINTER        1  4 TRUNCATION - RSB JOIN PNT E-V 
      7613CEND CEND POINTER        1  4 TRUNCATION - RSB STACK PNT E-V
      7614CEND CEND POINTER        1  3 TRUNCATION - RSB TOTAL LEN E-V
      7615CEND CEND NUMBER AREAS   1  5 TRUNCATION - NUMBER AREAS E-V 
      7616CEND CEND SBNUMREC       1  5 TRUNCATION - NUMBER OF REC E-V
      7617CEND CEND SBNUMREL       1  5 TRUNCATION - NUMBER OF REL E-V
      7618CEND CEND SBMAXREC       1  4 TRUNCATION - SUBSC MAX REC E-V
      7619CEND CEND SCMAXREC       1  4 TRUNCATION - SCHEM MAX REC E-V
      7620CEND CEND LENTOCAP       1  4 TRUNCATION - MAP CAPSL PNT E-V
      7621CEND CEND MCLENTOT       1  3 TRUNCATION - MAP CAPSL LEN E-V
      7622CEND CEND SBMAXCAP       1  3 TRUNCATION - MAX CAPSL LEN E-V
      7623CEND CEND CAPSULE COUNT  1  5 TRUNCATION - NUMBER CAPSLS E-V
      7624CEND CEND LENTOCON       1  4 TRUNCATION - CST CONSTR PT E-V
      7625CEND CEND POINTER        1  4 TRUNCATION - RSB CONSTR PT E-V
      7626CEND CEND CONNBEXA       1  5 TRUNCATION - NUMB EXT AREA E-V
      7627CEND CEND CONSTNUM       1  5 TRUNCATION - NUMBER CONSTR E-V
      7628CEND CEND SCMAXEXT       1  4 TRUNCATION - EXT MAX RECRD E-V
  
      ERROR-ID MOD  ERROR-VALUE   FT FR COMMENT 
  
      7701CARE CARE SBCURRAD       1  4 SUBSC NEXT=CURRENT ADDRESS E-V
      7702CARE CARE SBARTYPE[0]    1  4 SUBSCHEMA BAD AREA TYPE IS E-V
      7703CARE CARE SCAREADATATY   2  4 SCHEMA HAS A BAD AREA TYPE E-V
      7704CARE CARE CURSCRAT CHAR  2  6 SEARCH FAIL - SCHEMA AREA E-V 
      7705CARE CARE NAMELENW       1  3 TRUNCATION - AREA NAME LEN E-V
      7706CARE CARE SBARKEYCAPL    1  3 TRUNCATION - KEY CAPSL LEN E-V
      7707CARE CARE SBARKEYCAPA    1  4 TRUNCATION - KEY CAPSL PNT E-V
      7708CARE CARE WOCURENT       1  4 TRUNCATION - KEY TABLE PNT E-V
      7709CARE CARE WOCURENT       1  4 TRUNCATION - CODE TABLE PT E-V
      7710CARE CARE LITERAL POINT  1  4 TRUNCATION - LITERAL POINT E-V
      7711CARE CARE CODTBLEN       1  3 SUBSCHEMA BAD REC CODE LEN E-V
      7712CARE CARE WOCURENT       1  3 TRUNCATION - WORK BLCK LEN E-V
      7713CARE CARE WOCURENT       1  4 TRUNCATION - DEP TABLE PNT E-V
      7751CCPP CCPP SBARTYPE[0]    1  4 SUBSCHEMA BAD AREA TYPE IS E-V
      7752CCPP CCPP SCAREADATATY   2  4 SCHEMA HAS A BAD AREA TYPE E-V
      7753CCPP CCPP SCCSDATATYP[0] 2  4 SCHEMA BAD CONSTRAINT TYPE E-V
      7754CCPP CCPP CURSCRAT CHAR  2  6 SCHEMA BAD DATA CONSTRAINT E-V
      7801CREC CREC SBCURRAD       1  4 SUBSC NEXT=CURRENT ADDRESS E-V
      7802CREC CREC SBRECTYPE[0]   1  4 SUBSCHEMA BAD RECORD TYPE E-V 
      7803CREC CREC SCRECDATATYP   2  4 SCHEMA HAS BAD RECORD TYPE E-V
      7804CREC CREC SBRECNMELENW   1  3 TRUNCATION - REC NAME SIZE E-V
      7805CREC CREC SBRECNBRITMS   1  5 TRUNCATION - SUBSC ITEMS E-V
      7806CREC CREC SBRECLENGTH    1  4 TRUNCATION - SUBSC REC LEN E-V
      7807CREC CREC SCRNUMITEMS    2  5 TRUNCATION - SCHEMA ITEMS E-V 
      7808CREC CREC SCRECLENGTH    2  4 TRUNCATION - SCHEM REC LEN E-V
      7809CREC CREC SBRECRDCAPL    1  3 TRUNCATION - RED CAPSL LEN E-V
      7810CREC CREC SBRECRDCAPA    1  4 TRUNCATION - RED CAPSL PNT E-V
      7811CREC CREC SBRECWRCAPL    1  3 TRUNCATION - WRT CAPSL LEN E-V
      7812CREC CREC SBRECWRCAPA    1  4 TRUNCATION - WRT CAPSL PNT E-V
      7813CREC CREC CURSCRAT CHAR  1  6 SCHEMA GET ERROR FOR ITEM E-V 
      7814CREC CREC ITPOINTR       1  4 TRUNCATION - ITEM LOCK PNT E-V
      7815CREC CREC WOCURENT       1  3 TRUNCATION - WORK BLCK LEN E-V
      7901CREL CREL SBCURRAD       1  4 SUBSC NEXT=CURRENT ADDRESS E-V
      7902CREL CREL RSTENTRYTYPE   1  4 SUBSCHEMA HAS BAD REL TYPE E-V
      7903CREL CREL RANKMAX        1  5 TRUNCATION - REL MAX RANK E-V 
      7904CREL CREL RSTRELNMELW    1  3 TRUNCATION - REL NAME SIZE E-V
      7905CREL CREL SERCSTEN       1  4 TRUNCATION - SEARCH TAB PT E-V
      7906CREL CREL RQTENTRYTYPE   1  4 BAD REL QUAL TABLE TYPE IS E-V
      7907CREL CREL QUALPNTR       1  4 TRUNCATION - QUAL TABLE PT E-V
      7908CREL CREL RANKQUAL       1  5 TRUNCATION - QUAL MAX RANK E-V
      7909CREL CREL QUALLENG       1  3 TRUNCATION - QUAL TAB SIZE E-V
      7910CREL CREL WOCURENT       1  3 TRUNCATION - WORK BLCK LEN E-V
      7911CREL CREL RQTSTACKTYPE   1  4 BAD QUAL TABLE STACK TYPE E-V 
      7912CREL CREL RQTSTACKLEN    1  3 TRUNCATION - QUAL STCK LEN E-V
      7913CREL CREL RQTATRIBTEWA   1  4 TRUNCATION - ATTRIBUTE PNT E-V
      7914CREL CREL RQTAREARANK    1  5 BAD REL QUAL TAB AREA RANK E-V
      7915CREL CREL RANKCURR       1  5 QUAL OVER MAX RANK IN RANK E-V
      7916CREL CREL STAKENTR       1  4 BAD QUAL STACK ENTRY POINT E-V
      7917CREL CREL QUALLENG       1  3 BAD REL QUAL TABLE LENGTH E-V 
      7918CREL CREL RANKQUAL       1  5 BAD REL QUAL TAB MAX RANK E-V 
  
      THE FOLLOWING COMMENTS EXPLAIN THE MEANING OF THE COLUMNS ABOVE:  
  
      ERROR-ID
  
      THE ERROR-ID COLUMN SHOWS THE POSSIBLE DISPLAY CODE VALUES WHICH
      THE PARAMETER ERRIDENT MAY HAVE ON A CALL TO DB$CERR, WITH ONE
      EXCEPTION.  THAT EXCEPTION IS "7301CERR" WHICH IS SUBSTITUTED BY
      DB$CERR FOR ERRIDENT IF THE VALUE OF ERRIDENT IS UNRECOGNIZABLE.
      THERE IS SOME METHOD TO THE SEEMING MADNESS OF ERROR-ID VALUES. 
      NAMELY, EACH GROUP OF ONE HUNDRED IS FOR A DIFFERENT TYPE OF
      MODULE, AS THE BELOW RANGE OF ERRORS BY MODULE TYPE INDICATES:  
      ERROR RANGE   TYPE OF MODULES IN THE RANGE
      7000-7099     MODULES INTERFACING WITH DIRECTORY ACCESS ROUTINES
      7100-7199     MODULES TO INITIALIZE/VALIDATE BEFORE BUILDING CST
      7200-7299     UTILITY MODULES CONNECTED WITH THE USE OF CMM 
      7300-7399     ERROR HANDLING AND SPECIAL ERROR RETURN MODULES 
      7400-7499     MODULES CONNECTED WITH THE USE OF DATA BASE PROCS 
      7500-7599     MODULES FOR BUILDING THE PRIVACY LOCK TABLE 
      7600-7699     MODULES FOR TERMINATION OF BUILDING A CST 
      7700-7799     MODULES FOR BUILDING AREA OR CONSTRAINT WORK BLOCK
      7800-7899     MODULES FOR BUILDING A CST RECORD WORK BLOCK
      7900-7999     MODULES FOR BUILDING A CST RELATION WORK BLOCK
  
      MOD 
  
      THE LAST FOUR CHARACTERS IN THE ERROR-ID COLUMN INDICATE THE
      LOGICAL MODULE (IN THE ENTRY POINT SENSE) WHICH DETECTED THE
      ERROR.  THE MOD COLUMN INDICATES THE PHYSICAL MODULE (IN THE
      SYMPL PROC OR FUNC SENSE) WHICH DETECTED THE ERROR.  (PREFIX MOD
      COLUMN ENTRIES BY "DB$" TO GET THE FULL PROC OR FUNC NAME.)  IN 
      MOST INSTANCES, LOGICAL AND PHYSICAL MODULE NAMES ARE THE SAME. 
      THE EXCEPTIONS TO THIS ARE SYMPL ENTRY NAMES, AS WITHIN DB$CERM.
  
      ERROR-VALUE 
  
      THE ERROR-VALUE COLUMN SHOWS THE TYPE OF INFORMATION WHICH CAN
      BE PASSED TO DB$CERR IN THE PARAMETER ERRVALUE.  ERRVALUE 
      GENERALLY GIVES FURTHER INFORMATION ABOUT THE ERROR, E.G., A
      RELEVANT LENGTH, LOCATION, POINTER, OR INTERFACE MODULE STATUS. 
      THIS INFORMATION IS USED IN THE ERROR MESSAGE FORMED BY DB$CERR.
      THE EXCEPTION TO THIS IS FOR ERROR "7301CERR" (VALUE OF ERRIDENT
      IS UNRECOGNIZABLE), FOR WHICH ERRIDENT IS USED LIKE ERRVALUE. 
      SEE THE COMMENTS BELOW ABOUT THE FR COLUMN FOR MORE INFORMATION.
      SOME OF THE ABBREVIATIONS IN THE ERROR-VALUE COLUMN ARE BELOW:  
      ABBREVIATION  EXPANSION 
      CHAR          CHARACTER OR CHARACTERS 
      DB            DATA BASE 
      I             ABRBITARY ARRAY SUBSCRIPT INDEX VALUE (AS IN [I]) 
      LEN           LENGTH
      POINT         POINTER 
      PROC          PROCEDURE 
      RECS          RECORDS 
      RELS          RELATIONS 
  
      FT
  
      THE FT COLUMN SHOWS THE FATALITY OF THE ERROR AS EXPANDED BELOW:  
      FT=1 - FATAL TO SUBSCHEMA - CST COULD NOT BE BUILT FOR SUBSCHEMA
      FT=2 - FATAL TO SCHEMA - NO (FURTHER) CST BUILDABLE FOR SCHEMA
      FT=3 - FATAL TO DBMSTRD - NO MORE CAN BE DONE BY THE MD UTILITY 
  
      FR
  
      THE FR COLUMN SHOWS THE FORMAT (USE) OF ERROR-VALUE IN THE ERROR
      MESSAGE OUTPUT.  FR COLUMN ENTRIES ARE OCTAL NUMBERS AS BELOW:  
      FR  FORMAT (USE) OF ERROR-VALUE IN ERROR MESSAGE OUTPUT 
       0  ERROR MESSAGE OUTPUT GENERATED DOES NOT USE ERROR-VALUE 
       1  9-BIT OCTAL CYBER RECORD MANAGER (CRM) ERROR STATUS VALUE 
       2  UP TO AN 18-BIT OCTAL ADDRESS IN CORE 
       3  UP TO AN 18-BIT OCTAL NUMBER OF WORDS 
       4  UP TO AN 18-BIT OCTAL NUMBER
       5  UP TO AN 18-BIT DECIMAL NUMBER
       6  ERROR-VALUE IS THE NUMBER OF CHARACTERS (1 TO 30) OF A NAME 
          IN THE ITEM CURSCRAT IN COMMON - THIS NAME IS TO BE OUTPUT
       7  STRING LEFT-JUSTIFIED IN THE 7 LEFTMOST CHARACTERS (EG, LFN)
      10  8-CHARACTER (48-BIT) STRING (USED ONLY FOR ERROR "7301CERR")
  
      COMMENT 
  
      THE COMMENT COLUMN CONTAINS A TERSE EXPLANATION OF THE MEANING
      OF THE ERROR.  THIS TERSE EXPLANATION IS SIMILAR TO THE TEXT
      RELATING TO THE SPECIFIC ERROR WHICH IS PUT ON THE OUTPUT FILE. 
      THE COMMENT COLUMN ALSO SHOWS HOW THE ENTRY IN THE ERROR-VALUE
      COLUMN RELATES TO THE ERROR TEXT.  IN THE COMMENT COLUMN, "E-V" 
      INDICATES WHERE THE ERROR-VALUE APPEARS IN THE SPECIFIC ERROR 
      MESSAGE TEXT.  THE EXCEPTIONS ARE FOR FORMATS 0 (ERROR-VALUE NOT
      IN TEXT) AND 6 (ERROR-VALUE IS NUMBER OF CURSCRAT CHARACTERS).
      SOME OF THE ABBREVIATIONS USED IN THIS COLUMN ARE AS FOLLOWS: 
      ABBREVIATION  EXPANSION 
      BLCK          BLOCK 
      CANT          CAN"T (CANNOT)
      CAPSL/CAPSLS  CAPSULE OR CAPSULES 
      CMM           COMMON MEMORY MANAGER 
      CONSTR        CONSTRAINT OR CONSTRAINTS 
      CRM           CYBER RECORD MANAGER
      CST           CONDENSED SCHEMA/SUBSCHEMA TABLE (A CDCS/DBU TERM)
      DB            DATA BASE 
      DBP           DATA BASE PROCEDURE 
      DDL           DATA DESCRIPTION LANGUAGE 
      DEP           DEPENDENCY
      E-V           ERROR-VALUE OR ERROR-VALUE CHARACTERS OF CURSCRAT 
      EXT           EXTENDED
      FL            FIELD LENGTH
      IDENT         IDENTIFIER
      LEN           LENGTH
      LFN           LOGICAL FILE NAME 
      MAP           MAPPING 
      MAX           MAXIMUM 
      NUMB          NUMBER
      OPTN          OPTION
      PNT/POINT/PT  POINTER 
      PRIV          PRIVACY 
      PROC          PROCEDURE 
      QUAL          QUALIFICATION 
      REC/RECRD     RECORD OR RECORDS 
      RED           READ
      REL/RELTN     RELATION OR RELATIONS 
      RSB           RUN-UNIT STATUS BLOCK (A CDCS TERM) 
      SCHEM         SCHEMA
      STCK          STACK 
      SUBSC         SUBSCHEMA 
      TAB           TABLE 
      WRT           WRITE 
  
 #
  
  
  
        BEGIN                # DB$CERR #
  
# THE FOLLOWING ARE FORMAL PARAMETERS IN THE ORDER THEY ARE PASSED #
  
        ITEM ERRIDENT C(8);  # EIGHT-CHARACTER ERROR IDENTIFIER # 
        ITEM ERRVALUE U;     # A VALUE RELATING TO THE ERROR FOUND #
  
# FOLLOWING ARE EXTERNALLY REFERENCED PROCS, FUNCS, ARRAYS AND LABELS#
  
        XREF PROC DB$CCLS;   # CLOSE THE SUBSCHEMA AND SCHEMA FILES # 
        XREF FUNC DB$CDEB C(10);  # CONVERT INTEGER TO DECIMAL, BLANK  #
        XREF FUNC DB$CDEC C(10);  # CONVERT INTEGER TO DECIMAL, ZERO   #
        XREF FUNC DB$CFIL C(30);       # BLANK OR ZERO CHARACTER FILL#
        XREF FUNC DB$COCB C(10);  # CONVERT INTEGER TO OCTAL, BLANK FIL#
        XREF PROC DB$EPRT;   # UTILITY PROC TO ENSURE PRINTING A LINE#
        XREF PROC DB$MDOE;   # DELETE CMM OVERFLOW-ACTION STACK ENTRY#
        XREF PROC DB$UENL;   # UTILITY PROC TO ENSURE ENOUGH LINES #
        XREF PROC DB$UFRE;   # FREE A MANAGED MEMORY BLOCK IN CORE #
        XREF PROC DB$UPRT;   # UTILITY PROC TO PRINT A LINE ON OUTPUT#
        XREF PROC SECOND;    # FORTRAN LIBRARY SUBPROGRAM FOR CP TIME#
        XREF ARRAY DB$RA0;;  # COMPASS ENTRY POINT AT ADDRESS RA + 0 #
        XREF LABEL DB$CBLE;  # LABEL IN PROC DB$CBLD FOR ERROR RETURN#
  
        CONTROL NOLIST;      # DCLS: UTCDF UTCIT UTMPT MDBCM UTMPC #
*CALL UTCDFDCLS 
*CALL UTMPCDCLS 
        CONTROL LIST;        # RESUME THE LISTING OF THE SOURCE CODE #
  
# THE FOLLOWING DEF AND ITEMS ARE LOCAL TO DB$CERR #
  
        DEF DFERRLIM #120#;  # LIMIT ON THE NUMBER OF ERROR IDENTS #
  
        ITEM ERINDEX I;      # ERROR INDEX IN ERARRAY FOR ERROR IDENT#
        ITEM FATALITY U;     # ERROR FATALITY FROM ERFATAL[ERINDEX] # 
        ITEM FORMAT U;       # ERROR FORMAT FROM ERFORMAT[ERINDEX] #
        ITEM INDEX I;        # A GENERAL INDEX AND INDUCTION VARIABLE#
        ITEM SAVETYPE I;     # VALUE OF CURTYPE IS SAVED IN SAVETYPE #
        ITEM USEDTIME R;     # CENTRAL PROCESSOR TIME USED IN SECONDS#
  
  
  
  
# THE ARRAY BELOW IS FOR ERROR IDENTS, FATALITIES, FORMATS AND TEXTS.#
# NOTE THE CONNECTION AMONG THE ITEMS ERIDENT, ERFATAL, ERFORMAT, AND#
# ERTEXT IN ERARRAY BELOW.  FOR ALL I FROM 0 TO DFERRLIM, ERIDENT[I],#
# ERFATAL[I], ERFORMAT[I] AND ERTEXT[I] ARE THE IDENTIFIER, FATALITY,#
# FORMAT, AND TEXT FOR THE SAME ERROR.  THERE ARE TWO EXCEPTIONAL # 
# ENTRIES IN ERARRAY.  ONE IS THE ZERO-TH ENTRY, WHICH MUST ALWAYS #
# KEEP ITS ZERO SUBSCRIPT.  THIS ZERO-TH ENTRY IS USED TO CATCH # 
# UNRECOGNIZABLE VALUES OF THE PARAMETER ERRIDENT.  THE OTHER IS THE #
# "NORMAL" POSITION ENTRY FOR ERROR IDENTIFIER "7301CERR", WHOSE #
# POSITION MAY CHANGE.  IT IS USED ONLY FOR A SUBSCRIPT PLACE HOLDER.#
# TO ADD A NEW VALUE OF ERRIDENT TO THOSE RECOGNIZABLE DO AS FOLLOWS:#
# 1. ENTER THE APPROPRIATE LINE UNDER "DESCRIPTION" IN THE IMS. # 
# 2. INCREASE THE NUMERIC VALUE WHICH DFERRLIM IS DEF"ED TO BE. # 
# 3. ENTER THE NEW IDENTIFIER IN THE PRESET LIST FOR ITEM ERIDENT. #
# 4. ENTER THE NEW FATALITY IN THE CORRESPONDING PLACE FOR ERFATAL. # 
# 5. ENTER THE NEW FORMAT IN THE CORRESPONDING PLACE FOR ERFORMAT. #
# 6. ENTER THE NEW ERROR TEXT IN THE CORRESPONDING PLACE FOR ERTEXT. #
# THE MEANING OF THE FATALITY AND FORMAT CODES CAN BE FOUND UNDER # 
# "DESCRIPTION" IN THE IMS WHERE THE FT AND FR COLUMNS ARE EXPLAINED.#
  
        ARRAY ERARRAY[0:DFERRLIM] S(4);          # LOCAL ERROR ARRAY #
  
          BEGIN              # ERARRAY ARRAY #
  
            ITEM ERIDENT C(0,0,8) =    # 8-CHARACTER ERROR IDENTIFIER#
              [              # BEGIN PRESET LIST OF ERROR IDENTIFIERS#
              "7301CERR",    # ERIDENT[0] FOR UNRECOGNIZABLE ERRIDENT#
              "7001COPN","7002COPN","7003COPN","7004COPN","7005COPN", 
              "7006COPN","7007COPN","7008COPN","7009COPN","7010COPN", 
              "7011COPN",    # DB$COPN ERROR IDENTIFIERS #
              "7051CNSC",    # DB$CNSC ERROR IDENTIFIER # 
              "7101CBEG","7102CBEG",   # DB$CBEG ERROR IDENTIFIERS #
              "7151CCHK","7152CCHK","7153CCHK","7154CCHK","7155CCHK", 
              "7156CCHK","7157CCHK","7158CCHK","7159CCHK","7160CCHK", 
              "7201UALC","7202UAWS",   # DB$UAXX ERROR IDENTIFIERS #
              "7301CERR",    # INCLUDED FOR COMPLETENESS BUT NOT USED#
              "7331CECM",    # DB$CECM ERROR IDENTIFIER # 
              "7371CEMD","7372CESB","7373CESC",  # DB$CERM ERROR IDS #
              "7401COPT","7402COPT","7403COPT","7404COPT", # DB$COPT #
              "7451CORD","7452CORD",   # DB$CORD ERROR IDENTIFIERS #
              "7501CLOK","7502CLOK","7503CLOK","7504CLOK","7505CLOK", 
              "7601CEND","7602CEND","7603CEND","7604CEND","7605CEND", 
              "7606CEND","7607CEND","7608CEND","7609CEND","7610CEND", 
              "7611CEND","7612CEND","7613CEND","7614CEND","7615CEND", 
              "7616CEND","7617CEND","7618CEND","7619CEND","7620CEND", 
              "7621CEND","7622CEND","7623CEND","7624CEND","7625CEND", 
              "7626CEND","7627CEND","7628CEND",  # DB$CEND ERROR IDS #
              "7701CARE","7702CARE","7703CARE","7704CARE","7705CARE", 
              "7706CARE","7707CARE","7708CARE","7709CARE","7710CARE", 
              "7711CARE","7712CARE","7713CARE",  # DB$CARE ERROR IDS #
              "7751CCPP","7752CCPP","7753CCPP","7754CCPP", # DB$CCPP #
              "7801CREC","7802CREC","7803CREC","7804CREC","7805CREC", 
              "7806CREC","7807CREC","7808CREC","7809CREC","7810CREC", 
              "7811CREC","7812CREC","7813CREC","7814CREC","7815CREC", 
              "7901CREL","7902CREL","7903CREL","7904CREL","7905CREL", 
              "7906CREL","7907CREL","7908CREL","7909CREL","7910CREL", 
              "7911CREL","7912CREL","7913CREL","7914CREL","7915CREL", 
              "7916CREL","7917CREL","7918CREL"   # DB$CREL ERROR IDS #
              ];             # END PRESET LIST OF ERROR IDENTIFIERS # 
  
            ITEM ERFATAL U(0,48,6) =   # 6-BIT ERROR FATALITIES # 
              [              # BEGIN PRESET LIST OF ERROR FATALITIES #
              3,             # ERFATAL[0] FOR UNRECOGNIZABLE ERRIDENT#
              6(1),5(2),1,   # DB$COPN AND DB$CNSC ERROR FATALITIES # 
              2,1,6(2),4(1), # DB$CBEG AND DB$CCHK ERROR FATALITIES # 
              2(1),          # DB$UABN ERROR FATALITIES # 
              3(3),1,2,      # DB$CERR, DB$CECM, AND DB$CERM FATALITY#
              3,2,1,2(2),1,  # DB$COPT AND DB$CORD ERROR FATALITIES # 
              3,2(2,1),      # DB$CLOK ERROR FATALITIES # 
              28(1),         # DB$CEND ERROR FATALITIES # 
              2(1),2(2),10(1),3(2),    # DB$CARE AND DB$CCPP FATALITY#
              2(1),2,3(1),2(2),7(1),   # DB$CREC ERROR FATALITIES # 
              18(1)          # DB$CREL ERROR FATALITIES # 
              ];             # END PRESET LIST OF ERROR FATALITIES #
  
            ITEM ERFORMAT U(0,54,6) =  # 6-BIT ERROR VALUE FORMATS #
              [              # BEGIN PRESET LIST OF ERROR FORMATS # 
              O"10",         #ERFORMAT[0] FOR UNRECOGNIZABLE ERRIDENT#
              7,6,7,3(5),7,6,7,2(5),6, # DB$COPN AND DB$CNSC FORMATS #
              5,3,2(5),8(6), # DB$CBEG AND DB$CCHK ERROR FORMATS #
              2(2),          # DB$UABN ERROR VALUE FORMATS #
              O"10",3,3(1),  # DB$CERR, DB$CECM, AND DB$CERM FORMATS #
              4,5,2(3),2(7), # DB$COPT AND DB$CORD ERROR FORMATS #
              3(4),2(5),     # DB$CLOK ERROR VALUE FORMATS #
              2(3),11(4),3,3(5),3(4),2(3),5,2(4),2(5),4,   # DB$CEND #
              3(4),6,2(3),4(4),2(3),4(4),6,      # DB$CARE, DB$CCPP # 
              3(4),3,2(5,4),2(3,4),6,4,3,        # DB$CREC FORMATS #
              2(4),5,3,3(4),5,3,2(3,4),2(5),4,3,5          # DB$CREL #
              ];             # END PRESET LIST OF ERROR VALUE FORMATS#
  
            ITEM ERTEXT C(1,0,30) =    # 30-CHARACTER ERROR TEXTS # 
              [              # BEGIN PRESET LIST OF ERROR TEXTS # 
              " UNRECOGNIZABLE ERROR IDENT - ",  # TEXT FOR 7301CERR #
              " SUBSCHEMA NOT FOUND - LFN IS ",  # TEXT FOR 7001COPN #
              " SUBSCHEMA HAS A SCHEMA NAME  ",  # TEXT FOR 7002COPN #
              " SUBSCHE BAD DDL VERSION, LFN ",  # TEXT FOR 7003COPN #
              " SUBSCHEMA AREA COUNT EXCESS  ",  # TEXT FOR 7004COPN #
              " SUBSCHEMA REC COUNT EXCESS - ",  # TEXT FOR 7005COPN #
              " SUBSCHEMA REL COUNT EXCESS - ",  # TEXT FOR 7006COPN #
              " SCHEMA CANNOT BE FOUND - LFN ",  # TEXT FOR 7007COPN #
              " SCHEMA CONTAINS SCHEMA NAME  ",  # TEXT FOR 7008COPN #
              " SCHEMA BAD DDL VERSION - LFN ",  # TEXT FOR 7009COPN #
              " SCHEMA MAX ITEMS/REC EXCESS  ",  # TEXT FOR 7010COPN #
              " SCHEMA MISMATCHED DBP COUNT  ",  # TEXT FOR 7011COPN #
              " SCHEMA HAS NO ENTRY FOR NAME ",  # TEXT FOR 7051CNSC #
              " SCHEMA MISMATCHED AREA COUNT ",  # TEXT FOR 7101CBEG #
              " RAISE MAXIMUM FL BY AT LEAST ",  # TEXT FOR 7102CBEG #
              " SCHEMA MISMATCHED REL COUNT  ",  # TEXT FOR 7151CCHK #
              " SCHEMA MISMATCHED AREA COUNT ",  # TEXT FOR 7152CCHK #
              " SEARCH FAIL - SCHEMA AREA IS ",  # TEXT FOR 7153CCHK #
              " SCHEMA BAD CHECKSUM FOR AREA ",  # TEXT FOR 7154CCHK #
              " SEARCH FAIL - SCHEMA REL IS  ",  # TEXT FOR 7155CCHK #
              " SCHEMA BAD CHECKSUM FOR REL  ",  # TEXT FOR 7156CCHK #
              " SEARCH FAIL - SUBSCHEMA AREA ",  # TEXT FOR 7157CCHK #
              " SUBSCHEMA BAD CHECKSUM, AREA ",  # TEXT FOR 7158CCHK #
              " SEARCH FAIL - SUBSCHEMA REL  ",  # TEXT FOR 7159CCHK #
              " SUBSCHEMA BAD CHECKSUM - REL ",  # TEXT FOR 7160CCHK #
              " ALLOCATE OVERFLOW POINTER AT ",  # TEXT FOR 7201UALC #
              " CMM GROW OVERFLOW POINTER AT ",  # TEXT FOR 7202UAWS #
              " UNRECOGNIZABLE ERROR IDENT - ",  # FOR COMPLETENESS  #
              " CMM OVERFLOW, UP FL AT LEAST ",  # TEXT FOR 7331CECM #
              " MASTER DIRECTORY CRM ERROR - ",  # TEXT FOR 7371CEMD #
              " SUBSCHEMA FILE CRM ERROR IS  ",  # TEXT FOR 7372CESB #
              " SCHEMA DIRECTORY CRM ERROR - ",  # TEXT FOR 7373CESC #
              " ILLEGAL PROC TYPE OF OPTIONS ",  # TEXT FOR 7401COPT #
              " NO OPTION FOR CST PROC ENTRY ",  # TEXT FOR 7402COPT #
              " CST PROC TABLE LEN CANNOT BE ",  # TEXT FOR 7403COPT #
              " CST PROC LIST SIZE MUST BE < ",  # TEXT FOR 7404COPT #
              " SEARCH FAIL - SCHEMA DB PROC ",  # TEXT FOR 7451CORD #
              " SEARCH FAIL - SUBSCHEMA DBP  ",  # TEXT FOR 7452CORD #
              " ILLEGAL LOCK DB ELEMENT TYPE ",  # TEXT FOR 7501CLOK #
              " SCHEMA BAD PRIVACY LOCK TYPE ",  # TEXT FOR 7502CLOK #
              " SUBSCHEMA HAS BAD LOCK TYPE  ",  # TEXT FOR 7503CLOK #
              " NO OPTION FOR CST LOCK ENTRY ",  # TEXT FOR 7504CLOK #
              " NO OPTION FOR CST LOCK ENTRY ",  # TEXT FOR 7505CLOK #
              " CST NON-CAPSULE EXCESS SIZE  ",  # TEXT FOR 7601CEND #
              " CST MAP CAPSULE EXCESS SIZE  ",  # TEXT FOR 7602CEND #
              " TRUNCATION - CST REC POINTER ",  # TEXT FOR 7603CEND #
              " TRUNCATION - RSB REC POINTER ",  # TEXT FOR 7604CEND #
              " TRUNCATION - CST REL POINTER ",  # TEXT FOR 7605CEND #
              " TRUNCATION - RSB REL POINTER ",  # TEXT FOR 7606CEND #
              " TRUNCATION - PROC OPTION PNT ",  # TEXT FOR 7607CEND #
              " TRUNCATION - PRIVACY LOCK PT ",  # TEXT FOR 7608CEND #
              " TRUNCATION - RSB LOCK POINTR ",  # TEXT FOR 7609CEND #
              " TRUNCATION - RSB SEARCH PNTR ",  # TEXT FOR 7610CEND #
              " TRUNCATION - RSB DATA POINTR ",  # TEXT FOR 7611CEND #
              " TRUNCATION - RSB JOIN POINTR ",  # TEXT FOR 7612CEND #
              " TRUNCATION - RSB STACK POINT ",  # TEXT FOR 7613CEND #
              " TRUNCATION - RSB TOTAL SIZE  ",  # TEXT FOR 7614CEND #
              " TRUNCATION - NUMBER OF AREAS ",  # TEXT FOR 7615CEND #
              " TRUNCATION - NUMBER OF RECS  ",  # TEXT FOR 7616CEND #
              " TRUNCATION - NUMBER OF RELS  ",  # TEXT FOR 7617CEND #
              " TRUNCATION - SUBSCHE MAX REC ",  # TEXT FOR 7618CEND #
              " TRUNCATION - SCHEMA MAX REC  ",  # TEXT FOR 7619CEND #
              " TRUNCATION - MAP CAPSULE PNT ",  # TEXT FOR 7620CEND #
              " TRUNCATION - MAP CAPSULE LEN ",  # TEXT FOR 7621CEND #
              " TRUNCATION - MAX CAPSULE LEN ",  # TEXT FOR 7622CEND #
              " TRUNCATION - NUMBER CAPSULES ",  # TEXT FOR 7623CEND #
              " TRUNCATION - CST CONSTRNT PT ",  # TEXT FOR 7624CEND #
              " TRUNCATION - RSB CONSTRNT PT ",  # TEXT FOR 7625CEND #
              " TRUNCATION - NUMBER EXT AREA ",  # TEXT FOR 7626CEND #
              " TRUNCATION - NUMBER CONSTRNT ",  # TEXT FOR 7627CEND #
              " TRUNCATION - EXTEND MAX REC  ",  # TEXT FOR 7628CEND #
              " SUBSCHE NEXT=CURRENT ADDRESS ",  # TEXT FOR 7701CARE #
              " SUBSCHEMA HAS BAD AREA TYPE  ",  # TEXT FOR 7702CARE #
              " SCHEMA HAS THE BAD AREA TYPE ",  # TEXT FOR 7703CARE #
              " SEARCH FAIL - SCHEMA AREA IS ",  # TEXT FOR 7704CARE #
              " TRUNCATION - AREA NAME SIZE  ",  # TEXT FOR 7705CARE #
              " TRUNCATION - KEY CAPSULE LEN ",  # TEXT FOR 7706CARE #
              " TRUNCATION - KEY CAPSULE PNT ",  # TEXT FOR 7707CARE #
              " TRUNCATION - KEY TABLE POINT ",  # TEXT FOR 7708CARE #
              " TRUNCATION - CODE TABLE PNTR ",  # TEXT FOR 7709CARE #
              " TRUNCATION - LITERAL POINTER ",  # TEXT FOR 7710CARE #
              " SUBSCHEMA BAD REC CODE SIZE  ",  # TEXT FOR 7711CARE #
              " TRUNCATION - WORK BLOCK SIZE ",  # TEXT FOR 7712CARE #
              " TRUNCATION - DEPEND TABLE PT ",  # TEXT FOR 7713CARE #
              " SUBSCHEMA HAS BAD AREA TYPE  ",  # TEXT FOR 7751CCPP #
              " SCHEMA HAS THE BAD AREA TYPE ",  # TEXT FOR 7752CCPP #
              " SCHEMA BAD CONSTRAINT TYPE - ",  # TEXT FOR 7753CCPP #
              " SCHEMA BAD DATA - CONSTRAINT ",  # TEXT FOR 7754CCPP #
              " SUBSCHE NEXT=CURRENT ADDRESS ",  # TEXT FOR 7801CREC #
              " SUBSCHEMA BAD RECORD TYPE IS ",  # TEXT FOR 7802CREC #
              " SCHEMA HAS A BAD RECORD TYPE ",  # TEXT FOR 7803CREC #
              " TRUNCATION - RECORD NAME LEN ",  # TEXT FOR 7804CREC #
              " TRUNCATION - SUBSCHEMA ITEMS ",  # TEXT FOR 7805CREC #
              " TRUNCATION - SUBSCHE REC LEN ",  # TEXT FOR 7806CREC #
              " TRUNCATION - SCHEMA REC ITEM ",  # TEXT FOR 7807CREC #
              " TRUNCATION - SCHEMA REC SIZE ",  # TEXT FOR 7808CREC #
              " TRUNCATION - READ CAPSL SIZE ",  # TEXT FOR 7809CREC #
              " TRUNCATION - READ CAPSL PNTR ",  # TEXT FOR 7810CREC #
              " TRUNCATION - WRITE CAPSL LEN ",  # TEXT FOR 7811CREC #
              " TRUNCATION - WRITE CAPSL PNT ",  # TEXT FOR 7812CREC #
              " SCHEMA GET ERROR - ITEM NAME ",  # TEXT FOR 7813CREC #
              " TRUNCATION - ITEM LOCK POINT ",  # TEXT FOR 7814CREC #
              " TRUNCATION - WORK BLOCK SIZE ",  # TEXT FOR 7815CREC #
              " SUBSCHE NEXT=CURRENT ADDRESS ",  # TEXT FOR 7901CREL #
              " SUBSCHEMA BAD RELATION TYPE  ",  # TEXT FOR 7902CREL #
              " TRUNCATION - RELATN MAX RANK ",  # TEXT FOR 7903CREL #
              " TRUNCATION - REL NAME LENGTH ",  # TEXT FOR 7904CREL #
              " TRUNCATION - SEARCH TABLE PT ",  # TEXT FOR 7905CREL #
              " BAD RELATION QUAL TABLE TYPE ",  # TEXT FOR 7906CREL #
              " TRUNCATION - QUAL TABLE PNTR ",  # TEXT FOR 7907CREL #
              " TRUNCATION - QUAL MAX RANK - ",  # TEXT FOR 7908CREL #
              " TRUNCATION - QUAL TABLE SIZE ",  # TEXT FOR 7909CREL #
              " TRUNCATION - WORK BLOCK SIZE ",  # TEXT FOR 7910CREL #
              " BAD QUAL TABLE STACK TYPE IS ",  # TEXT FOR 7911CREL #
              " TRUNCATION - QUAL STACK SIZE ",  # TEXT FOR 7912CREL #
              " TRUNCATION - ATTRIBUTE POINT ",  # TEXT FOR 7913CREL #
              " BAD REL QUAL TABLE AREA RANK ",  # TEXT FOR 7914CREL #
              " QUAL ABOVE MAX RANK FOR RANK ",  # TEXT FOR 7915CREL #
              " BAD QUAL STACK ENTRY POINTER ",  # TEXT FOR 7916CREL #
              " BAD RELATION QUAL TABLE SIZE ",  # TEXT FOR 7917CREL #
              " BAD REL QUAL TABLE MAX RANK  "   # TEXT FOR 7918CREL #
              ];             # END PRESET LIST OF ERROR MESSAGE TEXTS#
  
          END                # ERARRAY ARRAY #
  
# THE FOLLOWING LOCAL ARRAY IS USED FOR OUTPUTTING ERROR FATALITIES # 
  
        ARRAY FATALARR[1:3] P(1);      # OUTPUT FATALITIES ARRAY #
  
          ITEM FATALSTR C(0,0,10) =    # OUTPUT FATALITIES STRINGS #
            ["SUBSCHEMA ","THE SCHEMA","MD UTILITY"];      # PRESET # 
  
# THE FOLLOWING LOCAL ARRAY IS USED FOR FORMATTED ERROR-VALUE OUTPUT #
  
        ARRAY FORMARAY[0:O"10"] S(2);  # FORMATTED ERROR-VALUE ARRAY #
  
          BEGIN              # FORMARAY ARRAY # 
  
            ITEM FORMSTRN C(0,0,16) =  # FORMATTED ERROR-VALUE STRING#
              ["                ","OCTAL           ",      # 0 AND 1 #
               "   OCTAL ADDRESS","   OCTAL WORDS  ",      # 2 AND 3 #
               "   OCTAL        ","   DECIMAL      ",      # 4 AND 5 #
               3("                ")];           # 6, 7, AND O"10" #
  
            ITEM FORMSIZE U(1,36,6) = [0,3,4(6),30,7,8];   #CHAR SIZE#
  
            ITEM FORMBASE U(1,42,6) = [0,4(8),10,3(0)];    #0=NO BASE#
  
          END                # FORMARAY ARRAY # 
  
# FOLLOWING LOCAL ARRAY IS FOR DB ELEMENT TYPE STRINGS AND INDICATORS#
  
        ARRAY ELMNTARR[1:7] S(2);      # DATA BASE ELEMENT TYPE ARRAY#
  
          BEGIN              # ELMNTARR ARRAY # 
  
            ITEM ELMNTSTR C(0,0,10) =  # OUTPUT ELEMENT TYPE STRING # 
              ["AREA ENTRY","THE RECORD","THE RECORD","THE RELATN", 
               "AREA ENTRY","CONSTRAINT","AREA ENTRY"];    # PRESET # 
  
            ITEM ELMNTSCH B(1,0,1) = [4(FALSE),2(TRUE),FALSE];
  
          END                # ELMNTARR ARRAY # 
  
# THE FOLLOWING LOCAL ARRAY IS FOR THE ERROR MESSAGE FATALITY LINE #
  
        ARRAY MEFATAL[0:0] P(6);       # ERROR MESSAGE FATALITY LINE #
  
          BEGIN              # MEFATAL ARRAY #
  
            ITEM MEFATSTR C(2,48,10) = ["          "];     # FILL IN #
            ITEM MEFATALA C(0,0,28) =  # FATALITY LINE CONSTANT PART #
              ["0CST BUILDER ERROR FATAL TO "];  # 0 FOR DOUBLE SPACE#
            ITEM MEFATALB C(3,48,22) = [" FOUND WHEN PROCESSING"];
  
          END                # MEFATAL ARRAY #
  
# THE FOLLOWING LOCAL ARRAY IS FOR THE ERROR MESSAGE SUBSCHEMA LINE # 
  
        ARRAY MESUBSCH[0:0] P(5);      # ERROR MESSAGE SUBSCHEMA LINE#
  
          BEGIN              # MESUBSCH ARRAY # 
  
            ITEM MESUBSCA C(0,0,11) = [" SUBSCHEMA "];     # CONSTANT#
            ITEM MESUBNAM C(1,6,30) = [" "];     # FILLED IN BY NAME #
            ITEM MESUBSCB C(4,6,9) = ["         "];        # CONSTANT#
  
          END                # MESUBSCH ARRAY # 
  
# THE FOLLOWING LOCAL ARRAY IS FOR THE ERROR MESSAGE SCHEMA LINE #
  
        ARRAY MESCHEMA[0:0] P(5);      # ERROR MESSAGE SCHEMA LINE #
  
          BEGIN              # MESCHEMA ARRAY # 
  
            ITEM MESCHEMB C(0,0,11) = [" OF SCHEMA "];     # CONSTANT#
            ITEM MESCHNAM C(1,6,30) = [" "];     # FILLED IN BY NAME #
            ITEM MESCHEMC C(4,6,9) = ["         "];        # CONSTANT#
  
          END                # MESCHEMA ARRAY # 
  
# THE FOLLOWING LOCAL ARRAY IS FOR THE ERROR MESSAGE ORDINAL LINE # 
  
        ARRAY MEORDINL[0:0] P(6);      # ERROR MESSAGE ORDINAL LINE # 
  
          BEGIN              # MEORDINL ARRAY # 
  
            ITEM MEORDSTR C(1,12,10) = ["          "];     # FILL IN #
            ITEM MEORDINA C(0,0,12) = [" WORKING ON "];    # CONSTANT#
            ITEM MEORDINB C(2,12,6) = [" WITH "];          # CONSTANT#
            ITEM MEORDAIN C(2,48,20) = ["                    "];
            ITEM MEORDNOA C(2,48,18) = ["                  "];
            ITEM MEORDNUM C(4,36,4) = ["    "];  # FILL IN ORD NUMBER#
            ITEM MEORDLEF C(4,36,2) = ["  "];    # ORDINAL LEFT PART #
            ITEM MEORDINC C(5,0,10) = [" DECIMAL  "];      # CONSTANT#
  
          END                # MEORDINL ARRAY # 
  
# THE FOLLOWING LOCAL ARRAY IS FOR THE ERROR MESSAGE ENTRY NAME LINE #
  
        ARRAY MEENTRY[0:0] P(6);       # ERROR MESSAGE ENTRY LINE # 
  
          BEGIN              # MEENTRY ARRAY #
  
            ITEM MEENTSTR C(0,0,12) = [" "];     # FILL IN START WRDS#
            ITEM MEENTRYA C(1,12,18) = ["SCHEMA ENTRY NAME "];
            ITEM MEENTNAM C(3,0,30) = [" "];     # FILL IN ENTRY NAME#
  
          END                # MEENTRY ARRAY #
  
# THE FOLLOWING LOCAL ARRAY IS FOR THE ERROR MESSAGE IDENTIFIER LINE #
  
        ARRAY MEIDENT[0:0] P(3);       # ERROR MESSAGE IDENT LINE # 
  
          BEGIN              # MEIDENT ARRAY #
  
            ITEM MEIDENTA C(0,0,13) = [" FATAL ERROR "];   # CONSTANT#
            ITEM MEIDNUMB C(1,18,4) = ["    "];  # FILL IN ID NUMBER #
            ITEM MEIDENTB C(1,42,7) = [" IN DB$"];         # CONSTANT#
            ITEM MEIDMODL C(2,24,4) = ["    "];  # FILL IN ID MODULE #
            ITEM MEIDENTC C(2,48,2) = ["  "];    # LINE END CONSTANT #
  
          END                # MEIDENT ARRAY #
  
# THE FOLLOWING LOCAL ARRAY IS FOR THE ERROR MESSAGE DETAIL TEXT LINE#
  
        ARRAY MEDETAIL[0:0] P(6);      # ERROR MESSAGE DETAIL LINE #
  
          BEGIN              # MEDETAIL ARRAY # 
  
            ITEM MEDETEXT C(0,0,30) = [" "];     # FILLED IN BY TEXT #
            ITEM MEDEVALU C(3,0,30) = [" "];     # FILLED IN BY VALUE#
            ITEM MEDESTRN C(3,24,16) = ["                "];
  
          END                # MEDETAIL ARRAY # 
  
# THE FOLLOWING LOCAL ARRAY IS FOR THE ERROR MESSAGE SECONDS LINE # 
  
        ARRAY MESECOND[0:0] P(4);      # ERROR MESSAGE SECONDS LINE # 
  
          BEGIN              # MESECOND ARRAY # 
  
            ITEM MESECONA C(0,0,22) = [" THE CST BUILDER USED "]; 
            ITEM MESECINT C(2,12,4) = ["    "];  # FILL IN AN INTEGER#
            ITEM MESECONB C(2,36,1) = ["."];     # CONSTANT DEC POINT#
            ITEM MESECFRA C(2,42,3) = ["   "];   # FILL IN A FRACTION#
            ITEM MESECONC C(3,0,10) = [" SECONDS  "];      # CONSTANT#
  
          END                # MESECOND ARRAY # 
  
  
  
  
#     B E G I N   D B $ C E R R   E X E C U T A B L E   C O D E .      #
  
  
# SEARCH FOR ERRIDENT IN ERARRAY, AND SAVE THE VALUE OF CURTYPE # 
  
        ERINDEX = 0;         # ERARRAY[0] FOR UNRECOGNIZABLE ERRIDENT#
        FOR INDEX = 1 THRU DFERRLIM DO           # SEARCH IN ERARRAY #
          IF ERRIDENT EQ ERIDENT[INDEX] THEN ERINDEX = INDEX; 
        SAVETYPE = CURTYPE;  # SAVE THE VALUE OF CURTYPE IN SAVETYPE #
        CURTYPE = 0;         # CURTYPE>0 NOT USED IF DB$CERR RECALLED#
  
# CALL DB$UFRE ONCE FOR EACH MANAGED MEMORY BLOCK IN CORE TO BE FREED#
  
        IF SCHPOINT NQ 0 THEN XCALL DB$UFRE(LOC(SCHPOINT)); 
        IF SUBPOINT NQ 0 THEN XCALL DB$UFRE(LOC(SUBPOINT)); 
        IF CHKSMBP  NQ 0 THEN XCALL DB$UFRE(LOC(CHKSMBP));
        IF EXTPOINT NQ 0 THEN XCALL DB$UFRE(LOC(EXTPOINT)); 
        IF CALPOINT NQ 0 THEN XCALL DB$UFRE(LOC(CALPOINT)); 
        IF CITPOINT NQ 0 THEN XCALL DB$UFRE(LOC(CITPOINT)); 
        IF PLOPOINT NQ 0 THEN XCALL DB$UFRE(LOC(PLOPOINT)); 
        IF POPPOINT NQ 0 THEN XCALL DB$UFRE(LOC(POPPOINT)); 
        IF WORPOINT NQ 0 THEN XCALL DB$UFRE(LOC(WORPOINT)); 
  
# CALL DB$CCLS TO CLOSE THE SUBSCHEMA AND SCHEMA DIRECTORY FILES #
  
        XCALL DB$CCLS;       # CLOSE THE SUBSCHEMA AND SCHEMA FILES # 
  
# CALL DB$MDOE TO DELETE A CMM OVERFLOW-ACTION STACK ENTRY #
  
        XCALL DB$MDOE(CURCMMID);       # DELETE OVERFLOW-ACTION ENTRY#
  
# SET COMMON ITEMS RELEVANT TO PROCESSING DONE. SET SOME LOCAL ITEMS.#
  
        CURCMMID = 0;        # CURRENT CMM OVERFLOW-ACTION ENTRY ID # 
        OVERFERR = 0;        # NO OVERFLOW ERROR SPECIAL PROC ADDRESS#
        OVERFLOW = FALSE;    # MEMORY OVERFLOW NOT DAMAGING TO BLOCKS#
        IF STATMAST NQ 4 THEN STATMAST = 3;      # MASTER DIR. STATUS#
        FATALITY = ERFATAL[ERINDEX];   # FATALITY OF THE ERROR #
        FORMAT = ERFORMAT[ERINDEX];    # FORMAT USED FOR ERROR VALUE #
  
# CALL DB$UENL TO ENSURE THERE ARE ENOUGH LINES LEFT ON THE PAGE #
  
        XCALL DB$UENL(11);   # ENSURE 11 LINES ARE LEFT ON THE PAGE # 
  
# FILL IN AND OUTPUT MESSAGE FATALITY, SUBSCHEMA, AND SCHEMA LINES #
  
        MEFATSTR[0] = FATALSTR[FATALITY];        # FATALITY STRING #
        XCALL DB$EPRT(MEFATAL,60);     # OUTPUT MESSAGE FATALITY LINE#
        MESUBNAM[0] = NAMESUBS;        # BLANK-FILLED SUBSCHEMA NAME #
        XCALL DB$EPRT(MESUBSCH,50);    # PRINT MESSAGE SUBSCHEMA LINE#
        MESCHNAM[0] = NAMESCHE;        # BLANK-FILLED SCHEMA NAME # 
        XCALL DB$EPRT(MESCHEMA,50);    # OUTPUT MESSAGE SCHEMA LINE # 
  
# FILL IN AND OUTPUT ERROR MESSAGE DATA BASE ELEMENT LINES, AS NEEDED#
  
        IF SAVETYPE GQ 1 AND SAVETYPE LQ 7       # SAVED CURRENT TYPE#
          THEN               # FILL IN AND OUTPUT DB ELEMENT LINES #
            BEGIN 
              MEORDSTR[0] = ELMNTSTR[SAVETYPE];  # ELEMENT STRING # 
              IF ELMNTSCH[SAVETYPE]              # IF SCHEMA DBE INFO#
                THEN XCALL DB$EPRT(MEORDINL,22); # PRINT ORDINAL LINE#
                ELSE                             # USE SUBSCHEMA INFO#
                  BEGIN 
                    MEORDNUM[0] = DB$CDEB(CURORDNL,4);
                    IF MEORDLEF[0] EQ "  "       # IF LEFT PART BLANK#
                      THEN MEORDAIN[0] = "A SUBSCHEMA ORDINAL ";
                      ELSE MEORDNOA[0] = "SUBSCHEMA ORDINAL ";
                    XCALL DB$EPRT(MEORDINL,60);  # PRINT ORDINAL LINE#
                  END 
              IF CURNAME NQ " "        # IF CURRENT NAME IS NOT BLANK#
                THEN         # FILL IN AND OUTPUT THE ENTRY NAME LINE#
                  BEGIN 
                    IF ELMNTSCH[SAVETYPE]                  # IF SCHEM#
                      THEN MEENTSTR[0] = " HAVING THE ";   # SCHEMA # 
                      ELSE MEENTSTR[0] = " AND THE SUB";   # SUBSCHEM#
                    MEENTNAM[0] = CURNAME;       # CURRENT NAME # 
                    XCALL DB$EPRT(MEENTRY,60);   # OUTPUT ENTRY LINE #
                 END
              IF SAVETYPE EQ 3         # IF CURRENT ELEMENT IS ITEM # 
                THEN XCALL DB$EPRT(    # OUTPUT ITEM PROCESSING LINE #
                       " DURING ITEM ENTRY PROCESSING FOR RECORD",40);
              IF SAVETYPE EQ 7         # IF CONSTRAINT PREPROCESSING #
                THEN XCALL DB$EPRT(    # OUTPUT CONST PREPROCESS LINE#
                       " DURING CONSTRAINT PREPROCESSING FOR THE AREA"
                       ,45);           # LINE LENGTH IS 45 CHARACTERS#
            END 
  
# FILL IN AND OUTPUT ERROR MESSAGE IDENTIFIER AND DETAIL TEXT LINES # 
  
        MEIDNUMB[0] = C<0,4> ERIDENT[ERINDEX];   # ERROR IDENT NUMBER#
        MEIDMODL[0] = C<4,4> ERIDENT[ERINDEX];   # ERROR IDENT MODULE#
        XCALL DB$EPRT(MEIDENT,30);     # OUTPUT MESSAGE IDENT LINE #
        MEDETEXT[0] = ERTEXT[ERINDEX]; # ERROR MESSAGE DETAIL TEXT #
        MEDEVALU[0] = " ";             # SET VALUE FIELD TO BLANKS #
        MEDESTRN[0] = FORMSTRN[FORMAT];          # ERROR VALUE STRING#
        IF FORMBASE[FORMAT] NQ 0       # IF DISPLAY CODE CONVERSION # 
          THEN
            IF FORMBASE[FORMAT] EQ 8
            THEN
              C<0,FORMSIZE[FORMAT]> MEDEVALU[0] = 
              DB$COCB(ERRVALUE,FORMSIZE[FORMAT]);  # TO DISPLAY OCTAL  #
            ELSE
              C<0,FORMSIZE[FORMAT]> MEDEVALU[0] = 
              DB$CDEB(ERRVALUE,FORMSIZE[FORMAT]);  # TO DISPLAY DECIMAL#
          ELSE               # NO DISPLAY CODE MAYBE CHARACTER STRING#
            IF FORMAT EQ 6             # IF CURSCRAT CONTAINS STRING #
              THEN C<0,FORMSIZE[FORMAT]> MEDEVALU[0] =     # VALUE #
                DB$CFIL(CURSCRAT,ERRVALUE," ");            # " "-FILL#
              ELSE           # NOT DISPLAY CODE OR STRING IN CURSCRAT#
                IF FORMAT EQ 7         # IF ERRVALUE CONTAINS STRING #
                  THEN C<0,FORMSIZE[FORMAT]> MEDEVALU[0] = # " "-FILL#
                    DB$CFIL(ERRVALUE,FORMSIZE[FORMAT]," "); 
                  ELSE       # NO DISPLAY OR CURSCRAT/ERRVALUE STRING#
                    IF FORMAT EQ O"10" # IF OLD ERRIDENT IS STRING #
                      THEN C<0,FORMSIZE[FORMAT]> MEDEVALU[0] =
                        DB$CFIL(ERRIDENT,FORMSIZE[FORMAT]," "); 
        XCALL DB$EPRT(MEDETAIL,60);    # OUTPUT MESSAGE DETAIL LINE # 
  
# FILL IN AND OUTPUT ERROR MESSAGE SECONDS LINE AND OUTPUT BLANK LINE#
  
        XCALL SECOND(USEDTIME,DB$RA0); # CP TIME USED PUT IN USEDTIME#
        USEDTIME = USEDTIME - OUTTIME; # TIME SINCE CST BUILDER START#
        INDEX = USEDTIME;              # REAL TO INTEGER TRUNCATION # 
        MESECINT[0] = DB$CDEB(INDEX,4); 
        INDEX = 1000 * (USEDTIME - INDEX);       # FRACTIONAL PART #
        MESECFRA[0] = DB$CDEC(INDEX,3); 
        XCALL DB$UPRT(MESECOND,40);    # OUTPUT MESSAGE SECONDS LINE #
        XCALL DB$UPRT("  ",2);         # OUTPUT COMPLETELY BLANK LINE#
  
# SET ITEMS IN COMMON WHICH INDICATE THE ERROR CONDITION OCCURRED # 
  
        ERRCNT = ERRCNT + 1; # ERROR COUNT FOR MASTER DIRECT. UTILITY#
        PCCAPLNG[0] = 0;     # CST MAPPING CAPSULE TABLE WORD LENGTH #
        PCSIZCST[0] = 0;     # CST WD LENGTH EXCLUDING CAPSULE TABLE #
        PCSTATWD[0] = FATALITY;        # RETURN STATUS IS FATALITY #
  
# GO TO THE LABEL DB$CBLE IN PROC DB$CBLD TO EFFECT THE ERROR RETURN #
  
        GOTO DB$CBLE;        # EFFECT CST BUILDER ABORT ERROR RETURN #
  
        END                  # DB$CERR #
  
      TERM
