*DECK     NVFOPSS 
USETEXT TEXTNVF 
USETEXT TEXTSS
USETEXT TXCMDNV 
USETEXT TXSMNVF 
USETEXT TXTAPSS 
      PROC NVFOPSS; 
# TITLE - PREPARE STATUS SEARCH.                                       #
      BEGIN 
# 
**    NVFOPSS - PREPARE STATUS SEARCH.
* 
*     D.K. ENDO    82/05/06 
*     C.J. BRION   83/04/27. 83/05/10. 83/11/08.
* 
*     THIS PROCEDURE ACTIONS A STATUS COMMAND THAT REQUIRES A SEARCH OF 
*     THE PTAC TABLE AND/OR THE VCB FILE. 
* 
*     PROC NVFOPSS
* 
*     ENTRY        1. STATUS COMMAND
* 
*     EXIT         1. PTAC DATA TO THE VCBSSQ.
*                  2. VCB SEARCH REQUEST TO VSQ.
* 
# 
  
# 
****  PROC NVFOPSS - XREF LIST BEGINS.
# 
  
      $BEGIN
      XREF
        BEGIN 
        PROC MESSAGE; 
        PROC ABORT; 
        END 
      $END
  
      XREF
        BEGIN 
        PROC NVFUZFW;        # ZERO FILL WORD                          #
        PROC SSTAQE;         # ACCEPT QUEUE ENTRY                      #
        END 
# 
****
# 
  
  
      DEF APPWRD # HDR$TXWCNT[1]+3 #;  # ORDINAL FOR APPL NAME         #
      DEF TRMWRD # HDR$TXWCNT[1]+2 #;  # ORDINAL FOR TERMINAL NAME     #
      DEF USRWRD1 #HDR$TXWCNT[1]+2 #;  # ORDINAL FOR USER NAME(STU)    #
      DEF USRWRD2 #HDR$TXWCNT[1]+3 #;  # ORDINAL FOR USER NAME(SSU)    #
      DEF CIPTXTL # 50 #;    # CHAR COUNT OF -COMMAND IN PROGRESS- TEXT#
  
  
  
      ITEM NUMAP;            # NUMBER APPLICATION INTERATIONS # 
      ITEM I;                # LOOP INDUCTION VARIABLE                 #
      ITEM SAORD;            # SECONDARY AST LOOP VARIABLE #
  
# 
      THIS ARRAY DEFINES THE -COMMAND IN PROGRESS- TEXT SENT WHEN A 
      STATUS IS REQUESTED AND THE SERIAL SEARCHER IS BUSY.
# 
      ARRAY CIPTXT [00:00] S(5);
        BEGIN 
        ITEM CT$MSG1    C(00,00,30) =[" PREVIOUS COMMAND INCOMPLETE, "];
        ITEM CT$MSG2    C(03,00,10) = ["TRY AGAIN."]; 
        ITEM CT$ZBYT    U(04,00,60) = [0];
        END 
  
  
# 
      THIS ARRAY IS USED TO STORE VALUE TO SEARCH FOR IN THE PTAC AND 
      THE VCB FILE. 
# 
      ARRAY CTEMP$WORD [00:00] S(1);
        BEGIN 
        ITEM CTEMP      C(00,00,07);
        ITEM CTEMP$ZERO U(00,42,18) = [0];
        ITEM CTEMP10    U(00,00,60);
        END 
  
      $BEGIN
# 
**    DEBTXT - DEBUG TEXT ARRAY.
# 
      ARRAY DEBTXT[00:00] S(4); 
        BEGIN 
        ITEM DEB$RTN       C(00,00,10)=["NVFOPSS:  "];
        ITEM DEB$TXT       C(01,00,20); 
        ITEM DEBZB         U(03,00,60)=[0]; 
        END 
  
      $END
  
  
  
      CONTROL EJECT;
#                                                                      #
#                            NVFOPSS CODE BEGINS HERE                  #
#                                                                      #
# 
*     IF THERE IS CURRENTLY A COMMAND IN PROGRESS, THEN TAKE NO ACTION, 
*     OTHERWISE CHECK IF THE SERIAL SEARCHER IS BUSY. 
# 
  
      IF NOT CMDINPGF 
      THEN
        BEGIN 
        IF NOT SSBUSYF
        THEN
          BEGIN 
  
  
# 
*     IF SERIAL SEARCHER IS NOT BUSY, THEN SET THE COMMAND IN PROGRESS
*     FLAG, AND SELECT THE CASE THAT APPLIES: 
# 
          CMDINPGF = TRUE;
          DATA$ = FALSE;
  
  
          WCB$WORD[1] = 0;
          ABHWORD[1] = 0; 
  
  
          P<TVCBSSQ> = LOC(NVFSM[1]); 
          P<TVSQ> = LOC(NVFSM[1]);
  
  
          SPMSG0[1] = 0;
  
  
# 
*     IF THE COMMAND IS STATUS ALL TERMINALS CONNECTED TO AN APPLICATION
*     OR ALL USERS CONNECTED TO AN APPLICATION THEN SEARCH THE AST TO 
*     FIND THE AST ENTRY FOR THIS APPLICATION. SEND A VCB SEARCH
*     REQUEST LOOKING FOR ALL ENTRIES THAT MATCH THE APPLICATION NUMBER 
*     OF THIS APPLICATION.
# 
          IF CRNT$CMD EQ SSA$ OR
             CRNT$CMD EQ SUA$ 
          THEN
            BEGIN 
  
  
            IF PAR$ELNAME[APPWRD] EQ "NVF"
            THEN
              BEGIN 
              WCB$WC[1] = 5;
  
              TSS$EC[0] = SSEC"NOERROR";
              TSS$VENDF[0] = FALSE; 
              TSS$APENDF[0] = FALSE;
              FOR I=0 STEP 1 WHILE I LS PTALNGTH/PTACSIZ$ 
              DO
                BEGIN 
                IF PTA$TNAM[I] NQ 0 
                THEN
                  BEGIN 
                  SPMSG0[1] = 0;
                  TSS$TN[0] = PTA$TN[I];
                  TSS$DT[0] = PTA$DT[I];
                  TSS$UWORD[0] = PTA$UWORD[I];
  
                  SPMSG2[1] = 0;
                  TSS$LTIME[0] = PTA$CNTIME[I]; 
                  TSS$CATIME[0] = PTA$SWTIME[I];
                  TSS$AACN[0] = PTA$ACN[I]; 
                  TSS$SWAPNM[0] = "NVF";
                  SSTAQE(P<VCBSSQ>,WCBUF[1],ABHBUF[1],NVFSM[1]);
                  END 
                END 
  
              SPMSG2[1] = 0;
              IF PTALNGTH/PTACSIZ$ EQ 0 
              THEN
                BEGIN 
                TSS$EC[0] = SSEC"NOMATCH";
                END 
              TSS$VENDF[0] = TRUE;
              TSS$APENDF[0] = TRUE; 
              SSTAQE(P<VCBSSQ>,WCBUF[1],ABHBUF[1],NVFSM[1]);
              END 
  
            ELSE
              BEGIN 
  
  
              FOR I=0 STEP 1 WHILE AST$ANAM[I] NQ PAR$ELNAME[APPWRD]
              DO
                BEGIN 
                END 
  
# 
*     CHECK IF PRIMARY APPLICATION WITH ACTIVE SECONDARY AST ENTRIES. 
*     IF SO, GENERATE VCB SERIAL REQUEST FOR EACH APPLICATION AND MARK
*     THE LAST REQUEST WITH LAST APPLICATION FLAG.
*     IF NO ACTIVE SECONDARY ENTRIES, GENERATE REQUEST FOR PRIMARY
*     APPLICATION WHICH WILL RESULT IN NO ENTRIES.
# 
              WCB$WC[1] = 5;
              TVS$WORDP[0] = WPOSA$;
              TVS$SGLEF[0] = FALSE; 
              TVS$MASK[0] = MASKA$; 
  
              IF AST$SANAM[I] EQ AST$PANAM[I] AND 
                 AST$MXCOP[I] NQ 1 AND
                 AST$CUCOP[I] NQ 0
              THEN
                BEGIN 
  
                NUMAP = AST$CUCOP[I]; 
                FOR SAORD = 0 STEP 1 WHILE
                  (SAORD LS (ASTLNGTH/ASTSIZ$)) 
                DO
                  BEGIN 
                  IF ((AST$PANAM[I] EQ AST$SANAM[SAORD]) AND
                      (AST$PANAM[SAORD] NQ AST$SANAM[SAORD]) AND
                      (AST$AN[SAORD] NQ 0)) 
                  THEN
                    BEGIN 
  
                    NUMAP = NUMAP - 1;
                    TVS$VALUE[0] = AST$AN[SAORD]; 
                    IF NUMAP NQ 0 
                    THEN
                      TVS$APENDF[0] = FALSE;
                    ELSE
                      TVS$APENDF[0] = TRUE; 
                    SSTAQE(P<VSQ>,WCBUF[1],ABHBUF[1],NVFSM[1]); 
                    END 
                  END 
                END 
              ELSE # NO SECONDARY ENTRIES # 
                BEGIN 
                TVS$VALUE[0] = AST$AN[I]; 
                TVS$APENDF[0] = TRUE; 
                SSTAQE(P<VSQ>,WCBUF[1],ABHBUF[1],NVFSM[1]); 
                END 
              END 
            END 
  
  
# 
*     IF THE CURRENT COMMAND IS STATUS A TERMINAL, SEARCH THE PTAC TABLE
*     FOR THE TERMINAL NAME, AND IF FOUND FOR A VCBSSQ ENTRY FROM THE 
*     PTAC ENTRY AND SEND IT TO THE VCBSSQ.  IF NOT FOUND THEN MAKE 
*     A VSQ ENTRY TO SEARCH FOR THE TERMINAL NAME WITH THE SINGLE ENTRY 
*     FLAG SET. 
# 
          ELSE IF CRNT$CMD EQ STT$
          THEN
            BEGIN 
  
  
            WCB$WC[1] = 5;
            CTEMP[0] = PAR$ELNAME[TRMWRD];
  
  
            FOR I=0 STEP 1 WHILE PTA$TN[I] NQ CTEMP[0] AND
                                 I LS PTALNGTH/PTACSIZ$ 
            DO
              BEGIN 
              END 
  
  
            IF I LS PTALNGTH/PTACSIZ$ 
            THEN
              BEGIN 
              SPMSG0[1] = 0;
              TSS$TN[0] = PTA$TN[I];
              TSS$DT[0] = PTA$DT[I];
              TSS$UWORD[0] = PTA$UWORD[I];
              SPMSG2[1] = 0;
              TSS$LTIME[0] = PTA$CNTIME[I]; 
              TSS$CATIME[0] = PTA$SWTIME[I];
              TSS$AACN[0] = PTA$ACN[I]; 
              SSTAQE(P<VCBSSQ>,WCBUF[1],ABHBUF[1],NVFSM[1]);
              TSS$VENDF[0] = TRUE;
              TSS$APENDF[0] = TRUE; 
              SSTAQE(P<VCBSSQ>,WCBUF[1],ABHBUF[1],NVFSM[1]);
              END 
  
  
            ELSE
  
  
              BEGIN 
              WCB$WC[1] = 5;
              TVS$WORDP[0] = WPOST$;
              TVS$SGLEF[0] = TRUE;
              TVS$VALUE[0] = CTEMP10[0];
              TVS$MASK[0] = MASKT$; 
              TVS$APENDF[0] = TRUE; 
              SSTAQE(P<VSQ>,WCBUF[1],ABHBUF[1],NVFSM[1]); 
              END 
            END 
  
# 
*     IF THE CURRENT COMMAND IS STATUS OF USER OR ALL TERMINALS UNDER 
*     A USER THEN, FOR EACH PTAC ENTRY THAT MATCHES THIS USER NUMBER
*     FORMAT A VCBSSQ ENTRY AND SEND IT TO THE VCBSSQ.  MAKE A VCB
*     SEARCH REQUEST FOR THIS USER NUMBER AND THE SINGLE ENTRY FLAG 
*     CLEARED.
# 
          ELSE
            BEGIN 
            IF CRNT$CMD EQ STU$ 
            THEN
              BEGIN 
              CTEMP[0] = PAR$ELNAME[USRWRD1]; 
              END 
            ELSE
              BEGIN 
              CTEMP[0] = PAR$ELNAME[USRWRD2]; 
              END 
            NVFUZFW(CTEMP$WORD);
  
            TSS$APENDF[0] = FALSE;
            FOR I=0 STEP 1 WHILE I LS PTALNGTH/PTACSIZ$ 
            DO
              BEGIN 
              IF CTEMP[0] EQ PTA$UNUM[I]
              THEN
                BEGIN 
                WCB$WC[1] = 5;
                SPMSG0[1] = 0;
  
                TSS$TN[0] = PTA$TN[I];
                TSS$DT[0] = PTA$DT[I];
                TSS$UWORD[0] = PTA$UWORD[I];
  
                SPMSG2[1] = 0;
                TSS$LTIME[0] = PTA$CNTIME[I]; 
                TSS$CATIME[0] = PTA$SWTIME[I];
                TSS$AACN[0] = PTA$ACN[I]; 
  
                SSTAQE(P<VCBSSQ>,WCBUF[1],ABHBUF[1],NVFSM[1]);
                END 
              END 
  
            WCB$WC[1] = 5;
            SPMSG0[1] = 0;
            TVS$WORDP[0] = WPOSU$;
            TVS$SGLEF[0] = FALSE; 
            TVS$VALUE[0] = CTEMP10[0];
            TVS$MASK[0] = MASKU$; 
            TVS$APENDF[0] = TRUE; 
            SSTAQE(P<VSQ>,WCBUF[1],ABHBUF[1],NVFSM[1]); 
            END 
          END 
  
  
# 
*     IF THE SERIAL SEARCHER IS BUSY, SEND MESSAGE TO HOP INDICATING A
*     COMMAND IS STILL IN PROGRESS. 
# 
        ELSE
          BEGIN 
          WCB$WC[1] = CIPTXTL/10 + 2; 
          ABHABT[1] = HOPTX$; 
          SSTAQE(P<CTQ>,WCBUF[1],ABHBUF[1],CIPTXT); 
          END 
        END 
  
  
      RETURN;                # **** RETURN ****                        #
      END # NVFOPSS # 
      TERM
