aboutsummaryrefslogtreecommitdiff
path: root/sys/imio/imunmap.x
diff options
context:
space:
mode:
Diffstat (limited to 'sys/imio/imunmap.x')
-rw-r--r--sys/imio/imunmap.x61
1 files changed, 61 insertions, 0 deletions
diff --git a/sys/imio/imunmap.x b/sys/imio/imunmap.x
new file mode 100644
index 00000000..dd2290b1
--- /dev/null
+++ b/sys/imio/imunmap.x
@@ -0,0 +1,61 @@
+# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+
+include <syserr.h>
+include <imhdr.h>
+include <imio.h>
+
+# IMUNMAP -- Unmap a image. Flush the output buffer, append the bad pixel
+# list, update the image header. Close all files and return buffer space.
+
+procedure imunmap (im)
+
+pointer im
+
+int acmode
+errchk imflush, close, imerr, iki_updhdr
+
+begin
+ acmode = IM_ACMODE(im)
+
+ # Note that if no pixel i/o occurred, the pixel storage file will
+ # never have been opened or created.
+
+ if (IM_PFD(im) != NULL)
+ call imflush (im)
+
+ # Update the image header, if necessary (count of bad pixels,
+ # minimum and maximum pixel values, etc.).
+
+ if (IM_UPDATE(im) == YES) {
+ if (acmode == READ_ONLY)
+ call imerr (IM_NAME(im), SYS_IMUPIMHDR)
+
+ # Restore those fields of the image header that may have been
+ # modified to map a section (if accessing an existing image).
+
+ switch (acmode) {
+ case NEW_COPY, NEW_IMAGE:
+ ; # Cannot access section of new image
+ default:
+ IM_NDIM(im) = IM_NPHYSDIM(im)
+ IM_MTIME(im) = IM_SVMTIME(im)
+ call amovl (IM_SVLEN(im,1), IM_LEN(im,1), IM_NDIM(im))
+ }
+
+ # Update the image header or mask storage file.
+ call iki_updhdr (im)
+ }
+
+ # Physically close the image.
+ call iki_close (im)
+
+ # If the image is a mask image and the PL_CLOSEPL flag is set, close
+ # the associated mask.
+
+ if (IM_PL(im) != NULL && and(IM_PLFLAGS(im),PL_CLOSEPL) != 0)
+ call pl_close (IM_PL(im))
+
+ # Free all buffer space allocated by IMIO.
+ call imrmbufs (im)
+ call mfree (im, TY_STRUCT)
+end