aboutsummaryrefslogtreecommitdiff
path: root/pkg/proto/masks/rsfnames.x
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/proto/masks/rsfnames.x')
-rw-r--r--pkg/proto/masks/rsfnames.x549
1 files changed, 549 insertions, 0 deletions
diff --git a/pkg/proto/masks/rsfnames.x b/pkg/proto/masks/rsfnames.x
new file mode 100644
index 00000000..2a7c2d5a
--- /dev/null
+++ b/pkg/proto/masks/rsfnames.x
@@ -0,0 +1,549 @@
+
+define RS_EXTNLIST "|imh|fits|pl|qpoe|hhh|"
+
+
+# RS_IMLIST -- Create a list of input masks using the input image list and an
+# output template string.
+
+int procedure rs_imlist (inlist, output, defaultstr, extstr)
+
+int inlist #I the input image list descriptor
+char output[ARB] #I the input output file list
+char defaultstr[ARB] #I the defaults id string
+char extstr[ARB] #I the extension string
+
+pointer sp, fname, image, dirname, otemplate
+int i, outlist, len_dir, len_otemplate, strfd
+int imtopen(), imtlen(), imtrgetim(), fnldir(), strncmp(), strlen()
+int stropen(), strmatch()
+errchk imtopen()
+
+begin
+ # Return if the ouyput file list is empty.
+ iferr (outlist = imtopen (output))
+ outlist = imtopen ("")
+ if (output[1] == EOS || imtlen (outlist) <= 0)
+ return (outlist)
+
+ # Return if the output image list is the wrong length.
+ if ((imtlen (outlist) > 1) && (imtlen (outlist) != imtlen(inlist))) {
+ call imtclose (outlist)
+ outlist = imtopen ("")
+ return (outlist)
+ }
+
+ # Get working space.
+ call smark (sp)
+ call salloc (fname, SZ_FNAME, TY_CHAR)
+ call salloc (image, SZ_FNAME, TY_CHAR)
+ call salloc (dirname, SZ_FNAME, TY_CHAR)
+
+ # Get the directory name.
+ if (imtrgetim (outlist, 1, Memc[fname], SZ_FNAME) == EOF)
+ Memc[fname] = EOS
+ len_dir = fnldir (Memc[fname], Memc[dirname], SZ_FNAME)
+
+ # Get the default output file names. There will be one output image per
+ # input image.
+ if (strncmp (defaultstr, Memc[fname+len_dir],
+ strlen (defaultstr)) == 0 || len_dir == strlen (Memc[fname])) {
+
+ # Create a temporary list string.
+ call imtclose (outlist)
+ len_otemplate = imtlen (inlist) * SZ_FNAME + 1
+ call salloc (otemplate, len_otemplate, TY_CHAR)
+ Memc[otemplate] = EOS
+
+ # Loop over the input image list.
+ strfd = stropen (Memc[otemplate], len_otemplate, NEW_FILE)
+ do i = 1, imtlen (inlist) {
+
+ # Get the root image name.
+ if (imtrgetim (inlist, i, Memc[image], SZ_FNAME) != EOF)
+ ;
+
+ # Construct the default name.
+ call rs_oimname (Memc[image], Memc[dirname], extstr,
+ Memc[fname], SZ_FNAME)
+ if (strmatch (Memc[fname], ".pl$") == 0)
+ call strcat (".pl", Memc[fname], SZ_FNAME)
+
+
+ # Record the file name.
+ call fprintf (strfd, "%s,")
+ call pargstr (Memc[fname])
+ }
+ call close (strfd)
+
+ # Create the final list.
+ if (Memc[otemplate] != EOS)
+ Memc[otemplate+strlen(Memc[otemplate])-1] = EOS
+ outlist = imtopen (Memc[otemplate])
+
+ # Get the user output names.
+ } else {
+
+ # Create a temporary list string.
+ len_otemplate = imtlen (outlist) * SZ_FNAME + 1
+ call salloc (otemplate, len_otemplate, TY_CHAR)
+ Memc[otemplate] = EOS
+
+ strfd = stropen (Memc[otemplate], len_otemplate, NEW_FILE)
+ # Loop over the fields.
+ do i = 1, imtlen (inlist) {
+
+ if (imtrgetim (outlist, i, Memc[fname], SZ_FNAME) == EOF)
+ break
+ if (strmatch (Memc[fname], ".pl$") == 0)
+ call strcat (".pl", Memc[fname], SZ_FNAME)
+
+ # Add the output name to the list.
+ call fprintf (strfd, "%s,")
+ call pargstr (Memc[fname])
+ }
+ call close (strfd)
+
+ if (Memc[otemplate] != EOS)
+ Memc[otemplate+strlen(Memc[otemplate])-1] = EOS
+ call imtclose (outlist)
+ outlist = imtopen (Memc[otemplate])
+ }
+
+ call sfree (sp)
+
+ return (outlist)
+end
+
+
+# RS_OLIST -- Create a list of output images using the input image list and an
+# output template string.
+
+int procedure rs_olist (inlist, output, defaultstr, extstr)
+
+int inlist #I the input image list descriptor
+char output[ARB] #I the input output file list
+char defaultstr[ARB] #I the defaults id string
+char extstr[ARB] #I the extension string
+
+pointer sp, fname, image, dirname, otemplate
+int i, outlist, len_dir, len_otemplate, strfd
+int imtopen(), imtlen(), imtrgetim(), fnldir(), strncmp(), strlen()
+int stropen()
+errchk imtopen()
+
+begin
+ # Return if the input file list is empty.
+ iferr (outlist = imtopen (output))
+ outlist = imtopen ("")
+ if (output[1] == EOS || imtlen (outlist) <= 0)
+ return (outlist)
+
+ # Return if the output image list is the wrong length.
+ if ((imtlen (outlist) > 1) && (imtlen (outlist) != imtlen(inlist))) {
+ call imtclose (outlist)
+ outlist = imtopen ("")
+ return (outlist)
+ }
+
+ # Get working space.
+ call smark (sp)
+ call salloc (fname, SZ_FNAME, TY_CHAR)
+ call salloc (image, SZ_FNAME, TY_CHAR)
+ call salloc (dirname, SZ_FNAME, TY_CHAR)
+
+ # Get the directory name.
+ if (imtrgetim (outlist, 1, Memc[fname], SZ_FNAME) == EOF)
+ Memc[fname] = EOS
+ len_dir = fnldir (Memc[fname], Memc[dirname], SZ_FNAME)
+
+ # Get the default output file names. There will be one output image per
+ # input image.
+ if (strncmp (defaultstr, Memc[fname+len_dir],
+ strlen (defaultstr)) == 0 || len_dir == strlen (Memc[fname])) {
+
+ # Create a temporary list string.
+ call imtclose (outlist)
+ len_otemplate = imtlen (inlist) * SZ_FNAME + 1
+ call salloc (otemplate, len_otemplate, TY_CHAR)
+ Memc[otemplate] = EOS
+
+ # Loop over the input image list.
+ strfd = stropen (Memc[otemplate], len_otemplate, NEW_FILE)
+ do i = 1, imtlen (inlist) {
+
+ # Get the root image name.
+ if (imtrgetim (inlist, i, Memc[image], SZ_FNAME) != EOF)
+ ;
+
+ # Construct the default name.
+ call rs_oimname (Memc[image], Memc[dirname], extstr,
+ Memc[fname], SZ_FNAME)
+
+ # Record the file name.
+ call fprintf (strfd, "%s,")
+ call pargstr (Memc[fname])
+ }
+ call close (strfd)
+
+ # Create the final list.
+ if (Memc[otemplate] != EOS)
+ Memc[otemplate+strlen(Memc[otemplate])-1] = EOS
+ outlist = imtopen (Memc[otemplate])
+
+ # Get the user output names.
+ } else {
+
+ # Create a temporary list string.
+ len_otemplate = imtlen (outlist) * SZ_FNAME + 1
+ call salloc (otemplate, len_otemplate, TY_CHAR)
+ Memc[otemplate] = EOS
+
+ strfd = stropen (Memc[otemplate], len_otemplate, NEW_FILE)
+ # Loop over the fields.
+ do i = 1, imtlen (inlist) {
+
+ # Get the output file name.
+ if (imtrgetim (outlist, i, Memc[fname], SZ_FNAME) == EOF)
+ break
+
+ # Add the output name to the list.
+ call fprintf (strfd, "%s,")
+ call pargstr (Memc[fname])
+ }
+ call close (strfd)
+
+ if (Memc[otemplate] != EOS)
+ Memc[otemplate+strlen(Memc[otemplate])-1] = EOS
+ call imtclose (outlist)
+ outlist = imtopen (Memc[otemplate])
+ }
+
+ call sfree (sp)
+
+ return (outlist)
+end
+
+
+# RS_OMLIST -- Create a list of output masks using the input image list and an
+# output template string.
+
+int procedure rs_omlist (inlist, output, defaultstr, extstr)
+
+int inlist #I the input image list descriptor
+char output[ARB] #I the input output file list
+char defaultstr[ARB] #I the defaults id string
+char extstr[ARB] #I the extension string
+
+pointer sp, fname, image, dirname, otemplate
+int i, outlist, len_dir, len_otemplate, strfd
+int imtopen(), imtlen(), imtrgetim(), fnldir(), strncmp(), strlen()
+int stropen(), strmatch()
+errchk imtopen()
+
+begin
+ # Return if the input file list is empty.
+ iferr (outlist = imtopen (output))
+ outlist = imtopen ("")
+ if (output[1] == EOS || imtlen (outlist) <= 0)
+ return (outlist)
+
+ # Return if the output image list is the wrong length.
+ if ((imtlen (outlist) > 1) && (imtlen (outlist) != imtlen(inlist))) {
+ call imtclose (outlist)
+ outlist = imtopen ("")
+ return (outlist)
+ }
+
+ # Get working space.
+ call smark (sp)
+ call salloc (fname, SZ_FNAME, TY_CHAR)
+ call salloc (image, SZ_FNAME, TY_CHAR)
+ call salloc (dirname, SZ_FNAME, TY_CHAR)
+
+ # Get the directory name.
+ if (imtrgetim (outlist, 1, Memc[fname], SZ_FNAME) == EOF)
+ Memc[fname] = EOS
+ len_dir = fnldir (Memc[fname], Memc[dirname], SZ_FNAME)
+
+ # Get the default output file names. There will be one output image per
+ # input image.
+ if (strncmp (defaultstr, Memc[fname+len_dir],
+ strlen (defaultstr)) == 0 || len_dir == strlen (Memc[fname])) {
+
+ # Create a temporary list string.
+ call imtclose (outlist)
+ len_otemplate = imtlen (inlist) * SZ_FNAME + 1
+ call salloc (otemplate, len_otemplate, TY_CHAR)
+ Memc[otemplate] = EOS
+
+ # Loop over the input image list.
+ strfd = stropen (Memc[otemplate], len_otemplate, NEW_FILE)
+ do i = 1, imtlen (inlist) {
+
+ # Get the root image name.
+ if (imtrgetim (inlist, i, Memc[image], SZ_FNAME) != EOF)
+ ;
+
+ # Construct the default name.
+ call rs_oimname (Memc[image], Memc[dirname], extstr,
+ Memc[fname], SZ_FNAME)
+ if (strmatch (Memc[fname], ".pl$") == 0)
+ call strcat (".pl", Memc[fname], SZ_FNAME)
+
+
+ # Record the file name.
+ call fprintf (strfd, "%s,")
+ call pargstr (Memc[fname])
+ }
+ call close (strfd)
+
+ # Create the final list.
+ if (Memc[otemplate] != EOS)
+ Memc[otemplate+strlen(Memc[otemplate])-1] = EOS
+ outlist = imtopen (Memc[otemplate])
+
+ # Get the user output names.
+ } else {
+
+ # Create a temporary list string.
+ len_otemplate = imtlen (outlist) * SZ_FNAME + 1
+ call salloc (otemplate, len_otemplate, TY_CHAR)
+ Memc[otemplate] = EOS
+
+ strfd = stropen (Memc[otemplate], len_otemplate, NEW_FILE)
+ # Loop over the fields.
+ do i = 1, imtlen (inlist) {
+
+ # Get the output file name.
+ if (imtrgetim (outlist, i, Memc[fname], SZ_FNAME) == EOF)
+ break
+ if (strmatch (Memc[fname], ".pl$") == 0)
+ call strcat (".pl", Memc[fname], SZ_FNAME)
+
+ # Add the output name to the list.
+ call fprintf (strfd, "%s,")
+ call pargstr (Memc[fname])
+ }
+ call close (strfd)
+
+ if (Memc[otemplate] != EOS)
+ Memc[otemplate+strlen(Memc[otemplate])-1] = EOS
+ call imtclose (outlist)
+ outlist = imtopen (Memc[otemplate])
+ }
+
+ call sfree (sp)
+
+ return (outlist)
+end
+
+
+# RS_OUTNAME -- Construct an output file name. If output is null or a
+# directory, a name is constructed from the root of the image name and the
+# extension. The disk is searched to avoid name collisions.
+
+procedure rs_outname (image, output, ext, name, maxch)
+
+char image[ARB] #I input image name
+char output[ARB] #I input output directory or name
+char ext[ARB] #I input extension
+char name[ARB] #O output file name
+int maxch #I maximum size of name
+
+pointer sp, root, str
+int ndir, nimdir, clindex, clsize, nextn
+int fnldir(), strlen(), strldx(), strdic()
+char period
+
+begin
+ call smark (sp)
+ call salloc (root, SZ_FNAME, TY_CHAR)
+ call salloc (str, SZ_FNAME, TY_CHAR)
+
+ ndir = fnldir (output, name, maxch)
+ if (strlen (output) == ndir) {
+ call imparse (image, Memc[root], SZ_FNAME, Memc[str], SZ_FNAME,
+ Memc[str], SZ_FNAME, clindex, clsize)
+ nimdir = fnldir (Memc[root], Memc[str], SZ_FNAME)
+ period = '.'
+ nextn = strldx (period, Memc[root])
+ if (nextn > 0) {
+ if (strdic (Memc[root+nextn], Memc[str], SZ_FNAME,
+ RS_EXTNLIST) > 0)
+ Memc[root+nextn-1] = EOS
+ }
+ if (clindex >= 0) {
+ if (ext[1] == EOS) {
+ call sprintf (name[ndir+1], maxch, "%s%d.*")
+ call pargstr (Memc[root+nimdir])
+ call pargi (clindex)
+ } else {
+ call sprintf (name[ndir+1], maxch, "%s%d.%s.*")
+ call pargstr (Memc[root+nimdir])
+ call pargi (clindex)
+ call pargstr (ext)
+ }
+ } else {
+ if (ext[1] == EOS) {
+ call sprintf (name[ndir+1], maxch, "%s.*")
+ call pargstr (Memc[root+nimdir])
+ } else {
+ call sprintf (name[ndir+1], maxch, "%s.%s.*")
+ call pargstr (Memc[root+nimdir])
+ call pargstr (ext)
+ }
+ }
+ call rs_oversion (name, name, maxch)
+ } else
+ call strcpy (output, name, maxch)
+
+ call sfree (sp)
+end
+
+
+# RS_OVERSION -- Compute the next available version number of a given file
+# name template and output the new file name.
+
+procedure rs_oversion (template, filename, maxch)
+
+char template[ARB] #I the input name template
+char filename[ARB] #O the output name
+int maxch #I the maximum number of characters
+
+char period
+int newversion, version, len
+pointer sp, list, name
+int fntgfnb() strldx(), ctoi(), fntopnb()
+errchk fntopnb()
+
+begin
+ # Allocate temporary space
+ call smark (sp)
+ call salloc (name, maxch, TY_CHAR)
+ period = '.'
+ iferr (list = fntopnb (template, NO))
+ list = fntopnb ("", NO)
+
+ # Loop over the names in the list searchng for the highest version.
+ newversion = 0
+ while (fntgfnb (list, Memc[name], maxch) != EOF) {
+ len = strldx (period, Memc[name])
+ len = len + 1
+ if (ctoi (Memc[name], len, version) <= 0)
+ next
+ newversion = max (newversion, version)
+ }
+
+ # Make new output file name.
+ len = strldx (period, template)
+ call strcpy (template, filename, len)
+ call sprintf (filename[len+1], maxch, "%d")
+ call pargi (newversion + 1)
+
+ call fntclsb (list)
+ call sfree (sp)
+end
+
+
+# RS_OIMNAME -- Construct an output image name. If output is null or a
+# directory a name is constructed from the root of the image name and the
+# extension. The disk is searched to avoid name collisions.
+
+procedure rs_oimname (image, output, ext, name, maxch)
+
+char image[ARB] #I the input image name
+char output[ARB] #I the output directory or ouput image name
+char ext[ARB] #I the output image extension
+char name[ARB] #O the final output image name
+int maxch #I maximum size of name
+
+int ndir, nimdir, clindex, clsize
+pointer sp, root, str
+int fnldir(), strlen()
+
+begin
+ # Allocate some temporary space.
+ call smark (sp)
+ call salloc (root, SZ_FNAME, TY_CHAR)
+ call salloc (str, SZ_FNAME, TY_CHAR)
+
+ # Determine the length of the directory spec.
+ ndir = fnldir (output, name, maxch)
+
+ # If the file spec is a directory create a name from the directory and
+ # the route image name, otherwise use the output name directly.
+ if (strlen (output) == ndir) {
+ call imparse (image, Memc[root], SZ_FNAME, Memc[str], SZ_FNAME,
+ Memc[str], SZ_FNAME, clindex, clsize)
+ nimdir = fnldir (Memc[root], Memc[str], SZ_FNAME)
+ if (clindex >= 0) {
+ if (ext[1] == EOS) {
+ call sprintf (name[ndir+1], maxch, "%s%d.*")
+ call pargstr (Memc[root+nimdir])
+ call pargi (clindex)
+ } else {
+ call sprintf (name[ndir+1], maxch, "%s%d.%s.*")
+ call pargstr (Memc[root+nimdir])
+ call pargi (clindex)
+ call pargstr (ext)
+ }
+ } else {
+ if (ext[1] == EOS) {
+ call sprintf (name[ndir+1], maxch, "%s.*")
+ call pargstr (Memc[root+nimdir])
+ } else {
+ call sprintf (name[ndir+1], maxch, "%s.%s.*")
+ call pargstr (Memc[root+nimdir])
+ call pargstr (ext)
+ }
+ }
+ call rs_oimversion (name, name, maxch)
+ } else
+ call strcpy (output, name, maxch)
+
+ call sfree (sp)
+end
+
+
+# RS_OIMVERSION -- Determine the next available version number for a given
+# image name template and output the new image name.
+
+procedure rs_oimversion (template, filename, maxch)
+
+char template[ARB] #I the image name template
+char filename[ARB] #O the output image name
+int maxch #I the maximum number of characters
+
+char period
+int newversion, version, len
+pointer sp, list, name
+int imtopen(), imtgetim(), strldx(), ctoi()
+
+begin
+ # Allocate temporary space
+ call smark (sp)
+ call salloc (name, maxch, TY_CHAR)
+ period = '.'
+ list = imtopen (template)
+
+ # Loop over the names in the list searchng for the highest version.
+ newversion = 0
+ while (imtgetim (list, Memc[name], maxch) != EOF) {
+ len = strldx (period, Memc[name])
+ Memc[name+len-1] = EOS
+ len = strldx (period, Memc[name])
+ len = len + 1
+ if (ctoi (Memc[name], len, version) <= 0)
+ next
+ newversion = max (newversion, version)
+ }
+
+ # Make new output file name.
+ len = strldx (period, template)
+ call strcpy (template, filename, len)
+ call sprintf (filename[len+1], maxch, "%d")
+ call pargi (newversion + 1)
+
+ call imtclose (list)
+ call sfree (sp)
+end