diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
commit | fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch) | |
tree | bdda434976bc09c864f2e4fa6f16ba1952b1e555 /sys/imio/impmmap.x | |
download | iraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz |
Initial commit
Diffstat (limited to 'sys/imio/impmmap.x')
-rw-r--r-- | sys/imio/impmmap.x | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/sys/imio/impmmap.x b/sys/imio/impmmap.x new file mode 100644 index 00000000..21ec5038 --- /dev/null +++ b/sys/imio/impmmap.x @@ -0,0 +1,92 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include <error.h> +include <pmset.h> +include <imhdr.h> +include <imio.h> + +# IM_PMMAP -- Map a pixel list as a virtual mask image. If the mask name +# given is "BPM" (upper case) the bad pixel list for the reference image is +# opened, if the mask name is "EMPTY" an empty mask is opened, otherwise the +# mask name is taken to be the name of the file in which the mask is stored. +# If there is no bad pixel list for the image an empty mask is opened. +# If a more specialized mask is needed it should be opened or generated via +# explicit calls to the PMIO package, and then mapped onto an image descriptor +# with IM_PMMAPO. + +pointer procedure im_pmmap (mask, mode, ref_im) + +char mask[ARB] #I mask file name or "BPM" +int mode #I mode and flag bits +pointer ref_im #I reference image + +pointer sp, cluster, section, pl, im, hp +int acmode, flags, sz_svhdr, ip +pointer im_pmmapo(), im_pmopen() +int btoi(), ctoi(), envfind() +errchk im_pmopen, im_pmopen + +begin + call smark (sp) + call salloc (cluster, SZ_PATHNAME, TY_CHAR) + call salloc (section, SZ_FNAME, TY_CHAR) + + acmode = PL_ACMODE(mode) + flags = PL_FLAGS(mode) + + # If opening an existing mask, get a buffer for the saved mask image + # header. + + if (acmode != NEW_IMAGE && acmode != NEW_COPY) { + ip = 1 + if (envfind ("min_lenuserarea", Memc[section], SZ_FNAME) > 0) { + if (ctoi (Memc[section], ip, sz_svhdr) <= 0) + sz_svhdr = MIN_LENUSERAREA + } else + sz_svhdr = MIN_LENUSERAREA + call salloc (hp, sz_svhdr, TY_CHAR) + } + + # Parse the full image specification into a root name and an image + # section. + call imgimage (mask, Memc[cluster], SZ_PATHNAME) + call imgsection (mask, Memc[section], SZ_FNAME) + + # Open the mask. + pl = im_pmopen (Memc[cluster], mode, Memc[hp], sz_svhdr, ref_im) + + # Map the mask onto an image descriptor. + iferr (im = im_pmmapo (pl, ref_im)) { + call pl_close (pl) + call erract (EA_ERROR) + } else { + call strcpy (mask, IM_NAME(im), SZ_IMNAME) + if (acmode != NEW_IMAGE && acmode != NEW_COPY) + call im_pmldhdr (im, hp) + } + + # Set flag to close PL descriptor at IMUNMAP time. + IM_PLFLAGS(im) = or (IM_PLFLAGS(im), PL_CLOSEPL) + + # If we are creating a new mask of type boolean, set bool flag so + # that imopsf will make a boolean mask. + + if (acmode == NEW_IMAGE || acmode == NEW_COPY) + if (and (flags, BOOLEAN_MASK) != 0) + IM_PLFLAGS(im) = or (IM_PLFLAGS(im), PL_BOOL) + + # Set access mode for mask, and mask update at unmap flag. + IM_ACMODE(im) = acmode + IM_UPDATE(im) = btoi (acmode != READ_ONLY) + + IM_NPHYSDIM(im) = IM_NDIM(im) + call amovl (IM_LEN(im,1), IM_PHYSLEN(im,1), IM_MAXDIM) + call amovl (IM_LEN(im,1), IM_SVLEN(im,1), IM_MAXDIM) + + # Set up section transformation. + if (ref_im == NULL && Memc[section] != EOS) + call imisec (im, Memc[section]) + + call sfree (sp) + return (im) +end |