*DECK CBCKITM 
USETEXT TSBP2CM                                                         006340
      PROC CBCKITM; 
      BEGIN 
  
# EXTERNAL REFERENCES#
      XREF PROC CBERROR;       #ERROR HANDLER#
      XREF PROC CBCKEL;      #PROC TO DO ELEM ITEM CHECKING#
      XREF PROC CBCKOC;     #PROC TO DO OCCUR CHECKING# 
      XREF PROC CBCKSS;        #PROC TO CHECK ITEMS IN SUBSCH ONLY# 
      XREF FUNC CBSCITM;     #FIND SCH ADDR GIVEN SBSCH ITEM ADDR#
  
# DECLARATIONS BETWEEN $BEGIN AND $END BLOCKS ARE SATISFIED BY SYMPL   #006360
# TEXTS AS INDICATED IN THE USETEXT DIRECTIVE.                         #006370
                                                                        006380
      $BEGIN     # SYMPL TEXT * TSBP2CM * USED #                        006390
                                                                        006400
*CALL CBPASS2CM 
                                                                        006420
      $END                                                              006430
      CONTROL EJECT;
# SET SSTYPE TO SUBSCHEMA ITEM TYPE#
      SSTYPE = SBITMTYPE[SSITEMOFFSET]; 
# FIND SCHEMA ITEM ENTRY# 
      SCITEMOFFSET = CBSCITM(SSITEMOFFSET); 
      IF SCITEMOFFSET LS 0
      THEN
# **SCHEMA ITEM NOT FOUND.  DO CHECKS FOR SS ONLY#
        BEGIN 
        SCBEGWORD[CURRENT] = SCBEGWORD[CURRENT-1];
        SCBEGBIT[CURRENT] = SCBEGBIT[CURRENT-1];
        CBCKSS; 
        RETURN; 
        END 
# IF POSITION OF ITEM DISAGREES WITH SCHEMA POSITION THEN ERROR#
      IF SCITMDOMORD[SCITEMOFFSET] NQ SCPOINTER[CURRENT-1] THEN 
        CBERROR(312,TRUE, 
                SBITMNAME30[SSITEMOFFSET+SBITMNAMEPTR[SSITEMOFFSET]], 
                SBITMNMELENC[SSITEMOFFSET]);
# CHECK ORDER OF SCHEMA AGAINST SUBSCHEMA#
      IF SCNEXTPTR NQ SCITEMOFFSET THEN 
        BEGIN 
        IDENTICAL[CURRENT-1] = FALSE; 
        END 
      IF SCITEMNXTPTR[SCITEMOFFSET] NQ 0 THEN 
        SCNEXTPTR = SCITEMOFFSET+SCITEMNXTPTR[SCITEMOFFSET];
      ELSE
        SCNEXTPTR = 0;
# ITEM FOUND IN SCHEMA# 
      SCTYPE = SCITMDATATYP[SCITEMOFFSET];
      SCPOINTER[CURRENT] = SCITMORDNUM[SCITEMOFFSET]; 
# SAVE BEGINNING POSITION OF ITEM IN SCHEMA RECORD# 
      SCBEGWORD[CURRENT]
        = SCBEGWORD[CURRENT-1]+SCITEMPBWP[SCITEMOFFSET];
      SCBEGBIT[CURRENT] 
        = SCBEGBIT[CURRENT-1]+SCITEMBBP[SCITEMOFFSET];
      IF SCBEGBIT[CURRENT] GQ 60 THEN 
        BEGIN 
        SCBEGWORD[CURRENT] = SCBEGWORD[CURRENT]+1;
        SCBEGBIT[CURRENT] = SCBEGBIT[CURRENT]-60; 
        END 
# CHECK FOR SAME LOCATION#
      IF SCBEGWORD[CURRENT] EQ SSBEGWORD[CURRENT] 
      AND SCBEGBIT[CURRENT] EQ SSBEGBIT[CURRENT]
      THEN
        SBITMSAMLOC[SSITEMOFFSET] = TRUE; 
# IT BOTH ITEM ELEMENTARY THEN CBCKEL#
      IF SCTYPE EQ 1 AND SSTYPE EQ 1 THEN 
        BEGIN 
        CBCKEL; 
        RETURN; 
        END 
# TO SUPPORT KEYS GREATER THAN 10 CHARACTERS IN FTN4, THE SUBSCHEMA    #
# ITEM MUST BE A VECTOR AND THE SCHEMA ITEM AN ELEMENTARY ITEM OF      #
# CLASS 0 OR 1. SINCE THIS TYPE OF MAPPING IS ILLEGAL THE ITEM ENTRY   #
# IS MODIFIED TO LOOK LIKE AN ELEMENTARY ITEM.                         #
      IF SCTYPE EQ 1 AND SCITEMCLASS[SCITEMOFFSET] LQ 1 
                     AND (SSTYPE EQ 4)
                     AND (SBCWSSTYPE[0] EQ "FT4"
                          OR SBCWSSTYPE[0] EQ 0)
        THEN
        BEGIN 
        SBITMTYPE[SSITEMOFFSET] = 1;
        SBITMUSESIZE[SSITEMOFFSET] = SBITMUSESIZE[SSITEMOFFSET] * 
                 SBITMHIBNDS[SSITEMOFFSET + SBITMOCCURP[SSITEMOFFSET]]; 
        SBITMOCCURP[SSITEMOFFSET] = 0;
        CBCKEL; 
        RETURN; 
        END 
# IF SC TYPE VECTOR AND SS TYPE VECTOR OR ELEM THEN CHECKVECTOR#
      IF (SCTYPE EQ 4 OR SCTYPE EQ 5 OR SCTYPE EQ 7)
      AND (SSTYPE EQ 4 OR SSTYPE EQ 5 OR SSTYPE EQ 7 OR SSTYPE EQ 1)
      THEN
        BEGIN 
        CBCKOC; 
        CBCKEL; 
        RETURN; 
        END 
       # IF BOTH ITEMS RG THEN CHECK OCCURS AND ELEM ITEM CHECKS.      #
      IF (SCTYPE EQ 2 OR SCTYPE EQ 3) 
      AND (SSTYPE EQ 2 OR SSTYPE EQ 3)
      OR (SCTYPE EQ 6 AND SSTYPE EQ 6)
      THEN
        BEGIN 
        CBCKOC; 
        CBCKEL; 
        RETURN; 
        END 
# ERROR.  SUBSCHEMA ITEM TYPE DOES NOT AGREE WITH SCHEMA# 
      CBERROR(306,TRUE, 
              SBITMNAME30[SSITEMOFFSET+SBITMNAMEPTR[SSITEMOFFSET]], 
              SBITMNMELENC[SSITEMOFFSET]);
      END 
      TERM; 
