aboutsummaryrefslogtreecommitdiff
path: root/sys/imfort/tasks/phead.f
diff options
context:
space:
mode:
Diffstat (limited to 'sys/imfort/tasks/phead.f')
-rw-r--r--sys/imfort/tasks/phead.f155
1 files changed, 155 insertions, 0 deletions
diff --git a/sys/imfort/tasks/phead.f b/sys/imfort/tasks/phead.f
new file mode 100644
index 00000000..4a54b584
--- /dev/null
+++ b/sys/imfort/tasks/phead.f
@@ -0,0 +1,155 @@
+c PHEAD -- Print the header of the named image in FITS format, one keyword
+c per line. A pattern may optionally be specified to list some subset of the
+c header keywords.
+c
+c usage: phead image [pattern]
+c ----------------------------------------------------------------------------
+
+ program phead
+
+ character*20 kwname
+ character*80 image, patstr, errmsg
+ integer im, kwl, ier
+ logical sortit
+
+c --- Get image name.
+ call clargc (1, image, ier)
+ if (ier .ne. 0) then
+ write (*, '('' enter image name: '',$)')
+ read (*,*) image
+ endif
+
+c --- Get pattern string (list everything if no pattern given).
+ call clargc (2, patstr, ier)
+ if (ier .ne. 0) then
+ patstr = '*'
+ endif
+
+c --- Open the image.
+ call imopen (image, 1, im, ier)
+ if (ier .ne. 0) goto 91
+
+c --- Open the keyword list and print each keyword in FITS format on the
+c standard output device.
+
+ sortit = .false.
+ call imokwl (im, patstr, sortit, kwl, ier)
+
+ 10 continue
+ call imgnkw (kwl, kwname, ier)
+ if (ier .ne. 0) goto 20
+ call putkey (im, kwname, ier)
+ if (ier .ne. 0) goto 91
+ goto 10
+ 20 continue
+
+ call imckwl (kwl, ier)
+ if (ier .ne. 0) goto 91
+
+c --- Clean up.
+ call imclos (im, ier)
+ if (ier .ne. 0) goto 91
+
+ stop
+
+c --- Error exit.
+ 91 call imemsg (ier, errmsg)
+ write (*, '(1x, '' Error: '', a80)') errmsg
+
+ stop
+ end
+
+
+c PUTKEY -- Read the value and comment fields of the named image header
+c keyword, and print the value of the keyword in FITS format on the
+c standard output device.
+c
+c 000000000111111111122222222223333333333444444444455555555556
+c 123456789012345678901234567890123456789012345678901234567890
+c keyword = xxx / comment
+c keyword = 'sval ' / comment
+c
+c Datatype codes: 1=bool, 2=char, 3,4,5=int, 6,7=real/double, 8=complex
+c Only codes 1, 2, 4, and 6 (bool,char,int,real) are returned by IMTYPK.
+c ------------------------------------------------------------------------
+
+ subroutine putkey (im, kwname, ier)
+
+ integer im
+ character*(*) kwname
+
+ logical bval
+ character*68 sval
+ integer ival
+ doubleprecision dval
+
+ character*18 valstr
+ character*47 comstr
+ character*70 lngstr
+ integer nchars, dtype, ier, i
+
+c --- Get the keyword data type and comment information.
+ call imtypk (im, kwname, dtype, comstr, ier)
+ if (ier .ne. 0) return
+
+c --- Print the value of the keyword in FITS format. The format depends
+c upon the datatype of the parameter.
+
+ if (dtype .eq. 1) then
+ call imgkwb (im, kwname, bval, ier)
+ if (ier .ne. 0) return
+ write (*, 10) kwname, bval, comstr
+ 10 format (1x, a8, '= ', l20, ' / ', a47)
+
+ else if (dtype .ge. 3 .and. dtype .le. 5) then
+ call imgkwi (im, kwname, ival, ier)
+ if (ier .ne. 0) return
+ write (*, 20) kwname, ival, comstr
+ 20 format (1x, a8, '= ', i20, ' / ', a47)
+
+ else if (dtype .eq. 6 .or. dtype .eq. 7) then
+ call imgkwd (im, kwname, dval, ier)
+ if (ier .ne. 0) return
+ if (abs(dval) .lt. 1.0E6 .and. abs(dval) .ge. 1.0E-1) then
+ write (*, 30) kwname, dval, comstr
+ 30 format (1x, a8, '= ', f20.2, ' / ', a47)
+ else
+ write (*, 31) kwname, dval, comstr
+ 31 format (1x, a8, '= ', e20.12, ' / ', a47)
+ endif
+
+ else
+ call imgkwc (im, kwname, sval, ier)
+ if (ier .ne. 0) return
+
+ nchars = len(sval) - 1
+ do 40 i = nchars, 9, -1
+ if (sval(i:i) .ne. ' ') goto 41
+ nchars = i - 1
+ 40 continue
+ 41 continue
+
+ if (nchars .le. 8) then
+ write (*, 45) kwname, sval, comstr
+ 45 format (1x, a8, '= ''', a8, '''', 10x, ' / ', a47)
+ else if (nchars .le. 18) then
+ valstr = sval
+ write (*, 46) kwname, valstr, comstr
+ 46 format (1x, a8, '= ''', a18, '''', ' / ', a47)
+ else
+ nchars = min (nchars, len(lngstr) - 2)
+ lngstr(1:1) = ''''
+ do 47 i = 1, nchars
+ lngstr(i+1:i+1) = sval(i:i)
+ 47 continue
+ lngstr(nchars+2:nchars+2) = ''''
+ do 48 i = nchars + 3, len(lngstr)
+ lngstr(i:i) = ' '
+ 48 continue
+ write (*, 49) kwname, lngstr
+ 49 format (1x, a8, '= ', a69)
+ endif
+ endif
+
+ ier = 0
+ end