aboutsummaryrefslogtreecommitdiff
path: root/noao/mtlocal/r2df/r2dfrhdr.x
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /noao/mtlocal/r2df/r2dfrhdr.x
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'noao/mtlocal/r2df/r2dfrhdr.x')
-rw-r--r--noao/mtlocal/r2df/r2dfrhdr.x160
1 files changed, 160 insertions, 0 deletions
diff --git a/noao/mtlocal/r2df/r2dfrhdr.x b/noao/mtlocal/r2df/r2dfrhdr.x
new file mode 100644
index 00000000..4573afba
--- /dev/null
+++ b/noao/mtlocal/r2df/r2dfrhdr.x
@@ -0,0 +1,160 @@
+include <imhdr.h>
+include <mach.h>
+include "r2df.h"
+
+# R2DFRHDR -- Read a 2D-FRUTTI header.
+# If EOF is reached the routine returns EOF, otherwise it returns the
+# number of data records in the 2D-FRUTTI image file.
+
+int procedure r2dfrhdr (cam_fd, im)
+
+pointer cam_fd # pointer to camera file
+pointer im # pointer to the IRAF image
+
+int i, sz_rec
+char text[LEN_CAM_TEXT], header[LEN_HEADER * SZ_SHORT]
+short parameters[LEN_CAM_PARAMETERS]
+
+int read(), r2dfrndup()
+errchk r2dfdcd_hdr, read
+include "r2df.com"
+
+begin
+ # Read in header record
+ sz_rec = r2dfrndup (SZB_CHAR * LEN_HEADER, SZB_CHAR) / SZB_CHAR
+
+ i = read (cam_fd, header, sz_rec)
+
+ if (i == EOF)
+ return (EOF)
+ else if (i != sz_rec)
+ call error (1, "Error reading 2D-FRUTTI header")
+
+ # If the least significant byte is first byteswap the 2d-frutti
+ # parameters otherwise byteswap the header text.
+
+ call bytmov (header, FST_HDRBYTE, text, 1, LEN_CAM_TEXT)
+ if (lsbf == NO)
+ call bswap2 (text, 1, text, 1, LEN_CAM_TEXT)
+ call bytmov (header, 1, parameters, 1, LEN_CAM_PARAMETERS * 2)
+ if (lsbf != BYTE_SWAP2)
+ call bswap2 (parameters, 1, parameters, 1, 2 * LEN_CAM_PARAMETERS)
+
+ # Decode the text string
+ call chrupk (text, 1, text, 1, LEN_CAM_TEXT)
+ text[LEN_CAM_TEXT+1] = EOS
+
+ # Put the 2D-FRUTTI parameters in the IRAF image header
+ call r2dfdcd_hdr (im, parameters, text)
+ call r2dfprnt_hdr (parameters, text)
+
+ return (OK)
+end
+
+
+# R2DFDCD_HDR -- Decode a 2D-FRUTTI header record.
+
+procedure r2dfdcd_hdr (im, parameters, text)
+
+pointer im
+short parameters[ARB]
+char text[ARB]
+
+include "r2df.com"
+
+begin
+ # Determine the length of the record in short integers.
+ len_record = REC_LEN(parameters)
+
+ # Set IRAF image parameters. Send extra keywords to the user area.
+ if (make_image == YES) {
+ NAXIS(im) = 2
+ PARAM5(im) = NAXIS1(parameters)
+ PARAM6(im) = NAXIS2(parameters)
+ call strcpy (text, TITLE(im), LEN_TITLE)
+ call r2dfstore_token (parameters, im)
+ }
+end
+
+
+# R2DFPRNT_HDR -- Print the 2D-FRUTTI header.
+
+procedure r2dfprnt_hdr (parameters, text)
+
+short parameters[ARB]
+char text[ARB]
+
+include "r2df.com"
+
+begin
+ if (long_header == YES)
+ call r2dflng_hdr1 (parameters, text)
+
+ if (short_header == YES && long_header == NO) {
+ call printf ("ID: %.30s ")
+ call pargstr (text)
+ call printf ("Size = %d x %d\n")
+ call pargs (NAXIS1(parameters))
+ call pargs (NAXIS2(parameters))
+ }
+end
+
+
+# R2DFLNG_HDR1 -- Print the full 2D-FRUTTI header.
+
+procedure r2dflng_hdr1 (parameters, text)
+
+short parameters[ARB]
+char text[ARB]
+
+begin
+ call printf ("ID: %.30s CCDPICNO: %d\n")
+ call pargstr (text)
+ call pargs (CCD_PICNO(parameters))
+ call printf ("NAXIS1= %3d ")
+ call pargs (NAXIS1(parameters))
+ call printf ("NAXIS2= %3d\n")
+ call pargs (NAXIS2(parameters))
+ call printf ("INTEGRATION= %5d ")
+ call pargs (ITIME(parameters))
+ call printf ("OPEN TIME= %5d\n")
+ call pargs (OTIME(parameters))
+ call r2dflng_hdr2 (parameters, text)
+end
+
+
+# R2DFLNG_HDR2 -- This routine is used because of number of strings
+# limitation in preprocessor.
+
+procedure r2dflng_hdr2 (parameters, text)
+
+short parameters[ARB]
+char text[ARB]
+
+int nrecs
+
+begin
+ nrecs = (int (NAXIS2(parameters)) * int (NAXIS1(parameters))) / 4096 + 1
+ call printf ("RECORDS= %3d ")
+ call pargi (nrecs)
+ call printf ("RECORD LENGTH= %5d\n")
+ call pargi (REC_LEN(parameters))
+end
+
+
+# R2DFRNDUP -- Procedure to round an integer to the next highest number
+# divisible by base.
+
+int procedure r2dfrndup (number, base)
+
+int number, base
+int value
+
+begin
+ if (mod(number, base) == 0)
+ return (number)
+ else {
+ value = (number/base + 1) * base
+ return (value)
+ }
+end