*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