cdc:nos2.source:nam5871:nvfopac
Table of Contents
NVFOPAC
Table Of Contents
- [00008] PROC NVFOPAC
- [00013] PERFORM APPLICATION COMMAND.
- [00046] PROC NVFOFAD
- [00047] PROC NVFOPSS
- [00048] PROC NVFUMQE
- [00049] PROC SSTAQE
- [00050] PROC SSTETS
- [00051] PROC SSTRTS
Source Code
- NVFOPAC.txt
- *DECK NVFOPAC
- USETEXT TEXTNVF
- USETEXT TEXTSS
- USETEXT TXCMDNV
- USETEXT TXSMNVF
- USETEXT TXTAPSS
- PROC NVFOPAC;
- # TITLE NVFOPAC - PERFORM APPLICATION COMMAND. #
- BEGIN # NVFOPAC #
- #
- ** NVFOPAC - PERFORM APPLICATION COMMAND.
- *
- * A. LIM. 82/03/24.
- * C. BRION 83/04/26. 83/12/22.
- *
- * THIS PROCEDURE-S MAIN FUNCTION IS TO PERFORM APPLICATION COMMANDS.
- * IT PUTS THE ORGINAL COMMAND INTO UNSOLICITED-STATUS-QUEUE *USQ*.
- * IN THE EVENT OF AN ILLEGAL COMMAND, IT SENDS A TERMINAL-TEXT TO
- * CONNECTION-TRAFFIC-QUEUE *CTQ*. IT IS CALLED INTO EXECUTION BY:
- * *NVFODHC*
- *
- * PROC NVFOPAC
- *
- * ENTRY APPLICATION TYPE OF HOP COMMAND IN *WCBUF[1]*,
- * *HDRCMD[1]* AND *PARMS*. *WCBUF* IS DEFINED IN
- * TEXTSS, AND *HDRCMD* AND *PARMS* DEFINED IN TXCMDNV.
- *
- * EXIT THE COMMAND IS SENT TO *USQ* AND/OR
- * A SH/ISD IS SENT TO *OTQ*, OR
- * A TERMINAL-TEXT IS SENT TO *CTQ*.
- *
- * METHOD IF APPLICATION FOUND IN *AST*, SEND THE COMMAND TO *USQ*,
- * AND IF COMMAND IS ENABLING APPLICATION SET STATE IN *AST*
- * TO ENABLED. IF IDLE/DISABLE APPLICATION, SEND SH/ISD TO
- * *OTQ*. IF ILLEGAL APPLICATION, SEND A MESSAGE TO *CTQ*.
- #
- #
- **** PROC NVFOPAC XREF LIST
- #
- XREF
- BEGIN
- PROC NVFOFAD; # FORMAT APPICATION DATA #
- PROC NVFOPSS; # PREPARE STATUS SEARCH #
- PROC NVFUMQE; # MAKE A QUEUE ENTRY #
- PROC SSTAQE; # SS- ACCEPT A QUEUE ENTRY #
- PROC SSTETS; # SS- ENLARGE TABLE SPACE #
- PROC SSTRTS; # SS- REMOVE TABLE SPACE #
- END
- #
- ****
- #
- DEF APLWRD1 # HDR$TXWCNT[1]+2 #; # INDEX TO APPLICATION NAME #
- DEF APLWRD2 # HDR$TXWCNT[1]+3 #; # INDEX TO APPLICATION NAME #
- ITEM AN U; # APPLICATION NUMBER #
- ITEM ANAME C(10); # APPLICATION NAME #
- ITEM I U; # LOOP VARIABLE #
- ITEM AORD U; # AST ORDINAL #
- ITEM ITEMP I; # INTEGER TEMPORARY #
- ITEM MATCH B; # LOOP EXIT VARIABLE #
- ITEM NENTRY U; # NO OF ENTRIES IN AST #
- ITEM SECNUM U; # NUMBER SECONDARY APPLICATIONS #
- ITEM XJ U; # LOOP VARIABLE #
- #
- * ILAMSG - INVALID APPLICATION MESSAGE BUFFER.
- #
- ARRAY ILAMSG[00:00] S(3);
- BEGIN
- ITEM ILA$MSG C(00,00,20) = ["INVALID APPLICATION."];
- ITEM ILA$ZERO U(02,00,60) = [0]; # ZERO BYTE TERMINATOR #
- END
- CONTROL EJECT;
- IF HDR$VERB[1] EQ DIA$
- OR HDR$VERB[1] EQ ENA$
- OR HDR$VERB[1] EQ IDA$
- THEN
- BEGIN # COMMAND VERB = DIA/ENA/IDA #
- MATCH = FALSE;
- FOR I = HDR$TXWCNT[1] STEP 1 WHILE (NOT MATCH) AND
- ((I - HDR$TXWCNT[1]) LS HDR$SPCNT[1])
- DO
- BEGIN # SEARCH PARM LIST FOR APPL NAME #
- IF PAR$PCODE[I] EQ APP$
- THEN
- BEGIN
- ANAME = PAR$ELNAME[I]; # SAVE APPL NAME #
- MATCH = TRUE;
- END
- END
- #
- * SEARCH *AST* FOR ENTRY THAT MATCHES THE APPL NAME AND SAVE
- * THE APPLICATION NUMBER.
- #
- MATCH = FALSE;
- NENTRY = ASTLNGTH/ASTSIZ$; # CALCULATE NUMBER OF ENTRIES #
- FOR I = 0 STEP 1 WHILE (NOT MATCH) AND (I LS NENTRY)
- DO
- BEGIN
- IF AST$ANAM[I] EQ ANAME
- THEN
- BEGIN
- AN = AST$AN[I]; # SAVE APPL NUMBER #
- MATCH = TRUE;
- END
- END
- WCB$WC[1] = 0; # CLEAR WC WORD #
- ABHWORD[1] = 0; # CLEAR ABH WORD #
- SPMSG0[1] = 0; # CLEAR MESSAGE BUFFER #
- IF MATCH
- THEN
- BEGIN
- NVFUMQE(P<USQ>,PARMS[0],5,0,HDR$TXWCNT[1]*10);
- IF HDR$VERB[1] EQ ENA$
- THEN
- BEGIN
- AST$DIF[I-1] = FALSE; # SET AST STATE TO ENABLED #
- #
- * CHECK IF AST ENTRY IS A PRIMARY ENTRY WITH SECONDARY ENTRIES
- * ACTIVE. IF SO, RESET THE DISABLE FLAG OF EACH SECONDARY AST ENTRY
- * AS WELL AS THE PRIMARY.
- #
- IF ((AST$UPANAM[I-1] EQ AST$USANAM[I-1]) AND
- (AST$MXCOP[I-1] GR 1))
- THEN
- BEGIN
- FOR AORD = 0 STEP 1 WHILE AORD LS NENTRY
- DO
- BEGIN
- IF AST$SANAM[AORD] EQ AST$PANAM[I-1]
- THEN
- AST$DIF[AORD] = FALSE;
- END
- END
- END
- ELSE
- BEGIN
- #
- * COMMAND IS A DISABLE OR IDLE APPLICATION. SET UP THE SHUT/INSD
- * SUPERVISORY COMMAND. IF DISABLE, THEN SET THE DISABLE FLAG OF THE
- * AST ENTRY AND THE IMMEDIATE SHUT FLAG OF THE SM. IF A PRIMARY AP-
- * PLICATION ONLY, SEND THE SHUT. IF SECONDARY COPIES EXIST AND ARE
- * ACTIVE, FIND THEM IN THE AST AND SEND THEM THE SHUT/INSD SM.
- #
- PFCSFC[1] = SHISD;
- SHISAN[1] = AN;
- SHISF[1] = FALSE;
- SHANAME[1] = ANAME;
- WCB$WC[1] = LSH + 2;
- ABHABT[1] = APPCMD;
- ABHACT[1] = CT60TRANS;
- ABHTLC[1] = LSH ;
- IF HDR$VERB[1] EQ DIA$
- THEN
- BEGIN
- SHISF[1] = TRUE;
- AST$DIF[I-1] = TRUE;
- END
- IF AN NQ 0
- THEN
- SSTAQE(P<OTQ>,WCBUF[1],ABHBUF[1],NVFSM[1]);
- ELSE
- BEGIN
- IF AST$USANAM[I-1] EQ AST$UPANAM[I-1] AND
- AST$MXCOP[I-1] GR 1
- THEN
- BEGIN
- FOR AORD = 0 STEP 1 WHILE AORD LS NENTRY
- DO
- BEGIN
- IF ((AST$SANAM[AORD] EQ AST$PANAM[I-1]) AND
- (AST$PANAM[AORD] NQ AST$SANAM[AORD]) AND
- (AST$JSN[AORD] NQ " "))
- THEN
- BEGIN
- SHANAME[1] = AST$PANAM[AORD];
- SHISAN[1] = AST$AN[AORD];
- SSTAQE(P<OTQ>,WCBUF[1],ABHBUF[1],NVFSM[1]);
- IF HDR$VERB[1] EQ DIA$
- THEN
- AST$DIF[AORD] = TRUE;
- END
- END # FOR LOOP #
- END
- ELSE # APPLICATION NOT NETTED ON #
- IF HDR$VERB[1] EQ DIA$
- THEN
- AST$DIF[I-1] = TRUE;
- END
- END
- WCB$WORD[1] = 0; # CLEAR WC WORD AGAIN #
- ABHWORD[1] = 0; # CLEAR ABH WORD AGAIN #
- WCB$IAF[1] = TRUE; # SET INPUT-ALLOW FLAG TRUE #
- WCB$HAF[1] = FALSE; # SET HOP-ALERT FLAG FALSE #
- WCB$WC[1] = 2;
- ABHABT[1] = HOPTX$;
- SSTAQE(P<CTQ>,WCBUF[1],ABHBUF[1],MSGBUF[0]); # SEND NULL TXT#
- END
- ELSE
- BEGIN # ILLEGAL APPLICATION #
- WCB$IAF[1] = TRUE;
- WCB$HAF[1] = FALSE;
- WCB$WC[1] = LMSG30$/10 + 2;
- ABHABT[1] = HOPTX$;
- ABHADR[1] = HDR$OPORD[1];
- ABHTLC[1] = LMSG30$;
- SSTAQE(P<CTQ>,WCBUF[1],ABHBUF[1],ILAMSG[0]);
- END
- END # COMMAND VERB = DIA/ENA/IDA #
- #
- * IF THE CURRENT COMMAND IS A STATUS OF APPLICATION, OF ALL TERMS
- * CONNECTED TO AN APPLICATION OR ALL USERS CONNECTED TO AN APPL,
- * THEN SEARCH THE AST FOR THIS APPLICATION. IF FOUND, SEND THE APPL
- * DATA TO GET FORMATTED AND, IF THE CURRENT COMMAND IS NOT JUST A
- * STATUS OF AN APPL, SEND THE COMMAND TO THE SERIAL SEARCH REQUEST
- * PROC TO SEARCH THE VCB-S FOR ALL THE TERMS/USERS CONNECTED TO THIS
- * APPLICATION.
- #
- ELSE IF HDR$VERB[1] EQ STA$ OR
- HDR$VERB[1] EQ SSA$ OR
- HDR$VERB[1] EQ SUA$
- THEN
- BEGIN
- IF HDR$VERB[1] EQ STA$
- THEN
- BEGIN
- ANAME = PAR$ELNAME[APLWRD1];
- END
- ELSE
- BEGIN
- ANAME = PAR$ELNAME[APLWRD2];
- END
- #
- * CHECK IF APPL NAME NOT NVF.
- #
- IF ANAME NQ "NVF"
- THEN
- BEGIN
- #
- * APPL NAME NOT NVF. LOCATE AST ENTRY FOR APPL NAME.
- #
- FOR I=0 STEP 1 WHILE ANAME NQ AST$ANAM[I] AND
- I LS ASTLNGTH/ASTSIZ$
- DO
- BEGIN
- END
- IF I LS ASTLNGTH/ASTSIZ$
- THEN
- BEGIN
- #
- * AST ENTRY FOUND. SEND PRIMARY APPLICATION STATUS LINE.
- * THEN CHECK IF NOT APPLICATION STATUS IN WHICH CASE A SERIAL
- * SEARCH OF THE VCBS IS REQUIRED.
- * OTHERWISE, FURTHER CHECK OF APPLICATION TYPE AND COPIES IS
- * NEEDED.
- #
- NVFOFAD(I);
- IF HDR$VERB[1] NQ STA$
- THEN
- BEGIN
- #
- * CALL NVFOPSS FOR SERIAL SEARCH OF VCBS.
- #
- NVFOPSS;
- END
- ELSE
- BEGIN
- #
- * STATUS OF APPLICATION.
- * SET UP WORD COUNT WORD AND ABH WORD FOR "READY.." MSG.
- #
- WCB$WORD[1] = 0;
- WCB$IAF[1] = TRUE;
- WCB$WC[1] = 2;
- ABHWORD[1] = 0;
- ABHABT[1] = HOPTX$;
- #
- * DETERMINE IF MULTIPLE COPY TYPE APPLICATION.
- * IF SO, FINISHED, SEND "READY.."
- #
- IF AST$MXCOP[I] EQ 1
- THEN
- SSTAQE(P<CTQ>,WCBUF[1],ABHBUF[1],NVFSM[1]);
- ELSE
- BEGIN
- #
- * MULTIPLE COPY TYPE APPLICATION.
- * CHECK IF MORE THAN 1 COPY ACTIVE.
- * IF NOT, FINISHED, SEND "READY.." STATUS LINE.
- #
- IF AST$CUCOP[I] EQ 0
- THEN
- SSTAQE(P<CTQ>,WCBUF[1],ABHBUF[1],NVFSM[1]);
- ELSE
- BEGIN
- #
- * MULTIPLE COPY TYPE APPLICATION HAS AT LEAST ONE COPY ACTIVE.
- * SET UP TO FIND THE SECONDARY APPLICATIONS AND SEND A STATUS LINE
- * FOR EACH BEING AWARE THAT THE LAST LINE MUST HAVE THE INPUT
- * ALLOWED FLAG SET TRUE IN ORDER TO FINISH THE COMMAND.
- #
- SECNUM = 0;
- NENTRY = ASTLNGTH / ASTSIZ$;
- FOR XJ = 0 STEP 1 WHILE
- (SECNUM LS AST$CUCOP[I]) AND
- (XJ LS NENTRY)
- DO
- BEGIN
- IF ((AST$PANAM[I] EQ AST$SANAM[XJ]) AND
- (AST$JSN[XJ] NQ " ") AND
- (AST$PANAM[XJ] NQ AST$SANAM[XJ]))
- THEN
- BEGIN
- NVFOFAD(XJ);
- SECNUM = SECNUM + 1;
- IF SECNUM EQ AST$CUCOP[I]
- THEN
- BEGIN
- #
- * LAST STATUS LINE SENT. SEND "READY.. " STATUS LINE.
- #
- WCB$WORD[1] = 0;
- ABHWORD[1] = 0;
- WCB$WC[1] = 2;
- ABHABT[1] = HOPTX$;
- WCB$IAF[1] = TRUE;
- SSTAQE(P<CTQ>,WCBUF[1],ABHBUF[1],NVFSM[1]);
- END
- END
- END
- #
- * IF THE NUMBER OF SECONDARY APPLICATIONS IS MORE THAN THE NUMBER
- * OF MESSAGES SENT, THE "READY.." MESSAGE WAS NOT SENT OUT. SEND
- * THE "READY.." STATUS LINE.
- #
- IF SECNUM LS AST$CUCOP[I]
- THEN
- BEGIN
- WCB$WORD[1] = 0;
- ABHWORD[1] = 0;
- WCB$WC[1] = 2;
- ABHABT[1] = HOPTX$;
- WCB$IAF[1] = TRUE;
- SSTAQE(P<CTQ>,WCBUF[1],ABHBUF[1],NVFSM[1]);
- END
- END
- END
- END
- END
- ELSE
- BEGIN
- WCB$WORD[1] = 0;
- WCB$IAF[1] = TRUE;
- WCB$WC[1] = 2 + LMSG30$/10;
- ABHWORD[1] = 0;
- ABHABT[1] = HOPTX$;
- SSTAQE(P<CTQ>,WCBUF[1],ABHBUF[1],ILAMSG);
- END
- END
- #
- * IF THIS APPLICATION IS NVF, SET UP AN AST ENTRY FOR NVF TO
- * TO PASS TO THE STATUS FORMATTING ROUTINE. IF THE CURRENT
- * COMMAND IS STATUS, OF ALL USERS OR TERMINALS CONNECTED TO NVF,
- * CALL THE PREPARE SERIAL SEARCH PROC, OTHERWISE SEND A NULL
- * TEXT TO THE HOP WITH THE INPUT ALLOWED FLAG SET.
- #
- ELSE
- BEGIN
- SSTETS(P<AST>,0,ASTSIZ$);
- AST$ANAM[0] = "NVF";
- AST$JSN[0] = "NVF";
- AST$DIF[0] = FALSE;
- AST$DNF[0] = FALSE;
- AST$TACN[0] = PTALNGTH/PTACSIZ$;
- AST$AACN[0] = 0;
- NVFOFAD(0);
- SSTRTS(P<AST>,0,ASTSIZ$);
- IF HDR$VERB[1] NQ STA$
- THEN
- BEGIN
- NVFOPSS;
- END
- ELSE
- BEGIN
- WCB$WORD[1] = 0;
- WCB$IAF[1] = TRUE;
- WCB$WC[1] = 2;
- ABHWORD[1] = 0;
- ABHABT[1] = HOPTX$;
- SSTAQE(P<CTQ>,WCBUF[1],ABHBUF[1],NVFSM[1]);
- END
- END
- END
- #
- * IF THE CURRENT COMMAND IS STATUS ALL APPLICATIONS, FOR EACH ENTRY
- * IN THE AST, FORMAT THE STATUS AND SEND IT OFF TO THE HOP.
- #
- ELSE IF HDR$VERB[1] EQ STS$
- THEN
- BEGIN
- IF PAR$PCODE[HDR$TXWCNT[1]+3] NQ AC$
- THEN
- BEGIN
- FOR I=0 STEP 1 UNTIL ASTLNGTH/ASTSIZ$-1
- DO
- BEGIN
- NVFOFAD(I);
- END
- END
- #
- * IF THE CURRENT COMMAND IS STATUS ALL ACTIVE APPLICATIONS, FOR EACH
- * ENTRY IN THE AST WHERE THE APPLICATION IS ACTIVE, FOR THE STATUS
- * MESSAGE AND SEND IT OFF TO THE HOP.
- #
- ELSE
- BEGIN
- FOR I=0 STEP 1 UNTIL ASTLNGTH/ASTSIZ$-1
- DO
- BEGIN
- IF (NOT AST$DIF[I] AND
- NOT AST$DNF[I] AND
- AST$JSN[I] NQ " ") OR
- (NOT AST$DIF[I] AND
- NOT AST$DNF[I] AND
- AST$JSN[I] EQ " " AND
- AST$CUCOP[I] NQ 0 AND
- AST$MXCOP[I] GR 1)
- THEN
- BEGIN
- NVFOFAD(I);
- END
- END
- END
- #
- * FINALLY SEND A NULL TEXT TO THE C-LAYER TO CLEAN THE PIPE LINE.
- #
- WCB$WORD[1] = 0;
- WCB$IAF[1] = TRUE;
- WCB$WC[1] = 2;
- ABHWORD[1] = 0;
- ABHABT[1] = HOPTX$;
- SSTAQE(P<CTQ>,WCBUF[1],ABHBUF[1],NVFSM[1]);
- END
- END # NVFOPAC #
- TERM
cdc/nos2.source/nam5871/nvfopac.txt ยท Last modified: 2023/08/05 17:23 by Site Administrator