cdc:nos2.source:nam5871:nvfarap
Table of Contents
NVFARAP
Table Of Contents
- [00009] PROC NVFARAP
- [00010] NVFARAP - PROCESS A-A INCALL REQUESTS.
- [00014] PROCESS A-A INCALL REQUEST SMS.
- [00060] PROC SSTRQE
- [00061] PROC SSTATS
- [00062] PROC NVFUAFV
- [00063] PROC NVFUMQE
- [00064] PROC NVFUFVO
- [00065] PROC NVFAIAM
- [00066] PROC SSBEBF
- [00067] PROC SSBSBF
- [00068] FUNC SSDCAD
- [00069] PROC SSTRTS
- [00070] PROC NVFUCRS
- [00071] PROC SSCATR
- [00072] PROC MESSAGE
- [00073] PROC ABORT
- [00074] PROC SSTAQE
- [00075] PROC NVFCFCE
- [00321] TMBBUF - TIMER REQUEST BUFFER.
- [00340] TBLMSG - MISSING TABLE MESSAGE.
- [00354] PROC DISSECT
- [00355] DISSECT - DISSECT THE CR/RAP/R SM.
- [00755] PROC CHEKFAC(PC)
- [00756] CHEKFAC - CHECK FACILITIES
Source Code
- NVFARAP.txt
- *DECK NVFARAP
- USETEXT TXINAA
- USETEXT TEXTNVF
- USETEXT TEXTSS;
- USETEXT TXTANVF;
- USETEXT TXSMNVF;
- USETEXT TXTAPSS;
- USETEXT TXTSUSS;
- PROC NVFARAP;
- # TITLE NVFARAP - PROCESS A-A INCALL REQUESTS. #
- BEGIN #NVFARAP#
- #
- ** NVFARAP - PROCESS A-A INCALL REQUEST SMS.
- *
- * C. BRION 82/10/01. 83/04/19. 83/05/12.
- *
- * THE FUNCTION OF THIS PROCEDURE IS TO PROCESS THE INCALL REQUEST
- * SM - CR/RAP/R. THIS PROC VALIDATES THE INCALL REQUEST AND WILL
- * GENERATE EITHER A VALIDATION REQUEST (IF VALID MULTI HOST REQUEST)
- * OR IT WILL GENERATE A CR/RAP/N RESPONSE AND A CR/SWH/R SM IF THE
- * DETERMINED MODE IS FOR SINGLE HOST A-A CONNECTION.
- *
- * PROC NVFARAP
- *
- * ENTRY:
- *
- * THE CR/RAP/R SM RESIDES IN THE INSMQ.
- *
- * EXIT:
- *
- * A VALIDATION REQUEST MAY BE QUEUED TO THE CPM REQUEST QUEUE.
- * A CR/RAP/N OR ABNORMAL MAY BE ISSUED.
- * A CR/SWH/R MAY BE ISSUED TO THE CTQ.
- *
- * NOTES:
- *
- * WHEN A CR/RAP/R SM IS RECEIVED, THE CALLED APPLICATION MUST PASS
- * LIMIT CHECKS, THERE MUST BE A VCB ORDINAL AVAILABLE, AND THERE
- * MUST BE EITHER 1) A VALID INCALL BLOCK FOR THE REQUEST OR 2) THE
- * REQUEST MUST BE FOR A SINGLE HOST A-A CONNECTION. A SINGLE HOST
- * TYPE OF CONNECTION IS DETERMINED BY THE FACT THAT THE SOURCE AND
- * DESTINATION NODES ARE BOTH ZERO.
- *
- * THERE ARE TWO INTERNAL PROCEDURES THAT ARE CALLED BY THE MAIN
- * LINE. THEY ARE DISSECT, WHICH BREAKS APART THE INCOMING SM INTO
- * ITS VARIOUS PARTS AND CHEKFAC, WHICH VERIFIES THAT THE REQUESTED
- * FACILITIES IN THE CR/RAP/R SM ARE IN FACT THE FACILITIES THAT ARE
- * ALLOWED ON A SPECIFIC INCALL BLOCK.
- *
- #
- CONTROL EJECT;
- #
- **** PROC NVFARAP XREF LIST.
- #
- XREF
- BEGIN
- PROC SSTRQE; # SS-REMOVE QUEUE ENTRY #
- PROC SSTATS; # SS-ALLOCATE TABLE SPACE #
- PROC NVFUAFV; # ASSIGN VCB ORDINAL #
- PROC NVFUMQE; # MAKE QUEUE ENTRY #
- PROC NVFUFVO; # FREE UP VCB #
- PROC NVFAIAM; # ISSUE ACCOUNT MESSAGE #
- PROC SSBEBF; # SS-EXTRACT BIT FIELD #
- PROC SSBSBF; # SS-STORE BIT FIELD #
- FUNC SSDCAD; # SS-CONVERT ASCII-DISPLAY #
- PROC SSTRTS; # SS-RELEASE TABLE SPACE #
- PROC NVFUCRS; # CHECK REQUEST START #
- PROC SSCATR; # SS-ACCEPT TIMER REQUEST #
- PROC MESSAGE; # ISSUE DAYFILE MESSAGE #
- PROC ABORT; # ABORT PROGRAM #
- PROC SSTAQE; # ACCEPT QUEUE ENTRY #
- PROC NVFCFCE; # FIND CONNECTION ENTRY #
- END
- #
- ****
- #
- CONTROL EJECT;
- DEF MAXFACN$ # 10 #; # MAX ALLOWED FACILITIES#
- DEF MAXCUDL$ # 17 #; # MAX LEN (WORDS) OF USER DATA#
- DEF MXCUDOCT$ # 124 #; # MAX LEN (OCTETS) OF USR DATA#
- DEF ZSHOST$ # X"303030" #; # ASCII ZERO SHOST #
- DEF VARPARM$ # 32 #; # LEN OF VARIABLE PARM #
- DEF OK$ # 99 #; # NULL ERROR CODE #
- DEF FACWORD$ # 20 #; # WORD ORD FOR FACILITIES #
- DEF FACSBIT$ # 48 #; # START BIT FOR FACILITIES #
- ITEM ERRCODE I;
- ITEM NORMBITS I;
- ITEM MOVNUM I;
- ITEM J,I,K I;
- ITEM IDX I;
- ITEM IDXA I;
- ITEM PACDEF B;
- ITEM ERRFLAG B;
- ITEM VCBDEF B;
- ITEM PAC I;
- ITEM VCB I;
- ITEM ASTNUM I;
- ITEM AORD I;
- ITEM FOUND B;
- ITEM PORD I; # PRIMARY AST ENTRY ORDINAL #
- ITEM XX I;
- ITEM NUMFACS I;
- ITEM FACREJ B;
- ITEM RSTAT I;
- ITEM CTYP I;
- ITEM DTEA U; # CALLED DTE ADDR FROM CR/RAP #
- ITEM DTEBITS I; # LENGTH (BITS) OF DTEA ADDR #
- ITEM DTEREJ B; # DTEA REJECTED FLAG #
- ITEM EXBIT,EXORD I; # LOCAL EXTRACT VARIABLES #
- ITEM PARMBIT I; # LENGTH (BITS) OF FAC PARAMS #
- ITEM SBIT,SORD I; # LOCAL STORE VARIABLES #
- ITEM TEMP I; # TEMPORARY VARIABLE #
- ITEM UDATBITS I; # NUM BITS IN CALL USER DATA #
- ITEM UDATL I; # LEN OF CALL USR DATA(OCTETS)#
- ITEM ACNN I; # TEMPORARY FOR CONNECTION NO.#
- ITEM AE I; # INDEX TO ACN TABLE #
- ITEM NEWACN B; # TRUE IF ACN NOT FOUND #
- #
- * FINCALL - INCALL FACILITY TEMPLATE.
- #
- BASED ARRAY FINCALL [00:00] S(1);
- BEGIN
- ITEM FIN$LEN U(00,00,08); # FACILITY OCTET LNGTH #
- ITEM FIN$CODE U(00,08,08); # FACILITY CODE #
- ITEM FIN$WSIN U(00,16,08); # RECV WINDOW SIZE #
- ITEM FIN$WSOUT U(00,24,08); # SEND WINDOW SIZE #
- ITEM FIN$DPLIN U(00,16,08); # RECV PKT SIZE #
- ITEM FIN$DPLOUT U(00,24,08); # SEND PKT SIZE #
- ITEM FIN$FAC U(00,08,48);
- END
- #
- * TMPFAC - TEMP ARRAY FOR FACILITIES.
- #
- ARRAY TMPFAC [00:00] S(1);
- BEGIN
- ITEM TMP$CODE U(00,00,08); # FACILITY CODE #
- ITEM TMP$WININ U(00,08,08); # RECV WIN SIZE #
- ITEM TMP$WINOUT U(00,16,08); # SEND WIN SIZE #
- ITEM TMP$DPLIN U(00,08,08); # RECV PKT SIZE #
- ITEM TMP$DPLOUT U(00,16,08); # SEND PKT SIZE #
- ITEM TMP$FAST U(00,00,16); # FAST SELECT FAC #
- ITEM TMP$COLL U(00,00,16); # REV CHARGE FAC #
- ITEM TMP$TWINOUT U(00,08,08); # TELENET SEND WIN SIZE #
- ITEM TMP$TDPLOUT U(00,08,08); # TELENET SEND PKT SIZE #
- END
- #
- * ASCANAME - ASCII APPL NAME.
- #
- BASED ARRAY ASCANAME [00:00] S(1);
- BEGIN
- ITEM ASCA$APPL U(00,04,56);
- END
- #
- * ASCSHOST - ASCII SOURCEHOST.
- #
- BASED ARRAY ASCSHOST [00:00] S(1);
- BEGIN
- ITEM ASCS$HOST U(00,36,24);
- END
- #
- * CUD - ARRAY FOR HOLDING CALL USER DATA.
- #
- ARRAY CUD [00:00] S(MAXCUDL$);
- BEGIN
- ITEM CUD$WORD U(00,00,60); # FULL WORD REFERENCE #
- END
- #
- * FACCODE - ARRAY FOR HOLING FACILITY CODE OCTET VALUES.
- #
- ARRAY FACCODE [00:MAXFACN$] S(1);
- BEGIN
- ITEM FACC$WORD U(00,00,60); # WORD REFERENCE #
- ITEM FACC$BLEN U(00,44,08); # BIT LENGTH OF FACILITY #
- ITEM FACC$CODE U(00,52,08); # FACILITY CODE #
- ITEM FACC$LEN U(00,52,02); # CODED LENGTH #
- ITEM FACC$VLEN U(00,52,08);
- END
- #
- * FACPARM - ARRAY FOR HOLING PARAMETER FIELDS.
- #
- ARRAY FACPARM [00:MAXFACN$] S(1);
- BEGIN
- ITEM FACP$WORD U(00,00,60); # WORD REF #
- ITEM FACP$PARM U(00,00,40); # PARAMETER FIELD REF #
- ITEM FACP$WININ U(00,00,08); # RECV WINDOW SIZE #
- ITEM FACP$WINOUT U(00,08,08); # SEND WINDOW SIZE #
- ITEM FACP$DPLIN U(00,00,08); # RECV PKT SIZE #
- ITEM FACP$DPLOUT U(00,08,08); # SEND PKT SIZE #
- ITEM FACP$FREQ U(00,00,08); # FAST SEL PARM #
- ITEM FACP$COLL U(00,00,08); # REV CHARGE PARM #
- ITEM FACP$FSCL U(00,00,08); # FAST SEL AND REV CHARGE #
- ITEM FACP$TELN U(00,00,08); # TELENET FACS FOLLOW #
- ITEM FACP$TWINOUT U(00,00,08); # TELENET SEND WINDOW SIZE #
- ITEM FACP$TDPLOUT U(00,00,08); # TELENET SEND PACKET SIZE #
- END
- #
- * INCFACS - ARRAY FOR ACCESSING THE FACILITIES IN THE INCALL BLOCK.
- #
- BASED ARRAY INCFACS [00:00] S(1);
- BEGIN
- ITEM INCF$WORD U(00,00,60); # FULL WORD REFERENCE #
- ITEM INCF$CODE U(00,08,08); # FACILITY CODE #
- ITEM INCF$LEN U(00,08,02); # CODED LENGTH #
- ITEM INCF$VLEN U(00,16,08); # VARIABLE LENGTH #
- ITEM INCF$PARM U(00,24,32); # PARAMETER FIELD #
- END
- #
- * BPAC - DUMMY ARRAY FOR CLEARING PAAC ENTRY.
- #
- BASED ARRAY BPAC [00:00] S(1);
- BEGIN
- ITEM BPA$WORD U(00,00,60);
- END
- #
- * SHOSTDCD - DCD SOURCE HOST.
- #
- BASED ARRAY SHOSTDCD [00:00] S(1);
- BEGIN
- ITEM SHO$HID C(00,00,03);
- END
- #
- * ANAMEDCD - DCD APPLICATION NAME.
- #
- BASED ARRAY ANAMEDCD [00:00] S(1);
- BEGIN
- ITEM ANA$ANAME C(00,00,07);
- END
- #
- * INCALL - FIXED PORTION OF INCALL BLOCK.
- #
- BASED ARRAY INCALL [00:00] S(9);
- BEGIN
- ITEM INC$WC U(00,49,11); # BLOCK WORD LENGTH #
- ITEM INC$RANAME U(01,00,56); # ASCII CALLED APPL NAME #
- ITEM INC$PRI B(02,00,01); # PRIORITY FLAG #
- ITEM INC$DBL U(02,04,08); # DL BLOCK LIMIT #
- ITEM INC$DBZ U(02,12,12); # DL BLOCK SIZE #
- ITEM INC$ABL U(02,24,08); # APPL BLOCK LIMIT #
- ITEM INC$UBL U(02,36,08); # UL BLOCK LIMIT #
- ITEM INC$UBZ U(02,44,08); # UL BLOCK SIZE #
- ITEM INC$PORT U(02,52,08); # CALL ACCESS PORT ON NPU #
- ITEM INC$SNOD U(03,00,08); # CDC SOURCE NODE OF CALL #
- ITEM INC$DNOD U(03,08,08); # CDC DESTINATION NODE #
- ITEM INC$WS U(03,16,04); # SEND WINDOW THRESHOLD #
- ITEM INC$DPLS U(03,20,08); # PACKET SIZE #
- ITEM INC$WR U(03,28,04); # RECV WINDOW SIZE #
- ITEM INC$DPLR U(03,32,08); # RECV PKT SIZE #
- ITEM INC$COLL B(03,40,01); # REVERSE CHARGE #
- ITEM INC$FAST B(03,41,01); # FAST SELECT #
- ITEM INC$DTEL U(03,56,04); # LEN OF DTEA (SEMI-OCTETS) #
- ITEM INC$SHOST U(04,00,24); # ASCII SOURCE HOST #
- ITEM INC$FAM C(05,00,07); # FAMILY NAME #
- ITEM INC$FWORD U(05,00,60);
- ITEM INC$USER C(06,00,07); # USER NAME #
- ITEM INC$FACL U(06,52,08); # NUMBER OF FACILITIES #
- ITEM INC$UWORD U(06,00,60);
- ITEM INC$DTEA U(07,00,60); # DTE ADDRESS #
- ITEM INC$WRD2 U(02,00,60);
- ITEM INC$WRD3 U(03,00,60);
- END
- #
- * SHINCALL - SINGLE HOST INCALL BLOCK.
- *
- * SINGLE HOST INCALL BLOCK DEFINITION FOR INCOMING CALLS THAT
- * QUALIFY AS A INTRA HOST CALL.
- #
- ARRAY SHINCALL [00:00] S(7);
- BEGIN
- ITEM SHI$WC U(00,49,11)=[7]; # WORD COUNT #
- ITEM SHI$RANAME U(01,00,56)=[0]; # CALLED APPL-ASCII #
- ITEM SHI$PRI U(02,00,01)=[0]; # PRIORITY FALSE #
- ITEM SHI$DBL U(02,04,08)=[INTRADBL$]; # DL BLK LIMIT #
- ITEM SHI$DBZ U(02,12,12)=[INTRADBZ$]; # DL BLK SIZE #
- ITEM SHI$ABL U(02,24,08)=[INTRABL$]; # APPL BLK LIMIT #
- ITEM SHI$UBL U(02,36,08)=[INTRAUBL$]; # UL BLK LIMIT #
- ITEM SHI$UBZ U(02,44,08)=[INTRAUBZ$]; # UL BLK SIZE #
- ITEM SHI$PORT U(02,52,08)=[0]; # ACCESS PORT #
- ITEM SHI$SNOD U(03,00,08)=[0]; # ZERO SOURCE NODE #
- ITEM SHI$DNOD U(03,08,08)=[0]; # ZERO DEST NODE #
- ITEM SHI$WS U(03,16,04)=[0]; # ZERO WINDOW SIZE #
- ITEM SHI$DPLS U(03,20,08)=[0]; # ZERO DATA PKT LEN #
- ITEM SHI$WR U(03,28,04)=[0]; # ZERO RECV WINDOW #
- ITEM SHI$DPLR U(03,32,08)=[0]; # ZERO RECV PKT SIZE #
- ITEM SHI$COLL B(03,40,01)=[FALSE]; # NO REV CHARGE #
- ITEM SHI$FAST B(03,41,01)=[FALSE]; # NO FAST SELECT #
- ITEM SHI$SHOST U(04,00,24)=[ZSHOST$]; # ZERO SOURCE HOST #
- ITEM SHI$FAM U(05,00,42)=[0]; # NULL FAMILY #
- ITEM SHI$USER U(06,00,42)=[0]; # NULL USER #
- END
- #
- ** TMBBUF - TIMER REQUEST BUFFER.
- *
- * BUFFER CONTAINING THE TIMER INFO. SET UP TO CONTAIN THE
- * FC/INACT SM WHICH IS RETURNED TO THE TAINPQ WHEN THE TIMER EXPIRES.
- #
- ARRAY TMBBUF[00:00] S(TMBSIZ$);
- BEGIN
- ITEM TMB$SMID S:CTQSTAT(00,00,12) = [S"SINA"];
- ITEM TMB$WC U(00,48,12) = [TMBSIZ$];
- ITEM TMB$ABT U(01,00,06) = [APPCMD];
- ITEM TMB$CNUM U(01,18,18);
- ITEM TMB$PFCSFC U(02,00,16) = [FCINA];
- ITEM TMB$ACN U(02,24,12);
- ITEM TMB$DELAY U(03,24,18) = [NETPTIME$];
- ITEM TMB$QNUM U(03,42,18);
- END
- $BEGIN
- #
- ** TBLMSG - MISSING TABLE MESSAGE.
- #
- ARRAY TBLMSG [00:00] S(5);
- BEGIN
- ITEM TBL$MSG C(00,00,30) =
- ["NVFARAP: CANNOT FIND ENTRY IN "];
- ITEM TBL$NAME C(03,00,10);
- ITEM TBL$ZERO U(04,00,60) = [0];
- END
- $END
- CONTROL EJECT;
- PROC DISSECT;
- # TITLE DISSECT - DISSECT THE CR/RAP/R SM. #
- BEGIN #DISSECT#
- #
- * DISSECT - BREAK APART THE CR/RAP/R/ SM.
- *
- * C. BRION 82/09/30.
- *
- * THE FUNCTION OF THIS PROCEDURE IS TO EXTRACT THE DYNAMIC FIELDS
- * OF THE CR/RAP/R SM AND ENTER THEM IN A KNOWN FORMAT FOR THE
- * PROCESSING BY THE PROC NVFARAP.
- *
- * PROC DISSECT
- *
- * ENTRY:
- *
- * THE CR/RAP/R SM HAS BEEN REMOVED INTO LOCAL MSGBUF.
- *
- * EXIT:
- *
- * THE CALLED DTE ADDRESS IN DTEA.
- * THE FACILITY LENGTH EXTRACTED INTO FACL.
- * NUMBER OF FACILITY PAIRS IN NUMFAC.
- * FACILITY PAIR LENGTHS IN THE FACCODE ARRAY.
- * FACILITY PAIR PARAMETERS IN THE FACPARM ARRAY.
- * THE CALL USER DATA LENGTH IN UDATL.
- * THE ASCII SOURCE HOST NAME IN ASCSHOST ARRAY.
- * THE ASCII CALLED APPLICATION NAME IN ASCANAME ARRAY.
- * THE ERRCODE SETTING IF ERRORS OCCUR.
- * THE DISPLAY CALLED APPLICATION NAME IN DCDSHOST.
- * THE CALL USER DATA IN THE CUD ARRAY.
- #
- CONTROL EJECT;
- #
- * **** ITEM LIST ****
- #
- ITEM LEN I;
- ITEM LEN2 I;
- ITEM FACL I;
- ITEM FACBITS I;
- ITEM TABSIZ I;
- ITEM LOOPNUM I;
- ITEM REM I;
- ITEM W,X I;
- ITEM BITNUM I;
- ITEM FACTMP I;
- ITEM DONE B;
- ITEM FINBITS I;
- ITEM CUDEXBIT I;
- ITEM CUDEXORD I;
- ITEM EXFORD,EXFBIT I;
- ITEM STFORD,STFBIT I;
- ITEM Z I;
- ITEM TEMP U;
- ITEM CHAR U;
- ITEM SRCHOST U;
- ITEM DSTHOST U;
- ITEM ASANAME U;
- ITEM DCDSHOST U;
- ITEM DCDANAME U;
- ITEM TEMP2 U;
- ITEM PARMLEN U;
- CONTROL EJECT;
- #
- * **** PROC DISSECT ENTRY ****
- #
- #
- INITIALIZE THE ERROR CODE FOR EXIT.
- #
- ERRCODE = OK$;
- #
- INITIALIZE THE STARTING WORD AND BIT ORDINALS FOR THE CALLED DTE
- ADDRESS. EXTRACT THE CALLED DTE ADDR FROM THE CR/RAP SM.
- #
- EXORD = 2;
- EXBIT = 40;
- DTEBITS = (((CRRAL2[0] + 1)/2)*2)*4;
- SSBEBF(APSM[0],EXORD,EXBIT,DTEBITS,DTEA);
- #
- DETERMINE THE STARTING WORD ORDINAL AND BIT ORDINAL FROM THE
- WORD 2 OF THE SM AREA WHERE THE FACILITY LENGTH WOULD START.
- #
- LEN = 40 + ((((CRRAL1[0]+CRRAL2[0])+1)/2)*2)*4;
- LEN2 = LEN / 60;
- EXBIT = LEN - (LEN2 * 60);
- EXORD = 2 + LEN2;
- #
- EXTRACT THE FACILITY LENGTH OCTET.
- #
- SSBEBF(APSM[0],EXORD,EXBIT,8,FACL);
- FACBITS = FACL * 8;
- NORMBITS = LEN + FACBITS + 8;
- NUMFACS = 0;
- #
- IF FACILITIES ARE REQUESTED IN THE SM THEN DETERMINE THE SIZE OF
- THE FACTAB MANAGED TABLE AND EXTRACT THE FACL LENGTH NUMBER OF
- BITS INTO THE TABLE.
- #
- IF FACL NQ 0
- THEN
- BEGIN
- IF FACL LS 8
- THEN
- TABSIZ = 1;
- ELSE
- TABSIZ = 1 + (FACBITS/60);
- SSTATS(P<FACTAB>,TABSIZ);
- #
- THE FACILITY FIELDS MUST BE EXTRACTED FROM THE SM AREA AND STORED
- INTO THE FACTAB MANAGED TABLE.
- DETERMINE THE VALUES NEEDED TO MOVE THE BITS INTO FACTAB FROM
- THE SM AREA.
- #
- LOOPNUM = FACBITS / 60;
- IF FACBITS LS 60
- THEN
- REM = FACBITS;
- ELSE
- REM = FACBITS - (LOOPNUM * 60);
- IF REM NQ 0
- THEN
- LOOPNUM = LOOPNUM + 1;
- SORD = 0;
- SBIT = 0;
- #
- EXTRACT AND STORE THE FACILITY BITS.
- #
- FOR W = 1 STEP 1 UNTIL LOOPNUM
- DO
- BEGIN
- IF W EQ LOOPNUM
- THEN
- BITNUM = REM;
- ELSE
- BITNUM = 60;
- SSBEBF(APSM[0],EXORD,EXBIT,BITNUM,FACTMP);
- SSBSBF(FACTAB[0],SORD,SBIT,BITNUM,FACTMP);
- END
- #
- THE ENTIRE FACILITY PAIR GROUPS HAVE BEEN MOVED INTO FACTAB.
- NOW, MUST SEPARATE EACH PAIR INTO THE FACCODE AND FACPARM ARRAYS.
- EACH FACILITY PAIR CONSISTS OF A CODED LENGTH OCTET. THERE ARE
- 4 POSSIBLE VALUES -
- 00XXXXXX = 1 OCTET PARAMETER LENGTH.
- 01XXXXXX = 2 OCTET PARAMETER LENGTH.
- 10XXXXXX = 3 OCTET PARAMETER LENGTH.
- 11XXXXXX = VARIABLE NUMBER OCTET PARAMETER LENGTH.
- FOLLOWING OCTET CONTAINS THE NUMBER OF OCTETS IN THE
- PARAMETER FIELD.
- **** MAX IS 4 OCTETS FOR CDC CURRENTLY ****
- #
- DONE = FALSE;
- FINBITS = 0;
- EXFORD = 0;
- EXFBIT = 0;
- FOR X = 0 STEP 1 WHILE
- ((NOT DONE) AND
- (X LS MAXFACN$))
- DO
- BEGIN
- TEMP = 0;
- TEMP2 = 0;
- #
- GET THE FACILITY LENGTH CODE OCTET.
- #
- SSBEBF(FACTAB[0],EXFORD,EXFBIT,8,TEMP);
- STFORD = 0;
- STFBIT = 52;
- FACC$WORD[X] = 0;
- #
- STORE THE LENGTH CODE INTO THE CODE ARRAY.
- #
- SSBSBF(FACCODE[X],STFORD,STFBIT,8,TEMP);
- PARMBIT = ((FACC$LEN[X] + 1) * 8);
- #
- IF A VARIABLE LENGTH PARAMETER FIELD, MUST DETERMINE THE LENGTH
- FROM THE NEXT SUBSEQUENT OCTET.
- #
- IF PARMBIT EQ VARPARM$
- THEN
- BEGIN
- TEMP = 0;
- SSBEBF(FACTAB[0],EXFORD,EXFBIT,8,TEMP);
- STFORD = 0;
- STFBIT = 52;
- SSBSBF(FACCODE[X],STFORD,STFBIT,8,TEMP);
- PARMBIT = FACC$VLEN[X] * 8;
- #
- MAX SIZE FOR ANY PARAMETER FIELD IS 4 OCTETS (32 BITS).
- IF LARGER ENCOUNTERED, SET CONDITIONS SO THAT THE SCAN ENDS AND
- THE ERRCODE IS SET TO TERMINATE THE PROCESSING AND RETURN AN
- CR/RAP/A RESPONSE, RC=INVALID REQUEST.
- #
- IF PARMBIT GR 32
- THEN
- BEGIN
- ERRCODE = RCRA"XFP";
- PARMLEN = PARMBIT;
- PARMBIT = 32;
- FINBITS = FACBITS; # FORCES END TO LOOP #
- END
- ELSE
- FINBITS = FINBITS + PARMBIT + 16;
- END
- ELSE
- FINBITS = FINBITS + PARMBIT + 8;
- FACC$BLEN[X] = PARMBIT;
- #
- READY TO EXTRACT THE FACILITY PARAMETER FIELD.
- #
- TEMP = 0;
- SSBEBF(FACTAB[0],EXFORD,EXFBIT,PARMBIT,TEMP);
- #
- STORE THE PARAMETER FIELD INTO THE FACPARM ARRAY.
- #
- TEMP2 = 0;
- STFORD = 0;
- STFBIT = 0;
- SSBSBF(TEMP2,STFORD,STFBIT,PARMBIT,TEMP);
- B<0,PARMBIT>FACP$PARM[X] = B<0,PARMBIT>TEMP2;
- #
- IF NUMBER OF BITS MOVED EQUALS NUMBER OF BITS IN SM, THEN DONE.
- #
- IF FINBITS EQ FACBITS
- THEN
- DONE = TRUE;
- END
- NUMFACS = X;
- #
- RELEASE THE FACTAB SPACE
- #
- SSTRTS(P<FACTAB>,0,TABSIZ);
- END # IF FACL NQ 0 #
- #
- SAVE THE CURRENT WORD AND BIT POSITION IN THE CR/RAP SM. THIS IS
- WHERE THE CALL USER DATA STARTS.
- #
- CUDEXBIT = EXBIT;
- CUDEXORD = EXORD;
- #
- EXTRACT THE CALL USER DATA LENGTH, ASCII SOURCE HOST, ASCII
- DESTINATION HOST AND THE ASCII CALLED APPLICATION NAME.
- ADVANCE THE EXTRACTION VECTORS PAST THE PRID FIELD.
- #
- UDATL = 0;
- TEMP = 0;
- SSBEBF(APSM[0],EXORD,EXBIT,24,TEMP);
- SSBEBF(APSM[0],EXORD,EXBIT,8,UDATL);
- SSBEBF(APSM[0],EXORD,EXBIT,24,SRCHOST);
- SSBEBF(APSM[0],EXORD,EXBIT,16,DSTHOST);
- SSBEBF(APSM[0],EXORD,EXBIT,56,ASANAME);
- P<ASCANAME> = LOC(ASANAME);
- P<ASCSHOST> = LOC(SRCHOST);
- P<ANAMEDCD> = LOC(DCDANAME);
- P<SHOSTDCD> = LOC(DCDSHOST);
- #
- CONVERT THE RHID TO DCD.
- #
- SORD = 0;
- SBIT = 0;
- EXFORD = 0;
- EXFBIT = 36;
- FOR Z = 1 STEP 1 UNTIL 3
- DO
- BEGIN
- SSBEBF(SRCHOST,EXFORD,EXFBIT,8,CHAR);
- CHAR = SSDCAD(CHAR);
- SSBSBF(DCDSHOST,SORD,SBIT,6,CHAR);
- END
- #
- CONVERT THE CALLED APPLICATION NAME TO DCD.
- #
- SORD = 0;
- SBIT = 0;
- EXFORD = 0;
- EXFBIT = 4;
- FOR J = 1 STEP 1 UNTIL 7
- DO
- BEGIN
- SSBEBF(ASANAME,EXFORD,EXFBIT,8,CHAR);
- CHAR = SSDCAD(CHAR);
- SSBSBF(DCDANAME,SORD,SBIT,6,CHAR);
- END
- #
- IF CALL USER DATA EXISTS, EXTRACT IT FROM THE CR/RAP/R SM AND
- STORE IT IN THE CUD.
- #
- IF UDATL NQ 0
- THEN
- BEGIN
- #
- THE MAX SIZE FOR THE CALL USER DATA IS 124 OCTETS. SET THE
- ERROR CODE IF THIS SIZE IS EXCEEDED.
- #
- IF UDATL GR MXCUDOCT$
- THEN
- BEGIN
- ERRCODE = RCRA"XUD";
- END
- ELSE
- BEGIN
- #
- INITIALIZE THE WORD AND BIT LOCATIONS FOR STORING THE DATA.
- CALCULATE THE NUMBER OF BITS TO STORE.
- #
- SORD = 0;
- SBIT = 0;
- UDATBITS = UDATL * 8;
- J = UDATBITS;
- TEMP = 0;
- FOR I = 0 WHILE J GR 0
- DO
- BEGIN
- IF J GR 60
- THEN
- BEGIN
- K = 60;
- J = J - 60;
- END
- ELSE
- BEGIN
- K = J;
- J = 0;
- END
- SSBEBF(APSM[0],CUDEXORD,CUDEXBIT,K,TEMP);
- SSBSBF(CUD[0],SORD,SBIT,K,TEMP);
- TEMP = 0;
- END
- END
- END
- END #DISSECT#
- CONTROL EJECT;
- PROC CHEKFAC(PC);
- # TITLE CHEKFAC - CHECK FACILITIES #
- BEGIN
- #
- * CHEKFAC - GENERATE FACILITIES.
- *
- * C. BRION 83/03/25.
- *
- * THE FUNCTION OF THIS INTERNAL PROCEDURE IS TO QUALIFY THE
- * RECEIVED OPTIONAL USER FACILITIES OF THE CR/RAP/R SM.
- * THIS ROUTINE WILL ALSO SET THE RETURN USER FACILITIES IN THE
- * CR/RAP/N SM AREA OF THE PAAC ENTRY IF NEGOTIATION OF THE USER
- * FACILITY IS WARRANTED. THIS ROUTINE WILL NOT ALLOW CERTAIN
- * FACILITITES TO BE USED IF NOT SPECIFIED IN THE INCALL BLOCK
- * THAT IS CURRENTLY BEING SCANNED FOR QUALIFICATION.
- *
- * PROC CHEKFAC(PC)
- *
- * ENTRY:
- *
- * PC = THE CURRENT INDEX OF THE PAAC ENTRY FOR THIS CON-
- * NECTION REQUEST.
- *
- * EXIT:
- *
- * THE GLOBAL FACREJ WILL BE SET ACCORDINGLY:
- *
- * IF THE FACILITY IS NOT ALLOWED, FACREJ IS SET TO TRUE.
- * OTHERWISE, THE FACILITIES ARE ALLOWED AND/OR NEGOTIATED.
- *
- * THE CR/RAP/SM RESPONSE FOR FACILITY NEGOTIATED PARAMETERS WILL
- * BE SET UP IN THE PAAC ENTRY.
- #
- #
- * A CHECK OF THE TYPE OF FACILITY IN THE CR/RAP/R IS MADE. IF
- * REVERSE CHARGING OR FAST SELECT USER FACILITY IS REQUESTED AND NOT
- * DEFINED IN THE INCALL BLOCK, THE QUALIFICATION OF THIS INCALL
- * BLOCK HAS FAILED.
- *
- * IF THE REQUESTED FACILITY IS EITHER WINDOW SIZE OR PACKET SIZE THEN
- * FOR THE FACILITIES DEFINED IN THE INCALL BLOCK, THE SMALLER VALUE
- * OF THE REQUESTED IN, REQUESTED OUT AND DEFINED VALUE IS USED AS
- * THE VALUE TO BE NEGOTIATED. IF THE NEGOTIATED VALUE IS LESS THAN THE
- * REQUESTED VALUE, FACILITY NEGOTIATION ON THE RESPONSE (CALL CONNECTED
- * PACKET - CR/RAP/N SM) MUST BE PERFORMED.
- *
- * IF THE FACILITY IS NOT REVERSE CHARGING, FAST SELECT, WINDOW SIZE,
- * OR PACKET SIZE, THEN THE INCALL BLOCK IS SEARCHED FOR A MATCHING
- * FACILITY. IF A MATCH IS FOUND, THE FACILITY PARAMETERS MUST
- * MATCH. IF A MATCH IS NOT FOUND OR IF THE FACILITY PARAMETERS DO
- * NOT MATCH, THEN QUALIFICATION OF THIS INCALL BLOCK HAS FAILED.
- #
- CONTROL EJECT;
- #
- * DEFINITIONS AND ITEM DECLARATIONS
- #
- DEF COLLECT$ # 01 #; # REV CHARGE CODE #
- DEF COLLREQ$ # 01 #; # COLLECT REQ PARM #
- DEF DEFPKTSIZ$ # 07 #; # DEFAULT PACKET SIZE (128) #
- DEF DEFWSIZE$ # 02 #; # DEFAULT WINDOW SIZE #
- DEF FASCOL1$ # X"81" #; # COLLECT AND FASTSEL COMBINED#
- DEF FASCOL2$ # X"C1" #; # COLLECT AND FASTSEL COMBINED#
- DEF FAST$ # 01 #; # FAST SELECT CODE #
- DEF FSEL1$ # X"80" #; # FAST SEL REQ 1 #
- DEF FSEL2$ # X"C0" #; # FAST SEL REQ 2 #
- DEF PKTSIZ$ # X"42" #; # PKT SIZE CODE #
- DEF PKTSIZL$ # 3 #; # OCTET LEN OF PKT SIZE FAC #
- DEF TELCODE$ # X"00" #; # TELENET FACILITY CODE #
- DEF TELPARM$ # X"21" #; # TELENET FACILITY PARAM #
- DEF TPKTSIZ$ # X"06" #; # TELENET PACKET SIZE CODE #
- DEF TPKTSIZL$ # 2 #; # OCTET LEN TELENET PKTSIZ FAC#
- DEF TWSIZE$ # X"05" #; # TELENET WINDOW SIZE CODE #
- DEF TWSIZEL$ # 2 #; # OCTET LEN OF TELNET WSIZ FAC#
- DEF WSIZE$ # X"43" #; # WIN SIZE CODE #
- DEF WSIZEL$ # 3 #; # OCTET LEN OF WSIZE FAC #
- ITEM FACEC I; # FACILITY ERROR CODE #
- ITEM FACERR B; # ERROR CODE #
- ITEM FCBIT I; # BIT ORDINAL LOC #
- ITEM FCORD I; # WORD ORDINAL LOC #
- ITEM MATCHFOUND B; # TRUE IF MATCH ON INCALL FAC #
- ITEM NUMINFACS I; # NUM OF FACS IN INCALL BLOCK #
- ITEM PC I; # PAAC ENTRY ORDINAL #
- ITEM PIDX I; # FACILITY ARRAY INDEX #
- ITEM PKTCODE B; # PACKET SIZE FAC SEEN #
- ITEM PKTIN I; # LOCAL RECV PKT SIZE #
- ITEM PKTOUT I; # LOCAL SEND PKT SIZE #
- ITEM TELENET B; # TRUE IF TELENET FACILITY #
- ITEM TEMP1 U; # TEMP VARIABLE #
- ITEM TEMP2 U; # TEMP VARIABLE #
- ITEM TEMP3 U; # TEMP VARIABLE #
- ITEM WINCODE B; # WINDOW SIZE FAC SEEN #
- ITEM WININ I; # LOCAL RECV WINDOW #
- ITEM WINOUT I; # LOCAL SEND WINDOW #
- ITEM PARMPOS I; # STARTING BIT POSITION OF PARAMETER FIELD #
- CONTROL EJECT;
- WINCODE = FALSE;
- PKTCODE = FALSE;
- #
- * IF NO FACILITIES REQUESTED IN THE CR/RAP/R SM, THEN NO NEED TO
- * CHECK. SET THE WINDOW SIZE AND PACKET SIZE FROM THE INCALL BLOCK.
- #
- IF NUMFACS NQ 0
- THEN
- BEGIN
- #
- * FACILITIES REQUESTED. MUST CHECK EACH FACILITY REQUESTED TO THE
- * CURRENT INCALL BLOCK BEING QUALIFIED.
- #
- FACERR = FALSE;
- FACEC = 0;
- FACREJ = FALSE;
- PA$FACWRD[PC] = FACWORD$;
- PA$FACSBIT[PC] = FACSBIT$;
- TELENET = FALSE;
- FOR PIDX = 0 STEP 1 WHILE
- PIDX LS NUMFACS AND NOT FACERR
- DO
- BEGIN
- #
- * FOR EACH REQUESTED FACILITY CODE/PARAMETER GROUP, A CHECK IS
- * MADE AGAINST THE CURRENT INCALL BLOCK.
- #
- #
- * IF FACILITY IS FAST SELECT REQUESTED AND FAST SELECT IS NOT
- * ALLOWED FOR THIS INCALL BLOCK, QUALIFICATION HAS FAILED.
- * COLLECT HAS THE SAME FACILITY CODE AS THE FAST SELECT.
- * HERE, IF COLLECT PARAM 01 SPECIFIED AND COLLECT NOT
- * SPECIFIED, THEN QUALIFICATION FAILS TOO.
- #
- IF FACC$CODE[PIDX] EQ FAST$
- THEN
- BEGIN
- IF (FACP$FREQ[PIDX] EQ FSEL1$ OR
- FACP$FREQ[PIDX] EQ FSEL2$)
- THEN
- BEGIN
- IF NOT INC$FAST[0]
- THEN
- BEGIN
- FACERR = TRUE;
- FACEC = RCRA"MMF";
- GOTO ENDCHECK;
- END
- END
- IF (FACP$COLL[PIDX] EQ COLLREQ$)
- THEN
- BEGIN
- IF NOT INC$COLL[0]
- THEN
- BEGIN
- FACERR = TRUE;
- FACEC = RCRA"MMF";
- GOTO ENDCHECK;
- END
- END
- IF (FACP$FSCL[PIDX] EQ FASCOL1$)
- OR (FACP$FSCL[PIDX] EQ FASCOL2$)
- THEN
- BEGIN
- IF NOT INC$COLL[0] OR NOT INC$FAST[0]
- THEN
- BEGIN
- FACERR = TRUE;
- FACEC = RCRA"MMF";
- GOTO ENDCHECK;
- END
- END
- END
- #
- * IF WINDOW SIZE FACILITY NEGOTIATION REQUESTED THEN RETURN NEGO-
- * TIATION IS NEEDED ONLY IF THE REQUESTED SIZE IS GREATER THAN THE
- * INCALL BLOCK SPECIFIED SIZE OR IF THE RECEIVE AND SENDING SIZES ARE
- * DIFFERENT.
- *
- * IF RETURN NEGOTIATION NEEDED, THEN THE SMALLEST VALUE OF THE REQUESTED
- * RECEIVE AND SEND AND THE SPECIFIED INCALL VALUES IS USED AS THE RETURN
- * NEGOTIATED VALUE.
- #
- ELSE IF (FACC$CODE[PIDX] EQ WSIZE$) OR
- (TELENET AND (FACC$CODE[PIDX] EQ TWSIZE$))
- THEN
- BEGIN
- WINCODE = TRUE;
- WININ = INC$WR[0];
- WINOUT = INC$WS[0];
- #
- * IF INC$WR IS ZERO, USE INC$WS FOR BOTH VALUES.
- #
- IF INC$WR[0] EQ 0
- THEN
- WININ = INC$WS[0];
- #
- * IF THIS IS A TELENET FACILITY, ONLY THE OUTGOING WINDOW SIZE VALUE
- * IS SPECIFIED. USE THE DEFAULT WINDOW SIZE VALUE FOR THE INCOMING
- * WINDOW SIZE VALUE.
- #
- IF TELENET
- THEN
- BEGIN
- FACP$WINOUT[PIDX] = FACP$TWINOUT[PIDX];
- FACP$WININ[PIDX] = DEFWSIZE$;
- END
- IF FACP$WININ[PIDX] GR WININ OR
- FACP$WINOUT[PIDX] GR WINOUT OR
- FACP$WININ[PIDX] NQ FACP$WINOUT[PIDX]
- THEN
- BEGIN
- #
- * NEGOTIATION NEEDED. INCREMENT FACILITY CODE LENGTH OCTET.
- * SET FACILITY CODE IN TEMP ARRAY TO WINDOW SIZE.
- * OBTAIN SMALLEST VALUE. SET WINDOW SIZE IN SM AREA OF PAAC.
- * MOVE FACILITY CODE/PARAMETER INTO PAAC SM AREA.
- #
- IF FACP$WININ[PIDX] LS WININ
- THEN
- PA$WININ[PC] = FACP$WININ[PIDX];
- ELSE
- PA$WININ[PC] = WININ;
- IF FACP$WINOUT[PIDX] LS WINOUT
- THEN
- PA$WINOUT[PC] = FACP$WINOUT[PIDX];
- ELSE
- PA$WINOUT[PC] = WINOUT;
- FCORD = PA$FACWRD[PC];
- FCBIT = PA$FACSBIT[PC];
- IF NOT TELENET
- THEN
- BEGIN
- PA$FCL[PC] = PA$FCL[PC] + WSIZEL$;
- TMP$CODE[0] = WSIZE$;
- IF PA$WININ[PC] LS PA$WINOUT[PC]
- THEN
- BEGIN
- TMP$WINOUT[0] = PA$WININ[PC];
- TMP$WININ[0] = PA$WININ[PC];
- END
- ELSE
- BEGIN
- TMP$WINOUT[0] = PA$WINOUT[PC];
- TMP$WININ[0] = PA$WINOUT[PC];
- END
- PA$WSIZ[PC] = TMP$WININ[0];
- SSBSBF(PAAC[PC],FCORD,FCBIT,WSIZEL$,TMPFAC[0]);
- END
- ELSE
- BEGIN
- PA$FCL[PC] = PA$FCL[PC] + TWSIZEL$;
- TMP$CODE[0] = TWSIZE$;
- IF PA$WININ[PC] LS PA$WINOUT[PC]
- THEN
- BEGIN
- TMP$TWINOUT[0] = PA$WININ[0];
- END
- ELSE
- BEGIN
- TMP$TWINOUT[0] = PA$WINOUT[0];
- END
- PA$WSIZ[PC] = TMP$TWINOUT[0];
- SSBSBF(PAAC[PC],FCORD,FCBIT,TWSIZEL$,TMPFAC[0]);
- END
- PA$FACWRD[PC] = FCORD;
- PA$FACSBIT[PC] = FCBIT;
- END
- ELSE # NO NEGOTIATION NEEDED #
- PA$WSIZ[PC] = FACP$WINOUT[PIDX];
- END
- #
- * IF FACILITY IS PACKET SIZE, FOLLOW SAME LOGIC AS FOR WINDOW SIZE
- * FACILITY NEGOTIATION.
- #
- ELSE IF FACC$CODE[PIDX] EQ PKTSIZ$
- THEN
- BEGIN
- PKTCODE = TRUE;
- PKTIN = INC$DPLR[0];
- PKTOUT = INC$DPLS[0];
- #
- * IF INC$DPLR IS ZERO, USE THE INC$DPLS VALUE FOR BOTH.
- #
- IF INC$DPLR[0] EQ 0
- THEN
- PKTIN = INC$DPLS[0];
- IF FACP$DPLIN[PIDX] GR PKTIN OR
- FACP$DPLOUT[PIDX] GR PKTOUT OR
- FACP$DPLIN[PIDX] NQ FACP$DPLOUT[PIDX]
- THEN
- BEGIN
- PA$FCL[PC] = PA$FCL[PC] + 3;
- TMP$CODE[0] = PKTSIZ$;
- IF FACP$DPLIN[PIDX] LS PKTIN
- THEN
- PA$DPLIN[PC] = FACP$DPLIN[PIDX];
- ELSE
- PA$DPLIN[PC] = PKTIN;
- TMP$DPLIN[0] = PA$DPLIN[PC];
- IF FACP$DPLOUT[PIDX] LS PKTOUT
- THEN
- PA$DPLOUT[PC] = FACP$DPLOUT[PIDX];
- ELSE
- PA$DPLOUT[PC] = PKTOUT;
- TMP$DPLOUT[0] = PA$DPLOUT[PC];
- IF TMP$DPLIN[0] LS TMP$DPLOUT[0]
- THEN
- TMP$DPLOUT[0] = TMP$DPLIN[0];
- ELSE
- TMP$DPLIN[0] = TMP$DPLOUT[0];
- PA$PSIZ[PC] = TMP$DPLIN[0];
- FCORD = PA$FACWRD[PC];
- FCBIT = PA$FACSBIT[PC];
- SSBSBF(PAAC[PC],FCORD,FCBIT,PKTSIZL$,TMPFAC[0]);
- PA$FACWRD[PC] = FCORD;
- PA$FACSBIT[PC] = FCBIT;
- END
- ELSE # NEGOTIATION NOT NEEDED #
- PA$PSIZ[PC] = FACP$DPLIN[PIDX];
- END
- #
- * IF FACILITY IS TELENET PACKET SIZE, FOLLOW THE SAME LOGIC AS
- * FOR WINDOW SIZE FACILITY NEGOTIATION.
- #
- ELSE IF TELENET AND
- FACC$CODE[PIDX] EQ TPKTSIZ$
- THEN
- BEGIN
- PKTCODE = TRUE;
- PKTIN = INC$DPLR[0];
- PKTOUT = INC$DPLS[0];
- #
- * IF INC$DPLR IS ZERO, USE THE INC$DPLS VALUE FOR BOTH.
- #
- IF INC$DPLR[0] EQ 0
- THEN
- PKTIN = INC$DPLS[0];
- #
- * SINCE THIS IS A TELENET FACILITY, ONLY THE OUTGOING PACKET SIZE
- * IS SPECIFIED. USE THE DEFAULT PACKET SIZE VALUE FOR THE INCOMING
- * PACKET SIZE VALUE.
- *
- * THE TELENET FACILITY PARAMTER VALUE FOR PACKET SIZE IS COMPUTED
- * DIFFERENTLY FROM THE WAY THE INCALL VALUE FOR PACKET SIZE IS
- * COMPUTED.
- #
- FACP$DPLOUT[PIDX] = FACP$TDPLOUT[PIDX];
- FACP$DPLIN[PIDX] = DEFPKTSIZ$;
- TEMP1 = FACP$DPLOUT[PIDX] * 16;
- TEMP2 = 2 ** PKTOUT;
- TEMP3 = 2 ** FACP$DPLIN[PIDX];
- IF FACP$DPLIN[PIDX] GR PKTIN OR
- TEMP1 GR TEMP2 OR
- TEMP1 NQ TEMP3
- THEN
- BEGIN
- #
- * NEGOTIATION NEEDED. INCREMENT FACILITY CODE LENGTH OCTET. SET
- * FACILITY CODE IN TEMP ARRAY TO TELENET PACKET SIZE.
- #
- PA$FCL[PC] = PA$FCL[PC] + TPKTSIZL$;
- TMP$CODE[0] = TPKTSIZ$;
- #
- * OBTAIN SMALLEST PACKET SIZE VALUE. SET PACKET SIZE IN SM AREA
- * OF PAAC. MOVE FACILITY CODE/PARAMETER INTO PAAC SM AREA.
- #
- IF FACP$DPLIN[PIDX] LS PKTIN
- THEN
- BEGIN
- PA$DPLIN[PC] = FACP$DPLIN[PIDX];
- END
- ELSE
- BEGIN
- PA$DPLIN[PC] = PKTIN;
- END
- IF TEMP1 LS TEMP2
- THEN
- BEGIN
- PA$DPLOUT[PC] = FACP$DPLOUT[PIDX];
- END
- ELSE
- BEGIN
- PA$DPLOUT[PC] = PKTOUT;
- END
- IF PA$DPLIN[PC] LS PA$DPLOUT[PC]
- THEN
- BEGIN
- TMP$TDPLOUT[0] = PA$DPLOUT[PC];
- END
- ELSE
- BEGIN
- TMP$TDPLOUT[0] = PA$DPLOUT[PC];
- END
- PA$PSIZ[PC] = TMP$TDPLOUT[0];
- FCORD = PA$FACWRD[PC];
- FCBIT = PA$FACSBIT[PC];
- SSBSBF(PAAC[PC],FCORD,FCBIT,TPKTSIZL$,TMPFAC[0]);
- PA$FACWRD[PC] = FCORD;
- PA$FACSBIT[PC] = FCBIT;
- END
- ELSE
- BEGIN
- PA$PSIZ[PC] = FACP$DPLIN[PIDX];
- END
- END
- #
- * IF THE COMBINATION OF FACILITY CODE AND FACILITY PARAMETER
- * INDICATES THAT TELENET FACILITIES FOLLOW, SET THE TELENET FLAG.
- #
- ELSE IF (FACC$CODE[PIDX] EQ TELCODE$) AND
- (FACP$TELN[PIDX] EQ TELPARM$)
- THEN
- BEGIN
- TELENET = TRUE;
- END
- #
- * UNSUPPORTED FACILITY CODE. TRY TO FIND A MATCH FOR IT IN THE
- * INCALL BLOCK. IF NO MATCH IS FOUND, SET ERROR FLAG.
- #
- ELSE
- BEGIN
- P<INCFACS> = P<INCALL> + 8;
- NUMINFACS = INC$FACL[0];
- MATCHFOUND = FALSE;
- #
- * LOOP THROUGH THE FACILITIES IN THE INCALL BLOCK LOOKING FOR
- * A MATCH.
- #
- FOR I = 0 STEP 1 WHILE
- (NOT MATCHFOUND) AND
- (I LS NUMINFACS)
- DO
- BEGIN
- IF FACC$CODE[PIDX] EQ INCF$CODE[I]
- THEN
- #
- * A MATCHING FACILITY CODE HAS BEEN FOUND. NOW CHECK IF THE
- * FACILITY PARAMETERS MATCH.
- #
- BEGIN
- MATCHFOUND = TRUE;
- #
- * FIRST FIGURE OUT THE NUMBER OF BITS IN THE PARAMETER
- * FIELD, AND THE BIT POSITION WHERE THE FIELD STARTS.
- * THESE DEPEND ON WHETHER THE FIELD HAS FIXED OR VARIABLE
- * LENGTH.
- #
- IF INCF$LEN[I] LS 3
- THEN # FIXED LENTGH PARAM FIELD #
- BEGIN
- PARMBIT = ((INCF$LEN[I] + 1) * 8); # NO. OF BITS #
- PARMPOS = 16; # STARTING BIT POSITION #
- END
- ELSE # VARIABLE LENTGH PARAMETER FIELD#
- BEGIN
- PARMBIT = INCF$VLEN[I] * 8; # NO. OF BITS #
- PARMPOS = 24; # STARTING BIT POSITION #
- END
- #
- * THE LENGTH OF THE PARAMETERS ARE NOT THE SAME. SET THE
- * ERROR FLAG.
- #
- IF PARMBIT NQ FACC$BLEN[PIDX]
- THEN
- BEGIN
- FACERR = TRUE;
- FACEC = RCRA"MMF";
- GOTO ENDCHECK;
- END
- #
- * THE FACILITY PARAMETER VALUES DO NOT MATCH. SET THE
- * ERROR FLAG.
- #
- IF B<0,PARMBIT>FACP$WORD[PIDX] NQ
- B<PARMPOS,PARMBIT>INCF$WORD[I]
- THEN
- BEGIN
- FACERR = TRUE;
- FACEC = RCRA"MMF";
- GOTO ENDCHECK;
- END
- END
- END
- #
- * NO MATCHING FACILITY CODE WAS FOUND. SET THE ERROR FLAG.
- #
- IF NOT MATCHFOUND
- THEN
- BEGIN
- FACERR = TRUE;
- FACEC = RCRA"NMF";
- GOTO ENDCHECK;
- END
- END
- END # FOR LOOP #
- END # IF NUMFACS NQ 0 #
- #
- * IF NO FACS DEFINED OR WINDOW SIZE FAC NOT SEEN, MUST
- * SET THE WINDOW SIZE FROM THE INCALL BLOCK.
- #
- IF NUMFACS EQ 0 OR
- NOT WINCODE
- THEN
- BEGIN
- WININ = INC$WR[0];
- WINOUT = INC$WS[0];
- IF INC$WR[0] EQ 0
- THEN
- WININ = INC$WS[0];
- IF WININ LQ WINOUT
- THEN
- PA$WSIZ[PC] = WININ;
- ELSE
- PA$WSIZ[PC] = WINOUT;
- END
- #
- * IF NO FACILITIES OR PACKET SIZE FAC NOT SEEN, MUST SET
- * PACKET SIZE FROM INCALL BLOCK.
- #
- IF NUMFACS EQ 0 OR
- NOT PKTCODE
- THEN
- BEGIN
- PKTIN = INC$DPLR[0];
- PKTOUT = INC$DPLS[0];
- IF INC$DPLR[0] EQ 0
- THEN
- PKTIN = INC$DPLS[0];
- IF PKTIN LQ PKTOUT
- THEN
- PA$PSIZ[PC] = PKTIN;
- ELSE
- PA$PSIZ[PC] = PKTOUT;
- END
- ENDCHECK:
- IF FACERR
- THEN
- BEGIN
- #
- * ERROR OCCURRED. SET GLOBAL ERRCODE TO LOCAL FACILITY ERROR
- * CODE FACEC.
- #
- FACREJ = TRUE;
- ERRCODE = FACEC;
- END
- ELSE
- ERRCODE = OK$;
- END # CHEKFAC #
- CONTROL EJECT;
- #
- * **** PROC NVFARAP ENTRY START ****
- #
- #
- MAIN LOOP REMOVES A CR/RAP/R SM FROM THE INSMQ AND PROCESSES IT.
- #
- FOR I = 0 WHILE INSMQL NQ 0
- DO
- BEGIN
- #
- CLEAR THE SM AREAS.
- #
- FOR IDXA = 0 STEP 1 UNTIL NMSGBUF$
- DO
- BEGIN
- MSG$WORD[IDXA] = 0;
- END
- WCB$WORD[0] = 0;
- WCB$WORD[1] = 0;
- ABHWORD[0] = 0;
- ABHWORD[1] = 0;
- SSTRQE(P<INSMQ>,WCBUF,ABHBUF,MSGBUF);
- #
- INIT FLAGS FOR ERREXIT CONDITIONS.
- #
- PACDEF = FALSE;
- ERRCODE = OK$;
- VCBDEF = FALSE;
- #
- * CHECK IF HOST IN IDLE OR DISABLED STATE. IF SO, NO
- * FURTHER CONNECTIONS ALLOWWED. SET UP ABNORMAL REASON CODE
- * FOR SHUT HOST.
- #
- IF NVFSTATE
- THEN
- BEGIN
- ERRCODE = RCRA"IDH";
- GOTO ERREXIT;
- END
- #
- CHECK FOR AVAILABLE VCB ORDINAL
- #
- NVFUAFV(VCB,ERRFLAG);
- IF ERRFLAG
- THEN
- BEGIN
- ERRCODE = RCRA"NVO";
- GOTO ERREXIT;
- END
- #
- VCB AVAILABLE, BUILD PAAC AND CLEAR IT.
- #
- VCBDEF = TRUE;
- PAC = PACLNGTH / PAACSIZ$;
- SSTATS(P<PAAC>,PAACSIZ$);
- PACDEF = TRUE;
- P<BPAC> = LOC(PAAC[PAC]);
- FOR IDXA = 0 STEP 1 UNTIL (PAACSIZ$ - 1)
- DO
- BEGIN
- BPA$WORD[IDXA] = 0;
- END
- #
- CALL DISSECT TO BREAK APART THE CR/RAP/R.
- #
- DISSECT;
- IF ERRCODE NQ OK$
- THEN
- GOTO ERREXIT;
- #
- INIT THE PAAC ENTRY FROM THE CR/RAP/R SM.
- #
- PA$RHID[PAC] = SHO$HID[0];
- PA$RAPNM[PAC] = ANA$ANAME[0];
- PA$NACN[PAC] = CRNACN[0];
- PA$VCB[PAC] = VCB;
- PA$INCUR[PAC] = 0;
- PA$INNXT[PAC] = 0;
- PA$SNODE[PAC] = CRASNOD[0];
- PA$DNOD[PAC] = CRADNOD[0];
- PA$PORT[PAC] = CRRPORT[0];
- PA$ICMCN[PAC] = TRUE; # THIS IS AN INCOMING CONN #
- #
- LOCATE THE CALLED APPLICATION IN THE AST.
- #
- ASTNUM = ASTLNGTH / ASTSIZ$;
- FOR AORD = 0 STEP 1 WHILE
- ((AORD LS ASTNUM) AND
- (AST$ANAM[AORD] NQ ANA$ANAME[0]))
- DO
- BEGIN
- END
- #
- APPLICATION MAY NOT BE FOUND. IF SO, SET ERROR AND EXIT.
- #
- IF AORD EQ ASTNUM
- THEN
- BEGIN
- ERRCODE = RCRA"AND";
- GOTO ERREXIT;
- END
- #
- * CHECK IF THIS IS A SECONDARY APPLICATION AND IF SO, DETERMINE THE
- * PRIMARY AST ORDINAL.
- #
- PORD = AORD;
- IF AST$PANAM[AORD] NQ AST$SANAM[AORD]
- THEN
- BEGIN
- FOR PORD = 0 STEP 1 WHILE
- ((PORD LS ASTNUM) AND
- (AST$SANAM[AORD] NQ AST$PANAM[PORD]))
- DO
- BEGIN
- END
- IF PORD EQ ASTNUM
- THEN
- BEGIN
- PORD = AORD;
- END
- END
- #
- * CHECK IF NON REQUEST STARTABLE APPLICATION OR APPL THAT ALLOWS
- * ONLY ONE COPY ACTIVE, IS DOWN OR NOT NETTED ON. IF SO, SET ERROR
- * CODE AND ERREXIT.
- #
- IF ((NOT AST$RS[AORD]) AND (AST$MXCOP[AORD] EQ 1)) AND
- (AST$DNF[AORD] OR
- (AST$JSN[AORD] EQ " "))
- THEN
- BEGIN
- ERRCODE = RCRA"ANA";
- GOTO ERREXIT;
- END
- #
- * CHECK IF CALLED APPLICATION IS DISABLED
- #
- IF AST$DIF[AORD]
- THEN # CALLED APPLICATION IS DISABLED #
- BEGIN
- ERRCODE = RCRA"ADI";
- GOTO ERREXIT;
- END
- #
- * CHECK IF REQUESTED APPL IS NS OR CS.
- * IF SO, SET NO RECEIVER ERROR STATUS AND ERROR EXIT.
- #
- IF AST$PANAM[AORD] EQ "NS" OR
- AST$PANAM[AORD] EQ "CS"
- THEN
- BEGIN
- ERRCODE = RCRA"RCS";
- GOTO ERREXIT;
- END
- #
- * APPL OK SO FAR, CONTINUE LIMIT CHECK WITH MAX CONNECTION .
- * IF NON REQUEST STARTABLE APPLICATION OR APPLICATION THAT ALLOWS
- * ONLY ONE ACTIVE COPY IS AT CONNECTION LIMIT, SET ERROR EXIT CODE
- * AND ERROR EXIT.
- #
- IF ((NOT AST$RS[AORD]) AND (AST$MXCOP[AORD] EQ 1)) AND
- (AST$MCN[AORD] LQ
- (AST$TACN[AORD] + AST$AACN[AORD] + AST$RACN[AORD]))
- THEN
- BEGIN
- ERRCODE = RCRA"NMC";
- GOTO ERREXIT;
- END
- #
- * START THE INCALL BLOCK SEARCH.
- #
- FOUND = FALSE;
- IF INRECL GR 0
- THEN
- BEGIN
- #
- INCALL BLOCKS ARE DEFINED.
- COMPARE THE REQUEST INFO WITH THE INCALL BLOCKS DEFINED LOOKING
- FOR AN INCALL BLOCK THAT SATISFIES THE REQUEST.
- #
- FOR XX = 0 WHILE
- ((NOT FOUND) AND
- (PA$INNXT[PAC] LS INRECL))
- DO
- BEGIN
- PA$INCUR[PAC] = PA$INNXT[PAC];
- P<INCALL> = (P<INREC> + PA$INCUR[PAC]);
- PA$INNXT[PAC] = PA$INNXT[PAC] + INC$WC[0];
- #
- THE CALLED APPLICATION NAME, SOURCE HOST ID, SOURCE NODE,
- DESTINATION NODE AND PORT MUST MATCH BETWEEN THE SM AND THE
- INCALL BLOCK.
- IF EITHER OF THE PARAMETERS IS ZERO IN THE INCALL BLOCK,
- THEN THAT PARAMETER CHECK IS BYPASSED AND NOT USED TO
- QUALIFY THE MATCH.
- #
- IF INC$RANAME[0] EQ ASCA$APPL[0]
- THEN
- BEGIN
- IF ((INC$SHOST[0] NQ ZSHOST$ AND
- INC$SHOST[0] EQ ASCS$HOST[0]) OR
- INC$SHOST[0] EQ ZSHOST$)
- THEN
- BEGIN
- IF ((INC$SNOD[0] NQ 0 AND
- INC$SNOD[0] EQ PA$SNODE[PAC]) OR
- INC$SNOD[0] EQ 0)
- THEN
- BEGIN
- IF ((INC$DNOD[0] NQ 0 AND
- INC$DNOD[0] EQ PA$DNOD[PAC]) OR
- INC$DNOD[0] EQ 0)
- THEN
- BEGIN
- IF ((INC$PORT[0] NQ 0 AND
- INC$PORT[0] EQ PA$PORT[PAC]) OR
- INC$PORT[0] EQ 0)
- THEN
- BEGIN
- #
- * INCALL BLOCK MATCH SO FAR. NOW CHECK IF THE CALLED
- * DTE ADDRESS IN THE CR/RAP MATCHES THE DTE ADDRESS IN
- * THE INCALL BLOCK. ALSO CHECK IF THE FACILITIES MATCH.
- #
- DTEREJ = TRUE;
- IF (INC$DTEL[0] EQ 0) OR
- ((CRRAL2[0] EQ INC$DTEL[0]) AND
- (DTEA EQ B<0,DTEBITS>INC$DTEA[0]))
- THEN
- BEGIN
- DTEREJ = FALSE;
- END
- CHEKFAC(PAC);
- IF NOT FACREJ AND NOT DTEREJ
- THEN
- BEGIN
- FOUND = TRUE;
- PA$STATE[PAC] = PAACST"PAAWTVAL";
- END
- END
- END
- END
- END
- END
- END
- END
- #
- * AT THIS POINT, EITHER A MATCHING INCALL BLOCK FOUND OR NO INCALL
- * BLOCK FOUND OR INCALL BLOCKS NOT DEFINED. IF NO INCALL BLOCKS ARE
- * DEFINED, THEN CHECK FOR SINGLE HOST INCALL REQUEST QUALIFICATION.
- * A CALL IS QUALIFIED FOR SINGLE (OR INTRA ) HOST CALLING ATTEMPT
- * IF THE SOURCE AND DESTINATION NODES ARE ZERO.
- #
- IF NOT FOUND
- THEN
- BEGIN
- IF PA$SNODE[PAC] EQ 0 AND PA$DNOD[PAC] EQ 0
- THEN
- #
- * CALL QUALIFIES FOR SINGLE HOST. SET THE INCALL BLOCK POINTER
- * TO THE SINGLE HOST INCALL BLOCK, SET THE PAAC STATE SO IT IS
- * KNOWN A SINGLE HOST CALL IN EFFECT AND SET FOUND FLAG.
- #
- BEGIN
- P<INCALL> = LOC(SHINCALL);
- PA$STATE[PAC] = PAACST"PARAP";
- FOUND = TRUE;
- ERRCODE = OK$;
- FACREJ = FALSE;
- END
- END
- #
- * IF NO INCALL BLOCK ASSIGNED AT THIS POINT, THEN AN UNAUTHORIZED
- * ATTEMPT TO MAKE AN INCALL HAS OCCURRED. SET THE ERROR CODE AND
- * PROCEED TO ERROR EXIT PROCESSING.
- #
- IF NOT FOUND
- THEN
- BEGIN
- IF NOT FACREJ
- THEN
- #
- * ERROR UNRELATED TO FACILITY TYPE OF ERROR OCCURRED. MUST BE AN
- * UNAUTHORIZED ATTEMPT. OTHERWISE ALREADY SET BY CHEKFAC PROCEDURE.
- #
- ERRCODE = RCRA"NIM";
- GOTO ERREXIT;
- END
- #
- * MOVE THE APPROPRIATE FIELDS OF THE ASSIGNED INCALL BLOCK
- * TO THE PAAC ENTRY.
- #
- PA$ICWRD2[PAC] = INC$WRD2[0];
- PA$DBZ[PAC] = INC$DBZ[0];
- PA$ABL[PAC] = INC$ABL[0];
- PA$ICWRD3[PAC] = INC$WRD3[0];
- PA$FWORD[PAC] = INC$FWORD[0];
- PA$UWORD[PAC] = INC$UWORD[0];
- #
- * MOVE THE CALLED APPLICATION INFO INTO THE PAAC ENTRY.
- #
- PA$RAPNM[PAC] = ANA$ANAME[0];
- PA$RAPAN[PAC] = AST$AN[AORD];
- PA$SWAP[PAC] = ANA$ANAME[0];
- PA$SWAPAN[PAC] = AST$AN[AORD];
- #
- * ENTER WORDS OF THE CR/RAP/N SM IN THE PAAC ENTRY.
- #
- PA$RAPSM0[PAC] = SPMSG0[0];
- PA$RAPSM1[PAC] = PA$ICWRD2[PAC];
- IF (PA$SNODE[PAC] EQ 0 AND PA$DNOD[PAC] EQ 0)
- THEN
- PA$DT[PAC] = DT$INTA;
- ELSE
- PA$DT[PAC] = DT$INTE;
- #
- * CHECK IF REQUESTED APPLICATION IS REQUEST STARTABLE OR CAN HAVE
- * MULTIPLE COPIES. IF SO, A CALL TO NVFUCRS IS MADE TO DETERMINE
- * THE STATUS OF THE APPLICATION. UPON RETURN, THE CONNECTION IS PUT
- * INTO A NETON PENDING STATE, IS CONSIDERED IN ERROR, OR IS ALLOWED
- * THE CONNECTION.
- #
- IF AST$RS[AORD] OR
- (AST$MXCOP[AORD] GR 1)
- THEN
- BEGIN
- PORD = 0;
- RSTAT = CONNOK$;
- CTYP = AACON$;
- NVFUCRS(AORD,PORD,RSTAT,CTYP);
- IF RSTAT EQ NETP$
- THEN
- BEGIN
- PA$STATE[PAC] = PAACST"PANETP";
- TMB$ACN[0] = PA$NACN[PAC];
- TMB$QNUM[0] = LOC(P<AAINPQ>);
- SSCATR(TMBBUF[0]);
- PA$SWAP[PAC] = AST$PANAM[AORD];
- PA$CNUM[PAC] = TMB$CNUM[0];
- GOTO ERREXIT;
- END
- IF RSTAT EQ NOCONN$ OR
- RSTAT EQ MCLIMIT$
- THEN
- BEGIN
- ERRCODE = RCRA"ANA";
- GOTO ERREXIT;
- END
- IF RSTAT EQ CONNOK$
- THEN
- BEGIN
- PA$RAPNM[PAC] = AST$PANAM[PORD];
- PA$RAPAN[PAC] = AST$AN[PORD];
- PA$SWAP[PAC] = AST$PANAM[PORD];
- PA$SWAPAN[PAC] = AST$AN[PORD];
- END
- END
- SPMSG0[1] = PA$RAPSM0[PAC];
- SPMSG1[1] = PA$RAPSM1[PAC];
- SPMSG2[1] = PA$RAPSM2[PAC];
- ABHWORD[1] = ABHWORD[0];
- RB[1] = TRUE;
- CRALN[1] = 1;
- CRVCB[1] = PA$VCB[PAC];
- CRICT[1] = CT8ASCII;
- #
- * SEND THE CR/IAP/N SM TO THE OTQ, BYPASSING THE CTQ.
- #
- WCB$WORD[0] = 0;
- WCB$WC[0] = LCRRAPN + 2;
- ABHWORD[0] =0;
- ABHABT[0] = APPCMD;
- ABHADR[0] = 0;
- ABHTLC[0] = LCRRAPN;
- ABHACT[0] = 1;
- SSTAQE (P<OTQ>, WCBUF, ABHBUF, APSM[1]);
- #
- * CHANGE ACN STATE FROM CREATE TO ACTIVE.
- #
- ACNN = PA$NACN[PAC];
- NVFCFCE (ACNN,AE,NEWACN);
- IF NEWACN # COULD NOT FIND ACN ENTRY, SERIOUS PROBLEM #
- THEN
- BEGIN
- $BEGIN
- TBL$NAME[0] = "ACN";
- MESSAGE(TBLMSG,0);
- ABORT;
- $END
- END
- ELSE # ACN ENTRY EXIST, UPDATE ITS STATE #
- ACN$STATE[AE] = ACNST"ACTIVE";
- #
- * CR/RAP/N SM SENT. CLEAR THE OUTGOING SM AREA AND SET UP THE
- * CR/SWH/R SM.
- #
- IDX = (NMSGBUF$ + 1) / 2;
- FOR J = IDX STEP 1 UNTIL NMSGBUF$
- DO
- BEGIN
- MSG$WORD[J] = 0;
- END
- PFCSFC[1] = CRSWH;
- CRNACN[1] = CRACN[0];
- CRSNAME[1] = " ";
- CRSWAN[1] = PA$RAPAN[PAC];
- CRSWSL[1] = AASECLEV$;
- CRDT[1] = PA$DT[PAC];
- CRSWDBZ[1] = PA$DBZ[PAC];
- CRABL[1] = PA$ABL[PAC];
- CRSWHID[1] = PA$URHID[PAC];
- CRSWUBZ[1] = PA$UBZ[PAC];
- CRSWUDL[1] = UDATL;
- #
- * MOVE THE CALL USER DATA FROM THE CUD TO THE CR/SWH/R SM.
- * INITIALIZE THE WORD AND BIT POSITIONS FOR EXTRACTING AND STORING
- * THE DATA.
- #
- IF UDATL GR 0
- THEN
- BEGIN
- SORD = 4;
- SBIT = 0;
- EXORD = 0;
- EXBIT = 0;
- TEMP = 0;
- J = UDATBITS;
- FOR I = 0 WHILE J GR 0
- DO
- BEGIN
- IF J GR 0
- THEN
- BEGIN
- K = 60;
- J = J - 60;
- END
- ELSE
- BEGIN
- K = J;
- J = 0;
- END
- SSBEBF(CUD[0],EXORD,EXBIT,K,TEMP);
- SSBSBF(APSM[1],SORD,SBIT,K,TEMP);
- TEMP = 0;
- END
- END
- #
- * SEND THE CR/SWH/R SM.
- #
- NVFUMQE(P<CTQ>,APSM[1],APPPR$,0,LCRSWH);
- #
- * INCREMENT THE NUMBER OF A-A CONNECTIONS AND INCOMING CONNEC-
- * TION COUNT FOR THE CALLED APPLICATION.
- #
- AST$AACN[AORD] = AST$AACN[AORD] + 1;
- AST$ICCN[AORD] = AST$ICCN[AORD] + 1; #INCR INCOMING CONN COUNT#
- IF AORD NQ PORD
- THEN
- BEGIN
- AST$AACN[PORD] = AST$AACN[PORD] + 1;
- AST$ICCN[PORD] = AST$ICCN[PORD] + 1;
- END
- ERREXIT:
- #
- * CHECK IF AN ERROR HAS OCCURRED ALONG THE WAY.
- * IF SO, A CR/RAP/A SM MUST BE ISSUED, AN ACCOUNT MSG IS ISSUED,
- * THE PAAC AND VCB ARE RELEASED IF WARRANTED.
- #
- IF ERRCODE NQ OK$
- THEN
- BEGIN
- SPMSG0[1] = 0;
- PFCSFC[1] = PFCSFC[0];
- EB[1] = TRUE;
- CRNACN[1] = CRNACN[0];
- CRRRAP[1] = ERRCODE;
- NVFUMQE(P<CTQ>,APSM[1],APPPR$,0,LCRRAPA);
- #
- * ISSUE ACCOUNT MESSAGE ONLY IF PAAC ENTRY EXISTS.
- #
- IF PACDEF
- THEN
- BEGIN
- MOVNUM = ABAR$;
- NVFAIAM(PAC,MOVNUM);
- #
- * RELEASE THE PAAC ENTRY.
- #
- PAC = PAC * PAACSIZ$;
- SSTRTS(P<PAAC>,PAC,PAACSIZ$);
- END
- #
- * RELEASE THE VCB IF ASSIGNED.
- #
- IF VCBDEF
- THEN
- NVFUFVO(VCB);
- END
- END
- END # NVFARAP #
- TERM
cdc/nos2.source/nam5871/nvfarap.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator