.PROC,SYNCVAL*I,\
  UN"NOS/VE FAMILY ADMINISTRATOR'S USERNAME" = (*F,*N=ADMINUN),
  PW"NOS/VE FAMILY ADMINISTRATOR'S PASSWORD" = (*F,*N=ADMINPW),
  FM"NOS/VE FAMILY"                          = (*F,*N=NVE),
  LID"NOS/VE LID"                            = (*F,*N=NVE),
  NOSFM"NOS FAMILY"                          = (*F,*N=),
.ENDPARM.
.HELP.
   SYNCVAL GENERATES A MODVAL SOURCE FILE FOR THE DEFAULT FAMILY (NVE)
   AND SUBMITS A JOB TO NOS/VE THAT SYNCHRONIZES THE VE VALIDATION
   FILE WITH THE NOS VALIDATION FILE.
.HELP,UN.
   SPECIFIES THE USERNAME FOR NOS/VE'S FAMILY ADMINISTRATOR.
.HELP,PW.
   SPECIFIES THE PASSWORD FOR NOS/VE'S FAMILY ADMINISTRATOR.
.HELP,FM.
   SPECIFIES THE NOS/VE FAMILY FOR WHICH SYNCVAL IS BEING RUN.  FM DEFAULTS
   TO THE NOS/VE FAMILY NVE.
.HELP,LID.
   SPECIFIES THE LID FOR NOS/VE.  THE DEFAULT LID IS NVE.
.HELP,NOSFM.
   SPECIFIES THE NOS FAMILY.  NOSFM DEFAULTS TO THE NOS DEFAULT FAMILY AND
   HAS NO EFFECT WHEN SYNCVAL IS NOT RUN FROM SYSTEM ORIGIN.
.ENDHELP.
.IFE,OT.EQ.SYO,ISSUEUSER.
  USER,UN,PW,NOSFM.
.ENDIF,ISSUEUSER.
RETURN,SOURCE,NVEJOB.
MODVAL,OP=S,FA.
REWIND,SOURCE,NVEJOB,FRONT,BACK.
COPY,FRONT,NVEJOB.
COMPASS,I=SQUASH,L=0,S,S=PSSTEXT.
LGO,SOURCE,NVEJOB.
COPY,BACK,NVEJOB.
PACK,NVEJOB.
ROUTE,NVEJOB,DC=IN,ST=LID,UJN=SYNCVAL.
REVERT. NVE JOB SUBMITTED
.DATA,FRONT.
LOGIN USER=UN PASSWORD=PW FAMILY#_NAME=FM JOB#_CLASS=BATCH JOB#_NAME=SYNCVAL
SET#_WORKING#_CATALOG $LOCAL
COLLECT#_TEXT MODVAL#_SOURCE UNTIL='**END SOURCE**'
.DATA,BACK.
**END SOURCE**
SET#_FILE#_ATTRIBUTES VE#_USERS OP=$BOI FC=LEGIBLE PF=CONTINUOUS
SET#_FILE#_ATTRIBUTES SORTED#_VE#_USERS OP=$BOI FC=LEGIBLE PF=CONTINUOUS
SYSTEM#_OPERATOR#_UTILITY
  ADMINISTER#_VALIDATIONS
    DISPLAY#_USER USER=ALL DO=NONE O=VE#_USERS
  END#_ADMINISTER#_VALIDATIONS
QUIT
COLLECT#_TEXT $LOCAL.SORT#_DIR
  SORT FROM=VE#_USERS
  SORT KEY=((1..31, MODVAL#_SEQUENCE))
  SORT SEQN=MODVAL#_SEQUENCE
  SORT SEQS=(' ')
  SORT SEQS=('A'..'Z')
  SORT SEQS=('0'..'9')
  SORT SEQS=('*')
  SORT TO=SORTED#_VE#_USERS
**
SORT DIR=$LOCAL.SORT#_DIR
$SYSTEM.ACCOUNTING#_AND#_VALIDATION.COMMAND#_LIBRARY.GENERATE#_USER#_UPDATES ..
      MS=MODVAL#_SOURCE VUL=SORTED#_VE#_USERS AD=ADMV#_DIRECTIVES
SYSTEM#_OPERATOR#_UTILITY
  ADMINISTER#_VALIDATIONS
    INCLUDE#_FILE F=ADMV#_DIRECTIVES
  END#_ADMINISTER#_VALIDATIONS
QUIT
LOGOUT
.DATA,SQUASH
SQUASH
          IDENT  SQUASH
          ENTRY  SQUASH
          SST
          SYSCOM B1
          SPACE  4,10
****      SQUASH READS THE SOURCE OUTPUT FROM MODVAL AND PRODUCES AND
*         OUTPUT FILE THAT CONTAINS ONLY THE MODVAL DIRECTIVES NEEDED
*         BY THE NOS/VE GENERATE_USER_UPDATES PROGRAM.
          SPACE  4,10
***       CALLING SEQUENCE.
*
*         SQUASH,SOURCE,NSOURCE.
*
*         SOURCE IS THE NAME OF THE MODVAL SOURCE FILE, SOURCE IS THE
*         DEFAULT NAME.
*
*         NSOURCE IS THE NAME OF THE SQAUSH OUTPUT, NSOURCE IS THE
*         DEFAULT NAME.
          SPACE  4,10
 BUFL     EQU    1001B
          SPACE  4,10
**        FETS.

 SOURCE   FILEB  IBUF,BUFL
 NSOURCE  FILEB  OBUF,BUFL
          SPACE  4,10
**        MAIN PROGRAM.
 SQUASH   SB1    1
          SA1    ARGR
          MX0    42
          BX7    X0*X1
          ZR     X7,SQU1     IF DEFAULT SOURCE FILE NAME
          SETFET SOURCE,(LFN=X7)
 SQU1     SA1    ARGR+1
          BX7    X0*X1
          ZR     X7,SQU2     IF DEFAULT NSOURCE FILE NAME
          SETFET NSOURCE,(LFN=X7)
 SQU2     READ   SOURCE
          WRITE  NSOURCE,*
 SQU3     READC  SOURCE,WBUF,8
          NZ     X1,SQU7     IF EOR/EOF/EOI
          SA1    WBUF
          MX0    -6
          LX1    6
          BX6    -X0*X1
          LX1    -6
          SX6    X6-1R/
          ZR     X6,SQU5     IF USERNAME
          SA2    SQUA        LIST OF VALID KEYWORDS
          BX6    X1-X2
          NZ     X6,SQU4     IF NOT *AW* KEYWORD
          SA1    WBUF+1      AW VALUE
          SA2    SQUC        AW VALUE LIST
 SQU4     BX6    X1-X2
          ZR     X6,SQU5     IF KEYWORD MATCH
          SA2    A2+B1
          ZR     X2,SQU3     IF END OF LIST
          EQ     SQU4        CHECK NEXT KEYWORD

 SQU5     SA2    SQUB
          BX6    X1-X2
          SA1    A1+B1
          NZ     X6,SQU6     IF NOT *AP*
          SA2    =10H_VEIAF
          BX6    X1-X2
          NZ     X6,SQU3     IF NOT *VEIAF* APPLICATION
 SQU6     WRITEC NSOURCE,WBUF
          EQ     SQU3        READ NEXT SOURCE LINE

 SQU7     WRITER NSOURCE,R
          MESSAGE  (=C* MODVAL SOURCE SQUASHED.*),1
          ENDRUN

*         MODVAL SOURCE KEYWORDS.

 SQUA     CON    10H     AW =           *AW* MUST BE FIRST
 SQUB     CON    10H     AP =
          CON    10H    VEW =
          CON    10H     CN =
          CON    10H     PN =
          CON    10H     UC =
          CON    10H     VM =
          CON    0

 SQUC     CON    10HCNVE                *AW* VALUES
          CON    10HCUCP
          CON    10HCCNR
          CON    0

          SPACE  4,10
**        BUFFERS.

 WBUF     BSS    8
 IBUF     BSS    BUFL
 OBUF     BSS    BUFL
          END    SQUASH
/EOR
