*COMDECK PIGETABLE
_$J+  PAGE EJECT? 
_*****************************
*                            *
*         PIGETABLE          *
*   CREATE SPACES FOR EACH   *
*   TIMER AND LCB TABLES     *
*                            *
*****************************?
_$R-,G-,I-     NON-RECURSIVE
               INTERRUPTABLE ?
_***********************************************************************
*                                                                      *
**OVERVIEW- THIS ROUTINE IS ENTERED BEFORE INITIALIZING ALL THE BUFFER *
*           CONTROL BLOCK ON PIBUF1 AND CREATES BUFFER SPACES FOR      *
*           TIMER AND LCB TABLE.  PIGETABLE ALSO SETS THE              *
*           STARTING ADDRESS AND CLEARS ALL TABLES TO ZERO EXCEPT THE  *
*           1ST LCB WHICH IS USED BY MLIA, CONSOLE AND HIP.            *
*                                                                      *
**INPUT   - STARTING ADDRESS FOR THE TIMER TABLE (B3SBUF).             *
*                                                                      *
**OUTPUT  - 1) SET STARTING ADDRESS FOR EACH TIMER AND LCB TABLES.     *
*           2) INITIALIZE THE 1ST LCB, CLEAR REST OF LCB#S.            *
*           3) CLEAR TIMER TABLE.                                      *
*                                                                      *
**EXTERNAL SUBROUTINES USED                                            *
*           NONE.                                                      *
*                                                                      *
***********************************************************************?
_?
PROCEDURE PIGETABLE;
CONST 
      CLENTIME = 1;                         _LENGTH OF EACH TIMER TABLE?
VAR 
      CFIRST,                               _ADDRESS OF 1ST LCB TABLE  ?
      CSECOND  : INTEGER;                   _ADDRESS OF 2ND LCB TABLE  ?
      CLINESPLUS1 : INTEGER;                _NUMBER OF LINES + 1       ?
_?
BEGIN 
  BLTIMTBL := B3SBUF.BAINTPTR;              _STARTING ADDRESS OF       ?
                                            _  TIMER TABLE             ?
  CGLCBP   := BLTIMTBL +                    _START ADDR OF PORT  TABLE ?
                      CLENTIME *            _LENGTH OF EACH TABLE      ?
                              (C4LCBS + 1); _NUMBER OF LCB#S           ?
  ADDR(CGLCBP'[0], CFIRST);                 _GET ADDRESS OF 1ST LCB    ?
  ADDR(CGLCBP'[1], CSECOND);                _GET ADDRESS OF 2ND LCB    ?
  CLINESPLUS1 := C4LCBS + 1;                _NUMBER OF LCB#S           ?
  SIZLCB   := CSECOND - CFIRST;             _LENGTH OF AN LCB          ?
  CSUBLCBP := CGLCBP +                      _START ADDR OF LCB TABLE   ?
                 SIZLCB *                   _LENGTH OF LCB             ?
                    CLINESPLUS1;            _NUMBER OF LCB#S           ?
  B3SBUF.BAINTPTR := CSUBLCBP +             _START ADDR OF SUB LCB#S   ?
                        SIZLCB *            _LENGTH OF SUB LCB         ?
                           C4SUBLCBS;       _CLEAR ALL TIMER, PORT     ?
  
  WITH CSUBLCBP'[1] DO                      _INITIALIZE MLIA SUB LCB   ?
  BEGIN 
    BZLINO.BDSUBPORT := $0001;              _SUBPORT NUMBER            ?
    BZLTYP           := $0001;              _LINE TYPE                 ?
    BZTIPTYP         := N0MLIA;             _TIP TYPE                  ?
    BZTAPEX          := FALSE;              _NO TIMAL APPENDAGE        ?
    BZSTATE          := 0;                  _TIP STATE                 ?
    ADDR(CGTCBS[0],BZTCBPTR);               _POINTER TO TCB            ?
    BZNUMSUBS        := 2;                  _NUMBER OF SUBPORTS        ?
  END;
  WITH CSUBLCBP'[2] DO                      _INITIALIZE CONSOLE SUB LCB?
  BEGIN 
    BZLINO.BDSUBPORT := $0002;              _SUBPORT NUMBER            ?
    BZLTYP           := 0;                  _LINE TYPE                 ?
    BZTIPTYP         := N0CONSOLE;          _TIP TYPE                  ?
    BZTAPEX          := FALSE;              _NO TIMAL APPENDAGE        ?
    BZSTATE          := 0;                  _TIP STATE                 ?
    ADDR(CGTCBS[1],BZTCBPTR);               _POINTER TO TCB            ?
  END;
ADDR(CSUBLCBP'[1],CGTCBS[0][2]);            _PUT POINTERS TO SUBLCBS   ?
ADDR(CSUBLCBP'[2],CGTCBS[1][2]);            _INTO THE FIXED TCBS       ?
  WITH CGLCBP'[0] DO
  BEGIN                                     _INITIALIZE 1ST LCB        ?
    BZTAPEX   := FALSE;                     _SET TIMAL APPENDAGE       ?
    BZSUB1PTR := CSUBLCBP;                  _SET ADDR OF 1ST SUB LCB   ?
    BZNUMSUBS := C4SUBLCBS;                 _SET NUMBER OF SUBPORTS    ?
  END;
_?
  INST($C400,BLTIMTBL,$6400,ADDRTIME);      _SET LOCATION OF TIMER TBL ?
  INST($C400,CSUBLCBP,$6400,ADDRSUBS);      _SET LOCATION OF SUB LCBS  ?
  INST($C400, CGLCBP, $6400, ADDRLCB);      _SET LOCATION OF LCB       ?
  INST($C400, BQCIBPTR, $6400, CIBADDR);    _SET LOCATION OF CIB       ?
     INST($C400,NAPORT,$6400,PORTADR);      _ SET UP PORT ADDRESS      ?
END;  _PIGETABLE? 
