*DECK CSCANT USETEXT TEXTCS USETEXT TEXTSS USETEXT TXTAPSS PROC CSCANT; # TITLE CSCANT - ACCEPT NOP TYPEIN. # BEGIN # CSCANT # # ** CSCANT - ACCEPT NOP TYPEIN. * * D. G. DEPEW. 81/06/05. * * THIS PROCEDURE HANDLES INBOUND DATA (SYNCHRONOUS) BLOCKS FROM THE * NETWORK. ITS FUNCTION IS TO FORWARD THE TYPEIN TO THE I-LAYER * (FOR COMMAND PROCESSING) OR DISCARD IT, AS APPROPRIATE. * * ENTRY WCBUF[0] = WORD COUNT WORD FROM ORIGINAL CONNECTION * TRAFFIC QUEUE (*CNQ*) ENTRY. * ABHBUF[0] = APPLICATION BLOCK (EVENT) HEADER FOR THE DATA * (BASED ARRAY *ABH* IN *TXTAPSS* POINTS HERE). * MSGBUF[0] = DISPLAY CODED TEXT LINE (BASED ARRAY *APSM* * IN *TXTAPSS* POINTS HERE). * * EXIT ONE OF THE FOLLOWING: * - AN ENTRY FOR THE TYPEIN IS PLACED IN THE OPERATOR * TYPEIN QUEUE (*OPTQ*) AND THE STATE IS UPDATED. * - THE TYPEIN IS IGNORED. * - THE TYPEIN IS DISGARDED AND A TERMINAL TEXT ENTRY * CONTAINING THE MESSAGE *INPUT IGNORED..* IS PLACED IN * CONNECTION TRAFFIC QUEUE (*CNQ*). * * NOTES 1. CS ONLY PROCESSES *MSG* TYPE NETWORK BLOCKS. ANY * OTHER TYPE OF SYNCHRONOUS INBOUND DATA (*BLK* BLOCKS * AND TRANSPARENT MODE INPUT) IS IGNORED AND THE MESSAGE * *INPUT IGNORED..* IS SENT TO THE TERMINAL. * 2. THE PROCESSING IS DEFINED BY THE CS/NOP C-LAYER STATE * DIAGRAM. # # **** PROC CSCANT - XREF LIST. # XREF PROC SSTAQE; # ACCEPT QUEUE ENTRY # # **** # DEF IGTLW$ #2#; # *INPUT IGNORED..* TEXT LENGTH IN WORDS # ITEM NACN; # NOP ACN = ORDINAL OF ACN LIST ENTRY # # * ABH AND SM BODY ARRAYS FOR LST/ON/SM. # ARRAY LONABH [00:00] S(1); BEGIN ITEM LOH$ABT U(00,00,06) = [APPCMD]; # BLOCK TYPE # ITEM LOH$ADRABN U(00,06,30) = [0]; # ADDR, BLOCK NR # ITEM LOH$ACT U(00,36,04) = [CT60TRANS]; # CHARACTER TYPE # ITEM LOH$DBC U(00,40,08) = [0]; # CLARIFIER # ITEM LOH$TLC U(00,48,12) = [LLST]; # TEXT LENGTH # END ARRAY LONSM [00:00] S(1); BEGIN ITEM LOM$PSFC U(00,00,16) = [LSTON]; # PFC/SFC # ITEM LOM$RES1 U(00,16,08) = [0]; # RESERVED # ITEM LOM$ACN U(00,24,12); # CONNECTION NUM # ITEM LOM$RES2 U(00,36,24) = [0]; # RESERVED # END ARRAY IGNORE [00:00] S(IGTLW$); BEGIN ITEM I$TEXT C(00,00,15) = ["INPUT IGNORED.."]; ITEM I$ZERO U(01,30,30) = [0]; END # * SAVE THE NOP'S ACN NUMBER. TAKE A MAIN BRANCH DEPENDING UPON THE * APPLICATION BLOCK TYPE. # NACN = ABHADR[0]; IF ABHABT[0] EQ APMSG THEN # MUST PROCESS THIS BLOCK # BEGIN # * IF THE CONNECTION IS ACTIVE, FORWARD THE TYPEIN TO THE I-LAYER * AND SET THE STATE OF THE CONNECTION TO INDICATE THAT A COMMAND * IS IN PROGRESS. HOWEVER, IF THE CANCEL INPUT FLAG IS SET, * IGNORE THE TYPEIN AND ISSUE A LST/ON/SM TO TURN AROUND THE * HALF DUPLEX OPERATION. DISCARD THE TEXT FOR ANY OTHER STATE. # IF ACN$NOPST[NACN] EQ S"ACTIVE" THEN # ALL IS WELL # BEGIN IF ABHCAN[0] NQ 0 THEN # HOP HAS CANCELLED TYPEIN # BEGIN WCB$WORD[1] = LLST + 2; LOM$ACN[0] = NACN; SSTAQE (P, WCBUF[1], LONABH[0], LONSM[0]); END ELSE BEGIN SSTAQE (P, WCBUF[0], ABHBUF[0], MSGBUF[0]); ACN$NOPST[NACN] = S"COMMAND"; END END # * IF THE CONNECTION IS IN THE CLEAR INPUT STATE, THEN SEND A * LST/ON/R TO GET THE NEXT MSG BLOCK. # ELSE IF ACN$NOPST[NACN] EQ S"CLEARI" THEN BEGIN WCB$WORD[1] = LLST + 2; LOM$ACN[0] = NACN; SSTAQE(P, WCBUF[1], LONABH[0], LONSM[0]); END END # *MSG* BLOCK # ELSE # UNACCEPTABLE INPUT # BEGIN # * DISCARD THE INPUT BLOCK. IF IT IS A *BLK* BLOCK OR TRANSPARENT * INPUT, AND THE CONNECTION IS ACTIVE, SEND THE *INPUT IGNORED..* * MESSAGE. (I.E., DON'T SEND THE MESSAGE FOR OTHER CONDITIONS * SUCH AS A NULL BLOCK WITH THE BREAK OCCURRED FLAG SET.) # IF ACN$NOPST[NACN] EQ S"ACTIVE" AND (ABHABT[0] EQ APPBLK OR ABHXPT[0] EQ 1) THEN BEGIN WCB$WORD[1] = IGTLW$ + 2; # TERM TEXT NTRY SIZ, IAF=FALSE # WCB$SMID[1] = SMID"TTEXT"; SSTAQE (P, WCBUF[1], ABHBUF[0], IGNORE); END END # UNACCEPTABLE INPUT # END # CSCANT # TERM