*DECK CBCKCNV;
USETEXT TSBP2CM                                                         007060
      PROC CBCKCNV; 
      BEGIN 
  
# EXTERNAL REFERENCES#
      XREF PROC CBERROR;       #ERROR HANDLER#
  
# DECLARATIONS BETWEEN $BEGIN AND $END BLOCKS ARE SATISFIED BY SYMPL   #007080
# TEXTS AS INDICATED IN THE USETEXT DIRECTIVE.                         #007090
                                                                        007100
      $BEGIN     # SYMPL TEXT * TSBP2CM * USED #                        007110
                                                                        007120
*CALL CBPASS2CM 
                                                                        007140
      $END                                                              007150
      CONTROL EJECT;
 #
      A SINGLE DIMENSIONED ARRARY IS USED TO DETERMINE CONVERSION 
      LEGALITY.  THIS IS POSSIBLE BECAUSE CONVERSION IS SYMMETRIC.
      THE DIMENSION OF THE ARRAY REPRESENT THE CLASS OF THE FROM
      ITEM, AND THE BITS OF THE ITEM IN THAT DIMENSION REPRESENT
      THE CLASS OF THE TO ITEM.  IF THE BIT IS SET THEN THE CONVER- 
      SION IS LEGAL.
 #
      ARRAY [0:20];          # SPACE ALLOWED FOR 21 CLASSES (0-20)     #004280
        ITEM LEGALITY U(0,0,21) = [                                     004290
          O"6400000",        # CLASS 0 #                                004300
          O"6000000",        # CLASS 1 #                                004310
          0,                                                            004320
          O"4602304",        # CLASS 3 #                                004330
          O"0602304",        # CLASS 4 #                                004340
          5(0),                                                         004350
          O"0602354",        # CLASS 10 #                               004360
          0,                                                            004370
          0,                                                            004380
          O"0602344",        # CLASS 13 #                               004390
          O"0602344",        # CLASS 14 #                               004400
          O"0002344",        # CLASS 15 #                               004410
          0,                                                            004420
          O"0002010",        # CLASS 17 #                               004430
          O"0602344",        # CLASS 18 #                               004440
          0,                                                            004450
          0 ];                                                          004460
                                                                        004470
*CALL COMDITEM                                                          004480
                                                                        004490
                                       # FORTRAN PROGRAMS MAY STORE    #000130
                                       # CHARACTER DATA INTO INTEGERS, #000140
                                       # SO IF SCHEMA ITEM IS ALPHANUM #000150
                                       # OR IS SCHEMA ITEM IS ALPHA    #000130
                                       # AND SUB-SCHEMA IS INTEGER,    #000160
      IF SBCWSSTYPE[0] EQ "FT4" 
      THEN
        BEGIN 
        IF ( SCITEMCLASS[SCITEMOFFSET] EQ 0 
          OR SCITEMCLASS[SCITEMOFFSET] EQ 1 ) 
            AND SBITMDBCLASS[SSITEMOFFSET] EQ 10
        THEN
          BEGIN 
          SBITMDBCLASS[SSITEMOFFSET] = 0;  # CHANGE SUBSCHEMA TYPE TO  #
          SBITMCLASS[SSITEMOFFSET] = 3;   # ALPHANUMERIC,              #
          SBITMUSAGE[SSITEMOFFSET] = 0;   # UNSPECIFIED.               #
          SBITMIPICSIZ[SSITEMOFFSET] = SBITMUSESIZE[SSITEMOFFSET];
          END 
        END 
  
      IF B<SCITEMCLASS[SCITEMOFFSET]> 
        LEGALITY[SBITMDBCLASS[SSITEMOFFSET]]
      EQ 0
      THEN
# IF THE CONVERSION ARRAY SAYS THE CONVERSION IS ILLEGAL, IT IS STILL#
# LEGAL IF THERE IS AN ENCODE AND A DECODE DB PROC FOR CONVERSION#
        BEGIN 
        IF SBITMTYPE[SSITEMOFFSET] EQ 0 OR
          SBITMTYPE[SSITEMOFFSET] EQ 2 OR 
          SBITMTYPE[SSITEMOFFSET] EQ 3 OR 
          SBITMTYPE[SSITEMOFFSET] EQ 6 THEN 
            RETURN; 
        IF SCITMENCDPTR[SCITEMOFFSET] EQ 0 THEN 
          GOTO ERROR; 
        ADDRESS = SCITEMOFFSET+SCITMENCDPTR[SCITEMOFFSET]-1;
        INDEX = 0;
LOOP: 
        ADDRESS = ADDRESS+1;
        IF SCITEMENCODE[ADDRESS] EQ 0 THEN
          INDEX = INDEX LOR 1;
        ELSE
          INDEX = INDEX LOR 2;
        IF INDEX EQ 3 THEN
          RETURN; 
        IF SCITEMNEXTON[ADDRESS] THEN 
          GOTO LOOP;
ERROR:  
        CBERROR(307,TRUE, 
                SBITMNAME30[SSITEMOFFSET+SBITMNAMEPTR[SSITEMOFFSET]], 
                SBITMNMELENC[SSITEMOFFSET]);
        END 
      END 
      TERM; 
