$! Compare_curl_source.com
$!
$! $Id$
$!
$! This procedure compares the files in two directories and reports the
$! differences.  It is customized for the vmsports repository layout.
$!
$! It needs to be customized to the local site directories.
$!
$! This is used by me for these purposes:
$!     1. Compare the original source of a project with an existing
$!        VMS port.
$!     2. Compare the checked out repository of a project with the
$!        the local working copy to make sure they are in sync.
$!     3. Keep a copy directory up to date.  The third is needed by
$!        me because VMS Backup can create a saveset of files from a
$!        NFS mounted volume.
$!
$! First the files in the original source directory which is assumed to be
$! under source code control are compared with the copy directory.
$!
$! Then the files are are only in the copy directory are listed.
$!
$! The result will five diagnostics about of files:
$!    1. Files that are not generation 1.
$!    2. Files missing in the copy directory.
$!    3. Files in the copy directory not in the source directory.
$!    4. Files different from the source directory.
$!    5. Files that VMS DIFF can not process.
$!
$! This needs to be run on an ODS-5 volume.
$!
$! If UPDATE is given as a second parameter, files missing or different in the
$! copy directory will be updated.
$!
$! By default:
$!    The directory src_root:[project_name] will be translated to something like
$!    DISK:[dir.dir.reference.project_name] and this will be used
$!    to calculate DISK:[dir.dir.vms_source.project_name] for the VMS specific
$!    source directory.
$!
$!    The copy directory is vms_root:[project_name]
$!    The UPDATE parameter is ignored.
$!
$!    This setting is used to make sure that the working vms directory
$!    and the repository checkout directory have the same contents.
$!
$! If P1 is "SRCBCK" then this
$!     The source directory tree is: src_root:[project_name]
$!     The copy directory is src_root1:[project_name]
$!
$!   src_root1:[project_name] is used by me to work around that VMS backup will
$!   not use NFS as a source directory so I need to make a copy.
$!
$!   This is to make sure that the backup save set for the unmodified
$!   source is up to date.
$!
$!   If your repository checkout is not on an NFS mounted volume, you do not
$!   need to use this option or have the logical name src_root1 defined.
$!
$! If P1 is "VMSBCK" then this changes the two directories:
$!    The source directory is vms_root:[project_name]
$!    The copy directory is vms_root1:[project_name]
$!
$!   vms_root:[project_name] is where I do the VMS specific edits.
$!   vms_root1:[project_name] is used by me to work around that VMS backup will
$!   not use NFS as a source directory so I need to make a copy.
$!
$!   This is to make sure that the backup save set for the unmodified
$!   source is up to date.
$!
$! Copyright 2011 - 2020, John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
$! copyright notice and this permission notice appear in all copies.
$!
$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! 18-Aug-2011  J. Malmberg
$!==========================================================================
$!
$! Update missing/changed files.
$ update_file = 0
$ if (p2 .eqs. "UPDATE")
$ then
$   update_file = 1
$ endif
$!
$ myproc = f$environment("PROCEDURE")
$ myprocdir = f$parse(myproc,,,"DIRECTORY") - "[" - "]" - "<" - ">"
$ myprocdir = f$edit(myprocdir, "LOWERCASE")
$ mydefault = f$environment("DEFAULT")
$ mydir = f$parse(mydefault,,,"DIRECTORY")
$ mydir = f$edit(mydir, "LOWERCASE")
$ odelim = f$extract(0, 1, mydir)
$ mydir = mydir - "[" - "]" - "<" - ">"
$ mydev = f$parse(mydefault,,,"DEVICE")
$!
$ ref = ""
$ if P1 .eqs. ""
$ then
$   ref_base_dir = myprocdir
$   wrk_base_dir = mydir
$   update_file = 0
$   resultd = f$parse("src_root:",,,,"NO_CONCEAL")
$   resultd = f$edit(resultd, "LOWERCASE")
$   resultd = resultd - "][" - "><" - ".;" - ".."
$   resultd_len = f$length(resultd) - 1
$   delim = f$extract(resultd_len, 1, resultd)
$   ref_root_base = mydir + delim
$   resultd = resultd - ref_root_base - "reference." + "vms_source."
$   ref = resultd + ref_base_dir
$   wrk = "VMS_ROOT:" + odelim + wrk_base_dir
$   resultd_len = f$length(resultd) - 1
$   resultd = f$extract(0, resultd_len, resultd) + delim
$   ref_root_dir = f$parse(resultd,,,"DIRECTORY")
$   ref_root_dir = f$edit(ref_root_dir, "LOWERCASE")
$   ref_root_dir = ref_root_dir - "[" - "]"
$   ref_base_dir = ref_root_dir + "." + ref_base_dir
$ endif
$!
$ if p1 .eqs. "SRCBCK"
$ then
$   ref_base_dir = "curl"
$   wrk_base_dir = "curl"
$   ref = "src_root:[" + ref_base_dir
$   wrk = "src_root1:[" + wrk_base_dir
$   if update_file
$   then
$       if f$search("src_root1:[000000]curl.dir") .eqs. ""
$       then
$           create/dir/prot=o:rwed src_root1:[curl]
$       endif
$   endif
$ endif
$!
$!
$ if p1 .eqs. "VMSBCK"
$ then
$   ref_base_dir = "curl"
$   wrk_base_dir = "curl"
$   ref = "vms_root:[" + ref_base_dir
$   wrk = "vms_root1:[" + wrk_base_dir
$   if update_file
$   then
$       if f$search("vms_root1:[000000]curl.dir") .eqs. ""
$       then
$           create/dir/prot=o:rwed vms_root1:[curl]
$       endif
$   endif
$ endif
$!
$!
$ if ref .eqs. ""
$ then
$   write sys$output "Unknown compare type specified!"
$   exit 44
$ endif
$!
$!
$! Future - check the device types involved for the
$! the syntax to check.
$ ODS2_SYNTAX = 0
$ NFS_MANGLE = 0
$ PWRK_MANGLE = 0
$!
$ vax = f$getsyi("HW_MODEL") .lt. 1024
$ if vax
$ then
$   ODS2_SYNTAX = 1
$ endif
$!
$ report_missing = 1
$!
$ if .not. ODS2_SYNTAX
$ then
$   set proc/parse=extended
$ endif
$!
$loop:
$   ref_spec = f$search("''ref'...]*.*;",1)
$   if ref_spec .eqs. "" then goto loop_end
$!
$   ref_dev = f$parse(ref_spec,,,"DEVICE")
$   ref_dir = f$parse(ref_spec,,,"DIRECTORY")
$   ref_dir = f$edit(ref_dir, "LOWERCASE")
$   ref_name = f$parse(ref_spec,,,"NAME")
$   ref_type = f$parse(ref_spec,,,"TYPE")
$!
$!
$   rel_path = ref_dir - "[" - ref_base_dir
$!  rel_path_len = f$length(rel_path) - 1
$!  delim = f$extract(rel_path_len, 1, rel_path)
$!  rel_path = rel_path - ".]" - ".>" - "]" - ">"
$!  rel_path = rel_path + delim
$!
$   if ODS2_SYNTAX
$   then
$!       if rel_path .eqs. ".examples.scripts^.noah]"
$!       then
$!           rel_path = ".examples.scripts_noah]"
$!       endif
$!       if rel_path .eqs. ".examples.scripts^.v2]"
$!       then
$!           rel_path = ".examples.scripts_v2]"
$!       endif
$   endif
$!
$   wrk_path = wrk + rel_path
$!
$   ref_name_type = ref_name + ref_type
$!
$   if ODS2_SYNTAX
$   then
$   endif
$!
$   wrk_spec = wrk_path + ref_name_type
$!
$!
$   wrk_chk = f$search(wrk_spec, 0)
$   if wrk_chk .eqs. ""
$   then
$       if report_missing
$       then
$           write sys$output "''wrk_spec' is missing"
$        endif
$        if update_file
$        then
$            copy/log 'ref_spec' 'wrk_spec'
$        endif
$        goto loop
$   endif
$!
$   wrk_name = f$parse(wrk_spec,,,"NAME")
$   wrk_type = f$parse(wrk_spec,,,"TYPE")
$   wrk_fname = wrk_name + wrk_type"
$   ref_fname = ref_name + ref_type
$!
$   if ref_fname .nes. wrk_fname
$   then
$       write sys$output "''wrk_spc' wrong name, should be ""''ref_fname'"""
$   endif
$!
$   ref_type = f$edit(ref_type, "UPCASE")
$   if ref_type .eqs. ".DIR" then goto loop
$!
$   if ODS2_SYNTAX
$   then
$       ref_fname = f$edit(ref_fname, "LOWERCASE")
$   endif
$!
$!  These files are in the wrong format for VMS diff, and we don't change them.
$   ref_skip = 0
$   if ref_type .eqs. ".PDF" then ref_skip = 1
$   if ref_type .eqs. ".HTML" then ref_skip = 1
$   if ref_type .eqs. ".HQX" then ref_skip = 1
$   if ref_type .eqs. ".P12" then ref_skip = 1
$   if ref_type .eqs. "."
$   then
$       if f$locate("test", ref_fname) .eq. 0 then ref_skip = 1
$       if ref_fname .eqs. "configure." then ref_skip = 1
$   endif
$   if ref_fname .eqs. "MACINSTALL.TXT" then ref_skip = 1
$   if ref_fname .eqs. "$macinstall.txt" then ref_skip = 1
$   if ref_fname .eqs. "curl.mcp$5nxml$5nsit$5nhqx" then ref_skip = 1
$   if ref_fname .eqs. "curl_GUSIConfig.cpp" then ref_skip = 1
$   if ref_fname .eqs. "curl_$gusic$onfig.cpp" then ref_skip = 1
$   if ref_fname .eqs. "macos_main.cpp" then ref_skip = 1
$!
$!
$   if ref_skip .ne. 0
$   then
$      if report_missing
$      then
$          write sys$output "Skipping diff of ''ref_fname'"
$      endif
$      goto loop
$   endif
$!
$!
$   wrk_ver = f$parse(wrk_chk,,,"VERSION")
$   if wrk_ver .nes. ";1"
$   then
$       write sys$output "Version for ''wrk_spec' is not 1"
$   endif
$   set noon
$   diff/out=nl: 'wrk_spec' 'ref_spec'
$   if $severity .nes. "1"
$   then
$       write sys$output "''wrk_spec' is different from ''ref_spec'"
$       if update_file
$       then
$           delete 'wrk_spec';*
$           copy/log 'ref_spec' 'wrk_spec'
$       endif
$   endif
$   set on
$
$!
$   goto loop
$loop_end:
$!
$!
$missing_loop:
$!  For missing loop, check the latest generation.
$   ref_spec = f$search("''wrk'...]*.*;")
$   if ref_spec .eqs. "" then goto missing_loop_end
$!
$   ref_dev = f$parse(ref_spec,,,"DEVICE")
$   ref_dir = f$parse(ref_spec,,,"DIRECTORY")
$   ref_dir = f$edit(ref_dir, "LOWERCASE")
$   ref_name = f$parse(ref_spec,,,"NAME")
$   ref_type = f$parse(ref_spec,,,"TYPE")
$   ref_name_type = ref_name + ref_type
$!
$   rel_path = ref_dir - "[" - wrk_base_dir
$!
$!
$   wrk_path = ref + rel_path
$   wrk_spec = wrk_path + ref_name + ref_type
$   wrk_name = f$parse(wrk_spec,,,"NAME")
$   wrk_type = f$parse(wrk_spec,,,"TYPE")
$!
$   wrk_fname = wrk_name + wrk_type"
$   ref_fname = ref_name + ref_type
$!
$   wrk_skip = 0
$   ref_utype = f$edit(ref_type,"UPCASE")
$   ref_ufname = f$edit(ref_fname,"UPCASE")
$!
$   if wrk_skip .eq. 0
$   then
$       wrk_chk = f$search(wrk_spec, 0)
$       if wrk_chk .eqs. ""
$       then
$           if report_missing
$           then
$               write sys$output "''wrk_spec' is missing"
$           endif
$           goto missing_loop
$       endif
$   else
$       goto missing_loop
$   endif
$!
$   if ref_fname .nes. wrk_fname
$   then
$       write sys$output "''wrk_spc' wrong name, should be ""''ref_fname'"""
$   endif
$!
$   if ref_utype .eqs. ".DIR" then goto missing_loop
$!
$   wrk_ver = f$parse(wrk_chk,,,"VERSION")
$   if wrk_ver .nes. ";1"
$   then
$      write sys$output "Version for ''wrk_spec' is not 1"
$   endif
$!
$   goto missing_loop
$!
$!
$missing_loop_end:
$!
$exit
