*COMDECK PIINIT 
_$J+  PAGE EJECT? 
_$R-,G-,I-? 
_ 
************************************************************************
*                                                                      *
*              * *   P I I N I T   * *                                 *
*                                                                      *
*              MISCELANOUS INITIALIZATION                              *
*                                                                      *
************************************************************************
*                                                                      *
** OVERVIEW -  THIS ROUTINE BUILDS THE CCP ON-LINE MESSAGE TO THE      *
*              CONSOLE.  IT ALSO SETS UP THE LOW CORE BRANCH TO ZERO   *
*              HALT ROUTINE.  IF A LINE  PRINTER IS  DEFINED, IT WILL  *
*              BE INITIALIZED.                                         *
*              PIINIT ALSO BUILDS REQUIRED SN TABLES FROM TERMINAL     *
*              LLCBS.                                                  *
*                                                                      *
** INPUTS -    CCP ON LINE NAME FROM COMDECK - PIMSG                   *
*                                                                      *
** OUTPUTS -   CCP ON LINE MESSAGE                                     *
*              HALT ROUTINE IN LOW CORE                                *
*              LINE PRINTER INITIALIZED                                *
*              SN TABLES BUILT.                                        *
*                                                                      *
** EXTERNAL SUBROUTINES USED -                                         *
*              PBGET1BF - GET A BUFFER                                 *
*              PBLOAD   - LOAD A MESSAGE INTO A BUFFER                 *
*              PBQBLKS  - QUEUE MESSAGE TO CONSOLE                     *
*              PBWRITE  - SET CONSOLE IN WRITE MODE                    *
*              PN2ADD   - ADD AN ENTRY TO A TYPE 2 TABLE.              *
*             PN1GTPTR - FIND AN ENTRY IN A TYPE 1 TABLE.             * 
*                                                                      *
************************************************************************
* 
? 
PROCEDURE PIINIT; 
  
VAR 
      I       : INTEGER;                    _ INDEX CONTROL            ?
      PSRPTR  : 'INTEGER;                   _ POINTER TO PSR VALUE     ?
      PSR     : INTEGER;                    _ ADDRESS OF PSR           ?
      LOWCORE : B0BUFPTR;                   _ POINTER TO LOW CORE      ?
      LOLLPTR : B0BUFPTR;                   _ CURRENT LLCB POINTER     ?
      LOSNPTR : B0BUFPTR;                   _ LOCAL SN TABLE POINTER   ?
      LOCPTR  : B0BUFPTR;                   _ LOCAL POINTER            ?
  
VALUE 
      LOWCORE = 0;                          _ SET TO LOC ZERO          ?
BEGIN                                                                    31OCT75
  C0CNSLTCB := CGLCBP'[0].BZSUB1PTR'[2].    _ CONSOLE TCB ADDRESS      ?
                                  BZTCBPTR; 
_  ******  CAUTION - HIDDEN *IF DEF,CONSOLE  ******  ?
*IF DEF,CONSOLE 
   IF TOCONSOLE                             _IF CONSOLE DRIVER PRESENT ?
  THEN
    PBWRITE (TTYSTAT,TTYRITE,TTY);          _ SET CONSOLE IN WRITE MOD ?
*ENDIF
_  ******  CAUTION - HIDDEN *ENDIF FOR CONSOLE CODE  ******  ?
_ 
*              ---- SET UP BRANCH TO ZERO HALT ---- 
? 
  WITH LOWCORE' DO                          _ BUFFER ADDRESS           ?
  BEGIN 
    FOR I := 1 TO 14 DO                     _ SET UP NOP S             ?
    BIINT[I]  := $0B00;                     _ SET EACH WORD TO NOP     ?
    BIINT[15] := $5400;                     _ RTJ TO ROUTINE           ?
    ADDR(PBHALT,BIINT[16]);                 _ PBHALT ADDRESS           ?
    BIINT[17] := 17;                        _ ADDRESS OF HALT CODE     ?
    BIINT[18] := J0BRZERO;                  _ BRANCH TO ZERO HALT CODE ?
  END;
_*********************************************************************** UPDATES
*    INITIALIZE SET CONTAING DATA BLOCK,PACKET TYPES                   * UPDATES
***********************************************************************? UPDATES
  J0DATAMSG := [];
_ 
*              ---- INITIALIZE LOCAL SN TABLES FOR LLCBS ---- 
? 
 WITH BMLLCB DO                             _ WITH ACTIVE LIST OF LLCBS?
  IF BMFRST " NIL                           _ IF LOGICAL LINKS TO THIS ?
  THEN                                      _ NODE EXIST               ?
    BEGIN 
    LOLLPTR := BMFRST;                      _ POINT TO FIRST  LINK     ?
    WHILE BMLST \ LOLLPTR DO                _ WHILE NOT AT LAST LINK   ?
      BEGIN 
      WITH LOLLPTR'.BLLLCB.BLSPART DO       _ WITH LOCAL LL PTR        ?
        IF BLCDS                            _ FOR TERMINAL LLCB ONLY   ?
        THEN
          BEGIN 
          PN2ADD(BLSN,LOSNPTR,LOLLPTR);     _ ADD LL TO LOCAL SN TABLE ?
          IF BLCHAIN = NIL                  _ IF LAST LL IN CHAIN      ?
          THEN
            BEGIN 
            LOCPTR := PN1GTPTR(BLDN,        _ PUT POINTER TO LOCAL SN  ?
                                 DELOCDN);
            LOCPTR'.BRTYP1.BRPTR := LOSNPTR;_ TABLE INTO DN TABLE      ?
            LOSNPTR := NIL;                 _ CLEAR SN POINTER         ?
            END 
          ELSE
            BLCHAIN := NIL;                 _ CLEAR TEMP LL CHAIN PTR  ?
          END; _ IF BLCDS ? 
      LOLLPTR := LOLLPTR + NHLLCBSIZE;      _ GET NEXT LLCB            ?
      END; _ IF BMLST \ LOLLPTR ? 
    END; _ IF BMFRST " NIL ?
  
END;
