aboutsummaryrefslogtreecommitdiff
path: root/pkg/utilities/nttools/copyone/keytab.x
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/utilities/nttools/copyone/keytab.x')
-rw-r--r--pkg/utilities/nttools/copyone/keytab.x113
1 files changed, 113 insertions, 0 deletions
diff --git a/pkg/utilities/nttools/copyone/keytab.x b/pkg/utilities/nttools/copyone/keytab.x
new file mode 100644
index 00000000..38577404
--- /dev/null
+++ b/pkg/utilities/nttools/copyone/keytab.x
@@ -0,0 +1,113 @@
+include <tbset.h>
+include "filetype.h"
+
+define SZ_KEYWORD 64
+define USRERR 1
+
+# KEYTAB -- Transfer a header keyword to a table element
+#
+# B.Simon 17-Aug-87 First Code
+# B.Simon 14-Dec-94 Added error checking
+
+procedure t_keytab ()
+
+#--
+pointer input # Name of file containing header keyword
+pointer keyword # Name of header keyword
+pointer table # Name of table
+pointer column # Name of column
+int row # Row number of element in the table
+bool silent # Don't print warning message
+
+bool undef
+int ftype, keytype, junk
+pointer value, errtxt, sp, hd
+
+string unfilerr "Header file name not found or ambiguous (%s)"
+
+bool clgetb()
+int clgeti(), filetype(), errget()
+pointer immap(), tbtopn()
+
+begin
+ # Allocate storage for character strings
+
+ call smark (sp)
+ call salloc (input, SZ_FNAME, TY_CHAR)
+ call salloc (keyword, SZ_KEYWORD, TY_CHAR)
+ call salloc (table, SZ_FNAME, TY_CHAR)
+ call salloc (column, SZ_COLNAME, TY_CHAR)
+ call salloc (value, SZ_KEYWORD, TY_CHAR)
+ call salloc (errtxt, SZ_LINE, TY_CHAR)
+
+ # Read input parameters
+
+ call clgstr ("input", Memc[input], SZ_FNAME)
+ call clgstr ("keyword", Memc[keyword], SZ_KEYWORD)
+ call clgstr ("table", Memc[table], SZ_FNAME)
+ call clgstr ("column", Memc[column], SZ_COLNAME)
+ row = clgeti ("row")
+ silent = clgetb ("silent")
+
+ undef = false
+ ftype = filetype (Memc[input])
+
+ if (ftype == IMAGE_FILE) {
+
+ # Read image header keyword and get datatype
+
+ hd = immap (Memc[input], READ_ONLY, NULL)
+ iferr {
+ call getimghdr (hd, Memc[keyword], SZ_KEYWORD,
+ Memc[value], keytype)
+ } then {
+ junk = errget (Memc[errtxt], SZ_LINE)
+ call xer_reset
+ undef = true
+
+ if (! silent) {
+ call eprintf ("Warning: %s\n")
+ call pargstr (Memc[errtxt])
+ }
+ }
+ call imunmap (hd)
+
+ } else if (ftype == TABLE_FILE) {
+
+ # Read table header keyword and get datatype
+
+ hd = tbtopn (Memc[input], READ_ONLY, NULL)
+ iferr {
+ call gettabhdr (hd, Memc[keyword], SZ_KEYWORD,
+ Memc[value], keytype)
+ } then {
+ junk = errget (Memc[errtxt], SZ_LINE)
+ call xer_reset
+ undef = true
+
+ if (! silent) {
+ call eprintf ("Warning: %s\n")
+ call pargstr (Memc[errtxt])
+ }
+ }
+ call tbtclo (hd)
+
+ } else {
+
+ call sprintf (Memc[errtxt], SZ_LINE, unfilerr)
+ call pargstr (Memc[input])
+ call error (USRERR, Memc[errtxt])
+
+ }
+
+ # Write the table element according to its datatype
+
+ hd = tbtopn (Memc[table], READ_WRITE, NULL)
+ call puttabdat (hd, Memc[column], row, Memc[value], undef, keytype)
+ call tbtclo (hd)
+
+ # Free string storage
+
+ call sfree (sp)
+ return
+end