*DECK DB$BGTF*
USETEXT BRGENTX 
USETEXT CUGBATX 
      PROC DB$BGTF(ERRORFLAG);
      BEGIN 
 #
* *   DB$BGTF - GET TAPE FILE                    PAGE  1
* *   E. P. JOHNSON                              DATE  06/11/81 
* * 
* 
* DC  PURPOSE 
* 
*     TO GET A TAPE FILE ON NOS VIA THE LABEL MACRO.
* 
* DC  ENTRY CONDITIONS
* 
*     PARAMETERS
# 
      ITEM ERRORFLAG B;                # ERROR FLAG - OUTPUT.          #
# 
*     ASSUMPTIONS 
* 
*     MDSCINFO               MD SCHEMA INFORMATION TABLE HAS BEEN 
*                            READ IN. 
*       MDSIJOBP             MD JOB CONTROL INFORMATION TABLE EXISTS. 
* 
* DC  EXIT CONDITIONS 
* 
*     NORMAL - THE FILE HAS BEEN LABELED WITHOUT ERROR. THE ERROR 
*              FLAG IS SET TO FALSE.
* 
*     ABNORMAL - AN ERROR OCCURRED DURING THE LABEL. ERROR MESSAGE
*                DFERR14 IS ISSUED AND THE ERROR FLAG IS SET TO TRUE. 
* 
* DC  CALLING ROUTINES
* 
*     DB$BDLG                DUMP THE JOURNAL LOG FILE TO TAPE. 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$BERR;               # DBREC ERROR PROCESSOR.        #
      XREF PROC DB$RELA;               # LABEL MACRO.                  #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     INSERTITEMI            SPECIAL MESSAGE TEXT FORMATER INTEGER
*                            INSERTION ITEM.
* 
* DC  DESCRIPTION 
* 
*     - SET THE BASED ARRAY POINTER OF THE MD JOB CONTROL INFORMATION 
*       (JCI) TABLE.
* 
*     - SET UP THE FET. 
* 
*     - IF THE TRACK TYPE SPECIFIED IN THE TABLE IS 7 TRACK, THEN SET 
*       THE TRACK FLAG IN THE FET TO FALSE. ELSE SET THE TRACK FLAG TO
*       TRUE (9 TRACK). 
* 
*     - EXTRACT THE APPROPRIATE DENSITY CODE FROM THE DENSITY TABLE,
*       USING THE TAPE DENSITY FIELD (FROM THE JCI TABLE) AS A
*       SUBSCRIPT AND PLACE IT INTO THE DENSITY CODE FIELD OF THE FET.
* 
*     - ISSUE THE LABEL MACRO.
* 
*     - IF AN ERROR OCCURRED DURING THE LABEL, THEN ISSUE AN ERROR
*       MESSAGE AND SET THE ERROR FLAG TO TRUE. ELSE SET THE ERROR FLAG 
*       TO FALSE. 
* 
*     - RETURN TO THE CALLER. 
* 
 #
  
# LOCAL DEFS.                                                          #
  
      DEF DFDENDEFAULT #0#;            # DEFAULT DENSITY CODE.         #
      DEF DFDENGE      #5#;            # GE DENSITY CODE.              #
      DEF DFDENHDHY    #3#;            # HD AND HY DENSITY CODE.       #
      DEF DFDENHI      #1#;            # HI DENSITY CODE.              #
      DEF DFDENLO      #2#;            # LO DENSITY CODE.              #
      DEF DFDENPE      #4#;            # PE DENSITY CODE.              #
      DEF DFDENTBLUB   #6#;            # ARRAY UPPER BOUND OF THE      #
                                       # DENSITY TABLE.                #
      DEF DFLABFETLEN #14#;            # LABEL FET LENGTH IN WORDS.    #
      DEF DFLOGDUMP #"LOGDUMP"#;       # LFN OF THE TAPE FILE.         #
  
# LOCAL VARIABLES.                                                     #
  
      ITEM INDEX I;                    # LOOP VARIABLE.                #
  
      ARRAY DENSITY [0:DFDENTBLUB];    # TAPE DENSITY TABLE.           #
        BEGIN 
        ITEM DENCODE U(00,00,03) =
  
          [ DFDENDEFAULT,              # DEFAULT DENSITY.              #
            DFDENHDHY,                 # HD (800 CPI) DENSITY.         #
            DFDENPE,                   # PE (1600 CPI) DENSITY.        #
            DFDENGE,                   # GE (6250 CPI) DENSITY.        #
            DFDENLO,                   # LO (200 BPI) DENSITY.         #
            DFDENHI,                   # HI (556 BPI) DENSITY.         #
            DFDENHDHY  ];              # HY (800 BPI) DENSITY.         #
        END 
  
  
      ARRAY LABFET [0:0] S(DFLABFETLEN);
        BEGIN 
        ITEM LABWD0   U(00,00,60);     # FULL WORD.                    #
        ITEM LABLFN   C(00,00,07);     # LOGICAL FILE NAME.            #
        ITEM LABNOSAT U(00,42,08);     # ABNORMAL TERMINATION FIELD.   #
                                       # FIELD IN BITS 50-58 IS NOT    #
                                       # REFERENCED.                   #
        ITEM LABCOMP  B(00,59,01);     # COMPLETE/BUSY FLAG.           #
        ITEM LABWD1   U(01,00,60);     # FULL WORD.                    #
                                       # FIELDS IN BITS 0-14 ARE NOT   #
                                       # REFERENCED.                   #
        ITEM LABEP    B(01,15,01);     # ERROR PROCESSING FLAG.        #
                                       # FIELDS IN BITS 16-35 ARE NOT  #
                                       # REFERENCED.                   #
        ITEM LABLEN   U(01,36,06);     # ADDITIONAL LENGTH OF THE FET  #
                                       # OVER THE NORMAL FIVE WORDS.   #
                                       # FIELD IN BITS 42-59 IS NOT    #
                                       # REFERENCED.                   #
        ITEM LABWD8   U(08,00,60);     # FULL WORD.                    #
        ITEM LABRW    B(08,00,01);     # READ/WRITE FLAG.              #
        ITEM LABTLABL B(08,01,01);     # TAPE IS TO BE LABELED.        #
                                       # FIELD IN BIT 2 IS NOT         #
                                       # REFERENCED.                   #
        ITEM LABTTYP  B(08,03,01);     # TAPE TRACK TYPE - TRUE = NT.  #
                                       # BITS 4-5 ARE UNUSED.          #
        ITEM LABTDEN  U(08,06,03);     # TAPE DENSITY CODE.            #
                                       # FIELDS IN BITS 9-18 ARE NOT   #
                                       # REFERENCED.                   #
        ITEM LABRING  B(08,19,01);     # WRITE ENABLE RING IS REQUIRED.#
                                       # FIELDS IN BITS 20-21 ARE NOT  #
                                       # REFERENCED.                   #
        ITEM LABNOABT B(08,22,01);     # DO NOT ABORT ON AN            #
                                       # IRRECOVERABLE WRITE PARITY    #
                                       # ERROR.                        #
                                       # FIELD IN BIT 23 IS NOT        #
                                       # REFERENCED.                   #
        ITEM LABDFORM U(08,24,06);     # TAPE DATA FORMAT.             #
                                       # FIELD IN BITS 30-35 IS NOT    #
                                       # REFERENCED.                   #
        ITEM LABBSIZE U(08,36,24);     # BLOCK SIZE.                   #
        ITEM LABWD9   U(09,00,60);     # FULL WORD.                    #
                                       # FIELD IN BITS 0-35 IS NOT     #
                                       # REFERENCED.                   #
        ITEM LABFACC  C(09,36,01);     # FILE ACCESSIBILITY.           #
                                       # FIELDS IN BITS 42-59 ARE NOT  #
                                       # REFERENCED.                   #
        END 
  
  
      BASED ARRAY MDJOB;
        BEGIN 
*CALL MDJOBDCLS 
        END 
  
  
# S T A R T   O F   D B $ B G T F   E X E C U T A B L E   C O D E      #
  
  
# SET THE BASED ARRAY POINTER OF THE MD JOB CONTROL INFORMATION (JCI)  #
# TABLE.                                                               #
  
      P<MDJOB> = LOC(MDSCINFO) + MDSIJOBP[0]; 
  
# SET UP THE FET.                                                      #
  
      P<PUTENTRY> = LOC(LABFET);
  
      FOR INDEX = 0 STEP 1 UNTIL DFLABFETLEN - 1
      DO
        BEGIN 
        PUTUNSIG[INDEX] = 0;           # ZERO OUT EACH WORD OF THE FET.#
        END 
  
      LABLFN[0] = DFLOGDUMP;           # LFN.                          #
      LABCOMP[0] = TRUE;               # COMPLETE/BUSY FLAG.           #
                                       # TRUE = NOT BUSY.              #
      LABEP[0] = TRUE;                 # ERROR PROCESSING FLAG.        #
      LABLEN[0] = 9;                   # ADDITIONAL LENGTH OF THE FET  #
                                       # OVER THE NORMAL FIVE WORDS.   #
      LABRW[0] = TRUE;                 # READ/WRITE FLAG - TRUE = OPEN/#
                                       # WRITE IS TO BE PERFORMED.     #
      LABTLABL[0] = TRUE;              # TAPE IS TO BE LABELED.        #
      LABRING[0] = TRUE;               # WRITE ENABLE RING IS REQUIRED.#
      LABNOABT[0] = TRUE;              # DO NOT ABORT ON AN            #
                                       # IRRECOVERABLE WRITE PARITY    #
                                       # ERROR.                        #
      LABDFORM[0] = 0;                 # TAPE DATA FORMAT = I, BINARY. #
      LABBSIZE[0] = 512;               # BLOCK SIZE.                   #
      LABFACC[0] = "A";                # FILE ACCESSIBILITY, A = OWNER.#
  
# IF THE TRACK TYPE SPECIFIED IN THE TABLE IS 7 TRACK, THEN SET THE    #
# TRACK FLAG IN THE FET TO FALSE, ELSE SET THE TRACK FLAG TO TRUE      #
# (9 TRACK).                                                           #
  
      IF MDJOBTTYP[0] 
      THEN
        BEGIN 
        LABTTYP[0] = FALSE; 
        END 
      ELSE
        BEGIN 
        LABTTYP[0] = TRUE;
        END 
  
# EXTRACT THE APPROPRIATE DENSITY CODE FROM THE DENSITY TABLE, USING   #
# THE TAPE DENSITY FIELD (FROM THE JCI TABLE) AS A SUBSCRIPT           #
# AND PLACE IT INTO THE DENSITY CODE FIELD OF THE FET.                 #
  
      LABTDEN[0] = DENCODE[MDJOBTDEN[0]]; 
  
# ISSUE THE LABEL MACRO.                                               #
  
      DB$RELA(LOC(LABFET)); 
  
# IF AN ERROR OCCURRED DURING THE LABEL, THEN ISSUE AN ERROR MESSAGE   #
# AND SET THE ERROR FLAG TO TRUE. ELSE SET THE ERROR FAG TO FALSE.     #
  
      IF LABNOSAT[0] NQ 0 
      THEN
        BEGIN 
        INSERTITEMI = LABNOSAT[0];
        DB$BERR(DFERR14); 
        ERRORFLAG = TRUE; 
        END 
      ELSE
        BEGIN 
        ERRORFLAG = FALSE;
        END 
  
# RETURN TO THE CALLER.                                                #
  
      RETURN; 
  
      END 
      TERM
