*DECK FCSIIMT 
USETEXT TEXTFCS 
      PROC FCSIIMT; 
*CALL COPYRITE
# TITLE FCSIIMT - INITIALIZE MANAGED TABLES.                           #
  
      BEGIN                            # FCSIIMT                       #
  
# 
**    FCSIIMT - INITIALIZE MANAGED TABLES.
* 
*     C. J. RAMSAY                     87/11/03 
* 
*     THIS PROCEDURE INITIALIZES THE MANAGED TABLES BY DETERMINING WHERE
*     THE TABLES EXIST AND ALL INFORMATION NECESSARY TO MAINTAIN THE
*     TABLES. 
* 
*     PROC FCSIIMT
* 
*     ENTRY    5400 TABLE LOADED AT RA+100. 
* 
*     EXIT     LOADBASE  = FWA OF OVERLAY AREA. 
*              P<MREQ>   = PTR TO MEMORY REQUEST WORD.
*              P<MTABLE> = PTR TO FIRST MANAGED TABLE (*TSTART*). 
*              NTAB      = NUMBER OF MANAGED TABLES.
*              MAXFL     = MAXIMUM FIELD LENGTH.
*              FL        = CURRENT FIELD LENGTH.
*              AVAIL     = AVAILABLE MEMORY FOR TABLE EXPANSION.
*              TABLE POINTER AND LENGTHS INITIALIZED. 
* 
*     METHOD   EXAMINE THE 5400 TABLE OF THE (0,0) OVERLAY. 
*              SET *LOADBASE* TO THE START OF THE OVERLAY AREA , AND
*              SET *TSTART* TO THE HIGHEST HIGH ADDRESS.
*              INITIALIZE TABLE POINTERS AND MANAGEMENT INFORMATION.
* 
# 
  
# 
****  PROC FCSIIMT - XREF LIST
# 
      XREF
        BEGIN 
        PROC MEMRY;                    # REQUEST CENTRAL MEMORY        #
        PROC FCSMRFL;                  # REQUEST FIELD LENGTH CHANGE   #
        END 
# 
****
# 
      ITEM I             I;            # LOOP INDUCTION VARIABLE       #
      CONTROL EJECT;
# 
*     START MAIN PROCEDURE
# 
      P<EACPM> = O"100";               # BASE 5400 TABLE POINTER       #
      LOADBASE = EAC$MIFL[0];          # SET START OF OVERLAY AREA     #
      TSTART   = EAC$HHA[0];           # SET START OF MANAGED TABLES   #
      TSTARTL  = 0;                    # DUMMY FIRST TABLE LENGTH      #
  
      P<MREQ>   = LOC(MEMWORD);        # BASE MEMORY REQUEST WORD PTR  #
      P<MTABLE> = LOC(TSTART);         # BASE MANAGED TABLE POINTER    #
  
      NTAB = (LOC(TEND) - LOC(TSTART))
              / 2 - 1;                 # NUMBER OF MANAGED TABLES      #
      FOR I = 1 STEP 1 UNTIL NTAB DO   # LOOP THRU ALL MANAGED TABLES  #
        BEGIN 
        TABF[I] = TSTART;              # SET FWA OF TABLE              #
        TABL[I] = 0;                   # SET TABLE LENGTH TO ZERO      #
        END;
  
      MEMRY (-1, MREQ);                # REQUEST MAXIMUM FIELD LENGTH  #
      MAXFL = MREQ$FL[0];              # SAVE MAXIMUM LFIELD LENGTH    #
  
      MEMRY (0, MREQ);                 # REQUEST CURRENT FIELD LENGTH  #
      FL = MREQ$FL[0];                 # SAVE CURRENT FIELD LENGTH     #
  
      TEND  = FL - 8;                  # SET DUMMY LAST TABLE POINTER  #
      TENDL = 8;                       # SET DUMMY LAST TABLE LENGTH   #
  
      AVAIL = TEND - TSTART;           # AVAILABLE TABLE EXPANSION     #
      IF AVAIL LS 0 
      THEN
        BEGIN                          # NOT ENOUGH SPACE FOR TABLES   #
        FCSMRFL (-AVAIL);              # REQUEST MEMORY SO TABLES FIT  #
        END;
  
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FCSIIMT                       #
  
      TERM
