aboutsummaryrefslogtreecommitdiff
path: root/pkg/tbtables/tbhpcm.x
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /pkg/tbtables/tbhpcm.x
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'pkg/tbtables/tbhpcm.x')
-rw-r--r--pkg/tbtables/tbhpcm.x117
1 files changed, 117 insertions, 0 deletions
diff --git a/pkg/tbtables/tbhpcm.x b/pkg/tbtables/tbhpcm.x
new file mode 100644
index 00000000..a8c6d890
--- /dev/null
+++ b/pkg/tbtables/tbhpcm.x
@@ -0,0 +1,117 @@
+include <ctype.h> # for IS_WHITE
+include <tbset.h>
+include "tbtables.h"
+
+# tbhpcm -- add a comment to a header parameter
+# This adds a comment to a header parameter, or replaces one that is
+# already there. It is an error if the header parameter is not found.
+# Nothing is done if the table is of type text; we can't find the
+# keyword in the header because there is no header. If the keyword
+# is HISTORY, COMMENT, or blank, this routine returns without adding
+# anything and without error.
+#
+# Phil Hodge, 6-Mar-1995 Subroutine created.
+# Phil Hodge, 3-Apr-1995 Set TB_MODIFIED to true.
+# Phil Hodge, 12-May-1995 Change string delimiter from " to '.
+# Phil Hodge, 14-Jun-1995 Modify for FITS tables.
+# Phil Hodge, 7-Jun-1999 Handle text tables.
+
+procedure tbhpcm (tp, keyword, comment)
+
+pointer tp # i: pointer to table descriptor
+char keyword[SZ_KEYWORD] # i: keyword to be found
+char comment[ARB] # i: comment string for keyword
+#--
+pointer sp
+pointer str # scratch for string read from header
+pointer value # scratch for the string value
+pointer errmsg # scratch for possible error message
+int parnum # number of the parameter
+int ip, nchar, ctowrd()
+int strlen()
+bool tbhisc()
+errchk tbfpcm, tbhfkw, tbhrpr, tbhwpr
+
+begin
+ if (comment[1] == EOS)
+ return
+
+ if (TB_TYPE(tp) == TBL_TYPE_FITS) {
+ call tbfpcm (tp, keyword, comment)
+ TB_MODIFIED(tp) = true
+ return
+ }
+
+ # We don't add a comment to a comment.
+ if (tbhisc (keyword))
+ return
+
+ call smark (sp)
+ call salloc (str, SZ_PARREC, TY_CHAR)
+ call salloc (value, SZ_PARREC, TY_CHAR)
+
+ # Find the keyword in the header.
+ call tbhfkw (tp, keyword, parnum)
+ if (parnum < 1) {
+ call salloc (errmsg, SZ_FNAME, TY_CHAR)
+ call sprintf (Memc[errmsg], SZ_FNAME,
+ "tbhpcm: keyword `%s' not found in table `%s'")
+ call pargstr (keyword)
+ call pargstr (TB_NAME(tp))
+ call error (1, Memc[errmsg])
+ }
+
+ # Read the string containing keyword, datatype, value.
+ call tbhrpr (tp, parnum, Memc[str])
+
+ # If the data type is text, we'll either use ctowrd or take the
+ # entire string as the current value, depending on whether it's
+ # already enclosed in quotes.
+ if (Memc[str+LOCN_DTYPE-1] == 't') { # type is text string?
+
+ if (Memc[str+START_OF_VALUE-1] == '"' ||
+ Memc[str+START_OF_VALUE-1] == '\'') {
+
+ # It's enclosed in quotes, so use ctowrd to get current value.
+ ip = START_OF_VALUE
+ nchar = ctowrd (Memc[str], ip, Memc[value], SZ_PARREC)
+
+ } else {
+
+ # If the value is already so long that we can't even enclose
+ # it in quotes, quit now.
+ if (strlen (Memc[str]) > SZ_PARREC-2) {
+ call sfree (sp)
+ return
+ }
+
+ # Save the value.
+ call strcpy (Memc[str+START_OF_VALUE-1], Memc[value], SZ_PARREC)
+ }
+
+ # Enclose the value in quotes, and copy it and the comment to str.
+ Memc[str+START_OF_VALUE-1] = EOS # truncate after dtype
+ call strcat ("'", Memc[str], SZ_PARREC)
+ call strcat (Memc[value], Memc[str], SZ_PARREC)
+ call strcat ("' ", Memc[str], SZ_PARREC)
+ call strcat (comment, Memc[str], SZ_PARREC)
+
+ } else { # numeric datatype
+
+ # Save the value.
+ ip = START_OF_VALUE
+ nchar = ctowrd (Memc[str], ip, Memc[value], SZ_PARREC)
+
+ Memc[str+START_OF_VALUE-1] = EOS # truncate
+ call strcat (Memc[value], Memc[str], SZ_PARREC)
+ call strcat (" ", Memc[str], SZ_PARREC)
+ call strcat (comment, Memc[str], SZ_PARREC)
+ }
+
+ # Write the string back into the table.
+ call tbhwpr (tp, parnum, Memc[str])
+
+ TB_MODIFIED(tp) = true
+
+ call sfree (sp)
+end