0AV 
          IDENT  0AV,/REL/VUNX
          PERIPH J
          BASE   MIXED
          SST 
 IRA$     SET    0           EXTERNAL PRESET OF RANDOM ADDRESSING DECKS 
 QUAL$    EQU    1           DEFINE UNQUALIFIED COMMON DECKS
 REL$     SET    1           DEFINE FULL RELOCATION 
*COMMENT  0AV - VERIFY USER ACCOUNT NUMBER. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  0AV - VERIFY USER NAME.
          SPACE  4
***       0AV - VERIFY USER NAME. 
*         C.J.MATULE  71/01/11. 
*         R.P. ROHRBOUGH     72/09/07.
          SPACE  4
***              0AV IS A LOCATION FREE ROUTINE WHICH VERIFIES THAT 
*         THE SPECIFIED USER NUMBER IS A VALID ONE. THE VALIDATION
*         FILE FOR THE CORRECT FAMILY IS SEARCHED FOR THE GIVEN USER
*         NUMBER AND THE VALID USER INDEX IS RETURNED IF FOUND. 
*         THE ACCOUNT RECORD BLOCK IS ALSO SET UP FOR THE CALLER,S USE. 
* 
*                0AV CAN ALSO BE CALLED TO DECREMENT A GIVEN USER,S 
*         SECURITY COUNT AFTER AN ATTEMPTED BREACH OF SECURITY. 
*         NOTE - THE SECURITY COUNT MAY NOT BE DECREMENTED IN ALL CASES 
*         DUE TO THE AVAILABILITY OF THE VALIDATION FILE. THIS
*         CONDITION WILL BE FLAGGED BY THE ACCOUNT FILE MESSAGE THAT IS 
*         ISSUED. 
  
          SPACE  4
***       ACCOUNT FILE MESSAGES.
* 
*         *SISC, NN.* 
*         USER,S SECURITY COUNT HAS BEEN DECREMENTED TO THE VALUE NN. 
*         WHEN NN EQUALS ZERO, THE USER NUMBER WILL NOT BE ALLOWED
*         ACCESS TO THE SYSTEM. 
* 
*         *SISC.* 
*         THE SYSTEM WAS UNABLE TO DECREMENT THE SECURITY COUNT FOR 
*         THIS USER FOR ONE OF THE FOLLOWING REASONS
*                - VALIDATION FILE BUSY.
*                - SECURITY COUNT ALREADY AT ZERO.
*                - SECURITY COUNT IS UNLIMITED. 
          SPACE  4
**        ENTRY CONDITIONS. 
* 
* 
*         (UN - UN+3) = USER NUMBER.
*         (UN+4) = FUNCTION CODE. 
*                0 = VALIDATE USER NUMBER.
*                1 = DECREMENT USER,S SECURITY COUNT. 
* 
*         (CN - CN+4) = FAMILY NAME.
*                = 0 IF NOT AVAILABLE.
          SPACE  4
**        EXIT CONDITIONS.
* 
* 
*         (A) .LT. 0 IF VALIDATION FILE DEVICE INACCESSIBLE.
*         (T5) = EST ORDINAL OF VALIDATION FILE DEVICE IF INACCESSIBLE. 
* 
*         FUNCTION 0. (VALIDATE USER NUMBER)
*                (T1 - T2) = 0 IF THE USER NAME WAS NOT FOUND.
*                (T1 - T2) = USER INDEX IF FOUND. 
*                (T3) = FWA OF ACCOUNT RECORD BLOCK.
*                (T4) = 0 IF UI .LT. AUIMX. 
*                (T4) = 1 IF UI .GE. AUIMX. 
*                (T5) = FAMILY EQUIPMENT. 
*                (T6) = SECURITY COUNT. 
*                (CN - CN+4) = FAMILY NAME. 
* 
*         FUNCTION 1. (DECREMENT USER,S SECURITY COUNT.)
*                SECURITY COUNT DECREMENTED.
*                ACCOUNT FILE MESSAGE ISSUED. 
*                (T6) = DECREMENTED SECURITY COUNT. 
          SPACE  4
*CALL     COMPMAC 
          LIST   X
*CALL     COMSACC 
          LIST   *
*CALL     COMSCPS 
*CALL     COMSMSP 
*CALL     COMSPIM 
*CALL     COMSPFM 
*CALL     COMSZOL 
*CALL     COMPRLI 
          SPACE  4
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 RI       EQU    16 - 17     RANDOM INDEX (2 LOCATIONS) 
 CN       EQU    30 - 34     FAMILY NAME (5 LOCATIONS)
 UN       EQU    40 - 44     USER NAME (5 LOCATIONS)
****
          SPACE  4
**        CONSTANTS.
  
  
 VFDL     EQU    4000D       DELAY CYCLES WAITING FOR VALIDATION FILE 
          SPACE  4
          TITLE  MAIN ROUTINE.
 VUN      SPACE  4
**        VUN - MAIN PROGRAM. 
  
  
 VUN      SUBR               ENTRY/EXIT 
 REL$     EQU    1           SET FULL RELOCATION
          RJM.   REL,LA      RELOCATE ADDRESSES 
          LJM    IVF         INITIALIZE VALIDATION FILE 
  
 VUN1     RJM    SUN         SEARCH FOR USER NAME 
          ZJN    VUN2        IF USER ACCOUNT BLOCK NOT FOUND
          LDD    UN+4 
 VUN2     ZJN    VUN3        IF VALIDATION FUNCTION 
  
*         UPDATE VALIDATION FILE. 
  
          LDM    AHSC*5+1,T3
          SHN    -6 
          ZJN    VUN4        IF SECURITY COUNT EXHAUSTED
          LMN    77 
          ZJN    VUN4        IF UNLIMITED 
          LDC    -100 
          RAM    AHSC*5+1,T3
          SHN    -6 
          STM    VUNE 
          STD    T1          SET SECURITY COUNT IN MESSAGE
          SHN    3
          LMD    T1 
          SCN    70 
          RAM    VUNF+3 
          LDC.   BUF-2+WLSF 
          RJM    WDS         WRITE DISK 
 VUN3     UJN    VUN5        RETURN VALIDATION FILE 
  
 VUN4     STM    VUNF+3      SET END OF ACCOUNTING MESSAGE
          LDC    2L . 
          STM    VUNF+2 
  
*         RETURN VALIDATION FILE. 
  
 VUN5     ENDMS 
          LDC    *
 VUNB     EQU    *-1         (FNT ORDINAL)
          STD    CM+4 
          LDC    0
 VUNC     EQU    *-1         (FILE MODE)
          STD    CM+2 
          LDN    RFAS        RETURN FAST ATTACH FILE
          RJM    CFA         CHECK FOR LOCAL/GLOBAL FAST ATTACH FILE
 VUN6     LDC    0
*         LDC    VUNF+ACFN   *SISC,NN.* OR *SISC.*
 VUNA     EQU    *-1         (FWA OF ACCOUNT FILE MESSAGE SET BY *IVF*) 
          ZJN    VUN7        IF NO ACCOUNT FILE MESSAGE 
          ADC    ACFN 
          RJM    DFM
 VUN7     LDN    0           SET USER INDEX FLAG
*         LDN    1           (UI .GT. *AUIMX*)
 VUND     EQU    *-1
          STD    T4 
          LDC    1           SET SECURITY COUNT (USE 1 IF FILE BUSY)
 VUNE     EQU    *-1
          STD    T6 
          LJM    VUNX        RETURN 
  
 VUNF     VFD    60/9LSISC, 00. 
  
*         VFD    60/5LSISC. 
          CON    0           END OF MESSAGE 
          SPACE  4,10 
 SUN      SPACE  4
**        SUN - SEARCH FOR USER NUMBER. 
* 
*         ENTRY  VALIDATION FILE ATTACHED.
*                (UN - UN+3) = USER NUMBER. 
* 
*         EXIT   (A) = 0, USER BLOCK NOT FOUND. 
*                (T1 - T2) = USER INDEX.
*                (T3) = FWA OF USER VALIDATION BLOCK. 
*                (T5) = EQUIPMENT.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
* 
*         CALLS  CAN, RDS, SBL, SIB.
  
  
 SUN3     LDN    0           CLEAR USER INDEX 
 SUN4     STD    T2          SET USER INDEX 
          SHN    -14
          STD    T1 
          SHN    14 
          LMD    T2 
          ZJN    SUNX        IF USER BLOCK NOT FOUND
          ADC    -AUIMX 
          MJN    SUNX        IF UI LESS THAN AUIMX
          AOM    VUND        SET *UI .GE. AUIMX* FLAG 
  
*         LOCATE PRIMARY LEVEL BLOCK FOR ACCOUNT NUMBER.
  
 SUN      SUBR               ENTRY/EXIT 
          RJM    SIB         SEARCH INDEX BLOCK (LEVEL 0) 
 SUN1     MJN    SUN3        IF BAD ADDRESS 
          RJM    SIB         SEARCH INDEX BLOCK (LEVEL 1) 
          MJN    SUN3        IF BAD ADDRESS 
          LDC.   BUF-2       READ DATA BLOCK
          RJM    RDS         READ LEVEL 2 BLOCK 
          MJN    SUN3        IF READ ERROR
  
*         SEARCH BLOCK FOR ACCOUNT NUMBER.
  
          RJM    SBL         SET LIMIT OF DATA IN BUFFER
 SUN2     LDC    -ARBS*5
          RAD    T3 
          SBD    T1          CHECK FOR LIMIT
          MJN    SUN1        IF NO VALUE HIT
          RJM    CAN         COMPARE ACCOUNT NUMBER 
          NJN    SUN2        IF NOT EQUAL 
          LDM    AHSC*5+1,T3 SET SECURITY COUNT 
          SHN    -6 
          STM    VUNE 
          LDM    3,T3 
          LPN    37 
          SHN    14 
          LMM    4,T3 
          LJM    SUN4        SET USER INDEX 
 SIB      SPACE  4
**        SIB -  SEARCH INDEX BLOCK.
* 
*         ENTRY  (FTOV) = FIRST TRACK.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
* 
*         EXIT   (A) .LT. 0 IF ERROR. 
* 
*         USES   T1, T3, RI - RI+1. 
* 
*         CALLS  CAN, CRA, RDS, SBL, SRI. 
* 
*         MACROS SETMS. 
  
  
 SIB13    LCN    0           SET EXIT CONDITION 
  
 SIB      SUBR               ENTRY/ EXIT
 SIB1     LDC.   BUF-2       READ NEXT SECTOR 
          RJM    RDS
          MJN    SIBX        IF READ ERROR
          SETMS  POSITION 
          RJM    SBL         SET LIMIT OF INDEX ENTRIES IN BUFFER 
 SIB2     LCN    ANWE*5      DECREMENT ENTRY
          RAD    T3 
          SBD    T1 
          PJN    SIB5        IF NOT BEFORE FIRST ENTRY IN BLOCK 
          LDM    BUF
          ZJN    SIB4        IF LEVEL - 0 
          LDM    BUF+5*2+3   CHECK FOR LINK 
          LPN    77 
          SHN    14 
          ADM    BUF+5*2+4
 SIB3     ZJN    SIB13       IF NO LINK 
          LJM    SIB12       LINK THROUGH BLOCKS
  
 SIB4     LDC.   0
 SIBA     EQU    *-1
          STD    RI 
          LDC.   0
 SIBB     EQU    *-1
          STD    RI+1 
          ADD    RI 
          ZJN    SIB3        IF NO LINK 
          UJN    SIB6 
  
*         SET RANDOM INDEX. 
  
 SIB5     LDM    5+3,T3 
          STD    RI 
          LDM    5+4,T3 
          STD    RI+1 
          RJM    CAN         COMPARE ACCOUNT NUMBERS
          MJN    SIB8        IF ACCOUNT PAST ENTRY
          ZJN    SIB6        IF MATCH 
          LJM    SIB2        DECREMENT ENTRY
  
 SIB6     LDC    ** 
 FTOV     EQU    *-1         FIRST TRACK OF VALIDATION FILE 
          STD    T6 
          RJM    CRA         CONVERT RANDOM INDEX 
 SIB7     LJM    SIBX        RETURN 
  
 SIB8     LDM    BUF+1       CHECK ENTRY
          SBN    2+ANWE 
          STD    T0 
          SHN    2
          ADD    T0 
          ADD    T1 
          LMD    T3 
          NJN    SIB9        IF NOT LAST
          LDM    BUF+5*2+3   SET LINKED BLOCK 
          ADM    BUF+5*2+4
          NJN    SIB11       IF LINK EXISTS 
 SIB9     LDM    BUF         CHECK LEVEL
          ZJN    SIB6        IF LEVEL-0 
          LCN    1
 SIB10    UJN    SIB7        RETURN 
  
 SIB11    LDM    BUF         CHECK LEVEL
          NJN    SIB12       IF NOT LEVEL - 0 
          LDM    5+3,T3 
          STM    SIBA        SAVE RANDOM ADDRESS OF LAST ENTRY
          LDM    5+4,T3 
          STM    SIBB 
 SIB12    LDM    BUF+5*2+3   SET READ OF LINKED BLOCK 
          STD    RI 
          LDM    BUF+5*2+4
          STD    RI+1 
          LDM    FTOV        RESET FIRST TRACK
          STD    T6 
          RJM    CRA         CONVERT RANDOM ADDRESS 
          MJN    SIB10       IF BAD ADDRESS 
          LJM    SIB1        READ BLOCK 
 CAN      SPACE  4
**        CAN -  COMPARE ACCOUNT NUMBER.
* 
*         ENTRY  (T3) = ADDRESS OF ENTRY. 
*                (UN - UN+3) = USER NUMBER. 
* 
*         EXIT   (A) = 0 IF EQUAL.
*                (A) < 0 IF LARGER. 
*                (A) > 0 IF VALIDUS ENTRY LARGER. 
  
  
 CAN      SUBR
          LDI    T3 
          SBD    UN 
          NJN    CANX        IF NOT EQUAL 
          LDM    1,T3 
          SBD    UN+1 
          NJN    CANX        IF NOT EQUAL 
          LDM    2,T3 
          SBD    UN+2 
          NJN    CANX        IF NOT EQUAL 
          LDM    3,T3 
          SCN    77 
          SBD    UN+3 
          UJN    CANX        EXIT 
 SBL      SPACE  4
**        SBL - SET BUFFER LIMITS.
* 
*         ENTRY  (BUF - BUF+4) = CONTROL WORD FOR BLOCK.
* 
*         EXIT   (T1) = FWA OF BLOCK FOR SEARCH.
*                (T3) = LIMIT OF BLOCK FOR SEARCH.
  
  
 SBL      SUBR               ENTRY/ EXIT
          LDM    BUF+4       SET FWA OF ENTRIES 
          SHN    2
          ADM    BUF+4
          ADC.   BUF
          STD    T1 
          LDM    BUF+1       SET LIMIT OF ENTRIES 
          SHN    2
          ADM    BUF+1
          SBN    2*5
          ADD    T1 
          STD    T3 
          UJN    SBLX        RETURN 
 CFA      SPACE  4,10 
**        CFA - CHECK FAST ATTACH FILE. 
* 
*         ENTRY  (A) = SUBFUNCTION. 
*                (BUF) = FST WORD.
* 
*         EXIT   (CM - CM+4) = RESPONSE FROM *AFAM* FUNCTION. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 CFA      SUBR               ENTRY/EXIT 
          STD    CM+3        STORE SUBFUNCTION
 CFAA     LDN    0           (GLOBAL FAFT FLAG) 
          ZJN    CFA1        IF NOT GLOBAL FAST ATTACH FILE 
          LDD    T5 
 CFAB     ADD    TH          IMMEDIATE RETURN IF INACCESSIBLE DEVICE
*         PSN                (AFTER FILE IS ATTACHED) 
 CFA1     STD    CM+1 
          MONITOR AFAM
          UJN    CFAX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPCRA 
          SPACE  4
*         BUFFER. 
  
  
 BUF      EQU    *+2
          TITLE  PRESET.
 IVF      SPACE  4,30 
**        IVF - INITIALIZE VALIDATION FILE. 
* 
*         ENTRY  (CN - CN+3) = FAMILY NAME. 
*                            = 0 IF NO FAMILY NAME. 
*                (UN - UN+3) = USER NAME. 
*                (UN+4) = FUNCTION CODE.
* 
*         EXIT   (T5) = EQUIPMENT.
*                (T6) = FIRST TRACK.
*                (T7) = FIRST SECTOR. 
*                (FTOV) = FIRST TRACK.
*                *SETMS READ* PERFORMED.
*                VALIDATION FILE ATTACHED.
*                TO *VUN6* WITH (T1) = (T2) = (T4) = 0, IF ONE
*                OF THE FOLLOWING IS TRUE-
*                  -NO USER NAME IS PRESENT.
*                  -THE VALIDATION FILE COULD NOT BE FOUND. 
*                  -THE VALIDATION FILE IS CURRENTLY BEING USED BY
*                  *MODVAL*.
*                  -AN *ORET* ERROR FLAG WAS SET WHILE WAITING FOR THE
*                   VALIDATION FILE TO BECOME AVAILABLE.
* 
*         USES   T1 - T7, CM - CM+4, CN - CN+4. 
* 
*         CALLS  FAT, CFA.
* 
*         MACROS CFI, MONITOR, PAUSE, SETMS, SFA. 
  
  
 IVF      LDD    UN 
          NJN    IVF1        IF USER NAME PRESENT 
          LJM    IVF7        CLEAR USER INDEX 
  
 IVF1     LDD    UN+3        CLEAR USER NAME
          SCN    77 
          STD    UN+3 
  
*         LOCATE CORRECT VALIDATION FILE. 
  
          LDD    MA          SET FILE NAME
          CWM    IVFB,ON
          SBN    1
          CRD    CM 
          LDD    CN 
          ZJN    IVF2        IF FAMILY NAME NOT SPECIFIED 
          SHN    -6 
          LMN    1R0
          NJN    IVF4        IF NOT BLANK FAMILY NAME 
          LDC    PFNL 
          UJN    IVF3        USE SYSTEM DEFAULT FAMILY
  
*         GET FAMILY NAME IF NOT GIVEN. 
  
 IVF2     LDD    CP          FETCH FAMILY EST ORDINAL 
          ADN    PFCW 
 IVF3     CRD    T1 
          SFA    EST,T4      READ EST ENTRY 
          ADK    EQDE 
          CRD    CN 
          LDD    CN+4        READ FAMILY NAME 
          SHN    3
          ADN    PFGL 
          CRD    CN 
 IVF4     RJM    FAT         FIND FAST ATTACH FILE
          ZJN    IVF5        IF FOUND 
          LJM    IVF7        CLEAR USER INDEX 
  
 IVF5     LDM    FATB        SET FWA OF FNT 
          STM    IVFA 
          LDM    FATB+1 
          STM    IVFA+1 
          CFI    FNT,T1      READ FST ENTRY 
 IVFA     ADC    *           (FWA OF FNT) 
          CRD    CM 
          ADN    FSTG 
          CRD    T5 
          LDD    CM+3 
          LPN    77 
          RAM    CFAA 
          SETMS  IO,(NS,RW) 
          LDM.   MSD
          SHN    21-6 
          MJP    VUNX        IF DEVICE INACCESSIBLE 
          LDD    CM+4 
          SHN    3
          ADN    TRLL        FETCH TRT ADDRESS
          CRD    CM 
          LDD    CM+3 
          LPN    77 
          SHN    14 
          LMD    CM+4        PRESET *COMPCRA* 
          SBD    TH 
          STM    CRAA+1 
          SHN    -14
          RAM    CRAA 
 IVF6     LDD    T1          SET FNT ORDINAL IN REQUEST 
          STD    CM+4 
          STM    VUNB 
          LDD    UN+4 
          ZJN    IVF9        IF ATTACH IN READ/ALLOW MODIFY MODE
          LMN    1&0
          ZJN    IVF8        IF ATTACH IN NON-ROLLABLE UPDATE MODE
          LDC.   *           SET ADDRESS WHERE ERROR DETECTED 
          STD    CM+1 
          LDN    0           DO NOT SET AN ERROR FLAG 
          STD    CM+2 
          MONITOR  CHGM      CONDITIONALLY HANG PP
 IVF7     LDN    ZERL        CLEAR USER INDEX 
          CRD    T0 
          LJM    VUN6        EXIT 
  
 IVF8     LDC.   VUNF        SET FWA OF DAYFILE MESSAGE 
          STM    VUNA 
          LDC    4000+PTUP&PTRM  REQUEST NON-ROLLABLE UPDATE MODE 
 IVF9     LMN    PTRM 
          STD    CM+2 
          STM    VUNC        SAVE FILE MODE FOR RETURNING FILE
          LDN    AFAS        SET ATTACH FAST ATTACH FILE
          RJM    CFA         CHECK FOR LOCAL/GLOBAL FAST ATTACH FILE
          LDD    CM+1        CHECK RETURN STATUS
          ZJN    IVF12       IF FILE ATTACHED 
          SHN    21-11
          MJP    VUNX        IF DEVICE INACCESSIBLE 
          LDD    CM+4 
          LPN    2
          ZJN    IVF10       IF ATTACHED IN MODIFY MODE BY *MODVAL* 
  
*         WAIT FOR OTHER *0AV* TO RELEASE VALIDATION FILE.
  
          PAUSE 
          LDD    CM+1        CHECK ERROR FLAG 
          LMN    ORET 
          NJN    IVF11       IF NO ERROR
 IVF10    STM    VUNF+3 
          LDC    2L .        SET END OF ACCOUNTING MESSAGE
          STM    VUNF+2 
          LJM    IVF7        CLEAR USER INDEX 
  
 IVF11    LDC    VFDL/2      DELAY
          SBN    1
          PJN    *-1         IF NOT END OF DELAY
          LJM    IVF6        RETRY ATTACH 
  
 IVF12    STM    CFAB 
          LDD    T6          SET FIRST TRACK
          STM    FTOV 
          LDD    T5          SET EST ORDINAL
          STD    CM+1 
          LDN    UTRS        GET CURRENT TRT
          STD    CM+3 
          MONITOR  STBM 
          LDN    FSMS        SET SECTOR 
          STD    T7 
          LJM    VUN1        RETURN 
  
  
 IVFB     VFD    42/0L"APFN",6/0
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPFAT 
          SPACE  4,10 
*         ASSEMBLE REMOTE CODE. 
  
  
          HERE
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          ERRPL  *-ZAVL      *0AV* OVERFLOWS CALLING PROGRAM
  
          ERRNG  ZAVL-BUF-501 BUFFER OVERFLOWS CALLING PROGRAM
          END 
