*DECK     NVFISUE 
USETEXT TEXTNVF 
USETEXT TXTAPSS 
PROC NVFISUE; 
# TITLE NVFISUE - SET USER ENVIRONMENT.   # 
  
      BEGIN  # NVFISUE #
# 
***   NVFISUE - SET USER ENVIRONMENT. 
* 
*     D. G. DEPEW.           82/01/11.
* 
*     NVFISUE ESTABLISHES THE OPERATING ENVIRONMENT USED BY NVF TO
*     CONDUCT DIALOG WITH TERMINAL USERS CONNECTED TO NVF.  THAT IS,
*     THE HALF-DUPLEX AND TRUNCATE UPLINE DATA MODES ARE SET AND
*     CERTAIN USER MESSAGES ARE PREFORMATTED FOR NETWORK OUTPUT.
* 
*     PROC NVFISUE
* 
*     ENTRY   NONE. 
* 
*     EXIT    1. A LST/HDX SM SPECIFYING THAT ALL CONNECTIONS WILL
*                OPERATE IN HALF-DUPLEX MODE HAS BEEN PLACED IN THE 
*                OUTGOING TRAFFIC QUEUE.
*             2. A DC/TRU SM SPECIFYING THAT OVERSIZED BLOCKS WILL BE 
*                TRUNCATED ON ALL CONNECTIONS HAS BEEN PLACED IN THE
*                OUTGOING TRAFFIC QUEUE.
*             3. A LOCAL COPY OF THE SYSTEM SYSTEM HEADER LINE FROM CMR 
*                HAS BEEN STORED (COMMON BLOCK/DECK *TMSGNVF*), 
*                APPROPRIATELY FORMATTED FOR OUTPUTTING TO AN IVT.
*             4. THE CORRECT DISPLAY CODE FOR A COLON, ACCORDING TO THE 
*                CHARACTER SET OF THE RUNNING SYSTEM, HAS BEEN STORED 
*                IN THE CORRECT CHARACTER POSITIONS OF ALL USER PROMPT
*                MESSAGES (I.E., FAMILY, USER NAME, PASSWORD AND
*                APPLICATION PROMPTS).
# 
  
  
  
  
# 
****  PROC NVFISUE - XREF LIST. 
# 
      XREF
        BEGIN 
        PROC SSBEBF;         # EXTRACT BITFIELD                        #
        PROC SSBSBF;         # STORE BITFIELD                          #
        PROC SSTAQE;         # ACCEPT QUEUE ENTRY                      #
        FUNC XSFW;           # SPACE FILL WORD (MACREL)                #
        PROC VERSION;        # GET SYSTEM TITLE AND VERSION (MACREL)   #
        END 
# 
****
# 
  
  
*CALL TMSGNVF 
  
  
      DEF CSLOC$   #O"67"#;  # ADDR OF CHAR SET FLAG IN JOB COMM AREA  #
      DEF REPLACE$ (PROMPT, WP, BP) 
                    #STOREWD = WP;
                     STOREBP = BP;
                     SSBSBF (PROMPT, STOREWD, STOREBP, 6, COLON)#;
  
  
      ITEM I;                # LOOP INDUCTION VARIABLE                 #
      ITEM COLON;            # COLON CHAR AND TEMP STORAGE             #
      ITEM FETCHWD  I = 1;   # SYSTEM HEADER STARTING FETCH WORD       #
      ITEM FETCHBP  I = 0;   # SYSTEM HEADER STARTING FETCH BIT POS    #
      ITEM STOREWD  I = 0;   # SYSTEM HEADER STARTING STORE WORD       #
      ITEM STOREBP  I = 6;   # SYSTEM HEADER STARTING STORE BIT POS    #
  
  
      BASED ARRAY CHARSET [00:00] S(1); 
        ITEM CS$64      B(00,00,01);   # CHARACTER SET FLAG            #
  
  
# 
*     PARAMETER WORD FOR NOS VERSION MACRO. 
# 
      ARRAY VERPAR [00:00] S(1);
        BEGIN 
        ITEM VP$FORM2   B(00,00,01) = [TRUE]; 
        ITEM VP$BC      U(00,01,11) = [30];      # 30 BYTES = 6 WORDS  #
        ITEM VP$SBBP    U(00,12,30) = [0];       # SOURCE/REC BYTE POS #
        ITEM VP$WADDR   U(00,42,18);             # RECEIVING ARRAY ADR #
        END 
  
  
  
  
  
      CONTROL FASTLOOP; 
  
# 
*     WE BEGIN BY FETCHING (FROM CMR) AND REFORMATTING THE SYSTEM 
*     HEADER LINE.  THE LINE IS SIX WORDS LONG AND (AS FORMATTED IN 
*     CMR) CONTAINS IMBEDDED BINARY ZERO CHARACTERS.  THE LINE MUST BE
*     PREFIXED WITH A NULL (BLANK) FORMAT EFFECTOR AND SUFFIXED WITH A
*     UNIT SEPARATOR (ZERO BYTE).  ALSO, THE IMBEDDED BINARY ZERO 
*     CHARACTERS MUST BE CONVERTED TO BLANKS. 
# 
      VP$WADDR[0] = LOC (SYSHDR[1]);        # SET ADDR TO RECEIVE HDR  #
      VERSION (VERPAR[0]);                  # GET SYSTEM HEADER LINE   #
      SYS$FE[0] = " ";
      FOR I=1  STEP 1  UNTIL 6
      DO                     # RT SHIFT ONE CHAR AND BLANK FILL ZEROES #
        BEGIN 
        SSBEBF (SYSHDR[0], FETCHWD, FETCHBP, 60, COLON);
        COLON = XSFW (COLON); 
        SSBSBF (SYSHDR[0], STOREWD, STOREBP, 60, COLON);
        END 
      SYS$ZB[6] = 0;
  
  
# 
*     NOW REPLACE THE DOLLAR SIGNS WITH COLONS IN THE FIVE USER PROMPTS.
*     THE CHARACTER SET FLAG IS IN THE SIGN BIT POSITION OF LOCATION
*     67B OF THE JOBS FIELD LENGTH.  SINCE THERE ARE ONLY FIVE
*     CHARACTER POSITIONS TO BE STORED, A RATHER SIMPLE TECHNIQUE HAS 
*     BEEN CHOSEN - THE CHARACTER POSITIONS HAVE BEEN HARD CODED, IN
*     COMDECK *TMSGNVF*, AND ARE SIMPLY STORED VIA PROC *SSBSBF*.  A
*     PARAMETERIZED DEF HAS BEEN DEFINED TO SAVE CODING.
# 
      P<CHARSET> = CSLOC$;
      IF CS$64[0] 
      THEN                   # 64 CHARACTER SET                        #
        COLON = 0;
      ELSE                   # 63 CHARACTER SET                        #
        COLON = O"63";
  
      REPLACE$ (APPBUF[0],  APPWP$, APPBP$);     # APPLICATION:        #
      REPLACE$ (FAMBUF[0],  FAMWP$, FAMBP$);     # FAMILY:             #
      REPLACE$ (PIDBUF[0],  PIDWP$, PIDBP$);     # PERSONAL ID:        #
      REPLACE$ (PWRDBLK[0], PASWP$, PASBP$);     # PASSWORD:           #
      REPLACE$ (USRBUF[0],  USRWP$, USRBP$);     # USER NAME:          #
  
  
# 
*     FINALLY, ISSUE THE LST/HDX AND DC/TRU SUPERVISORY MESSAGES.  THE
*     MESSAGES CAN HAVE IDENTICAL ABH'S.  SET UP ABH FIRST, THEN SM 
*     BODIES, THEN ISSUE MESSAGES.
# 
      ABHWORD[1] = 0;        # SET UP ABH WORD                         #
      ABHABT[1] = APPCMD; 
      ABHACT[1] = CT60TRANS;
      ABHTLC[1] = 1;
  
      SPMSG0[1] = 0;         # SET UP AND ISSUE DC/TRU SM              #
      PFCSFC[1] = DCTRU;
      SSTAQE (P<OTQ>, 3, ABH[1], APSM[1]);
  
      PFCSFC[1] = LSTHDX;    # SET UP AND ISSUE LST/HDX SM             #
      LSTDIS[1] = TRUE;      # INPUT INITIALLY DISABLED FOR ALL ACN'S  #
      SSTAQE (P<OTQ>, 3, ABH[1], APSM[1]);
  
  
      END  # NVFISUE #
  
      TERM
