*DECK,NP$DATA *IF,DEF,XFR USETEXT AIPDEF USETEXT HEADER USETEXT NP$NWL USETEXT NP$GETS USETEXT NX$ACBX PROC NP$DATA; BEGIN # *1DC NP$DATA * * 1. PROC NAME AUTHOR DATE * NP$DATA Y. C. YIP 02/19/1985 * * 2. FUNCTIONAL DESCRIPTION * NP$DATA CHECKS THE MESSAGES THAT THE NETXFRC PASSES * TO IT. THE END RESULT OF THE VARIOUS CHECKS WILL * PROCDUCE A TRIGGER USED IN CALLING NETSTPR, THE * THE STATE TABLE ACTION PROCESSOR. * * 3. METHOD USED * VALUES OF THE QMSG MESSAGES FOR FILE TRANSFER ARE * STORED IN AN ARRAY TOGETHER WITH INTERNAL TRIGGER * VALUE. THE UPPER SLOT + 1 OF EACH QMSG COLUMN * ALWAYS CONTAINS THE ILLEGAL TRIGGER VALUE FOR * EACH STATE TABLE, (PRU MODE SEND, RECEIVER, AND * CHARACTER MODE SEND, AND RECEIVE). THE RECEIVED * QMSG IS ALWAYS DEPOSITED AT THE UPPDER SLOT + 1 * OF EACH QMSG COLUMN OF THE RESPECTIVE TABLES. * IN CASE THERE IS NO MATCH FOR THAT QMSG FOR THE * PRESET QMSGS WITHIN THE ARRAY, IT WILL FINALLY * MATCHES ITSELF AT THE UPPER SLOT + 1 LOCATION AND * GENERATES THE ILLEGAL TRIGGER VALUE. * * NON-QBLK/QMSG MESSAGES: * * IN THE CASE OF A INTRAHOST FILE TRANSFER, IT WILL * STORE THE DATA AND WRITES DIRECTLY ON THE OUTPUT * FET WHEREAS, IN THE CASE OF A CHARACTER MODE FILE * TRANSFER, IT WILL ALWAYS WRITE ON THE DISK BUFFER. * * 4. ENTRY CONDITIONS * LOC$HA AND LOC$TA ARE THE HEADERS AND TEXT AREAS * FOR THE MESSAGES BLOCK TYPE CAN BE 1,2,6 OR 7. * * 5. EXIT CONDITONS * A TRIGGER VALUE IS GENERATED USED IN * CALLING NP$STPR. * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * NP$NWL, NX$ACBX. * * 7. ROUTINES CALLED * NP$MSG - DAYFILE ILLEGAL TRIGGER RECEIVED. * * 8. DAYFILE MESSAGES * - "ILLEGAL TRIGGER RECEIVED" * # # **** PROC NP$DATA - XREF LIST. # XREF # EXTERNAL REFERENCE PROCS # BEGIN PROC NP$STPR; # STATE TABLE PROCESSOR # PROC NP$MSG; # DAYFILE MESSAGE PASSER # PROC NP$CIO; # PROC FOR ISSUING CIO CALLS # END # **** # DEF ERTABLMT # 6 #; # LIMIT OF ERROR CODE TABLE # DEF PRDLMT # 28 #; # TABLE SIZE OF THE FOUR TABLES # DEF PRDSPLOWER # 1 #; # LOWER BOUND FOR PRU SENDER TABLE # DEF PRDSPUPPER # 4 #; # UPPER BOUND FOR PRU SENDER TABLE # DEF PRDRPLOWER # 8 #; # LOWER BOUND FOR PRU RECE'V TABLE # DEF PRDRPUPPER # 10 #; # UPPER BOUND FOR PRU RECE'V TABLE # DEF PRDSCLOWER # 15 #; # LOWER BOUND FOR CHAR SENDER TABLE # DEF PRDSCUPPER # 20 #; # UPPER BOUND FOR CHAR SENDER TABLE # DEF PRDRCLOWER # 22 #; # LOWER FOR CHAR RECEIVER TABLE # DEF PRDRCUPPER # 25 #; # UPPER BOUND FOR CHAR RECEIVER TAB # DEF ERTABNO # 5 #; # NUMBER OF TABLES FOR ERROR CODE - # # TRIGGER MATCH # ITEM CRNT$ORD; # CURRENT VALUE OF TABLE ORDINAL # ITEM CONTRIG; # CURRENT VALUE OF TRIGGER # ITEM LEVLOP B; # FLAG FOR EXITTING LOOP # ITEM INDEX; # LOOP INDEX # ITEM TABSELECT; # ERROR TABLE SELECTOR # ITEM BACKTRIG; # RETURN TRIGGER BY CALLING NP$STPR # ARRAY ILLTRIG[0:0] S(3); # ILLEGAL TRIGGER # BEGIN ITEM ILLTRIGC C(00,00,24) = ["ILLEGAL TRIGGER RECEIVED"]; ITEM ILLTRIGZ U(02,24,36) = [0]; END ARRAY ERBLK[0:0] S(3); # ERROR BLOCK # BEGIN ITEM ERBLKV C(00,00,21) = ["BLOCK TYPE NOT QMSG"]; ITEM ERBLKZ U(02,06,54) = [0]; END BASED ARRAY ERR$TAB[0:0] S(1); # BASED ARRAY FOR ERROR CODE # BEGIN ITEM ERR$CODE U(00,00,32); # ERROR CODE # END ARRAY PFCSFCTAB[1:PRDLMT] S(1); # PFCSFC TABLE FOR LEVEL 7 QMSG # BEGIN ITEM PFSFV U(00,00,16) = [ # START OF PRU SENDER LEVEL 7 QMSG # LEV7$ER, # ER(E) # LEV7$SR, # SR # LEV7$RR, # RR # , # ILLEGAL TRIGGER # , , , # START OF PRU RECEIVER LEVEL 7 QMSG# LEV7$ES, # ES(E) # LEV7$SS, # SS # , # ILLEGAL TRIGGER # , , , , # START OF CHAR SENDER LEVEL 7 QMSG# LEV7$SR, # SR # LEV7$RR, # RR # LEV7$ER, # ER # LEV7$QR, # QR # LEV7$MR, # MR # , # ILLEGAL TRIGGER # , # START OF CHAR RECEIVER LEVEL 7 QMS# LEV7$SS, # SS # LEV7$ES, # ES # LEV7$MS, # MS # , # ILLEGAL TRIGGER # , , ]; ITEM PFSFTRIG U(00,30,30) = [ # START OF PRU SENDER TRIGGER # NSPTERK, # ER(OK) # NSPTSR, # SR # NSPTRRT, # RR RECEIVED # NRSTILL, # ILLEGAL TRIGGER # , , , # START OF PRU RECEIVER TRIGGER # NRPTESE, # ES(E) # NRPTSS, # SS # NRSTILL, # ILLEGAL TRIGGER # , , , , # START OF CHAR SENDER TRIGGER TABLE# NSCTSR, # SR # NSCTRRT, # RR # NSCTERK, # ER # NSCTQRE, # QR # NSCTMRR, # MR # NSCTILL, # ILLEGAL TRIGGER # , # START OF CHAR RECEIVER TRIGGER TAB# NRCTSS, # SS # NRCTESE, # ES(E) # NRCTMSR, # MS # NRCTILL, # ILLEGAL TRIGGER # , , ]; END # END OF PFCSFCTAB # ARRAY ERTAB [1: ERTABLMT] S(1); # ERROR CODE TABLE FOR ER AND ES# BEGIN ITEM ERCODE U(00,00,32) = [ PRDER1, # ER OR ES(OK) # PRDER2, # RETRYABLE RECEIVER ERROR # PRDER3, # NONRETRYABLE RECEIVE ERR # PRDER6, # RETRYABLE SENDER ERROR # PRDER7, # NON RETRYABLE SENDER ERR # # ILLEGAL ERROR CODE # ]; END ARRAY QRTAB [1: ERTABLMT] S(1); # ERROR CODE TABLE FOR QR # BEGIN ITEM QRCODE U(00,00,32) = [ PRDER1, # NO ERROR # PRDER2, # RETRYABLE RECEIVE ERROR # PRDER3, # NONRETRYABLE RECEIVE ERR # PRDER4, # PROTOCOL ERROR # PRDER5, # GO NOT ACCEPTED # # ILLEGAL ERROR CODE # ]; END ARRAY PRDPTR [0:NETRCOD] S(1); # CONTROL BLOCK FOR INDEXES INTO # BEGIN # PFCSFC LEVEL 7 QMSG # ITEM PRDLOWER U(00,00,30) = [ PRDSPLOWER, # LOWER BOUND SEND # PRDRPLOWER, # LOWER BOUND PRU # # RECEIVE # PRDSCLOWER, # LOWER BOUND CHAR # # SEND # PRDRCLOWER # LOWER BOUND CHAR # # RECEIVE # ]; ITEM PRDUPPER U(00,30,30) = [ PRDSPUPPER, # UPPER BOUND SEND # PRDRPUPPER, # UPPER BOUND PRU # # RECEIVE # PRDSCUPPER, # UPPER BOUND CHAR # # SEND # PRDRCUPPER # UPPER BOUND CHAR # # RECEIVE # ]; END # END OF PRDPTR # ARRAY ERRTRIG [1: ERTABLMT, 1 : ERTABNO] S(1); BEGIN ITEM ENTRV U(00,32,28) = [ # ER(E) AND PRU SENDER TABLE # [ NSPTERK, # ER(OK) # NSPTERE, # ER(E) WITH E=X20 # NSPTERE, # ER(E) WITH E=X21 # NSPTERE, # ER(E) WITH E=X28 # NSPTERE, # ER(E) WITH E=X29 # NRSTILL # ILLEGAL TRIGGER # ] # ER(E) AND CHARACTER SENDER TABLE # [ NSCTERK, # ER(OK) # NSCTERE, # ER(E) WITH E=X20 # NSCTERE, # ER(E) WITH E=X21 # NSCTERE, # ER(E) WITH E=X28 # NSCTERE, # ER(E) WITH E=X29 # NSCTILL # ILLEGAL TRIGGER # ] # ES(E) AND PRU RECEIVER TABLE # [ NRPTESE, # ES(OK) # NRPTESE, # ES(E) WITH E=X20 # NRPTESE, # ES(E) WITH E=X21 # NRPTESE, # ES(E) WITH E=X28 # NRPTESE, # ES(E) WITH E=X29 # NRSTILL # ILLEGAL TRIGGER # ] # ES(E) AND CHARACTER RECEIVER TABLE# [ NRCTESK, # ES(OK) # NRCTESE, # ES(E) WITH E=X20 # NRCTESE, # ES(E) WITH E=X21 # NRCTESE, # ES(E) WITH E=X28 # NRCTESE, # ES(E) WITH E=X29 # NRCTILL # ILLEGAL TRIGGER # ] # QR(E) AND CHARACTER SENDER TABLE # [ NSCTQRK, # QR(OK) # NSCTQRE, # QR(E) WITH E=X20 # NSCTQRE, # QR(E) WITH E=X21 # NSCTQRE, # QR(E) WITH E=X22 # NSCTQRE, # QR(E) WITH E= X23 # NSCTILL # ILLEGAL TRIGGER # ] ]; END # END OF TABLE # STATUS ERTABID NULL, # TABLE ID FOR SEARCHING ERROR CODE # TAB1, # ERROR CODE FOR ER AND PRU SENDER # TAB2, # ERROR CODE FOR ER AND CHAR SENDER # TAB3, # ERROR CODE FOR ES AND PRU RECEIVER# TAB4, # ERROR CODE FOR ES AND CHAR RECVER # TAB5; # ERROR CODE FOR QR AND CHAR SENDER # CONTROL EJECT; PROC PRDCOPY; BEGIN # *1DC PRDCOPY * * 1. PROC NAME AUTHOR DATE * PRDCOPY Y. C. YIP 02/19/1985 * * 2. FUNCTIONAL DESCRIPTION * PRDCOPY COPYIES CONTENT OF DATA RECEIVED THROUGH NETGETL * IN NETXFRC TO NET WORK BUFFER INDEXED BY FTTINDEX. * * 3. METHOD USED * FIRST, TEMPLATE FOR NETWORK BUFFER, FET$WORK IS PULLED * FET ADDRESS INDICATED BY FTTFETW[FTTINDEX]. * SECOND, A LOCAL TEMPLATE, WORD IS SET TO THE FIRST WORD * ADDRESS OF THE NETWORK BUFFER INDEXED BY FTT. * A LOCAL INDEX, IN$ADR IS SET SUCH IT POINTS TO THE WORD * WHERE DATA FROM LOC$TA SHOULD BE STORED. IN$ADR IS NORMALLY * ONE GREATER THAN THE VALUE OF IN POINTER OF NETWORK BUFFER * EXCEPT FOR THE BOUNDARY CONDITION MENTIONED BELOW. * THEN THE WHOLE CHUNK OF DATA IN LOC$TA IS COPIED TO * THE NETWORK BUFFER USING THE TLC IN THE LOC$TA. * BOUNDARY CONDITIONS ARE: * IN POINTER IN NETWORK BUFFER FET IS EQUAL TO * OUT POINTER IN NETWORK BUFFER FET. IN THIS CASE, * IN$ADR IS SET TO VALUE OF IN POINTER. * ERROR CONDITION IS: * IN$ADR IS EQUAL TO LIMIT POINTER IN NETBUF FET. * IN THIS CASE, CONTRIG IS SET TO INTERNAL ERROR TRIGGER. * * 4. ENTRY CONDITIONS * CONTRIG IS ZEROED OUT. * * 5. EXIT CONDITONS * CONTRIG IS ASSIGNED TO ERROR TRIGGER SHOULD AN ERROR * OCCUR. DATA IS COPYIED FROM DATA$WORD TO NETBUF * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * * 7. ROUTINES CALLED * -NONE * 8. DAYFILE MESSAGES * -NONE * # BASED ARRAY COPYAREA[0:0] S(1); # TEMPLATE FOR ADDRESSING # BEGIN # COPYING AREA # ITEM WORD U(00,00,60); END ITEM IN$ADR; # POINTER TO NETBUF AREA # ITEM INDEX; # LOOP INDEX # ITEM LOCTLC; # LENGTH OF TEXT TO BE COPIED # CONTROL EJECT; # # # CODE OF PRDCOPY BEGINS HERE # # # P = FTTFETW[FTTINDEX]; # PULL NETBUF TEMPLATE TO # # NETBUF ADDRESS IN THE FTT # P = 0; # SET COPYAREA TEMPLATE TO POINT TO # # 0 # P = FTTFETADR[FTTINDEX]; # SET DISK FET TEMPLATE TO # # MEMORY ADDRESS OF DISK FET # P = FTTCMV$BLK[FTTINDEX]; # SET CMB TEMPLATE TO CHARACTER # # CONVERSION TABLE ADDRESS # P
= LOC$HA; # PULL HEADER TEMPLATE TO HA # IF NOT FTTNOTRAN[FTTINDEX] # IF TRANSLATION NEEDED # THEN BEGIN IF ABHTLC NQ 0 # NON-ZERO ABHTLC # THEN BEGIN IN$ADR = FETWIN[0] + 1; # IN$ADR NOW POINTS TO INPOINTER + 1# IF FETWIN[0] EQ FETWOUT[0] # INITIAL CONDITION OF FET # THEN BEGIN IN$ADR = FETWIN[0]; # IN$ADR NOW IS THE SAME AS FETWIN # END LOCTLC = (ABHTLC*2 +14)/15;# COMPUTE LENGTH OF TEXT IN WORDS# WORD[IN$ADR] = DATA$WORD[0]; # COPY HEADER # FOR INDEX = 1 STEP 1 UNTIL LOCTLC DO BEGIN IN$ADR = IN$ADR + 1; # NEXT WORD # IF IN$ADR EQ FETWLIMIT[0] # IF IN POINTER EQ LIMIT POINTER# THEN BEGIN CONTRIG = NRCTITR; # SET CONTRIG TO INTERNAL ERROR # GOTO ENDCOPY; # RETURN WITHOUT FURTHER COPYING # END ELSE BEGIN WORD[IN$ADR] = DATA$WORD[INDEX]; # COPY WORD # END END # END OF FOR # FETWIN[0] = IN$ADR ; # UPDATE IN POINTER # END # END OF NON-ZERO ABHTLC # END # END OF TRANSLATION NEEDED # ELSE # TRANSLATION NOT NEEDED # BEGIN # FOR INTRAHOST BINARY # LOCTLC =(ABHTLC + 1 )*2/15 ; # GET NUMBER OF CM WORDS # # EXCLUDING THE ONE WORD TBH HEADER # IF LOCTLC GR 1 # IF NOT JUST THE TBH HEADER # THEN BEGIN FOR INDEX = 2 STEP 1 UNTIL LOCTLC# COPY DATA DIRECTLY TO CIO # # BUFFER # DO BEGIN IF FETIN[0] EQ FETOUT[0] - 1 # IF DISK BUFFER IS FULL # THEN BEGIN # RESET OUT PTR BY WRITING # NP$CIO(CIO$WRITE); # TO CIO BUFFER # END WORD[FETIN[0]] = DATA$WORD[INDEX];# COPY DATA TO DISK BUFF # FETIN[0] = FETIN[0] + 1; # BUMP IN POINTER OF DISK FET # IF FETIN[0] EQ FETLIM[0] # END OF BUFFER REACHED # THEN BEGIN FETIN[0] = FETFIR[0]; # RESET IN POINTER OF DISK BUFFER # END END END # END OF FOR LOOP # END # END OF IF # ENDCOPY: RETURN; # RETURN TO CALLER # END # END OF PROC PRDCOPY # CONTROL EJECT; PROC PRDERR; BEGIN # *1DC PRDERR * * 1. PROC NAME AUTHOR DATE * PRDERR Y. C. YIP 02/19/1985 * * 2. FUNCTIONAL DESCRIPTION * PRDERR CHECKS ERROR CODE FOR LEVEL 7 PFCSFC OF QR, ER * AND ES. IT THEN GENERATES THE VALUE OF THE TRIGGER * CORRESPONDING TO THESE ERROR CODES. * * 3. METHOD USED * FIRST,PFCSFC IS IDENTIFIED AND THE BASE ARRAY ERR$TAB IS * SET TO EITHER ERTAB OR QRTAB DEPENDING ON THE VALUE OF * TABSELECT. TABSELECT VALUE OF 1-4 WILL USE ERTAB AS * ERROR CODE TABLE WHEREAS VALUE OF 5 WILL USE QRTAB AS * THE ERROR CODE TABLE. * AFTER THE SEARCH, IF THE LOOP INDEX IS EQUAL TO THE * VALUE OF ERTABLMT, THE ERROR CODE RECEIVED IS ILLEGAL * ELSE, THE RIGHT TRIGGER IS PRODUCED BY INDEXING INTO * THE ARRAY ENTRV WITH INDEX OF THE ERROR TABLE AND THE * TABLE SELECTOR. * * 4. ENTRY CONDITIONS * TABSELECT - TABLE ORDINAL USED AS THE COLUMN SELECTOR * OF THE ENTRV ARRAY. * * 5. EXIT CONDITONS * CONTRIG IS UPDATED TO HAVE THE TRIGGER VALUE. * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * NX$ACBX * 7. ROUTINES CALLED * NP$MSG - DAYFILE PROCESSOR * * 8. DAYFILE MESSAGES * -ILLEGAL TRIGGER RECEIVED * # ITEM INDEX; # LOOP INDEX # ITEM CTEMP C(10); CONTROL EJECT; # # # PRDERR CODE BEGINS HERE # # # IF TABSELECT EQ ERTABID"TAB5" # QR ERROR CODE TABLE IS USED # THEN BEGIN P = LOC(QRTAB); END ELSE BEGIN P = LOC(ERTAB); # ELSE ER AND ES ERROR TABLE IS USED# END ERR$CODE[ERTABLMT-1] = LV7$ERROR;# DEPOSIT ERROR CODE IN TABLE # LEVLOP = FALSE; # SET LEAVE LOOP FLAG TO FALSE # FOR INDEX = 0 STEP 1 WHILE NOT LEVLOP # SCAN TABLE # DO BEGIN IF ERR$CODE[INDEX] EQ LV7$ERROR # OF A MATCH IS FOUND # THEN BEGIN CONTRIG = ENTRV[INDEX + 1,TABSELECT]; # GET TRIGGER # LEVLOP = TRUE; # SET EXIT FLAG # IF INDEX EQ ERTABLMT - 1 # IF FOUND IN LAST ENTRY # THEN BEGIN NP$MSG(ILLTRIG,XFRDTYPE); # ILLEGAL TRIGGER RECEIVED # END END END RETURN; # RETURN TO CALLER # END # END OF PRDERR # CONTROL EJECT; # # # CODE OF NP$DATA BEGINS HERE # # # P = LOC$TA; # PULL LEVEL 7 MESSAGE TEMPLATE # P
= LOC$HA; # PULL BLOCK HEADER TEMPLATE OVER # CRNT$ORD = FTTSTORD[FTTINDEX];#ASSIGN CURRENT TABLE ORDINAL FROM # # COMMON BLOCK VARIABLE FTTINDEX # LEVLOP =FALSE; # CONTROL LOOP INITIALIZED TO FALSE # IF ABHABT EQ APMSG AND FTTSTORD[FTTINDEX] EQ NETRCOD THEN # IF MSG AND CHARACTER RECEIVER # BEGIN # THE TABLE ORDINAL IS CHAR RECEIVER# CONTRIG = 0; # ZERO OUT CONTRIG # IF FTTSTATE[FTTINDEX] EQ # ONLY COPY IF IN DATA STATE # NRCDATA THEN BEGIN PRDCOPY; # COPY DATA RECEIVED TO NETBUF # END IF CONTRIG EQ 0 # IF NO COPY ERROR # THEN BEGIN CONTRIG = NRCTDAT; # DATA TRIGGER # END END ELSE BEGIN IF ABHABT EQ APPBLK AND FTTSTORD[FTTINDEX] EQ NETRCOD THEN # IF BLOCK AND CHARACTER RECEIVER # BEGIN CONTRIG = 0; # ZERO OUT CONTRIG # IF FTTSTATE[FTTINDEX] EQ # COPY BLK ONLY IN DATA STATE # NRCDATA THEN BEGIN PRDCOPY; # COPY BLOCK TO NETBUF # END END ELSE BEGIN # MUST BE APPQMSG OR APPQBLK # PFSFV[PRDUPPER[CRNT$ORD]] = LV7$BPFC; # PUT PFC IN LAST SLOT# FOR INDEX = PRDLOWER[CRNT$ORD] STEP 1 WHILE NOT LEVLOP DO BEGIN IF LV7$BPFC EQ PFSFV[INDEX] THEN BEGIN CONTRIG = PFSFTRIG[INDEX] ; # ASSIGN TRIGGER VALUE # LEVLOP = TRUE; IF INDEX EQ PRDUPPER[CRNT$ORD] THEN BEGIN NP$MSG(ILLTRIG,XFRDTYPE); # ILLEGAL TRIGGER # END END END IF CONTRIG EQ NSPTERK AND CRNT$ORD EQ NETSPOD THEN BEGIN # ER(E) AND PRU SENDER # TABSELECT = ERTABID"TAB1"; # SET TABLE SELECTOR TO TABLE 1 # END ELSE BEGIN IF CONTRIG EQ NSCTERK AND CRNT$ORD EQ NETSCOD THEN BEGIN TABSELECT = ERTABID"TAB2"; # ER(E) AND CHARACTER SENDER # END ELSE BEGIN IF CONTRIG EQ NRPTESE AND CRNT$ORD EQ NETRPOD THEN BEGIN TABSELECT = ERTABID"TAB3"; # ES(E) AND PRU RECEIVER # END ELSE BEGIN IF CONTRIG EQ NRCTESE AND CRNT$ORD EQ NETRCOD THEN BEGIN TABSELECT = ERTABID"TAB4"; # ES(E) AND CHAR RECEIVER# END ELSE BEGIN IF CONTRIG EQ NSCTQRE AND CRNT$ORD EQ NETSCOD THEN BEGIN TABSELECT = ERTABID"TAB5";# QR(E) AND CHAR SENDER # END ELSE BEGIN TABSELECT = ERTABID"NULL";# NO TABLE SELECT NEEDED # END END END END END IF TABSELECT NQ ERTABID"NULL" # SCAN ERROR CODE TABLE # THEN BEGIN PRDERR; # UPDATE DD FIELD # END END END BACKTRIG = CONTRIG; # SET BACKTRIG TO CONTRIG # FOR INDEX = 0 WHILE BACKTRIG NQ NIL # REPEAT WHILE BACKTRIG IS # DO # NOT NULL # BEGIN CONTRIG = BACKTRIG; # SET CONTRIG TO BACKTRIG # NP$STPR(FTTINDEX,CONTRIG,BACKTRIG); # CALLS STATE TABLE PROCSS # END RETURN; # RETURN TO CALLER # END # END OF NP$DATA # TERM *ENDIF