COMBMCT 
COMMON
  
#     COMBMCT - M860 CATALOG TABLES.                                   #
                                               CONTROL NOLIST;
                                               CONTROL IFEQ LISTCON,1;
                                               CONTROL LIST;
                                               CONTROL FI;
      BEGIN  # COMBMCT #
  
# 
***   COMBMCT - M860  CATALOG TABLES. 
* 
*     COMBMCT CONTAINS THE DEFINITION OF THE FILE AND 
*     CARTRIDGE TABLE, THE ALLOCATION SUMMARAY TABLE, AND THE 
*     PREAMBLE IN THE M860 CATALOG. 
* 
*     NOTE - COMDECK *COMBFAS* MUST BE CALLED PRIOR TO *COMBMCT*. 
# 
  
  
# 
*     M860 CATALOG. 
# 
  
# 
*     FILE AND CARTRIDGE TABLE (FCT). 
# 
  
      DEF FCTENTL    #975#;          # *FCT* ENTRY LENGTH # 
      DEF NOCLF      #2#;            # NO. OF CLF PER *FCT* WORD #
  
      STATUS CHAINCON                # CHAIN CONTROL #
        MIDDLE, 
        FIRST,
        LAST, 
        ONLY; 
  
      BASED 
      ARRAY FCT [0:0]   P(FCTENTL);  # *FCT* ENTRY DESCRIPTION #
        BEGIN 
        ITEM FCT$1ST    U(00,00,60);  # REFERENCE TO WORD ONE # 
        ITEM FCT$CSND   C(00,00,08);  # VSN OF CARTRIDGE #
        ITEM FCT$CSNI   I(00,00,48);  # VSN IN INTEGER #
        ITEM FCT$CCOD   C(00,48,02);  # CARTRIDGE MAKER IDENT # 
        ITEM FCT$Y      U(01,00,06);  # VERTICAL COORDINATE # 
        ITEM FCT$Z      U(01,06,06);  # HORIZONTAL COORDINATE # 
        ITEM FCT$FAULF  U(01,12,15);  # START OF LARGE FREE AU #
        ITEM FCT$FAUSF  U(01,27,15);  # START OF SMALL FREE AU #
        ITEM FCT$FLGS   U(01,42,06);  # FLAGS # 
        ITEM FCT$IAF    B(01,42,01);  # INHIBIT ALLOCATION FLAG # 
        ITEM FCT$LCF    B(01,43,01);  # LOST CARTRIDGE FLAG # 
        ITEM FCT$EEF    B(01,44,01);  # EXCESSIVE ERROR FLAG #
        ITEM FCT$FCF    B(01,45,01);  # FREE CARTRIDGE FLAG # 
        ITEM FCT$SEF    B(01,46,01);  # SFMCAT LINKAGE ERROR FLAG # 
        ITEM FCT$FREE2  U(01,47,01);  # UNUSED #
        ITEM FCT$ORD    U(01,48,12);  # *FCT* ORDINAL # 
        ITEM FCT$ALLOCL U(02,00,12);  # ALL OCL LINK FIELDS # 
        ITEM FCT$OCL    U(02,00,04);  # FIRST OFF CARTRIDGE LINK #
        ITEM FCT$OCL1   U(02,04,04);  # SECOND OFF CARTRIDGE LINK # 
        ITEM FCT$OCL2   U(02,08,04);  # THIRD OFF CARTRIDGE LINK #
        ITEM FCT$FTST   U(02,12,06);  # FIRST USABLE STRIPE # 
        ITEM FCT$SPAU   U(02,18,06);  # STRIPES IN EACH AU #
        ITEM FCT$PRUS   U(02,24,05);  # PRU'S WRITTEN PER STRIPE #
        ITEM FCT$AVOT   U(02,29,14);  # MAXIMUM AU ON CARTRIDGE # 
        ITEM FCT$CDP    U(02,43,14);  # CARTRIDGE DIVISION POINT #
        ITEM FCT$OCLF   U(02,57,03);  # RESERVED ON EACH OCL FIELD #
        ITEM FCT$CSNE   U(03,00,60);  # VSN IN EBCDIC # 
        ITEM FCT$CSNE1  U(04,00,36);  # VSN IN EBCDIC # 
        ITEM FCT$FREE3  U(04,36,12);  # UNUSED #
        ITEM FCT$FLAWS  U(04,48,12);  # FLAW COUNT #
        ITEM FCT$STRD   U(05,00,30);  # NUMBER OF STRIPES READ #
        ITEM FCT$STWR   U(05,30,30);  # NUMBER OF STRIPES WRITTEN # 
        ITEM FCT$SRDE   U(06,00,30);  # NUMBER OF SOFT READ ERRORS #
        ITEM FCT$SWRE   U(06,30,30);  # NUMBER OF SOFT WRITE ERRORS # 
        ITEM FCT$HRDE   U(07,00,15);  # NUMBER HARD READ ERRORS # 
        ITEM FCT$STDM   U(07,15,15);  # NUMBER OF DEMARKED STRIPES #
        ITEM FCT$CRLD   U(07,30,15);  # NUMBER OF CARTRIDGE LOADS # 
        ITEM FCT$LDER   U(07,45,15);  # NUMBER OF CARTRIDGE LOAD ERRORS 
                                      # 
        ITEM FCT$CLF    U(08,00,60);  # AU'S WORDS (8 - 974) #
        END 
  
# 
*     A SPECIFIC OFF CARTRIDGE LINK FIELD IN *FCT$ALLOCL* CAN BE
*     ACCESSED VIA THE *FCT$OCLNK* DEFINITION BELOW.
# 
  
      DEF FCT$OCLNK(N)  #B<4*(N)-4,4>FCT$ALLOCL[0] #; 
  
# 
**    *FCT* ITEMS CAN BE ACCESSED WITH ORDINAL N USING *FCT$WD *
*     AND *FCT$WP* FOR *I* AND *J* RESPECTIVELY.
# 
  
  
                                     # CARTIDGE LINK FIELD GROUP FOR
                                       INITIALIZATION # 
  
      DEF FCT$CLFG   (I,J) #B<(J)*30,30> FCT$CLF[(I)]#; 
  
                                     # FLAGS FOR CARTRIDGE LINK FIELDS
                                     #
      DEF FCT$FLGS1  (I,J) #B<(J)*30,07>FCT$CLF[(I)]#;
  
                                     # FREE / BUSY FLAG, IF FLAG NOT
                                       SET, AU IS NOT ALLOCATED YET # 
  
      DEF FCT$FBF    (I,J) #B<(J)*30,01> FCT$CLF[(I)]#; 
  
                                     # UNUSED # 
  
      DEF FCT$FREESF (I,J) #B<(J)*30+1,01> FCT$CLF[(I)]#; 
  
                                     # AU CONFLICT FLAG # 
  
      DEF FCT$AUCF   (I,J) #B<(J)*30+2,01> FCT$CLF[(I)]#; 
  
                                     # FROZEN CHAIN FLAG #
  
      DEF FCT$FRCF   (I,J) #B<(J)*30+3,01> FCT$CLF[(I)]#; 
  
                                     # START FRAGMENT FLAG #
  
      DEF FCT$SFF    (I,J) #B<(J)*30+4,01> FCT$CLF[(I)]#; 
  
                                     # FLAWED AU FLAG # 
  
      DEF FCT$FAUF   (I,J) #B<(J)*30+5,01> FCT$CLF[(I)]#; 
  
                                     # CONTINUATION FLAG #
  
      DEF FCT$CAUF   (I,J) #B<(J)*30+6,01> FCT$CLF[(I)]#; 
  
                                     # IDENTIFIES CARTRIDGE CONTAINING
                                       NEXT VOLUME #
      DEF FCT$CLKOCL (I,J) #B<(J)*30+7,02> FCT$CLF[(I)]#; 
  
                                     # CHAIN CONTROL INDICATES THAT 
                                       THIS SET OF AUS IS # 
                                     # MIDDLE (0), FIRST (1), 
                                       LAST(2), ONLY (3) #
                                     # OF VOLUME OR VOLUMES. #
  
      DEF FCT$CC     (I,J) #B<(J)*30+9,02> FCT$CLF[(I)]#; 
  
                                     # NO. OF AUS FOLLOWING FIRST 
                                       ACCESSED AU #
  
      DEF FCT$LEN    (I,J) #B<(J)*30+11,07> FCT$CLF[(I)]#;
  
                                     # ORDINAL OF FIRST AU OF NEXT
                                       VOLUME. #
  
      DEF FCT$LINK   (I,J) #B<(J)*30+18,12> FCT$CLF[(I)]#;
  
                                     # *FCT* INDEX INTO A TABLE WORD #
  
      DEF FCT$WD     (N) #((N)/NOCLF)#; 
  
                                     # CLF WORD POSITION #
  
      DEF FCT$WP     (N) #((N)-(((N)/NOCLF)*NOCLF))#; 
  
      DEF SETFCTX    (N) #FWD = (N)/2;
      FPS = (N) - 2*FWD;
      #;
  
# 
*     AVAILABLE AU TABLE (ALLOCATION SUMMARY TABLE).
# 
  
  
      DEF ASTENTW    #2#;            # NO. OF AST WORDS PER ENTRY # 
      DEF ASTENTL    #624#;          # *AST* ENTRY LENGTH # 
  
  
      STATUS ASTENSTAT
        UNASS$CUB,
        UNASS$CART, 
        ASS$CART; 
  
  
      BASED 
        ARRAY AST [15:15] S(ASTENTW);  # *AST* ENTRY DESCRIPTION #
        BEGIN 
        ITEM AST$1ST    U(00,00,60);  # AST WORD 1 #
        ITEM AST$NAME   C(00,00,06);  # NAME OF *AST* # 
        ITEM AST$SM     C(00,36,01);  # STORAGE MODULE ID # 
        ITEM AST$PCI    U(00,00,09);  # PRIVATE CARTRIDGE # 
        ITEM AST$STAT   U(00,09,03);  # *AST* ENTRY STATUS #
        ITEM AST$FCTX   U(00,12,12);  # *FCT* INDEX # 
        ITEM AST$GR     U(00,12,08);  # GROUP # 
        ITEM AST$GRT    U(00,20,04);  # CARTRIDGE WITHIN A GROUP #
        ITEM AST$FLAGS  U(00,24,06);  # FLAGS # 
        ITEM AST$AAF    B(00,24,01);  # ALLOCATION AUTHORIZED # 
        ITEM AST$NOCLF  B(00,25,01);  # NO OFF CARTRIDGE LINK # 
        ITEM AST$FREE   U(00,30,30);  # UNUSED #
  
        ITEM AST$2ND    U(01,00,60);  # AST WORD 2 #
        ITEM AST$AULF   U(01,00,12);  # TOTAL AUS AVAILABLE LARGE FILES 
                                      # 
        ITEM AST$AUSF   U(01,12,12);  # TOTAL AUS AVAILABLE SMALL FILES 
                                      # 
        ITEM AST$FLAWS  U(01,24,12);  # FLAW COUNT #
        ITEM AST$FREE1  U(01,36,24);  # UNUSED #
        END 
  
  
# 
*     CATALOG PREAMBLE. 
# 
  
      DEF PRMFCTL   (N) #(PRM$ENTRC[(N)]*FCTENTL)#;  # *FCT* LENGTH # 
  
                                     # *AST* LENGTH # 
      DEF PRMASTL    (N) #(PRM$ENTRC[N]*ASTENTW) #; 
  
      COMMON BMCTCOM; 
  
        BEGIN  # BMCTCOM #
                                     # $$ # 
        ITEM $$BMCT$$   C(20) = "****** COMBMCT *****"; 
                                     # $$ # 
  
        ITEM FPS        U;           # *FCT* POSITION INDEX # 
        ITEM FWD        U;           # *FCT* WORD INDEX # 
  
        BASED 
        ARRAY PREAMBLE [0:MAXSM] S(3);  # M860 CATALOG PREAMBLE # 
          BEGIN 
  
# 
*     PREAMBLE HEADER.
# 
  
          ITEM PRM$FAM    C(00,00,07);  # FAMILY NAME # 
          ITEM PRM$SUBF   U(00,42,06);  # SUBFAMILY DESIGNATOR #
          ITEM PRM$FREE   U(00,48,09);  # UNUSED #
          ITEM PRM$ID     U(00,57,03);  # M860-ID # 
          ITEM PRM$FREE1  U(01,00,60);  # UNUSED #
          ITEM PRM$FREE1A U(02,00,60);  # UNUSED #
  
# 
*     PREAMBLE SUBCATALOG ENTRIES.
# 
  
          ITEM PRM$SCW1   I(00,00,60);  # SUBCATALOG ENTRY WORD # 
          ITEM PRM$SMID   U(00,00,06);  # SM ID # 
          ITEM PRM$ENTRC  U(00,06,12);  # NUMBER OF FCT/AST ENTRIES # 
          ITEM PRM$FCTLOC U(00,18,15);  # PRU NUMBER OF FCT # 
          ITEM PRM$ASTLOC U(00,33,15);  # PRU NUMBER OF AST # 
  
          ITEM PRM$SCW2   I(01,00,60);  # SUBCATALOG ENTRY WORD 2 # 
          ITEM PRM$FREE2  U(01,00,19);  # UNUSED #
          ITEM PRM$PDATE  U(01,19,41);  # LAST PURGE OF ORPHAN FILES #
  
          ITEM PRM$SCW3   U(02,00,60);  # SUBCATALOG ENTRY WORD 3 # 
          ITEM PRM$MXAUS  U(02,00,12);  # AU FOR SHORT FILES #
          ITEM PRM$MXAUL  U(02,12,12);  # AU FOR LONG FILES # 
          ITEM PRM$MXAUGR U(02,24,18);  # AU IN ONE GROUP # 
          ITEM PRM$FREE3  U(02,42,18);  # UNUSED #
          END 
  
        END  # BMCTCOM #
  
      END  # COMBMCT #
  
                                               CONTROL LIST;
