cdc:nos2.source:nam5871:nvfcaut
Table of Contents
NVFCAUT
Table Of Contents
- [00007] PROC NVFCAUT
- [00008] NVFCAUT - ACCEPT USER TEXT.
- [00012] ACCEPT USER TEXT.
- [00067] PROC ABORT
- [00068] PROC MESSAGE
- [00069] PROC MOVE
- [00070] PROC NVFCFCE
- [00071] PROC SSSAWR
- [00072] PROC SSTAQE
- [00073] PROC SSTATS
- [00074] PROC SSTRTS
- [00075] PROC NVFTETC
Source Code
- NVFCAUT.txt
- *DECK NVFCAUT
- USETEXT TEXTSS
- USETEXT TEXTNVF
- USETEXT TXINNVF
- USETEXT TXTANVF
- USETEXT TXTAPSS
- PROC NVFCAUT;
- # TITLE NVFCAUT - ACCEPT USER TEXT. #
- BEGIN # NVFCAUT #
- #
- ** NVFCAUT - ACCEPT USER TEXT.
- *
- * S. H. FISCHER. 81/12/04.
- *
- * THIS PROCEDURE HANDLES INBOUND DATA (SYNCHRONOUS) BLOCKS FROM THE
- * NETWORK. ITS FUNCTION IS TO FORWARD THE TYPEIN TO THE I-LAYER
- * (FOR LOGIN PROCESSING) OR DISCARD IT, AS APPROPRIATE.
- *
- * PROC NVFCAUT
- *
- * ENTRY WCBUF[0] = WORD COUNT WORD FROM ORIGINAL CONNECTION
- * TRAFFIC QUEUE (*CTQ*) 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 OR MORE OF THE FOLLOWING ACCORDING TO THE BLOCK TYPE
- * OF THE INPUT DATA AND THE STATE OF THE ACN LIST ENTRY FOR
- * THE USER IN QUESTION.
- * - AN ENTRY FOR THE TYPEIN HAS BEEN PLACED IN THE TERMINAL-
- * TO-APPLICATION CONNECTION INPUT QUEUE (*TAINPQ*).
- * - THE TYPEIN HAS BEEN DISCARDED.
- * - A TERMINAL TEXT ENTRY CONTAINING THE MESSAGE
- * *INPUT IGNORED* HAS BEEN PLACED IN THE CONNECTION
- * TRAFFIC QUEUE (*CTQ*).
- * - A TERMINAL TEXT ENTRY FOR A ZERO LENGTH *MSG* TYPE
- * NETWORK BLOCK HAS BEEN PLACED IN THE *CTQ* (TO TURN
- * AROUND THE HALF DUPLEX OPERATION).
- * - THE STATE OF THE ACN LIST ENTRY HAS BEEN UPDATED.
- * - IF THIS IS A BLK BLOCKS, CHECK TO IF WE HAVE RECEIVED
- * UP TO 20 BLK BLOCKS. IF WE HAVE, TERMINATE THE
- * CONNECTION BECAUSE SOMETHING HAS GONE WRONG AT THE
- * TERMINAL TO CAUSE IT TO SEND THAT MANY BLK BLOCKS
- * UPLINE.
- *
- * NOTES 1. NVF ONLY PROCESSES *MSG* TYPE NETWORK BLOCKS, THE
- * CTRL/TCD SYNCHRONOUS SM AND NULL 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. NVF DISCARDS ALL SYNCHRONOUS INBOUND BLOCKS THAT WERE
- * TYPED AHEAD OF A USER BREAK.
- * 3. THE PROCESSING IS DEFINED BY THE NVF/USER C-LAYER
- * STATE DIAGRAM.
- #
- #
- **** PROC NVFCAUT - XREF LIST.
- #
- XREF
- BEGIN
- PROC ABORT; # ABORT PROGRAM #
- PROC MESSAGE; # SEND MESSAGE TO DAYFILE #
- PROC MOVE; # MOVE CM WORDS #
- PROC NVFCFCE; # FIND CONNECTION ENTRY #
- PROC SSSAWR; # ACCEPT WORKLIST REQUEST #
- PROC SSTAQE; # ACCEPT QUEUE ENTRY #
- PROC SSTATS; # ALLOCATE TABLE SPACE #
- PROC SSTRTS; # REMOVE TABLE SPACE #
- PROC NVFTETC; # END TERMINAL CONNECTION #
- END
- #
- ****
- #
- ITEM ACNN I; # ACN TO SEARCH FOR #
- ITEM AE I; # ORD OF MATCHED (OR NEW) LIST ENTRY #
- ITEM NEWACN B; # TRUE IF ACN NOT FOUND IN ACN LIST #
- ITEM RORD I; # INBOUND WAITING BLOCK QUEUE ORDINAL #
- ITEM TAINDX I; # INDEX INTO THE T-A INPUT QUEUE #
- ITEM PT I; # INDEX TO THE PTAC TABLE #
- ITEM NENTRY I; # NUMBER OF ENTRIES IN PTAC TABLE #
- ARRAY BLKIGH[00:00] S(1);
- BEGIN
- ITEM BLKH$ABT U(00,00,06) = [APPTTX$];
- ITEM BLKH$ADR U(00,06,12);
- ITEM BLKH$ACT U(00,36,04) = [CT6DISPLAY];
- ITEM BLKH$TLC U(00,48,12) = [20];
- END
- ARRAY BLKIGM[00:00] S(2);
- BEGIN
- ITEM BLKM C(00,00,14) = [".INPUT IGNORED"];
- END
- ACNN = ABHADR[0];
- NVFCFCE( ACNN, AE, NEWACN ); # LOCATE ACN LIST ENTRY #
- IF NEWACN
- THEN
- BEGIN
- $BEGIN
- MESSAGE( " ACN LOST NVFCAUT", 0 );
- ABORT;
- $END
- RETURN; # DISCARD INBOUND DATA BLOCK #
- END
- #
- * PROCESS INPUT ACCORDING TO BLOCK TYPE MSG, BLK AND NULL INBOUND
- * DATA BLOCKS PLUS SYNCHRONOUS SUPERVISORY MESSAGES INBOUND.
- #
- #
- * MSG BLOCKS ARE TEXT INPUT FROM THE USER AT THE TERMINAL.
- * THE MSG BLOCK IS PASSED TO THE PROGRAM IF THE CONNECTION IS IN
- * THE ACTIVE OR BRKOUT STATE AND THE MSG BLOCK HAS NOT BEEN
- * CANCELED BY THE USER. IF THE BLOCK HAS BEEN CANCELLED THEN A
- * EMPTY MSG BLOCK IS OUTPUT TO ALLOW THE NEXT BLOCK TO BE DELIVERED.
- #
- IF ABHABT[0] EQ APMSG
- THEN
- BEGIN
- IF ACN$STATE[AE] EQ ACNST"ACTIVE"
- OR ACN$STATE[AE] EQ ACNST"CLEARI"
- THEN
- BEGIN
- IF ACN$STATE[AE] EQ ACNST"CLEARI"
- OR ABHCAN[0] NQ 0
- THEN # MUST TURN AROUND HALF DUPLEX #
- BEGIN
- WCB$WORD[1] = LLST + 2; # SEND LST/ON TO GET NEXT MSG BK#
- ABHWORD[1] = LLST;
- ABHABT[1] = APPCMD;
- ABHACT[1] = ACLST;
- SPMSG0[1] = 0;
- PFCSFC[1] = LSTON;
- LSTACN[1] = ACNN;
- SSTAQE( P<OTQ>,WCBUF[1],ABHBUF[1],APSM[1]); # PASS OUTBOUND#
- IF ACN$BLKF[AE]
- THEN
- BEGIN
- ACN$BLKF[AE] = FALSE;
- FOR RORD=0 STEP IWQ$WC[RORD] WHILE IWQ$ACN[RORD+1] NQ ACNN
- DO
- BEGIN
- END
- SSTRTS(P<IWBQ>,RORD,IWQ$WC[RORD]);
- END
- END
- ELSE
- BEGIN
- IF ACN$BLKF[AE]
- THEN
- BEGIN
- ACN$BLKF[AE] = FALSE;
- FOR RORD=0 STEP IWQ$WC[RORD] WHILE ACNN NQ IWQ$ACN[RORD+1]
- DO
- BEGIN
- END
- TAINDX = TAQLNGTH;
- SSTATS(P<TAINPQ>,IWQ$WC[RORD]);
- MOVE(IWQ$WC[RORD],IWBQ[RORD],TAINPQ[TAINDX]);
- SSTRTS(P<IWBQ>,RORD,IWQ$WC[RORD]);
- SSSAWR(WWDF"NTDQE");
- END
- ELSE
- BEGIN
- SSTAQE( P<TAINPQ>, WCBUF, ABHBUF, MSGBUF );
- END
- END
- END
- ELSE IF ACN$STATE[AE] EQ ACNST"BRKOUT"
- THEN
- BEGIN
- IF ACN$BKCNT[AE] EQ 0
- AND ABHCAN[0] EQ 0
- THEN
- BEGIN
- SSTAQE( P<TAINPQ>, WCBUF, ABHBUF, MSGBUF );
- ACN$STATE[AE] = ACNST"BRKCMD";
- END
- END
- END
- #
- * COUNT THE NUMBER OF UPLINE BLK BLOCKS. IF THE NUMBER REACH
- * 20, TERMINATE THE CONNECTION BECAUSE SOMETHING MUST HAVE
- * GONE WRONG AT THE TERMINAL TO CAUSE THAT MANY BLK BLOCKS
- * COME UPLINE.
- * ONLY THE FIRST BLK BLOCK IS QUEUE. THE REST IS DISCARDED.
- #
- ELSE IF ABHABT[0] EQ APPBLK
- THEN
- BEGIN
- ACN$BLKCNT[AE] = ACN$BLKCNT[AE] + 1; # INCRMT BLK COUNT#
- IF ACN$BLKCNT[AE] GQ 20
- THEN
- BEGIN
- NENTRY = PTALNGTH / PTACSIZ$; # CALCULATE NUMBER OF ENTRIES#
- FOR PT = 0 STEP 1 WHILE ( PT LS NENTRY) AND
- (PTA$ACN[PT] NQ ACNN)
- DO
- BEGIN
- END
- IF PT LS NENTRY # ENTRY FOUND, TERMINATE CONNECTION #
- THEN
- BEGIN
- NVFTETC (PT);
- RETURN;
- END
- END
- IF ACN$STATE[AE] EQ ACNST"ACTIVE"
- THEN
- BEGIN
- IF NOT ACN$BLKF[AE]
- THEN
- BEGIN
- ACN$BLKF[AE] = TRUE;
- SSTAQE(P<IWBQ>,WCBUF,ABHBUF,MSGBUF);
- END
- END
- END
- #
- * NULL BLOCKS SERVE TWO PURPOSES, MARKING THE POINT IN THE INPUT
- * STREAM WHERE A USER BREAK OCCURED SO TEXT CAN BE DISCARDED UP TO
- * THAT POINT AND INDICATING TO NVF THAT DISCARDED UPLINE ASCII
- * TEXT DESTINED TO A FAILED APPLICATION THAT CANNOT BE DELIVERED
- * TO NVF. NVF ALERTS THE USER TO THE IGNORED TEXT ONLY IN THE
- * ACTIVE STATE.
- #
- ELSE IF ABHABT[0] EQ APPNULL
- THEN
- BEGIN
- IF ABHXPT[0] EQ 1
- THEN
- BEGIN
- IF ACN$STATE[AE] EQ ACNST"ACTIVE"
- THEN
- BEGIN
- WCB$WORD[0] = 4;
- BLKH$ADR[0] = ACNN;
- SSTAQE( P<CTQ>, WCBUF, BLKIGH, BLKIGM ); # PASS TO OUTBOUND#
- END
- END
- END
- END # NVFCAUT #
- TERM
cdc/nos2.source/nam5871/nvfcaut.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator