*DECK     CSSANO
USETEXT TEXTCS
USETEXT TEXTSS
USETEXT TXTAPSS 
USETEXT TXTSMCS 
      PROC CSSANO;
# TITLE - ACQUIRE NEW OPERATOR.                                        #
      BEGIN 
# 
**    CSSANO - ACQUIRE NEW OPERATOR.
* 
*     D.K. ENDO    82/03/09 
* 
*     THIS PROCEDURE, GIVEN A HOP/STRT OR A CON/REQ, INITIALIZES THE
*     APPROPRIATE OCB AND MAKES QUEUE ENTRIES AS NEED FOR THE OPERATOR
*     CONNECTION. 
* 
*     ENTRY        1. ENTRIES IN THE PROTOCOL EVENT QUEUE.
* 
*     EXIT         1. APPROPRIATE OCB INITIALIZED.
*                  2. ENTRIES IN THE CONNECTION TRAFFIC QUEUE.
* 
# 
# 
****  PROC CSSANO - XREF LIST BEGINS. 
# 
      XREF
        BEGIN 
        PROC SSBCBW;         # CLEAR BIT IN WORD                       #
        PROC SSBSBW;         # STORE BIT IN WORD                       #
        PROC SSTAQE;         # ADD QUEUE ENTRY                         #
        END 
# 
****
# 
      DEF INTMSG1L # 40 #;   # INITIAL NOP MESSAGE LENGTH              #
      DEF INTMSG2L # 50 #;   # INITIAL DOP MESSAGE LENGTH              #
      DEF NOP$BIT # 39 #;    # NOP BIT POSITION IN AAWC WORD           #
      DEF NTO$BIT # 49 #;    # NO TIME OUT BIT POSITION IN AAWC WORD   #
      DEF SHDMSGL # 30 #;    # SHUT DOWN MESSAGE LENGTH                #
  
      ITEM HR$WC I = 4;      # HISTORY REQUEST QUEUE ENTRY WORD COUNT  #
      ITEM I;                # LOOP INDUCTION VARIABLE                 #
  
  
# 
      THE FOLLOWING BASED ARRAY IS USED TO POINT TO THE REPORT BIT
      MAPS IN THE NPUCB-S 
# 
      BASED ARRAY FLG$WORD [00:00] S(NPCBSZ$);
        BEGIN 
        ITEM FW$WORD    I(00,00,60);
        END 
  
  
# 
      THE FOLLOWING TWO ARRAYS DEFINE THE ENTRY AND HEADER OF AN ENTRY
      MADE TO THE HISTORY REQUEST QUEUE WHEN A HOP/STRT REQUEST COMES 
      IN. 
# 
      ARRAY HR$ENT [00:01] S(1);
        BEGIN 
        ITEM HRE$TXT    C(00,00,10) = ["HI."];
        ITEM HRE$VAL    C(01,00,07) = ["HI0"];
        ITEM HRE$STYP   C(01,42,03) = ["VEB"];
        END 
      ARRAY HR$HDR [00:00] S(1);
        BEGIN 
        ITEM HRH$SPC    U(00,00,06) = [ 1 ];
        ITEM HRH$APC    U(00,06,06) = [ 0 ];
        ITEM HRH$CWC    U(00,12,06) = [ 1 ];
        ITEM HRH$OID    U(00,18,12) = [ HOPORD$ ];
        ITEM HRH$CV     C(00,30,03) = [ "HI0" ];
        ITEM HRH$CCC    U(00,48,12) = [ 3 ];
        END 
# 
      THE FOLLOWING ARRAYS ARE MESSAGES THAT ARE SENT TO THE NOP WHEN 
      HE/SHE CONNECTS TO CS.
# 
      ARRAY INTMSG1 [00:00] S(4); 
        BEGIN 
        ITEM IM1$TXT    C(00,00,35) = 
                             ["HELLO, YOU ARE NOW AN NPU OPERATOR."]; 
        ITEM IM1$ZBYT   U(03,30,30) = [0];
        END 
      ARRAY INTMSG2 [00:00] S(5); 
        BEGIN 
        ITEM IM2$TXT    C(00,00,41) = 
                   ["HELLO, YOU ARE NOW A DIAGNOSTIC OPERATOR."]; 
        ITEM IM2$ZBYT   U(04,06,54) = [0];
        END 
      ARRAY SHDMSG [00:00] S(3);
        BEGIN 
        ITEM SD$TXT     C(00,00,28) = 
                             ["HOST IDLE DOWN IN PROGRESS."]; 
        ITEM SD$ZBYT    U(02,48,12) = [0];
        END 
# 
      THE FOLLOWING IS USED TO POINT TO THE APPROPRIATE MESSAGE TO BE 
      SENT TO THE NOP 
# 
      BASED ARRAY LINTXT [00:00] S(4);
        BEGIN 
        ITEM LT$TXT     C(00,00,40);
        END 
      CONTROL EJECT;
#                                                                      #
#                            CSSANO CODE BEGINS HERE                   #
#                                                                      #
# 
*     IF THIS SM IS A HOP/STRT, THEN SET THE PAGE LENGTH IN THE HOP-S 
*     OCB THE DEFAULT K-DISPLAY VALUE, MAKE A HISTORY REQUEST QUEUE 
*     ENTRY, SET STATE FOR HOP-S OCB, AND SET THE PROTOCOL CODE OF
*     THE PROTOCOL RESPONSE TO HOP/STRT/N.  SEND THE PROTOCOL RESPONSE. 
*     FOR EACH NPUCB SET THE REPORT FLAG FOR THE HOP. 
# 
      IF WCB$SMID[0] EQ SMID"HOPSTRT" 
      THEN
        BEGIN 
        OC$TNAM[HOPORD$] = "HOSTCS";
        OC$PL[HOPORD$] = HOPLPL[0] - 1; 
        OC$RPL[HOPORD$] = HOPRPL[0];
        OC$ACN[HOPORD$] = HOPORD$;
        OC$UNAM[HOPORD$] = " "; 
        OC$TYPE[HOPORD$] = OPTYP"HOP";
        SSTAQE(P<HRQ>,HR$WC,HR$HDR,HR$ENT); 
  
        WCB$SMID[1] = SMID"HOPSRTN";
        WCB$WC[1] = 2;
        ABHWORD[1] = 0; 
        ABHADR[1] = HOPORD$;
        OC$STATE[HOPORD$] = TRUE; 
        SSTAQE(P<CNQ>,WCBUF[1],ABH[1],CSSM[1]); 
  
        P<FLG$WORD> = LOC(NPU$RFLGS[0]);
        FOR I=0 STEP 1 UNTIL CSNPCNT-1
        DO
          BEGIN 
          SSBCBW(FLG$WORD[I],HOPORD$) ; 
          END 
        END 
      ELSE
# 
*     IF THIS SM IS A CON/REQ, THEN SET TERMINAL NAME, USER NAME AND
*     PAGE LENGTH OF OCB TO CORRESPONDING FIELDS IN CON/REQ, SET THE
*     TIME OUT FLAG IN THE OCB ACCORDING THE CTIM BIT IN AAWC WORD. 
*     IF CS SHUTDOWN IS IN PROGRESS, THEN SEND THE INITIAL MESSAGE WITH 
*     THE INPUT ALLOWED FLAG CLEARED AND SEND IDLE DOWN MESSAGE WITH
*     THE FLAG SET, OTHERWISE JUST SEND THE INITIAL MESSAGE WITH THE
*     INPUT ALLOWED FLAG SET.  SET THE PROTOCOL CODE OF PROTOCOL
*     RESPONSE TO CON/REQ/H.  FOR EACH NPUB CLEAR THE REPORT FLAG FOR 
*     THIS OPERATOR.
# 
        BEGIN 
        OC$TNAM[CONACN[0]] = CONTNM[0]; 
        OC$ACN[CONACN[0]] = CONACN[0];
        OC$UNAM[CONACN[0]] = CONUSE[0]; 
        OC$PL[CONACN[0]] = CONPL[0];
        OC$STATE[CONACN[0]] = TRUE; 
        IF B<NTO$BIT,1>CONAAWC[0] EQ 1
        THEN
          BEGIN 
          OC$NTO[CONACN[0]] = TRUE; 
          END 
        ELSE
          BEGIN 
          OC$NTO[CONACN[0]] = FALSE;
          END 
        IF B<NOP$BIT,1>CONAAWC[0] EQ 1
        THEN
          BEGIN 
          OC$TYPE[CONACN[0]] = OPTYP"NOP";
          END 
        ELSE
          BEGIN 
          OC$TYPE[CONACN[0]] = OPTYP"DOP";
          END 
        WCB$WORD[1] = 0;
        WCB$SMID[1] = SMID"CONREQN";
        WCB$WC[1] = 2;
        ABHWORD[1] = 0; 
        ABHADR[1] = ABHADR[0];
        SSTAQE(P<CNQ>,WCBUF[1],ABH[1],CSSM[1]); 
        IF CSSTATE
        THEN                 # IF TRUE, THEN GRADUAL SHUT DOWN         #
          BEGIN 
          WCB$IAF[1] = FALSE; 
          SSTAQE(P<CNQ>,WCBUF[1],ABH[1],LINTXT[0]); 
          WCB$WC[1] = 2 + (SHDMSGL / 10); 
          ABHTLC[1] = SHDMSGL;
          P<LINTXT> = LOC(SHDMSG);
          END 
        ELSE IF OC$TYPE[CONACN[0]] EQ OPTYP"NOP"
        THEN
          BEGIN 
          WCB$SMID[1] = SMID"TTEXT";
          WCB$WC[1] = 2 + (INTMSG1L / 10);
          ABHTLC[1] = INTMSG1L; 
          P<LINTXT> = LOC(INTMSG1); 
          END 
        ELSE
          BEGIN 
          WCB$SMID[1] = SMID"TTEXT";
          WCB$WC[1] = 2 + (INTMSG2L / 10);
          ABHTLC[1] = INTMSG2L; 
          P<LINTXT> = LOC(INTMSG2); 
          END 
        WCB$IAF[1] = TRUE;
        SSTAQE(P<CNQ>,WCBUF[1],ABH[1],LINTXT[0]); 
  
        P<FLG$WORD> = LOC(NPU$RFLGS[0]);
        FOR I=0 STEP 1 UNTIL CSNPCNT-1
        DO
          BEGIN 
          SSBCBW( FLG$WORD[I] , ABHADR[0] );
          END 
        END 
  
      RETURN;                # **** RETURN ****                        #
      END # CSSANO #
      TERM
