*DECK CSCPHT
USETEXT TEXTCS
USETEXT TEXTSS
USETEXT TXTAPSS
PROC CSCPHT;
# TITLE CSCPHT - PREPARE HOP TEXT. #
BEGIN # CSCPHT #
#
** CSCPHT - PREPARE HOP TEXT.
*
* D. G. DEPEW. 82/02/25.
*
* THIS PROCEDURE PROCESSES TEXT LINES (TERMINAL TEXT) FROM THE
* I-LAYER DESTINED FOR THE HOP. ITS FUNCTION IS TO FORMAT THE TEXT
* INTO A HOP/DIS SM AND EITHER ISSUE IT, QUEUE IT OR DISCARD IT
* AS APPROPRIATE.
*
* PROC CSCPHT
*
* ENTRY WCBUF[0] = WORD COUNT WORD FROM ORIGINAL CONNECTION
* TRAFFIC QUEUE (*CNQ*) ENTRY (CONTAINS THE
* INPUT ALLOWED AND HOP ALERT FLAGS).
* ABHBUF[0] = APPLICATION BLOCK (EVENT) HEADER FOR THE TEXT
* (BASED ARRAY *ABH* IN *TXTAPSS* POINTS HERE).
* MSGBUF[0] = DISPLAY CODED TEXT LINE (BASED ARRAY *APSM*
* IN *TXTAPSS* POINTS HERE).
*
* EXIT ONE OR MORE OF THE FOLLOWING IN ACCORDANCE WITH THE STATE
* OF THE HOP PSEUDO ACN AND WHETHER PAGE WAIT IS IN EFFECT:
* - A HOP/DIS SM FOR THE TEXT HAS BEEN PLACED IN THE
* OUTGOING TRAFFIC QUEUE (*OTQ*).
* - THE TEXT HAS BEEN PLACED IN THE WAITING BLOCK QUEUE
* (*WBQ*) IN HOP/DIS FORMAT PENDING PAGE TURN.
* - THE TEXT HAS BEEN DISCARDED.
* - A CON/CB SM HAS BEEN FORMATTED AND PLACED IN THE
* PROTOCOL EVENT QUEUE (*PEQ*).
#
#
**** PROC CSCPHT - XREF LIST.
#
XREF
BEGIN
PROC MOVE; # MOVE STORAGE DIRECT ADDRESSING (MACREL) #
PROC SSTAQE; # ACCEPT QUEUE ENTRY #
PROC SSTETS; # ENLARGE TABLE SPACE ANYWHERE IN TABLE #
END
#
****
#
DEF ODWC$ #4#; # *OUTPUT DISCARDED* FAKE Q NTRY WD COUNT #
DEF RWC$ #3#; # *READY..* FAKE QUEUE ENTRY WORD COUNT #
DEF MTLW$ #2#; # *MORE DATA..* TEXT LENGTH IN WORDS #
ARRAY READY [00:00] S(1);
BEGIN
ITEM R$WD0 U(00,00,60);
ITEM R$TEXT C(00,00,07) = ["READY.."];
ITEM R$ZERO U(00,42,18) = [0];
END
ARRAY RKPAGE [PAGE1:NPG] S(116); # HOP/DIS FOR HELP DISPLAY #
BEGIN
ITEM RK$PAGEPS U(000,00,16) = [NPG(X"D009")]; # PFC/SFC VALUE #
ITEM RK$PAGEZ1 U(000,16,42) = [NPG(0)];
ITEM RK$PAGERS B(000,58,01) = [NPG(TRUE)]; # RIGHT SCREEN #
ITEM RK$PAGEIA B(000,59,01) = [NPG(FALSE)]; # INPUT ALLOWED #
# HEADER DISPLAY #
ITEM RK$PAGEL01 C(01,00,20) = [NPG(" *** ")] ;
ITEM RK$PAGEM01 C(03,00,20) = [NPG("CS COMMAND LIST *** ")];
ITEM RK$PAGEN01 C(05,00,18) = [NPG(" ")] ; # DIS HEADER LINE#
ITEM RK$PAGEE01 U(06,48,12) = [NPG(0)]; # LINE TERMINATOR#
ITEM RK$PAGEM02 C(07,00,40) = [NPG(" ")]; # BLANK LINE #
ITEM RK$PAGEN02 C(11,00,18) = [NPG(" (PAGE OF 3) ")];
ITEM RK$PAGEO02 C(11,48,01) = ["1","2","3"];
ITEM RK$PAGEE02 U(12,48,12) = [NPG(0)]; # LINE TERMINATOR#
ITEM RK$PAGEL03 C(13,00,30)= ["CO,NP=NPUNAME(,ON/OFF) ",
# PAGE2 # "EN,TR/LL/LI/TE=NAME. ",
# PAGE3 # "IN. "];
ITEM RK$PAGEM03 C(16,00,28)= ["GAIN (ON) OR GIVE UP CONTROL",
# PAGE2 # "ENABLE NAMED NETWORK ELEMENT",
# PAGE3 # "DISPLAY CURRENT INFORMATION "];
ITEM RK$PAGEE03 U(18,48,12)= [NPG(0)] ;
ITEM RK$PAGEL04 C(19,00,30)= [" ",
# PAGE2 # "EN,LIS/TRS/LLS,NP=NPUNAME. ",
# PAGE3 # " "];
ITEM RK$PAGEM04 C(22,00,28)= [" OF NAMED NPU. ",
# PAGE2 # "ENABLE ALL LINES/TERMINALS/ ",
# PAGE3 # " ABOUT NOPS CONNECTED TO "];
ITEM RK$PAGEE04 U(24,48,12)= [NPG(0)] ;
ITEM RK$PAGEL05 C(25,00,30)= ["CO,NPS(,ON/OFF) ",
# PAGE2 # " ",
# PAGE3 # " "];
ITEM RK$PAGEM05 C(28,00,28)= ["GAIN OR GIVE UP CONTROL OF ",
# PAGE2 # " OR LLINKS ON NAMED NPU. ",
# PAGE3 # " AND NPUS SUPERVISED BY "];
ITEM RK$PAGEE05 U(30,48,12)= [NPG(0)] ;
ITEM RK$PAGEL06 C(31,00,30)= [" ",
# PAGE2 # "EN,LIS/TRS/LLS,NPS. ",
# PAGE3 # " "];
ITEM RK$PAGEM06 C(34,00,28)= [" ALL NPUS CURRENTLY SUPER- ",
# PAGE2 # "ENABLE ALL LINES, TERMINALS ",
# PAGE3 # " THIS CS. "];
ITEM RK$PAGEE06 U(36,48,12)= [NPG(0)] ;
ITEM RK$PAGEL07 C(37,00,30)= [" ",
# PAGE2 # " ",
# PAGE3 # "LO,NP=NPUNAME(,DU/ND). "];
ITEM RK$PAGEM07 C(40,00,28)= [" VISED BY THIS CS. ",
# PAGE2 # " OR LLINKS ON ALL NPUS YOU ",
# PAGE3 # "STOP AND RELOAD NAMED NPU. "];
ITEM RK$PAGEE07 U(42,48,12)= [NPG(0)] ;
ITEM RK$PAGEL08 C(43,00,30)= ["CO,AU(,ON) ",
# PAGE2 # " ",
# PAGE3 # " "];
ITEM RK$PAGEM08 C(46,00,28)= ["AUTOMATICALLY GAIN CONTROL ",
# PAGE2 # " CONTROL AS A NOP. ",
# PAGE3 # " USE THE DUMP (DU) OR NO- "];
ITEM RK$PAGEE08 U(48,48,12)= [NPG(0)] ;
ITEM RK$PAGEL09 C(49,00,30)= [" ",
# PAGE2 # "EN,TES,(NPU=NNAME/LINE=LNAME. ",
# PAGE3 # " "];
ITEM RK$PAGEM09 C(52,00,28)= [" OF ANY NPU THAT COMES ",
# PAGE2 # "ENABLE ALL TERMINALS ON ",
# PAGE3 # " DUMP (ND) OPTION TO OVER- "];
ITEM RK$PAGEE09 U(54,48,12)= [NPG(0)] ;
ITEM RK$PAGEL10 C(55,00,30)= [" ",
# PAGE2 # " ",
# PAGE3 # " "];
ITEM RK$PAGEM10 C(58,00,28)= [" UNDER SUPERVISION OF THIS ",
# PAGE2 # " NAMED NPU OR LINE. ",
# PAGE3 # " WRITE THE LONGTERM DMP FLG"];
ITEM RK$PAGEE10 U(60,48,12)= [NPG(0)] ;
ITEM RK$PAGEL11 C(61,00,30)= [" ",
# PAGE2 # "EN,TES,NPS. ",
# PAGE3 # "LO,NPS(,DU,ND). "];
ITEM RK$PAGEM11 C(64,00,28)= [" CS OR IF ITS CONTROL IS ",
# PAGE2 # "ENABLE ALL TERMINALS ON ALL ",
# PAGE3 # "STOP AND RELOAD ALL NPUS "];
ITEM RK$PAGEE11 U(66,48,12)= [NPG(0)] ;
ITEM RK$PAGEL12 C(67,00,30)= [" ",
# PAGE2 # " ",
# PAGE3 # " "];
ITEM RK$PAGEM12 C(70,00,28)= [" GIVEN UP BY ANOTHER NOP. ",
# PAGE2 # " NPUS YOU CONTROL AS A NOP.",
# PAGE3 # " UNDER YOUR CONTROL. "];
ITEM RK$PAGEE12 U(72,48,12)= [NPG(0)] ;
ITEM RK$PAGEL13 C(73,00,30)= ["CO,AU,OFF. ",
# PAGE2 # "GO,NP=NPUNAME. ",
# PAGE3 # "RE/REPORT,(NPU/NP=NNN/NPUS/ "];
ITEM RK$PAGEM13 C(76,00,28)= ["CANCEL EFFECT OF CO,AU,ON. ",
# PAGE2 # "START THE NAMED NPU. ",
# PAGE3 # "REQUEST TO/TO NOT RECEIVE "];
ITEM RK$PAGEE13 U(78,48,12)= [NPG(0)] ;
ITEM RK$PAGEL14 C(79,00,30)= ["DI,TR/LL/LI/TE=NAME. ",
# PAGE2 # "GO,NPS. ",
# PAGE3 # "NPS),ON/OFF. "];
ITEM RK$PAGEM14 C(82,00,30)= ["DISABLE TRUNK, LLINK,LINE OR",
# PAGE2 # "START ALL THE NPUS YOU ",
# PAGE3 # " UNSOLICITED STATUS REPORT. "];
ITEM RK$PAGEE14 U(84,48,12)= [NPG(0)] ;
ITEM RK$PAGEL15 C(85,00,30)= [" ",
# PAGE2 # " ",
# PAGE3 # "ST/STATUS(,NPU/NP=/NPUS/NPS). "];
ITEM RK$PAGEM15 C(88,00,28)= [" NAMED TERMINAL. ",
# PAGE2 # " CONTROL AS A NOP. ",
# PAGE3 # "STATUS OF NAMED NPU. "];
ITEM RK$PAGEE15 U(90,48,12)= [NPG(0)];
ITEM RK$PAGEL16 C(91,00,30)= ["DU,NP=NPUNAME(,ON/OFF) ",
# PAGE2 # "HI. ",
# PAGE3 # "TS(,NPU/NP=NNN)(,RE/MS=MESAGE "];
ITEM RK$PAGEM16 C(94,00,28)= ["SET LONG TERM DUMP FLAG ON ",
# PAGE2 # "DISPLAY LAST PAGE OF RECENT ",
# PAGE3 # "DIAGNOSTIC TEST COMMAND. "];
ITEM RK$PAGEE16 U(96,48,12)= [0] ;
ITEM RK$PAGEL17 C(97,00,30)= [" ",
# PAGE2 # " ",
# PAGE3 # "/SEND/SE/DROP/DR). "];
ITEM RK$PAGEM17 C(100,00,28)=[" OR OFF FOR NAMED NPU. ",
# PAGE2 # " ACTIVITY HISTORY BUFFER. ",
# PAGE3 # " "];
ITEM RK$PAGEE17 U(102,48,12)=[0] ;
ITEM RK$PAGEL18 C(103,00,30)=["DU,NPS(,ON/OFF) ",
# PAGE2 # "HI,ALL. ",
# PAGE3 # "SE(,TE/LI/LL/NP=ELEMENT,MSG/MS"];
ITEM RK$PAGEM18 C(106,00,28)=["SET DUMP FLAG ON ALL NPUS ",
# PAGE2 # "DISP ALL PAGES OF HISTORY. ",
# PAGE3 # "SEND TO NAMED ELEMENT THE "];
ITEM RK$PAGEE18 U(108,48,12)=[NPG(0)];
ITEM RK$PAGEL19 C(109,00,20)=[" ",
# PAGE2 # " ",
# PAGE3 # "=MESSAGE STRING). "];
ITEM RK$PAGEM19 C(111,00,20)=["TYPE ( TO FORWARD. ",
# PAGE2 # "TYPE ( TO FORWARD. ",
# PAGE3 # "MESSAGE. "];
ITEM RK$PAGEN19 C(113,00,18)=["TYPE ) TO BACKWARD",
# PAGE2 # "TYPE ) TO BACKWARD",
# PAGE3 # "* FOR BACK TO NAM "];
ITEM RK$PAGEE19 U(114,48,12)=[NPG(0)] ;
ITEM RK$PAGEZW U(115,00,60)=[NPG(0)] ; # END BY ZEROED WORD #
END # NINETEEN LINES PER PAGE FOR RIGHT K-DIS #
ARRAY MORDATA [00:00] S(2);
BEGIN
ITEM M$WD0 U(00,00,60);
ITEM M$WD1 U(01,00,60);
ITEM M$TEXT C(00,00,11) = ["MORE DATA.."];
ITEM M$ZERO U(01,06,54) = [0];
END
ARRAY DISCARD [00:00] S(2);
BEGIN
ITEM D$WD0 U(00,00,60);
ITEM D$WD1 U(01,00,60);
ITEM D$TEXT C(00,00,16) = ["OUTPUT DISCARDED"];
ITEM D$ZERO U(01,36,24) = [0];
END
CONTROL EJECT;
PROC SENDLINE;
BEGIN # SENDLINE #
#
* SENDLINE - SEND SINGLE LINE OF TEXT TO THE HOP.
*
* THIS EMBEDDED PROC EITHER OUTPUTS OR ENQUEUES A SINGLE LINE OF
* HOP TEXT DEPENDING UPON WHETHER PAGE WAIT IS IN EFFECT.
*
* PROC SENDLINE
*
* ENTRY 1. THE TEXT IS DEFINED BY *WCBUF[0]*, *ABHBUF[0]* AND
* *MSGBUF[0]* AS DESCRIBED ABOVE.
* 2. THE STATE OF THE HOP PSEUDO ACN IS SUCH THAT IT IS OK
* TO ISSUE HOP/DIS SM'S.
* 3. THE TEXT LENGTH IS ALWAYS A MULTIPLE OF 10 CHARACTERS.
*
* EXIT 1. IF PAGE WAIT IS NOT IN EFFECT (PAGING TURNED OFF OR
* LESS THAN 31 LINES ARE CURRENTLY BEING DISPLAYED), A
* HOP/DIS SM HAS BEEN PLACED IN THE *OTQ*.
* 2. IF PAGE WAIT IS IN EFFECT (PAGING TURNED ON AND EITHER
* 31 OR 32 LINES ARE CURRENTLY BEING DISPLAYED), THE
* TEXT HAS BEEN PLACED IN THE *WBQ* AS FOLLOWS:
* - IF, UPON ENTRY, THERE WAS AN EXISTING *WBQ* ENTRY
* FOR THE HOP AND THAT ENTRY CONTAINED FEWER THAN 31
* LINES, THE TEXT WAS ADDED TO THE END OF THAT ENTRY.
* - IF, UPON ENTRY, THERE WAS NO *WBQ* ENTRY FOR THE HOP
* OR THAT ENTRY CONTAINED 31 OR 32 LINES, A NEW ENTRY
* WAS CREATED.
*
* NOTES 1. HOP ENTRIES IN THE *WBQ* ARE IN HOP/DIS FORMAT AND MAY
* BE MOVED TO THE *OTQ* WITHOUT MODIFICATION, EXCEPT FOR
* THE ADDITION OF THE EXTRA WORD REQUIRED BY NIP.
* 2. WHEN PAGING IS TURNED ON, THE 32ND LINE OF THE DISPLAY
* IS RESERVED FOR THE *MORE DATA..* MESSAGE.
#
ITEM I; # LOOP INDUCTION VARIABLE #
ITEM TLW; # TEXT LENGTH IN WORDS #
ITEM WBC; # WAITING BLOCK COUNT #
ITEM TORD; # ORDINAL WHERE TEXT IS ADDED IN *WBQ* #
ITEM WORD; # WAITING BLOCK QUEUE ENTRY ORDINAL #
BASED ARRAY TEXTLOC [00:00] S(1);
ITEM TL$WORD U(00,00,60);
#
* WE BEGIN BY INITIALIZING SOME ITEMS AND POINTERS PURSUANT TO
* FORMATTING THE HOP/DIS SM.
#
PFCSFC[1] = HOPDIS;
P<TEXTLOC> = LOC (SPMSG1[1]); # WHERE TEXT WILL BE MOVED TO #
TLW = WCB$WC[0] - 2;
#
* IF PAGE WAIT IS NOT IN EFFECT, SIMPLY FORMAT THE HOP/DIS SM, SHIP
* IT, INCREMENT THE COUNT OF LINES BEING DISPLAYED, AND GET OUT.
* PROVIDE FOR THE EXTRA WORD IN THE HOP/DIS SM REQUIRED BY NIP.
#
IF NOT ACN$PWAIT[HOPORD$]
OR ACN$BLCNT[HOPORD$] LS ACN$PL[HOPORD$]
THEN # WE ARE NOT AT A PAGE BOUNDARY #
BEGIN
ABHTLC[1] = TLW + 2; # HOP/DIS TLC IN ABH #
WCB$WORD[1] = TLW + 4; # HOP/DIS ENTRY SIZE IN *OTQ* #
HOPI[1] = WCB$IAF[0]; # INPUT ALLOWED FLAG #
MOVE (TLW, MSGBUF[0], TEXTLOC[0]); # TEXT #
TL$WORD[TLW] = 0; # EXTRA WORD #
SSTAQE (P<OTQ>, WCBUF[1], ABH[1], APSM[1]);
ACN$BLCNT[HOPORD$] = ACN$BLCNT[HOPORD$] + 1; # LINE COUNT #
RETURN;
END
#
* PAGE WAIT IS IN EFFECT. IF THERE ARE CURRENTLY 31 LINES BEING
* DISPLAYED, *MORE DATA..* IS SENT AS THE LAST LINE OF THE PAGE.
#
IF ACN$BLCNT[HOPORD$] EQ ACN$PL[HOPORD$]
THEN # MUST SEND *MORE DATA..* #
BEGIN
ABHTLC[1] = 4; # *MORE DATA..* TLC IN ABH #
WCB$WORD[1] = 6; # *MORE DATA..* ESIZE IN *OTQ* #
HOPI[1] = FALSE; # INPUT NOT NECESSARILY ALLOWED #
SPMSG1[1] = M$WD0[0]; # TEXT #
SPMSG2[1] = M$WD1[0];
SPMSG3[1] = 0; # EXTRA WORD #
SSTAQE (P<OTQ>, WCBUF[1], ABH[1], APSM[1]);
ACN$BLCNT[HOPORD$] = HOPTPL$; # LINE COUNT #
END
#
* THE TEXT MUST BE ENQUEUED IN THE *WBQ*. THE FIRST TASK IS TO
* LOCATE THE LAST HOP ENTRY IN THE *WBQ* (IF THERE IS ONE).
* IF A HOP *WBQ* ENTRY IS EXTANT, ITS ORDINAL MUST, OF COURSE, BE
* LESS THAN THE TOTAL LENGTH OF THE *WBQ*. THE SEARCH TECHNIQUE IS
* SET UP SUCH THAT IF THERE IS NO HOP *WBQ* ENTRY, THE ORDINAL
* RETURNED EQUALS THE *WBQ* LENGTH.
#
WBC = ACN$WBCNT[HOPORD$]; # NUMBER HOP ENTRIES IN *WBQ* #
WORD = WBQL;
FOR I=0 STEP WBQ$ESIZE[I]
WHILE WBC NQ 0
DO # FIND LAST ENTRY #
IF WBQ$ABHACN[I] EQ 0
AND WBQ$SMACN[I] EQ 0
THEN # MUST BE HOP/DIS ASYNCH SM #
BEGIN
WBC = WBC - 1;
WORD = I; # SAVE ORDINAL #
END
#
* IF THERE IS AN EXISTING *WBQ* ENTRY AND IT CONTAINS EXACTLY 31
* LINES OF TEXT, THE *MORE DATA..* MESSAGE MUST BE ADDED TO THE END
* OF THAT ENTRY. THIS WILL RESULT IN A NEW HOP *WBQ* ENTRY BEING
* CREATED FOR THE NEW LINE OF TEXT FURTHER BELOW.
#
IF WORD LS WBQL
AND WBQ$LICNT[WORD] EQ ACN$PL[HOPORD$]
THEN # 31 LINE ENTRY EXISTS #
BEGIN
TORD = WORD + WBQ$ESIZE[WORD]; # WHERE MSG WILL BE ADDED #
SSTETS (P<WBQ>, TORD, MTLW$); # MAKE ROOM #
WBQ$WORD[TORD] = M$WD0[0]; # TEXT #
WBQ$WORD[TORD+1] = M$WD1[0];
WBQ$TLC[WORD] = WBQ$TLC[WORD] + MTLW$; # TLC IN ABH #
WBQ$ESIZE[WORD] = WBQ$ESIZE[WORD] + MTLW$; # ENTRY SIZE #
WBQ$LICNT[WORD] = HOPTPL$; # LINE COUNT #
END
#
* FINALLY, THE NEW LINE OF TEXT CAN BE ENQUEUED. IF A HOP *WBQ*
* ENTRY IS EXTANT AND IT CONTAINS FEWER THAN 31 LINES OF TEXT, THE
* NEW LINE CAN (MUST) BE ADDED TO THE EXISTING ENTRY. OTHERWISE,
* CREATE A NEW ENTRY.
#
IF WORD LS WBQL
AND WBQ$LICNT[WORD] LS ACN$PL[HOPORD$]
THEN # CAN ADD TEXT TO EXISTING NTRY #
BEGIN
TORD = WORD + WBQ$ESIZE[WORD]; # WHERE TEXT WILL BE ADDED #
SSTETS (P<WBQ>, TORD, TLW); # MAKE ROOM #
MOVE (TLW, MSGBUF[0], WBQ[TORD]); # TEXT #
WBQ$TLC[WORD] = WBQ$TLC[WORD] + TLW; # TLC IN ABH #
WBQ$ESIZE[WORD] = WBQ$ESIZE[WORD] + TLW; # ENTRY SIZE #
WBQ$LICNT[WORD] = WBQ$LICNT[WORD] + 1; # LINE COUNT #
IF WCB$IAF[0]
THEN # INPUT IS ALLOWED WITH THIS LINE OF TEXT #
WBQ$HIAF[WORD] = TRUE; # ENSURE SAME FOR ENTIRE Q'D HOP/DIS #
END
ELSE # CREATE NEW *WBQ* ENTRY #
BEGIN
ABHTLC[1] = TLW + 1; # HOP/DIS TLC IN ABH #
WCB$WORD[1] = TLW + 3; # HOP/DIS ENTRY SIZE IN *WBQ* #
WCB$FLAGS[1] = 1; # INITIAL LINE COUNT #
HOPI[1] = WCB$IAF[0]; # INPUT ALLOWED FLAG #
MOVE (TLW, MSGBUF[0], TEXTLOC[0]); # TEXT #
SSTAQE (P<WBQ>, WCBUF[1], ABH[1], APSM[1]);
ACN$WBCNT[HOPORD$] = ACN$WBCNT[HOPORD$] + 1; # WAITING BLOCKS #
END
END # SENDLINE #
CONTROL EJECT;
#
* MAIN ROUTINE BEGINS HERE.
*
* WE BEGIN BY INITIALIZING SOME FIELDS IN THE OUTGOING ABH AND SM
* BODY AREAS. THEN WE TAKE A MAIN BRANCH DEPENDING ON WHETHER
* INPUT IS ALLOWED AFTER THIS TEXT IS OUTPUT TO THE HOP.
#
ABHWORD[1] = 0;
ABHABT[1] = APPCMD;
ABHACT[1] = CT60TRANS;
SPMSG0[1] = 0;
IF WCB$IAF[0]
THEN # COMMAND COMPLETE, INPUT ALLOWED #
BEGIN
#
* IF THE HOP HAS A COMMAND IN PROGRESS, THE TEXT IS PROCESSED
* NORMALLY. IF HE HAD ENTERED A BREAK, THE TEXT IS DISCARDED
* AND THE MESSAGE *OUTPUT DISCARDED* IS SENT. THE STATE OF THE
* HOP PSEUDO ACN IS RESET TO ALLOW SUBSEQUENT COMMANDS.
#
IF ACN$HOPST[HOPORD$] EQ S"COMMAND"
OR ACN$HOPST[HOPORD$] EQ S"BREAK"
THEN # COMMAND OR BREAK IN PROGRESS #
BEGIN
IF ACN$HOPST[HOPORD$] EQ S"BREAK"
THEN # BREAK IN PROGRESS #
BEGIN # SET TEXT = *OUTPUT DISCARDED* #
SPMSG0[0] = D$WD0[0];
SPMSG1[0] = D$WD1[0];
WCB$WC[0] = ODWC$;
END
ACN$HOPST[HOPORD$] = S"ACTIVE";
#
* WE NOW DO THE ACTUAL PROCESSING OF THE TEXT. THE I-LAYER
* NEVER GENERATES *READY..*. THIS IS GENERATED BY THE C-LAYER
* (HEREIN) AS A RESULT OF THE INPUT ALLOWED FLAG BEING SET.
* THE TEXT MUST BE OUTPUT FIRST WITH INPUT NOT ALLOWED FOLLOWED
* BY *READY..* WITH INPUT ALLOWED. THE RESPONSE TO MANY
* COMMANDS CONSISTS SOLELY OF *READY..* (NULL TEXT).
#
IF WCB$WC[0] GR 2
THEN # THERE IS TEXT #
BEGIN
WCB$IAF[0] = FALSE;
SENDLINE; # SO SHIP IT #
WCB$IAF[0] = TRUE;
END
SPMSG0[0] = R$WD0[0]; # SET TEXT = *READY..* #
WCB$WC[0] = RWC$;
SENDLINE; # AND SHIP IT #
WCB$SMID[1] = SMID"HOPDIS" ; # SEND HOP/DIS FOR RIGHT K-DIS#
WCB$WC[1] = RKPAGESZ + 1 ;
ABHWORD[1] = 0 ;
ABHABT[1] = 3 ;
ABHACT[1] = 1 ;
ABHTLC[1] = RKPAGESZ ;
SSTAQE(P<OTQ>,WCBUF[1],ABH[1],RKPAGE[PAGE1]) ;
OC$PAGEC[HOPORD$] = PAGE1; # CURRENT PAGE IS 1 #
END
ELSE # NEITHER BREAK NOR COMMAND IN PROGRESS #
BEGIN
#
* FOR ALL OTHER STATES OF THE HOP PSUEDO ACN WE DISCARD THE
* TEXT AND SEND A CON/CB PROTOCOL EVENT TO THE INNER LAYER.
#
WCB$WORD[1] = 2; # MIN QUEUE ENTRY SIZE #
WCB$SMID[1] = SMID"CONCB";
ABHADR[1] = HOPORD$;
SSTAQE (P<PEQ>, WCBUF[1], ABH[1], APSM[1]);
END
END # INPUT ALLOWED = YES #
ELSE # INPUT NOT ALLOWED AS RESULT THIS TEXT #
BEGIN
#
* IF THE HOP IS IDLE OR HAS A COMMAND IN PROGRESS, PROCESS THE
* TEXT NORMALLY (TEXT COULD BE THE RESULT OF AN UNSOLICITED EVENT
* REPORT OR A COMMAND). IF THE K-DISPLAY IS NOT CURRENTLY
* ASSIGNED TO CS, AND THE HOP HAS NOT ENTERED AN *IG=CS* COMMAND,
* AND THIS MESSAGE WARRANTS AN ALERT, SEND A HOP/ALT SM TO NAM.
* FOR ALL OTHER CONDITIONS, SIMPLY DISCARD THE TEXT.
#
IF ACN$HOPST[HOPORD$] EQ S"ACTIVE"
OR ACN$HOPST[HOPORD$] EQ S"COMMAND"
THEN # ALL IS WELL, FORWARD THE TEXT #
SENDLINE;
ELSE IF ACN$HOPST[HOPORD$] EQ S"INACT"
OR ACN$HOPST[HOPORD$] EQ S"ENDED"
OR ACN$HOPST[HOPORD$] EQ S"STARTEND"
THEN # K-DIS NOT NOW ASSIGNED TO CS #
IF WCB$HAF[0]
AND NOT ACN$IGNOR[HOPORD$]
THEN # MUST SEND HOP/ALT SM TO NIP #
BEGIN
WCB$WORD[1] = 3;
ABHTLC[1] = LHOPALT;
PFCSFC[1] = HOPALT;
SSTAQE (P<OTQ>, WCBUF[1], ABH[1],APSM[1]);
END
END # INPUT ALLOWED = NO #
END # CSCPHT #
TERM