*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 = 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, 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, 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, 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, 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, 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,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, 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, WCBUF[1], ABH[1],APSM[1]); END END # INPUT ALLOWED = NO # END # CSCPHT # TERM