*DECK CBCKAR
USETEXT TSBP2CM 
      PROC CBCKAR;
      BEGIN 
  
# EXTERNAL REFERENCES#
      XREF PROC CBBLDDC;     #PROC TO BUILD DATA CONT ENTRY#
      XREF PROC CBCKBUF;      #MEMORY MANAGER PROC# 
      XREF PROC READSC;      #DA ROUTINE TO READ SCHEMA GIVEN ADDRESS#
      XREF PROC DE$NMSC;     #DA PROC TO READ SCH GIVEN NAME# 
      XREF PROC CBDBPBD;    #PROC TO ADD DBP TO DBP TABLE#
      XREF PROC CBERROR;       #ERROR HANDLER#
  
      CONTROL EJECT;
# SET WORD ADDRESS OF DATA-CONTROL IN SUBSCHEMA#
# THIS IS THE CURRENT LENGTH OF THE SUBSCHEMA#
      SBCWDCADDR[0] = SBCWSBLENG[0];
      SBCWALTKEY[0] = TRUE;        #INITIALIZE.  ASSUME NO ALT KEYS.   #
# LOOK AT FIRST AREA IN SUBSCHEMA#
      AREAOFFSET = SBCWFRSTAREA[0]; 
AREALOOP: 
# IF END OF AREA ENTRIES THEN RETURN# 
      IF AREAOFFSET EQ 0 THEN RETURN; 
# LOCATE AREA ENTRY IN SCHEMA#
      IF SBARALIASPTR[AREAOFFSET] EQ 0 THEN 
        BEGIN                #NO ALIAS# 
        NAME = SBARNAME30[AREAOFFSET+SBARNAMEPTR[AREAOFFSET]];
        NAMEL = SBARLENGWRDS[AREAOFFSET]; 
        NAMELC = SBARLENGCHAR[AREAOFFSET];
        END 
      ELSE
        BEGIN                #ALIAS#
        NAME = SBARALIAS30[AREAOFFSET+SBARALIASPTR[AREAOFFSET]];
        NAMEL = SBARALIASLW[AREAOFFSET];
        NAMELC = SBARALIASLC[AREAOFFSET]; 
        END 
      DE$NMSC(DITSC,3,NAME,NAMEL,SCHEMAL,SCHEMA); 
# ERROR IF AREA DOES NOT APPEAR IN SCHEMA#
      IF DASTATE[0] NQ 0 THEN 
        BEGIN 
        CBERROR(308,FALSE,NAME,NAMELC); 
        GOTO AREALOOPNEXT;
        END 
# MAKE SURE ENTIRE AREA ENTRY READ# 
      IF SCAREAENTRYL[0] GR SCHEMAL THEN
        BEGIN 
        SCHEMAL = SCAREAENTRYL[0];
        CBCKBUF(P<SCHEMA>,SCHEMAL); 
        READSC(SCHEMA,SCHEMAL,DAENTAD[0]);
        END 
# WORD ADDRESS OF DATA-CONTROL WILL BE PRESENT LENGTH OF SUBSCHEMA# 
      SBARDCONTRLA[AREAOFFSET] = SBCWSBLENG[0]; 
# BUILD DBP LIST FROM AREA CALL LIST# 
      IF SCHARCALLPTR[0] NQ 0 THEN
        BEGIN 
        ADDRESS = SCHARCALLPTR[0]-1;
ADBPLST:  
        ADDRESS = ADDRESS+1;
        CBDBPBD(SCAREAONNAME[ADDRESS]); 
        IF SCAREANEXTON[ADDRESS] THEN GOTO ADBPLST; 
        END 
# BUILD DATA-CONTRO ENTRY FOR SUBSCHEMA#
      CBBLDDC;
AREALOOPNEXT: 
      AREAOFFSET = SBARNEXT[AREAOFFSET];
      GOTO AREALOOP;
      END 
      TERM; 
