*DECK TIMF
USETEXT TIMFDEF 
USETEXT TNUMOPT 
      PROC TIMF;
      BEGIN 
      CONTROL STEXT;
#----------------------------------------------------------------------#
#                                                                      #
#     T I M F                                                          #
#                                                                      #
#     THIS TEXT CONTAINS THE ARRAYS THAT ARE PECULIAR TO THE *IMF*     #
#     INTERFACE CODE                                                   #
#                                                                      #
#----------------------------------------------------------------------#
  
  
#----------------------------------------------------------------------#
#     D F M                        DOMAIN FORMATS                      #
#                                                                      #
*CALL COMDFMS 
  
#----------------------------------------------------------------------#
#                                                                      #
#     D I D                                                            #
  
*CALL COMDIDS 
  
#----------------------------------------------------------------------#
#                                                                      #
#     S A A T                      ACCESS-PATH TABLE                   #
  
      BASED ARRAY SAAT
*CALL COMSATS 
  
#----------------------------------------------------------------------#
#                                                                      #
#     S C A T                      COSET TABLE                         #
  
      BASED ARRAY SCAT             # COSET TABLE                       #
*CALL COMSCTS 
  
#----------------------------------------------------------------------#
#                                                                      #
#     S D I D                      DATA ITEM TABLE                     #
  
      BASED ARRAY SDID             # DATA ITEM TABLE                   #
*CALL COMSDTS 
  
#----------------------------------------------------------------------#
#                                                                      #
#     S R A T                      RECORD TABLE                        #
  
      BASED ARRAY SRAT             # RECORD TABLE                      #
*CALL COMSRTS 
  
#----------------------------------------------------------------------#
#                                                                      #
#     S Y M S S T $                SYMBOLIC EXTERNAL SCHEMA TABLE      #
  
 DEF SSSTENL # 4 # ;                    # SSST ENTRY LENGTH IN WORDS   #
XREF      BASED ARRAY SYMSST$ [0:0] S(SSSTENL);  #SYMBOLIC SST# 
          BEGIN 
          ITEM SICHEDR U(0,00,12);      # SYMBOLIC SST ID (7726)       #
          ITEM SICAPTD I(0,12,18);      # APT DISPLACEMENT IN WORDS    #
          ITEM SICCSTD I(0,42,18);      # CST DISPLACEMENT IN WORDS    #
          ITEM SICRCTD I(1,06,18);      # RCT DISPLACEMENT IN WORDS    #
          ITEM SICCSRD I(1,24,18);      # CSR DISPLACEMENT IN WORDS    #
          ITEM SICRCTN I(1,42,18);      # NUM OF RCT ENTRIES           #
          ITEM SICAPTN I(2,06,18);      # NUM OF APT ENTRIES           #
          ITEM SICCSTN I(2,24,18);      # NUM OF CST ENTRIES           #
          ITEM SICCSRN I(2,42,18);      # NUM OF WORDS IN CSR          #
          ITEM SICDITN I(3,42,18);      # NUM OF DIT ENTRIES           #
          END 
  
#----------------------------------------------------------------------#
#                                                                      #
#     S S T $                      EXTERNAL SCHEMA SUMMARY TABLE       #
  
      DEF SSTENL  #4#;
      XREF BASED ARRAY SST$ S(SSTENL);  # EXT SCHEMA SUMMARY TABLE     #
              BEGIN 
              ITEM SSTID   U(0,0,12);  #TABLE ID (7720)#
              ITEM SSTSCID U(0,12,12); #SCHEMA ID#
              ITEM SSTSCED U(0,24,12); #SCHEMA EDITION# 
              ITEM SSTSSID U(0,36,12); #SUBSCHEMA ID# 
              ITEM SSTUPDF B(0,48,1);  #TRUE = UPDATE SCHEMA #
              ITEM SSTHOST U(0,54,6);  #HOST LANGUAGE ID# 
              ITEM SSTRATN U(1,00,12); #NUM OF RAT ENTRIES #
              ITEM SSTAATN U(1,12,12); #NUM OF AAT ENTRIES #
              ITEM SSTFATN U(1,24,12); #NUM OF FAT ENTRIES #
              ITEM SSTCATN U(1,36,12); #NUM OF CAT ENTRIES #
              ITEM SSTSTRN U(1,48,12); #NUM OF STR ENTRIES #
              ITEM SSTAATD U(2,00,15); #_ FIRST AAT#
              ITEM SSTRATD U(2,15,15); #_ FIRST RAT#
              ITEM SSTCATD U(2,30,15); #_ FIRST CAT#
              ITEM SSTSTRD U(2,45,15); #_ FIRST STR#
              ITEM SSTMAPD U(3,00,15); #_ COMPLETE NEW IMAGE FOR MAP# 
              ITEM SSTEXTN U(3,15,15); #_ EXTRACTED NEW IMAGE#
              ITEM SSTEXTO U(3,30,15); #_ EXTRACTED OLD IMAGE#
              END 
  
#----------------------------------------------------------------------#
#     S I C $ C O P                USER INPUT LIST                     #
  
XREF ARRAY SIC$COP[0:0] S(SICLENGTH); 
   BEGIN
             ITEM USERFNC   U(0, 0,60); #FUNCTION CODE# 
             ITEM USERRCI   U(1, 0,60); #RECORD ID# 
             ITEM USERCSI   U(2, 0,60); #COSET  ID# 
             ITEM USERSCH   U(3, 0,60); #SCHEMA ID# 
             ITEM USERSSC   U(4, 0,60); #SUBSCHEMA ID#
             ITEM USERACI   U(5, 0,60); #ACCESS PATH ID#
              ITEM USERSCHW U(6,0,60);  #SCHEMA FOLLOW WORD#
              ITEM USERSCHL U(6,6,15);  #SCHEMA TABLE LENGTH# 
              ITEM USERSCHT U(6,42,18); #SCHEMA TABLE ADDR# 
              ITEM USERSSCW U(7,0,60);  #SUBSCHEMA FOLLOW WORD# 
              ITEM USERSSCL U(7,6,15);  #SUBSCHEMA TABLE LENGTH#
              ITEM USERSSCT U(7,42,18); #SUBSCHEMA TABLE ADDR#
              ITEM USERSTV  C(8,0,10);  #USER STATUS VALUE WORD#
              ITEM ERRCODE  I(9,0,60);  #ERROR CODE#
              ITEM TOTERRC  I(10,0,60); #CONSTRAINT VIOLATION ERR CTR#
              ITEM DUPERRC  I(11,0,60); #IDENTIFIER VIOLATION ERR CTR#
              ITEM ERRFUNC  I(12,0,60); #FUNC CAUSING ERROR#
              ITEM USERSSSW U(13,0,60); #SYM SS FOLLOW WORD#
              ITEM USERSSSL U(13,6,15); #SYM SS TABLE LENGTH# 
              ITEM USERSSST U(13,42,18);#SYM SS TABLE ADDR# 
   END
  
      DEF DML           #USERFNC#;  # USER FUNCTION CODE               #
      DEF RECORDID      #USERRCI#;  # RECORD ID                        #
      DEF COSETID       #USERCSI#;  # COSET ID                         #
      DEF PATHID        #USERACI#;  # ACCESS PATH ID                   #
      DEF ERRSTATEMENT  #USERSTV#;  # USER STATUS VALUE WORD           #
  
  
#----------------------------------------------------------------------#
#                                                                      #
#     R E C O R D S                                                    #
  
  
#  THE FOLLOWING ARRAY, RECORDS, CONTAINS ONE ENTRY PER RECORD TYPE    #
#  IN THE EXTERNAL SCHEMA.  SPACE FOR THE ARRAY IS ACQUIRED BY INV$EXE #
#  AT -INVOKE- TIME.  THE ACTUAL NUMBER OF ENTRIES EQUALS THE NUMBER   #
#  OF RECORD TYPES PLUS TWO.  ENTRY 0 IS NOT USED AND IS THERE TO      #
#  FACILITATE INDEXING FOR SYMPL.  THE LAST ENTRY IS SET TO 0 AS AN    #
#  END OF TABLE MARKER.  THE KTH ENTRY CORRESPONDS TO THE RECORD TYPE  #
#  WITH THE ORDINAL K IN THE EXTERNAL SCHEMA.                          #
#  INITIALLY, THE ARRAY IS PRESET BY INV$EXE WITH THE LENGTH IN WORDS  #
#  OF EACH RECORD TYPE AND THE ORDINAL OF THE FIRST ACCESS PATH        #
#  DEFINED FOR THAT RECORD TYPE.                                       #
#      SEMANTIC ROUTINES MARK THE ENTRIES CORRESPONDING TO RECORD TYPES#
#  INVOLVED IN THE TRANSMISSION BEING ANALYZED, AND NOTE THE ACCESS    #
#  PATH ORDINALS (UP TO SIX) REFERENCED BY THE TRANSMISSION.           #
#  AT EXECUTION TIME, IMF$EXE STORES IN THE CORRESPONDING ENTRY THE    #
#  ADDRESS OF THE RECORD OCCURRENCE WSA.                               #
#  THE THIRD WORD HOLDS THE VERIFY LIST INFO FOR THAT SPECIFIC RECORD. #
  
      XREF BASED ARRAY RECORDS [0:0]  S(3); 
        BEGIN 
        ITEM RECORDENTRY  I(00,00,60); # FULL WORD ENTRY. WHEN ZERO,   #
                                       # MEANS END OF TABLE            #
        ITEM RECORDSEEN   B(00,00,01); # TRUE IF THIS RECORD TYPE IS   #
                                       # INVOLVED IN TRANSMISSION.     #
        ITEM RECORDSYMBOL U(00,06,18); # ADDRESS OF SYMBOLIC TABLE     #
        ITEM FIRSTPATH    U(00,24,09); # ORDINAL OF 1ST PATH DEFINED IN#
                                       # EXT SCHEMA FOR THIS RECORD    #
        ITEM RECORDLGW    U(00,33,09); # RECORD LENGTH IN WORDS        #
        ITEM RECORDWSA    U(00,42,18); # ADDRESS OF RECORD OCCURRENCE. #
        ITEM DUPLICLIST   U(01,00,06); # TRUE/FALSE IF THE FIRST SIX   #
                                       # ACCESS PATHS HAVE DUPLICATES  #
                                       # OR NOT.                       #
        ITEM PATHLIST     U(01,06,54); # ORDINALS OF THE FIRST SIX     #
                                       # ACCESS PATHS SEEN FOR THAT    #
                                       # RECORD TYPE IN THE TRANSMISSN.#
                                       # (9 BITS PER PATH)             #
        ITEM REC$VERWORD  I(02,00,60); # FULL WORD OF VERIFY LIST INFO #
        ITEM REC$VERILOC  I(02,06,18); # ADDRESS OF VERIFY TABLE       #
        ITEM REC$VERLEN   I(02,24,18); # LENGTH OF VERIFY ARRAY        #
        ITEM REC$VERGRPID I(02,42,18); # CMM GROUP ID                  #
        END 
  
#----------------------------------------------------------------------#
#                                                                      #
#     T H R E A D                                                      #
  
#  THE FOLLOWING ARRAY, THREAD, RECORDS THE NAVIGATION STRATEGY        #
#  SPECIFIED BY -FOLLOW-.  SPACE FOR THE ARRAY IS ACQUIRED BY INITID.  #
#  ENTRY 0 IS NOT USED AND IS THERE TO SIMPLIFY SYMPL INDEXING.        #
#  ENTRY 1 IS FOR THE ROOT RECORD TYPE IN THE NAVIGATION ROUTE.        #
#  ENTRIES 2 TO N ARE FOR THE SUBSEQUENT RECORD TYPES.                 #
#  ENTRY N+1 IS ZERO, AS AN END OF TABLE MARKER.                       #
#  THREAD IS CLEARED BY FOL$END IF A NAVIGATION ROUTE IS NOT DESIRED.  #
  
      DEF MAXTHREAD # 15 # ; #16 ENTRIES, THUS 14 RECORD TYPES ARE     #
                             # THE (PURELY ARBRITRARY) MAXIMUM NUMBER  #
                             # IN A NAVIGATION ROUTE.                  #
  
      XREF BASED ARRAY THREAD [0:MAXTHREAD];
        BEGIN 
        ITEM THREADENTRY  I(00,00,60); # FULL WORD ENTRY. WHEN ZERO,   #
                                       # MEANS END OF TABLE.           #
        ITEM BOI          B(00,00,01); # TRUE WHEN STARTING TO READ A  #
                                       # SET OF MEMBER RECORDS,        #
                                       # OR THE OWNER OF A GIVEN MEMBER#
                                       # OR THE 1ST ROOT RECORD.       #
        ITEM OWNER        B(00,01,01); # TRUE MEANS 1 TO 1             #
                                       # RELATIONSHIP MEMBER TO OWNER. #
                                       # FALSE MEANS 1 TO N            #
                                       # RELATIONSHIP, FROM            #
                                       # OWNER TO MEMBER.              #
        ITEM PATHCOSETID  U(00,06,09); # ORDINAL OF ACCESS PATH (FOR   #
                                       # ENTRY 1) OR OF COSET (FOR     #
                                       # ENTRIES 2 TO N).              #
        ITEM THISRECORDID U(00,15,09); # ORDINAL OF RECORD TYPE FOR    #
                                       # THIS LEVEL OF NAVIGATION ROUTE#
        ITEM ORIGRECORDID U(00,24,09); # ORDINAL OF RECORD TYPE THAT   #
                                       # MUST BE OBTAINED IN ORDER TO  #
                                       # OBTAIN THIS ONE, I.E.         #
                                       # ID OF OWNER, OR               #
                                       # ID OF MEMBER.                 #
        END 
#----------------------------------------------------------------------#
#                                                                      #
#     F O L L O W S                                                    #
#                                                                      #
#     THE FOLLOWING ARRAY HOLDS BASED ARRAY THREAD IF A FOLLOW         #
#     DIRECTIVE IS IN EFFECT.  THE INFORMATION IS MOVED WORD FOR       #
#     WORD BY -FOL$END-.  THE CONTENTS WILL BE RESTORED IN THREAD      #
#     WHEN A PRINT OR WRITE DIRECTIVE IS GIVEN.  THIS ARRAY IS         #
#     ZERO IF A -FOLLOW- DIRECTIVE IS NOT IN EFFECT.                   #
  
      XREF BASED ARRAY FOLLOWS [0:MAXTHREAD]; 
        BEGIN 
        ITEM FOLLOWENTRY I(00,00,60);  # FULL WORD, HOLDS THREADENTRY  #
        END 
      END 
      TERM
