*DECK DB$CORD 
USETEXT UTMPTTX 
USETEXT UTCITTX 
USETEXT UTCDFTX 
USETEXT CUGBATX 
      FUNC DB$CORD(PROCNAME,PROCSCHE) U;
  
 #
  
  *   DB$CORD - FIND ORDINAL OF DATA BASE PROC   PAGE  1
  *   STEVEN P. LEVIN                            DATE  02/24/76 
  
  DC  PURPOSE 
  
      GIVEN A DATA BASE PROCEDURE ENTRY POINT NAME IN THE PARAMETER 
      PROCNAME, SEARCH THROUGH THE DATA BASE PROCEDURE TABLE IN CORE
      TO FIND THE PROC, AND RETURN ITS ORDINAL AS THE FUNCTION VALUE. 
  
  DC  ENTRY CONDITIONS
  
      PARAMETER PROCNAME CONTAINS THE DATA BASE PROCEDURE ENTRY POINT 
      NAME LEFT-JUSTIFIED WITHIN THE RIGHTMOST 42 BITS (7 CHARACTERS).
      PARAMETER PROCSCHE IS TRUE IF A SCHEMA PROC, FALSE IF SUBSCHEMA.
      THE FOLLOWING COMMON ITEMS SHOULD HAVE BEEN GIVEN VALID VALUES: 
      DBPTADDR - DB PROC TABLE BLOCK ADDRESS OF WORD AFTER HEADER WORD
      SCNUMDBP - SCHEMA TOTAL NUMBER OF DATA BASE PROCEDURES
      ALSO, THE DBP TABLE BLOCK SHOULD CONTAIN A COMPLETE DBP TABLE.
  
  DC  EXIT CONDITIONS 
  
      UPON NORMAL RETURN FROM DB$CORD, THE VALUE OF DB$CORD WILL BE 
      THE ORDINAL OF THE DATA BASE PROC ENTRY POINT NAME IN PROCNAME. 
      IF AN ERROR IS FOUND DURING DB$CORD PROCESSING, THE CST BUILDER 
      (AT LEAST) WILL BE ABORTED THROUGH A CALL TO THE MODULE DB$CERR.
  
  DC  CALLING ROUTINES
  
      DB$CARE - BUILD AN AREA WORK BLOCK IN THE WORK BLOCK CORE BLOCK 
      DB$CLOK - PRIVACY LOCK TABLE BUILDER AND NEW LOCK ENTRY INSERTER
      DB$CREC - BUILD A RECORD WORK BLOCK IN THE WORK BLOCK CORE BLOCK
  
  DC  CALLED ROUTINES 
  
      DB$CERR - ERROR MESSAGE AND RETURN HANDLER FOR FATAL ERRORS 
  
  DC  NON-LOCAL VARIABLES 
  
      DB$CORD IS GIVEN A VALUE AS DESCRIBED IN EXIT CONDITIONS ABOVE. 
  
  DC  DESCRIPTION 
  
      SEARCH THE DB PROC TABLE ENTRY POINT NAMES FOR THE DESIRED NAME.
      IF THE SEARCH SUCCEEDS, SET DB$CORD TO THE ORDINAL AND RETURN.
      IF THE DBPT SEARCH FAILS, CALL DB$CERR TO ABORT THE CST BUILDER.
  
 #
        CONTROL EJECT;
  
        BEGIN                # DB$CORD #
  
# THE FOLLOWING ARE FORMAL PARAMETERS IN THE ORDER THEY ARE PASSED #
  
        ITEM PROCNAME U;     # CONTAINS DB PROCEDURE ENTRY POINT NAME#
        ITEM PROCSCHE B;     # TRUE IF SCHEMA DBP, FALSE IF SUBSCHEMA#
  
# THE FOLLOWING IS AN EXTERNALLY REFERENCED PROCEDURE # 
  
        XREF PROC DB$CERR;   # ERROR HANDLER FOR FATAL ERRORS # 
  
        CONTROL NOLIST;      #UTCDFDCLS UTCITDCLS UTMPTDCLS CUGBADCLS#
        CONTROL LIST;        # RESUME THE LISTING OF THE SOURCE CODE #
  
# THE FOLLOWING ITEM IS LOCAL TO DB$CORD #
  
        ITEM INDEX;          # A GENERAL INDEX AND INDUCTION VARIABLE#
  
# ******************************************************************** #
  
# SEARCH THE DB PROC TABLE ENTRY POINT NAMES FOR THE DESIRED NAME. #
# IF THE SEARCH SUCCEEDS, SET DB$CORD TO THE PROC ORDINAL AND RETURN.#
  
        P<GETENTRY> = DBPTADDR + DFMDDPCW - 1;   # POINT TO DBP TABLE#
        FOR INDEX = 1 THRU SCNUMDBP DO           # SEARCH DBP TABLE # 
          IF PROCNAME EQ B<0,42> GETUNSIG[INDEX] # IF SEARCH SUCCEEDS#
            THEN             # SET DB$CORD TO PROC ORDINAL AND RETURN#
              BEGIN 
                DB$CORD = INDEX;       # SET DB$CORD TO PROC ORDINAL #
  
                RETURN;      # RETURN FROM DB$CORD - SEARCH SUCCEEDED#
  
              END 
  
# IF THE DBP TABLE SEARCH FAILS CALL DB$CERR TO ABORT THE CST BUILDER#
  
        IF PROCSCHE          # CHECK IF A SCHEMA DATA BASE PROCEDURE #
          THEN XCALL DB$CERR("7451CORD",C<3,7> PROCNAME);  # ABORT #
          ELSE XCALL DB$CERR("7452CORD",C<3,7> PROCNAME);  # ABORT #
  
        END                  # DB$CORD #
  
      TERM
