aboutsummaryrefslogtreecommitdiff
path: root/unix/hlib
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 /unix/hlib
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'unix/hlib')
-rw-r--r--unix/hlib/README13
-rw-r--r--unix/hlib/allocate.cl11
-rwxr-xr-xunix/hlib/buglog.csh130
-rwxr-xr-xunix/hlib/buglog.sh140
-rwxr-xr-xunix/hlib/cl.csh153
-rwxr-xr-xunix/hlib/cl.csh.ORIG212
-rwxr-xr-xunix/hlib/cl.sh165
-rw-r--r--unix/hlib/cllogout.cl5
-rw-r--r--unix/hlib/clpackage.cl59
-rw-r--r--unix/hlib/clpackage.hd86
-rw-r--r--unix/hlib/clpackage.men13
-rw-r--r--unix/hlib/config.h79
-rw-r--r--unix/hlib/d1mach.f463
-rw-r--r--unix/hlib/deallocate.cl12
-rw-r--r--unix/hlib/devstatus.cl30
-rw-r--r--unix/hlib/diskspace.cl7
l---------unix/hlib/ecl.csh1
-rwxr-xr-xunix/hlib/ecl.sh164
-rw-r--r--unix/hlib/extern.pkg41
-rw-r--r--unix/hlib/extern.pkg.DEF16
-rw-r--r--unix/hlib/extern.pkg.IRAFNET16
-rw-r--r--unix/hlib/extpkg.cl58
-rwxr-xr-xunix/hlib/f77.sh296
-rwxr-xr-xunix/hlib/f77.sh.bak297
-rwxr-xr-xunix/hlib/fc.csh37
-rwxr-xr-xunix/hlib/fc.sh30
-rw-r--r--unix/hlib/gripes.cl65
-rwxr-xr-xunix/hlib/helplog.csh128
-rwxr-xr-xunix/hlib/helplog.sh138
-rw-r--r--unix/hlib/i1mach.f661
-rwxr-xr-xunix/hlib/install.csh3484
-rwxr-xr-xunix/hlib/install.old943
-rwxr-xr-xunix/hlib/install.port943
l---------unix/hlib/iraf.h1
-rw-r--r--unix/hlib/iraf32.h162
-rw-r--r--unix/hlib/iraf64.h164
-rwxr-xr-xunix/hlib/irafarch.csh270
-rwxr-xr-xunix/hlib/irafarch.sh270
-rwxr-xr-xunix/hlib/irafuser.csh214
-rwxr-xr-xunix/hlib/irafuser.sh157
-rw-r--r--unix/hlib/knet.h93
l---------unix/hlib/libboot.a1
-rw-r--r--unix/hlib/libc/README25
-rw-r--r--unix/hlib/libc/alloc.h8
-rw-r--r--unix/hlib/libc/ctype.h32
-rw-r--r--unix/hlib/libc/error.h12
-rw-r--r--unix/hlib/libc/finfo.h19
-rw-r--r--unix/hlib/libc/fpoll.h59
-rw-r--r--unix/hlib/libc/fset.h64
-rw-r--r--unix/hlib/libc/iraf.h192
-rw-r--r--unix/hlib/libc/kernel.h107
-rw-r--r--unix/hlib/libc/knames.h371
-rw-r--r--unix/hlib/libc/kproto.h496
-rw-r--r--unix/hlib/libc/kproto.h.bak494
-rw-r--r--unix/hlib/libc/lexnum.h9
-rw-r--r--unix/hlib/libc/libc.h330
-rw-r--r--unix/hlib/libc/main.h6
-rw-r--r--unix/hlib/libc/math.h24
-rw-r--r--unix/hlib/libc/protect.h7
-rw-r--r--unix/hlib/libc/prstat.h19
-rw-r--r--unix/hlib/libc/prtype.h7
-rw-r--r--unix/hlib/libc/setjmp.h25
-rw-r--r--unix/hlib/libc/spp.h161
-rwxr-xr-xunix/hlib/libc/stdarg-cygwin.h135
-rw-r--r--unix/hlib/libc/stdarg-freebsd.h90
-rw-r--r--unix/hlib/libc/stdarg-linux.h142
-rw-r--r--unix/hlib/libc/stdarg-osx.h133
-rw-r--r--unix/hlib/libc/stdarg-solaris.h64
-rw-r--r--unix/hlib/libc/stdarg.h40
-rw-r--r--unix/hlib/libc/stdio.h99
-rw-r--r--unix/hlib/libc/ttset.h27
-rw-r--r--unix/hlib/libc/vosproto.h4035
-rw-r--r--unix/hlib/libc/xnames.h244
-rw-r--r--unix/hlib/libc/xwhen.h10
-rw-r--r--unix/hlib/libc/zfstat.h8
l---------unix/hlib/libos.a1
-rw-r--r--unix/hlib/login.cl182
l---------unix/hlib/mach.h1
-rw-r--r--unix/hlib/mach32.h34
-rw-r--r--unix/hlib/mach64.h34
-rw-r--r--unix/hlib/math.h59
-rwxr-xr-xunix/hlib/mkfloat.csh143
-rwxr-xr-xunix/hlib/mkfloat.sh142
-rwxr-xr-xunix/hlib/mkiraf.csh119
-rwxr-xr-xunix/hlib/mkiraf.sh189
-rwxr-xr-xunix/hlib/mkmlist.csh21
-rwxr-xr-xunix/hlib/mkmlist.sh19
-rw-r--r--unix/hlib/mkpkg.inc77
-rw-r--r--unix/hlib/mkpkg.sf.CYGW50
-rw-r--r--unix/hlib/mkpkg.sf.FBSD40
-rw-r--r--unix/hlib/mkpkg.sf.I38692
-rw-r--r--unix/hlib/mkpkg.sf.LNUX41
-rw-r--r--unix/hlib/mkpkg.sf.LNUX6441
-rw-r--r--unix/hlib/mkpkg.sf.MACX41
-rw-r--r--unix/hlib/mkpkg.sf.OS482
-rw-r--r--unix/hlib/mkpkg.sf.S34122
-rw-r--r--unix/hlib/mkpkg.sf.SF2C37
-rw-r--r--unix/hlib/mkpkg.sf.SSUN65
-rw-r--r--unix/hlib/mkpkg.sf.SUN354
-rw-r--r--unix/hlib/mkpkg.sf.SUN455
-rw-r--r--unix/hlib/mkpkg.sf.SX8641
-rw-r--r--unix/hlib/motd14
-rw-r--r--unix/hlib/r1mach.f376
-rwxr-xr-xunix/hlib/setup.csh21
-rwxr-xr-xunix/hlib/setup.sh18
-rw-r--r--unix/hlib/spy.cl31
-rw-r--r--unix/hlib/strip0
-rw-r--r--unix/hlib/strip.iraf66
-rwxr-xr-xunix/hlib/sysinfo2503
-rwxr-xr-xunix/hlib/uninstall365
-rw-r--r--unix/hlib/util.csh/.repo_desc27
-rw-r--r--unix/hlib/util.csh/.repo_local200
-rw-r--r--unix/hlib/util.csh/.repo_manifest200
-rw-r--r--unix/hlib/util.csh/.repo_pkgs22
-rw-r--r--unix/hlib/util.csh/.zzsetenv.def1
-rw-r--r--unix/hlib/util.csh/README19
-rwxr-xr-xunix/hlib/util.csh/check_update68
-rwxr-xr-xunix/hlib/util.csh/chk6417
-rwxr-xr-xunix/hlib/util.csh/fget185
-rwxr-xr-xunix/hlib/util.csh/iraf_latest91
-rwxr-xr-xunix/hlib/util.csh/iraf_update100
-rwxr-xr-xunix/hlib/util.csh/mkarch58
-rwxr-xr-xunix/hlib/util.csh/mkbindist80
-rwxr-xr-xunix/hlib/util.csh/mkclean121
-rwxr-xr-xunix/hlib/util.csh/mkdist25
-rwxr-xr-xunix/hlib/util.csh/mkproto114
-rwxr-xr-xunix/hlib/util.csh/mksrc117
-rwxr-xr-xunix/hlib/util.csh/mksysgen50
-rwxr-xr-xunix/hlib/util.csh/mkup30
-rwxr-xr-xunix/hlib/util.csh/mkupx15
-rwxr-xr-xunix/hlib/util.csh/pkgclean89
-rwxr-xr-xunix/hlib/util.csh/pkgdel17
-rwxr-xr-xunix/hlib/util.csh/pkgenv15
-rwxr-xr-xunix/hlib/util.csh/pkgget192
-rwxr-xr-xunix/hlib/util.csh/pkginit43
-rwxr-xr-xunix/hlib/util.csh/pkginst86
-rwxr-xr-xunix/hlib/util.csh/pkgrepo13
-rwxr-xr-xunix/hlib/util.csh/pkgupdate106
-rwxr-xr-xunix/hlib/util.csh/self_update37
-rwxr-xr-xunix/hlib/util.sh115
-rw-r--r--unix/hlib/utime0
l---------unix/hlib/vocl.csh1
-rwxr-xr-xunix/hlib/vocl.sh165
-rw-r--r--unix/hlib/zzsetenv.def119
144 files changed, 25436 insertions, 0 deletions
diff --git a/unix/hlib/README b/unix/hlib/README
new file mode 100644
index 00000000..3d95447b
--- /dev/null
+++ b/unix/hlib/README
@@ -0,0 +1,13 @@
+HLIB -- Host system library. All global library files which are machine at all
+ host system dependent are placed in this library, rather than in lib$.
+
+cllogout.cl log out of the CL (not normally host dependent)
+clpackage.cl contains host system dependent device names
+config.h very host dependent
+iraf.h potentially host dependent
+irafuser.csh sets up UNIX/CSH environment for IRAF
+libc the C runtime library header files (mostly portable)
+login.cl default login.cl file (contains device names)
+mach.h machine constants (machine dependent)
+mkiraf.csh set up UNIX/IRAF files for a user
+zzsetenv.def environment startup file (contains device names)
diff --git a/unix/hlib/allocate.cl b/unix/hlib/allocate.cl
new file mode 100644
index 00000000..1c8a6308
--- /dev/null
+++ b/unix/hlib/allocate.cl
@@ -0,0 +1,11 @@
+# ALLOCATE -- Allocate a device. The real work is done by the hidden CL
+# _allocate task, but we provide a script interface as well to provide
+# scope for machine dependent additions.
+
+procedure allocate (device)
+
+string device { prompt = "device to be allocated" }
+
+begin
+ _allocate (device)
+end
diff --git a/unix/hlib/buglog.csh b/unix/hlib/buglog.csh
new file mode 100755
index 00000000..832c9ad0
--- /dev/null
+++ b/unix/hlib/buglog.csh
@@ -0,0 +1,130 @@
+#! /bin/csh
+# BUGLOG -- Format, edit, and log a new bug to the system bugs file.
+#
+# Usage:
+#
+# buglog [module] log a new bug to the system bugsfile
+# buglog -e edit the system bugfile (with locking)
+#
+# The system bugsfile is locked for exclusive access while a bug is being
+# logged, or while the bugsfile is being edited. Logging can be aborted either
+# by typing <ctrl/c>, or by editing the editor with ":q!" (i.e., by exiting
+# the editor without modifying the temporary file being edited). Bugs are
+# formatted and edited in a small temporary file in /tmp and are added at the
+# end of the bugsfile only if the task is not aborted and the edit modifies
+# the input bug template. To go back and edit a previously logged bug use
+# "buglog -e".
+#
+# Record Format:
+#
+# NUMBER: record number, decimal, sequential.
+# MODULE: package.task or library.procedure or 'unknown'
+# SYSTEM: versions of iraf in which bug was present
+# DATE: date bug logged, unix format date string
+# FROM: user login name
+# BUG: description of the bug
+# STATUS: 'fixed in V2.X', 'unresolved', etc.
+#
+# New records are added to the tail of the bugfile. Left justify field labels,
+# indent text to the first tab stop, one blank line between bug entries.
+# ----------------------------------------------------------------------------
+
+unalias rm set find echo sleep tail sed cmp echo cat mail
+
+set bugfile = "${iraf}local/bugs.log"
+set arcfile = "/u1/ftp/iraf/v214/bugs.log"
+set tmpfile = "/tmp/bug."
+set lokfile = "/tmp/bug.lok"
+
+set number = 1
+set module = "$1"
+set from = "`whoami`"
+set date = "`date`"
+set system = "V2.14"
+set irafmail = "iraf@iraf.noao.edu"
+set buglog = "adass-iraf-buglog@iraf.noao.edu"
+
+# Get exclusive access to the bugfile.
+
+if (-e $lokfile) then
+ find $bugfile -newer $lokfile -exec rm -f $lokfile \;
+ while (-e $lokfile)
+ echo "waiting for access to system bugfile"
+ sleep 15
+ end
+endif
+
+date > $lokfile
+onintr cleanup
+
+# If we were called as "buglog -e", simply edit the locked bugfile.
+
+if ("$1" == "-e") then
+ vi + $bugfile
+ goto cleanup
+endif
+
+# Increment the bug record number.
+
+set number = "`grep '^NUMBER:' $bugfile | tail -1 | sed -e 's/^NUMBER:.//'`"
+if ("$number" == "") then
+ set number = 1
+else
+ set number = "`expr $number + 1`"
+endif
+
+# Get module name if not given on command line.
+
+if ($module == "") then
+ echo -n "Module: "
+ set module = "$<"
+endif
+
+# Format new bug entry in a temporary file and edit it.
+
+set tmpfile = $tmpfile$number
+if (-e $tmpfile) then
+ echo "file $tmpfile already exists"
+ rm -i $tmpfile
+ if (-e $tmpfile) then
+ goto editbug
+ endif
+endif
+
+echo "NUMBER: $number" >> $tmpfile
+echo "MODULE: $module" >> $tmpfile
+echo "SYSTEM: $system" >> $tmpfile
+echo "DATE: $date" >> $tmpfile
+echo "FROM: $from" >> $tmpfile
+echo "" >> $tmpfile
+echo "BUG: ..." >> $tmpfile
+echo "" >> $tmpfile
+echo "STATUS: ..." >> $tmpfile
+
+editbug:
+cp $tmpfile $tmpfile.ORIG
+vi $tmpfile
+
+# Add new bug entry to bugfile (exiting the editor without modifying the file
+# causes the bug to be discarded).
+
+cmp -s $tmpfile $tmpfile.ORIG
+if ($status) then
+ echo "" >> $bugfile; cat $tmpfile >> $bugfile
+ echo "" >> $arcfile; cat $tmpfile >> $arcfile
+ mail -s "buglog.$number"": module = $module, author = $from" $irafmail\
+ < $tmpfile
+# mail -s "buglog.$number"": module = $module, author = $from" $buglog\
+# < $tmpfile
+ rm -f $tmpfile $tmpfile.ORIG
+else
+ echo "system bugfile not modified"
+ rm -f $tmpfile $tmpfile.ORIG
+endif
+
+# Cleanup (vector here on interrupt).
+
+cleanup:
+if (-e $lokfile) then
+ rm -f $lokfile
+endif
diff --git a/unix/hlib/buglog.sh b/unix/hlib/buglog.sh
new file mode 100755
index 00000000..ac4e614e
--- /dev/null
+++ b/unix/hlib/buglog.sh
@@ -0,0 +1,140 @@
+#!/bin/bash
+#
+# BUGLOG -- Format, edit, and log a new bug to the system bugs file.
+#
+# Usage:
+#
+# buglog [module] log a new bug to the system bugsfile
+# buglog -e edit the system bugfile (with locking)
+#
+# The system bugsfile is locked for exclusive access while a bug is being
+# logged, or while the bugsfile is being edited. Logging can be aborted either
+# by typing <ctrl/c>, or by editing the editor with ":q!" (i.e., by exiting
+# the editor without modifying the temporary file being edited). Bugs are
+# formatted and edited in a small temporary file in /tmp and are added at the
+# end of the bugsfile only if the task is not aborted and the edit modifies
+# the input bug template. To go back and edit a previously logged bug use
+# "buglog -e".
+#
+# Record Format:
+#
+# NUMBER: record number, decimal, sequential.
+# MODULE: package.task or library.procedure or 'unknown'
+# SYSTEM: versions of iraf in which bug was present
+# DATE: date bug logged, unix format date string
+# FROM: user login name
+# BUG: description of the bug
+# STATUS: 'fixed in V2.X', 'unresolved', etc.
+#
+# New records are added to the tail of the bugfile. Left justify field labels,
+# indent text to the first tab stop, one blank line between bug entries.
+# ----------------------------------------------------------------------------
+
+iraf="`/bin/echo ${iraf}/ | tr -s '/'`"
+
+bugfile="${iraf}local/bugs.log"
+arcfile="/u1/ftp/iraf/v216/bugs.log"
+tmpfile="/tmp/bug."
+lokfile="/tmp/bug.lok"
+
+number=1
+module="$1"
+from="`whoami`"
+date="`date`"
+system="V2.16"
+irafmail="admin@iraf.net"
+buglog="adass-iraf-buglog@iraf.noao.edu"
+
+# Cleanup (vector here on interrupt).
+
+cleanup() {
+ if [ -e $lokfile ]; then
+ rm -f $lokfile
+ fi
+ exit 0
+}
+
+# Get exclusive access to the bugfile.
+
+if [ -e $lokfile ]; then
+ find $bugfile -newer $lokfile -exec rm -f $lokfile \;
+ while [ -e $lokfile ]; do
+ /bin/echo "waiting for access to system bugfile"
+ sleep 15
+ done
+fi
+
+date > $lokfile
+trap cleanup 2
+
+# If we were called as "buglog -e", simply edit the locked bugfile.
+
+if [ "$1" = "-e" ]; then
+ vi + $bugfile
+ cleanup
+fi
+
+# Increment the bug record number.
+
+number="`grep '^NUMBER:' $bugfile | tail -1 | sed -e 's/^NUMBER:.//'`"
+if [ "$number" = "" ]; then
+ number=1
+else
+ number="`expr $number + 1`"
+fi
+
+# Get module name if not given on command line.
+
+if [ "$module" = "" ]; then
+ /bin/echo -n "Module: "
+ read module
+fi
+
+# Format new bug entry in a temporary file and edit it.
+
+SKP=0
+tmpfile=$tmpfile$number
+if [ -e $tmpfile ]; then
+ /bin/echo "file $tmpfile already exists"
+ rm -i $tmpfile
+ if [ -e $tmpfile ]; then
+ SKP=1
+ fi
+fi
+
+if [ $SKP = 0 ]; then
+ /bin/echo "NUMBER: $number" >> $tmpfile
+ /bin/echo "MODULE: $module" >> $tmpfile
+ /bin/echo "SYSTEM: $system" >> $tmpfile
+ /bin/echo "DATE: $date" >> $tmpfile
+ /bin/echo "FROM: $from" >> $tmpfile
+ /bin/echo "" >> $tmpfile
+ /bin/echo "BUG: ..." >> $tmpfile
+ /bin/echo "" >> $tmpfile
+ /bin/echo "STATUS: ..." >> $tmpfile
+fi
+
+cp $tmpfile $tmpfile.ORIG
+vi $tmpfile
+
+# Add new bug entry to bugfile (exiting the editor without modifying the file
+# causes the bug to be discarded).
+
+cmp -s $tmpfile $tmpfile.ORIG
+if [ $? = 0 ]; then
+ /bin/echo "system bugfile not modified"
+ rm -f $tmpfile $tmpfile.ORIG
+else
+ /bin/echo "" >> $bugfile; cat $tmpfile >> $bugfile
+ if [ -e $arcfile ]; then
+ /bin/echo "" >> $arcfile; cat $tmpfile >> $arcfile
+ fi
+ mail -s "buglog.$number"": module = $module, author = $from" $irafmail\
+ < $tmpfile
+# mail -s "buglog.$number"": module = $module, author = $from" $buglog\
+# < $tmpfile
+ rm -f $tmpfile $tmpfile.ORIG
+fi
+
+cleanup
+
diff --git a/unix/hlib/cl.csh b/unix/hlib/cl.csh
new file mode 100755
index 00000000..12938b53
--- /dev/null
+++ b/unix/hlib/cl.csh
@@ -0,0 +1,153 @@
+#!/bin/csh
+#
+# CL.CSH -- Startup the version of the CL executable compiled for the
+# architecture or floating point hardware appropriate for the current
+# machine. This script can be used to invoke a number of CL flavors
+# depending on how it is called. The install script will create a 'cl'
+# and 'ecl' command link to this script with the intent that a different
+# binary would be started for each command.
+
+
+# Determine CL binary to run based on how we were called.
+
+set cl_binary = "vocl.e"
+
+if (`echo $0 | egrep ecl` != "") then
+ set cl_binary = "ecl.e"
+
+else if (`echo $0 | egrep vo` != "") then
+ set cl_binary = "vocl.e"
+
+else if ($#argv > 0) then
+ if ("$argv[1]" == "-old" || "$argv[1]" == "-o") then
+ set cl_binary = "cl.e"
+ else if ("$argv[1]" == "-vo") then
+ set cl_binary = "vocl.e"
+ else if ("$argv[1]:e" == "c") then
+ # Workaround for autoconf scripts attempting to use this command as
+ # a valid compiler option. On some systems (mostly Debian) a valid
+ # CC command can't be found and eventually the 'cl' (lisp) compiler
+ # is tried. It will always apparently have the conftest.c test file,
+ # so simply exit with a code to tell autoconf it won't work.
+ exit 1
+ endif
+endif
+
+
+# Determine IRAF root directory (value set in install script).
+set d_iraf = "/iraf/iraf/"
+if ($?iraf) then
+ if (! -e $iraf) then
+ echo "Warning: iraf=$iraf does not exist (check .cshrc or .login)"
+ echo "Session will default to iraf=$d_iraf"
+ unsetenv iraf ; sleep 3
+ endif
+endif
+if ($?iraf == 0) then
+ setenv iraf "$d_iraf"
+endif
+
+# Check for a version query.
+if ($#argv > 0) then
+ if ("$argv[1]" == "-v" || "$argv[1]" == "-version" || \
+ "$argv[1]" == "-V" || "$argv[1]" == "--version") then
+ head -1 $iraf/unix/hlib/motd
+ exit 0
+ endif
+endif
+
+
+# Determine platform architecture.
+if (-e $iraf/unix/hlib/irafarch.csh) then
+ set ACTUAL_ARCH = `$iraf/unix/hlib/irafarch.csh -actual`
+else
+ set ACTUAL_ARCH = $IRAFARCH
+endif
+
+if ($?IRAFARCH) then
+ if (-e $iraf/bin.${IRAFARCH}/${cl_binary}) then
+ set MACH = $IRAFARCH
+ else
+ echo "ERROR: No $iraf/bin.${IRAFARCH}/${cl_binary} binary found."
+ if ("$ACTUAL_ARCH" != "$IRAFARCH") then
+ echo "ERROR: IRAFARCH set to '$IRAFARCH', should be '$ACTUAL_ARCH'"
+ endif
+ exit 1
+ endif
+ setenv arch ".$MACH"
+
+else
+ set os_mach = `uname -s | tr '[A-Z]' '[a-z]' | cut -c1-6`
+
+ if (-e $iraf/unix/hlib/irafarch.csh) then
+ set MACH = `$iraf/unix/hlib/irafarch.csh`
+ else
+ set MACH = $os_mach
+ endif
+
+ if ("$os_mach" == "linux") then # handle linux systems
+ if (`uname -m` == "x86_64") then
+ setenv mach linux64
+ else
+ setenv mach linux
+ endif
+ else if ("$os_mach" == "darwin") then # handle Mac systems
+ if ("`uname -m`" == "x86_64") then
+ setenv mach macintel
+ else
+ setenv mach macosx
+ endif
+ else if ("$os_mach" == "cygwin") then
+ setenv mach cygwin
+ else
+ set mach = `uname -s | tr '[A-Z]' '[a-z]'`
+ endif
+
+ setenv arch ".$MACH"
+ if (! $?IRAFARCH) then
+ setenv IRAFARCH "$MACH"
+ endif
+
+ if (! (-e $iraf/bin.${MACH}/${cl_binary}) ) then
+ echo "ERROR: No $iraf/bin.${IRAFARCH}/${cl_binary} binary found."
+ exit 1
+ endif
+endif
+
+# Recent linux systems display a problem in how pointer addresses
+# interact with the stack and can result in a segfault. Remove the
+# stacksize limit for IRAF processes until this is better understood.
+if ("$IRAFARCH" == "redhat" || \
+ "$IRAFARCH" == "linux64" || \
+ "$IRAFARCH" == "linux") then
+ limit stacksize unlimited
+endif
+
+
+# Just run the CL if IRAFARCH already defined.
+if ($?IRAFARCH) then
+ if ($IRAFARCH == "") then
+ setenv arch ""
+ else
+ setenv arch ".$IRAFARCH"
+ endif
+
+ setenv IRAFBIN ${iraf}bin$arch/
+ set file = ${IRAFBIN}$cl_binary
+ if (-e $file) then
+ exec $file
+ else
+ echo "$file not found"
+ endif
+endif
+
+
+# Set the architecture to be used.
+setenv IRAFARCH $MACH
+
+
+setenv arch .$IRAFARCH
+setenv IRAFBIN ${iraf}bin$arch/
+
+# Run the desired CL.
+exec ${IRAFBIN}$cl_binary
diff --git a/unix/hlib/cl.csh.ORIG b/unix/hlib/cl.csh.ORIG
new file mode 100755
index 00000000..bab64f9d
--- /dev/null
+++ b/unix/hlib/cl.csh.ORIG
@@ -0,0 +1,212 @@
+#!/bin/csh -f
+#
+# CL.CSH -- Startup the version of the CL executable compiled for the
+# architecture or floating point hardware appropriate for the current
+# machine. This script can be used to invoke a number of CL flavors
+# depending on how it is called. The install script will create a 'cl'
+# and 'ecl' command link to this script with the intent that a different
+# binary would be started for each command.
+
+
+# Determine CL binary to run based on how we were called.
+
+set cl_binary = "ecl.e"
+
+if (`echo $0 | egrep ecl` != "") then
+ set cl_binary = "ecl.e"
+
+else if (`echo $0 | egrep vo` != "") then
+ set cl_binary = "vocl.e"
+
+else if ($#argv > 0) then
+ if ("$argv[1]" == "-old" || "$argv[1]" == "-o") then
+ set cl_binary = "cl.e"
+ else if ("$argv[1]" == "-vo" || "$argv[1]" == "-o") then
+ set cl_binary = "vocl.e"
+ else if ("$argv[1]:e" == "c") then
+ # Workaround for autoconf scripts attempting to use this command as
+ # a valid compiler option. On some systems (mostly Debian) a valid
+ # CC command can't be found and eventually the 'cl' (lisp) compiler
+ # is tried. It will always apparently have the conftest.c test file,
+ # so simply exit with a code to tell autoconf it won't work.
+ exit 1
+ endif
+endif
+
+
+# Determine IRAF root directory (value set in install script).
+set d_iraf = "/iraf/iraf/"
+if ($?iraf) then
+ if (! -e $iraf) then
+ echo "Warning: iraf=$iraf does not exist (check .cshrc or .login)"
+ echo "Session will default to iraf=$d_iraf"
+ unsetenv iraf ; sleep 3
+ endif
+endif
+if ($?iraf == 0) then
+ setenv iraf "$d_iraf"
+endif
+
+
+# Check for a version query.
+if ($#argv > 0) then
+ if ("$argv[1]" == "-v" || "$argv[1]" == "-version" || \
+ "$argv[1]" == "-V" || "$argv[1]" == "--version") then
+ head -1 $iraf/unix/hlib/motd
+ exit 0
+ endif
+endif
+
+
+# Determine platform architecture.
+if ($?IRAFARCH) then
+ if (-e $iraf/bin.${IRAFARCH}/${cl_binary}) then
+ set MACH = $IRAFARCH
+ endif
+endif
+
+if (! $?MACH) then
+
+ # SUN-IRAF
+ setenv OSNAME `uname`
+ if ($OSNAME == 'SunOS') then
+ setenv OSVERSION `uname -r | cut -c1`
+ if ($OSVERSION == 5) then
+ set MACH = `uname -p`
+ switch ($MACH)
+ case sparc:
+ set MACH = ssol
+ breaksw
+ endsw
+ else
+ set MACH = `mach`
+ endif
+
+ else
+
+ # PC-IRAF
+ set os_mach = `uname -s | tr '[A-Z]' '[a-z]' | cut -c1-6`
+ if (-f /etc/redhat-release) then
+ if (`uname -m` == "ppc") then
+ setenv mach linuxppc
+ else
+ setenv mach redhat
+ endif
+ else
+ set mach = `uname -s | tr '[A-Z]' '[a-z]'`
+ endif
+
+ if ($mach == "darwin") then
+ if ("`uname -m`" == "i386") then
+ setenv mach macintel
+ else
+ setenv mach macosx
+ endif
+ else if ($os_mach == "cygwin") then
+ setenv mach cygwin
+ endif
+
+
+ if (-e $iraf/bin.$mach/$cl_binary) then
+ set MACH = $mach
+ else if (-e $iraf/bin.freebsd/$cl_binary) then
+ set MACH = freebsd
+ else if (-e $iraf/bin.macosx/$cl_binary) then
+ set MACH = macosx
+ else if (-e $iraf/bin.macintel/$cl_binary) then
+ set MACH = macintel
+ else if (-e $iraf/bin.cygwin/$cl_binary) then
+ set MACH = cygwin
+ else if (-e $iraf/bin.linux/$cl_binary) then
+ set MACH = linux
+ else if (-e $iraf/bin.redhat/$cl_binary) then
+ set MACH = redhat
+ else if (-e $iraf/bin.linuxppc/$cl_binary) then
+ set MACH = linuxppc
+ else if (-e $iraf/bin.sunos/$cl_binary) then
+ set MACH = sunos
+ else if (-e $iraf/bin.linuz/$cl_binary) then
+ set MACH = linuz
+ else
+ echo "cannot find $iraf/bin.xxx/$cl_binary"
+ exit 1
+ endif
+
+ endif
+
+endif
+
+# Check for obsolete IRAFBIN definition.
+if ($?IRAFBIN && !($?IRAFARCH)) then
+ echo "Use IRAFARCH rather than IRAFBIN to specify the machine architecture"
+ echo "IRAFARCH, if defined, should be one of ffpa,f68881,i386,sparc, etc."
+endif
+
+# Just run the CL if IRAFARCH already defined.
+if ($?IRAFARCH) then
+ if ($IRAFARCH == "") then
+ setenv arch ""
+ else
+ setenv arch ".$IRAFARCH"
+ endif
+
+ # Recent linux systems display a problem in how pointer addresses
+ # interact with the stack and can result in a segfault. Remove the
+ # stacksize limit for IRAF processes until this is better understood.
+ if ("$IRAFARCH" == "redhat" || \
+ "$IRAFARCH" == "linux" || \
+ "$IRAFARCH" == "linuxppc") then
+ limit stacksize unlimited
+ endif
+
+ setenv IRAFBIN ${iraf}bin$arch/
+ set file = ${IRAFBIN}$cl_binary
+ if (-e $file) then
+ exec $file
+ else
+ echo "$file not found"
+ endif
+endif
+
+
+# Determine the architecture to be used.
+if ("$MACH" == "freebsd") then # PC-IRAF
+ setenv IRAFARCH "freebsd"
+else if ("$MACH" == "linux") then
+ setenv IRAFARCH "linux"
+else if ("$MACH" == "redhat") then
+ setenv IRAFARCH "redhat"
+else if ("$MACH" == "linuxppc") then
+ setenv IRAFARCH "linuxppc"
+else if ("$MACH" == "macosx") then
+ setenv IRAFARCH "macosx"
+else if ("$MACH" == "macintel") then
+ setenv IRAFARCH "macintel"
+else if ("$MACH" == "cygwin") then
+ setenv IRAFARCH "cygwin"
+else if ("$MACH" == "sunos") then
+ setenv IRAFARCH "sunos"
+else if ("$MACH" == "linuz") then
+ setenv IRAFARCH "linuz"
+
+else if ("$MACH" == "ssol") then # SUN-IRAF
+ setenv IRAFARCH "ssun"
+else if ("$MACH" == "sparc") then
+ setenv IRAFARCH "sparc"
+endif
+
+# Recent linux systems display a problem in how pointer addresses
+# interact with the stack and can result in a segfault. Remove the
+# stacksize limit for IRAF processes until this is better understood.
+if ("$IRAFARCH" == "redhat" || \
+ "$IRAFARCH" == "linux" || \
+ "$IRAFARCH" == "linuxppc") then
+ limit stacksize unlimited
+endif
+
+setenv arch .$IRAFARCH
+setenv IRAFBIN ${iraf}bin$arch/
+set file = ${IRAFBIN}$cl_binary
+
+# Run the desired CL.
+exec $file
diff --git a/unix/hlib/cl.sh b/unix/hlib/cl.sh
new file mode 100755
index 00000000..67bcd428
--- /dev/null
+++ b/unix/hlib/cl.sh
@@ -0,0 +1,165 @@
+#!/bin/bash
+#
+# CL.SH -- Startup the version of the CL executable compiled for the
+# architecture or floating point hardware appropriate for the current
+# machine. This script can be used to invoke a number of CL flavors
+# depending on how it is called. The install script will create a 'cl'
+# and 'ecl' command link to this script with the intent that a different
+# binary would be started for each command.
+
+
+# Determine CL binary to run based on how we were called.
+
+
+nm=${0##*/}
+cl_binary="vocl.e"
+
+case "$nm" in
+ "cl" | "cl.sh")
+ cl_binary="vocl.e"
+ ;;
+ "ecl" | "ecl.sh")
+ cl_binary="vocl.e"
+ ;;
+ "vocl" | "vocl.sh")
+ cl_binary="vocl.e"
+ ;;
+ *)
+ if (( $# > 1 )); then
+ if [ $1 == "-old" -o $1 == "-o" ]; then
+ cl_binary="cl.e"
+ elif [ $1 == "-ecl" -o $1 == "-e" ]; then
+ cl_binary="ecl.e"
+ elif [ $1 == "-vo" ]; then
+ cl_binary="vocl.e"
+ elif [ ${1##*.} == "c" ]; then
+ # Workaround for autoconf scripts attempting to use this
+ # command as a valid compiler option. On some systems (mostly
+ # Debian) a valid CC command can't be found and eventually
+ # the 'cl' (lisp) compiler is tried. It will always apparently
+ # have the conftest.c test file, so simply exit with a code to
+ # tell autoconf it won't work.
+ exit 1
+ fi
+ fi
+esac
+
+# Determine IRAF root directory (value set in install script).
+d_iraf="/iraf/iraf/"
+if [ -n $iraf ]; then
+ if [ ! -e $iraf ]; then
+ echo "Warning: iraf=$iraf does not exist \(check .cshrc or .login\)"
+ echo "Session will default to iraf=$d_iraf"
+ unset iraf ; sleep 3
+ fi
+fi
+if [ -z $iraf ]; then
+ export iraf="$d_iraf"
+fi
+
+# Check for a version query.
+if (( $# > 1 )); then
+ case "$1" in
+ "-v" | "-V" | "-version" | "--version")
+ head -1 $iraf/unix/hlib/motd
+ exit 0
+ ;;
+ *)
+ ;;
+ esac
+fi
+
+
+# Determine platform architecture.
+if [ -e $iraf/unix/hlib/irafarch.sh ]; then
+ ACTUAL_ARCH=`$iraf/unix/hlib/irafarch.sh -actual`
+else
+ ACTUAL_ARCH=$IRAFARCH
+fi
+
+if [ -n "$IRAFARCH" ]; then
+ if [ -e $iraf/bin.${IRAFARCH}/${cl_binary} ]; then
+ MACH=$IRAFARCH
+ else
+ echo "ERROR: No $iraf/bin.${IRAFARCH}/${cl_binary} binary found."
+ if [ "$ACTUAL_ARCH" != "$IRAFARCH" ]; then
+ echo "ERROR: IRAFARCH set to '$IRAFARCH', should be '$ACTUAL_ARCH'"
+ fi
+ exit 1
+ fi
+ export arch=".$MACH"
+
+else
+ os_mach=`uname -s | tr '[A-Z]' '[a-z]' | cut -c1-6`
+
+ if [ -e $iraf/unix/hlib/irafarch.csh ]; then
+ MACH=`$iraf/unix/hlib/irafarch.csh`
+ else
+ MACH=$os_mach
+ fi
+
+ if [ "$os_mach" == "linux" ]; then # handle linux systems
+ if [ `uname -m` == "x86_64" ]; then
+ export mach="linux64"
+ else
+ export mach="linux"
+ fi
+ elif [ "$os_mach" == "darwin" ]; then # handle Mac systems
+ if [ "`uname -m`" == "x86_64" ]; then
+ export mach="macintel"
+ else
+ export mach="macosx"
+ fi
+ elif [ "$os_mach" == "cygwin" ]; then
+ export mach="cygwin"
+ else
+ mach=`uname -s | tr '[A-Z]' '[a-z]'`
+ fi
+
+ export arch=".$MACH"
+ if [ -z $IRAFARCH ]; then
+ export IRAFARCH="$MACH"
+ fi
+
+ if [ ! -e $iraf/bin.${MACH}/${cl_binary} ]; then
+ echo "ERROR: No $iraf/bin.${IRAFARCH}/${cl_binary} binary found."
+ exit 1
+ fi
+fi
+
+
+# Recent linux systems display a problem in how pointer addresses
+# interact with the stack and can result in a segfault. Remove the
+# stacksize limit for IRAF processes until this is better understood.
+if [ "$IRAFARCH" == "redhat" -o \
+ "$IRAFARCH" == "linux64" -o \
+ "$IRAFARCH" == "linux" ]; then
+ ulimit -s unlimited
+fi
+
+
+# Just run the CL if IRAFARCH already defined.
+if [ -n "$IRAFARCH" ]; then
+ if [ -z $IRAFARCH ]; then
+ export arch=""
+ else
+ export arch=".$IRAFARCH"
+ fi
+
+ export IRAFBIN=${iraf}bin$arch/
+ file=${IRAFBIN}$cl_binary
+ if [ -e $file ]; then
+ exec $file
+ else
+ echo "$file not found"
+ fi
+fi
+
+
+# Set the architecture to be used.
+export IRAFARCH=$MACH
+export arch=.$IRAFARCH
+export IRAFBIN=${iraf}bin$arch/
+
+# Run the desired CL.
+exec ${IRAFBIN}$cl_binary
diff --git a/unix/hlib/cllogout.cl b/unix/hlib/cllogout.cl
new file mode 100644
index 00000000..c597320f
--- /dev/null
+++ b/unix/hlib/cllogout.cl
@@ -0,0 +1,5 @@
+#{ System logout file; executed when logging off from the CL. Perform any
+# cleanup functions you want executed at logout time.
+
+if (deftask ("_logout") && access ("home$logout.cl"))
+ _logout();;
diff --git a/unix/hlib/clpackage.cl b/unix/hlib/clpackage.cl
new file mode 100644
index 00000000..cb017cd7
--- /dev/null
+++ b/unix/hlib/clpackage.cl
@@ -0,0 +1,59 @@
+#{ CLPACKAGE.CL -- Package definitions file for the "clpackage" package.
+# When this script is run, the current package is "clpackage", the default
+# startup package. NOTE -- See hlib$zzsetenv.def for additional environment
+# definitions.
+
+# Uncomment and edit the following to change the default values of these
+# CL parameters for your site.
+
+#ehinit = "nostandout eol noverify"
+#epinit = "standout showall"
+#keeplog = no
+#logfile = "home$logfile"
+#logmode = "commands nobackground noerrors notrace"
+
+szprcache = 4
+
+# IRAF standard system package script task declarations.
+
+task dbms.pkg = "dbms$dbms.cl"
+task dataio.pkg = "dataio$dataio.cl"
+task images.pkg = "images$images.cl"
+task language.pkg = "language$language.cl"
+task lists.pkg = "lists$lists.cl"
+task obsolete.pkg = "obsolete$obsolete.cl"
+task plot.pkg = "plot$plot.cl"
+task proto.pkg = "proto$proto.cl"
+task softools.pkg = "softools$softools.cl"
+task system.pkg = "system$system.cl"
+task utilities.pkg = "utilities$utilities.cl"
+
+# Handy task to call the user's logout.cl file.
+task $_logout = "home$logout.cl"
+
+# Define the external (user-configurable) packages.
+cl < hlib$extern.pkg
+
+
+# Load dynamically-defined external packages.
+if (access ("hlib$extpkg.cl") == yes)
+ cl < hlib$extpkg.cl
+;
+
+
+# Load packages needed by dynamic external packages. These are reloaded
+# in the login.cl.
+images
+proto
+utilities
+noao
+
+# Load the SYSTEM package. Avoid printing menu, but do not change the
+# default value of the menus switch.
+
+if (menus) {
+ menus = no; system; menus = yes
+} else
+ system
+
+keep
diff --git a/unix/hlib/clpackage.hd b/unix/hlib/clpackage.hd
new file mode 100644
index 00000000..8d967dc6
--- /dev/null
+++ b/unix/hlib/clpackage.hd
@@ -0,0 +1,86 @@
+# Help directory for the package CLPACKAGE (the root package of the CL).
+
+$dataio = "pkg$dataio/"
+$dbms = "pkg$dbms/"
+$images = "pkg$images/"
+$language = "pkg$language/"
+$lists = "pkg$lists/"
+$obsolete = "pkg$obsolete/"
+$plot = "pkg$plot/"
+$proto = "pkg$proto/"
+$softools = "pkg$softools/"
+$system = "pkg$system/"
+$utilities = "pkg$utilities/"
+$xtools = "pkg$xtools/doc/"
+
+# Define help files for the standard IRAF system packages.
+
+dataio men = dataio$dataio.men,
+ hlp = ..,
+ sys = dataio$dataio.hlp,
+ pkg = dataio$dataio.hd,
+ src = dataio$dataio.cl
+
+dbms men = dbms$dbms.men,
+ hlp = ..,
+ sys = dbms$dbms.hlp,
+ pkg = dbms$dbms.hd,
+ src = dbms$dbms.cl
+
+images men = images$images.men,
+ hlp = ..,
+ sys = images$images.hlp,
+ pkg = images$images.hd,
+ src = images$images.cl
+
+language men = language$language.men,
+ hlp = ..,
+ sys = language$language.hlp,
+ pkg = language$language.hd,
+ src = language$language.cl
+
+lists men = lists$lists.men,
+ hlp = ..,
+ sys = lists$lists.hlp,
+ pkg = lists$lists.hd,
+ src = lists$lists.cl
+
+obsolete men = obsolete$obsolete.men,
+ hlp = ..,
+ sys = obsolete$obsolete.hlp,
+ pkg = obsolete$obsolete.hd,
+ src = obsolete$obsolete.cl
+
+plot men = plot$plot.men,
+ hlp = ..,
+ sys = plot$plot.hlp,
+ pkg = plot$plot.hd,
+ src = plot$plot.cl
+
+proto men = proto$proto.men,
+ hlp = ..,
+ sys = proto$proto.hlp,
+ pkg = proto$proto.hd,
+ src = proto$proto.cl
+
+softools men = softools$softools.men,
+ hlp = ..,
+ sys = softools$softools.hlp,
+ pkg = softools$softools.hd,
+ src = softools$softools.cl
+
+system men = system$system.men,
+ hlp = ..,
+ sys = system$system.hlp,
+ pkg = system$system.hd,
+ src = system$system.cl
+
+utilities men = utilities$utilities.men,
+ hlp = ..,
+ sys = utilities$utilities.hlp,
+ pkg = utilities$utilities.hd,
+ src = utilities$utilities.cl
+
+xtools hlp=xtools$xtools.men,
+ sys=xtools$README,
+ pkg=xtools$xtools.hd
diff --git a/unix/hlib/clpackage.men b/unix/hlib/clpackage.men
new file mode 100644
index 00000000..dd46fd32
--- /dev/null
+++ b/unix/hlib/clpackage.men
@@ -0,0 +1,13 @@
+ dataio - Data format conversion package (RFITS, etc.)
+ dbms - Database management package (not yet implemented)
+ images - General image processing package
+ language - The command language itself
+ lists - List processing package
+ local - The template local package
+ obsolete - Obsolete tasks
+ noao - The NOAO optical astronomy packages
+ plot - Plot package
+ proto - Prototype or interim tasks
+ softools - Software tools package
+ system - System utilities package
+ utilities - Miscellaneous utilities package
diff --git a/unix/hlib/config.h b/unix/hlib/config.h
new file mode 100644
index 00000000..a0d2db5e
--- /dev/null
+++ b/unix/hlib/config.h
@@ -0,0 +1,79 @@
+# System configuration parameters. Sizes are in SPP chars unless otherwise
+# specified.
+
+define FIRST_FD 10 # first open file descriptor
+define LAST_FD 4096 # number of file descriptors
+define PSIOCTRL 9 # the last pseudofile (see etc$prpsio.x)
+define FBUF_ALLOC vmalloc # call to allocate file buffer
+define LEN_DEVTBL 150 # FIO device table (7 cells/device)
+define LEN_RANDBUF 8 # bufsize = LEN_RANDBUF * blksize
+define LEN_SEQBUF 8 # bufsize = LEN_SEQBUF * optbufsize
+define SZ_STDIOBUF 1024 # size of STDIN/STDOUT buffers
+define SZ_PBBUF 1024 # default size of FIO pushback buf
+
+define SZ_MEM 1 # size of Mem common
+define SZ_MEMALIGN SZ_DOUBLE # alignment criteria for malloc
+define SZ_PHYSMEM 750000 # max phys memory available to a task
+define SZ_STACK 8192 # size of a stack segment (salloc)
+define SZ_STKHDR (4*SZ_POINTER) # size of stack segment header
+define SZ_VMEMALIGN SZ_VMPAGE # alignment criterium for vmalloc
+define VMEM_BASE 0 # fwa to align with, vmalloc
+define SZ_WORKSET 100000 # tasks normal working set size
+define LEN_JUMPBUF 1024 # buffer for ZSVJMP
+define JUMPCOM zjucom # IRAF Main ZDOJMP common
+
+define MAX_ONEXIT 10 # max onexit procedures
+define MAX_ONERROR 10 # max onerror procedures
+define MAX_CLGFILPAR 10 # max open params for CLGFIL
+define MAX_CHILDPROCS 10 # max connected subprocesses
+define MAX_BKGJOBS 10 # max detached processes
+
+define IM_FALLOC YES # "falloc" pixel storage file (IMIO)?
+define IM_PACKDENSITY 0.6 # minimum storage efficiency for images
+
+define MT_MAXTAPES 2 # maximum open tape drives
+define MT_SZBDEFIBUF 65535 # def. input buffer size (bytes)
+define MT_SZBDEFOBUF 8192 # def. output buffer size (bytes)
+
+# File Locking.
+
+define OS_FILELOCKING false # OS provides file locking
+define FILELOCK_PERIOD 120 # minimum lifetime of a file lock, secs
+define MIN_TIMELEFT 60 # rollback if less time left on lock
+
+# Characteristics of host OS filenames.
+
+define CASE_INSENSITIVE false # is case ignored in OS filenames
+define HOST_CASE 'L' # case used [UL] if case insensitive
+define UNDERSCORE_PERMITTED true # is _ permitted in filenames
+define PERIOD_PERMITTED true # is . permitted in root
+define MAX_ROOTLEN 128 # max chars in OS root filename
+define MAX_EXTNLEN 32 # max chars in OS filename extension
+define EXTN_DELIMITER '.' # character preceding extension
+define LEADING_ALPHA_ONLY false # first char must be a letter
+define ONECASE_OUT false # output filenames in host case
+
+# IRAF vs OS filename extensions.
+
+define EXTN_MAP ""
+define RESERVED_EXTNS "|zsf|zvf|zl1|zl2|zmd|zlk|"
+
+# Escape sequence encoding metacharacters.
+
+define VFN_ESCAPE_CHAR '\1' # escape character for encoding
+define SHIFT_NEXTCHAR '0' # shift next char to upper case
+define SHIFT_TO_LOWER '1' # shift to lower case
+define SHIFT_TO_UPPER '2' # shift to upper case
+define UNDERSCORE_CODE '3' # code for encoding _
+define PERIOD_CODE '4' # code for encoding .
+
+# Reserved filenames and filename extensions.
+
+define SETENV_FILE "zzsetenv.def"
+define FNMAPPING_FILE "zzfnmap.zvf"
+define SUBFILE_EXTN ".zsf"
+define FNMAPFILE_EXTN ".zvf"
+define TIMELOCK1_EXTN ".zl1"
+define TIMELOCK2_EXTN ".zl2"
+define DEGENFLAG_EXTN ".zmd"
+define LOCKFILE_EXTN ".zlk"
diff --git a/unix/hlib/d1mach.f b/unix/hlib/d1mach.f
new file mode 100644
index 00000000..ccecd107
--- /dev/null
+++ b/unix/hlib/d1mach.f
@@ -0,0 +1,463 @@
+ DOUBLE PRECISION FUNCTION D1MACH(I)
+C
+C DOUBLE-PRECISION MACHINE CONSTANTS
+C
+C D1MACH( 1) = B**(EMIN-1), THE SMALLEST POSITIVE MAGNITUDE.
+C
+C D1MACH( 2) = B**EMAX*(1 - B**(-T)), THE LARGEST MAGNITUDE.
+C
+C D1MACH( 3) = B**(-T), THE SMALLEST RELATIVE SPACING.
+C
+C D1MACH( 4) = B**(1-T), THE LARGEST RELATIVE SPACING.
+C
+C D1MACH( 5) = LOG10(B)
+C
+C TO ALTER THIS FUNCTION FOR A PARTICULAR ENVIRONMENT,
+C THE DESIRED SET OF DATA STATEMENTS SHOULD BE ACTIVATED BY
+C REMOVING THE C FROM COLUMN 1.
+C ON RARE MACHINES A STATIC STATEMENT MAY NEED TO BE ADDED.
+C (BUT PROBABLY MORE SYSTEMS PROHIBIT IT THAN REQUIRE IT.)
+C
+C FOR IEEE-ARITHMETIC MACHINES (BINARY STANDARD), ONE OF THE FIRST
+C TWO SETS OF CONSTANTS BELOW SHOULD BE APPROPRIATE. IF YOU DO NOT
+C KNOW WHICH SET TO USE, TRY BOTH AND SEE WHICH GIVES PLAUSIBLE
+C VALUES.
+C
+C WHERE POSSIBLE, DECIMAL, OCTAL OR HEXADECIMAL CONSTANTS ARE USED
+C TO SPECIFY THE CONSTANTS EXACTLY. SOMETIMES THIS REQUIRES USING
+C EQUIVALENT INTEGER ARRAYS. IF YOUR COMPILER USES HALF-WORD
+C INTEGERS BY DEFAULT (SOMETIMES CALLED INTEGER*2), YOU MAY NEED TO
+C CHANGE INTEGER TO INTEGER*4 OR OTHERWISE INSTRUCT YOUR COMPILER
+C TO USE FULL-WORD INTEGERS IN THE NEXT 5 DECLARATIONS.
+C
+C COMMENTS JUST BEFORE THE END STATEMENT (LINES STARTING WITH *)
+C GIVE C SOURCE FOR D1MACH.
+C
+ INTEGER SMALL(2)
+ INTEGER LARGE(2)
+ INTEGER RIGHT(2)
+ INTEGER DIVER(2)
+ INTEGER LOG10(2)
+ INTEGER I
+C/6S
+C/7S
+ SAVE SMALL, LARGE, RIGHT, DIVER, LOG10
+C/
+ DOUBLE PRECISION DMACH(5)
+C
+ EQUIVALENCE (DMACH(1),SMALL(1))
+ EQUIVALENCE (DMACH(2),LARGE(1))
+ EQUIVALENCE (DMACH(3),RIGHT(1))
+ EQUIVALENCE (DMACH(4),DIVER(1))
+ EQUIVALENCE (DMACH(5),LOG10(1))
+C
+C MACHINE CONSTANTS FOR BIG-ENDIAN IEEE ARITHMETIC (BINARY FORMAT)
+C MACHINES IN WHICH THE MOST SIGNIFICANT BYTE IS STORED FIRST,
+C SUCH AS THE AT&T 3B SERIES, MOTOROLA 68000 BASED MACHINES (E.G.
+C SUN 3), AND MACHINES THAT USE SPARC, HP, OR IBM RISC CHIPS.
+C
+C DATA SMALL(1),SMALL(2) / 1048576, 0 /
+C DATA LARGE(1),LARGE(2) / 2146435071, -1 /
+C DATA RIGHT(1),RIGHT(2) / 1017118720, 0 /
+C DATA DIVER(1),DIVER(2) / 1018167296, 0 /
+C DATA LOG10(1),LOG10(2) / 1070810131, 1352628735 /
+C
+C MACHINE CONSTANTS FOR LITTLE-ENDIAN (BINARY) IEEE ARITHMETIC
+C MACHINES IN WHICH THE LEAST SIGNIFICANT BYTE IS STORED FIRST,
+C E.G. IBM PCS AND OTHER MACHINES THAT USE INTEL 80X87 OR DEC
+C ALPHA CHIPS.
+C
+ DATA SMALL(1),SMALL(2) / 0, 1048576 /
+ DATA LARGE(1),LARGE(2) / -1, 2146435071 /
+ DATA RIGHT(1),RIGHT(2) / 0, 1017118720 /
+ DATA DIVER(1),DIVER(2) / 0, 1018167296 /
+ DATA LOG10(1),LOG10(2) / 1352628735, 1070810131 /
+C
+C MACHINE CONSTANTS FOR AMDAHL MACHINES.
+C
+C DATA SMALL(1),SMALL(2) / 1048576, 0 /
+C DATA LARGE(1),LARGE(2) / 2147483647, -1 /
+C DATA RIGHT(1),RIGHT(2) / 856686592, 0 /
+C DATA DIVER(1),DIVER(2) / 873463808, 0 /
+C DATA LOG10(1),LOG10(2) / 1091781651, 1352628735 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM.
+C
+C DATA SMALL(1) / ZC00800000 /
+C DATA SMALL(2) / Z000000000 /
+C
+C DATA LARGE(1) / ZDFFFFFFFF /
+C DATA LARGE(2) / ZFFFFFFFFF /
+C
+C DATA RIGHT(1) / ZCC5800000 /
+C DATA RIGHT(2) / Z000000000 /
+C
+C DATA DIVER(1) / ZCC6800000 /
+C DATA DIVER(2) / Z000000000 /
+C
+C DATA LOG10(1) / ZD00E730E7 /
+C DATA LOG10(2) / ZC77800DC0 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE BURROUGHS 5700 SYSTEM.
+C
+C DATA SMALL(1) / O1771000000000000 /
+C DATA SMALL(2) / O0000000000000000 /
+C
+C DATA LARGE(1) / O0777777777777777 /
+C DATA LARGE(2) / O0007777777777777 /
+C
+C DATA RIGHT(1) / O1461000000000000 /
+C DATA RIGHT(2) / O0000000000000000 /
+C
+C DATA DIVER(1) / O1451000000000000 /
+C DATA DIVER(2) / O0000000000000000 /
+C
+C DATA LOG10(1) / O1157163034761674 /
+C DATA LOG10(2) / O0006677466732724 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE BURROUGHS 6700/7700 SYSTEMS.
+C
+C DATA SMALL(1) / O1771000000000000 /
+C DATA SMALL(2) / O7770000000000000 /
+C
+C DATA LARGE(1) / O0777777777777777 /
+C DATA LARGE(2) / O7777777777777777 /
+C
+C DATA RIGHT(1) / O1461000000000000 /
+C DATA RIGHT(2) / O0000000000000000 /
+C
+C DATA DIVER(1) / O1451000000000000 /
+C DATA DIVER(2) / O0000000000000000 /
+C
+C DATA LOG10(1) / O1157163034761674 /
+C DATA LOG10(2) / O0006677466732724 /, SC/987/
+C
+C MACHINE CONSTANTS FOR FTN4 ON THE CDC 6000/7000 SERIES.
+C
+C DATA SMALL(1) / 00564000000000000000B /
+C DATA SMALL(2) / 00000000000000000000B /
+C
+C DATA LARGE(1) / 37757777777777777777B /
+C DATA LARGE(2) / 37157777777777777774B /
+C
+C DATA RIGHT(1) / 15624000000000000000B /
+C DATA RIGHT(2) / 00000000000000000000B /
+C
+C DATA DIVER(1) / 15634000000000000000B /
+C DATA DIVER(2) / 00000000000000000000B /
+C
+C DATA LOG10(1) / 17164642023241175717B /
+C DATA LOG10(2) / 16367571421742254654B /, SC/987/
+C
+C MACHINE CONSTANTS FOR FTN5 ON THE CDC 6000/7000 SERIES.
+C
+C DATA SMALL(1) / O"00564000000000000000" /
+C DATA SMALL(2) / O"00000000000000000000" /
+C
+C DATA LARGE(1) / O"37757777777777777777" /
+C DATA LARGE(2) / O"37157777777777777774" /
+C
+C DATA RIGHT(1) / O"15624000000000000000" /
+C DATA RIGHT(2) / O"00000000000000000000" /
+C
+C DATA DIVER(1) / O"15634000000000000000" /
+C DATA DIVER(2) / O"00000000000000000000" /
+C
+C DATA LOG10(1) / O"17164642023241175717" /
+C DATA LOG10(2) / O"16367571421742254654" /, SC/987/
+C
+C MACHINE CONSTANTS FOR CONVEX C-1
+C
+C DATA SMALL(1),SMALL(2) / '00100000'X, '00000000'X /
+C DATA LARGE(1),LARGE(2) / '7FFFFFFF'X, 'FFFFFFFF'X /
+C DATA RIGHT(1),RIGHT(2) / '3CC00000'X, '00000000'X /
+C DATA DIVER(1),DIVER(2) / '3CD00000'X, '00000000'X /
+C DATA LOG10(1),LOG10(2) / '3FF34413'X, '509F79FF'X /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3.
+C
+C DATA SMALL(1) / 201354000000000000000B /
+C DATA SMALL(2) / 000000000000000000000B /
+C
+C DATA LARGE(1) / 577767777777777777777B /
+C DATA LARGE(2) / 000007777777777777776B /
+C
+C DATA RIGHT(1) / 376434000000000000000B /
+C DATA RIGHT(2) / 000000000000000000000B /
+C
+C DATA DIVER(1) / 376444000000000000000B /
+C DATA DIVER(2) / 000000000000000000000B /
+C
+C DATA LOG10(1) / 377774642023241175717B /
+C DATA LOG10(2) / 000007571421742254654B /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200
+C
+C SMALL, LARGE, RIGHT, DIVER, LOG10 SHOULD BE DECLARED
+C INTEGER SMALL(4), LARGE(4), RIGHT(4), DIVER(4), LOG10(4)
+C
+C NOTE - IT MAY BE APPROPRIATE TO INCLUDE THE FOLLOWING LINE -
+C STATIC DMACH(5)
+C
+C DATA SMALL/20K,3*0/,LARGE/77777K,3*177777K/
+C DATA RIGHT/31420K,3*0/,DIVER/32020K,3*0/
+C DATA LOG10/40423K,42023K,50237K,74776K/, SC/987/
+C
+C MACHINE CONSTANTS FOR THE HARRIS SLASH 6 AND SLASH 7
+C
+C DATA SMALL(1),SMALL(2) / '20000000, '00000201 /
+C DATA LARGE(1),LARGE(2) / '37777777, '37777577 /
+C DATA RIGHT(1),RIGHT(2) / '20000000, '00000333 /
+C DATA DIVER(1),DIVER(2) / '20000000, '00000334 /
+C DATA LOG10(1),LOG10(2) / '23210115, '10237777 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES.
+C
+C DATA SMALL(1),SMALL(2) / O402400000000, O000000000000 /
+C DATA LARGE(1),LARGE(2) / O376777777777, O777777777777 /
+C DATA RIGHT(1),RIGHT(2) / O604400000000, O000000000000 /
+C DATA DIVER(1),DIVER(2) / O606400000000, O000000000000 /
+C DATA LOG10(1),LOG10(2) / O776464202324, O117571775714 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES,
+C THE XEROX SIGMA 5/7/9 AND THE SEL SYSTEMS 85/86.
+C
+C DATA SMALL(1),SMALL(2) / Z00100000, Z00000000 /
+C DATA LARGE(1),LARGE(2) / Z7FFFFFFF, ZFFFFFFFF /
+C DATA RIGHT(1),RIGHT(2) / Z33100000, Z00000000 /
+C DATA DIVER(1),DIVER(2) / Z34100000, Z00000000 /
+C DATA LOG10(1),LOG10(2) / Z41134413, Z509F79FF /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE INTERDATA 8/32
+C WITH THE UNIX SYSTEM FORTRAN 77 COMPILER.
+C
+C FOR THE INTERDATA FORTRAN VII COMPILER REPLACE
+C THE Z'S SPECIFYING HEX CONSTANTS WITH Y'S.
+C
+C DATA SMALL(1),SMALL(2) / Z'00100000', Z'00000000' /
+C DATA LARGE(1),LARGE(2) / Z'7EFFFFFF', Z'FFFFFFFF' /
+C DATA RIGHT(1),RIGHT(2) / Z'33100000', Z'00000000' /
+C DATA DIVER(1),DIVER(2) / Z'34100000', Z'00000000' /
+C DATA LOG10(1),LOG10(2) / Z'41134413', Z'509F79FF' /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE PDP-10 (KA PROCESSOR).
+C
+C DATA SMALL(1),SMALL(2) / "033400000000, "000000000000 /
+C DATA LARGE(1),LARGE(2) / "377777777777, "344777777777 /
+C DATA RIGHT(1),RIGHT(2) / "113400000000, "000000000000 /
+C DATA DIVER(1),DIVER(2) / "114400000000, "000000000000 /
+C DATA LOG10(1),LOG10(2) / "177464202324, "144117571776 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE PDP-10 (KI PROCESSOR).
+C
+C DATA SMALL(1),SMALL(2) / "000400000000, "000000000000 /
+C DATA LARGE(1),LARGE(2) / "377777777777, "377777777777 /
+C DATA RIGHT(1),RIGHT(2) / "103400000000, "000000000000 /
+C DATA DIVER(1),DIVER(2) / "104400000000, "000000000000 /
+C DATA LOG10(1),LOG10(2) / "177464202324, "047674776746 /, SC/987/
+C
+C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING
+C 32-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL).
+C
+C DATA SMALL(1),SMALL(2) / 8388608, 0 /
+C DATA LARGE(1),LARGE(2) / 2147483647, -1 /
+C DATA RIGHT(1),RIGHT(2) / 612368384, 0 /
+C DATA DIVER(1),DIVER(2) / 620756992, 0 /
+C DATA LOG10(1),LOG10(2) / 1067065498, -2063872008 /, SC/987/
+C
+C DATA SMALL(1),SMALL(2) / O00040000000, O00000000000 /
+C DATA LARGE(1),LARGE(2) / O17777777777, O37777777777 /
+C DATA RIGHT(1),RIGHT(2) / O04440000000, O00000000000 /
+C DATA DIVER(1),DIVER(2) / O04500000000, O00000000000 /
+C DATA LOG10(1),LOG10(2) / O07746420232, O20476747770 /, SC/987/
+C
+C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING
+C 16-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL).
+C
+C SMALL, LARGE, RIGHT, DIVER, LOG10 SHOULD BE DECLARED
+C INTEGER SMALL(4), LARGE(4), RIGHT(4), DIVER(4), LOG10(4)
+C
+C DATA SMALL(1),SMALL(2) / 128, 0 /
+C DATA SMALL(3),SMALL(4) / 0, 0 /
+C
+C DATA LARGE(1),LARGE(2) / 32767, -1 /
+C DATA LARGE(3),LARGE(4) / -1, -1 /
+C
+C DATA RIGHT(1),RIGHT(2) / 9344, 0 /
+C DATA RIGHT(3),RIGHT(4) / 0, 0 /
+C
+C DATA DIVER(1),DIVER(2) / 9472, 0 /
+C DATA DIVER(3),DIVER(4) / 0, 0 /
+C
+C DATA LOG10(1),LOG10(2) / 16282, 8346 /
+C DATA LOG10(3),LOG10(4) / -31493, -12296 /, SC/987/
+C
+C DATA SMALL(1),SMALL(2) / O000200, O000000 /
+C DATA SMALL(3),SMALL(4) / O000000, O000000 /
+C
+C DATA LARGE(1),LARGE(2) / O077777, O177777 /
+C DATA LARGE(3),LARGE(4) / O177777, O177777 /
+C
+C DATA RIGHT(1),RIGHT(2) / O022200, O000000 /
+C DATA RIGHT(3),RIGHT(4) / O000000, O000000 /
+C
+C DATA DIVER(1),DIVER(2) / O022400, O000000 /
+C DATA DIVER(3),DIVER(4) / O000000, O000000 /
+C
+C DATA LOG10(1),LOG10(2) / O037632, O020232 /
+C DATA LOG10(3),LOG10(4) / O102373, O147770 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE PRIME 50 SERIES SYSTEMS
+C WITH 32-BIT INTEGERS AND 64V MODE INSTRUCTIONS,
+C SUPPLIED BY IGOR BRAY.
+C
+C DATA SMALL(1),SMALL(2) / :10000000000, :00000100001 /
+C DATA LARGE(1),LARGE(2) / :17777777777, :37777677775 /
+C DATA RIGHT(1),RIGHT(2) / :10000000000, :00000000122 /
+C DATA DIVER(1),DIVER(2) / :10000000000, :00000000123 /
+C DATA LOG10(1),LOG10(2) / :11504046501, :07674600177 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE SEQUENT BALANCE 8000
+C
+C DATA SMALL(1),SMALL(2) / $00000000, $00100000 /
+C DATA LARGE(1),LARGE(2) / $FFFFFFFF, $7FEFFFFF /
+C DATA RIGHT(1),RIGHT(2) / $00000000, $3CA00000 /
+C DATA DIVER(1),DIVER(2) / $00000000, $3CB00000 /
+C DATA LOG10(1),LOG10(2) / $509F79FF, $3FD34413 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES.
+C
+C DATA SMALL(1),SMALL(2) / O000040000000, O000000000000 /
+C DATA LARGE(1),LARGE(2) / O377777777777, O777777777777 /
+C DATA RIGHT(1),RIGHT(2) / O170540000000, O000000000000 /
+C DATA DIVER(1),DIVER(2) / O170640000000, O000000000000 /
+C DATA LOG10(1),LOG10(2) / O177746420232, O411757177572 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE VAX UNIX F77 COMPILER
+C
+C DATA SMALL(1),SMALL(2) / 128, 0 /
+C DATA LARGE(1),LARGE(2) / -32769, -1 /
+C DATA RIGHT(1),RIGHT(2) / 9344, 0 /
+C DATA DIVER(1),DIVER(2) / 9472, 0 /
+C DATA LOG10(1),LOG10(2) / 546979738, -805796613 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE VAX-11 WITH
+C FORTRAN IV-PLUS COMPILER
+C
+C DATA SMALL(1),SMALL(2) / Z00000080, Z00000000 /
+C DATA LARGE(1),LARGE(2) / ZFFFF7FFF, ZFFFFFFFF /
+C DATA RIGHT(1),RIGHT(2) / Z00002480, Z00000000 /
+C DATA DIVER(1),DIVER(2) / Z00002500, Z00000000 /
+C DATA LOG10(1),LOG10(2) / Z209A3F9A, ZCFF884FB /, SC/987/
+C
+C MACHINE CONSTANTS FOR VAX/VMS VERSION 2.2
+C
+C DATA SMALL(1),SMALL(2) / '80'X, '0'X /
+C DATA LARGE(1),LARGE(2) / 'FFFF7FFF'X, 'FFFFFFFF'X /
+C DATA RIGHT(1),RIGHT(2) / '2480'X, '0'X /
+C DATA DIVER(1),DIVER(2) / '2500'X, '0'X /
+C DATA LOG10(1),LOG10(2) / '209A3F9A'X, 'CFF884FB'X /, SC/987/
+C
+C *** ISSUE STOP 779 IF ALL DATA STATEMENTS ARE COMMENTED...
+C IF (SC .NE. 987) THEN
+C DMACH(1) = 1.D13
+C IF ( SMALL(1) .EQ. 1117925532
+C * .AND. SMALL(2) .EQ. -448790528) THEN
+C* *** IEEE BIG ENDIAN ***
+C SMALL(1) = 1048576
+C SMALL(2) = 0
+C LARGE(1) = 2146435071
+C LARGE(2) = -1
+C RIGHT(1) = 1017118720
+C RIGHT(2) = 0
+C DIVER(1) = 1018167296
+C DIVER(2) = 0
+C LOG10(1) = 1070810131
+C LOG10(2) = 1352628735
+C ELSE IF ( SMALL(2) .EQ. 1117925532
+C * .AND. SMALL(1) .EQ. -448790528) THEN
+C* *** IEEE LITTLE ENDIAN ***
+C SMALL(2) = 1048576
+C SMALL(1) = 0
+C LARGE(2) = 2146435071
+C LARGE(1) = -1
+C RIGHT(2) = 1017118720
+C RIGHT(1) = 0
+C DIVER(2) = 1018167296
+C DIVER(1) = 0
+C LOG10(2) = 1070810131
+C LOG10(1) = 1352628735
+C ELSE IF ( SMALL(1) .EQ. -2065213935
+C * .AND. SMALL(2) .EQ. 10752) THEN
+C* *** VAX WITH D_FLOATING ***
+C SMALL(1) = 128
+C SMALL(2) = 0
+C LARGE(1) = -32769
+C LARGE(2) = -1
+C RIGHT(1) = 9344
+C RIGHT(2) = 0
+C DIVER(1) = 9472
+C DIVER(2) = 0
+C LOG10(1) = 546979738
+C LOG10(2) = -805796613
+C ELSE IF ( SMALL(1) .EQ. 1267827943
+C * .AND. SMALL(2) .EQ. 704643072) THEN
+C* *** IBM MAINFRAME ***
+C SMALL(1) = 1048576
+C SMALL(2) = 0
+C LARGE(1) = 2147483647
+C LARGE(2) = -1
+C RIGHT(1) = 856686592
+C RIGHT(2) = 0
+C DIVER(1) = 873463808
+C DIVER(2) = 0
+C LOG10(1) = 1091781651
+C LOG10(2) = 1352628735
+C ELSE
+C WRITE(*,*)'Adjust D1MACH by uncommenting'
+C WRITE(*,*)'data statements appropriate for your machine.'
+C STOP 779
+C END IF
+C SC = 987
+C END IF
+C
+C *** ISSUE STOP 778 IF ALL DATA STATEMENTS ARE OBVIOUSLY WRONG...
+C IF (DMACH(4) .GE. 1.0D0) STOP 778
+C*C/6S
+C*C IF (I .LT. 1 .OR. I .GT. 5)
+C*C 1 CALL SETERR(24HD1MACH - I OUT OF BOUNDS,24,1,2)
+C*C/7S
+C* IF (I .LT. 1 .OR. I .GT. 5)
+C* 1 CALL SETERR('D1MACH - I OUT OF BOUNDS',24,1,2)
+C*C/
+C IF (I .LT. 1 .OR. I .GT. 5) THEN
+C WRITE(*,*) 'D1MACH(I): I =',I,' is out of bounds.'
+C STOP
+C END IF
+ IF (I .LT. 1 .OR. I .GT. 5) THEN
+ D1MACH = 0.0
+ RETURN
+ END IF
+ D1MACH = DMACH(I)
+ RETURN
+C
+C* /* C source for D1MACH -- remove the * in column 1 */
+C*#include <stdio.h>
+C*#include <float.h>
+C*#include <math.h>
+C*
+C*double d1mach_(long *i)
+C*{
+C* switch(*i){
+C* case 1: return DBL_MIN;
+C* case 2: return DBL_MAX;
+C* case 3: return DBL_EPSILON/FLT_RADIX;
+C* case 4: return DBL_EPSILON;
+C* case 5: return log10(FLT_RADIX);
+C* }
+C*
+C* fprintf(stderr, "invalid argument: d1mach(%ld)\n", *i);
+C* exit(1);
+C* return 0; /* for compilers that complain of missing return values */
+C* }
+ END
diff --git a/unix/hlib/deallocate.cl b/unix/hlib/deallocate.cl
new file mode 100644
index 00000000..564d57be
--- /dev/null
+++ b/unix/hlib/deallocate.cl
@@ -0,0 +1,12 @@
+# DEALLOCATE -- Deallocate a device. The real work is done by the hidden CL
+# _deallocate task, but we provide a script interface as well to provide
+# scope for machine dependent additions.
+
+procedure deallocate (device)
+
+string device { prompt = "device to be deallocated" }
+bool rewind = yes
+
+begin
+ _deallocate (device, rewind)
+end
diff --git a/unix/hlib/devstatus.cl b/unix/hlib/devstatus.cl
new file mode 100644
index 00000000..4e00540b
--- /dev/null
+++ b/unix/hlib/devstatus.cl
@@ -0,0 +1,30 @@
+# DEVSTATUS -- Print status info for the named device. The basic function
+# is performed by the hidden builtin _devstatus, but you may with to add
+# additional machine dependent function to the script.
+
+procedure devstatus (device)
+
+string device { prompt = "device for which status is desired" }
+bool verbose = no
+
+string logname, hostname
+struct *devlist
+string dev
+
+begin
+ dev = device
+ _devstatus (dev)
+
+# if (verbose) {
+# # Print UNIX device status, too.
+#
+# devlist = "dev$devices"
+# while (fscan (devlist, logname, hostname) != EOF) {
+# if (logname == dev) {
+# print ("!ls -l /dev/", hostname) | cl
+# break
+# }
+# }
+# devlist = ""
+# }
+end
diff --git a/unix/hlib/diskspace.cl b/unix/hlib/diskspace.cl
new file mode 100644
index 00000000..d252a4a9
--- /dev/null
+++ b/unix/hlib/diskspace.cl
@@ -0,0 +1,7 @@
+#{ DISKSPACE -- [MACHDEP] Summarize the amount of diskspace currently
+# available.
+
+{
+ # Call the UNIX "diskfree" command.
+ !!df
+}
diff --git a/unix/hlib/ecl.csh b/unix/hlib/ecl.csh
new file mode 120000
index 00000000..bc54b0f4
--- /dev/null
+++ b/unix/hlib/ecl.csh
@@ -0,0 +1 @@
+cl.csh \ No newline at end of file
diff --git a/unix/hlib/ecl.sh b/unix/hlib/ecl.sh
new file mode 100755
index 00000000..027343a3
--- /dev/null
+++ b/unix/hlib/ecl.sh
@@ -0,0 +1,164 @@
+#!/bin/bash
+#
+# CL.SH -- Startup the version of the CL executable compiled for the
+# architecture or floating point hardware appropriate for the current
+# machine. This script can be used to invoke a number of CL flavors
+# depending on how it is called. The install script will create a 'cl'
+# and 'ecl' command link to this script with the intent that a different
+# binary would be started for each command.
+
+
+# Determine CL binary to run based on how we were called.
+
+nm=${0##*/}
+cl_binary="vocl.e"
+
+case "$nm" in
+ "cl" | "cl.sh")
+ cl_binary="cl.e"
+ ;;
+ "ecl" | "ecl.sh")
+ cl_binary="ecl.e"
+ ;;
+ "vocl" | "vocl.sh")
+ cl_binary="vocl.e"
+ ;;
+ *)
+ if (( $# > 1 )); then
+ if [ $1 == "-old" -o $1 == "-o" ]; then
+ cl_binary="cl.e"
+ elif [ $1 == "-ecl" -o $1 == "-e" ]; then
+ cl_binary="ecl.e"
+ elif [ $1 == "-vo" ]; then
+ cl_binary="vocl.e"
+ elif [ ${1##*.} == "c" ]; then
+ # Workaround for autoconf scripts attempting to use this
+ # command as a valid compiler option. On some systems (mostly
+ # Debian) a valid CC command can't be found and eventually
+ # the 'cl' (lisp) compiler is tried. It will always apparently
+ # have the conftest.c test file, so simply exit with a code to
+ # tell autoconf it won't work.
+ exit 1
+ fi
+ fi
+esac
+
+# Determine IRAF root directory (value set in install script).
+d_iraf="/iraf/iraf/"
+if [ -n $iraf ]; then
+ if [ ! -e $iraf ]; then
+ echo "Warning: iraf=$iraf does not exist (check .cshrc or .login)"
+ echo "Session will default to iraf=$d_iraf"
+ unset iraf ; sleep 3
+ fi
+fi
+if [ -z $iraf ]; then
+ export iraf="$d_iraf"
+fi
+
+# Check for a version query.
+if [ $# > 1 ]; then
+ case "$1" in
+ "-v" | "-V" | "-version" | "--version")
+ head -1 $iraf/unix/hlib/motd
+ exit 0
+ ;;
+ *)
+ ;;
+ esac
+fi
+
+
+# Determine platform architecture.
+if [ -e $iraf/unix/hlib/irafarch.sh ]; then
+ ACTUAL_ARCH=`$iraf/unix/hlib/irafarch.sh -actual`
+else
+ ACTUAL_ARCH=$IRAFARCH
+fi
+
+if [ -n "$IRAFARCH" ]; then
+ if [ -e $iraf/bin.${IRAFARCH}/${cl_binary} ]; then
+ MACH=$IRAFARCH
+ else
+ echo "ERROR: No $iraf/bin.${IRAFARCH}/${cl_binary} binary found."
+ if [ "$ACTUAL_ARCH" != "$IRAFARCH" ]; then
+ echo "ERROR: IRAFARCH set to '$IRAFARCH', should be '$ACTUAL_ARCH'"
+ fi
+ exit 1
+ fi
+ export arch=".$MACH"
+
+else
+ os_mach=`uname -s | tr '[A-Z]' '[a-z]' | cut -c1-6`
+
+ if [ -e $iraf/unix/hlib/irafarch.csh ]; then
+ MACH=`$iraf/unix/hlib/irafarch.csh`
+ else
+ MACH=$os_mach
+ fi
+
+ if [ "$os_mach" == "linux" ]; then # handle linux systems
+ if [ `uname -m` == "x86_64" ]; then
+ export mach="linux64"
+ else
+ export mach="linux"
+ fi
+ elif [ "$os_mach" == "darwin" ]; then # handle Mac systems
+ if [ "`uname -m`" == "x86_64" ]; then
+ export mach="macintel"
+ else
+ export mach="macosx"
+ fi
+ elif [ "$os_mach" == "cygwin" ]; then
+ export mach="cygwin"
+ else
+ mach=`uname -s | tr '[A-Z]' '[a-z]'`
+ fi
+
+ export arch=".$MACH"
+ if [ -z $IRAFARCH ]; then
+ export IRAFARCH="$MACH"
+ fi
+
+ if [ ! -e $iraf/bin.${MACH}/${cl_binary} ]; then
+ echo "ERROR: No $iraf/bin.${IRAFARCH}/${cl_binary} binary found."
+ exit 1
+ fi
+fi
+
+
+# Recent linux systems display a problem in how pointer addresses
+# interact with the stack and can result in a segfault. Remove the
+# stacksize limit for IRAF processes until this is better understood.
+if [ "$IRAFARCH" == "redhat" -o \
+ "$IRAFARCH" == "linux64" -o \
+ "$IRAFARCH" == "linux" ]; then
+ ulimit -s unlimited
+fi
+
+
+# Just run the CL if IRAFARCH already defined.
+if [ -n "$IRAFARCH" ]; then
+ if [ -z $IRAFARCH ]; then
+ export arch=""
+ else
+ export arch=".$IRAFARCH"
+ fi
+
+ export IRAFBIN=${iraf}bin$arch/
+ file=${IRAFBIN}$cl_binary
+ if [ -e $file ]; then
+ exec $file
+ else
+ echo "$file not found"
+ fi
+fi
+
+
+# Set the architecture to be used.
+export IRAFARCH=$MACH
+export arch=.$IRAFARCH
+export IRAFBIN=${iraf}bin$arch/
+
+# Run the desired CL.
+exec ${IRAFBIN}$cl_binary
diff --git a/unix/hlib/extern.pkg b/unix/hlib/extern.pkg
new file mode 100644
index 00000000..5afbabf9
--- /dev/null
+++ b/unix/hlib/extern.pkg
@@ -0,0 +1,41 @@
+# External (non core-system) packages. To install a new package, add the
+# two statements to define the package root directory and package task,
+# then add the package helpdb to the `helpdb' list.
+
+reset extern = iraf$extern/
+
+reset noao = iraf$noao/
+task noao.pkg = noao$noao.cl
+
+reset vo = iraf$vo/
+task vo.pkg = vo$vo.cl
+
+#reset local = iraf$local/
+#task local.pkg = local$local.cl
+
+
+# Manually defined external packages. Packages installed in the iraf$extern
+# directory will be loaded dynamically, other packages may be defined here
+# if for some reason they are non-standard and cannot be loaded dynamically.
+#
+# Package definitions have the form:
+#
+# reset example = extern$example/ <--- must have trailing '/'
+# task example.pkg = example$example.cl
+#
+# Note the 'helpdb' string below must also be modified.
+
+
+
+# Initialize the helpdb string. We'll add to this when dyanamically
+# loading packages when the next load the CLPACKAGE.
+reset helpdb = "lib$helpdb.mip\
+ ,noao$lib/helpdb.mip\
+ ,vo$lib/helpdb.mip\
+# ,example$lib/helpdb.mip\
+ "
+
+
+# Do not modify below this line!
+clpackage
+keep
diff --git a/unix/hlib/extern.pkg.DEF b/unix/hlib/extern.pkg.DEF
new file mode 100644
index 00000000..8d1f9f76
--- /dev/null
+++ b/unix/hlib/extern.pkg.DEF
@@ -0,0 +1,16 @@
+# External (non core-system) packages. To install a new package, add the
+# two statements to define the package root directory and package task,
+# then add the package helpdb to the `helpdb' list.
+
+reset noao = iraf$noao/
+task noao.pkg = noao$noao.cl
+
+#reset tables = /iraf/extern/tables/
+#task tables.pkg = tables$tables.cl
+
+reset helpdb = "lib$helpdb.mip\
+ ,noao$lib/helpdb.mip\
+# ,tables$lib/helpdb.mip\
+ "
+
+keep
diff --git a/unix/hlib/extern.pkg.IRAFNET b/unix/hlib/extern.pkg.IRAFNET
new file mode 100644
index 00000000..8d1f9f76
--- /dev/null
+++ b/unix/hlib/extern.pkg.IRAFNET
@@ -0,0 +1,16 @@
+# External (non core-system) packages. To install a new package, add the
+# two statements to define the package root directory and package task,
+# then add the package helpdb to the `helpdb' list.
+
+reset noao = iraf$noao/
+task noao.pkg = noao$noao.cl
+
+#reset tables = /iraf/extern/tables/
+#task tables.pkg = tables$tables.cl
+
+reset helpdb = "lib$helpdb.mip\
+ ,noao$lib/helpdb.mip\
+# ,tables$lib/helpdb.mip\
+ "
+
+keep
diff --git a/unix/hlib/extpkg.cl b/unix/hlib/extpkg.cl
new file mode 100644
index 00000000..105dd5bf
--- /dev/null
+++ b/unix/hlib/extpkg.cl
@@ -0,0 +1,58 @@
+# Dynamic Package Loading Script
+#
+# This script is "sourced" by the standard hlib$extern.pkg file when the
+# CL is loaded to automatically define any packages installed in the
+# iraf$extern directory. Both the package definition and helpdb strings
+# are defined to include the package, negating the previous manual
+# declarations required in hlib$extern.pkg
+#
+#
+
+string curdir, extdir, dpkg
+
+extdir = osfn ("iraf$extern")
+
+# Go to the dynamic package directory, but save the current directory so
+# we can return when we're done. At this stage of the login we need to
+# use host commands since the system package isn't available.
+printf ("!pwd\n") | cl () | scan (curdir)
+chdir (extdir)
+
+# Create a file list to process.
+dpkg = mktemp ("tmp$dpkg")
+if (access (dpkg) == yes)
+ printf ("!/bin/rm -f %s\n", osfn(dpkg)) | cl ()
+;
+printf ("!/bin/ls -1ad [a-y]*\n") | cl (,> dpkg)
+
+list = dpkg
+while (fscan (list, s1) != EOF) {
+
+ # We define an environment variable for installed directories, e.g. a
+ # package support directory of data might require it's own definition.
+ # This also works to define the variable for actual package code, but
+ # we don't declare the package just yet.
+ if (access (s1) == yes &&
+ (access (s1//"/.installed") == yes ||
+ access (s1//"/"//s1//".cl") == yes)) {
+ printf ("reset %s = %s/%s/\nkeep\n", s1, osfn("iraf$extern"), s1) | cl ()
+ }
+ ;
+
+ # We assume we can dynamically load a package if there is a "foo.cl"
+ # script file in the 'foo' subdirectory.
+ if (access (s1//"/"//s1//".cl") == yes) {
+ printf ("task %s.pkg = %s$%s.cl\nkeep\n", s1, s1, s1) | cl ()
+
+ # Add to the helpdb string.
+ printf ("reset helpdb=%s,%s$lib/helpdb.mip\nkeep\n",
+ envget("helpdb"), s1) | cl ()
+ }
+ ;
+}
+
+# Clean uo and go back to the login directory.
+printf ("!/bin/rm -f %s\n", osfn(dpkg)) | cl ()
+chdir (curdir)
+
+keep
diff --git a/unix/hlib/f77.sh b/unix/hlib/f77.sh
new file mode 100755
index 00000000..1033f0cf
--- /dev/null
+++ b/unix/hlib/f77.sh
@@ -0,0 +1,296 @@
+#!/bin/bash
+PATH=/v/bin:/bin:/usr/bin:/usr/local/bin
+# f77-style shell script to compile and load fortran, C, and assembly codes
+# usage: f77 [-g] [-O|-O[23456]] [-o absfile] [-c] files [-l library]
+# -o objfile Override default executable name a.out.
+# -c Do not call linker, leave relocatables in *.o.
+# -S leave assembler output on file.s
+# -l library (passed to ld).
+# -u complain about undeclared variables
+# -w omit all warning messages
+# -w66 omit Fortran 66 compatibility warning messages
+# -f* pass thru gcc optimizer options
+# -W* pass thru gcc warning options
+# files FORTRAN source files ending in .f .
+# C source files ending in .c .
+# Assembly language files ending in .s .
+# efl source files ending in .e .
+# -I includepath passed to C compiler (for .c files)
+# -Ntnnn allow nnn entries in table t
+# -cpp -Dxxx pipe through cpp
+#
+# [IRAF] -- For IRAF we had to modify the f77 script that came with Linux
+# to remove the "f2ctmp_XX" prefix that the script was adding to the Fortran
+# file names when compiling. The main problem with this is that it prevents
+# source code debugging from working since the file that was compiled (e.g.
+# f2ctmp_foo.f) no longer exists at run time. A lesser problem was that the
+# code which deletes the f2ctmp_ files would return an exit 4 status, causing
+# problems with XC (XC was modified for Linux to ignore this but it is still
+# a bug with the f77 script). NOTE -- the old behavior is still present if
+# the Fortran file has a .F extension. The modified (no f2ctmp_) behavior is
+# for .f files.
+
+s=/tmp/stderr_$$
+t=/tmp/f77_$$
+#CC=${CC_f2c:-'/usr/bin/cc -m486'}
+CC=${CC_f2c:-'gcc'}
+CFLAGS=${CFLAGS:-"-I${iraf}unix/bin.${IRAFARCH}"}
+EFL=${EFL:-/v/bin/efl}
+EFLFLAGS=${EFLFLAGS:-'system=portable deltastno=10'}
+F2C=${F2C:-/usr/bin/f2c}
+F2CFLAGS=${F2CFLAGS:='-KRw8 -Nn802'}
+keepc=0
+warn=1
+xsrc=0
+rc=0
+lib=/lib/num/lib.lo
+trap "rm -f $s ; exit \$rc" 0
+OUTF=a.out
+cOPT=1
+G=
+CPP=/bin/cat
+CPPFLAGS=
+# set -- `getopt cD:gI:N:Oo:Suw6 "$@"`
+case $? in 0);; *) exit 1;; esac
+while
+ test X"$1" != X--
+do
+ case "$1"
+ in
+ -b) CFLAGS="$CFLAGS -b $2"
+ shift 2
+ ;;
+
+ -K) keepc=1
+ shift
+ ;;
+
+ -c) cOPT=0
+ shift
+ ;;
+
+ -D) CPPFLAGS="$CPPFLAGS -D$2"
+ shift 2
+ ;;
+
+ -D*) CPPFLAGS="$CPPFLAGS $1"
+ shift 1
+ ;;
+
+ -f2c) F2C="$2"
+ #F2C="${iraf}/unix/bin/f2c.e"
+ shift 2
+ ;;
+
+ -f*) CFLAGS="$CFLAGS $1"
+ shift 1
+ ;;
+
+ -g) CFLAGS="$CFLAGS -g"
+ F2CFLAGS="$F2CFLAGS -g"
+ G="-g"
+ shift;;
+
+ -x64) CFLAGS="$CFLAGS -mfloat64"
+ shift;;
+
+ -I) CFLAGS="$CFLAGS -I$2"
+ shift 2
+ ;;
+
+ -I*) CFLAGS="$CFLAGS $1"
+ shift 1
+ ;;
+
+ -m*) CFLAGS="$CFLAGS $1"
+ shift 1
+ ;;
+
+ -o) OUTF=$2
+ shift 2
+ ;;
+
+ -O*)
+ CFLAGS="$CFLAGS $1"
+ shift
+ ;;
+
+ -arch) CFLAGS="$CFLAGS -arch $2"
+ shift 2
+ ;;
+
+ -U) CFLAGS="$CFLAGS -arch ppc -arch i386"
+ shift
+ ;;
+
+ -u) F2CFLAGS="$F2CFLAGS -u"
+ shift
+ ;;
+
+ -P) F2CFLAGS="$F2CFLAGS -P"
+ shift
+ ;;
+
+ -FP) CFLAGS="$CFLAGS -include $2"
+ shift 2
+ ;;
+
+ -W*) CFLAGS="$CFLAGS $1"
+ warn=1
+ shift 1
+ ;;
+
+ -w) F2CFLAGS="$F2CFLAGS -w"
+ CFLAGS="$CFLAGS -w"
+ warn=0
+ case $2 in -6) F2CFLAGS="$F2CFLAGS"66; shift
+ case $2 in -6) shift;; esac;; esac
+ shift
+ ;;
+
+ -x) xsrc=1
+ shift
+ ;;
+
+ -N) F2CFLAGS="$F2CFLAGS $1""$2"
+ shift 2
+ ;;
+
+ -N*|-C) F2CFLAGS="$F2CFLAGS $1"
+ shift 1
+ ;;
+
+ -cpp) CPP="/lib/cpp -traditional"
+ shift 1
+ ;;
+
+ -S) CFLAGS="$CFLAGS -S"
+ cOPT=0
+ shift
+ ;;
+
+ -*)
+ echo "invalid parameter $1" 1>&2
+ shift
+ ;;
+
+ *) set -- -- $@
+ ;;
+ esac
+done
+shift
+
+while
+ test -n "$1"
+do
+ case "$1"
+ in
+ *.f)
+ case "$1" in *.f) f=".f";; *.F) f=".F";; esac
+ b=`basename $1 $f`
+ if [ $warn = 0 ]; then
+ $F2C $F2CFLAGS $b.f 2>$s
+ sed '/^ arg .*: here/d' $s 1>&2
+ else
+ $F2C $F2CFLAGS $b.f
+ fi
+ if [ $xsrc = 1 ]; then
+ sed -e "s/$b\\.f/$b.x/" < $b.c > $b.t; mv $b.t $b.c
+ fi
+ $CC $CPPFLAGS -c $CFLAGS $b.c 2>$s
+ rc=$?
+ sed '/parameter .* is not referenced/d;/warning: too many parameters/d' $s 1>&2
+ case $rc in 0);; *) exit 5;; esac
+ if [ $keepc = 0 ]; then
+ rm -f $b.c
+ fi
+ OFILES="$OFILES $b.o"
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ *.F)
+ case "$1" in *.f) f=".f";; *.F) f=".F";; esac
+ b=`basename $1 $f`
+ trap "rm -f f2ctmp_$b.* ; exit 4" 0
+ sed 's/\\$/\\-/;
+ s/^ *INCLUDE *'\(.*\)'.*$/#include "\1"/' $1 |\
+ $CPP $CPPFLAGS |\
+ egrep -v '^# ' > f2ctmp_$b.f
+ trap "rm -f f2ctmp_$b.* ; exit 4" 0
+ $F2C $F2CFLAGS f2ctmp_$b.f
+ case $? in 0);; *) rm f2ctmp_* ; exit 5;; esac
+ rm -f f2ctmp_$b.f
+ mv f2ctmp_$b.c $b.c
+ if [ -f f2ctmp_$b.P ]; then mv f2ctmp_$b.P $b.P; fi
+ case $? in 0);; *) rm -f $b.c ; exit 5;; esac
+ trap "rm -f $s ; exit 4" 0
+ $CC $CPPFLAGS -c $CFLAGS $b.c 2>$s
+ rc=$?
+ sed '/parameter .* is not referenced/d;/warning: too many parameters/d' $s 1>&2
+ case $rc in 0);; *) exit 5;; esac
+ if [ $keepc = 0 ]; then
+ rm -f $b.c
+ fi
+ OFILES="$OFILES $b.o"
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ *.e)
+ b=`basename $1 .e`
+ $EFL $EFLFLAGS $1 >$b.f
+ case $? in 0);; *) exit;; esac
+ $F2C $F2CFLAGS $b.f
+ case $? in 0);; *) exit;; esac
+ $CC -c $CFLAGS $b.c
+ case $? in 0);; *) exit;; esac
+ OFILES="$OFILES $b.o"
+ rm $b.[cf]
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ *.s)
+ echo $1: 1>&2
+ OFILE=`basename $1 .s`.o
+ ${AS:-/usr/bin/as} -o $OFILE $AFLAGS $1
+ case $? in 0);; *) exit;; esac
+ OFILES="$OFILES $OFILE"
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ *.c)
+ echo $1: 1>&2
+ OFILE=`basename $1 .c`.o
+ $CC -c $CFLAGS $CPPFLAGS $1
+ rc=$?; case $rc in 0);; *) exit;; esac
+ OFILES="$OFILES $OFILE"
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ *.o)
+ OFILES="$OFILES $1"
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ -l)
+ OFILES="$OFILES -l$2"
+ shift 2
+ case $cOPT in 1) cOPT=2;; esac
+ ;;
+ -l*)
+ OFILES="$OFILES $1"
+ shift
+ case $cOPT in 1) cOPT=2;; esac
+ ;;
+ -o)
+ OUTF=$2; shift 2;;
+ *)
+ OFILES="$OFILES $1"
+ shift
+ case $cOPT in 1) cOPT=2;; esac
+ ;;
+ esac
+done
+
+case $cOPT in 2) $CC $G -o $OUTF $OFILES -lf2c -lm;; esac
+rc=$?
+exit $rc
diff --git a/unix/hlib/f77.sh.bak b/unix/hlib/f77.sh.bak
new file mode 100755
index 00000000..49db55b0
--- /dev/null
+++ b/unix/hlib/f77.sh.bak
@@ -0,0 +1,297 @@
+#!/bin/sh
+PATH=/v/bin:/bin:/usr/bin:/usr/local/bin
+# f77-style shell script to compile and load fortran, C, and assembly codes
+# usage: f77 [-g] [-O|-O[23456]] [-o absfile] [-c] files [-l library]
+# -o objfile Override default executable name a.out.
+# -c Do not call linker, leave relocatables in *.o.
+# -S leave assembler output on file.s
+# -l library (passed to ld).
+# -u complain about undeclared variables
+# -w omit all warning messages
+# -w66 omit Fortran 66 compatibility warning messages
+# -f* pass thru gcc optimizer options
+# -W* pass thru gcc warning options
+# files FORTRAN source files ending in .f .
+# C source files ending in .c .
+# Assembly language files ending in .s .
+# efl source files ending in .e .
+# -I includepath passed to C compiler (for .c files)
+# -Ntnnn allow nnn entries in table t
+# -cpp -Dxxx pipe through cpp
+#
+# [IRAF] -- For IRAF we had to modify the f77 script that came with Linux
+# to remove the "f2ctmp_XX" prefix that the script was adding to the Fortran
+# file names when compiling. The main problem with this is that it prevents
+# source code debugging from working since the file that was compiled (e.g.
+# f2ctmp_foo.f) no longer exists at run time. A lesser problem was that the
+# code which deletes the f2ctmp_ files would return an exit 4 status, causing
+# problems with XC (XC was modified for Linux to ignore this but it is still
+# a bug with the f77 script). NOTE -- the old behavior is still present if
+# the Fortran file has a .F extension. The modified (no f2ctmp_) behavior is
+# for .f files.
+
+s=/tmp/stderr_$$
+t=/tmp/f77_$$
+#CC=${CC_f2c:-'/usr/bin/cc -m486'}
+CC=${CC_f2c:-'gcc'}
+CFLAGS=${CFLAGS:-"-I${iraf}unix/bin.${IRAFARCH}"}
+EFL=${EFL:-/v/bin/efl}
+EFLFLAGS=${EFLFLAGS:-'system=portable deltastno=10'}
+F2C=${F2C:-/usr/bin/f2c}
+F2CFLAGS=${F2CFLAGS:='-KRw8 -Nn802'}
+MARCH="-m64 -arch x86_64"
+keepc=0
+warn=1
+xsrc=0
+rc=0
+lib=/lib/num/lib.lo
+trap "rm -f $s ; exit \$rc" 0
+OUTF=a.out
+cOPT=1
+G=
+CPP=/bin/cat
+CPPFLAGS=
+# set -- `getopt cD:gI:N:Oo:Suw6 "$@"`
+case $? in 0);; *) exit 1;; esac
+while
+ test X"$1" != X--
+do
+ case "$1"
+ in
+ -b) CFLAGS="$CFLAGS -b $2"
+ shift 2
+ ;;
+
+ -K) keepc=1
+ shift
+ ;;
+
+ -c) cOPT=0
+ shift
+ ;;
+
+ -D) CPPFLAGS="$CPPFLAGS -D$2"
+ shift 2
+ ;;
+
+ -D*) CPPFLAGS="$CPPFLAGS $1"
+ shift 1
+ ;;
+
+ -f2c) F2C="$2"
+ F2C="${iraf}/unix/bin/f2c.e"
+ shift 2
+ ;;
+
+ -f*) CFLAGS="$CFLAGS $1"
+ shift 1
+ ;;
+
+ -g) CFLAGS="$CFLAGS -g"
+ F2CFLAGS="$F2CFLAGS -g"
+ G="-g"
+ shift;;
+
+ -x64) CFLAGS="$CFLAGS -mfloat64"
+ shift;;
+
+ -I) CFLAGS="$CFLAGS -I$2"
+ shift 2
+ ;;
+
+ -I*) CFLAGS="$CFLAGS $1"
+ shift 1
+ ;;
+
+ -m*) CFLAGS="$CFLAGS $1"
+ shift 1
+ ;;
+
+ -o) OUTF=$2
+ shift 2
+ ;;
+
+ -O*)
+ CFLAGS="$CFLAGS $1"
+ shift
+ ;;
+
+ -arch) CFLAGS="$CFLAGS -arch $2"
+ shift 2
+ ;;
+
+ -U) CFLAGS="$CFLAGS -arch ppc -arch i386"
+ shift
+ ;;
+
+ -u) F2CFLAGS="$F2CFLAGS -u"
+ shift
+ ;;
+
+ -P) F2CFLAGS="$F2CFLAGS -P"
+ shift
+ ;;
+
+ -FP) CFLAGS="$CFLAGS -include $2"
+ shift 2
+ ;;
+
+ -W*) CFLAGS="$CFLAGS $1"
+ warn=1
+ shift 1
+ ;;
+
+ -w) F2CFLAGS="$F2CFLAGS -w"
+ CFLAGS="$CFLAGS -w"
+ warn=0
+ case $2 in -6) F2CFLAGS="$F2CFLAGS"66; shift
+ case $2 in -6) shift;; esac;; esac
+ shift
+ ;;
+
+ -x) xsrc=1
+ shift
+ ;;
+
+ -N) F2CFLAGS="$F2CFLAGS $1""$2"
+ shift 2
+ ;;
+
+ -N*|-C) F2CFLAGS="$F2CFLAGS $1"
+ shift 1
+ ;;
+
+ -cpp) CPP="/lib/cpp -traditional"
+ shift 1
+ ;;
+
+ -S) CFLAGS="$CFLAGS -S"
+ cOPT=0
+ shift
+ ;;
+
+ -*)
+ echo "invalid parameter $1" 1>&2
+ shift
+ ;;
+
+ *) set -- -- $@
+ ;;
+ esac
+done
+shift
+
+while
+ test -n "$1"
+do
+ case "$1"
+ in
+ *.f)
+ case "$1" in *.f) f=".f";; *.F) f=".F";; esac
+ b=`basename $1 $f`
+ if [ $warn = 0 ]; then
+ $F2C $F2CFLAGS $b.f 2>$s
+ sed '/^ arg .*: here/d' $s 1>&2
+ else
+ $F2C $F2CFLAGS $b.f
+ fi
+ if [ $xsrc = 1 ]; then
+ sed -e "s/$b\\.f/$b.x/" < $b.c > $b.t; mv $b.t $b.c
+ fi
+ $CC $CPPFLAGS -c $CFLAGS $b.c 2>$s
+ rc=$?
+ sed '/parameter .* is not referenced/d;/warning: too many parameters/d' $s 1>&2
+ case $rc in 0);; *) exit 5;; esac
+ if [ $keepc = 0 ]; then
+ rm -f $b.c
+ fi
+ OFILES="$OFILES $b.o"
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ *.F)
+ case "$1" in *.f) f=".f";; *.F) f=".F";; esac
+ b=`basename $1 $f`
+ trap "rm -f f2ctmp_$b.* ; exit 4" 0
+ sed 's/\\$/\\-/;
+ s/^ *INCLUDE *'\(.*\)'.*$/#include "\1"/' $1 |\
+ $CPP $CPPFLAGS |\
+ egrep -v '^# ' > f2ctmp_$b.f
+ trap "rm -f f2ctmp_$b.* ; exit 4" 0
+ $F2C $F2CFLAGS f2ctmp_$b.f
+ case $? in 0);; *) rm f2ctmp_* ; exit 5;; esac
+ rm -f f2ctmp_$b.f
+ mv f2ctmp_$b.c $b.c
+ if [ -f f2ctmp_$b.P ]; then mv f2ctmp_$b.P $b.P; fi
+ case $? in 0);; *) rm -f $b.c ; exit 5;; esac
+ trap "rm -f $s ; exit 4" 0
+ $CC $CPPFLAGS -c $CFLAGS $b.c 2>$s
+ rc=$?
+ sed '/parameter .* is not referenced/d;/warning: too many parameters/d' $s 1>&2
+ case $rc in 0);; *) exit 5;; esac
+ if [ $keepc = 0 ]; then
+ rm -f $b.c
+ fi
+ OFILES="$OFILES $b.o"
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ *.e)
+ b=`basename $1 .e`
+ $EFL $EFLFLAGS $1 >$b.f
+ case $? in 0);; *) exit;; esac
+ $F2C $F2CFLAGS $b.f
+ case $? in 0);; *) exit;; esac
+ $CC -c $CFLAGS $b.c
+ case $? in 0);; *) exit;; esac
+ OFILES="$OFILES $b.o"
+ rm $b.[cf]
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ *.s)
+ echo $1: 1>&2
+ OFILE=`basename $1 .s`.o
+ ${AS:-/usr/bin/as} -o $OFILE $AFLAGS $1
+ case $? in 0);; *) exit;; esac
+ OFILES="$OFILES $OFILE"
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ *.c)
+ echo $1: 1>&2
+ OFILE=`basename $1 .c`.o
+ $CC -c $CFLAGS $CPPFLAGS $1
+ rc=$?; case $rc in 0);; *) exit;; esac
+ OFILES="$OFILES $OFILE"
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ *.o)
+ OFILES="$OFILES $1"
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ -l)
+ OFILES="$OFILES -l$2"
+ shift 2
+ case $cOPT in 1) cOPT=2;; esac
+ ;;
+ -l*)
+ OFILES="$OFILES $1"
+ shift
+ case $cOPT in 1) cOPT=2;; esac
+ ;;
+ -o)
+ OUTF=$2; shift 2;;
+ *)
+ OFILES="$OFILES $1"
+ shift
+ case $cOPT in 1) cOPT=2;; esac
+ ;;
+ esac
+done
+
+case $cOPT in 2) $CC $G -o $OUTF $OFILES -lf2c -lm;; esac
+rc=$?
+exit $rc
diff --git a/unix/hlib/fc.csh b/unix/hlib/fc.csh
new file mode 100755
index 00000000..ab631b39
--- /dev/null
+++ b/unix/hlib/fc.csh
@@ -0,0 +1,37 @@
+#!/bin/csh -f
+#
+# FC.CSH -- Link an IMFORT or host fortran program from IRAF. A front end
+# to XC, the purpose of this script is to determine the IRAF architecture
+# and add the appropriate host compiler file to XC.
+
+# set echo
+
+# Scan the argument list and concatenate all arguments.
+set args = ""
+while ("$1" != "")
+ set args = "$args $1"
+ shift
+end
+
+# Determine the desired architecture.
+setenv IRAFARCH `$iraf/unix/hlib/irafarch.csh`
+setenv MACH $IRAFARCH
+
+# Get float option switch.
+switch ($IRAFARCH)
+case macosx:
+ set float = "-/arch -//i386"
+ breaksw
+case macint:
+ set float = "-/arch -//x86_64"
+ breaksw
+case linux64:
+ set float = "-/m64" # FIXME
+ breaksw
+default:
+ set float = ""
+ breaksw
+endsw
+
+# Call XC with the appropriate float option.
+xc $float $args
diff --git a/unix/hlib/fc.sh b/unix/hlib/fc.sh
new file mode 100755
index 00000000..88a0762c
--- /dev/null
+++ b/unix/hlib/fc.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+#
+# FC.SH -- Link an IMFORT or host fortran program from IRAF. A front end
+# to XC, the purpose of this script is to determine the IRAF architecture
+# and add the appropriate host compiler file to XC.
+
+
+# Determine the desired architecture.
+IRAFARCH=`$iraf/unix/hlib/irafarch.csh`
+MACH=$IRAFARCH
+
+
+# Set any float option switch.
+case $IRAFARCH in
+ macosx)
+ float="-/arch -//i386"
+ ;;
+ macintel)
+ float="-/arch -//x86_64"
+ ;;
+ linux64)
+ float="-/m64" # FIXME
+ ;;
+ *)
+ float=""
+ ;;
+esac
+
+# Call XC with the appropriate float option.
+xc $float $@
diff --git a/unix/hlib/gripes.cl b/unix/hlib/gripes.cl
new file mode 100644
index 00000000..d05bedd5
--- /dev/null
+++ b/unix/hlib/gripes.cl
@@ -0,0 +1,65 @@
+# GRIPES -- Send gripes to the system. Gripes may be gripes, complaints, or
+# suggestions.
+
+procedure gripes (subject)
+
+string subject { prompt = "Subject" }
+file gripesfile = "hlib$gripesfile"
+struct gripetext { len = 80 }
+file tempfile
+struct *list
+struct timestring { len = 25 }
+bool quit
+bool verbose = yes
+
+begin
+ # Put gripe in tempfile and only append to the system gripefile if
+ # we complete normally. Thus if the user aborts us the gripe is
+ # not recorded.
+
+ tempfile = mktemp ("uparm$gripe") // ".txt"
+ time (> tempfile)
+ list = tempfile
+ if (fscan (list, timestring) != EOF)
+ delete (tempfile, verify=no)
+
+ # Print gripe report header.
+ print ("\n------------", >> tempfile)
+ print ("From: ", envget ("userid"), " ", timestring, >> tempfile)
+
+ # Learn mode is not very useful for the subject string, since new
+ # gripemail virtually always deals with a different subject. Reset
+ # the subject string to null so that no prompt will be issued the
+ # next time we are called.
+
+ print ("Subject: ", subject, >> tempfile)
+ subject = ""
+
+ if (verbose) {
+ print ("Enter your gripe(s).\n")
+ print ("Type <eof> or '.' to quit, '~edit' to go into the editor:")
+ }
+ print (" ", >> tempfile) # skip line on output
+ print (" ") # skip line on terminal
+
+ # Copy user text. Call up editor on temp file if "~edit" escape
+ # is entered, or any abbreviation thereof, and append file to
+ # gripesfile after exiting from the editor.
+
+ while (scan (gripetext) != EOF)
+ if (substr (gripetext,1,1) == '.') {
+ break
+ } else if (substr (gripetext,1,2) == "~e") {
+ edit (tempfile)
+ clear; type (tempfile)
+ } else
+ print (gripetext, >> tempfile)
+
+ # type (tempfile, >> gripesfile)
+# UNIX
+ print ("!!mail iraf@noao.edu < ", osfn(tempfile)) | cl
+# VMS
+ # print ("!mail ", osfn(tempfile), " 5355::iraf") | cl
+
+ delete (tempfile, verify=no)
+end
diff --git a/unix/hlib/helplog.csh b/unix/hlib/helplog.csh
new file mode 100755
index 00000000..8c740fd4
--- /dev/null
+++ b/unix/hlib/helplog.csh
@@ -0,0 +1,128 @@
+#! /bin/csh
+# HELPLOG -- Format, edit, and log a new help digest to the system help file.
+#
+# Usage:
+#
+# helplog [none|system|applications] log a new help digest
+# helplog -e edit the helpfile (with locking)
+#
+# The system helpfile is locked for exclusive access while a help digest is
+# being logged, or while the helpfile is being edited. Logging can be
+# aborted either by typing <ctrl/c>, or by editing the editor with ":q!"
+# (i.e., by exiting the editor without modifying the temporary file being
+# edited). Help logs are formatted and edited in a small temporary file in
+# /tmp and are added at the end of the helpfile only if the task is not
+# aborted and the edit modifies the input help log template. To go back and
+# edit a previously logged help digest use "helplog -e".
+#
+# Record Format:
+#
+# NUMBER: record number, decimal, sequential.
+# KEYWORDS: search keywords (eg task/package, category)
+# DATE: date help digest logged, unix format date string
+# FROM: user login name
+# Q: digest of question
+# A: digest of answer
+#
+# New records are added to the tail of the bugfile. Left justify field labels,
+# indent text to the first tab stop, one blank line between bug entries.
+#
+# ----------------------------------------------------------------------------
+
+unalias rm set find echo sleep tail sed cmp echo cat mail
+
+set helpfile = "${iraf}local/help.log"
+set arcfile = "/u1/ftp/iraf/v212/help.log"
+set tmpfile = "/tmp/help."
+set lokfile = "/tmp/help.lok"
+
+set number = 1
+set keywords = ""
+set from = "`whoami`"
+set date = "`date`"
+#set irafmail = "iraf@iraf.noao.edu valdes"
+set irafmail = "sites@tucana.tuc.noao.edu valdes"
+set newsgroup = "$1"
+
+# Get exclusive access to the helpfile.
+
+if (-e $lokfile) then
+ find $helpfile -newer $lokfile -exec rm -f $lokfile \;
+ while (-e $lokfile)
+ echo "waiting for access to system helpfile"
+ sleep 15
+ end
+endif
+
+date > $lokfile
+onintr cleanup
+
+# If we were called as "helplog -e", simply edit the locked helpfile.
+
+if ("$1" == "-e") then
+ vi + $helpfile
+ goto cleanup
+endif
+
+# Increment the help record number.
+
+set number = "`grep '^NUMBER:' $helpfile | tail -1 | sed -e 's/^NUMBER:.//'`"
+if ("$number" == "") then
+ set number = 1
+else
+ set number = "`expr $number + 1`"
+endif
+
+# Format new help entry in a temporary file and edit it.
+
+set tmpfile = $tmpfile$number
+if (-e $tmpfile) then
+ echo "file $tmpfile already exists"
+ rm -i $tmpfile
+ if (-e $tmpfile) then
+ goto edithelp
+ endif
+endif
+
+echo "NUMBER: $number" >> $tmpfile
+echo "KEYWORDS: $keywords" >> $tmpfile
+echo "DATE: $date" >> $tmpfile
+echo "FROM: $from" >> $tmpfile
+echo "" >> $tmpfile
+echo "Q: ..." >> $tmpfile
+echo "" >> $tmpfile
+echo "A: ..." >> $tmpfile
+
+edithelp:
+cp $tmpfile $tmpfile.ORIG
+vi $tmpfile
+
+# Add new help entry to helpfile (exiting the editor without modifying the file
+# causes the help to be discarded).
+
+cmp -s $tmpfile $tmpfile.ORIG
+if ($status) then
+ while ($newsgroup != "system" && $newsgroup != "applications" && $newsgroup != "none")
+ echo -n "Newsgroup (none|system|applications): "
+ set newsgroup = "$<"
+ end
+ set keywords = "`grep '^KEYWORDS:' $tmpfile | tail -1 | sed -e 's/^KEYWORDS:.//'`"
+ echo "" >> $helpfile; cat $tmpfile >> $helpfile
+ echo "" >> $arcfile; cat $tmpfile >> $arcfile
+ mail -s "helplog.$number"": $keywords" $irafmail < $tmpfile
+ if ($newsgroup != "none") then
+ mail -s "helplog.$number"": $keywords"\
+ adass-iraf-{$newsgroup}@iraf.noao.edu < $tmpfile
+ endif
+ rm -f $tmpfile $tmpfile.ORIG
+else
+ echo "system helpfile not modified"
+ rm -f $tmpfile $tmpfile.ORIG
+endif
+
+# Cleanup (vector here on interrupt).
+
+cleanup:
+if (-e $lokfile) then
+ rm -f $lokfile
+endif
diff --git a/unix/hlib/helplog.sh b/unix/hlib/helplog.sh
new file mode 100755
index 00000000..7fea4288
--- /dev/null
+++ b/unix/hlib/helplog.sh
@@ -0,0 +1,138 @@
+#!/bin/bash
+#
+# HELPLOG -- Format, edit, and log a new help digest to the system help file.
+#
+# Usage:
+#
+# helplog [none|system|applications] log a new help digest
+# helplog -e edit the helpfile (with locking)
+#
+# The system helpfile is locked for exclusive access while a help digest is
+# being logged, or while the helpfile is being edited. Logging can be
+# aborted either by typing <ctrl/c>, or by editing the editor with ":q!"
+# (i.e., by exiting the editor without modifying the temporary file being
+# edited). Help logs are formatted and edited in a small temporary file in
+# /tmp and are added at the end of the helpfile only if the task is not
+# aborted and the edit modifies the input help log template. To go back and
+# edit a previously logged help digest use "helplog -e".
+#
+# Record Format:
+#
+# NUMBER: record number, decimal, sequential.
+# KEYWORDS: search keywords (eg task/package, category)
+# DATE: date help digest logged, unix format date string
+# FROM: user login name
+# Q: digest of question
+# A: digest of answer
+#
+# New records are added to the tail of the bugfile. Left justify field labels,
+# indent text to the first tab stop, one blank line between bug entries.
+#
+# ----------------------------------------------------------------------------
+
+iraf="`/bin/echo ${iraf}/ | tr -s '/'`"
+
+helpfile="${iraf}local/help.log"
+arcfile="/u1/ftp/iraf/v216/help.log"
+tmpfile="/tmp/help."
+lokfile="/tmp/help.lok"
+
+number=1
+keywords=""
+from="`whoami`"
+date="`date`"
+#irafmail="iraf@iraf.noao.edu valdes"
+irafmail="sites@tucana.tuc.noao.edu valdes"
+newsgroup="$1"
+
+# Cleanup (vector here on interrupt).
+
+cleanup() {
+ if [ -e $lokfile ]; then
+ rm -f $lokfile
+ fi
+ exit 0
+}
+
+# Get exclusive access to the helpfile.
+
+if [ -e $lokfile ]; then
+ find $helpfile -newer $lokfile -exec rm -f $lokfile \;
+ while [ -e $lokfile ]; do
+ /bin/echo "waiting for access to system helpfile"
+ sleep 15
+ done
+fi
+
+date > $lokfile
+trap cleanup 2
+
+# If we were called as "helplog -e", simply edit the locked helpfile.
+
+if [ "$1" = "-e" ]; then
+ vi + $helpfile
+ cleanup
+fi
+
+# Increment the help record number.
+
+number="`grep '^NUMBER:' $helpfile | tail -1 | sed -e 's/^NUMBER:.//'`"
+if [ "$number" = "" ]; then
+ number=1
+else
+ number="`expr $number + 1`"
+fi
+
+# Format new help entry in a temporary file and edit it.
+
+SKP=0
+tmpfile=$tmpfile$number
+if [ -e $tmpfile ]; then
+ /bin/echo "file $tmpfile already exists"
+ rm -i $tmpfile
+ if [ -e $tmpfile ]; then
+ SKP=1
+ fi
+fi
+
+if [ $SKP = 0 ]; then
+ /bin/echo "NUMBER: $number" >> $tmpfile
+ /bin/echo "KEYWORDS: $keywords" >> $tmpfile
+ /bin/echo "DATE: $date" >> $tmpfile
+ /bin/echo "FROM: $from" >> $tmpfile
+ /bin/echo "" >> $tmpfile
+ /bin/echo "Q: ..." >> $tmpfile
+ /bin/echo "" >> $tmpfile
+ /bin/echo "A: ..." >> $tmpfile
+fi
+
+cp $tmpfile $tmpfile.ORIG
+vi $tmpfile
+
+# Add new help entry to helpfile (exiting the editor without modifying the file
+# causes the help to be discarded).
+
+cmp -s $tmpfile $tmpfile.ORIG
+if [ $? = 0 ]; then
+ /bin/echo "system helpfile not modified"
+ rm -f $tmpfile $tmpfile.ORIG
+else
+ while [ $newsgroup != "system" -a $newsgroup != "applications" -a $newsgroup != "none" ]; do
+ /bin/echo -n "Newsgroup (none|system|applications): "
+ read newsgroup
+ done
+ keywords="`grep '^KEYWORDS:' $tmpfile | tail -1 | sed -e 's/^KEYWORDS:.//'`"
+ /bin/echo "" >> $helpfile; cat $tmpfile >> $helpfile
+ if [ -e $arcfile ]; then
+ /bin/echo "" >> $arcfile; cat $tmpfile >> $arcfile
+ fi
+ mail -s "helplog.$number"": $keywords" $irafmail < $tmpfile
+ if [ $newsgroup != "none" ]; then
+ mail -s "helplog.$number"": $keywords"\
+ adass-iraf-{$newsgroup}@iraf.noao.edu < $tmpfile
+ fi
+ rm -f $tmpfile $tmpfile.ORIG
+fi
+
+cleanup
+
diff --git a/unix/hlib/i1mach.f b/unix/hlib/i1mach.f
new file mode 100644
index 00000000..733a6bb9
--- /dev/null
+++ b/unix/hlib/i1mach.f
@@ -0,0 +1,661 @@
+ INTEGER FUNCTION I1MACH(I)
+C
+C I/O UNIT NUMBERS.
+C
+C I1MACH( 1) = THE STANDARD INPUT UNIT.
+C
+C I1MACH( 2) = THE STANDARD OUTPUT UNIT.
+C
+C I1MACH( 3) = THE STANDARD PUNCH UNIT.
+C
+C I1MACH( 4) = THE STANDARD ERROR MESSAGE UNIT.
+C
+C WORDS.
+C
+C I1MACH( 5) = THE NUMBER OF BITS PER INTEGER STORAGE UNIT.
+C
+C I1MACH( 6) = THE NUMBER OF CHARACTERS PER CHARACTER STORAGE UNIT.
+C FOR FORTRAN 77, THIS IS ALWAYS 1. FOR FORTRAN 66,
+C CHARACTER STORAGE UNIT = INTEGER STORAGE UNIT.
+C
+C INTEGERS.
+C
+C ASSUME INTEGERS ARE REPRESENTED IN THE S-DIGIT, BASE-A FORM
+C
+C SIGN ( X(S-1)*A**(S-1) + ... + X(1)*A + X(0) )
+C
+C WHERE 0 .LE. X(I) .LT. A FOR I=0,...,S-1.
+C
+C I1MACH( 7) = A, THE BASE.
+C
+C I1MACH( 8) = S, THE NUMBER OF BASE-A DIGITS.
+C
+C I1MACH( 9) = A**S - 1, THE LARGEST MAGNITUDE.
+C
+C FLOATING-POINT NUMBERS.
+C
+C ASSUME FLOATING-POINT NUMBERS ARE REPRESENTED IN THE T-DIGIT,
+C BASE-B FORM
+C
+C SIGN (B**E)*( (X(1)/B) + ... + (X(T)/B**T) )
+C
+C WHERE 0 .LE. X(I) .LT. B FOR I=1,...,T,
+C 0 .LT. X(1), AND EMIN .LE. E .LE. EMAX.
+C
+C I1MACH(10) = B, THE BASE.
+C
+C SINGLE-PRECISION
+C
+C I1MACH(11) = T, THE NUMBER OF BASE-B DIGITS.
+C
+C I1MACH(12) = EMIN, THE SMALLEST EXPONENT E.
+C
+C I1MACH(13) = EMAX, THE LARGEST EXPONENT E.
+C
+C DOUBLE-PRECISION
+C
+C I1MACH(14) = T, THE NUMBER OF BASE-B DIGITS.
+C
+C I1MACH(15) = EMIN, THE SMALLEST EXPONENT E.
+C
+C I1MACH(16) = EMAX, THE LARGEST EXPONENT E.
+C
+C TO ALTER THIS FUNCTION FOR A PARTICULAR ENVIRONMENT,
+C THE DESIRED SET OF DATA STATEMENTS SHOULD BE ACTIVATED BY
+C REMOVING THE C FROM COLUMN 1. ALSO, THE VALUES OF
+C I1MACH(1) - I1MACH(4) SHOULD BE CHECKED FOR CONSISTENCY
+C WITH THE LOCAL OPERATING SYSTEM. FOR FORTRAN 77, YOU MAY WISH
+C TO ADJUST THE DATA STATEMENT SO IMACH(6) IS SET TO 1, AND
+C THEN TO COMMENT OUT THE EXECUTABLE TEST ON I .EQ. 6 BELOW.
+C
+C FOR IEEE-ARITHMETIC MACHINES (BINARY STANDARD), THE FIRST
+C SET OF CONSTANTS BELOW SHOULD BE APPROPRIATE, EXCEPT PERHAPS
+C FOR IMACH(1) - IMACH(4).
+C
+C COMMENTS JUST BEFORE THE END STATEMENT (LINES STARTING WITH *)
+C GIVE C SOURCE FOR I1MACH.
+C
+ INTEGER IMACH(16), OUTPUT, SMALL(2), I
+C/6S
+C/7S
+ SAVE IMACH
+C/
+ REAL RMACH
+C
+ EQUIVALENCE (IMACH(4),OUTPUT), (RMACH,SMALL(1))
+C
+C MACHINE CONSTANTS FOR IEEE ARITHMETIC MACHINES, SUCH AS THE AT&T
+C 3B SERIES, MOTOROLA 68000 BASED MACHINES (E.G. SUN 3 AND AT&T
+C PC 7300), AND 8087 BASED MICROS (E.G. IBM PC AND AT&T 6300).
+C
+ DATA IMACH( 1) / 5 /
+ DATA IMACH( 2) / 6 /
+ DATA IMACH( 3) / 7 /
+ DATA IMACH( 4) / 6 /
+ DATA IMACH( 5) / 32 /
+ DATA IMACH( 6) / 4 /
+ DATA IMACH( 7) / 2 /
+ DATA IMACH( 8) / 31 /
+ DATA IMACH( 9) / 2147483647 /
+ DATA IMACH(10) / 2 /
+ DATA IMACH(11) / 24 /
+ DATA IMACH(12) / -125 /
+ DATA IMACH(13) / 128 /
+ DATA IMACH(14) / 53 /
+ DATA IMACH(15) / -1021 /
+ DATA IMACH(16) / 1024 /
+C
+C MACHINE CONSTANTS FOR AMDAHL MACHINES.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 32 /
+C DATA IMACH( 6) / 4 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 31 /
+C DATA IMACH( 9) / 2147483647 /
+C DATA IMACH(10) / 16 /
+C DATA IMACH(11) / 6 /
+C DATA IMACH(12) / -64 /
+C DATA IMACH(13) / 63 /
+C DATA IMACH(14) / 14 /
+C DATA IMACH(15) / -64 /
+C DATA IMACH(16) / 63 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM.
+C
+C DATA IMACH( 1) / 7 /
+C DATA IMACH( 2) / 2 /
+C DATA IMACH( 3) / 2 /
+C DATA IMACH( 4) / 2 /
+C DATA IMACH( 5) / 36 /
+C DATA IMACH( 6) / 4 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 33 /
+C DATA IMACH( 9) / Z1FFFFFFFF /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 24 /
+C DATA IMACH(12) / -256 /
+C DATA IMACH(13) / 255 /
+C DATA IMACH(14) / 60 /
+C DATA IMACH(15) / -256 /
+C DATA IMACH(16) / 255 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE BURROUGHS 5700 SYSTEM.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 48 /
+C DATA IMACH( 6) / 6 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 39 /
+C DATA IMACH( 9) / O0007777777777777 /
+C DATA IMACH(10) / 8 /
+C DATA IMACH(11) / 13 /
+C DATA IMACH(12) / -50 /
+C DATA IMACH(13) / 76 /
+C DATA IMACH(14) / 26 /
+C DATA IMACH(15) / -50 /
+C DATA IMACH(16) / 76 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE BURROUGHS 6700/7700 SYSTEMS.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 48 /
+C DATA IMACH( 6) / 6 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 39 /
+C DATA IMACH( 9) / O0007777777777777 /
+C DATA IMACH(10) / 8 /
+C DATA IMACH(11) / 13 /
+C DATA IMACH(12) / -50 /
+C DATA IMACH(13) / 76 /
+C DATA IMACH(14) / 26 /
+C DATA IMACH(15) / -32754 /
+C DATA IMACH(16) / 32780 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR FTN4 ON THE CDC 6000/7000 SERIES.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 60 /
+C DATA IMACH( 6) / 10 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 48 /
+C DATA IMACH( 9) / 00007777777777777777B /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 47 /
+C DATA IMACH(12) / -929 /
+C DATA IMACH(13) / 1070 /
+C DATA IMACH(14) / 94 /
+C DATA IMACH(15) / -929 /
+C DATA IMACH(16) / 1069 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR FTN5 ON THE CDC 6000/7000 SERIES.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 60 /
+C DATA IMACH( 6) / 10 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 48 /
+C DATA IMACH( 9) / O"00007777777777777777" /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 47 /
+C DATA IMACH(12) / -929 /
+C DATA IMACH(13) / 1070 /
+C DATA IMACH(14) / 94 /
+C DATA IMACH(15) / -929 /
+C DATA IMACH(16) / 1069 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR CONVEX C-1.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 32 /
+C DATA IMACH( 6) / 4 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 31 /
+C DATA IMACH( 9) / 2147483647 /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 24 /
+C DATA IMACH(12) / -128 /
+C DATA IMACH(13) / 127 /
+C DATA IMACH(14) / 53 /
+C DATA IMACH(15) /-1024 /
+C DATA IMACH(16) / 1023 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 102 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 64 /
+C DATA IMACH( 6) / 8 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 63 /
+C DATA IMACH( 9) / 777777777777777777777B /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 47 /
+C DATA IMACH(12) / -8189 /
+C DATA IMACH(13) / 8190 /
+C DATA IMACH(14) / 94 /
+C DATA IMACH(15) / -8099 /
+C DATA IMACH(16) / 8190 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200.
+C
+C DATA IMACH( 1) / 11 /
+C DATA IMACH( 2) / 12 /
+C DATA IMACH( 3) / 8 /
+C DATA IMACH( 4) / 10 /
+C DATA IMACH( 5) / 16 /
+C DATA IMACH( 6) / 2 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 15 /
+C DATA IMACH( 9) /32767 /
+C DATA IMACH(10) / 16 /
+C DATA IMACH(11) / 6 /
+C DATA IMACH(12) / -64 /
+C DATA IMACH(13) / 63 /
+C DATA IMACH(14) / 14 /
+C DATA IMACH(15) / -64 /
+C DATA IMACH(16) / 63 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE HARRIS SLASH 6 AND SLASH 7.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 0 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 24 /
+C DATA IMACH( 6) / 3 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 23 /
+C DATA IMACH( 9) / 8388607 /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 23 /
+C DATA IMACH(12) / -127 /
+C DATA IMACH(13) / 127 /
+C DATA IMACH(14) / 38 /
+C DATA IMACH(15) / -127 /
+C DATA IMACH(16) / 127 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 43 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 36 /
+C DATA IMACH( 6) / 4 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 35 /
+C DATA IMACH( 9) / O377777777777 /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 27 /
+C DATA IMACH(12) / -127 /
+C DATA IMACH(13) / 127 /
+C DATA IMACH(14) / 63 /
+C DATA IMACH(15) / -127 /
+C DATA IMACH(16) / 127 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES,
+C THE XEROX SIGMA 5/7/9 AND THE SEL SYSTEMS 85/86.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 32 /
+C DATA IMACH( 6) / 4 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 31 /
+C DATA IMACH( 9) / Z7FFFFFFF /
+C DATA IMACH(10) / 16 /
+C DATA IMACH(11) / 6 /
+C DATA IMACH(12) / -64 /
+C DATA IMACH(13) / 63 /
+C DATA IMACH(14) / 14 /
+C DATA IMACH(15) / -64 /
+C DATA IMACH(16) / 63 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE INTERDATA 8/32
+C WITH THE UNIX SYSTEM FORTRAN 77 COMPILER.
+C
+C FOR THE INTERDATA FORTRAN VII COMPILER REPLACE
+C THE Z'S SPECIFYING HEX CONSTANTS WITH Y'S.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 6 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 32 /
+C DATA IMACH( 6) / 4 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 31 /
+C DATA IMACH( 9) / Z'7FFFFFFF' /
+C DATA IMACH(10) / 16 /
+C DATA IMACH(11) / 6 /
+C DATA IMACH(12) / -64 /
+C DATA IMACH(13) / 62 /
+C DATA IMACH(14) / 14 /
+C DATA IMACH(15) / -64 /
+C DATA IMACH(16) / 62 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE PDP-10 (KA PROCESSOR).
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 36 /
+C DATA IMACH( 6) / 5 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 35 /
+C DATA IMACH( 9) / "377777777777 /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 27 /
+C DATA IMACH(12) / -128 /
+C DATA IMACH(13) / 127 /
+C DATA IMACH(14) / 54 /
+C DATA IMACH(15) / -101 /
+C DATA IMACH(16) / 127 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE PDP-10 (KI PROCESSOR).
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 36 /
+C DATA IMACH( 6) / 5 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 35 /
+C DATA IMACH( 9) / "377777777777 /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 27 /
+C DATA IMACH(12) / -128 /
+C DATA IMACH(13) / 127 /
+C DATA IMACH(14) / 62 /
+C DATA IMACH(15) / -128 /
+C DATA IMACH(16) / 127 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING
+C 32-BIT INTEGER ARITHMETIC.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 32 /
+C DATA IMACH( 6) / 4 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 31 /
+C DATA IMACH( 9) / 2147483647 /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 24 /
+C DATA IMACH(12) / -127 /
+C DATA IMACH(13) / 127 /
+C DATA IMACH(14) / 56 /
+C DATA IMACH(15) / -127 /
+C DATA IMACH(16) / 127 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING
+C 16-BIT INTEGER ARITHMETIC.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 16 /
+C DATA IMACH( 6) / 2 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 15 /
+C DATA IMACH( 9) / 32767 /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 24 /
+C DATA IMACH(12) / -127 /
+C DATA IMACH(13) / 127 /
+C DATA IMACH(14) / 56 /
+C DATA IMACH(15) / -127 /
+C DATA IMACH(16) / 127 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE PRIME 50 SERIES SYSTEMS
+C WTIH 32-BIT INTEGERS AND 64V MODE INSTRUCTIONS,
+C SUPPLIED BY IGOR BRAY.
+C
+C DATA IMACH( 1) / 1 /
+C DATA IMACH( 2) / 1 /
+C DATA IMACH( 3) / 2 /
+C DATA IMACH( 4) / 1 /
+C DATA IMACH( 5) / 32 /
+C DATA IMACH( 6) / 4 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 31 /
+C DATA IMACH( 9) / :17777777777 /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 23 /
+C DATA IMACH(12) / -127 /
+C DATA IMACH(13) / +127 /
+C DATA IMACH(14) / 47 /
+C DATA IMACH(15) / -32895 /
+C DATA IMACH(16) / +32637 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE SEQUENT BALANCE 8000.
+C
+C DATA IMACH( 1) / 0 /
+C DATA IMACH( 2) / 0 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 0 /
+C DATA IMACH( 5) / 32 /
+C DATA IMACH( 6) / 1 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 31 /
+C DATA IMACH( 9) / 2147483647 /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 24 /
+C DATA IMACH(12) / -125 /
+C DATA IMACH(13) / 128 /
+C DATA IMACH(14) / 53 /
+C DATA IMACH(15) / -1021 /
+C DATA IMACH(16) / 1024 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES.
+C
+C NOTE THAT THE PUNCH UNIT, I1MACH(3), HAS BEEN SET TO 7
+C WHICH IS APPROPRIATE FOR THE UNIVAC-FOR SYSTEM.
+C IF YOU HAVE THE UNIVAC-FTN SYSTEM, SET IT TO 1.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 36 /
+C DATA IMACH( 6) / 6 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 35 /
+C DATA IMACH( 9) / O377777777777 /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 27 /
+C DATA IMACH(12) / -128 /
+C DATA IMACH(13) / 127 /
+C DATA IMACH(14) / 60 /
+C DATA IMACH(15) /-1024 /
+C DATA IMACH(16) / 1023 /, SANITY/987/
+C
+C MACHINE CONSTANTS FOR VAX.
+C
+C DATA IMACH( 1) / 5 /
+C DATA IMACH( 2) / 6 /
+C DATA IMACH( 3) / 7 /
+C DATA IMACH( 4) / 6 /
+C DATA IMACH( 5) / 32 /
+C DATA IMACH( 6) / 4 /
+C DATA IMACH( 7) / 2 /
+C DATA IMACH( 8) / 31 /
+C DATA IMACH( 9) / 2147483647 /
+C DATA IMACH(10) / 2 /
+C DATA IMACH(11) / 24 /
+C DATA IMACH(12) / -127 /
+C DATA IMACH(13) / 127 /
+C DATA IMACH(14) / 56 /
+C DATA IMACH(15) / -127 /
+C DATA IMACH(16) / 127 /, SANITY/987/
+C
+C *** ISSUE STOP 775 IF ALL DATA STATEMENTS ARE COMMENTED...
+C IF (SANITY .NE. 987) THEN
+C* *** CHECK FOR AUTODOUBLE ***
+C SMALL(2) = 0
+C RMACH = 1E13
+C IF (SMALL(2) .NE. 0) THEN
+C* *** AUTODOUBLED ***
+C IF ( (SMALL(1) .EQ. 1117925532
+C * .AND. SMALL(2) .EQ. -448790528)
+C * .OR. (SMALL(2) .EQ. 1117925532
+C * .AND. SMALL(1) .EQ. -448790528)) THEN
+C* *** IEEE ***
+C IMACH(10) = 2
+C IMACH(14) = 53
+C IMACH(15) = -1021
+C IMACH(16) = 1024
+C ELSE IF ( SMALL(1) .EQ. -2065213935
+C * .AND. SMALL(2) .EQ. 10752) THEN
+C* *** VAX WITH D_FLOATING ***
+C IMACH(10) = 2
+C IMACH(14) = 56
+C IMACH(15) = -127
+C IMACH(16) = 127
+C ELSE IF ( SMALL(1) .EQ. 1267827943
+C * .AND. SMALL(2) .EQ. 704643072) THEN
+C* *** IBM MAINFRAME ***
+C IMACH(10) = 16
+C IMACH(14) = 14
+C IMACH(15) = -64
+C IMACH(16) = 63
+C ELSE
+C WRITE(*,*)'Adjust autodoubled I1MACH by uncommenting'
+C WRITE(*,*)'data statements appropriate for your machine'
+C WRITE(*,*)'and setting IMACH(I) = IMACH(I+3) for'
+C WRITE(*,*)'I = 11, 12, and 13.'
+C STOP 777
+C END IF
+C IMACH(11) = IMACH(14)
+C IMACH(12) = IMACH(15)
+C IMACH(13) = IMACH(16)
+C ELSE
+C RMACH = 1234567.
+C IF (SMALL(1) .EQ. 1234613304) THEN
+C* *** IEEE ***
+C IMACH(10) = 2
+C IMACH(11) = 24
+C IMACH(12) = -125
+C IMACH(13) = 128
+C IMACH(14) = 53
+C IMACH(15) = -1021
+C IMACH(16) = 1024
+C SANITY = 987
+C ELSE IF (SMALL(1) .EQ. -1271379306) THEN
+C* *** VAX ***
+C IMACH(10) = 2
+C IMACH(11) = 24
+C IMACH(12) = -127
+C IMACH(13) = 127
+C IMACH(14) = 56
+C IMACH(15) = -127
+C IMACH(16) = 127
+C SANITY = 987
+C ELSE IF (SMALL(1) .EQ. 1175639687) THEN
+C* *** IBM ***
+C IMACH(10) = 16
+C IMACH(11) = 6
+C IMACH(12) = -64
+C IMACH(13) = 63
+C IMACH(14) = 14
+C IMACH(15) = -64
+C IMACH(16) = 63
+C SANITY = 987
+C ELSE
+C WRITE(*,*)'Adjust I1MACH by uncommenting'
+C WRITE(*,*)'data statements appropriate for your machine.'
+C STOP 777
+C END IF
+C END IF
+C IMACH( 1) = 5
+C IMACH( 2) = 6
+C IMACH( 3) = 7
+C IMACH( 4) = 6
+C IMACH( 5) = 32
+C IMACH( 6) = 4
+C IMACH( 7) = 2
+C IMACH( 8) = 31
+C IMACH( 9) = 2147483647
+C SANITY = 987
+C END IF
+C IF (I .LT. 1 .OR. I .GT. 16) GO TO 30
+ IF (I .LT. 1 .OR. I .GT. 16) THEN
+ I1MACH = -1
+ RETURN
+ END IF
+C
+ I1MACH = IMACH(I)
+C/6S
+C/7S
+ IF (I .EQ. 6) I1MACH = 1
+C/
+ RETURN
+C
+C 30 WRITE(*,*) 'I1MACH(I): I =',I,' is out of bounds.'
+C
+C* CALL FDUMP
+C
+C STOP
+C
+C* /* C source for I1MACH -- remove the * in column 1 */
+C* /* Note that some values may need changing -- see the comments below. */
+C*#include <stdio.h>
+C*#include <float.h>
+C*#include <limits.h>
+C*#include <math.h>
+C*
+C*long i1mach_(long *i)
+C*{
+C* switch(*i){
+C* case 1: return 5; /* standard input unit -- may need changing */
+C* case 2: return 6; /* standard output unit -- may need changing */
+C* case 3: return 7; /* standard punch unit -- may need changing */
+C* case 4: return 0; /* standard error unit -- may need changing */
+C* case 5: return 32; /* bits per integer -- may need changing */
+C* case 6: return 1; /* Fortran 77 value: 1 character */
+C* /* per character storage unit */
+C* case 7: return 2; /* base for integers -- may need changing */
+C* case 8: return 31; /* digits of integer base -- may need changing */
+C* case 9: return LONG_MAX;
+C* case 10: return FLT_RADIX;
+C* case 11: return FLT_MANT_DIG;
+C* case 12: return FLT_MIN_EXP;
+C* case 13: return FLT_MAX_EXP;
+C* case 14: return DBL_MANT_DIG;
+C* case 15: return DBL_MIN_EXP;
+C* case 16: return DBL_MAX_EXP;
+C* }
+C*
+C* fprintf(stderr, "invalid argument: i1mach(%ld)\n", *i);
+C* exit(1);
+C* return 0; /* for compilers that complain of missing return values */
+C* }
+ END
diff --git a/unix/hlib/install.csh b/unix/hlib/install.csh
new file mode 100755
index 00000000..1aa08984
--- /dev/null
+++ b/unix/hlib/install.csh
@@ -0,0 +1,3484 @@
+#!/bin/csh
+#
+# INSTALL -- Install IRAF on a UNIX/IRAF host. May also be run after the
+# initial installation as a consistency check to verify that all the necessary
+# links and file permissions are still in place (e.g., after updating UNIX
+# itself).
+#
+# Installation:
+# This file should be installed in the $iraf directory, if it is being
+# installed as a patch to a distributed IRAF system the existing iraf$install
+# script should be backed up and then this file used to replace it. Once
+# in place the script may be made executable with the command
+#
+# % chmod 755 install
+#
+# Please consult the IRAF web pages for the latest information on bug fixes
+# to this script.
+#
+#
+# Usage: install [-n] [-r rootdir] [-i imdir] [-b localbindir] \
+# [-R oldroot] [-I oldimdir] [-u username (e.g., 'iraf')]
+# [-l locallibdir] [-m mach (e.g., 'sparc', 'ssun') ]
+# [-noedit]
+#
+# Example:
+# % su
+# % cd $hlib
+# % ./install -n
+# % ./install
+#
+# If run with no arguments, INSTALL will make an informed guess and prompt
+# with this value; type <return> to accept the value, or enter a new value.
+#
+# Use "install -n" to do a dry run to see what the would be done, without
+# actually modifying the host system and IRAF configuration files. To do the
+# actual installation one must be superuser, but anyone can run "install -n"
+# to see what it would do.
+#
+# ----------------------------------------------------------------------------
+
+
+unset noclobber
+onintr cleanup_
+unalias cd cp cmp echo ln mv rm sed set grep ls chmod chown pwd touch sort which
+
+setenv path "(/sbin /usr/sbin /bin /usr/bin /usr/5bin /usr/ucb /etc /usr/etc $path /usr/local/bin /opt/local/bin /local/bin /home/local/bin /usr/openwin/bin /usr/X11R6/bin /usr/X11/bin)"
+
+# set echo
+
+
+
+##############################################################################
+# START OF MACHDEP DEFINITIONS.
+##############################################################################
+
+# MACHDEP definitions which may be reset below.
+set LS = "/bin/ls" # [MACHDEP]
+set LSDF = "-lLtgs" # [MACHDEP]
+
+set VERSION = "V2.16"
+set V = `echo $VERSION | cut -c2-5`
+set hmach = "INDEF"
+set shlib = "no"
+set pciraf = 0
+set suniraf = 0
+set do_tapecaps = 0
+set do_tapes = 1
+set do_pipes = 0
+set has_pipes = 1
+set hilite = 1
+set no_edit = 0
+
+
+# Utility aliases.
+#alias PUT "mv -f \!*; chown $user \!$ " # [MACHDEP]
+alias PUT "cp -p \!*; chown $user \!$ " # [MACHDEP]
+alias BOLD_ON "(if ($hilite) tput bold)"
+alias BOLD_OFF "(if ($hilite) tput sgr0)"
+alias SO_ON "(if ($hilite) tput smso)"
+alias SO_OFF "(if ($hilite) tput sgr0)"
+
+alias DO_OK "(echo -n '[ '; BOLD_ON; echo -n ' OK '; BOLD_OFF; echo ' ]')"
+alias DO_WARN "(echo -n '[ '; BOLD_ON; echo -n 'WARN'; BOLD_OFF; echo ' ]')"
+alias DO_FAIL "(echo -n '[ '; SO_ON; echo -n 'FAIL'; SO_OFF; echo ' ]')"
+
+alias MSG "(echo -n ' ';BOLD_ON;echo -n '*** ';BOLD_OFF; echo \!*)"
+alias MSGB "(echo -n ' ';BOLD_ON;echo -n '*** ';echo \!*; BOLD_OFF)"
+alias MSGN "(echo -n ' ';BOLD_ON;echo -n '*** ';BOLD_OFF; echo -n \!*)"
+alias MSGBN "(echo -n ' ';BOLD_ON;echo -n '*** ';echo -n \!*; BOLD_OFF)"
+alias ERRMSG "(echo -n ' ';BOLD_ON;echo -n 'ERROR: ' ;BOLD_OFF; echo \!*)"
+alias WARNING "(echo -n ' ';BOLD_ON;echo -n 'WARNING: ';BOLD_OFF; echo \!*)"
+alias NEWLINE "(echo '')"
+
+alias PROMPT "(BOLD_ON; echo -n \!*; BOLD_OFF; echo -n ' (yes): ')"
+alias PROMPT_N "(BOLD_ON; echo -n \!*; BOLD_OFF; echo -n ' (no): ')"
+
+alias RM "rm -rf"
+alias LN "ln -s"
+
+
+#----------------------------------
+# Determine platform architecture.
+#----------------------------------
+
+set UNAME=""
+if (-e /usr/bin/uname) then
+ set uname_cmd = /usr/bin/uname
+ set UNAME=`/usr/bin/uname | tr '[A-Z]' '[a-z]'`
+else if (-e /bin/uname) then
+ set uname_cmd = /bin/uname
+ set UNAME=`/bin/uname | tr '[A-Z]' '[a-z]'`
+else
+ WARNING "No 'uname' command found to determine architecture."
+ exit 1
+endif
+
+set WHOAMI=`whoami`
+if (-e /usr/bin/whoami) then
+ set WHOAMI=`/usr/bin/whoami`
+else if (-e /usr/ucb/whoami) then
+ set WHOAMI=`/usr/ucb/whoami`
+else
+ WARNING "No 'whoami' command found for this architecture."
+ exit 1
+endif
+
+
+
+
+switch ($UNAME)
+ case sunos:
+ set do_tapecaps = 1
+ if (`$uname_cmd -m | cut -c2-` != "86pc") then
+ set suniraf = 1
+ setenv OSVERSION `$uname_cmd -r | cut -c1`
+ if ($OSVERSION == 5) then # Sparc Solaris
+ set mach = "ssun"
+ set hmach = "ssol"
+ set TAPES = "/dev/*st[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/usr/ucb/ls"
+ else # Sparc SunOS 4.x
+ set mach = "sparc"
+ set hmach = "sparc"
+ set TAPES = "/dev/*st[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ endif
+ else
+ set pciraf = 1
+ set mach = "sunos" # Intel Solaris
+ set hmach = "sunos"
+ set TAPES = "/dev/*st[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LSDF = "-lLts"
+ endif
+ breaksw
+ case linux:
+ set pciraf = 1
+ set do_tapecaps = 1
+ if ($?IRAFARCH == 1) then
+ # Let IRAFARCH override the default for the machine.
+ set mach = "$IRAFARCH"
+ set hmach = "$IRAFARCH"
+ else if (`$uname_cmd -m` == "x86_64") then # Linux x86_64
+ set mach = "linux64"
+ set hmach = "linux64"
+ else if (`$uname_cmd -m` == "ppc") then # LinuxPPC
+ if (-f /etc/redhat-release) then
+ set mach = "linuxppc"
+ set hmach = "linuxppc"
+ endif
+ else
+ set mach = "linux"
+ set hmach = "linux"
+ endif
+ set TAPES = "/dev/*st[0-7]"
+ set shlib = "no"
+ set LIBFILES = ""
+ breaksw
+ case freebsd: # FreeBSD 4.0
+ set do_tapecaps = 1
+ setenv OSVERSION `$uname_cmd -r | cut -c1`
+ if ($OSVERSION == 5) then # Sparc Solaris
+ set has_pipes = 0
+ endif
+ set mach = "freebsd"
+ set hmach = "freebsd"
+ set TAPES = "/dev/*st[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set pciraf = 1
+ breaksw
+ case darwin: # Mac OS X
+ case macosx:
+ case macintel:
+ case ipad:
+ # Mac OS X doesn't appear to have tape support
+ # at this point.
+ set do_tapecaps = 0
+ set do_tapes = 0
+ set has_pipes = 0
+ if ($?IRAFARCH == 1) then
+ # Let IRAFARCH override the default for the machine.
+ set mach = "$IRAFARCH"
+ set hmach = "$IRAFARCH"
+ else if (`$uname_cmd -m` == "x86_64") then # 64-bit OSX
+ set mach = "macintel"
+ set hmach = "macintel"
+ else if (`$uname_cmd -m |cut -c1-4` == "iPad") then # iPad/iPod OSX
+ set mach = "ipad"
+ set hmach = "ipad"
+ else # 32-bit OSX
+ set mach = "macosx"
+ set hmach = "macosx"
+ endif
+ set TAPES = "/dev/*st[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set pciraf = 1
+ breaksw
+ case hp-ux: # HP/UX 10.20
+ set mach = "hp700"
+ set hmach = "hp700"
+ set TAPES = "/dev/*st[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LSDF = "-lLts"
+
+ # reset for HP/UX
+ alias PUT 'mv -f \!*; chown $user \!$ '
+ breaksw
+ case irix: # IRIX 6.5
+ case irix64:
+ set mach = "irix"
+ set hmach = "irix"
+ set TAPES = "/dev/*st[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LSDF = "-lLts"
+ breaksw
+ case aix: # AIX V4
+ set mach = "rs6000"
+ set hmach = "rs6000"
+ set TAPES = "/dev/*st[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LSDF = "-lLts"
+ breaksw
+ case osf1: # Alpha OSF/1
+ set mach = "alpha"
+ set hmach = "alpha"
+ set TAPES = "/dev/*st[0-7]*"
+ set shlib = "yes"
+ set LIBFILES = "libiraf.so"
+ breaksw
+ case ultrix: # DEC Ultrix
+ set mach = "ultrix"
+ set hmach = "ultrix"
+ set TAPES = "/dev/*st[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ breaksw
+
+ default:
+ # We don't want to be limited by the CYGWIN version numbering so
+ # look for a truncated match here before punting.
+ set os_mach = `echo $UNAME | cut -c1-6`
+ if ("$os_mach" == "cygwin") then
+ set mach = "cygwin"
+ set hmach = "cygwin"
+ set shlib = "no"
+ set LIBFILES = ""
+ set TAPES = "" # no tape support
+ set do_tapecaps = 0
+ set do_tapes = 0
+ set has_pipes = 0
+ breaksw
+
+ else
+ ERRMSG "Unable to determine platform architecture."
+ exit 1
+ endif
+endsw
+
+##############################################################################
+# END OF MACHDEP DEFINITIONS.
+##############################################################################
+
+
+#=============================================================================
+# Declarations and initializations.
+#=============================================================================
+
+set W = '\([ "]\)' # match a blank, tab, or quote
+set TEMP = "/tmp/iraf_install.$$"
+set exec = yes
+set user = iraf
+set port = 0
+
+set imdir = "" # Initialize paths
+set lbin = ""
+set llib = ""
+set cache = ""
+set o_iraf = ""
+set o_imdir = ""
+set o_cache = ""
+
+
+
+#=============================================================================
+# Initialize the path variables.
+#=============================================================================
+
+set valid_iraf = 1
+if ($?iraf == 1) then
+ if (! (-d $iraf) || ! (-r $iraf) || \
+ ("`$LS -lLd $iraf |& grep '.rw[xs]r.[xs]r.[xt]'`" == "") || \
+ ("`$LS -lLd $iraf/.. |& grep '.rw[xs]r.[xs]r.[xt]'`" == "")) then
+ set valid_iraf = 0
+ endif
+ if ($valid_iraf == 0) then
+ NEWLINE
+ BOLD_ON
+ echo -n ' ERROR: invalid $iraf value '
+ echo "($iraf)"
+ BOLD_OFF
+ NEWLINE
+ MSG ' The iraf directory tree set by your environment variable, $iraf'
+ MSG " is not generally readable. This will prevent most users from"
+ MSG " being able to read iraf files, especially the binaries! "
+ NEWLINE
+ MSG " Please reset the permissions on the tree and try again..."
+ NEWLINE
+ exit 1
+ endif
+ if (! -d $iraf) then
+ NEWLINE
+ WARNING "Env definition of iraf root is incorrect, resetting."
+ NEWLINE
+ setenv iraf ""
+ endif
+
+else
+ setenv iraf ""
+endif
+
+
+#=============================================================================
+# Process any command line arguments.
+#=============================================================================
+while ("$1" != "")
+ switch ("$1")
+ case -n: # no execute
+ alias PUT "diff \!$ \!^; rm -f $TEMP"
+ set exec = no
+ breaksw
+ case -noedit: # no-edit installations
+ set no_edit = 1
+ breaksw
+ case -port: # do a "port" install
+ set port = 1
+ breaksw
+ case -hl: # disable highlighting
+ set hilite = 0
+ alias BOLD_ON "(if ($hilite) tput bold)"
+ alias BOLD_OFF "(if ($hilite) tput sgr0)"
+ alias SO_ON "(if ($hilite) tput smso)"
+ alias SO_OFF "(if ($hilite) tput rmso)"
+ breaksw
+ case +hl: # enable highlighting
+ set hilite = 1
+ alias BOLD_ON "(if ($hilite) tput bold)"
+ alias BOLD_OFF "(if ($hilite) tput sgr0)"
+ alias SO_ON "(if ($hilite) tput smso)"
+ alias SO_OFF "(if ($hilite) tput rmso)"
+ breaksw
+ case -f: # create fifo pipes
+ set do_pipes = 1
+ breaksw
+ case -h: # print help summary
+ goto Usage
+ case -help: # print help summary
+ goto Usage
+ case --help: # print help summary
+ goto Usage
+ case -b: # set local bin directory
+ if ("$2" != "") then
+ shift
+ else
+ ERRMSG "missing argument to '-b <localbindir>' switch"
+ exit 1
+ endif
+ set lbin = "$1"
+ breaksw
+ case -l: # set local lib directory
+ if ("$shlib" == "yes") then
+ if ("$2" != "") then
+ shift
+ else
+ ERRMSG "missing argument to '-l <locallibdir>' switch"
+ exit 1
+ endif
+ set llib = "$1"
+ else
+ set llib = ""
+ shift
+ endif
+ breaksw
+ case -c: # set cache directory
+ if ("$2" != "") then
+ shift
+ else
+ ERRMSG "missing argument to '-c <cache>' switch"
+ exit 1
+ endif
+ set cache = "$1"
+ breaksw
+ case -i: # set imdir directory
+ if ("$2" != "") then
+ shift
+ else
+ ERRMSG "missing argument to '-i <imdir>' switch"
+ exit 1
+ endif
+ set imdir = "$1"
+ breaksw
+ case -m: # set machine type
+ if ("$2" != "") then
+ shift
+ else
+ ERRMSG "missing argument to '-m <mach>' switch"
+ exit 1
+ endif
+ set mach = "$1"
+ if ("$1" == "ssun") then
+ set hmach = "ssol"
+ else
+ set hmach = "$1"
+ endif
+ setenv IRAFARCH $mach
+ breaksw
+ case -r: # set root directory
+ if ("$2" != "") then
+ shift
+ else
+ ERRMSG "missing argument to '-r <irafdir>' switch"
+ exit 1
+ endif
+ setenv iraf "$1"
+ breaksw
+ case -C: # set old cache directory
+ if ("$2" != "") then
+ shift
+ else
+ ERRMSG "missing argument to '-C <o_cache>' switch"
+ exit 1
+ endif
+ set o_cache = "$1"
+ breaksw
+ case -I: # set old imdir directory
+ if ("$2" != "") then
+ shift
+ else
+ ERRMSG "missing argument to '-I <o_imdir>' switch"
+ exit 1
+ endif
+ set o_imdir = "$1"
+ breaksw
+ case -R: # set old root directory
+ if ("$2" != "") then
+ shift
+ else
+ ERRMSG "missing argument to '-R <o_iraf>' switch"
+ exit 1
+ endif
+ set o_iraf = "$1"
+ breaksw
+ case -u: # set user name for iraf, e.g, 'iraf'
+ if ("$2" != "") then
+ shift
+ else
+ ERRMSG "missing argument to '-u <irafowner>' switch"
+ exit 1
+ endif
+ set user = "$1"
+ breaksw
+ default:
+ ERRMSG "install: unknown argument $1"
+ goto Usage
+ breaksw
+ endsw
+
+ if ("$2" == "") then
+ break
+ else
+ shift
+ endif
+end
+
+
+
+#=============================================================================
+# See whether we're gonna work ...
+#=============================================================================
+if ($exec == yes && $WHOAMI != "root" && $mach != "cygwin") then
+ clear
+ NEWLINE
+ BOLD_ON
+ echo " IRAF "$VERSION" System Installation"
+ echo " ================================"
+ BOLD_OFF
+ NEWLINE ; NEWLINE
+ BOLD_ON
+ echo "======================================================================"
+ echo -n "WARNING"
+ BOLD_OFF
+ echo ": This script must be run as root for changes to take effect."
+ echo " If you decide to proceed, the 'no-op' flag will be enabled"
+ echo " by default. No changes will be made to the system files,"
+ echo " however you will be able to see what the script does."
+ BOLD_ON
+ echo "======================================================================"
+ BOLD_OFF
+ NEWLINE
+no_op_proc_:
+ PROMPT "Proceed with a no-op installation anyway? "
+ setenv ans "$<"
+ if ("$ans" == "n" || "$ans" == "N" || "$ans" == "no") then
+ exit 0
+ endif
+ if ("$ans" != "" && "$ans" != "y" && "$ans" != "Y" && "$ans" != "yes") then
+ echo "Huh?"
+ goto no_op_proc_
+ endif
+ alias PUT "diff \!$ \!^; rm -f $TEMP"
+ set exec = no
+endif
+
+
+#=============================================================================
+# Initialize the screen output.
+#=============================================================================
+clear
+NEWLINE
+BOLD_ON
+echo " IRAF "$VERSION" System Installation"
+echo " ================================"
+BOLD_OFF
+NEWLINE
+
+echo " Welcome to the IRAF installation script. This script will first"
+echo " prompt you for several needed path names. The system will be verified"
+echo " for proper structure before the actual install begins, all error must"
+echo " must be corrected before you will be allowed to continue. Recommend-"
+echo " ations for fixing problems will be made but no corrective action will"
+echo " be taken directly. Once properly installed, you will be allowed to"
+echo " do some minimal configuration."
+
+# Print a quick usage summary.
+NEWLINE
+echo -n " For each prompt: hit "
+BOLD_ON ; echo -n "<CR>"; BOLD_OFF;
+echo -n " to accept the default value, "
+BOLD_ON ; echo -n "'q'" ; BOLD_OFF
+echo ' to quit,'
+
+echo -n " or "
+BOLD_ON ; echo -n "'help'"; BOLD_OFF
+echo -n " or ";
+BOLD_ON ; echo -n "'?'"; BOLD_OFF
+echo -n " to print an explanation of the prompt."
+NEWLINE
+NEWLINE
+
+
+#=============================================================================
+# Prompt the user for needed paths.
+#=============================================================================
+
+NEWLINE
+BOLD_ON
+echo "========================================================================"
+echo "===================== Query for System Settings ======================"
+echo "========================================================================"
+BOLD_OFF
+NEWLINE
+
+
+#=============================================================================
+# Set $iraf, the new root directory for iraf. The system must already have
+# been read in at this directory (e.g., /iraf/iraf), but we assume that no
+# files have yet been modified.
+#=============================================================================
+
+if ("$iraf" == "") then
+
+ if (-e "IRAF.NET" && -e "IS.PORT.GEN") then
+ # Use the current directory.
+ set d_iraf = `pwd`
+
+ else
+ # Make a guess at what the new root directory is.
+ set d_iraf = ""
+ if (-d /iraf/iraf) then
+ set d_iraf = /iraf/iraf
+ else if (-d /iraf) then
+ set d_iraf = /iraf
+ else if (-d /usr/local/iraf) then
+ set d_iraf = /usr/local/iraf
+ else if (-d /usr/iraf) then
+ set d_iraf = /usr/iraf
+ else
+ # Search for an iraf directory.
+ set IDIRS = "/u* /local /home /opt /iraf* /"
+ foreach i ($IDIRS)
+ if (-d $i/iraf) then
+ set d_iraf = "$i/iraf"
+ break
+ endif
+ end
+ endif
+
+ if ("$d_iraf" == "") then
+ set d_iraf = /iraf/iraf
+ endif
+ endif
+else
+ set d_iraf = $iraf
+endif
+
+# If the given directory doesn't exist, compute the root directory relative
+# to $iraf/unix/hlib (our current directory, presumably).
+
+if (! -d $d_iraf) then
+ set d_iraf = `(cd ../..;pwd)`
+endif
+
+iraf_prompt:
+ set d_iraf = `echo $d_iraf | sed -e 's+/\(["]*\)$+\1+'`
+
+ BOLD_ON ; echo -n "New iraf root directory " ; BOLD_OFF
+ echo -n "($d_iraf): "
+ setenv iraf "$<"
+ if ("$iraf" == "") then
+ setenv iraf "$d_iraf"
+ else if ("$iraf" == "quit" || "$iraf" == "q") then
+ exit 0
+ else if ("$iraf" == "help" || "$iraf" == "h" || "$iraf" == "?") then
+ NEWLINE
+ MSG "The iraf root directory is the place where the AS distribution"
+ MSG "file was unpacked; it contains subdirectories such as 'dev',"
+ MSG "'local', 'noao', 'pkg', and the file IS.PORT.GEN."
+
+ set di = $d_iraf
+ if (((-d $di/dev) && (-d $di/pkg) && (-d $di/noao))) then
+ MSG ""
+ MSG "The default path '$d_iraf' appears to be correct ..."
+ else
+ MSG ""
+ MSG "The default path '$d_iraf' appears to be incorrect ..."
+ endif
+ NEWLINE
+
+ setenv iraf $d_iraf
+ goto iraf_prompt
+ endif
+
+
+# See whether this looks like a reasonable $iraf directory
+if (! (-e $iraf)) then
+ NEWLINE
+ MSG "The '$iraf' directory doesn't exist."
+ MSG "Please try again..."
+ NEWLINE
+ goto iraf_prompt
+
+else if (! (-r $iraf) || \
+ ("`$LS -lLd $iraf |& grep '.rw[xs]r.[xs]r.[xt]'`" == "") || \
+ ("`$LS -lLd $iraf/.. |& grep '.rw[xs]r.[xs]r.[xt]'`" == "")) then
+ NEWLINE
+ MSG "The iraf directory tree is not generally readable."
+ MSG "This will prevent most users from being able to read iraf"
+ MSG "files, especially the binaries\\! "
+ MSG "Please reset the permissions and try again..."
+ NEWLINE
+ exit 1
+
+else if (! ((-d $iraf/dev) && (-d $iraf/pkg) && (-d $iraf/noao))) then
+ NEWLINE
+ MSG "The definition of '$iraf' looks incorrect."
+ MSG ""
+ MSG "The iraf root directory is the place where the AS distribution"
+ MSG "file was unpacked; it contains subdirectories such as 'dev',"
+ MSG "'local', 'noao', 'pkg', and the file IS.PORT.GEN."
+ MSG ""
+ if (((-d $iraf/iraf/dev) && (-d $iraf/iraf/pkg) && (-d $iraf/iraf/noao))) then
+ MSG "The path '$iraf/iraf' appears to be correct ..."
+ set iraf = $iraf/iraf
+ else if (((-d $iraf/../dev) && (-d $iraf/../pkg) && (-d $iraf/../noao))) then
+ if (-d $iraf/..) then
+ pushd $iraf/.. >& /dev/null
+ setenv ip `echo $cwd`
+ MSG "The path '$ip' appears to be correct ..."
+ set iraf = $ip
+ popd >& /dev/null
+ endif
+ endif
+ MSG ""
+ MSG "Please verify your path and try again ..."
+ NEWLINE
+ goto iraf_prompt
+endif
+
+
+#=============================================================================
+# Get the values of o_iraf and o_imdir from the current mkiraf.csh file, if
+# not already otherwise defined.
+#=============================================================================
+
+cd $iraf/unix/hlib
+set WS = '[ ]'
+if ("$o_iraf" == "") then
+ set o_iraf =\
+ `grep "^set$WS*iraf" mkiraf.csh | sed -e "s+^.*=$WS*++" | sed -e 's+"++g'`
+endif
+if ("$o_imdir" == "") then
+ set o_imdir =\
+ `grep "^set$WS*imdir" mkiraf.csh | sed -e "s+^.*=$WS*++" | sed -e 's+"++g'`
+endif
+if ("$o_cache" == "") then
+ set o_cache =\
+ `grep "^set$WS*cachedir" mkiraf.csh | sed -e "s+^.*=$WS*++" | sed -e 's+"++g'`
+endif
+
+# Strip any trailing / in the pathname to be matched, so that the trailing /,
+# if present, will be LEFT in the occurrence of the path in the file.
+
+set o_iraf = `echo $o_iraf | sed -e 's+/\(["]*\)$+\1+'`
+set o_imdir = `echo $o_imdir | sed -e 's+/\(["]*\)$+\1+'`
+set o_cache = `echo $o_cache | sed -e 's+/\(["]*\)$+\1+'`
+
+
+#=============================================================================
+# Get the iraf parent directory to be used below.
+#=============================================================================
+pushd $iraf/.. >& /dev/null ; set iraf_p = `echo $cwd` ; popd >& /dev/null
+
+
+#=============================================================================
+# Set $imdir, the default user image storage root directory. Each user imdir
+# will be a subdirectory of this directory by default, when MKIRAF is run.
+# Since bulk image data can consume hundreds of megabytes of disk space, IRAF
+# likes to keep such data on a public scratch device, which is probably not
+# backed up, which has a short file expiration interval, and possibly which
+# has been configured (newfs/mkfs) with a large block size for fast seq. i/o.
+#=============================================================================
+
+if ("$imdir" == "") then
+
+ if (-d $o_imdir) then
+ set d_imdir = $o_imdir
+ else if (-d /iraf) then
+ set d_imdir = /iraf/imdirs
+ else if (-d /home/iraf) then
+ set d_imdir = /home/iraf/imdirs
+ else if (-d $iraf_p) then
+ set d_imdir = $iraf_p/imdirs
+ else if (-d /usr/local/iraf) then
+ set d_imdir = /usr/local/iraf/imdirs
+ else
+ set d_imdir = /tmp
+ endif
+
+imdir_prompt:
+ BOLD_ON ; echo -n "Default root image storage directory " ; BOLD_OFF
+ echo -n "($d_imdir): "
+ set imdir = "$<"
+ if ("$imdir" == "") then
+ set imdir = "$d_imdir"
+ else if ("$imdir" == "quit" || "$imdir" == "q") then
+ exit 0
+ else if ("$imdir" == "help" || "$imdir" == "h" || "$imdir" == "?") then
+ NEWLINE
+ MSG "The root imdir directory is the default image storage dir"
+ MSG 'for OIF images (i.e. the ".imh" format) used by all users on'
+ MSG "this system. Individual user dirs will be created as needed."
+ MSG "It should be some large data disk on the machine which has a"
+ MSG "regular backup, scratch or tmp disks should be avoided or data"
+ MSG "may be lost."
+ MSG ""
+ MSG 'The "HDR$" syntax should not be used at this stage, please'
+ MSG 'edit the hlib$mkiraf.csh script after installation if you wish'
+ MSG "to make this the default."
+ NEWLINE
+ setenv imdir $d_imdir
+ goto imdir_prompt
+ endif
+
+ # Cannot have iraf and imdir the same.
+ if ("$imdir" == "$iraf") then
+ NEWLINE
+ MSG "The definition of imdir cannot be the same as the iraf"
+ MSG "root, please choose a different directory. Ideally this"
+ MSG "should be some large data area on your system or a user"
+ MSG "data area such as /home, /users, /u1, etc."
+ NEWLINE
+ NEWLINE
+ goto imdir_prompt
+ endif
+endif
+
+
+#=============================================================================
+# Set $cache, the default user file cache root directory.
+#=============================================================================
+
+if ("$cache" == "") then
+
+ if (-d /iraf) then
+ set d_cache = /iraf/cache
+ else if (-d /home/iraf) then
+ set d_cache = /home/iraf/cache
+ else if (-d $iraf_p) then
+ set d_cache = $iraf_p/cache
+ else if (-d /usr/local/iraf) then
+ set d_cache = /usr/local/iraf/cache
+ else
+ set d_cache = /tmp
+ endif
+
+cache_prompt:
+ BOLD_ON ; echo -n "Default root cache directory " ; BOLD_OFF
+ echo -n "($d_cache): "
+ set cache = "$<"
+ if ("$cache" == "") then
+ set cache = "$d_cache"
+ else if ("$cache" == "quit" || "$cache" == "q") then
+ exit 0
+ else if ("$cache" == "help" || "$cache" == "h" || "$cache" == "?") then
+ NEWLINE
+ MSG "The root cache directory is the default storage directory for"
+ MSG "URL-referenced files. Individual user dirs will be created as"
+ MSG "needed. It should be some large data disk on the machine "
+ MSG "which has a regular backup, scratch or tmp disks should be"
+ MSG "avoided or data may be lost."
+ MSG ""
+ NEWLINE
+ setenv cache $d_cache
+ goto cache_prompt
+ endif
+
+ # Cannot have iraf and cache the same.
+ if ("$cache" == "$iraf") then
+ NEWLINE
+ MSG "The definition of cache cannot be the same as the iraf"
+ MSG "root, please choose a different directory. Ideally this"
+ MSG "should be some large data area on your system or a user"
+ MSG "data area such as /home, /users, /u1, etc."
+ NEWLINE
+ NEWLINE
+ goto cache_prompt
+ endif
+endif
+
+
+#=============================================================================
+# Get UNIX directory where HSI commands (links) are to be installed, if not
+# set on command line. IRAF will only install a very few new commands in this
+# directory. Ideally it should be a directory on the standard user $path,
+# so that users do not have to customize their . files just to run IRAF.
+#=============================================================================
+
+if ("$lbin" == "") then
+ # Look around and come up with a likely candidate directory.
+ if (-d /usr/local/bin) then
+ set d_lbin = /usr/local/bin
+ else if (-d /opt/local/bin) then
+ set d_lbin = /opt/local/bin
+ else if (-d /local/bin) then
+ set d_lbin = /local/bin
+ else
+ set d_lbin = /usr/bin
+ endif
+
+lbin_prompt:
+ BOLD_ON ; echo -n "Local unix commands directory " ; BOLD_OFF
+ echo -n "($d_lbin): "
+ set lbin = "$<"
+ if ("$lbin" == "") then
+ set lbin = "$d_lbin"
+ else if ("$lbin" == "quit" || "$lbin" == "q") then
+ exit 0
+ else if ("$lbin" == "help" || "$lbin" == "h" || "$lbin" == "?") then
+ NEWLINE
+ MSG "The local bin directory is the system directory into which the"
+ MSG "iraf commands (e.g. cl, mkiraf, mkpkg, etc) will be installed"
+ MSG "as symlinks to files in the iraf tree. This should be a common"
+ MSG "dir such as /usr/local/bin which will likely be found in every"
+ MSG "user's path."
+ NEWLINE
+ setenv lbin $d_lbin
+ goto lbin_prompt
+ endif
+
+ # Create the local bin directory if it doesn't exist?
+ if (! (-e $lbin)) then
+ PROMPT " Sorry, but $lbin does not exist, create it? "
+ set ans = "$<"
+ if ("$ans" == "" || "$ans" == "y" || "$ans" == "yes") then
+ echo " Creating directory $lbin..."
+ if ($exec == yes) then
+ mkdir $lbin
+ endif
+ if (! (-e $lbin) && $exec == yes) then
+ ERRMSG "Cannot create $lbin, please retry..."
+ setenv lbin $d_lbin
+ goto lbin_prompt
+ endif
+ else
+ goto lbin_prompt
+ endif
+ NEWLINE
+ endif
+endif
+
+
+
+#=============================================================================
+# Get UNIX directory where IRAF shared library should be installed.
+#=============================================================================
+
+if ("$shlib" == "yes") then
+ if ("$llib" == "") then
+ # Look around and come up with a likely candidate directory.
+ if (-d /usr/local/lib) then
+ set d_llib = /usr/local/lib
+ else if (-d /local/lib) then
+ set d_llib = /local/lib
+ else if (-d /usr/lib) then
+ set d_llib = /usr/lib
+ else if (-d /var/shlib) then
+ set d_llib = /var/shlib
+ else
+ set d_llib = /usr/shlib
+ endif
+
+llib_prompt:
+ BOLD_ON ; echo -n "Directory for local shared libraries " ; BOLD_OFF
+ echo -n "($d_llib): "
+ set llib = "$<"
+ if ("$llib" == "") then
+ set llib = "$d_llib"
+ else if ("$llib" == "quit" || "$llib" == "q") then
+ exit 0
+ else if ("$llib" == "help" || "$llib" == "h" || "llib" == "?") then
+ NEWLINE
+ MSG "The local lib directory is the system directory into which"
+ MSG "the IRAF shared library will be installed as a symlink to"
+ MSG "the library in the iraf tree. The default prompt dir is"
+ MSG "one which will be used on this system w/out special user"
+ MSG "setup, choose another one with care."
+ NEWLINE
+ setenv llib $d_llib
+ goto llib_prompt
+ endif
+
+ # Create the local lib directory if it doesn't exist?
+ if (! (-e $llib)) then
+ PROMPT " Sorry, but $llib does not exist, create it? "
+ set ans = "$<"
+ if ("$ans" == "" || "$ans" == "y" || "$ans" == "yes") then
+ echo " Creating directory $llib..."
+ if ($exec == yes) then
+ mkdir $llib
+ endif
+ if (! (-e $llib) && $exec == yes) then
+ ERRMSG "Cannot create $lbin, please retry..."
+ setenv llib $d_llib
+ goto llib_prompt
+ endif
+ else
+ goto llib_prompt
+ endif
+ NEWLINE
+ endif
+ endif
+endif
+
+
+
+##############################################################################
+#
+# Step 1: VERIFICATION
+#
+# Run some simple checks to be sure the system was unpacked correctly
+# and the settings used are correct. Verification tests include:
+#
+# o Verify the machine type and document settings.
+# o Check iraf root directory looks correct.
+# o Check iraf root and imdir aren't the same
+# o Check iraf user exists in passwd file/NIS.
+# o Check iraf user login path in passwd file is iraf$local.
+# o Check iraf tree for proper structure.
+# o Check binary dirs are both populated correctly.
+# o Check that the local bin directory exists.
+# o Check that the local lib directory exists.
+#
+# An error at this stage will cause the script to exit so we can reset
+# and try again.
+#
+##############################################################################
+
+set err_stat = 0 # initialize error stats
+set err_count = 0
+set warn_stat = 0 # initialize warning stats
+set warn_count = 0
+
+NEWLINE
+BOLD_ON
+echo "========================================================================"
+echo "===================== Verifying System Settings ======================"
+echo "========================================================================"
+BOLD_OFF
+
+
+# Verify the machine type and document the old root pathnames.
+NEWLINE
+BOLD_ON; echo -n "Hostname = "; \
+ BOLD_OFF; echo `hostname` | awk '{printf("%-20.20s ", $1)}'
+BOLD_ON; echo -n "OS version = "; \
+ BOLD_OFF; echo `$uname_cmd`" "`$uname_cmd -r`
+BOLD_ON; echo -n "Architecture = "; \
+ BOLD_OFF; echo $mach | awk '{printf("%-20s ", $1)}'
+BOLD_ON; echo -n "HSI arch = "; \
+ BOLD_OFF; echo $hmach | awk '{printf("%-20s\n", $1)}'
+BOLD_ON; echo -n "New iraf root = "; \
+ BOLD_OFF; echo $iraf | awk '{printf("%-20s ", $1)}'
+BOLD_ON; echo -n "Old iraf root = "; \
+ BOLD_OFF; echo $o_iraf | awk '{printf("%-20s\n", $1)}'
+BOLD_ON; echo -n "New imdir = "; \
+ BOLD_OFF; echo $imdir | awk '{printf("%-20s ", $1)}'
+BOLD_ON; echo -n "Old imdir = "; \
+ BOLD_OFF; echo $o_imdir | awk '{printf("%-20s\n", $1)}'
+BOLD_ON; echo -n "New cache = "; \
+ BOLD_OFF; echo $cache | awk '{printf("%-20s ", $1)}'
+BOLD_ON; echo -n "Old cache = "; \
+ BOLD_OFF; echo $o_cache | awk '{printf("%-20s\n", $1)}'
+BOLD_ON; echo -n "Local bin dir = "; \
+ BOLD_OFF; echo $lbin | awk '{printf("%-20s\n", $1)}'
+if ("$shlib" == "yes") then
+ BOLD_ON; echo -n "Local lib dir = "; \
+ BOLD_OFF; echo $llib | awk '{printf("%-20s\n", $1)}'
+endif
+NEWLINE ; NEWLINE
+
+
+# Check iraf root directory looks correct.
+echo -n "Checking definition of iraf root directory ... "
+if (! ((-d $iraf/dev) && (-d $iraf/pkg) && (-d $iraf/noao))) then
+ DO_FAIL ; set err_stat = 1 ; set iraf_root_ok = 0
+ NEWLINE
+ MSG "The definition of '$iraf' looks incorrect. The iraf root"
+ MSG "directory is the place where the AS distribution was unpacked,"
+ MSG "it contains subdirectories such as 'dev', 'local', 'noao', and"
+ MSG "'pkg' and the binary directory links."
+ MSG ""
+ if (((-d $iraf/iraf/dev) && (-d $iraf/iraf/pkg) && (-d $iraf/iraf/noao))) then
+ MSG "The path '$iraf/iraf' appears to be correct ..."
+ set iraf = $iraf/iraf
+ else if (((-d $iraf/../dev) && (-d $iraf/../pkg) && (-d $iraf/../noao))) then
+ if (-d $iraf/..) then
+ pushd $iraf/.. >& /dev/null
+ setenv ip `echo $cwd`
+ MSG "The path '$ip' appears to be correct ..."
+ set iraf = $ip
+ popd >& /dev/null
+ endif
+ endif
+ MSG "Please verify your path and try again ..."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+else
+ DO_OK ; set iraf_root_ok = 1
+endif
+
+
+# Cannot have iraf and imdir the same.
+echo -n "Checking iraf root and imdir directory ... "
+if ($iraf == $imdir) then
+ DO_FAIL ; set err_stat = 1
+ NEWLINE
+ MSG "The 'imdir' pixel storage directory cannot be the same as the"
+ MSG "iraf root directory. Please choose another directory."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+else
+ DO_OK
+endif
+
+# Cannot have iraf and cache the same.
+echo -n "Checking iraf root and cache directory ... "
+if ($iraf == $cache) then
+ DO_FAIL ; set err_stat = 1
+ NEWLINE
+ MSG "The 'cache' storage directory cannot be the same as the"
+ MSG "iraf root directory. Please choose another directory."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+else
+ DO_OK
+endif
+
+
+
+if ($no_edit == 0) then
+
+# Check for write permission on iraf directory...
+echo -n "Checking iraf directory write permissions ... "
+
+ set TEST = "_inst.check"
+ if ($exec == "yes") then
+ set back = $cwd/
+ chdir $iraf_p/iraf
+ touch $TEST >& /dev/null
+ if (-e $TEST) then
+ rm $TEST
+ DO_OK
+ else
+ DO_WARN ; set warn_stat = 1
+ NEWLINE
+ MSG "You do not have write permission on the iraf directory."
+ MSG "This will prevent the install script from modifying files"
+ MSG "in the tree needed to complete the setup. If this is an"
+ MSG "NFS disk there can be several explanations aside from just"
+ MSG "the usual permissions problems:"
+ MSG ""
+ MSG " 1) The NFS disk is mounted read-only"
+ MSG " 2) The NFS disk is mounted with the 'nosuid' option"
+ MSG " 3) The NFS disk is exported with the 'all_squash' option"
+ MSG " which remaps your userid to 'anonymous'"
+ MSG ""
+ MSG "The script can continue by installing the command links on"
+ MSG "the local machine, but will not edit the iraf path into the"
+ MSG "files. If you choose not to do this the verification stage"
+ MSG "will be completed but the installation will then abort."
+ MSG ""
+ MSG "In either case, you should verify the server iraf path is"
+ MSG "correct for this machine and rerun the install script or"
+ MSG "make the appropriate links as needed."
+ MSG ""
+ MSG ""
+
+ echo -n ' '
+ BOLD_ON
+ echo -n '*** Would you like to continue with a no-edit install? '
+ BOLD_OFF
+ echo -n "(yes) "
+
+ set ans = "$<"
+ if ("$ans" == "" || "$ans" == "y" || "$ans" == "yes") then
+ set no_edit = 1
+ else
+ set err_stat = 1
+ endif
+ NEWLINE
+ set warn_count = `expr $warn_count + 1`
+ endif
+ chdir $back
+ else
+ DO_OK
+ endif
+endif
+
+
+
+# Check iraf user.
+
+goto _no_user_check
+
+# Check for iraf user disabled for all platforms with v2.15
+if ($mach == "macosx" || $mach == "macintel" || $mach == "cygwin") then
+ goto _no_user_check
+endif
+
+echo -n "Checking for iraf user account ... "
+set pass = ""
+if (($pciraf && ($mach == "macosx" || $mach == "macintel" || $mach == "cygwin")) || (!(-r /etc/passwd)) ) then
+ # Special-case user info check for OS X and systems where the /etc/passwd
+ # file may not contain the user info or isn't readable.
+
+ set id_found = 0
+ foreach d ($path)
+ if (-e $d/id) then
+ set id_found = 1
+ break
+ endif
+ end
+ if ($id_found == 1) then
+ if (`id iraf |& grep -i 'no such user'` != "") then
+ DO_WARN ; set warn_stat = 1
+ NEWLINE
+ MSG "No 'iraf' user was found on the system. The iraf user should"
+ MSG "be created before installing the system to ensure all files"
+ MSG "are owned by the iraf user, and the have the proper environment"
+ MSG "defined for installation and maintanence."
+ NEWLINE
+
+ else
+ DO_OK
+
+ # Check iraf user login path and shell
+ echo -n "Checking iraf user login directory ... "
+
+ set v = `finger iraf |& egrep '^Directory'`
+ set ihome = `echo $v[2] | sed -e 's+/\(["]*\)$+\1+'`
+ set shel = `echo $v[4] | sed -e 's+/\(["]*\)$+\1+' | grep csh`
+ if ("$ihome" != "$iraf/local" && $shel == "") then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The iraf user login info appears to be incorrect. For the"
+ MSG "given iraf root this path should be '$iraf/local',"
+ MSG "please run the 'chpass' command to change this. The iraf"
+ MSG "user account should also be defined to use a C-shell."
+ if ("$iraf_root_ok" == 0) then
+ MSG "(This error may be related to the incorrect definition of"
+ MSG "the iraf root directory seen above.)"
+ endif
+ NEWLINE
+ else
+ DO_OK
+ endif
+
+ else
+
+ endif
+ endif
+
+else
+ set pass1 = "`grep ^iraf: /etc/passwd`"
+ set pass2 = "`ypcat passwd |& grep ^iraf:`"
+
+ if ("$pass1" == "" && "$pass2" == "") then
+ DO_WARN ; set warn_stat = 1
+ NEWLINE
+ MSG "No 'iraf' user was found in the /etc/passwd file. The iraf"
+ MSG "user should be created before installing the system to ensure"
+ MSG "all files are owned by the iraf user, and the have the proper"
+ MSG "environment defined for installation and maintanence."
+ NEWLINE
+ else
+ DO_OK
+
+ # Check iraf user login path in passwd file is iraf$local.
+ echo -n " Checking iraf user login directory ... "
+ if ("$pass1" != "") then
+ set pass = `grep ^iraf: /etc/passwd |sed -e 's/[ \*]/_/g' |sed -e 's/:/ /g'`
+ else
+ set pass = `ypcat passwd | grep ^iraf: |sed -e 's/[ \*]/_/g' |sed -e 's/:/ /g'`
+ endif
+
+ set c = `echo $pass | wc -w`
+ set indx = `expr $c - 1`
+
+ set ihome = `echo $pass[$indx] | sed -e 's+/\(["]*\)$+\1+'`
+ if ("$ihome" != "$iraf/local") then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The iraf user login directory appears to be incorrect."
+ MSG "For the given iraf root this path should be '$iraf/local',"
+ MSG "please edit the /etc/passwd file to change this."
+ if ("$iraf_root_ok" == 0) then
+ MSG "(This error may be related to the incorrect definition of"
+ MSG "the iraf root directory seen above.)"
+ endif
+ NEWLINE
+ else
+ DO_OK
+ endif
+
+ echo -n " Checking iraf user account shell ... "
+ set shel = `echo $pass[$c] | sed -e 's+/\(["]*\)$+\1+' | grep csh`
+ if ($shel == "") then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The iraf user login directory appears to be incorrect."
+ MSG "The account should be configured to use a C-shell in order"
+ MSG "to take advantage of a preconfigured environment which will"
+ MSG "make maintainence easier. Please edit the passwd file or"
+ MSG "use the 'chsh' command (if available) to change this."
+ NEWLINE
+ else
+ DO_OK
+ endif
+ endif
+endif
+
+_no_user_check:
+
+
+# Skip the ownership check on some platforms.
+if ($V != "2.15" && $V != "2.16") then
+ if ($mach != "cygwin" && $mach != "macosx" && $mach != "macintel") then
+
+ # Check file ownership.
+ if ($mach == "hp700" || $mach == "rs6000") then
+ set downr = `$LS -lLd $iraf_p/iraf | awk '{print ($4)}'`
+ set fownr = `$LS -lLd $iraf_p/iraf/mkpkg | awk '{print ($4)}'`
+ else
+ set downr = `$LS -lLd $iraf_p/iraf | awk '{print ($3)}'`
+ set fownr = `$LS -lLd $iraf_p/iraf/mkpkg | awk '{print ($3)}'`
+ endif
+ set dperm = `$LS -lLd $iraf_p/iraf | awk '{print ($1)}'`
+ set fperm = `$LS -lLd $iraf_p/iraf/mkpkg | awk '{print ($1)}'`
+
+
+ echo -n "Checking file ownerships ... "
+ if ("$downr" == "iraf" && "$fownr" == "iraf") then
+ DO_OK
+ else if ("$downr" == "tody" && "$fownr" == "tody") then
+ # Special exemption for NOAO installations.
+ DO_OK
+ else
+ DO_WARN ; set warn_stat = 1
+ NEWLINE
+ MSG "(root dir owned by $downr, iraf files owned by $fownr)"
+ MSG "The iraf tree should be owned by the iraf user so it can"
+ MSG "be updated and maintained properly."
+ MSG ""
+ MSG 'To fix this, login as root, set the iraf environment, and'
+ MSG 'issue the commands:'
+ MSG ""
+ MSG " cd " `echo $iraf_p`
+ MSG ' chown -R iraf . # change dir owner'
+ MSG ' cd $hbin # go to HSI bin dir'
+ MSG ' chown 0 alloc.e # fix alloc.e ownership'
+ MSG ' chmod 4755 alloc.e # fix permissions'
+ NEWLINE
+ set warn_count = `expr $warn_count + 1`
+ endif
+
+ endif
+
+# Check file/directory permissions.
+echo -n "Checking file permissions ... "
+
+set err_seen = 0
+foreach dir ($iraf_p $iraf_p/iraf $iraf_p/iraf/unix $iraf_p/iraf/unix/hlib)
+ if ("`$LS -lLd $dir | grep '.rw[xs]r.[xs]r.[xt]'`" == "") then
+ set err_seen = 1
+ break
+ endif
+end
+
+if ("$err_seen" == 0) then
+ DO_OK
+else
+ DO_FAIL ; set err_stat = 1
+ NEWLINE
+ MSG "The permissions on the iraf directory tree appear to be too"
+ MSG "restrictive to allow group or world user to access the file"
+ MSG "This may prevent users other than $downr from starting the system"
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+endif
+
+endif
+
+
+# Check iraf tree for proper structure.
+set check_iraf_tree = 0 # for v214 and earlier
+
+set iraf_r = $iraf # iraf root directory
+set iraf_p = $iraf_r:h # iraf parent directory
+set iraf_b = $iraf_p/irafbin # irafbin directory
+set iraf_tree_ok = 1
+
+set iraf_ib = $iraf/bin.$mach # irafbin IB directory
+set iraf_nb = $iraf/noao/bin.$mach # irafbin NB directory
+
+
+if ($check_iraf_tree == 1) then
+
+set iraf_ib = $iraf_b/bin.$mach # irafbin IB directory
+set iraf_nb = $iraf_b/noao.bin.$mach # irafbin NB directory
+
+
+echo "Checking proper iraf tree structure in $iraf_p ..."
+
+echo -n " Checking for 'iraf' subdir ... "
+if (-d "$iraf_p/iraf") then
+ DO_OK
+else
+ DO_FAIL ; set err_stat = 1 ; set iraf_tree_ok = 0
+ set err_count = `expr $err_count + 1`
+endif
+
+echo -n " Checking for 'irafbin' subdir ... "
+if (-d "$iraf_p/irafbin") then
+ DO_OK
+else
+ set temp = $iraf_tree_ok
+ #echo -n "[ "; BOLD_ON; echo -n "Not Found" ; BOLD_OFF; echo " ]" ;
+ echo ""
+ set iraf_tree_ok = 0
+
+ # Look for a fallback to recover ...
+ echo -n " Checking for fallback tree structure ... "
+ set iraf_p = $iraf/../
+ set iraf_b = $iraf_p/irafbin # irafbin directory
+ set iraf_ib = $iraf_b/bin.$mach # irafbin IB directory
+ set iraf_nb = $iraf_b/noao.bin.$mach # irafbin NB directory
+ if (-d "$iraf_p/irafbin") then
+ echo -n " "; DO_OK ; set iraf_tree_ok = $temp
+ else
+ echo -n " "; DO_FAIL; set err_stat = 1 ; set iraf_tree_ok = 0
+ set err_count = `expr $err_count + 1`
+ endif
+endif
+
+
+echo "'irafbin/bin.$mach'" | \
+ awk '{ printf (" Checking for %s subdir ... \t", $1) }'
+if (-d "$iraf_p/irafbin/bin.$mach") then
+ echo -n " "; DO_OK
+else
+ echo -n " "; DO_FAIL; set err_stat = 1 ; set iraf_tree_ok = 0
+ set err_count = `expr $err_count + 1`
+endif
+
+echo "'irafbin/noao.bin.$mach'" | \
+ awk '{ printf (" Checking for %s subdir ...\t\t", $1) }'
+if (-d "$iraf_p/irafbin/noao.bin.$mach") then
+ DO_OK
+else
+ DO_FAIL ; set err_stat = 1 ; set iraf_tree_ok = 0
+ set err_count = `expr $err_count + 1`
+endif
+
+if ("$iraf_tree_ok" == 0) then
+ NEWLINE
+ MSG "An error was detected in the structure of the iraf tree."
+ MSG "Your directory tree should look something like:"
+ MSG ""
+ MSG " $iraf_p"
+ MSG " / \"
+ MSG " (AS) /iraf /irafbin"
+ MSG " / \"
+ MSG " (IB) bin.$mach noao.bin.$mach (NB)"
+ MSG ""
+ MSG "The AS, IB, and NB distribution files are shown where they"
+ MSG "should be unpacked. Please verify the structure and the"
+ MSG "system architecture."
+ NEWLINE
+endif
+
+endif # if (check_iraf_tree)
+
+
+
+
+# Check binary dirs are both populated correctly.
+echo -n "Checking Core system binary directory ... "
+if (! (-e "$iraf_ib/cl.e" && -e "$iraf_ib/x_system.e")) then
+ if ($port == 1) then
+ DO_WARN ; set warn_stat = 1
+ else
+ DO_FAIL ; set err_stat = 1
+ endif
+ NEWLINE
+ MSG "The core system binary directory, $iraf_ib, does"
+ MSG "not appear to contain the proper binaries."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+else
+ DO_OK
+endif
+
+echo -n "Checking NOAO package binary directory ... "
+if (! (-e "$iraf_nb/x_apphot.e" && -e "$iraf_nb/x_rv.e")) then
+ if ($port == 1) then
+ DO_WARN ; set warn_stat = 1
+ else
+ DO_FAIL ; set err_stat = 1
+ endif
+ if (-e "$iraf_ib/x_apphot.e" && -e "$iraf_ib/x_rv.e") then
+ NEWLINE
+ MSG "The NOAO package binary directory, $iraf_nb, is"
+ MSG "empty but the binaries appear to have been unpacked in the"
+ MSG "core system directory, $iraf_ib. These will need to be moved,"
+ MSG "please delete the binaries and start again, be sure to unpack"
+ MSG "the NB distribution files in the $iraf_nb directory,"
+ MSG "and the core system file in the $iraf_ib directory."
+ NEWLINE
+ else
+ NEWLINE
+ MSG "The NOAO package binary directory, $iraf_nb, does"
+ MSG "not appear to contain the proper files."
+ NEWLINE
+ endif
+ set err_count = `expr $err_count + 1`
+else
+ DO_OK
+endif
+
+
+# Check that the specified local bin directory exists.
+echo -n "Checking that local bin directory exists ... "
+if (-d "$lbin") then
+ DO_OK
+else
+ DO_FAIL ; set err_stat = 1
+ NEWLINE
+ MSG "The specified local bin directory does not exist. This"
+ MSG "directory should be a common local bin directory which "
+ MSG "is found in all user's paths, e.g. /usr/local/bin."
+ MSG "Please create the directory or else reset and try again."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+endif
+
+
+# Check that the specified local lib directory exists.
+if ("$shlib" == "yes") then
+ echo -n "Checking that local lib directory exists ... "
+ if (-d "$llib") then
+ DO_OK
+ else
+ DO_FAIL ; set err_stat = 1
+ NEWLINE
+ MSG "The specified local lib directory does not exist. This"
+ MSG "directory should be a common local lib directory which "
+ MSG "is found in all user's paths, e.g. /usr/local/lib."
+ MSG "This directory is required for the iraf shared library."
+ MSG "Please create the directory or else reset and try again."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+ endif
+endif
+
+
+# See if we're good to go ...
+if ("$err_stat" != "0") then
+ NEWLINE ; NEWLINE
+ BOLD_ON
+ echo "======================================================================"
+ echo "| An error occured during verification. Please take corrective |"
+ echo "| action before rerunning the install script. |"
+ echo "======================================================================"
+ BOLD_OFF
+ NEWLINE
+ exit $err_stat
+endif
+
+
+
+# ============================================
+# The following is partially system dependent.
+# ============================================
+
+# Set the BINDIRS pathnames - directories where the HSI executables go.
+set host = "$iraf/unix"
+set hbin = "$iraf/unix/bin.$hmach"
+set hlib = "$iraf/unix/hlib"
+set fbin = "$iraf/bin"
+
+# Replace any // by /.
+set host = `echo $host | sed -e "s+//+/+g"`
+set hbin = `echo $hbin | sed -e "s+//+/+g"`
+set fbin = `echo $fbin | sed -e "s+//+/+g"`
+set hlib = `echo $hlib | sed -e "s+//+/+g"`
+
+# Strip any trailing /.
+set host = `echo $host | sed -e 's+/\(["]*\)$+\1+'`
+set hbin = `echo $hbin | sed -e 's+/\(["]*\)$+\1+'`
+set fbin = `echo $fbin | sed -e 's+/\(["]*\)$+\1+'`
+set hlib = `echo $hlib | sed -e 's+/\(["]*\)$+\1+'`
+set BINDIRS = "$hbin $hlib $fbin $host"
+
+# The following file lists are partially system dependent.
+set PATHFILES = "mkiraf.csh libc/iraf.h cl.csh"
+set MODEFILES = "cl.csh fc.csh mkiraf.csh mkfloat.csh mkmlist.csh $host/reboot generic.e mkpkg.e rmbin.e rmfiles.e rpp.e rtar.e wtar.e xc.e xpp.e xyacc.e sgidispatch.e $hbin/sgi2*.e irafarch.csh"
+set LINKFILES = "ecl.e cl.e mkiraf.csh mkmlist.csh generic.e mkpkg.e rmbin.e rmfiles.e rtar.e sgidispatch.e wtar.e rpp.e xpp.e xyacc.e xc.e"
+set CMDLINKS = "ecl cl mkiraf mkmlist generic mkpkg rmbin rmfiles rtar sgidispatch wtar rpp xpp xyacc xc irafarch"
+
+
+#=============================================================================
+# See whether there is an existing commands dir we need to delete.
+#=============================================================================
+
+echo -n "Checking for existing commands directory... "
+set cl_found = 0
+set clpath = ""
+foreach d ($path)
+ if (-e $d/cl) then
+ set cl_found = 1
+ set clpath = $d/cl
+ break
+ endif
+end
+if ($cl_found == 1) then
+ set o_lbin = $clpath:h
+
+ if ("$o_lbin" != "$lbin") then
+ DO_WARN
+ NEWLINE
+ MSG "IRAF commands were found in the directory:"
+ MSG ""
+ MSG " $o_lbin"
+ MSG ""
+ MSG " These commands may conflict with the commands now being"
+ MSG "installed in: '$lbin'"
+ MSG ""
+del_cmd_:
+ PROMPT "Do you want to delete commands in the old directory? "
+ set ans = "$<"
+
+ if ("$ans" == "" || "$ans" == "y" || "$ans" == "yes") then
+ NEWLINE
+ foreach i ($CMDLINKS) # remove the iraf commands
+ set file = $o_lbin/$i
+ if (-e $file) then
+ MSG "Deleting command $file ..."
+ if ($exec == yes) then
+ RM $file
+ endif
+ endif
+ end
+ else if ("$ans" == "quit" || "$ans" == "q") then
+ exit 1
+ else if ("$ans" == "no" || "$ans" == "n") then
+ ; # fall through
+ else if ("$ans" == "help" || "$ans" == "h" || "$ans" == "?") then
+ NEWLINE
+ MSG "Multiple commands such as 'cl' or 'mkiraf' on a machine"
+ MSG "may cause errors (such as 'command not found' due to an"
+ MSG "invalid link), or confusions as to which version of iraf"
+ MSG "is being run if the old link is still valid. This is"
+ MSG "because the command being used depends on the order in"
+ MSG 'which the directories occur in the users "$path" environ-'
+ MSG "ment variable (which may vary by user)."
+ MSG ""
+ MSG "It is recommended there be only one iraf command directory"
+ MSG "on a given system, other methods can be used to start a"
+ MSG "different IRAF installation. This script will not auto-"
+ MSG "matically remove those links, and will only correct the"
+ MSG "path is the local bin directory is the same as before."
+ MSG ""
+ MSG "Type 'q' to quit and rerun the install script to specify"
+ MSG "a different local bin directory, 'yes' to remove the old"
+ MSG "links, and 'no' to leave the old commands around."
+ MSG ""
+ NEWLINE
+ goto del_cmd_
+ endif
+ NEWLINE
+ else
+ DO_OK
+ endif
+
+else
+ DO_OK
+endif
+
+
+#=============================================================================
+# Prompt for the go-ahead ...
+#=============================================================================
+NEWLINE
+proceed_:
+PROMPT "Proceed with installation? "
+set ans = "$<"
+if ("$ans" == "" || "$ans" == "y" || "$ans" == "yes") then
+ NEWLINE
+else if ("$ans" == "quit" || "$ans" == "q") then
+ exit 0
+else if ("$ans" == "no" || "$ans" == "n") then
+ exit 0
+else if ("$ans" == "help" || "$ans" == "h" || "$ans" == "?") then
+ NEWLINE
+ MSG "If you proceed, the system will be installed on this machine."
+ MSG "This means that command links will be placed in the local bin"
+ MSG "directory, needed system files will be created, and the iraf"
+ MSG "root path will be edited into key files. Stopping at this stage"
+ MSG "will have no side effects on your system or the iraf files."
+ MSG "Type <cr> to continue, or 'q' to quit to exit the installation."
+ NEWLINE
+ goto proceed_
+else
+ echo "Huh?"
+ goto proceed_
+endif
+
+
+##############################################################################
+#
+# Step 2: INSTALLATION
+#
+# Do the actual installation. This involves:
+#
+# 1) Editing the $iraf path into system files
+# 2) Creating the <iraf.h> link
+# 3) Creating the system command links
+# 4) Creating the image directory (imdir)
+# 5) Creating the cache directory (cache)
+# 6) Tape setup (modes on alloc.e and /dev tape devices)
+# 7) Graphics/Display file installation/setup
+#
+##############################################################################
+
+# Begin installation.
+# ------------------
+
+set err_seen = 0
+
+
+NEWLINE
+BOLD_ON
+echo "========================================================================"
+echo "========================= Begin Installation ========================="
+echo "========================================================================"
+BOLD_OFF
+
+# Skip ahead if we're not editing the files or touching the disk.
+if ($no_edit == 1) then
+ goto end_no_edit
+endif
+
+
+NEWLINE
+BOLD_ON
+echo " Editing Paths"
+echo " -------------"
+BOLD_OFF
+
+# Edit the $iraf pathname in the .login file for user 'iraf'.
+echo -n "Editing the iraf user .login/.cshrc paths ... "
+cd $iraf/local
+
+foreach file (.cshrc .login)
+ if (-e $file) then
+ RM $TEMP >& /dev/null
+ sed -e "s+$W$o_iraf+\1$iraf+" $file > $TEMP
+ cmp -s $file $TEMP
+ if ($status) then
+ PUT $TEMP $file
+ endif
+ RM $TEMP >& /dev/null
+ else
+ if ("$err_seen" == 0) then
+ DO_FAIL
+ set err_seen = 1
+ set err_count = `expr $err_count + 1`
+ endif
+ MSG "Cannot find the iraf $file file"
+ RM $TEMP >& /dev/null
+ endif
+end
+if ("$err_seen" == 0) then
+ DO_OK
+endif
+
+
+# If we're on a Mac OS X or Cygwin system the iraf login directory isn't easy
+# to change and as of OSX 10.1 the default is to create this in /Users/iraf.
+# If this is how things are set up then link the .login/.cshrc files in this
+# directory so the account has the proper environment.
+
+set err_seen = 0
+
+if ($V != "2.15" && $V != "2.16") then
+
+ if ($pciraf && ($mach == "macosx" || $mach == "macintel" || $mach == "cygwin")) then
+ echo -n "Creating iraf user .login/.cshrc links ... "
+
+ set v = `finger iraf |& egrep '^Directory'`
+ set ihome = `echo $v[2] | sed -e 's+/\(["]*\)$+\1+'`
+
+ if ("$ihome" != "$iraf/local") then
+ cd $ihome # go to account login dir
+
+ if (! (-e bugs.log)) then # make sure it's not iraf$local
+ foreach file (.cshrc .login)
+ if ($exec == yes) then
+ if (-e $file) then
+ RM $file >& /dev/null # remove old file
+ endif
+ ln -s $iraf/local/$file $file # make local link
+
+ if (! (-e $file) && $exec == yes) then
+ if ("$err_seen" == 0) then
+ DO_FAIL
+ set err_seen = 1
+ set err_count = `expr $err_count + 1`
+ endif
+ MSG "Cannot find the iraf $file file in $ihome"
+ RM $TEMP >& /dev/null
+ endif
+
+ endif
+ end
+ endif
+ cd $iraf/local
+
+ else
+ DO_OK
+ endif
+
+ if ("$err_seen" == 0) then
+ DO_OK
+ endif
+ endif
+
+endif
+
+
+# Edit the $iraf and $imdir paths in mkiraf.csh, cl.csh, and libc/iraf.h files.
+
+echo -n "Editing iraf/imdir paths into system files ... "
+cd $iraf/unix/hlib
+
+set err_seen = 0
+foreach i ($PATHFILES)
+ if (-e $i) then
+ RM $TEMP >& /dev/null
+ sed -e "s+$W$o_iraf+\1$iraf+" $i |\
+ sed -e "s+$W$o_cache+\1$cache+" | \
+ sed -e "s+$W$o_imdir+\1$imdir+" > $TEMP
+ cmp -s $i $TEMP
+ if ($status) then
+ if ($exec == yes) then
+ PUT $TEMP $i
+ chmod 755 $i
+ endif
+ endif
+ RM $TEMP >& /dev/null
+ else
+ if ("$err_seen" == 0) then
+ DO_FAIL
+ set err_seen = 1
+ set err_count = `expr $err_count + 1`
+ endif
+ MSG "File $i not found."
+ RM $TEMP >& /dev/null
+ endif
+end
+if ("$err_seen" == 0) then
+ DO_OK
+endif
+
+
+
+NEWLINE
+BOLD_ON
+echo " Checking File Permissions"
+echo " -------------------------"
+BOLD_OFF
+
+# Set default file permissions for the executable files in the BINDIRS,
+# in case the file mode has somehow been changed, e.g., in a file restore
+# or copy.
+
+echo -n "Checking iraf file permissions ... "
+
+set err_seen = 0
+foreach i ($MODEFILES)
+ set file = $i
+ if (! -e $file) then
+ foreach j ($BINDIRS)
+ if (-e $j/$i) then
+ set file = $j/$i
+ break
+ endif
+ end
+ endif
+
+ if (-e $file) then
+ if ("`$LS -l $file | grep '^.rw[xs]r.[xs]r.[xt]'`" == "") then
+ if ("$err_seen" == 0) then
+ DO_WARN
+ set err_seen = 1
+ set err_count = `expr $err_count + 1`
+ endif
+ MSG "Setting $file:t to mode 0755."
+ if ($exec == yes) then
+ chmod 755 $file
+ endif
+ endif
+ else
+ if ("$err_seen" == 0) then
+ DO_FAIL
+ set err_seen = 1
+ set err_count = `expr $err_count + 1`
+ endif
+ MSG "File $file:t not found."
+ endif
+end
+if ("$err_seen" == 0) then
+ DO_OK
+endif
+
+
+# Create the root imdir as a public scratch directory, if not already created.
+set err_seen = 0
+if (-d $imdir) then
+ if ("`$LS -ld $imdir | grep '^.rw[xs]r.[xs]r.[xt]'`" != "") then
+ echo -n 'Checking imdir permissions ...'
+ echo -n ' '
+ else
+ echo -n 'Setting mode for $imdir to 0777 '
+ if ($exec == yes) then
+ chmod 777 $imdir
+ endif
+ endif
+else
+ echo -n "Creating root imdir at $imdir ... "
+ if ($exec == yes) then
+ mkdir $imdir; chmod 777 $imdir
+ endif
+endif
+if ("$err_seen" == 0) then
+ DO_OK
+endif
+
+
+# Create the root cache as a public scratch directory, if not already created.
+set err_seen = 0
+if (-d $cache) then
+ if ("`$LS -ld $cache | grep '^.rw[xs]r.[xs]r.[xt]'`" != "") then
+ echo -n 'Checking cache permissions ...'
+ echo -n ' '
+ else
+ echo -n 'Setting mode for $cache to 0777 '
+ if ($exec == yes) then
+ chmod 777 $cache
+ endif
+ endif
+else
+ echo -n "Creating root cache at $cache ... "
+ if ($exec == yes) then
+ mkdir $cache; chmod 777 $cache
+ endif
+endif
+if ("$err_seen" == 0) then
+ DO_OK
+endif
+
+
+
+# Allow deletion of files in /tmp - needed for multiuser tape allocation.
+echo -n "Reset /tmp sticky bit setting ... "
+if ($exec == yes) then
+ chmod -t /tmp
+endif
+DO_OK
+
+# Initialize permissions of tape devices.
+if ($do_tapes) then
+echo -n "Setting tape device permissions ... "
+ if ($exec == yes) then
+ chmod 666 $TAPES >& /dev/null
+ chown root $TAPES >& /dev/null
+ endif
+ DO_OK
+endif
+
+
+
+# Set owner=root for the device allocation task, alloc.e.
+
+echo -n "Checking alloc.e permissions ... "
+
+set err_seen = 0
+foreach i ($BINDIRS)
+ if (-e $i/alloc.e) then
+ if ("`$LS -l $i/alloc.e | grep 'rwsr-.*root'`" == "") then
+ if ($exec == yes) then
+ chown 0 $i/alloc.e
+ chmod u+s $i/alloc.e
+ endif
+ endif
+ break
+ else
+ if ("$err_seen" == 0) then
+ DO_FAIL
+ set err_seen = 1
+ set err_count = `expr $err_count + 1`
+ endif
+ MSG "Cannot find alloc.e executable."
+ endif
+end
+if ("$err_seen" == 0) then
+ DO_OK
+endif
+
+
+# Target for no-edit install.
+end_no_edit:
+
+
+NEWLINE
+BOLD_ON
+echo " Creating File Links"
+echo " -------------------"
+BOLD_OFF
+
+
+# Create a /iraf symlink on the system to establish a /iraf/iraf root
+# path regardless of the actual root dir. We only do this if there is
+# no /iraf on the system already.
+
+echo -n "Checking for /iraf symlink ... "
+if (! -e /iraf) then
+ if ($exec == yes) then
+ ln -s $iraf_p /iraf
+ endif
+ if ($exec == no || -e /iraf/iraf ) then
+ DO_OK
+ else
+ DO_FAIL
+ set err_count = `expr $err_count + 1`
+ endif
+else
+ DO_OK
+endif
+
+
+# Link $hlib/libc/iraf.h to <iraf.h>. This is needed not only to compile C
+# source files in iraf, but also to define $iraf, $host, etc. for iraf tasks.
+
+# Verify we have a /usr/include directory (some MacOSX systems won't)
+echo -n "Checking /usr/include directory ... "
+if (! -e /usr/include) then
+ if ($exec == yes) then
+ mkdir /usr/include
+ if (-d /usr/include) then
+ DO_OK
+ else
+ DO_FAIL
+ set err_count = `expr $err_count + 1`
+ endif
+ else
+ DO_OK
+ endif
+else
+ DO_OK
+endif
+
+
+echo -n "Creating <iraf.h> symlink ... "
+set file1 = /usr/include/iraf.h
+set file2 = $iraf/unix/hlib/libc/iraf.h
+
+set err_seen = 0
+if (-e $file1) then
+ if ("`$LS -l $file1 | grep $file2`" == "") then
+ if ($exec == yes) then
+ RM $file1
+ endif
+ if ($exec == yes) then
+ ln -s $file2 $file1
+ endif
+ endif
+else
+ if ($exec == yes) then
+ ln -s $file2 $file1
+ endif
+endif
+if (("$err_seen" == 0 && -e $file1) || $exec == "no") then
+ DO_OK
+else
+ DO_FAIL
+ set err_count = `expr $err_count + 1`
+endif
+
+
+# Establish the remaining symbolic links to HSI tasks.
+echo -n "Creating iraf command links in local bin dir ... "
+cd $lbin
+
+set err_seen = 0
+foreach i ($LINKFILES)
+ # Locate the file to be linked to.
+ set file1 = $i:r
+ foreach j ($BINDIRS)
+ set file2 = $j/$file1.csh
+ if (-e $file2) then
+ break
+ endif
+ set file2 = $j/$i
+ if (-e $file2) then
+ break
+ endif
+ end
+
+ # Verify or set the link.
+ if (-e $file1) then
+ if ("`$LS -l $file1 | grep $file2`" == "") then
+ if ($exec == yes) then
+ RM $file1
+ endif
+ if ($exec == yes) then
+ ln -s $file2 $file1
+ endif
+ endif
+ else
+ if ($exec == yes) then
+ RM $file1
+ ln -s $file2 $file1
+ endif
+ endif
+
+ if (! (-e $file1) && "$exec" == "yes") then
+ if ("$err_seen" == 0) then
+ DO_FAIL
+ endif
+ MSG "Could not make link $file1 -> $file2"
+ set err_seen = 1
+ set err_count = `expr $err_count + 1`
+ endif
+end
+if ("$err_seen" == 0) then
+ DO_OK
+endif
+
+
+# Establish the remaining symbolic links to shared libraries.
+if ("$shlib" == "yes") then
+ echo -n "Creating iraf library links in local lib dir ... "
+ cd $llib
+
+ set err_seen = 0
+ foreach i ($LIBFILES)
+ # Locate the file to be linked to.
+ set file1 = $i
+ foreach j ($iraf/bin.$mach $iraf/bin.$hmach)
+ set file2 = $j/$i
+ if (-e $file2) then
+ break
+ endif
+ end
+
+ # Verify or set the link.
+ if (-e $file1) then
+ if ("`$LS -l $file1 | grep $file2`" == "") then
+ if ($exec == yes) then
+ RM $file1
+ endif
+ if ($exec == yes) then
+ ln -s $file2 $file1
+ endif
+ endif
+ else
+ if ($exec == yes) then
+ RM $file1
+ ln -s $file2 $file1
+ endif
+ endif
+
+ if (! (-e $file1) && "$exec" == "yes") then
+ if ("$err_seen" == 0) then
+ DO_FAIL
+ endif
+ MSG "Could not make link $file1 -> $file2"
+ set err_seen = 1
+ set err_count = `expr $err_count + 1`
+ endif
+ end
+ if ("$err_seen" == 0) then
+ DO_OK
+ endif
+endif
+
+
+# Mark the system update time.
+if ($no_edit == 0) then
+ echo -n 'Marking system update time hlib$utime ... '
+ if ($exec == yes) then
+ touch $hlib/utime
+ endif
+ DO_OK
+endif
+
+
+#=============================================================================
+# Install the VOClient Daemon code.
+#=============================================================================
+
+NEWLINE
+BOLD_ON
+echo " Installing VOClient Code"
+echo " ------------------------"
+BOLD_OFF
+
+
+echo -n "Creating 'voclientd' symlink ... "
+set file1 = $lbin/voclientd
+set file2 = $iraf/vo/java/voclientd
+
+set err_seen = 0
+if (-e $file1) then
+ if ("`$LS -l $file1 | grep $file2`" == "") then
+ if ($exec == yes) then
+ RM $file1
+ endif
+ if ($exec == yes) then
+ ln -s $file2 $file1
+ endif
+ endif
+else
+ if ($exec == yes) then
+ ln -s $file2 $file1
+ endif
+endif
+if (("$err_seen" == 0 && -e $file1) || $exec == "no") then
+ DO_OK
+else
+ DO_FAIL
+ set err_count = `expr $err_count + 1`
+endif
+
+
+echo -n "Creating 'voclient.jar' symlink ... "
+set file1 = $lbin/voclient.jar
+set file2 = $iraf/vo/java/voclient.jar
+
+set err_seen = 0
+if (-e $file1) then
+ if ("`$LS -l $file1 | grep $file2`" == "") then
+ if ($exec == yes) then
+ RM $file1
+ endif
+ if ($exec == yes) then
+ ln -s $file2 $file1
+ endif
+ endif
+else
+ if ($exec == yes) then
+ ln -s $file2 $file1
+ endif
+endif
+if (("$err_seen" == 0 && -e $file1) || $exec == "no") then
+ DO_OK
+else
+ DO_FAIL
+ set err_count = `expr $err_count + 1`
+endif
+
+
+
+#=============================================================================
+# Common code for XGTERM/XIMTOOL installation.
+#=============================================================================
+
+NEWLINE
+BOLD_ON
+echo " Creating Graphics Device Files"
+echo " ------------------------------"
+BOLD_OFF
+
+if ($do_pipes == 0 || $has_pipes == 0) then
+ goto _no_pipes
+endif
+
+# Make sure special device entries for the display servers exist in /dev.
+echo -n "Creating /dev/imt1 fifo pipes for image display ... "
+
+set err_seen = 0
+foreach i (/dev/imt1i /dev/imt1o)
+ if (-e $i) then
+ # Check the file permissions.
+ if ("`$LS -l $i | grep '^.rwxrwxrwx'`" == "") then
+ if ($exec == yes) then
+ chmod 777 $i
+ endif
+ endif
+ else
+ if ($exec == yes) then
+ set mkfifo_found = 0
+ foreach d ($path)
+ if (-e $d/mkfifo) then
+ set mkfifo_found = 1
+ break
+ endif
+ end
+ if ($mkfifo_found == 1) then
+ mkfifo $i
+ else
+ mknod $i p
+ endif
+ chmod 777 $i
+ endif
+ endif
+
+ if (! (-e $i) && $exec == "yes") then
+ if ("$err_seen" == 0) then
+ DO_FAIL
+ endif
+ MSG "Could not create fifo $i"
+ set err_seen = 1
+ set err_count = `expr $err_count + 1`
+ endif
+end
+if ("$err_seen" == 0) then
+ DO_OK
+endif
+
+
+# The old /dev/imt1 entry is now just a link to /dev/imt1o.
+echo -n "Creating /dev/imt fifo pipes link ... "
+set file = /dev/imt1
+
+set err_seen = 0
+if (-e $file) then
+ if ("`$LS -l $file | grep imt1o`" == "") then
+ if ($exec == yes) then
+ RM $file
+ ln -s /dev/imt1o $file
+ endif
+ endif
+else
+ if ($exec == yes) then
+ ln -s /dev/imt1o $file
+ endif
+endif
+if (("$err_seen" == 0 && -e $file) || $exec == "no") then
+ DO_OK
+else
+ DO_FAIL
+ set err_count = `expr $err_count + 1`
+endif
+
+_no_pipes:
+
+if ($mach == "cygwin") then
+ echo -n "Creating special graphcap file ... "
+ cp $iraf/dev/graphcap.inet $iraf/dev/graphcap
+ DO_OK
+endif
+
+#=============================================================================
+# Install the default IMTOOLRC frame buffer configuration file. The path
+# /usr/local/lib path hardwired in to imtool and cannot easily be changed, but
+# if installation of the default imtoolrc in this directory is not possible,
+# the file can be installed in each imtool user's login directory as .imtoolrc,
+# or the environment variable IMTOOLRC can be defined in each imtool user's
+# .login or .cshrc to define the path to the file.
+#=============================================================================
+
+# Verify imtoolrc link.
+echo -n "Checking /usr/local/lib directory ... "
+if (! -e /usr/local/lib) then
+ if ($exec == yes) then
+ if (! -e /usr/local) then
+ mkdir /usr/local
+ endif
+ mkdir /usr/local/lib
+ if (-d /usr/local/lib) then
+ DO_OK
+ else
+ DO_FAIL
+ set err_count = `expr $err_count + 1`
+ endif
+ else
+ DO_OK
+ endif
+else
+ DO_OK
+endif
+
+
+# Verify or set the IMTOOLRC link.
+if ($exec == yes) then
+ cd /usr/local/lib
+endif
+set file1 = imtoolrc
+set file2 = $iraf/dev/imtoolrc
+
+echo -n "Creating /usr/local/lib/imtoolrc link ... "
+
+set err_seen = 0
+if (-e $file1) then
+ if ("`$LS $file1`" == "$file1") then
+ if ("`$LS -l $file1 | grep $file2`" == "") then
+ if ($exec == yes) then
+ RM $file1
+ ln -s $file2 $file1
+ endif
+ endif
+ endif
+else
+ if ($exec == yes) then
+ ln -s $file2 $file1
+ endif
+endif
+if (("$err_seen" == 0 && -e $file1) || $exec == "no") then
+ DO_OK
+else
+ DO_FAIL
+ set err_count = `expr $err_count + 1`
+endif
+
+
+#=============================================================================
+# Make sure there are entries in the the termcap and graphcap files for xgterm
+# and imtool. This is almost a no-op however we check in case there's an
+# ancient local version which may have been replaced repeatedly rather than
+# diff/merged over time.
+#=============================================================================
+
+echo -n "Checking if termcap file contains an XGterm entry ... "
+set temp = `grep -l xgterm $iraf/dev/termcap | grep -v '^#'`
+if ("$temp" == "") then
+ DO_FAIL
+ set err_count = `expr $err_count + 1`
+else
+ DO_OK
+endif
+
+echo -n "Checking graphcap file for XGterm/imtool entries ... "
+set gcok = yes
+foreach i (xgterm imtool)
+ set temp = `grep -l $i $iraf/dev/graphcap | grep -v '^#'`
+ if ("$temp" == "" && "$gcok" == "yes") then
+ DO_FAIL
+ set err_count = `expr $err_count + 1`
+ set gcok = no
+ endif
+end
+if ($gcok == yes) then
+ DO_OK
+endif
+
+if ("$err_count" > 0) then
+ goto fini_
+endif
+
+
+
+##############################################################################
+#
+# Step 3: POST-INSTALL CONFIGURATION
+#
+# Do some of the post-installation config required of all systems.
+# This involves:
+#
+# 1) Creating a dev$tapecap for this system
+# 2) Adding machine to dev$hosts file
+# 3) Check for display servers
+# 4) Check for graphics terminals
+# 5) Delete unused HSI binaries
+# 6) Strip system sources
+#
+##############################################################################
+
+# Begin configuration.
+# --------------------
+
+set err_seen = 0
+
+NEWLINE ; NEWLINE
+BOLD_ON
+echo "========================================================================"
+echo "===================== Post-Install Configuration ====================="
+echo "========================================================================"
+BOLD_OFF
+NEWLINE
+
+
+echo " The system should be fully functional at this point however some"
+echo "post-install configuration may be required to make use of all the"
+echo "features such as networking or tape access. Additional software such"
+echo "as external packages or display servers will need to be installed"
+echo "separately. Some minimal configuration can be accomplished now but"
+echo -n "you should consult the "
+BOLD_ON
+echo -n "IRAF Site Manager's Guide"
+BOLD_OFF
+echo " for a more complete"
+echo "discussion of IRAF system management, configuration of printers, etc."
+
+NEWLINE
+post_install_:
+PROMPT "Proceed to post-install configuration stage? "
+set ans = "$<"
+if ("$ans" == "" || "$ans" == "y") then
+ NEWLINE
+ BOLD_ON
+ echo "------------------------------------------------------------------------"
+ BOLD_OFF
+else if ("$ans" == "help" || "$ans" == "h" || "$ans" == "?") then
+ NEWLINE
+ MSG " If you continue, some minimal configuration of the IRAF net-"
+ MSG "working and tapecap file will be performed. Additional checks"
+ MSG "on the availability of display servers and graphics terminals will"
+ MSG "also be done."
+ NEWLINE
+ goto post_install_
+else if ("$ans" == "no" || "$ans" == "n") then
+ NEWLINE; NEWLINE
+ goto fini_
+else if ("$ans" == "q" || "$ans" == "quit") then
+ exit 0
+else
+ echo "Huh?"
+ goto post_install_
+endif
+
+
+#==============================================================================
+# Set up the dev$hosts file to enable iraf networking on this system.
+#==============================================================================
+
+
+# Get the networking values.
+set hname = "`hostname`"
+set lhost_abbr = `hostname | awk '{printf ("%16.16s\n", $1 ) }'`
+set ihosts = $iraf/dev/hosts
+set tmp_host = /tmp/_host$$
+
+
+if (`echo $hname | grep "\."` != "") then
+ # When using FQDN lnode may not be set....
+ set is_fqdn = yes
+ set domain = "`hostname | sed -e 's/^[a-zA-Z0-9_\-]*\.//g'`"
+ set lhost = "`hostname | sed -e 's/\.[a-zA-Z0-9]*//g'`"
+else
+ set is_fqdn = no
+ set domain = "<unknown>"
+ set lhost = $hname
+endif
+set nnode = "`hostname`"
+
+# Compute the recommended hosts entry.
+set irafks = $iraf/bin.$mach/irafks.e
+set bang = '\\!'
+if ("$is_fqdn" == "no") then
+ set rec = `echo $lhost " : " ${hname}${bang}${irafks}`
+else
+ set rec = `echo $lhost $lhost_abbr " : " ${nnode}${bang}${irafks}`
+endif
+
+
+
+NEWLINE
+BOLD_ON
+echo " IRAF Networking Config"
+echo " ----------------------"
+BOLD_OFF
+NEWLINE
+
+echo " IRAF Networking can be used to access a remote image, tape device,"
+echo "display server, or other network service. It's configuration is not"
+echo "a requirement for normal IRAF operations and it can be updated at any"
+echo 'time by editing the IRAF dev$hosts file with new entries.'
+NEWLINE
+echo " In this stage we will add an entry for the current platform to the"
+echo "hosts file. In a local network installation this script should be run"
+echo "on each system to add a networking entry as well as to install other"
+echo "system files needed by IRAF."
+
+net_conf_:
+NEWLINE
+PROMPT "Configure IRAF Networking on this machine? "
+set ans = "$<"
+if ("$ans" == "" || "$ans" == "y") then
+
+ # Check to see if the current machine is already in the hosts file.
+ set overwrite = 0
+ set have_entry = 0
+ grep $lhost $ihosts >& /dev/null
+ if ($status == 0) then
+ # Compare the recommended entry with the one already in the file.
+ echo $rec >& /tmp/_net_rec.$$
+ grep $lhost $ihosts >& /tmp/_net_exists.$$
+ diff -bitw /tmp/_net_rec.$$ /tmp/_net_exists.$$ >& /dev/null
+ if ($status == 0) then
+ RM /tmp/_net_*.$$
+ set have_entry = 1
+ NEWLINE
+ echo "Host '$lhost' exists with recommended entry in $ihosts."
+ NEWLINE
+ goto net_proc_
+
+ else
+ RM /tmp/_net_*.$$
+ NEWLINE
+ echo "Host '$lhost' exists with entry in $ihosts other than what"
+ echo "would be computed by this script:"
+ NEWLINE
+ echo ' Recommended dev$hosts file entry used for this machine: '
+ NEWLINE
+ if ("$is_fqdn" == "no") then
+ echo " "$lhost " : "$hname"\!"$irafks
+ else
+ echo " "$lhost $lhost_abbr " : " $nnode"\!"$irafks
+ endif
+ NEWLINE
+ echo ' Existing entry found in the dev$hosts file: '
+ NEWLINE
+ echo -n " "; grep $lhost $ihosts
+ NEWLINE
+
+net_overwrite_:
+ NEWLINE
+ PROMPT_N "Overwrite the existing entry with recommended one?"
+ set ans = "$<"
+ if ("$ans" == "" || "$ans" == "no" || "$ans" == "n") then
+ set overwrite = 0
+ goto net_check_
+ else if ("$ans" == "y" || "$ans" == "yes") then
+ set overwrite = 1
+ # fall through
+ else if ("$ans" == "help" || "$ans" == "h" || "$ans" == "?") then
+ NEWLINE
+ MSG "Answering 'yes' will replace the entry in the file"
+ MSG "with the one created by this script, answering 'no'"
+ MSG "will leave the current entry (which may be correct)"
+ MSG "intact."
+ NEWLINE
+ goto net_overwrite_
+ else if ("$ans" == "q" || "$ans" == "quit") then
+ exit 0
+ else
+ echo "Huh? "
+ goto net_overwrite_
+ endif
+
+ endif
+
+ else
+ # This host isn't currently in the file.
+net_rec_:
+ NEWLINE
+ echo 'Recommended dev$hosts file entry used for this machine: '
+ NEWLINE
+ if ("$is_fqdn" == "no") then
+ echo " "$lhost " : "$hname"\!"$irafks
+ else
+ echo " "$lhost $lhost_abbr " : " $nnode"\!"$irafks
+ endif
+ NEWLINE
+
+net_proc_:
+ PROMPT "Proceed with this entry? "
+ set ans = "$<"
+ if ("$ans" == "" || "$ans" == "y") then
+ ;
+ else if ("$ans" == "help" || "$ans" == "h" || "$ans" == "?") then
+ NEWLINE
+ MSG 'If you continue the recommended entry will be added to the'
+ MSG "IRAF dev$hosts file as is, otherwise you will be asked if"
+ MSG "you wish to edit the file manually."
+ NEWLINE
+ goto net_proc_
+
+ else if ("$ans" == "q" || "$ans" == "quit") then
+ exit 0
+ else if ("$ans" == "no" || "$ans" == "n") then
+net_edit_:
+ PROMPT 'Do you wish to edit the dev$hosts file manually? '
+ set ans = "$<"
+
+ if ("$ans" == "" || "$ans" == "y") then
+ if ($?EDITOR) then
+ $EDITOR $ihosts
+ else
+ vi $ihosts
+ endif
+ goto net_check_
+ else if ("$ans" == "no" || "$ans" == "n") then
+ MSG "Skipping network configuration."
+ goto net_check_
+ else if ("$ans" == "q" || "$ans" == "quit") then
+ exit 0
+ else if ("$ans" == "help" || "$ans" == "h" || "$ans" == "?") then
+ NEWLINE
+ MSG 'If you say yes you will be allowed to edit the dev$hosts'
+ MSG "file manually. You should use the existing entries as a"
+ MSG "template. Be sure the host name and iraf path are correct"
+ MSG "for this machine."
+ NEWLINE
+ goto net_edit_
+ else
+ echo "Huh? "
+ goto net_edit_
+ endif
+ else
+ echo "Huh?"
+ goto net_proc_
+ endif
+
+ endif
+
+ # If we have an entry already in the file skip ahead to the check.
+ if ($have_entry == 1) then
+ goto net_check_
+ endif
+
+ # When exported to other sites the default dev$hosts file is the one
+ # configured for the NOAO network. Check to see whether we really *are*
+ # running at NOAO so we don't wipe this out assuming it's a fresh install
+ # and we can treat the file as an existing installation (i.e. append to
+ # the hosts file).
+ set is_noao = 0
+ ifconfig -a |& grep 140.252 >& /dev/null
+ if ($status == 0) then
+ set is_noao = 1
+ endif
+
+ grep kpno.noao.edu $ihosts >& /dev/null
+ if ($status == 0 && $is_noao == 0) then
+ # If we're here then the hosts file is the NOAO default, but we are
+ # not running on an NOAO network machine. So, we want to initialize
+ # the hosts file by getting rid of the NOAO hosts, adding a standard
+ # "header" and adding the current platform.
+
+ NEWLINE
+ echo 'Creating backup of default dev$hosts file...'
+ if ($exec == yes) then
+ cp $iraf/dev/hosts $iraf/dev/hosts.ORIG
+ endif
+
+ echo 'Initializing dev$hosts file ...'
+
+
+ echo "# HOSTS -- IRAF local network host table." > $tmp_host
+ echo "" >> $tmp_host
+ echo -n "# Logical nodes (lpnode = line printer" >> $tmp_host
+ echo "output, plnode = plotter output)." >> $tmp_host
+ echo "#lpnode : @ursa" >> $tmp_host
+ echo "#plnode : @ursa" >> $tmp_host
+ echo "" >> $tmp_host
+ echo "# Host table." >> $tmp_host
+ echo "" >> $tmp_host
+
+ if ("$is_fqdn" == "no") then
+ echo $lhost $hname $iraf/bin.$mach/irafks.e | \
+ awk '{printf("%-16s\t: %s\!%s\n",$1,$2,$3)}' >> $tmp_host
+ else
+ echo $lhost $lhost_abbr $hname $iraf/bin.$mach/irafks.e | \
+ awk '{printf("%-16s %s\t: %s\!%s\n",$1,$2,$3,$4)}' >> $tmp_host
+ endif
+
+ # Copy the header to the file
+ if ($exec == yes) then
+ cp $tmp_host $ihosts
+ else
+ cat $tmp_host
+ endif
+
+ RM $tmp_host
+ echo "Host '$hname' has been added to the network configuration file..."
+
+ else
+ # If we get to this point we're appending a hosts file that is
+ # correct for the current network, NOAO or not.
+
+
+ # Pull off the file "header" and "data" to separate segments.
+ head -7 $ihosts >& /tmp/_hhdr$$
+ if ($overwrite == 1) then
+ more +8 $ihosts | grep -v $lhost >& /tmp/_hdat$$
+ else
+ more +8 $ihosts >& /tmp/_hdat$$
+ endif
+
+ if ("$is_fqdn" == "no") then
+ echo $lhost $hname $iraf/bin.$mach/irafks.e | \
+ awk '{printf("%-16s\t: %s\!%s\n",$1,$2,$3)}' >> /tmp/_hdat$$
+ else
+ echo $lhost $lhost_abbr $hname $iraf/bin.$mach/irafks.e | \
+ awk '{printf("%-16s %s\t: %s\!%s\n",$1,$2,$3,$4)}' >> /tmp/_hdat$$
+ endif
+
+net_sort_:
+ # See if we want to sort the file.
+ PROMPT "Do you want to sort the hosts file by node name? "
+ set ans = "$<"
+ if ("$ans" == "" || "$ans" == "y" || "$ans" == "yes") then
+ sort /tmp/_hdat$$ >& /tmp/_hsdat$$
+ else if ("$ans" == "no" || "$ans" == "n") then
+ cp /tmp/_hdat$$ /tmp/_hsdat$$
+ else if ("$ans" == "help" || "$ans" == "h" || "$ans" == "?") then
+ NEWLINE
+ MSG "Answering 'yes' will sort the hosts file."
+ NEWLINE
+ goto net_sort_
+ else if ("$ans" == "quit" || "$ans" == "q") then
+ exit 0
+ else
+ echo "Huh? "
+ goto net_sort_
+ endif
+
+ # Finally, put together the hosts file.
+ cat /tmp/_hhdr$$ /tmp/_hsdat$$ >& $tmp_host
+
+ # Copy the header to the file
+ if ($exec == yes) then
+ cp $tmp_host $ihosts
+ else
+ cat $tmp_host
+ endif
+
+ RM $tmp_host /tmp/_hhdr$$ /tmp/_hdat$$ /tmp/_hsdat$$
+ endif
+
+
+ # Host should be added to the dev$hosts file, let's check to see that
+ # it actually works...
+
+ # See what NETSTATUS says about this setup.
+net_check_:
+ NEWLINE
+ echo -n "Checking that iraf networking is properly enabled ... "
+ echo -n " "
+ set system = $iraf/bin.$mach/x_system.e
+ setenv iraf $iraf/
+ set errstat = 0
+ if (-e $system) then
+ set net = `$system netstatus | grep -i "interface disabled"`
+ if ("$net" == "") then
+ DO_OK
+ else
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The NETSTATUS task claims that networking is disabled."
+ MSG "Please contact http://iraf.net with questions or check"
+ MSG "the Site Manager's Guide for details on how to properly"
+ MSG "configure networking."
+ NEWLINE
+ endif
+ else
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The NETSTATUS task binary could not be executed or does not"
+ MSG "exist. Please contact http://iraf.net with questions or"
+ MSG "check the Site Manager's Guide for details on how to properly"
+ MSG "configure networking."
+ NEWLINE
+ endif
+
+net_restart_:
+ if ($errstat == 1) then
+ PROMPT "Would you like to return to networking setup? "
+ set ans = "$<"
+ if ("$ans" == "" || "$ans" == "y" || "$ans" == "yes") then
+ goto net_conf_
+ else if ("$ans" == "n" || "$ans" == "no") then
+ ; # fall through
+ else if ("$ans" == "h" || "$ans" == "help" || "$ans" == "?") then
+ NEWLINE
+ MSG "Answering 'yes' will return you to the top of the networking"
+ MSG "configuration where you can make changes. Answering 'no'"
+ MSG "will leave the current (unworking) configuration in place."
+ NEWLINE
+ goto net_restart_
+ else if ("$ans" == "q" || "$ans" == "quit") then
+ exit 1
+ else
+ echo "Huh? "
+ goto net_restart_
+ endif
+ endif
+
+else if ("$ans" == "help" || "$ans" == "h" || "$ans" == "?") then
+ NEWLINE
+ MSG 'If you continue a recommended entry can be added to the'
+ MSG 'IRAF dev$hosts file, otherwise you will be asked if'
+ MSG "you wish to edit the file manually."
+ NEWLINE
+ goto net_conf_
+else if ("$ans" == "q" || "$ans" == "quit") then
+ exit 0
+else if ("$ans" == "no" || "$ans" == "n") then
+ NEWLINE
+ goto end_net_
+else
+ echo "Huh?"
+ goto net_conf_
+endif
+
+end_net_:
+BOLD_ON
+echo "------------------------------------------------------------------------"
+BOLD_OFF
+
+NEWLINE
+
+
+#==============================================================================
+# Set up the default tapecap file for the machine.
+#==============================================================================
+
+# Skip the configuration if the system already has a default dev$tapecap
+# file. We only need to do this for e.g. PC-IRAF systems where we need
+# to create a default based on the OS version.
+
+if (! $do_tapecaps ) then
+ goto skip_tape_
+endif
+
+
+NEWLINE
+BOLD_ON
+echo " Tapecap Device File Config"
+echo " --------------------------"
+BOLD_OFF
+NEWLINE
+
+echo ' By default IRAF will search for a dev$tapecap.<node> file (where'
+echo "<node> is the system name) when looking for a tape configuration file."
+echo "Platforms such as PC-IRAF and Sun/IRAF support multiple OS versions"
+echo "and so the proper template file must be used. This configuration will"
+echo "allow you to setup a default tapecap for this system, it may be skipped"
+echo "if this machine has no tape drive attached."
+NEWLINE
+
+tape_conf_:
+PROMPT "Create a default tapecap file? "
+set ans = "$<"
+if ("$ans" == "" || "$ans" == "y") then
+
+ # Figure out what the template should be.
+ if ($pciraf == 1) then
+ if ("$UNAME" == "linux") then
+ set tapefile = "tapecap.linux"
+ else if ("$UNAME" == "sunos") then
+ set tapefile = "tapecap.solaris"
+ else if ("$UNAME" == "freebsd") then
+ set tapefile = "tapecap.freebsd"
+ endif
+ else if ($suniraf == 1) then
+ setenv OSVERSION `$uname_cmd -r | cut -c1`
+ if ($OSVERSION == 5) then
+ set tapefile = "tapecap.solaris"
+ else
+ set tapefile = "tapecap.sunos"
+ endif
+ else
+ set tapefile = tapecap.$UNAME
+ endif
+
+ # Get the (possibly abbreviated) local host name.
+ set lhost = `hostname | awk '{printf ("%16.16s\n", $1 ) }'`
+
+ set file1 = $iraf/dev/tapecap.$lhost
+ set file2 = $tapefile
+ if (! -e $file1) then
+tape_link1_:
+ echo "Creating default file 'tapecap.$lhost' from $tapefile..."
+ if ($exec == yes) then
+ chdir $iraf/dev
+ if (-e $file1) then
+ # Remove the link in case it exists but points to a file
+ # which doesn't.
+ RM tapecap.$lhost >& /dev/null
+ endif
+ ln -s $tapefile tapecap.$lhost
+ endif
+ else
+ if ("`$LS -l $file1 | grep $file2`" != "") then
+ echo "Tapecap symlink 'tapecap.$lhost' exists and is ok."
+ else
+ echo "Tapecap symlink 'tapecap.$lhost' exists but is invalid...."
+ echo "Deleting invalid link...."
+ if ($exec == yes) then
+ RM $file1 >& /dev/null
+ endif
+ goto tape_link1_
+ endif
+ endif
+
+
+ # See if we want to make this the dev$tapecap default.
+ NEWLINE ; NEWLINE
+ echo ' In the event a dev$tapecap.<node> file is not found on this'
+ echo 'system IRAF will fallback to use just dev$tapecap. In cases where'
+ echo 'the node name changes, this installation is shared with another'
+ echo 'machine or in a local network, or any case where a tapecap.<node>'
+ echo 'is not found, the dev$tapecap file will be the default tapecap used'
+ echo "for all IRAF systems."
+ echo ""
+
+
+tape_def_:
+ PROMPT 'Do you wish to create a default dev$tapecap link? '
+ set ans = "$<"
+ if ("$ans" == "" || "$ans" == "y") then
+
+ set file1 = $iraf/dev/tapecap
+ if (! -e $file1) then
+tape_link2_:
+ echo -n 'Creating default dev$tapecap link to dev$'
+ echo "$tapefile..."
+ if ($exec == yes) then
+ chdir $iraf/dev
+ if (-e $file1) then
+ # Remove the link in case it exists but points to a file
+ # which doesn't.
+ RM tapecap >& /dev/null
+ endif
+ ln -s $tapefile tapecap
+ endif
+ else
+ if ("`$LS -l $file1 | grep $tapefile`" != "") then
+ echo "Tapecap symlink 'tapecap' exists and is ok."
+ else
+ echo "Tapecap symlink 'tapecap' exists but is invalid...."
+ echo "Deleting invalid link...."
+ if ($exec == yes) then
+ RM $file1 >& /dev/null
+ endif
+ goto tape_link2_
+ endif
+ endif
+
+ else if ("$ans" == "no" || "$ans" == "n") then
+ ;
+ else if ("$ans" == "q" || "$ans" == "quit") then
+ exit 0
+ else if ("$ans" == "help" || "$ans" == "h" || "$ans" == "?") then
+ NEWLINE
+ MSG 'A dev$tapecap file is the fallback file used if there is no'
+ MSG "tapecap.<node> file found. If you continue a link will be made"
+ MSG "to the template file appropriate for this machine."
+ NEWLINE
+ goto tape_def_
+ else
+ echo "Huh?"
+ goto tape_def_
+ endif
+
+else if ("$ans" == "q" || "$ans" == "quit") then
+ exit 0
+else if ("$ans" == "no" || "$ans" == "n") then
+ NEWLINE
+ goto end_tape_
+else if ("$ans" == "help" || "$ans" == "h" || "$ans" == "?") then
+ NEWLINE
+ MSG "If you continue a default tapecap appropriate for this system"
+ MSG 'will be created in the $iraf/dev directory'
+ NEWLINE
+ goto tape_conf_
+else
+ echo "Huh?"
+ goto tape_conf_
+endif
+
+end_tape_:
+BOLD_ON
+echo "------------------------------------------------------------------------"
+BOLD_OFF
+
+NEWLINE
+skip_tape_:
+
+
+
+#==============================================================================
+# Delete the unused HSI binaries in the system to recover disk space.
+#==============================================================================
+
+if ($pciraf == 0 && $suniraf == 0) then
+ goto skip_hsi_del_
+endif
+
+
+# Get the set of currently installed system binaries.
+set archs = ""
+foreach i ($iraf/bin.*)
+ set dir = $i:t
+ if ($dir:r == "bin") then
+ set sz = `(chdir $i ; du -s | awk '{printf ("%d", $1)}')`
+ if (`$LS -lL $i | wc -l` > 1) then
+ if (-e "$i/cl.e" && -e "$i/x_system.e") then
+ # Save the list of installed binaries, allow for changes between
+ # the binary arch and HSI arch here (e.g. ssun->ssol).
+ if ("$dir:e" == "ssun") then
+ set archs = `echo $archs ssol`
+ else
+ set archs = `echo $archs $dir:e`
+ endif
+ endif
+ endif
+ endif
+end
+
+
+
+# Check for HSI bin directories.
+set delete_bin = ""
+set empty_bin = ""
+foreach i ($iraf_p/iraf/unix/bin.*)
+ set dir = $i:t
+ if ($dir:r == "bin") then
+ set sz = `(chdir $i ; du -s | awk '{printf ("%d", $1)}')`
+ if (`$LS -lL $i | wc -l` > 1) then
+ set d = `$LS $LSDF $i/* | head -2 | tail -1`
+ if ("`echo $archs | grep $dir:e`" == "") then
+ set delete_bin = `echo $delete_bin $dir`
+ endif
+ else
+ if ($sz > 8 && "`echo $archs | grep $dir:e`" == "") then
+ set delete_bin = `echo $delete_bin $dir`
+ endif
+ endif
+ else
+ continue
+ endif
+end
+
+# If there were no unused bin directories found then skip this section.
+if ("$delete_bin" == "") then
+ goto end_hsi_del_
+endif
+
+
+
+NEWLINE
+BOLD_ON
+echo " Delete Unneeded HSI Binaries"
+echo " ----------------------------"
+BOLD_OFF
+NEWLINE
+
+echo ' The following bin directories in the iraf$unix directories were'
+echo "found to be unused on this machine:"
+NEWLINE
+set tot = 0
+foreach i ($delete_bin)
+ set p = `echo $iraf/unix/$i | sed -e 's://:/:g'`
+ set sz = `du -s $p`
+ set tot = `expr $tot + $sz[1]`
+ echo $sz[1] $p | awk '{printf ("\t (%5d Kb)\t%s\n", $1, $2)}'
+end
+set tot = `expr $tot / 1000`
+NEWLINE
+echo "The contents of these directories may be safely deleted to reclaim"
+echo "about $tot Mb of disk space without affecting the IRAF runtime system."
+NEWLINE
+
+
+hsi_del_:
+PROMPT "Do you wish to delete these unused HSI binaries? "
+set ans = "$<"
+if ("$ans" == "" || "$ans" == "y") then
+ NEWLINE
+ chdir $iraf/unix
+ foreach i ($delete_bin)
+ echo -n "Delete HSI binaries in $i ... "
+ if ($exec == yes) then
+ if (-e $i) then
+ rm -rf $i/*
+ DO_OK
+ else
+ DO_FAIL
+ NEWLINE
+ MSG "Hmm, I can't find '$i' in '$cwd', skipping..."
+ NEWLINE
+ endif
+ else
+ # No-op okay
+ DO_OK
+ endif
+ end
+else if ("$ans" == "q" || "$ans" == "quit") then
+ exit 0
+else if ("$ans" == "no" || "$ans" == "n") then
+ NEWLINE
+ goto end_hsi_del_
+else if ("$ans" == "help" || "$ans" == "h" || "$ans" == "?") then
+ NEWLINE
+ MSG "This system contains binaries needed for multi-architecture"
+ MSG "support, however you do not appear to need all of the binaries"
+ MSG "supplied. Removing uneeded binaries can recover some disk"
+ MSG "space that could be used for data."
+ NEWLINE
+ goto hsi_del_
+else
+ echo "Huh?"
+ goto hsi_del_
+endif
+
+end_hsi_del_:
+BOLD_ON
+echo "------------------------------------------------------------------------"
+BOLD_OFF
+
+NEWLINE
+skip_hsi_del_:
+
+
+#==============================================================================
+# Strip the system sources.
+#==============================================================================
+
+NEWLINE
+BOLD_ON
+echo " Strip IRAF System Sources"
+echo " -------------------------"
+BOLD_OFF
+NEWLINE
+
+echo " Source code for all IRAF tasks and interfaces is included with this"
+echo "installation, but is strictly only required if you plan to develop this"
+echo "code. The sources may be deleted from the system without affecting the"
+echo "runtime environment (including help pages, compilation of external pack-"
+echo "ages or local task development) allowing you to reclaim 50-60Mb of disk"
+echo "space for the system. Stripping sources is recommended for systems very"
+echo "short on space, leaving it on the system will allow IRAF site support to"
+echo "send code fixes and compilation instructions as needed to fix problems"
+echo "which have no other workaround."
+NEWLINE
+
+strip_:
+PROMPT_N "Do you wish to strip the system of sources? "
+set ans = "$<"
+if ("$ans" == "y" || "$ans" == "yes") then
+ NEWLINE
+ echo -n "Stripping core system sources ... "
+ if ($exec == yes) then
+ cd $iraf
+ $lbin/mkpkg strip
+ endif
+ DO_OK
+ echo -n "Stripping NOAO package sources ... "
+ if ($exec == yes) then
+ cd $iraf/noao
+ $lbin/mkpkg -p noao strip
+ endif
+ DO_OK
+else if ("$ans" == "q" || "$ans" == "quit") then
+ exit 0
+else if ("$ans" == "" || "$ans" == "no" || "$ans" == "n") then
+ NEWLINE
+ goto end_strip_
+else if ("$ans" == "help" || "$ans" == "h" || "$ans" == "?") then
+ NEWLINE
+ MSG "Stripping system sources can recover considerable amounts of"
+ MSG "disk space while leaving a full runtime system. Sources should"
+ MSG "be stripp if there is insufficient room and you do not plan to"
+ MSG "do any development of the Core system or NOAO package."
+ NEWLINE
+ goto strip_
+else
+ echo "Huh?"
+ goto strip_
+endif
+
+#BOLD_ON
+#echo "------------------------------------------------------------------------"
+#BOLD_OFF
+
+end_strip_:
+NEWLINE
+
+
+
+#==============================================================================
+# Post-Install Verification
+#==============================================================================
+
+NEWLINE
+BOLD_ON
+echo "========================================================================"
+echo "===================== Post-Install Verification ======================"
+echo "========================================================================"
+BOLD_OFF
+NEWLINE
+
+
+#==============================================================================
+# Check for available display servers on this system.
+#==============================================================================
+
+NEWLINE
+BOLD_ON
+echo " Display Server Availability"
+echo " ---------------------------"
+BOLD_OFF
+NEWLINE
+
+set DISPLAY_SERVERS = "ximtool ximtool-alt saoimage ds9 saotng"
+
+echo "Display Servers Found on This Machine:"
+NEWLINE
+
+set found = 0
+foreach i ($DISPLAY_SERVERS)
+ set p = `which $i |& grep -i "^\/"`
+ if ($status == 0) then
+ set d = `$LS $LSDF $p | head -2 | tail -1`
+ echo $d | awk '{printf (" ( Date: %3s %2s %-5s ) ", $7, $8, $9) }'
+ echo " "`which $i`
+ set found = 1
+ endif
+end
+if ($found == 0) then
+ BOLD_ON
+ echo " No Display Servers Found"
+ BOLD_OFF
+ NEWLINE
+ MSG "No display servers were found on this machine or in the user"
+ MSG "path. A display server such as XImtool/SAOimage/SAOtng/DS9"
+ MSG "is required to be running on the local machine before an iraf"
+ MSG "display command (e.g. DISPLAY/TVMARK/IMEXAMINE) will work."
+ MSG ""
+ MSG "Remote displays (i.e. the server on one machine and IRAF on"
+ MSG "another) require either iraf networking be enabled or the X"
+ MSG "'DISPLAY' variable be set so the server appears on the remote"
+ MSG "machine."
+ MSG ""
+ MSG " XImtool can be downloaded as part of X11IRAF from:"
+ MSG ""
+ MSG " http://iraf.net/ftp/iraf/x11iraf"
+ MSG ""
+ MSG "or it's mirror sites."
+ MSG " For information on DS9 please see"
+ MSG ""
+ MSG " http://hea-www.harvard.edu/RD/ds9/"
+ MSG ""
+ MSG "Please contact http://iraf.net with questions."
+endif
+NEWLINE
+
+BOLD_ON
+echo "------------------------------------------------------------------------"
+BOLD_OFF
+
+end_servers_:
+
+
+
+#==============================================================================
+# Check for available graphics terminals on this system.
+#==============================================================================
+
+NEWLINE
+BOLD_ON
+echo " Graphics Terminal Availability"
+echo " ------------------------------"
+BOLD_OFF
+NEWLINE
+
+set GRAPHICS_TERMS = "xgterm xterm"
+
+echo "Graphics Terminals Found on This Machine:"
+NEWLINE
+
+set found = 0
+foreach i ($GRAPHICS_TERMS)
+ set p = `which $i |& grep "^\/"`
+ if ($status == 0) then
+ set d = `$LS $LSDF $p | head -2 | tail -1`
+ echo $d | awk '{printf (" ( Date: %3s %2s %-5s ) ", $7, $8, $9) }'
+ echo " "`which $i`
+ set found = 1
+ endif
+end
+if ($found == 0) then
+ BOLD_ON
+ echo " No Suitable Graphics Terminals Found"
+ BOLD_OFF
+ NEWLINE
+ MSG "No 'xterm' or 'xgterm' binary was found on this systen or"
+ MSG "in the user path. IRAF graphics require some form of "
+ MSG "graphics-enabled terminal window to be running or else"
+ MSG "garbarge characters will appear on the screen. Windows"
+ MSG "such as 'cmdtool', 'rxvt', 'aixterm', 'hpterm', 'decterm'"
+ MSG "do not support graphics and should not be used for IRAF."
+ MSG ""
+ MSG "The default terminal type is set in the login.cl when"
+ MSG "a user runs MKIRAF, this is the type of window they should"
+ MSG "be running when starting IRAF. Users can use the 'show"
+ MSG "terminal' command to see the current setting, or 'stty"
+ MSG "xterm' or 'stty xgterm' command (or rerun MKIRAF and reset"
+ MSG "the default terminal type) to change the default iraf terminal."
+ MSG ""
+ MSG "XGterm can be downloaded as part of X11IRAF from"
+ MSG ""
+ MSG " http://iraf.net/ftp/iraf/x11iraf"
+ MSG ""
+ MSG "or it's mirror sites. Xterm will normally be a part of the"
+ MSG "system, if not found please check your path."
+ MSG ""
+endif
+NEWLINE
+
+#BOLD_ON
+#echo "------------------------------------------------------------------------"
+#BOLD_OFF
+
+end_terms_:
+
+
+
+#=============================================================================
+# Finish up and set the exit status.
+#=============================================================================
+fini_:
+
+NEWLINE ; NEWLINE
+if ("$err_count" > 0) then
+ BOLD_ON
+ echo "========================================================================"
+ echo "================= Installation Completed With Errors ================="
+ echo "========================================================================"
+ BOLD_OFF
+ NEWLINE
+ exit 1
+else
+ BOLD_ON
+ echo "========================================================================"
+ echo -n "Congratulations! "
+ BOLD_OFF
+ echo "IRAF has been successfully installed on this system."
+ BOLD_ON
+ echo "========================================================================"
+ BOLD_OFF
+ NEWLINE
+ echo " To begin using the system simply log in as any user and from the"
+ echo "directory you wish to use as your iraf login directory type:"
+ echo ""
+ echo -n ' % ';
+ BOLD_ON; echo -n 'mkiraf'; BOLD_OFF
+ echo ' # create a login.cl file'
+ echo -n ' % ';
+ BOLD_ON; echo -n 'cl'; BOLD_OFF
+ echo ' # start IRAF'
+ echo ""
+ echo "The 'iraf' user is already configured with a login.cl file so a simple"
+ echo "'cl' command is sufficient to start the system."
+ NEWLINE
+ echo "Additional information can be found at the IRAF.NET web site:"
+ NEWLINE
+ BOLD_ON ; echo " http://iraf.net" ; BOLD_OFF
+ NEWLINE
+ echo "Please contact http://iraf.net with any questions or problems."
+ NEWLINE
+ NEWLINE
+
+ BOLD_ON
+ echo "========================================================================"
+ echo "================ Installation Completed With No Errors ==============="
+ echo "========================================================================"
+ BOLD_OFF
+ NEWLINE
+ exit 0
+endif
+
+cleanup_:
+ exit 0
+
+
+
+# Print usage information. We will not get here unless the "-help" flag
+# was issued.
+
+Usage:
+ echo "Usage: install [-n] [-h] [-hl] [-f] [-r rootdir] [-i imdir]"
+ echo " [-b localbindir] [-R oldroot] [-I oldimdir]"
+ echo " [-u username ] [-l locallibdir] [-m mach ]"
+ echo " [-noedit]"
+ echo ""
+ echo " where -n # no execute"
+ echo " -h # print this help summary"
+ echo " +hl # enable highlighted text"
+ echo " -hl # disable highlighted text"
+ echo " -f # create fifo pipes (if supported)"
+ echo " -r # set iraf root directory"
+ echo " -c # set cache directory"
+ echo " -i # set imdir directory"
+ echo " -b # set local bin directory"
+ echo " -l # set local lib directory"
+ echo " -R # set old iraf root directory"
+ echo " -I # set old imdir directory"
+ echo " -u # set username to own files"
+ echo " -m # set machine type (ssun, linux, etc)"
+ echo " -noedit # install but don't edit pathnames"
+ exit 0
diff --git a/unix/hlib/install.old b/unix/hlib/install.old
new file mode 100755
index 00000000..8764f337
--- /dev/null
+++ b/unix/hlib/install.old
@@ -0,0 +1,943 @@
+#!/bin/csh
+#
+# INSTALL -- Install IRAF on a UNIX/IRAF host. May also be run after the
+# initial installation as a consistency check to verify that all the necessary
+# links and file permissions are still in place (e.g., after updating UNIX
+# itself).
+#
+# Usage: install [-n] [-r rootdir] [-i imdir] [-b localbindir] \
+# [-R oldroot] [-I oldimdir] [-u username (e.g., 'iraf')]
+# [-m mach (e.g., 'sparc', 'mc68020') ]
+#
+# Example:
+# % su
+# % cd $hlib
+# % install -n
+# % install
+#
+# If run with no arguments, INSTALL will make an informed guess and prompt
+# with this value; type <return> to accept the value, or enter a new value.
+#
+# Use "install -n" to do a dry run to see what the would be done, without
+# actually modifying the host system and IRAF configuration files. To do the
+# actual installation one must be superuser, but anyone can run "install -n"
+# to see what it would do.
+# ----------------------------------------------------------------------------
+
+unset noclobber
+unalias cd cp cmp echo ln mv rm sed set grep ls chmod chown pwd touch
+set path = (/sbin /usr/sbin /bin /usr/bin /usr/ucb /etc /usr/etc)
+
+#set echo
+
+set W = '\([ "]\)' # match a blank, tab, or "
+set TEMP = "/tmp/I_temp"
+set exec = yes
+set user = iraf
+set LS = /bin/ls
+alias PUT "mv -f \!*; chown $user \!$ "
+
+# Determine platform architecture.
+if (-f /etc/redhat-release) then
+ if (`uname -m` == "ppc") then
+ set mach = linuxppc
+ else
+ set mach = redhat
+ endif
+else
+ set mach = `uname -s | tr '[A-Z]' '[a-z]'`
+endif
+
+if ($mach == "darwin") then
+ set mach = macosx
+endif
+
+if ($?iraf == 1) then
+ if (! -d $iraf) then
+ setenv iraf ""
+ endif
+else
+ setenv iraf ""
+endif
+
+set imdir = ""
+set lbin = ""
+set o_iraf = ""
+set o_imdir = ""
+
+# Process any command line arguments.
+while ("$1" != "")
+ switch ("$1")
+ case -n: # no execute
+ alias PUT "diff \!$ \!^; rm -f $TEMP"
+ set exec = no
+ breaksw
+ case -b: # set local bin directory (unix)
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-b <localbindir>' switch"
+ exit 1
+ endif
+ set lbin = "$1"
+ breaksw
+ case -i: # set imdir directory
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-i <imdir>' switch"
+ exit 1
+ endif
+ set imdir = "$1"
+ breaksw
+ case -m: # set machine type
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-m <mach>' switch"
+ exit 1
+ endif
+ set mach = "$1"
+ breaksw
+ case -r: # set root directory
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-r <irafdir>' switch"
+ exit 1
+ endif
+ setenv iraf "$1"
+ breaksw
+ case -I: # set old imdir directory
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-I <o_imdir>' switch"
+ exit 1
+ endif
+ set o_imdir = "$1"
+ breaksw
+ case -R: # set old root directory
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-R <o_iraf>' switch"
+ exit 1
+ endif
+ set o_iraf = "$1"
+ breaksw
+ case -u: # set user name for iraf, e.g, 'iraf'
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-u <irafowner>' switch"
+ exit 1
+ endif
+ set user = "$1"
+ breaksw
+ default:
+ echo "install: unknown argument $1"
+ breaksw
+ endsw
+
+ if ("$2" == "") then
+ break
+ else
+ shift
+ endif
+end
+
+# Set $iraf, the new root directory for iraf. The system must already have
+# been read in at this directory (e.g., /usr/iraf), but we assume that no
+# files have yet been modified.
+
+if ("$iraf" == "") then
+ # Make a guess at what the new root directory is.
+ set d_iraf = ""
+ if (-d /iraf/iraf) then
+ set d_iraf = /iraf/iraf
+ else if (-d /iraf) then
+ set d_iraf = /iraf
+ else if (-d /usr/iraf) then
+ set d_iraf = /usr/iraf
+ else
+ # Search for a directory /u*/iraf.
+ foreach i (/u*)
+ if (-d $i/iraf) then
+ set d_iraf = "$i/iraf"
+ break
+ endif
+ end
+ # Search for a directory /*/iraf.
+ if ("$d_iraf" == "") then
+ foreach i (/*)
+ if (-d $i/iraf) then
+ set d_iraf = "$i/iraf"
+ break
+ endif
+ end
+ endif
+ endif
+
+ if ("$d_iraf" == "") then
+ set d_iraf = /usr/iraf
+ endif
+else
+ set d_iraf = $iraf
+endif
+
+# If the given directory doesn't exist, compute the root directory relative
+# to $iraf/unix/hlib (our current directory, presumably).
+
+if (! -d $d_iraf) then
+ set d_iraf = `(cd ../..;cwd)`
+endif
+
+set d_iraf = `echo $iraf | sed -e 's+/\(["]*\)$+\1+'`
+echo -n "new iraf root directory ($d_iraf): "
+setenv iraf "$<"
+if ("$iraf" == "") then
+ setenv iraf "$d_iraf"
+endif
+
+# Get the values of o_iraf and o_imdir from the current mkiraf.csh file, if
+# not already otherwise defined.
+
+cd $iraf/unix/hlib
+set WS = '[ ]'
+if ("$o_iraf" == "") then
+ set o_iraf =\
+ `grep "^set$WS*iraf" mkiraf.csh | sed -e "s+^.*=$WS*++" | sed -e 's+"++g'`
+endif
+if ("$o_imdir" == "") then
+ set o_imdir =\
+ `grep "^set$WS*imdir" mkiraf.csh | sed -e "s+^.*=$WS*++" | sed -e 's+"++g'`
+endif
+
+# Strip any trailing / in the pathname to be matched, so that the trailing /,
+# if present, will be LEFT in the occurrence of the path in the file.
+
+set o_iraf = `echo $o_iraf | sed -e 's+/\(["]*\)$+\1+'`
+set o_imdir = `echo $o_imdir | sed -e 's+/\(["]*\)$+\1+'`
+
+# Set $imdir, the default user image storage root directory. Each user imdir
+# will be a subdirectory of this directory by default, when MKIRAF is run.
+# Since bulk image data can consume hundreds of megabytes of disk space, IRAF
+# likes to keep such data on a public scratch device, which is probably not
+# backed up, which has a short file expiration interval, and possibly which
+# has been configured (newfs/mkfs) with a large block size for fast seq. i/o.
+
+if ("$imdir" == "") then
+ if (-d $o_imdir) then
+ set d_imdir = $o_imdir
+ else if (-d /tmp2) then
+ set d_imdir = /tmp2/iraf
+ else if (-d /tmp3) then
+ set d_imdir = /tmp3/iraf
+ else if (-d /usr/tmp) then
+ set d_imdir = /usr/tmp
+ else
+ set d_imdir = /tmp
+ endif
+
+ echo -n "default root image storage directory ($d_imdir): "
+ set imdir = "$<"
+ if ("$imdir" == "") then
+ set imdir = "$d_imdir"
+ endif
+endif
+
+# Get UNIX directory where HSI commands (links) are to be installed, if not
+# set on command line. IRAF will only install a very few new commands in this
+# directory. Ideally it should be a directory on the standard user $path,
+# so that users do not have to customize their . files just to run IRAF.
+
+if ("$lbin" == "") then
+ # Look around and come up with a likely candidate directory.
+ if (-d /usr/local/bin) then
+ set d_lbin = /usr/local/bin
+ else if (-d /local/bin) then
+ set d_lbin = /local/bin
+ else
+ set d_lbin = /usr/bin
+ endif
+
+ echo -n "local unix commands directory ($d_lbin): "
+ set lbin = "$<"
+ if ("$lbin" == "") then
+ set lbin = "$d_lbin"
+ endif
+endif
+
+# Verify the machine type.
+echo "install iraf for machine type $mach"
+# Document the old root pathnames.
+echo "old iraf root = $o_iraf, old imdir = $o_imdir"
+
+# Cannot have iraf and imdir the same.
+if ($iraf == $imdir) then
+ echo "imdir cannot be the same as the iraf root, try again"
+ exit 1
+endif
+
+# The following is partially system dependent.
+# ------------------------------------------
+# Set the BINDIRS pathnames - directories where the HSI executables go.
+set host = "$iraf/unix"
+set hbin = "$iraf/unix/bin.$mach" # "mach" is SUN specific!!
+set hlib = "$iraf/unix/hlib"
+set fbin = "$iraf/bin"
+
+# Replace any // by /.
+set host = `echo $host | sed -e "s+//+/+g"`
+set hbin = `echo $hbin | sed -e "s+//+/+g"`
+set fbin = `echo $fbin | sed -e "s+//+/+g"`
+set hlib = `echo $hlib | sed -e "s+//+/+g"`
+
+# Strip any trailing /.
+set host = `echo $host | sed -e 's+/\(["]*\)$+\1+'`
+set hbin = `echo $hbin | sed -e 's+/\(["]*\)$+\1+'`
+set fbin = `echo $fbin | sed -e 's+/\(["]*\)$+\1+'`
+set hlib = `echo $hlib | sed -e 's+/\(["]*\)$+\1+'`
+set BINDIRS = "$hbin $hlib $fbin"
+
+# The following file lists are partially system dependent.
+set PATHFILES = "mkiraf.csh libc/iraf.h cl.csh"
+set MODEFILES = "mkiraf.csh mkmlist.csh generic.e mkpkg.e rmbin.e rmfiles.e rpp.e rtar.e wtar.e xc.e xpp.e xyacc.e sgidispatch.e $hbin/sgi2*.e cl.csh mkfloat.csh fc.csh $host/reboot"
+set LINKFILES = "cl.e generic.e mkiraf.csh mkmlist.csh mkpkg.e rmbin.e rmfiles.e rtar.e sgidispatch.e wtar.e rpp.e xpp.e xyacc.e xc.e"
+# ------------------------------------------
+
+# Begin installation.
+# ------------------
+
+echo "installing iraf at $iraf, imdir=$imdir, lbindir=$lbin"
+echo -n "proceed with installation? (yes): "; set temp = $<
+if (! ($temp == "" || $temp == "y" || $temp == "yes")) then
+ echo "installation terminated"
+ exit 1
+else
+ echo ""
+endif
+
+# Create the root imdir as a public scratch directory, if not already created.
+if (! -d $imdir) then
+ echo "creating root imdir at $imdir"
+ if ($exec == yes) then
+ mkdir $imdir; chmod 777 $imdir
+ endif
+else
+ if ($exec == yes) then
+ chmod 777 $imdir
+ endif
+ echo "default root imdir is ok"
+endif
+
+# Allow deletion of files in /tmp - needed for multiuser tape allocation.
+if ($exec == yes) then
+ echo "set delete permission on /tmp"
+ chmod -t /tmp
+endif
+
+# Initialize permissions of tape devices.
+if ($exec == yes) then
+ echo "set mode 0666 on magtape devices to permit tape allocation"
+ chmod 666 /dev/*st[0-4]*
+endif
+
+# Set owner=root for the device allocation task, alloc.e.
+
+foreach i ($BINDIRS)
+ if (-e $i/alloc.e) then
+ if ("`$LS -l $i/alloc.e | grep 'rwsr-.*root'`" != "") then
+ echo "device allocation task $i/alloc.e is ok"
+ else
+ echo "chown $i/alloc.e to root, set uid modebit"
+ if ($exec == yes) then
+ chown 0 $i/alloc.e
+ chmod u+s $i/alloc.e
+ endif
+ endif
+ break
+ else
+ echo "cannot find alloc.e"
+ endif
+end
+
+# Edit the $iraf pathname in the .login file for user 'iraf'.
+cd $iraf/local
+
+if (-e .login) then
+ rm -f $TEMP >& /dev/null
+ sed -e "s+$W$o_iraf+\1$iraf+" .login > $TEMP
+ cmp -s .login $TEMP
+ if ($status) then
+ echo "updating $iraf/local/.login"
+ PUT $TEMP .login
+ else
+ echo "iraf .login file is ok"
+ rm -f $TEMP
+ endif
+else
+ echo "cannot find the iraf .login file"
+endif
+
+# Edit the $iraf and $imdir pathnames in the mkiraf.csh and libc/iraf.h files.
+cd $iraf/unix/hlib
+
+foreach i ($PATHFILES)
+ if (-e $i) then
+ rm -f $TEMP >& /dev/null
+ sed -e "s+$W$o_iraf+\1$iraf+" $i |\
+ sed -e "s+$W$o_imdir+\1$imdir+" > $TEMP
+ cmp -s $i $TEMP
+ if ($status) then
+ echo "updating $i"
+ PUT $TEMP $i
+ if ($exec == yes) then
+ chmod 755 $i
+ endif
+ else
+ echo "$i is ok"
+ rm -f $TEMP
+ endif
+ else
+ echo "cannot find $i"
+ endif
+end
+
+# Set default file permissions for the executable files in the BINDIRS,
+# in case the file mode has somehow been changed, e.g., in a file restore
+# or copy.
+
+echo "--------------- Check File Permissions ----------------"
+
+foreach i ($MODEFILES)
+ set file = $i
+ if (! -e $file) then
+ foreach j ($BINDIRS)
+ if (-e $j/$i) then
+ set file = $j/$i
+ break
+ endif
+ end
+ endif
+
+ if (-e $file) then
+ if ("`$LS -l $file | grep '^.rwxr.xr.x'`" != "") then
+ echo "file $file exists with the correct permissions"
+ else
+ echo "set mode for $file to 0755"
+ if ($exec == yes) then
+ chmod 755 $file
+ endif
+ endif
+ else
+ echo "cannot find $file"
+ endif
+end
+
+# Link $hlib/libc/iraf.h to <iraf.h>. This is needed not only to compile C
+# source files in iraf, but also to define $iraf, $host, etc. for iraf tasks.
+
+echo "---------------- Check Symbolic Links -----------------"
+set file1 = /usr/include/iraf.h
+set file2 = $iraf/unix/hlib/libc/iraf.h
+
+if (-e $file1) then
+ if ("`$LS -l $file1 | grep $file2`" != "") then
+ echo "symbolic link $file1 is ok"
+ else
+ echo "link $file1 exists but is invalid; unlink $file1"
+ if ($exec == yes) then
+ rm -f $file1
+ endif
+ echo "make symbolic link $file1 -> $file2"
+ if ($exec == yes) then
+ rm -f $file1
+ ln -s $file2 $file1
+ endif
+ endif
+else
+ echo "make symbolic link $file1 -> $file2"
+ if ($exec == yes) then
+ rm -f $file1
+ ln -s $file2 $file1
+ endif
+endif
+
+# Establish the remaining symbolic links to HSI tasks.
+echo "directory $lbin"
+cd $lbin
+
+foreach i ($LINKFILES)
+ # Locate the file to be linked to.
+ set file1 = $i:r
+ foreach j ($BINDIRS)
+ set file2 = $j/$file1.csh
+ if (-e $file2) then
+ break
+ endif
+ set file2 = $j/$i
+ if (-e $file2) then
+ break
+ endif
+ end
+
+ # Verify or set the link.
+ if ("`$LS $file1`" == "$file1") then
+ if ("`$LS -l $file1 | grep $file2`" != "") then
+ echo "symbolic link $file1 is ok"
+ else
+ echo "link $file1 exists but is invalid; unlink $file1"
+ if ($exec == yes) then
+ rm -f $file1
+ endif
+ echo "make symbolic link $file1 -> $file2"
+ if ($exec == yes) then
+ rm -f $file1
+ ln -s $file2 $file1
+ endif
+ endif
+ else
+ echo "make symbolic link $file1 -> $file2"
+ if ($exec == yes) then
+ rm -f $file1
+ ln -s $file2 $file1
+ endif
+ endif
+end
+
+# Mark the system update time.
+echo 'touch hlib$utime'
+if ($exec == yes) then
+ touch $hlib/utime
+endif
+
+#exit 0 # COMMENT OUT FOR SUN/IRAF
+
+# SUN/IRAF specific stuff.
+# ------------------------------
+
+if ($mach == linux || $mach == redhat || $mach == suse || \
+ $mach == freebsd || $mach == sunos || $mach == linuxppc) then
+ set pciraf = yes
+else
+ set pciraf = no
+endif
+
+# If PC-IRAF only do X.
+if ($pciraf == yes) then
+ goto xconfig
+endif
+
+# Install custom suntools (GTERM and IMTOOL).
+
+if ("`grep Release.4 /etc/motd`" != "" || `mach` == "i386") then
+ set SUNOS4 = yes
+else
+ set SUNOS4 = no
+endif
+
+echo ""
+echo "------------ Custom Suntools Installation -------------"
+
+if ($SUNOS4 == "yes") then
+ # SunOS 4.0 and later versions.
+ # Install GTERM and IMTOOL executables in /usr/bin.
+ # ----------------------------------
+
+ # Get the path to the user bin directory.
+ set usrbin = /usr/bin
+ if ($mach != `mach`) then
+ echo -n "/usr/bin directory for machine type $mach ($usrbin): "
+ set usrbin = "$<"
+ if ("$usrbin" == "") then
+ set usrbin = "$usrbin"
+ endif
+ endif
+
+ # Install the executables.
+ cd $usrbin
+ foreach i (gterm imtool)
+ set file2 = $hbin/$i.e
+ # Check if installed executable, if any, is up to date.
+ if (-e $i) then
+ rm -f $TEMP.[12] >& /dev/null
+ size $i > $TEMP.1; size $file2 > $TEMP.2
+ cmp -s $TEMP.1 $TEMP.2
+ if ($status || "`find $file2 -newer $i -print`" != "") then
+ set uptodate = no
+ else
+ set uptodate = yes
+ endif
+ rm $TEMP.[12]
+ else
+ set uptodate = no
+ endif
+
+ # Update file if necessary.
+ if ($uptodate == no) then
+ echo "copy $file2 to $usrbin/$i"
+ if (-e $file2) then
+ if ($exec == yes) then
+ if (-e $i) then
+ rm -f $i
+ endif
+ cp $file2 $i
+ endif
+ else
+ echo "file $file2 not found"
+ endif
+ else
+ echo "installed version of $i is up to date"
+ endif
+ end
+
+ # Add entries for GTERM and IMTOOL to rootmenu file, if necessary.
+ set file = /usr/lib/rootmenu
+ if ("`grep gterm $file`" != "" &&\
+ "`grep imtool $file`" != "") then
+ echo "standard rootmenu file is ok (has gterm, imtool entries)"
+ else
+ echo -n "add entries for gterm and imtool to rootmenu file? (yes): "
+ set temp = "$<"
+
+ if ("$temp" == "" || "$temp" == "y" || "$temp" == "yes") then
+ (rm -f $TEMP; rm -f $TEMP.s) >& /dev/null
+ if ("`grep gterm $file`" == "") then
+ echo '7a\' > $TEMP.s
+ echo '"Gterm" gterm' >> $TEMP.s
+ sed -f $TEMP.s < $file > $TEMP
+ PUT $TEMP $file; rm $TEMP.s
+ endif
+ if ("`grep imtool $file`" == "") then
+ echo '8a\' > $TEMP.s
+ echo '"ImTool" imtool' >> $TEMP.s
+ sed -f $TEMP.s < $file > $TEMP
+ PUT $TEMP $file; rm $TEMP.s
+ endif
+ endif
+ endif
+
+else
+ # Install the custom Suntools - SunOS versions prior to 4.0.
+ # -------------------------------
+ echo -n "install custom suntools (GTERM, IMTOOL)? (yes): "; set temp = "$<"
+ if (! ("$temp" == "" || "$temp" == "y" || "$temp" == "yes")) then
+ echo "suntools installation skipped"
+ exit 0
+ endif
+
+ # The custom suntools executable is upwards compatible with standard
+ # suntools. If the answer to the query below is yes, the new executable
+ # replaces /usr/bin/suntools, which is renamed /usr/bin/suntools.BAK.
+ # If the answer is no, GTERM and IMTOOL will be linked to the uninstalled
+ # IRAF version of suntools, $iraf/local/suntools, which will work, but
+ # runtime memory requirements will be 800 Kb or so greater than otherwise.
+ # The main reason one would not want to use the IRAF /usr/bin/suntools is
+ # if a custom version of /usr/bin/suntools containing tools not in the
+ # standard SUN version of suntools has already been installed.
+
+ echo -n "install custom version of /usr/bin/suntools executable? (yes): "
+ set temp = "$<"
+
+ if ("$temp" == "" || "$temp" == "y" || "$temp" == "yes") then
+ # Install custom version of /usr/bin/suntools, and make links for gterm
+ # and imtool in /usr/bin, like the other suntools.
+
+ set usrbin = /usr/bin
+ set file2 = $hbin/suntools.e
+
+ if ($mach != `mach`) then
+ echo -n "/usr/bin directory for machine type $mach ($usrbin): "
+ set usrbin = "$<"
+ if ("$usrbin" == "") then
+ set usrbin = "$usrbin"
+ endif
+ endif
+
+ set suntools = $usrbin/suntools
+
+ # Check if installed executable is up to date.
+ rm -f $TEMP.[12] >& /dev/null
+ size $suntools > $TEMP.1; size $file2 > $TEMP.2
+ cmp -s $TEMP.1 $TEMP.2
+ if ($status || "`find $file2 -newer $suntools -print`" != "") then
+ set uptodate = no
+ else
+ set uptodate = yes
+ endif
+
+ rm $TEMP.[12]
+
+ # Update file if necessary.
+ if ($uptodate == no) then
+ if (! -e $suntools.BAK) then
+ echo "rename standard suntools ($suntools) to $suntools.BAK"
+ if ($exec == yes) then
+ cp $suntools $suntools.BAK
+ endif
+ endif
+
+ echo "copy $file2 to $suntools"
+ if (-e $file2) then
+ if ($exec == yes) then
+ cp $file2 temp
+ mv -f temp $suntools
+ endif
+ else
+ echo "file $file2 not found"
+ endif
+ else
+ echo "installed version of $suntools is up to date"
+ endif
+
+ # Add entries for GTERM and IMTOOL to rootmenu file, if necessary.
+ set file = /usr/lib/rootmenu
+ if ("`grep gterm $file`" != "" &&\
+ "`grep imtool $file`" != "") then
+ echo "standard rootmenu file is ok (has gterm, imtool entries)"
+ else
+ echo -n "add entries for gterm and imtool to rootmenu file? (yes): "
+ set temp = "$<"
+
+ if ("$temp" == "" || "$temp" == "y" || "$temp" == "yes") then
+ (rm -f $TEMP; rm -f $TEMP.s) >& /dev/null
+ if ("`grep gterm $file`" == "") then
+ echo '7a\' > $TEMP.s
+ echo '"Gterm" gterm' >> $TEMP.s
+ sed -f $TEMP.s < $file > $TEMP
+ PUT $TEMP $file; rm $TEMP.s
+ endif
+ if ("`grep imtool $file`" == "") then
+ echo '8a\' > $TEMP.s
+ echo '"ImTool" imtool' >> $TEMP.s
+ sed -f $TEMP.s < $file > $TEMP
+ PUT $TEMP $file; rm $TEMP.s
+ endif
+ endif
+ endif
+
+ # Make sure GTERM and IMTOOL links are in place.
+ echo "directory $usrbin"
+ cd $usrbin
+
+ # Note that the following is resolved at runtime, hence the /usr/bin
+ # is correct regardless of the physical directory.
+ set exe = /usr/bin/suntools
+
+ foreach i (gterm imtool)
+ if (-e $lbin/$i) then
+ echo "remove old symbolic link $lbin/$i"
+ if ($exec == yes) then
+ /bin/rm -f $lbin/$i
+ endif
+ endif
+ if (-e $i) then
+ if ("`$LS -l $i | grep $exe`" != "") then
+ echo "symbolic link $i is ok"
+ else
+ echo "link $i exists but is invalid; unlink it"
+ if ($exec == yes) then
+ /bin/rm -f $i
+ endif
+ echo "make symbolic link '$i' pointing to $exe"
+ if ($exec == yes) then
+ /bin/ln -s $exe $i
+ endif
+ endif
+ else
+ echo "make symbolic link '$i' pointing to $exe"
+ if ($exec == yes) then
+ ln -s $exe $i
+ endif
+ endif
+ end
+
+ else
+ # Do not install custom suntools and rootmenu files; leave these in
+ # $hbin, but add links to $lbin for gterm, and imtool, pointing to
+ # local iraf version of suntools.
+
+ set file = $hbin/suntools.e
+ if (! -e $file) then
+ echo "custom suntools executable $file is missing!!"
+ endif
+
+ echo "directory $lbin"
+ cd $lbin
+ foreach i (gterm imtool)
+ if (-e /usr/bin/$i) then
+ echo "remove old symbolic link /usr/bin/$i"
+ if ($exec == yes) then
+ rm -f /usr/bin/$i
+ endif
+ endif
+ if (-e $i) then
+ if ("`$LS -l $i | grep iraf`" != "") then
+ echo "symbolic link $i is ok"
+ else
+ echo "link $i exists but is invalid; unlink it"
+ if ($exec == yes) then
+ rm -f $i
+ endif
+ echo "make symbolic link '$i' -> $file"
+ if ($exec == yes) then
+ ln -s $file $i
+ endif
+ endif
+ else
+ echo "make symbolic link '$i' -> $file"
+ if ($exec == yes) then
+ ln -s $file $i
+ endif
+ endif
+ end
+ endif
+endif
+
+# Common code for GTERM/IMTOOL installation.
+# -------------------------------------------
+
+xconfig:
+
+# Make sure special device entries for the IMTOOL display server exist
+# in /dev.
+
+foreach i (/dev/imt1i /dev/imt1o)
+ if (-e $i) then
+ echo "imtool device entry $i is ok"
+ else
+ echo "make device entry $i for imtool"
+ if ($exec == yes) then
+ if ($mach == linux || $mach == redhat || $mach == suse || \
+ $mach == linuxppc) then
+ mknod $i p
+ else if ($mach == freebsd) then
+ mkfifo $i
+ else
+ mknod $i p
+ endif
+ chmod 777 $i
+ endif
+ endif
+end
+
+# The old /dev/imt1 entry is now just a link to /dev/imt1o.
+set file = /dev/imt1
+if (-e $file) then
+ if ("`$LS -l $file | grep imt1o`" != "") then
+ echo "imtool device entry $file is ok"
+ else
+ echo "make device entry $file for imtool"
+ if ($exec == yes) then
+ rm -f $file
+ ln -s /dev/imt1o $file
+ endif
+ endif
+else
+ echo "make device entry $file for imtool"
+ if ($exec == yes) then
+ ln -s /dev/imt1o $file
+ endif
+endif
+
+# Install the default IMTOOLRC frame buffer configuration file. The path
+# /usr/local/lib path hardwired in to imtool and cannot easily be changed, but
+# if installation of the default imtoolrc in this directory is not possible,
+# the file can be installed in each imtool user's login directory as .imtoolrc,
+# or the environment variable IMTOOLRC can be defined in each imtool user's
+# .login or .cshrc to define the path to the file.
+
+# Verify imtoolrc link.
+cd /usr/local/lib
+set file1 = imtoolrc
+set file2 = $iraf/dev/imtoolrc
+
+# Verify or set the link.
+if ("`$LS $file1`" == "$file1") then
+ if ("`$LS -l $file1 | grep $file2`" != "") then
+ echo "symbolic link $file1 is ok"
+ else
+ echo "link $file1 exists but is invalid; unlink $file1"
+ if ($exec == yes) then
+ rm -f $file1
+ endif
+ echo "make symbolic link $file1 -> $file2"
+ if ($exec == yes) then
+ rm -f $file1
+ ln -s $file2 $file1
+ endif
+ endif
+else
+ echo "make symbolic link $file1 -> $file2"
+ if ($exec == yes) then
+ rm -f $file1
+ ln -s $file2 $file1
+ endif
+endif
+
+# Make sure there are entries in the the termcap and graphcap files for xgterm
+# and imtool.
+
+set temp = `grep -l xgterm $iraf/dev/termcap | grep -v "^#"`
+if ("$temp" == "") then
+ echo "WARNING: no xgterm entry in termcap file"
+else
+ echo "termcap file is ok (contains xgterm entry)"
+endif
+
+set gcok = yes
+set temp = `grep -l xgterm $iraf/dev/graphcap | grep -v "^#"`
+if ("$temp" == "") then
+ echo "WARNING: no xgterm entry in graphcap file"
+ set gcok = no
+endif
+set temp = `grep -l imtool $iraf/dev/graphcap | grep -v "^#"`
+if ("$temp" == "") then
+ echo "WARNING: no imtool entry in graphcap file"
+ set gcok = no
+endif
+if ($gcok == yes) then
+ echo "graphcap file is ok (contains xgterm, imtool entries)"
+endif
+
+# Install or update the XGTERM and XIMTOOL manual pages.
+if ($pciraf == no && -e /usr/man/mann) then
+ cd /usr/man/mann
+ set src = $iraf/unix/x11
+
+ foreach i (xgterm ximtool)
+ set file1 = $i.n
+ set file2 = $src/$i.man
+
+ # Install or update the manpage source file.
+ if (-e $file1) then
+ cmp -s $file1 $file2
+ if ($status) then
+ echo "update $i manual page"
+ if ($exec == yes) then
+ cp $file2 $file1
+ endif
+ else
+ echo "$i manual page is up to date"
+ endif
+ else
+ echo "install $i manual page in /usr/man/mann"
+ if ($exec == yes) then
+ cp $file2 $file1
+ endif
+ endif
+
+ # Rerun catman if necessary.
+ if (-e /usr/man/catl) then
+ set file2 = /usr/man/catl/$i.n
+ if (! -e $file2 || "`find $file1 -newer $file2 -print`" != "") then
+ echo "rerun catman on section n"
+ if ($exec == yes) then
+ /usr/etc/catman n
+ endif
+ endif
+ endif
+ end
+endif
diff --git a/unix/hlib/install.port b/unix/hlib/install.port
new file mode 100755
index 00000000..dea23d01
--- /dev/null
+++ b/unix/hlib/install.port
@@ -0,0 +1,943 @@
+#!/bin/csh -f
+#
+# INSTALL -- Install IRAF on a UNIX/IRAF host. May also be run after the
+# initial installation as a consistency check to verify that all the necessary
+# links and file permissions are still in place (e.g., after updating UNIX
+# itself).
+#
+# Usage: install [-n] [-r rootdir] [-i imdir] [-b localbindir] \
+# [-R oldroot] [-I oldimdir] [-u username (e.g., 'iraf')]
+# [-m mach (e.g., 'sparc', 'mc68020') ]
+#
+# Example:
+# % su
+# % cd $hlib
+# % install -n
+# % install
+#
+# If run with no arguments, INSTALL will make an informed guess and prompt
+# with this value; type <return> to accept the value, or enter a new value.
+#
+# Use "install -n" to do a dry run to see what the would be done, without
+# actually modifying the host system and IRAF configuration files. To do the
+# actual installation one must be superuser, but anyone can run "install -n"
+# to see what it would do.
+# ----------------------------------------------------------------------------
+
+unset noclobber
+unalias cd cp cmp echo ln mv rm sed set grep ls chmod chown pwd touch
+set path = (/sbin /usr/sbin /bin /usr/bin /usr/ucb /etc /usr/etc)
+
+#set echo
+
+set W = '\([ "]\)' # match a blank, tab, or "
+set TEMP = "/tmp/I_temp"
+set exec = yes
+set user = iraf
+set LS = /bin/ls
+alias PUT "mv -f \!*; chown $user \!$ "
+
+# Determine platform architecture.
+if (-f /etc/redhat-release) then
+ if (`uname -m` == "ppc") then
+ set mach = linuxppc
+ else
+ set mach = redhat
+ endif
+else
+ set mach = `uname -s | tr '[A-Z]' '[a-z]'`
+endif
+
+if ($mach == "darwin") then
+ set mach = macosx
+endif
+
+if ($?iraf == 1) then
+ if (! -d $iraf) then
+ setenv iraf ""
+ endif
+else
+ setenv iraf ""
+endif
+
+set imdir = ""
+set lbin = ""
+set o_iraf = ""
+set o_imdir = ""
+
+# Process any command line arguments.
+while ("$1" != "")
+ switch ("$1")
+ case -n: # no execute
+ alias PUT "diff \!$ \!^; rm -f $TEMP"
+ set exec = no
+ breaksw
+ case -b: # set local bin directory (unix)
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-b <localbindir>' switch"
+ exit 1
+ endif
+ set lbin = "$1"
+ breaksw
+ case -i: # set imdir directory
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-i <imdir>' switch"
+ exit 1
+ endif
+ set imdir = "$1"
+ breaksw
+ case -m: # set machine type
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-m <mach>' switch"
+ exit 1
+ endif
+ set mach = "$1"
+ breaksw
+ case -r: # set root directory
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-r <irafdir>' switch"
+ exit 1
+ endif
+ setenv iraf "$1"
+ breaksw
+ case -I: # set old imdir directory
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-I <o_imdir>' switch"
+ exit 1
+ endif
+ set o_imdir = "$1"
+ breaksw
+ case -R: # set old root directory
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-R <o_iraf>' switch"
+ exit 1
+ endif
+ set o_iraf = "$1"
+ breaksw
+ case -u: # set user name for iraf, e.g, 'iraf'
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-u <irafowner>' switch"
+ exit 1
+ endif
+ set user = "$1"
+ breaksw
+ default:
+ echo "install: unknown argument $1"
+ breaksw
+ endsw
+
+ if ("$2" == "") then
+ break
+ else
+ shift
+ endif
+end
+
+# Set $iraf, the new root directory for iraf. The system must already have
+# been read in at this directory (e.g., /usr/iraf), but we assume that no
+# files have yet been modified.
+
+if ("$iraf" == "") then
+ # Make a guess at what the new root directory is.
+ set d_iraf = ""
+ if (-d /iraf/iraf) then
+ set d_iraf = /iraf/iraf
+ else if (-d /iraf) then
+ set d_iraf = /iraf
+ else if (-d /usr/iraf) then
+ set d_iraf = /usr/iraf
+ else
+ # Search for a directory /u*/iraf.
+ foreach i (/u*)
+ if (-d $i/iraf) then
+ set d_iraf = "$i/iraf"
+ break
+ endif
+ end
+ # Search for a directory /*/iraf.
+ if ("$d_iraf" == "") then
+ foreach i (/*)
+ if (-d $i/iraf) then
+ set d_iraf = "$i/iraf"
+ break
+ endif
+ end
+ endif
+ endif
+
+ if ("$d_iraf" == "") then
+ set d_iraf = /usr/iraf
+ endif
+else
+ set d_iraf = $iraf
+endif
+
+# If the given directory doesn't exist, compute the root directory relative
+# to $iraf/unix/hlib (our current directory, presumably).
+
+if (! -d $d_iraf) then
+ set d_iraf = `(cd ../..;cwd)`
+endif
+
+set d_iraf = `echo $iraf | sed -e 's+/\(["]*\)$+\1+'`
+echo -n "new iraf root directory ($d_iraf): "
+setenv iraf "$<"
+if ("$iraf" == "") then
+ setenv iraf "$d_iraf"
+endif
+
+# Get the values of o_iraf and o_imdir from the current mkiraf.csh file, if
+# not already otherwise defined.
+
+cd $iraf/unix/hlib
+set WS = '[ ]'
+if ("$o_iraf" == "") then
+ set o_iraf =\
+ `grep "^set$WS*iraf" mkiraf.csh | sed -e "s+^.*=$WS*++" | sed -e 's+"++g'`
+endif
+if ("$o_imdir" == "") then
+ set o_imdir =\
+ `grep "^set$WS*imdir" mkiraf.csh | sed -e "s+^.*=$WS*++" | sed -e 's+"++g'`
+endif
+
+# Strip any trailing / in the pathname to be matched, so that the trailing /,
+# if present, will be LEFT in the occurrence of the path in the file.
+
+set o_iraf = `echo $o_iraf | sed -e 's+/\(["]*\)$+\1+'`
+set o_imdir = `echo $o_imdir | sed -e 's+/\(["]*\)$+\1+'`
+
+# Set $imdir, the default user image storage root directory. Each user imdir
+# will be a subdirectory of this directory by default, when MKIRAF is run.
+# Since bulk image data can consume hundreds of megabytes of disk space, IRAF
+# likes to keep such data on a public scratch device, which is probably not
+# backed up, which has a short file expiration interval, and possibly which
+# has been configured (newfs/mkfs) with a large block size for fast seq. i/o.
+
+if ("$imdir" == "") then
+ if (-d $o_imdir) then
+ set d_imdir = $o_imdir
+ else if (-d /tmp2) then
+ set d_imdir = /tmp2/iraf
+ else if (-d /tmp3) then
+ set d_imdir = /tmp3/iraf
+ else if (-d /usr/tmp) then
+ set d_imdir = /usr/tmp
+ else
+ set d_imdir = /tmp
+ endif
+
+ echo -n "default root image storage directory ($d_imdir): "
+ set imdir = "$<"
+ if ("$imdir" == "") then
+ set imdir = "$d_imdir"
+ endif
+endif
+
+# Get UNIX directory where HSI commands (links) are to be installed, if not
+# set on command line. IRAF will only install a very few new commands in this
+# directory. Ideally it should be a directory on the standard user $path,
+# so that users do not have to customize their . files just to run IRAF.
+
+if ("$lbin" == "") then
+ # Look around and come up with a likely candidate directory.
+ if (-d /usr/local/bin) then
+ set d_lbin = /usr/local/bin
+ else if (-d /local/bin) then
+ set d_lbin = /local/bin
+ else
+ set d_lbin = /usr/bin
+ endif
+
+ echo -n "local unix commands directory ($d_lbin): "
+ set lbin = "$<"
+ if ("$lbin" == "") then
+ set lbin = "$d_lbin"
+ endif
+endif
+
+# Verify the machine type.
+echo "install iraf for machine type $mach"
+# Document the old root pathnames.
+echo "old iraf root = $o_iraf, old imdir = $o_imdir"
+
+# Cannot have iraf and imdir the same.
+if ($iraf == $imdir) then
+ echo "imdir cannot be the same as the iraf root, try again"
+ exit 1
+endif
+
+# The following is partially system dependent.
+# ------------------------------------------
+# Set the BINDIRS pathnames - directories where the HSI executables go.
+set host = "$iraf/unix"
+set hbin = "$iraf/unix/bin.$mach" # "mach" is SUN specific!!
+set hlib = "$iraf/unix/hlib"
+set fbin = "$iraf/bin"
+
+# Replace any // by /.
+set host = `echo $host | sed -e "s+//+/+g"`
+set hbin = `echo $hbin | sed -e "s+//+/+g"`
+set fbin = `echo $fbin | sed -e "s+//+/+g"`
+set hlib = `echo $hlib | sed -e "s+//+/+g"`
+
+# Strip any trailing /.
+set host = `echo $host | sed -e 's+/\(["]*\)$+\1+'`
+set hbin = `echo $hbin | sed -e 's+/\(["]*\)$+\1+'`
+set fbin = `echo $fbin | sed -e 's+/\(["]*\)$+\1+'`
+set hlib = `echo $hlib | sed -e 's+/\(["]*\)$+\1+'`
+set BINDIRS = "$hbin $hlib $fbin"
+
+# The following file lists are partially system dependent.
+set PATHFILES = "mkiraf.csh libc/iraf.h cl.csh"
+set MODEFILES = "mkiraf.csh mkmlist.csh generic.e mkpkg.e rmbin.e rmfiles.e rpp.e rtar.e wtar.e xc.e xpp.e xyacc.e sgidispatch.e $hbin/sgi2*.e cl.csh mkfloat.csh fc.csh $host/reboot"
+set LINKFILES = "cl.e generic.e mkiraf.csh mkmlist.csh mkpkg.e rmbin.e rmfiles.e rtar.e sgidispatch.e wtar.e rpp.e xpp.e xyacc.e xc.e"
+# ------------------------------------------
+
+# Begin installation.
+# ------------------
+
+echo "installing iraf at $iraf, imdir=$imdir, lbindir=$lbin"
+echo -n "proceed with installation? (yes): "; set temp = $<
+if (! ($temp == "" || $temp == "y" || $temp == "yes")) then
+ echo "installation terminated"
+ exit 1
+else
+ echo ""
+endif
+
+# Create the root imdir as a public scratch directory, if not already created.
+if (! -d $imdir) then
+ echo "creating root imdir at $imdir"
+ if ($exec == yes) then
+ mkdir $imdir; chmod 777 $imdir
+ endif
+else
+ if ($exec == yes) then
+ chmod 777 $imdir
+ endif
+ echo "default root imdir is ok"
+endif
+
+# Allow deletion of files in /tmp - needed for multiuser tape allocation.
+if ($exec == yes) then
+ echo "set delete permission on /tmp"
+ chmod -t /tmp
+endif
+
+# Initialize permissions of tape devices.
+if ($exec == yes) then
+ echo "set mode 0666 on magtape devices to permit tape allocation"
+ chmod 666 /dev/*st[0-4]*
+endif
+
+# Set owner=root for the device allocation task, alloc.e.
+
+#foreach i ($BINDIRS)
+# if (-e $i/alloc.e) then
+# if ("`$LS -l $i/alloc.e | grep 'rwsr-.*root'`" != "") then
+# echo "device allocation task $i/alloc.e is ok"
+# else
+# echo "chown $i/alloc.e to root, set uid modebit"
+# if ($exec == yes) then
+# chown 0 $i/alloc.e
+# chmod u+s $i/alloc.e
+# endif
+# endif
+# break
+# else
+# echo "cannot find alloc.e"
+# endif
+#end
+
+# Edit the $iraf pathname in the .login file for user 'iraf'.
+cd $iraf/local
+
+if (-e .login) then
+ rm -f $TEMP >& /dev/null
+ sed -e "s+$W$o_iraf+\1$iraf+" .login > $TEMP
+ cmp -s .login $TEMP
+ if ($status) then
+ echo "updating $iraf/local/.login"
+ PUT $TEMP .login
+ else
+ echo "iraf .login file is ok"
+ rm -f $TEMP
+ endif
+else
+ echo "cannot find the iraf .login file"
+endif
+
+# Edit the $iraf and $imdir pathnames in the mkiraf.csh and libc/iraf.h files.
+cd $iraf/unix/hlib
+
+foreach i ($PATHFILES)
+ if (-e $i) then
+ rm -f $TEMP >& /dev/null
+ sed -e "s+$W$o_iraf+\1$iraf+" $i |\
+ sed -e "s+$W$o_imdir+\1$imdir+" > $TEMP
+ cmp -s $i $TEMP
+ if ($status) then
+ echo "updating $i"
+ PUT $TEMP $i
+ if ($exec == yes) then
+ chmod 755 $i
+ endif
+ else
+ echo "$i is ok"
+ rm -f $TEMP
+ endif
+ else
+ echo "cannot find $i"
+ endif
+end
+
+# Set default file permissions for the executable files in the BINDIRS,
+# in case the file mode has somehow been changed, e.g., in a file restore
+# or copy.
+
+echo "--------------- Check File Permissions ----------------"
+
+#foreach i ($MODEFILES)
+# set file = $i
+# if (! -e $file) then
+# foreach j ($BINDIRS)
+# if (-e $j/$i) then
+# set file = $j/$i
+# break
+# endif
+# end
+# endif
+#
+# if (-e $file) then
+# if ("`$LS -l $file | grep '^.rwxr.xr.x'`" != "") then
+# echo "file $file exists with the correct permissions"
+# else
+# echo "set mode for $file to 0755"
+# if ($exec == yes) then
+# chmod 755 $file
+# endif
+# endif
+# else
+# echo "cannot find $file"
+# endif
+#end
+
+# Link $hlib/libc/iraf.h to <iraf.h>. This is needed not only to compile C
+# source files in iraf, but also to define $iraf, $host, etc. for iraf tasks.
+
+echo "---------------- Check Symbolic Links -----------------"
+set file1 = /usr/include/iraf.h
+set file2 = $iraf/unix/hlib/libc/iraf.h
+
+if (-e $file1) then
+ if ("`$LS -l $file1 | grep $file2`" != "") then
+ echo "symbolic link $file1 is ok"
+ else
+ echo "link $file1 exists but is invalid; unlink $file1"
+ if ($exec == yes) then
+ rm -f $file1
+ endif
+ echo "make symbolic link $file1 -> $file2"
+ if ($exec == yes) then
+ rm -f $file1
+ ln -s $file2 $file1
+ endif
+ endif
+else
+ echo "make symbolic link $file1 -> $file2"
+ if ($exec == yes) then
+ rm -f $file1
+ ln -s $file2 $file1
+ endif
+endif
+
+# Establish the remaining symbolic links to HSI tasks.
+echo "directory $lbin"
+cd $lbin
+
+foreach i ($LINKFILES)
+ # Locate the file to be linked to.
+ set file1 = $i:r
+ foreach j ($BINDIRS)
+ set file2 = $j/$file1.csh
+ if (-e $file2) then
+ break
+ endif
+ set file2 = $j/$i
+ if (-e $file2) then
+ break
+ endif
+ end
+
+ # Verify or set the link.
+ if ("`$LS $file1`" == "$file1") then
+ if ("`$LS -l $file1 | grep $file2`" != "") then
+ echo "symbolic link $file1 is ok"
+ else
+ echo "link $file1 exists but is invalid; unlink $file1"
+ if ($exec == yes) then
+ rm -f $file1
+ endif
+ echo "make symbolic link $file1 -> $file2"
+ if ($exec == yes) then
+ rm -f $file1
+ ln -s $file2 $file1
+ endif
+ endif
+ else
+ echo "make symbolic link $file1 -> $file2"
+ if ($exec == yes) then
+ rm -f $file1
+ ln -s $file2 $file1
+ endif
+ endif
+end
+
+# Mark the system update time.
+echo 'touch hlib$utime'
+if ($exec == yes) then
+ touch $hlib/utime
+endif
+
+#exit 0 # COMMENT OUT FOR SUN/IRAF
+
+# SUN/IRAF specific stuff.
+# ------------------------------
+
+if ($mach == linux || $mach == redhat || $mach == suse || \
+ $mach == freebsd || $mach == sunos || $mach == linuxppc) then
+ set pciraf = yes
+else
+ set pciraf = no
+endif
+
+# If PC-IRAF only do X.
+if ($pciraf == yes) then
+ goto xconfig
+endif
+
+# Install custom suntools (GTERM and IMTOOL).
+
+if ("`grep Release.4 /etc/motd`" != "" || `mach` == "i386") then
+ set SUNOS4 = yes
+else
+ set SUNOS4 = no
+endif
+
+echo ""
+echo "------------ Custom Suntools Installation -------------"
+
+if ($SUNOS4 == "yes") then
+ # SunOS 4.0 and later versions.
+ # Install GTERM and IMTOOL executables in /usr/bin.
+ # ----------------------------------
+
+ # Get the path to the user bin directory.
+ set usrbin = /usr/bin
+ if ($mach != `mach`) then
+ echo -n "/usr/bin directory for machine type $mach ($usrbin): "
+ set usrbin = "$<"
+ if ("$usrbin" == "") then
+ set usrbin = "$usrbin"
+ endif
+ endif
+
+ # Install the executables.
+ cd $usrbin
+ foreach i (gterm imtool)
+ set file2 = $hbin/$i.e
+ # Check if installed executable, if any, is up to date.
+ if (-e $i) then
+ rm -f $TEMP.[12] >& /dev/null
+ size $i > $TEMP.1; size $file2 > $TEMP.2
+ cmp -s $TEMP.1 $TEMP.2
+ if ($status || "`find $file2 -newer $i -print`" != "") then
+ set uptodate = no
+ else
+ set uptodate = yes
+ endif
+ rm $TEMP.[12]
+ else
+ set uptodate = no
+ endif
+
+ # Update file if necessary.
+ if ($uptodate == no) then
+ echo "copy $file2 to $usrbin/$i"
+ if (-e $file2) then
+ if ($exec == yes) then
+ if (-e $i) then
+ rm -f $i
+ endif
+ cp $file2 $i
+ endif
+ else
+ echo "file $file2 not found"
+ endif
+ else
+ echo "installed version of $i is up to date"
+ endif
+ end
+
+ # Add entries for GTERM and IMTOOL to rootmenu file, if necessary.
+ set file = /usr/lib/rootmenu
+ if ("`grep gterm $file`" != "" &&\
+ "`grep imtool $file`" != "") then
+ echo "standard rootmenu file is ok (has gterm, imtool entries)"
+ else
+ echo -n "add entries for gterm and imtool to rootmenu file? (yes): "
+ set temp = "$<"
+
+ if ("$temp" == "" || "$temp" == "y" || "$temp" == "yes") then
+ (rm -f $TEMP; rm -f $TEMP.s) >& /dev/null
+ if ("`grep gterm $file`" == "") then
+ echo '7a\' > $TEMP.s
+ echo '"Gterm" gterm' >> $TEMP.s
+ sed -f $TEMP.s < $file > $TEMP
+ PUT $TEMP $file; rm $TEMP.s
+ endif
+ if ("`grep imtool $file`" == "") then
+ echo '8a\' > $TEMP.s
+ echo '"ImTool" imtool' >> $TEMP.s
+ sed -f $TEMP.s < $file > $TEMP
+ PUT $TEMP $file; rm $TEMP.s
+ endif
+ endif
+ endif
+
+else
+ # Install the custom Suntools - SunOS versions prior to 4.0.
+ # -------------------------------
+ echo -n "install custom suntools (GTERM, IMTOOL)? (yes): "; set temp = "$<"
+ if (! ("$temp" == "" || "$temp" == "y" || "$temp" == "yes")) then
+ echo "suntools installation skipped"
+ exit 0
+ endif
+
+ # The custom suntools executable is upwards compatible with standard
+ # suntools. If the answer to the query below is yes, the new executable
+ # replaces /usr/bin/suntools, which is renamed /usr/bin/suntools.BAK.
+ # If the answer is no, GTERM and IMTOOL will be linked to the uninstalled
+ # IRAF version of suntools, $iraf/local/suntools, which will work, but
+ # runtime memory requirements will be 800 Kb or so greater than otherwise.
+ # The main reason one would not want to use the IRAF /usr/bin/suntools is
+ # if a custom version of /usr/bin/suntools containing tools not in the
+ # standard SUN version of suntools has already been installed.
+
+ echo -n "install custom version of /usr/bin/suntools executable? (yes): "
+ set temp = "$<"
+
+ if ("$temp" == "" || "$temp" == "y" || "$temp" == "yes") then
+ # Install custom version of /usr/bin/suntools, and make links for gterm
+ # and imtool in /usr/bin, like the other suntools.
+
+ set usrbin = /usr/bin
+ set file2 = $hbin/suntools.e
+
+ if ($mach != `mach`) then
+ echo -n "/usr/bin directory for machine type $mach ($usrbin): "
+ set usrbin = "$<"
+ if ("$usrbin" == "") then
+ set usrbin = "$usrbin"
+ endif
+ endif
+
+ set suntools = $usrbin/suntools
+
+ # Check if installed executable is up to date.
+ rm -f $TEMP.[12] >& /dev/null
+ size $suntools > $TEMP.1; size $file2 > $TEMP.2
+ cmp -s $TEMP.1 $TEMP.2
+ if ($status || "`find $file2 -newer $suntools -print`" != "") then
+ set uptodate = no
+ else
+ set uptodate = yes
+ endif
+
+ rm $TEMP.[12]
+
+ # Update file if necessary.
+ if ($uptodate == no) then
+ if (! -e $suntools.BAK) then
+ echo "rename standard suntools ($suntools) to $suntools.BAK"
+ if ($exec == yes) then
+ cp $suntools $suntools.BAK
+ endif
+ endif
+
+ echo "copy $file2 to $suntools"
+ if (-e $file2) then
+ if ($exec == yes) then
+ cp $file2 temp
+ mv -f temp $suntools
+ endif
+ else
+ echo "file $file2 not found"
+ endif
+ else
+ echo "installed version of $suntools is up to date"
+ endif
+
+ # Add entries for GTERM and IMTOOL to rootmenu file, if necessary.
+ set file = /usr/lib/rootmenu
+ if ("`grep gterm $file`" != "" &&\
+ "`grep imtool $file`" != "") then
+ echo "standard rootmenu file is ok (has gterm, imtool entries)"
+ else
+ echo -n "add entries for gterm and imtool to rootmenu file? (yes): "
+ set temp = "$<"
+
+ if ("$temp" == "" || "$temp" == "y" || "$temp" == "yes") then
+ (rm -f $TEMP; rm -f $TEMP.s) >& /dev/null
+ if ("`grep gterm $file`" == "") then
+ echo '7a\' > $TEMP.s
+ echo '"Gterm" gterm' >> $TEMP.s
+ sed -f $TEMP.s < $file > $TEMP
+ PUT $TEMP $file; rm $TEMP.s
+ endif
+ if ("`grep imtool $file`" == "") then
+ echo '8a\' > $TEMP.s
+ echo '"ImTool" imtool' >> $TEMP.s
+ sed -f $TEMP.s < $file > $TEMP
+ PUT $TEMP $file; rm $TEMP.s
+ endif
+ endif
+ endif
+
+ # Make sure GTERM and IMTOOL links are in place.
+ echo "directory $usrbin"
+ cd $usrbin
+
+ # Note that the following is resolved at runtime, hence the /usr/bin
+ # is correct regardless of the physical directory.
+ set exe = /usr/bin/suntools
+
+ foreach i (gterm imtool)
+ if (-e $lbin/$i) then
+ echo "remove old symbolic link $lbin/$i"
+ if ($exec == yes) then
+ /bin/rm -f $lbin/$i
+ endif
+ endif
+ if (-e $i) then
+ if ("`$LS -l $i | grep $exe`" != "") then
+ echo "symbolic link $i is ok"
+ else
+ echo "link $i exists but is invalid; unlink it"
+ if ($exec == yes) then
+ /bin/rm -f $i
+ endif
+ echo "make symbolic link '$i' pointing to $exe"
+ if ($exec == yes) then
+ /bin/ln -s $exe $i
+ endif
+ endif
+ else
+ echo "make symbolic link '$i' pointing to $exe"
+ if ($exec == yes) then
+ ln -s $exe $i
+ endif
+ endif
+ end
+
+ else
+ # Do not install custom suntools and rootmenu files; leave these in
+ # $hbin, but add links to $lbin for gterm, and imtool, pointing to
+ # local iraf version of suntools.
+
+ set file = $hbin/suntools.e
+ if (! -e $file) then
+ echo "custom suntools executable $file is missing!!"
+ endif
+
+ echo "directory $lbin"
+ cd $lbin
+ foreach i (gterm imtool)
+ if (-e /usr/bin/$i) then
+ echo "remove old symbolic link /usr/bin/$i"
+ if ($exec == yes) then
+ rm -f /usr/bin/$i
+ endif
+ endif
+ if (-e $i) then
+ if ("`$LS -l $i | grep iraf`" != "") then
+ echo "symbolic link $i is ok"
+ else
+ echo "link $i exists but is invalid; unlink it"
+ if ($exec == yes) then
+ rm -f $i
+ endif
+ echo "make symbolic link '$i' -> $file"
+ if ($exec == yes) then
+ ln -s $file $i
+ endif
+ endif
+ else
+ echo "make symbolic link '$i' -> $file"
+ if ($exec == yes) then
+ ln -s $file $i
+ endif
+ endif
+ end
+ endif
+endif
+
+# Common code for GTERM/IMTOOL installation.
+# -------------------------------------------
+
+xconfig:
+
+# Make sure special device entries for the IMTOOL display server exist
+# in /dev.
+
+foreach i (/dev/imt1i /dev/imt1o)
+ if (-e $i) then
+ echo "imtool device entry $i is ok"
+ else
+ echo "make device entry $i for imtool"
+ if ($exec == yes) then
+ if ($mach == linux || $mach == redhat || $mach == suse || \
+ $mach == linuxppc) then
+ mknod $i p
+ else if ($mach == freebsd) then
+ mkfifo $i
+ else
+ mknod $i p
+ endif
+ chmod 777 $i
+ endif
+ endif
+end
+
+# The old /dev/imt1 entry is now just a link to /dev/imt1o.
+set file = /dev/imt1
+if (-e $file) then
+ if ("`$LS -l $file | grep imt1o`" != "") then
+ echo "imtool device entry $file is ok"
+ else
+ echo "make device entry $file for imtool"
+ if ($exec == yes) then
+ rm -f $file
+ ln -s /dev/imt1o $file
+ endif
+ endif
+else
+ echo "make device entry $file for imtool"
+ if ($exec == yes) then
+ ln -s /dev/imt1o $file
+ endif
+endif
+
+# Install the default IMTOOLRC frame buffer configuration file. The path
+# /usr/local/lib path hardwired in to imtool and cannot easily be changed, but
+# if installation of the default imtoolrc in this directory is not possible,
+# the file can be installed in each imtool user's login directory as .imtoolrc,
+# or the environment variable IMTOOLRC can be defined in each imtool user's
+# .login or .cshrc to define the path to the file.
+
+# Verify imtoolrc link.
+cd /usr/local/lib
+set file1 = imtoolrc
+set file2 = $iraf/dev/imtoolrc
+
+# Verify or set the link.
+if ("`$LS $file1`" == "$file1") then
+ if ("`$LS -l $file1 | grep $file2`" != "") then
+ echo "symbolic link $file1 is ok"
+ else
+ echo "link $file1 exists but is invalid; unlink $file1"
+ if ($exec == yes) then
+ rm -f $file1
+ endif
+ echo "make symbolic link $file1 -> $file2"
+ if ($exec == yes) then
+ rm -f $file1
+ ln -s $file2 $file1
+ endif
+ endif
+else
+ echo "make symbolic link $file1 -> $file2"
+ if ($exec == yes) then
+ rm -f $file1
+ ln -s $file2 $file1
+ endif
+endif
+
+# Make sure there are entries in the the termcap and graphcap files for xgterm
+# and imtool.
+
+set temp = `grep -l xgterm $iraf/dev/termcap | grep -v "^#"`
+if ("$temp" == "") then
+ echo "WARNING: no xgterm entry in termcap file"
+else
+ echo "termcap file is ok (contains xgterm entry)"
+endif
+
+set gcok = yes
+set temp = `grep -l xgterm $iraf/dev/graphcap | grep -v "^#"`
+if ("$temp" == "") then
+ echo "WARNING: no xgterm entry in graphcap file"
+ set gcok = no
+endif
+set temp = `grep -l imtool $iraf/dev/graphcap | grep -v "^#"`
+if ("$temp" == "") then
+ echo "WARNING: no imtool entry in graphcap file"
+ set gcok = no
+endif
+if ($gcok == yes) then
+ echo "graphcap file is ok (contains xgterm, imtool entries)"
+endif
+
+# Install or update the XGTERM and XIMTOOL manual pages.
+if ($pciraf == no && -e /usr/man/mann) then
+ cd /usr/man/mann
+ set src = $iraf/unix/x11
+
+ foreach i (xgterm ximtool)
+ set file1 = $i.n
+ set file2 = $src/$i.man
+
+ # Install or update the manpage source file.
+ if (-e $file1) then
+ cmp -s $file1 $file2
+ if ($status) then
+ echo "update $i manual page"
+ if ($exec == yes) then
+ cp $file2 $file1
+ endif
+ else
+ echo "$i manual page is up to date"
+ endif
+ else
+ echo "install $i manual page in /usr/man/mann"
+ if ($exec == yes) then
+ cp $file2 $file1
+ endif
+ endif
+
+ # Rerun catman if necessary.
+ if (-e /usr/man/catl) then
+ set file2 = /usr/man/catl/$i.n
+ if (! -e $file2 || "`find $file1 -newer $file2 -print`" != "") then
+ echo "rerun catman on section n"
+ if ($exec == yes) then
+ /usr/etc/catman n
+ endif
+ endif
+ endif
+ end
+endif
diff --git a/unix/hlib/iraf.h b/unix/hlib/iraf.h
new file mode 120000
index 00000000..2ad69d48
--- /dev/null
+++ b/unix/hlib/iraf.h
@@ -0,0 +1 @@
+iraf32.h \ No newline at end of file
diff --git a/unix/hlib/iraf32.h b/unix/hlib/iraf32.h
new file mode 100644
index 00000000..e2d29a8c
--- /dev/null
+++ b/unix/hlib/iraf32.h
@@ -0,0 +1,162 @@
+# IRAF.H -- Basic IRAF Definitions. These definitions are automatically
+# included in every SPP program. See also lib$mach.h.
+
+# Generic constants.
+define ARB 999999999
+define ERR -1
+define EOF -2
+define BOF -3
+define EOT -4
+define BOFL BOF
+define EOFL EOF
+define EOS 0
+define NO 0
+define YES 1
+define OK 0
+define NULL 0
+
+# File I/O.
+define READ_ONLY 1 # file access modes
+define READ_WRITE 2
+define WRITE_ONLY 3
+define APPEND 4
+define NEW_FILE 5
+define TEMP_FILE 6
+define NEW_COPY 7
+define NEW_IMAGE 5 # nice synonyms for NEW_FILE
+define NEW_STRUCT 5
+define NEW_TAPE 5
+define TEXT_FILE 11 # file types
+define BINARY_FILE 12
+define DIRECTORY_FILE 13
+define STATIC_FILE 14
+define SYMLINK_FILE 15
+define SPOOL_FILE (-2)
+define RANDOM 1 # advice for imagefiles
+define SEQUENTIAL 2
+define CLIN 1 # STDIN of the ptask
+define CLOUT 2 # STDOUT of the ptask
+define STDIN 3 # pseudo files (MAXOFILES + i)
+define STDOUT 4
+define STDERR 5
+define STDGRAPH 6
+define STDIMAGE 7
+define STDPLOT 8
+
+
+# Language Datatypes.
+define SZ_BOOL 2 # sizes of the primitive types in chars
+define SZ_CHAR 1
+define SZ_SHORT 1
+define SZ_INT 2
+define SZ_LONG 2
+define SZ_REAL 2
+define SZ_DOUBLE 4
+define SZ_COMPLEX 4
+define SZ_POINTER 2
+define SZ_STRUCT 2
+define SZ_USHORT 1
+define SZ_FNAME 255 # max chars in a file name
+define SZ_PATHNAME 511 # OS dependent file names
+define SZ_LINE 1023 # max chars in a line
+define SZ_COMMAND 2047 # max size command block
+
+define SZ_MII_SHORT 1 # size of MII data in SPP chars
+define SZ_MII_LONG 2
+define SZ_MII_REAL 2
+define SZ_MII_DOUBLE 4
+define SZ_MII_INT SZ_MII_LONG
+
+define SZ_INT32 2 # FIXED -- Do not change!
+define SZ_LONG32 2
+define SZ_STRUCT32 2
+
+define TY_BOOL 1 # codes for type arguments, sizeof
+define TY_CHAR 2
+define TY_SHORT 3
+define TY_INT 4
+define TY_LONG 5
+define TY_REAL 6
+define TY_DOUBLE 7
+define TY_COMPLEX 8
+define TY_POINTER 9
+define TY_STRUCT 10 # last (regular) type code
+define TY_USHORT 11 # for image i/o
+define TY_UBYTE 12 # (special) for image i/o
+
+# Indefinite values.
+define INDEFS (-32767)
+define INDEFL (-2147483647)
+define INDEFI INDEFL
+define INDEFR 1.6e38
+define INDEFD 1.6d308
+define INDEFX (INDEF,INDEF)
+define INDEF INDEFR
+
+define IS_INDEFS (($1)==INDEFS)
+define IS_INDEFL (($1)==INDEFL)
+define IS_INDEFI (($1)==INDEFI)
+define IS_INDEFR (($1)==INDEFR)
+define IS_INDEFD (($1)==INDEFD)
+define IS_INDEFX (real($1)==INDEFR)
+define IS_INDEF (($1)==INDEFR)
+
+# Useful macros for pointer conversions in data structures.
+define P2C ((($1)-1)*2+1)
+define P2S ((($1)-1)*2+1)
+define P2I ($1)
+define P2L ($1)
+define P2R ($1)
+define P2D ((($1)-1)/2+1)
+define P2X ((($1)-1)/2+1)
+
+define P2P ($1) # no-op
+
+# Map the following onto host Fortran intrinsic functions if possible,
+# else onto the andi, ori, etc. portable VOS functions.
+
+# define and andi
+# define or ori
+# define xor xori
+# define not noti
+
+# Name conversions (to avoid conflicts with host system). Must agree with
+# defines in hlib$libc/xnames.h.
+
+define access xfaccs
+define calloc xcallc
+define close xfcloe
+define delete xfdele
+define error xerror
+define flush xffluh
+define getc xfgetc
+define getchar xfgetr
+define malloc xmallc
+define mfree xmfree
+define mktemp xmktep
+define note xfnote
+define open xfopen
+define poll xfpoll
+define printf xprinf
+define putc xfputc
+define putchar xfputr
+define qsort xqsort
+define read xfread
+define realloc xrealc
+define seek xfseek
+define sizeof xsizef
+define strcat xstrct
+define strcmp xstrcp
+define strcpy xstrcy
+define strlen xstrln
+define ungetc xfungc
+define write xfwrie
+define fatal xfatal
+define fchdir xfchdr
+define fscan xfscan
+define getopt xgtopt
+define getpid xgtpid
+define getuid xgtuid
+define rename xfrnam
+define reset xreset
+define scan xxscan
diff --git a/unix/hlib/iraf64.h b/unix/hlib/iraf64.h
new file mode 100644
index 00000000..31198fdc
--- /dev/null
+++ b/unix/hlib/iraf64.h
@@ -0,0 +1,164 @@
+# IRAF.H -- Basic IRAF Definitions. These definitions are automatically
+# included in every SPP program. See also lib$mach.h.
+
+# Generic constants.
+define ARB 999999999
+define ERR -1
+define EOF -2
+define BOF -3
+define EOT -4
+define BOFL BOF
+define EOFL EOF
+define EOS 0
+define NO 0
+define YES 1
+define OK 0
+define NULL 0
+
+# File I/O.
+define READ_ONLY 1 # file access modes
+define READ_WRITE 2
+define WRITE_ONLY 3
+define APPEND 4
+define NEW_FILE 5
+define TEMP_FILE 6
+define NEW_COPY 7
+define NEW_IMAGE 5 # nice synonyms for NEW_FILE
+define NEW_STRUCT 5
+define NEW_TAPE 5
+define TEXT_FILE 11 # file types
+define BINARY_FILE 12
+define DIRECTORY_FILE 13
+define STATIC_FILE 14
+define SYMLINK_FILE 15
+define SPOOL_FILE (-2)
+define RANDOM 1 # advice for imagefiles
+define SEQUENTIAL 2
+define CLIN 1 # STDIN of the ptask
+define CLOUT 2 # STDOUT of the ptask
+define STDIN 3 # pseudo files (MAXOFILES + i)
+define STDOUT 4
+define STDERR 5
+define STDGRAPH 6
+define STDIMAGE 7
+define STDPLOT 8
+
+
+# Language Datatypes.
+define SZ_BOOL 4 # sizes of the primitive types in chars
+define SZ_CHAR 1
+define SZ_SHORT 1
+define SZ_INT 4
+define SZ_LONG 4
+define SZ_REAL 2
+define SZ_DOUBLE 4
+define SZ_COMPLEX 4
+define SZ_POINTER 4
+define SZ_STRUCT 4
+define SZ_USHORT 1
+define SZ_FNAME 511 # max chars in a file name/URL
+define SZ_PATHNAME 511 # OS dependent file names
+define SZ_LINE 1023 # max chars in a line
+define SZ_COMMAND 2047 # max size command block
+
+define TY_BOOL 1 # codes for type arguments, sizeof
+define TY_CHAR 2
+define TY_SHORT 3
+define TY_INT 4
+define TY_LONG 5
+define TY_REAL 6
+define TY_DOUBLE 7
+define TY_COMPLEX 8
+define TY_POINTER 9
+define TY_STRUCT 10 # last (regular) type code
+define TY_USHORT 11 # for image i/o
+define TY_UBYTE 12 # (special) for image i/o
+
+define SZ_MII_SHORT 1 # size of MII data in SPP chars
+define SZ_MII_LONG 2
+define SZ_MII_REAL 2
+define SZ_MII_DOUBLE 4
+define SZ_MII_INT SZ_MII_LONG
+
+define SZ_INT32 2 # FIXED -- Do not change !
+define SZ_LONG32 2
+define SZ_STRUCT32 2
+
+# Indefinite values.
+define INDEFS (-32767)
+define INDEFL (-2147483647)
+#define INDEFL (-9223372036854775807)
+define INDEFI INDEFL
+define INDEFR 1.6e38
+define INDEFD 1.6d308
+define INDEFX (INDEF,INDEF)
+define INDEF INDEFR
+
+define IS_INDEFS (($1)==INDEFS)
+define IS_INDEFL (($1)==INDEFL)
+define IS_INDEFI (($1)==INDEFI)
+define IS_INDEFR (($1)==INDEFR)
+define IS_INDEFD (($1)==INDEFD)
+define IS_INDEFX (real($1)==INDEFR)
+define IS_INDEF (($1)==INDEFR)
+
+# Useful macros for pointer conversions in data structures.
+define P2C ((($1)-1)*4+1)
+define P2S ((($1)-1)*4+1)
+define P2I ($1)
+define P2L ($1)
+define P2B ($1)
+define P2R ((($1)-1)*2+1)
+define P2D ($1)
+define P2X ($1)
+
+define P2P ($1) # no-op
+
+# Map the following onto host Fortran intrinsic functions if possible,
+# else onto the andi, ori, etc. portable VOS functions.
+
+# define and andi
+# define or ori
+# define xor xori
+# define not noti
+
+# Name conversions (to avoid conflicts with host system). Must agree with
+# defines in hlib$libc/xnames.h.
+
+define access xfaccs
+define calloc xcallc
+define close xfcloe
+define delete xfdele
+define error xerror
+define flush xffluh
+define getc xfgetc
+define getchar xfgetr
+define malloc xmallc
+define mfree xmfree
+define mktemp xmktep
+define note xfnote
+define open xfopen
+define poll xfpoll
+define printf xprinf
+define putc xfputc
+define putchar xfputr
+define qsort xqsort
+define read xfread
+define realloc xrealc
+define seek xfseek
+define sizeof xsizef
+define strcat xstrct
+define strcmp xstrcp
+define strcpy xstrcy
+define strlen xstrln
+define ungetc xfungc
+define write xfwrie
+define fatal xfatal
+define fchdir xfchdr
+define fscan xfscan
+define getopt xgtopt
+define getpid xgtpid
+define getuid xgtuid
+define rename xfrnam
+define reset xreset
+define scan xxscan
diff --git a/unix/hlib/irafarch.csh b/unix/hlib/irafarch.csh
new file mode 100755
index 00000000..a998aa01
--- /dev/null
+++ b/unix/hlib/irafarch.csh
@@ -0,0 +1,270 @@
+#!/bin/csh -f
+#
+# IRAFARCH -- Determine or set the current platform architecture parameters.
+#
+# Usage: irafarch
+# irafarch -set [<arch>] [opts]
+# irafarch [ -hsi | -nbits | -pipe | -tapecap | -tape ]
+#
+# -mach print the iraf architecture name [default]
+# -hsi print the HSI arch
+# -nbits print number of bits in an int (32 or 64)
+# -pipe does platform support display fifo pipes?
+# -tapecap does platform require tapecap changes?
+# -tape does platform support tape drives?
+# -shlib does platform support iraf shared libs?
+#
+# -actual print actual architecture name regardless of IRAFARCH
+# -set <arch> manually reset the iraf environment architecture
+#
+# ----------------------------------------------------------------------------
+
+
+unset noclobber
+onintr cleanup_
+unalias cd cp cmp echo ln mv rm sed set grep ls chmod chown pwd touch sort which
+
+setenv path "(/sbin /usr/sbin /bin /usr/bin /usr/5bin /usr/ucb /etc /usr/etc $path /usr/local/bin /opt/local/bin /local/bin /home/local/bin /usr/openwin/bin /usr/X11R6/bin /usr/X11/bin)"
+
+# set echo
+
+
+##############################################################################
+# START OF MACHDEP DEFINITIONS.
+##############################################################################
+
+set VERSION = "V2.16.1"
+set hmach = "INDEF"
+set nbits = 32
+set pipes = 1
+set shlibs = 0
+set tapecaps = 0
+set tapes = 1
+
+set debug = 0
+
+
+#----------------------------------
+# Determine platform architecture.
+#----------------------------------
+
+if (-e /usr/bin/uname) then
+ set uname_cmd = /usr/bin/uname
+else if (-e /bin/uname) then
+ set uname_cmd = /bin/uname
+else
+ WARNING "No 'uname' command found to determine architecture."
+ exit 1
+endif
+
+setenv UNAME `$uname_cmd | tr '[A-Z]' '[a-z]'`
+if ($UNAME == "sunos") then
+ setenv UNAME_M `$uname_cmd -m | cut -c2- | tr '[A-Z]' '[a-z]'`
+else
+ setenv UNAME_M `$uname_cmd -m | tr '[A-Z]' '[a-z]' | tr ' ' '_'`
+endif
+setenv OSVERSION `$uname_cmd -r | cut -c1`
+
+
+
+# Allow an IRAFARCH definition in the environment to override.
+if ($#argv == 1 && "$1" == "-actual") then
+ setenv MNAME $UNAME
+ setenv MNAME_M $UNAME_M
+ unsetenv IRAFARCH
+
+else if ($#argv == 1 && "$1" == "-current") then
+ setenv MNAME `/bin/ls -lad $iraf/bin | \
+ awk '{ printf ("%s\n", $11) }' | \
+ sed -e 's/bin.//g'`
+ setenv MNAME_M $UNAME_M
+ setenv IRAFARCH $MNAME
+ goto repeat_
+
+else
+ if ($#argv == 0) then
+ if ($?IRAFARCH) then
+ repeat_:
+ setenv MNAME $IRAFARCH
+ setenv MNAME_M $UNAME_M
+ else
+ setenv MNAME $UNAME
+ setenv MNAME_M $UNAME_M
+ endif
+
+ else
+ if ($#argv != 0 && "$1" == "-set") then
+ setenv MNAME $2
+ setenv MNAME_M $2
+ else
+ setenv MNAME $UNAME
+ setenv MNAME_M $UNAME_M
+ endif
+ endif
+endif
+
+
+# Set some common defaults for most platforms
+set shlib = 0 # no shared lib support
+set nbits = 32 # 32-bit architecture
+set tapecaps = 1 # platform supports tapecaps
+set tapes = 1 # platform support tape drives
+set pipes = 1 # supports display fifo pipes
+
+set pciraf = 1 # PC-IRAF system
+set suniraf = 0 # SUN-IRAF system
+
+
+if ($debug == 1) then # DEBUG PRINT
+ if ($?IRAFARCH) then
+ echo " IRAFARCH = $IRAFARCH"
+ endif
+ echo " MNAME = $MNAME"
+ echo " MNAME_M = $MNAME_M"
+ echo "OSVERSION = $OSVERSION"
+endif
+
+# Determine parameters for each architecture.
+switch ($MNAME)
+ case darwin: # Mac OS X
+ case ipad:
+ case macosx:
+ case macintel:
+ if ($?IRAFARCH) then
+ set mach = "$IRAFARCH"
+ set hmach = "$IRAFARCH"
+ if ("$mach" == "macintel") then
+ set nbits = 64
+ endif
+ else
+ if ("$MNAME_M" == "x86_64") then # 64-bit
+ set mach = "macintel"
+ set hmach = "macintel"
+ set nbits = 64
+ else if ($MNAME_M == "x86" || $MNAME_M == "i386" || $MNAME_M == "ppc" || $MNAME_M == "power_macintosh") then
+ set mach = "macosx"
+ set hmach = "macosx"
+ set nbits = 32
+ else
+ set mach = "ipad" # iOS Device
+ set hmach = "ipad"
+ set nbits = 32
+ endif
+ endif
+ set tapecaps = 0
+ set tapes = 0
+ set pipes = 0
+ breaksw
+
+ case redhat:
+ case linux:
+ case linux64:
+ if ($?IRAFARCH) then
+ set mach = "$IRAFARCH"
+ set hmach = "$IRAFARCH"
+ if ("$mach" == "linux64") then
+ set nbits = 64
+ endif
+ else
+ if ("$MNAME_M" == "x86_64") then # Linux x86_64
+ set mach = "linux64"
+ set hmach = "linux64"
+ set nbits = 64
+ else # Linux
+ set mach = "linux"
+ set hmach = "linux"
+ set nbits = 32
+ endif
+ endif
+ breaksw
+
+ case ssun:
+ case sparc:
+ case sunos:
+ set tapecaps = 1
+ if ($UNAME_M != "86pc") then
+ set suniraf = 1
+ set pciraf = 0
+ if ($OSVERSION == 5) then # Sparc Solaris
+ set mach = "ssun"
+ set hmach = "ssol"
+ else # Sparc SunOS 4.x
+ set mach = "sparc"
+ set hmach = "sparc"
+ endif
+ else
+ set mach = "sunos" # Intel Solaris x86
+ set hmach = "sunos"
+ set tapecaps = 0
+ set tapes = 0
+ set pipes = 0
+ endif
+ breaksw
+
+ case freebsd: # FreeBSD
+ set mach = "freebsd"
+ set hmach = "freebsd"
+ set tapecaps = 0
+ set tapes = 0
+ set pipes = 0
+ breaksw
+
+ default:
+ # We don't want to be limited by the CYGWIN version numbering so
+ # look for a truncated match here before punting.
+ set os_mach = `echo $UNAME | cut -c1-6`
+ if ("$os_mach" == "cygwin") then
+ set mach = "cygwin"
+ set hmach = "cygwin"
+ set shlib = 0
+ set tapecaps = 0
+ set tapes = 0
+ set pipes = 0
+ breaksw
+
+ else
+ echo "Unable to configure platform IRAFARCH='$MNAME'."
+ exit 1
+ endif
+endsw
+
+##############################################################################
+# END OF MACHDEP DEFINITIONS.
+##############################################################################
+
+
+if ($#argv == 0) then
+ echo $mach
+else
+
+ if ("$1" == "-mach") then
+ echo $mach
+ else if ("$1" == "-actual") then
+ echo $mach
+ else if ("$1" == "-current") then
+ echo $mach
+ else if ("$1" == "-hsi") then
+ echo $hmach
+ else if ("$1" == "-nbits") then
+ echo $nbits
+ else if ("$1" == "-pipes") then
+ echo $pipes
+ else if ("$1" == "-tapecap") then
+ echo $tapecaps
+ else if ("$1" == "-tapes") then
+ echo $tapes
+ else if ("$1" == "-shlib") then
+ echo $shlib
+
+ else if ("$1" == "-set") then
+ if ("$2" != "") then
+ setenv IRAFARCH $2
+ shift ; shift
+ endif
+ goto repeat_
+ else
+ echo "Invalid option '"$1"'"
+ endif
+endif
+
+exit 0
diff --git a/unix/hlib/irafarch.sh b/unix/hlib/irafarch.sh
new file mode 100755
index 00000000..f42b61d2
--- /dev/null
+++ b/unix/hlib/irafarch.sh
@@ -0,0 +1,270 @@
+#!/bin/bash
+#
+# IRAFARCH -- Determine or set the current platform architecture parameters.
+#
+# Usage: irafarch
+# irafarch -set [<arch>] [opts]
+# irafarch [ -hsi | -nbits | -pipe | -tapecap | -tape ]
+#
+# -mach print the iraf architecture name [default]
+# -hsi print the HSI arch
+# -nbits print number of bits in an int (32 or 64)
+# -pipe does platform support display fifo pipes?
+# -tapecap does platform require tapecap changes?
+# -tape does platform support tape drives?
+# -shlib does platform support iraf shared libs?
+#
+# -actual print actual architecture name regardless of IRAFARCH
+# -set <arch> manually reset the iraf environment architecture
+#
+# ----------------------------------------------------------------------------
+
+
+export PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/5bin:/usr/ucb:/etc:/usr/etc:$PATH:/usr/local/bin:/opt/local/bin:/local/bin:/home/local/bin
+
+
+##############################################################################
+# START OF MACHDEP DEFINITIONS.
+##############################################################################
+
+hmach="INDEF"
+nbits=32
+pipes=1
+shlibs=0
+tapecaps=0
+tapes=1
+
+debug=0
+
+# Get the Utility aliases.
+# Initialize the $iraf and environment.
+if [ -z "$iraf" ]; then
+ bindir="`dirname $0`" # get iraf root directory
+ iraf=${bindir%/*}/../
+fi
+source ${iraf}/unix/hlib/util.sh
+
+
+#----------------------------------
+# Determine platform architecture.
+#----------------------------------
+
+if [ -e /usr/bin/uname ]; then
+ uname_cmd=/usr/bin/uname
+elif [ -e /bin/uname ]; then
+ uname_cmd=/bin/uname
+else
+ WARNING "No 'uname' command found to determine architecture."
+ exit 1
+fi
+
+export UNAME=`$uname_cmd | tr '[A-Z]' '[a-z]'`
+if [ $UNAME == "sunos" ]; then
+ export UNAME_M=`$uname_cmd -m | cut -c2- | tr '[A-Z]' '[a-z]'`
+else
+ export UNAME_M=`$uname_cmd -m | tr '[A-Z]' '[a-z]' | tr ' ' '_'`
+fi
+export OSVERSION=`$uname_cmd -r | cut -c1`
+
+
+# Allow an IRAFARCH definition in the environment to override.
+
+_setmname() {
+ export MNAME=$1
+ export MNAME_M=$2
+}
+
+if (( $# > 1 )); then
+ if [ "$1" == "-actual" ]; then
+ _setmname $UNAME $UNAME_M
+ unset IRAFARCH
+
+ elif [ "$1" == "-current" ]; then
+ export MNAME=`/bin/ls -lad $iraf/bin | \
+ awk '{ printf ("%s\n", $11) }' | \
+ sed -e 's/bin.//g'`
+ export MNAME_M=$UNAME_M
+ export IRAFARCH=$MNAME
+ _setmname $IRAFARCH $UNAME_M
+ fi
+else
+ if (( $# == 0 )); then
+ if [ -n "$IRAFARCH" ]; then
+ _setmname $IRAFARCH $UNAME_M
+ else
+ _setmname $UNAME $UNAME_M
+ fi
+ else
+ if [ "$1" == "-set" ]; then
+ _setmname $2 $2
+ else
+ _setmname $UNAME $UNAME_M
+ fi
+ fi
+fi
+
+
+# Set some common defaults for most platforms
+shlib=0 # no shared lib support
+nbits=32 # 32-bit architecture
+tapecaps=1 # platform supports tapecaps
+tapes=1 # platform support tape drives
+pipes=1 # supports display fifo pipes
+
+pciraf=1 # PC-IRAF system
+suniraf=0 # SUN-IRAF system
+
+if (( $debug == 1 )); then # DEBUG PRINT
+ if [ -n "$IRAFARCH" ]; then
+ ECHO " IRAFARCH=$IRAFARCH"
+ fi
+ ECHO " MNAME=$MNAME"
+ ECHO " MNAME_M=$MNAME_M"
+ ECHO "OSVERSION=$OSVERSION"
+fi
+
+
+# Determine parameters for each architecture.
+case "$MNAME" in
+ "darwin"|"ipad"|"macosx"|"macintel") # Mac OS X
+ if [ -n "$IRAFARCH" ]; then
+ mach="$IRAFARCH"
+ hmach="$IRAFARCH"
+ if [ "$mach" == "macintel" ]; then
+ nbits=64
+ fi
+ else
+ if [ "$MNAME_M" == "x86_64" ]; then # 64-bit
+ mach="macintel"
+ hmach="macintel"
+ nbits=64
+ elif [ "$MNAME_M" == "x86" -o "$MNAME_M" == "i386" ]; then
+ mach="macosx"
+ hmach="macosx"
+ nbits=32
+ else
+ mach="ipad" # iOS Device
+ hmach="ipad"
+ nbits=32
+ fi
+ fi
+ tapecaps=0
+ tapes=0
+ pipes=0
+ ;;
+
+ "redhat"|"linux"|"linux64")
+ if [ -n "$IRAFARCH" ]; then
+ mach="$IRAFARCH"
+ hmach="$IRAFARCH"
+ if [ "$mach" == "linux64" ]; then
+ nbits=64
+ fi
+ else
+ if [ "$MNAME_M" == "x86_64" ]; then # Linux x86_64
+ mach="linux64"
+ hmach="linux64"
+ nbits=64
+ else # Linux
+ mach="linux"
+ hmach="linux"
+ nbits=32
+ fi
+ fi
+ ;;
+
+ "ssun"|"sparc"|"sunos")
+ tapecaps=1
+ if [ $UNAME_M != "86pc" ]; then
+ suniraf=1
+ pciraf=0
+ if [ $OSVERSION == 5 ]; then # Sparc Solaris
+ mach= "ssun"
+ hmach= "ssol"
+ else # Sparc SunOS 4.x
+ mach="sparc"
+ hmach="sparc"
+ fi
+ else
+ mach="sunos" # Intel Solaris x86
+ hmach="sunos"
+ tapecaps=0
+ tapes=0
+ pipes=0
+ fi
+ ;;
+
+ "freebsd") # FreeBSD
+ mach="freebsd"
+ hmach="freebsd"
+ tapecaps=0
+ tapes=0
+ pipes=0
+ ;;
+
+ *)
+ # We don't want to be limited by the CYGWIN version numbering so
+ # look for a truncated match here before punting.
+ os_mach=`ECHO $UNAME | cut -c1-6`
+ if [ "$os_mach" == "cygwin" ]; then
+ mach="cygwin"
+ hmach="cygwin"
+ shlib=0
+ tapecaps=0
+ tapes=0
+ pipes=0
+ else
+ ECHO 'Unable to determine platform architecture for ($MNAME).'
+ exit 1
+ fi
+ ;;
+esac
+
+##############################################################################
+# END OF MACHDEP DEFINITIONS.
+##############################################################################
+
+# Handle any command-line options.
+if (( $# == 0 )); then
+ ECHO $mach
+else
+ case "$1" in
+ "-mach")
+ ECHO $mach
+ ;;
+ "-actual")
+ ECHO $mach
+ ;;
+ "-current")
+ ECHO $mach
+ ;;
+ "-hsi")
+ ECHO $hmach
+ ;;
+ "-nbits")
+ ECHO $nbits
+ ;;
+ "-pipes")
+ ECHO $pipes
+ ;;
+ "-tapecap")
+ ECHO $tapecaps
+ ;;
+ "-tapes")
+ ECHO $tapes
+ ;;
+ "-shlib")
+ ECHO $shlib
+ ;;
+ "-set")
+ if [ -n $2 ]; then
+ export IRAFARCH=$2
+ fi
+ _setmname $IRAFARCH $UNAME_M
+ ;;
+ *)
+ ECHO 'Invalid option '$1
+ ;;
+ esac
+fi
+
diff --git a/unix/hlib/irafuser.csh b/unix/hlib/irafuser.csh
new file mode 100755
index 00000000..4ae5bb93
--- /dev/null
+++ b/unix/hlib/irafuser.csh
@@ -0,0 +1,214 @@
+#!/bin/csh -f
+#
+# IRAF definitions for the UNIX/csh user. The additional variables iraf$ and
+# home$ should be defined in the user's .login file.
+
+
+set old_method = 0
+
+if ($old_method == 1) then
+
+setenv OS_MACH `uname -s | tr '[A-Z]' '[a-z]' | cut -c1-6`
+
+if (`uname -m` == "x86_64") then
+ if ($OS_MACH == "darwin") then
+ setenv MACH darwin
+ setenv IRAFARCH darwin
+ else
+ setenv MACH linux64
+ setenv IRAFARCH linux64
+ endif
+else if (-f /etc/redhat-release) then
+ setenv MACH redhat
+else
+ setenv MACH `uname -s | tr '[A-Z]' '[a-z]'`
+endif
+
+if ($MACH == "darwin") then
+ # Let the IRAFARCH override the machine to support cross compilation.
+ if ($?IRAFARCH) then
+ if ("$IRAFARCH" == "macosx") then
+ setenv MACH macosx
+ else if ("$IRAFARCH" == "macintel") then
+ setenv MACH macintel
+ endif
+ else
+ if ("`uname -m`" == "i386") then
+ setenv MACH macosx
+ setenv IRAFARCH macosx
+ else if ("`uname -m`" == "x86_64") then
+ setenv MACH macintel
+ setenv IRAFARCH macintel
+ else
+ setenv MACH ipad
+ setenv IRAFARCH ipad
+ endif
+ endif
+else if ($OS_MACH == "cygwin") then
+ setenv MACH cygwin
+endif
+
+else # old_method
+
+ set a = `$iraf/unix/hlib/irafarch.csh`
+ if ($status == 0) then
+ setenv MACH $a
+ setenv IRAFARCH $a
+ else
+ echo "Error: "$a
+ exit 1
+ endif
+
+endif # old_method
+
+
+
+setenv hostid unix
+setenv host ${iraf}unix/
+setenv hlib ${iraf}unix/hlib/
+setenv hbin ${iraf}unix/bin.$MACH/
+setenv tmp /tmp/
+
+# Default to GCC for compilation.
+setenv CC gcc
+setenv F77 $hlib/f77.sh
+setenv F2C $hbin/f2c.e
+setenv RANLIB ranlib
+
+switch ($MACH)
+case freebsd:
+ setenv HSI_CF "-O -DBSD -DPOSIX -w -Wunused -m32"
+ setenv HSI_XF "-Inolibc -/DBSD -w -/Wunused -/m32"
+ setenv HSI_FF "-O -DBLD_KERNEL -m32"
+ setenv HSI_LF "-static -m32 -B/usr/lib32 -L/usr/lib32"
+ setenv HSI_F77LIBS ""
+ setenv HSI_LFLAGS ""
+ setenv HSI_OSLIBS "-lcompat"
+ set mkzflags = "'lflags=-z' -/static"
+ breaksw
+
+case macosx:
+ setenv HSI_CF "-O -DMACOSX -w -Wunused -arch i386 -m32 -mmacosx-version-min=10.4"
+ setenv HSI_XF "-Inolibc -/DMACOSX -w -/Wunused -/m32 -/arch -//i386"
+ setenv HSI_FF "-O -arch i386 -m32 -DBLD_KERNEL -mmacosx-version-min=10.4"
+ setenv HSI_LF "-arch i386 -m32 -mmacosx-version-min=10.4"
+ setenv HSI_F77LIBS ""
+ setenv HSI_LFLAGS ""
+ setenv HSI_OSLIBS ""
+ set mkzflags = "'lflags=-z'"
+ breaksw
+
+case macintel:
+ setenv HSI_CF "-O -DMACOSX -DMACINTEL -DMACH64 -w -Wunused -m64 -g"
+ setenv HSI_XF "-Inolibc -/DMACOSX -/DMACINTEL -w -/Wunused -/DMACH64 -/m64"
+ setenv HSI_FF "-O -m64 -DMACH64 -DBLD_KERNEL"
+ setenv HSI_LF "-m64 -DMACH64"
+ setenv HSI_F77LIBS ""
+ setenv HSI_LFLAGS ""
+ setenv HSI_OSLIBS ""
+ set mkzflags = "'lflags=-z'"
+ breaksw
+
+case ipad:
+ setenv XC_CFLAGS "-I/var/include"
+ setenv HSI_CF "-O -I/var/include -DMACOSX -DMACINTEL -DIPAD -w -Wunused"
+ setenv HSI_XF "-Inolibc -/DMACOSX -/DMACINTEL -/DIPAD -w -/Wunused"
+ setenv HSI_FF "-O -DBLD_KERNEL"
+ setenv HSI_LF ""
+ setenv HSI_F77LIBS ""
+ setenv HSI_LFLAGS ""
+ setenv HSI_OSLIBS ""
+ set mkzflags = "'lflags=-z'"
+ breaksw
+
+case linux64:
+ setenv HSI_CF "-g -DLINUX -DREDHAT -DPOSIX -DSYSV -DLINUX64 -DMACH64 -w -m64"
+ setenv HSI_XF "-g -Inolibc -w -/m64 -/Wunused"
+ setenv HSI_FF "-g -m64 -DBLD_KERNEL"
+ setenv HSI_LF "-m64 "
+ setenv HSI_F77LIBS ""
+ setenv HSI_LFLAGS ""
+ setenv HSI_OSLIBS ""
+ set mkzflags = "'lflags=-Nxz -/Wl,-Bstatic'"
+ breaksw
+
+case linux:
+case redhat:
+ setenv HSI_CF "-O -DLINUX -DREDHAT -DPOSIX -DSYSV -w -m32 -Wunused"
+ setenv HSI_XF "-Inolibc -w -/Wunused -/m32"
+ setenv HSI_FF "-O -DBLD_KERNEL -m32"
+ setenv HSI_LF "-m32"
+ setenv HSI_F77LIBS ""
+ setenv HSI_LFLAGS ""
+ setenv HSI_OSLIBS ""
+ set mkzflags = "'lflags=-Nxz -/Wl,-Bstatic'"
+ breaksw
+
+case sunos:
+ setenv HSI_CF "-O -DSOLARIS -DX86 -DPOSIX -DSYSV -w -Wunused"
+ setenv HSI_XF "-Inolibc -w -/Wunused"
+ setenv HSI_FF "-O"
+ #setenv HSI_LF "-t -Wl,-Bstatic"
+ #setenv HSI_LFLAGS "-t -Wl,-Bstatic"
+ #setenv HSI_OSLIBS \
+ # "-lsocket -lnsl -lintl -Wl,-Bdynamic -ldl -Wl,-Bstatic -lelf"
+ setenv HSI_LF "-t"
+ setenv HSI_F77LIBS ""
+ setenv HSI_LFLAGS "-t"
+ setenv HSI_OSLIBS "-lsocket -lnsl -lintl -ldl -lelf"
+ set mkzflags = "'lflags=-Nxz -/Wl,-Bstatic'"
+ breaksw
+
+case cygwin:
+ setenv HSI_CF "-O -DCYGWIN -DLINUX -DREDHAT -DPOSIX -DSYSV -w -Wunused"
+ setenv HSI_XF "-Inolibc -w -/Wunused -/DCYGWIN"
+ setenv HSI_FF "-O"
+ #setenv HSI_LF "-Wl,-Bstatic"
+ setenv HSI_LF ""
+ setenv HSI_F77LIBS ""
+ setenv HSI_LFLAGS ""
+ setenv HSI_OSLIBS "${iraf}unix/bin.cygwin/libcompat.a"
+ set mkzflags = "'lflags=-Nxz -/Wl,-Bstatic'"
+ breaksw
+
+default:
+ echo 'Warning in hlib$irafuser.csh: unknown platform '"$MACH"
+ exit 1
+ breaksw
+endsw
+
+
+# Prepend a user <iraf.h> file to the compile flags in case we don't
+# install as root.
+#
+setenv HSI_CF "-I${HOME}/.iraf/ $HSI_CF"
+setenv HSI_FF "-I${HOME}/.iraf/ $HSI_FF"
+setenv HSI_LF "-I${HOME}/.iraf/ $HSI_LF"
+setenv HSI_XF "-I${HOME}/.iraf/ $HSI_XF"
+setenv XC_CFLAGS "-I${HOME}/.iraf/"
+
+
+# The following determines whether or not the VOS is used for filename mapping.
+if (-f ${iraf}lib/libsys.a) then
+ setenv HSI_LIBS\
+ "${hlib}libboot.a ${iraf}lib/libsys.a ${iraf}lib/libvops.a ${hlib}libos.a ${hbin}libf2c.a -lm"
+else
+ setenv HSI_CF "$HSI_CF -DNOVOS"
+ setenv HSI_LIBS "${hlib}libboot.a ${hlib}libos.a"
+endif
+
+setenv HSI_LIBS "$HSI_LIBS $HSI_OSLIBS"
+
+alias mkiraf ${hlib}mkiraf.csh
+alias mkmlist ${hlib}mkmlist.csh
+alias mkz ${hbin}mkpkg.e "$mkzflags"
+
+alias edsym ${hbin}edsym.e
+alias generic ${hbin}generic.e
+alias mkpkg ${hbin}mkpkg.e
+alias rmbin ${hbin}rmbin.e
+alias rmfiles ${hbin}rmfiles.e
+alias rtar ${hbin}rtar.e
+alias wtar ${hbin}wtar.e
+alias xc ${hbin}xc.e
+alias xyacc ${hbin}xyacc.e
diff --git a/unix/hlib/irafuser.sh b/unix/hlib/irafuser.sh
new file mode 100755
index 00000000..d71828d8
--- /dev/null
+++ b/unix/hlib/irafuser.sh
@@ -0,0 +1,157 @@
+#!/bin/bash
+#
+# IRAF definitions for the UNIX/bash user. The additional variables iraf$ and
+# home$ should be defined in the user's .login file.
+
+
+export MACH=`$iraf/unix/hlib/irafarch.sh`
+export IRAFARCH=`$iraf/unix/hlib/irafarch.sh`
+
+
+
+export hostid=unix
+export host=${iraf}unix/
+export hlib=${iraf}unix/hlib/
+export hbin=${iraf}unix/bin.$MACH/
+export tmp=/tmp/
+
+# Default to GCC for compilation.
+export CC=gcc
+export F77=$hlib/f77.sh
+export F2C=$hbin/f2c.e
+export RANLIB=ranlib
+
+case "$MACH" in
+ "freebsd")
+ export HSI_CF="-O -DBSD -DPOSIX -Wall -Wunused -m32"
+ export HSI_XF="-Inolibc -/DBSD -w -/Wunused -/m32"
+ export HSI_FF="-O -DBLD_KERNEL -m32"
+ export HSI_LF="-static -m32 -B/usr/lib32 -L/usr/lib32"
+ export HSI_F77LIBS=""
+ export HSI_LFLAGS=""
+ export HSI_OSLIBS="-lcompat"
+ #mkzflags="'lflags=-z' -/static"
+ ;;
+
+ "macosx")
+ export HSI_CF="-O -DMACOSX -Wall -Wunused -arch i386 -m32 -mmacosx-version-min=10.4"
+ export HSI_XF="-Inolibc -/DMACOSX -w -/Wunused -/m32 -/arch -//i386"
+ export HSI_FF="-O -arch i386 -m32 -DBLD_KERNEL -mmacosx-version-min=10.4"
+ export HSI_LF="-arch i386 -m32 -mmacosx-version-min=10.4"
+ export HSI_F77LIBS=""
+ export HSI_LFLAGS=""
+ export HSI_OSLIBS=""
+ #mkzflags="lflags=-z"
+ ;;
+
+ "macintel")
+ export HSI_CF="-O -DMACOSX -DMACINTEL -DMACH64 -Wall -Wunused -m64 -g"
+ export HSI_XF="-Inolibc -/DMACOSX -/DMACINTEL -w -/Wunused -/DMACH64 -/m64"
+ export HSI_FF="-O -m64 -DMACH64 -DBLD_KERNEL"
+ export HSI_LF="-m64 -DMACH64"
+ export HSI_F77LIBS=""
+ export HSI_LFLAGS=""
+ export HSI_OSLIBS=""
+ #mkzflags="lflags=-z"
+ ;;
+
+ "ipad")
+ export XC_CFLAGS="-I/var/include"
+ export HSI_CF="-O -I/var/include -DMACOSX -DMACINTEL -DIPAD -Wall -Wunused"
+ export HSI_XF="-Inolibc -/DMACOSX -/DMACINTEL -/DIPAD -w -/Wunused"
+ export HSI_FF="-O -DBLD_KERNEL"
+ export HSI_LF=""
+ export HSI_F77LIBS=""
+ export HSI_LFLAGS=""
+ export HSI_OSLIBS=""
+ #mkzflags="lflags=-z"
+ ;;
+
+ "linux64")
+ export HSI_CF="-g -DLINUX -DREDHAT -DPOSIX -DSYSV -DLINUX64 -DMACH64 -Wall -m64"
+ export HSI_XF="-g -Inolibc -w -/m64 -/Wunused"
+ export HSI_FF="-g -m64 -DBLD_KERNEL"
+ export HSI_LF="-m64 "
+ export HSI_F77LIBS=""
+ export HSI_LFLAGS=""
+ export HSI_OSLIBS=""
+ #mkzflags="lflags=-Nxz -/Wl,-Bstatic"
+ ;;
+
+ "linux" | "redhat")
+ export HSI_CF="-O -DLINUX -DREDHAT -DPOSIX -DSYSV -w -m32 -Wunused"
+ export HSI_XF="-Inolibc -w -/Wunused -/m32"
+ export HSI_FF="-O -DBLD_KERNEL -m32"
+ export HSI_LF="-m32"
+ export HSI_F77LIBS=""
+ export HSI_LFLAGS=""
+ export HSI_OSLIBS=""
+ #mkzflags="lflags=-Nxz -/Wl,-Bstatic"
+ ;;
+
+ "sunos")
+ export HSI_CF="-O -DSOLARIS -DX86 -DPOSIX -DSYSV -w -Wunused"
+ export HSI_XF="-Inolibc -w -/Wunused"
+ export HSI_FF="-O"
+ #export HSI_LF="-t -Wl,-Bstatic"
+ #export HSI_LFLAGS="-t -Wl,-Bstatic"
+ #export HSI_OSLIBS=\
+ # "-lsocket -lnsl -lintl -Wl,-Bdynamic -ldl -Wl,-Bstatic -lelf"
+ export HSI_LF="-t"
+ export HSI_F77LIBS=""
+ export HSI_LFLAGS="-t"
+ export HSI_OSLIBS="-lsocket -lnsl -lintl -ldl -lelf"
+ #mkzflags="lflags=-Nxz -/Wl,-Bstatic"
+ ;;
+
+ "cygwin")
+ export HSI_CF="-O -DCYGWIN -DLINUX -DREDHAT -DPOSIX -DSYSV -w -Wunused"
+ export HSI_XF="-Inolibc -w -/Wunused -/DCYGWIN"
+ export HSI_FF="-O"
+ #export HSI_LF="-Wl,-Bstatic"
+ export HSI_LF=""
+ export HSI_F77LIBS=""
+ export HSI_LFLAGS=""
+ export HSI_OSLIBS="${iraf}unix/bin.cygwin/libcompat.a"
+ #mkzflags="lflags=-Nxz -/Wl,-Bstatic"
+ ;;
+
+*)
+ echo 'Warning in hlib$irafuser.csh: unknown platform '"$MACH"
+ exit 1
+ ;;
+esac
+
+
+# Prepend a user <iraf.h> file to the compile flags in case we don't
+# install as root.
+#
+export HSI_CF="-I${HOME}/.iraf/ $HSI_CF"
+export HSI_FF="-I${HOME}/.iraf/ $HSI_FF"
+export HSI_LF="-I${HOME}/.iraf/ $HSI_LF"
+export HSI_XF="-I${HOME}/.iraf/ $HSI_XF"
+
+
+# The following determines whether or not the VOS is used for filename mapping.
+if [ -f ${iraf}lib/libsys.a ]; then
+ export HSI_LIBS="${hlib}libboot.a ${iraf}lib/libsys.a ${iraf}lib/libvops.a ${hlib}libos.a ${hbin}libf2c.a -lm"
+else
+ export HSI_CF="$HSI_CF -DNOVOS"
+ export HSI_LIBS="${hlib}libboot.a ${hlib}libos.a"
+fi
+
+export HSI_LIBS="$HSI_LIBS $HSI_OSLIBS"
+
+alias mkiraf=${hlib}mkiraf.csh
+alias mkmlist=${hlib}mkmlist.csh
+#alias mkz=${hbin}mkpkg.e "$mkzflags"
+
+alias edsym=${hbin}edsym.e
+alias generic=${hbin}generic.e
+alias mkpkg=${hbin}mkpkg.e
+alias rmbin=${hbin}rmbin.e
+alias rmfiles=${hbin}rmfiles.e
+alias rtar=${hbin}rtar.e
+alias wtar=${hbin}wtar.e
+alias xc=${hbin}xc.e
+alias xyacc=${hbin}xyacc.e
diff --git a/unix/hlib/knet.h b/unix/hlib/knet.h
new file mode 100644
index 00000000..f1555162
--- /dev/null
+++ b/unix/hlib/knet.h
@@ -0,0 +1,93 @@
+# KNET.H -- Include in source files which access the IRAF kernel if network
+# capabilities are desired. This include file should be permanently referenced
+# in such source files. If a system is to be configured without networking
+# capabilities, define KNET to be false and comment out the remaining defines
+# before compilation of the system libraries.
+
+define KNET true
+
+define zardbf kardbf
+define zardgd kardgd
+define zardlp kardlp
+define zardpl kardpl
+define zardpr kardpr
+define zardsf kardsf
+define zawrbf kawrbf
+define zawrgd kawrgd
+define zawrlp kawrlp
+define zawrpl kawrpl
+define zawrpr kawrpr
+define zawrsf kawrsf
+define zawtbf kawtbf
+define zawtgd kawtgd
+define zawtlp kawtlp
+define zawtpl kawtpl
+define zawtpr kawtpr
+define zawtsf kawtsf
+define zclcpr kclcpr
+define zcldir kcldir
+define zcldpr kcldpr
+define zclsbf kclsbf
+define zclsgd kclsgd
+define zclslp kclslp
+define zclspl kclspl
+define zclspr kclspr
+define zclssf kclssf
+define zclstx kclstx
+define zclsty kclsty
+define zdvall kdvall
+define zdvown kdvown
+define zfacss kfacss
+define zfaloc kfaloc
+define zfchdr kfchdr
+define zfdele kfdele
+define zfgcwd kfgcwd
+define zfinfo kfinfo
+define zflstx kflstx
+define zflsty kflsty
+define zfmkcp kfmkcp
+define zfmkdr kfmkdr
+define zfpath kfpath
+define zfprot kfprot
+define zfrnam kfrnam
+define zfrmdr kfrmdr
+define zfsubd kfsubd
+define zfutim kfutim
+define zfxdir kfxdir
+define zgettx kgettx
+define zgetty kgetty
+define zgfdir kgfdir
+define zintpr kintpr
+define znottx knottx
+define znotty knotty
+define zopcpr kopcpr
+define zopdir kopdir
+define zopdpr kopdpr
+define zopnbf kopnbf
+define zopngd kopngd
+define zopnlp kopnlp
+define zopnpl kopnpl
+define zopnpr kopnpr
+define zopnsf kopnsf
+define zopntx kopntx
+define zopnty kopnty
+define zoscmd koscmd
+define zputtx kputtx
+define zputty kputty
+define zsektx ksektx
+define zsekty ksekty
+define zsttbf ksttbf
+define zsttgd ksttgd
+define zsttlp ksttlp
+define zsttpl ksttpl
+define zsttpr ksttpr
+define zsttsf ksttsf
+define zstttx kstttx
+define zsttty ksttty
+define zzclmt kzclmt
+define zzopmt kzopmt
+define zzrdmt kzrdmt
+define zzrwmt kzrwmt
+define zzstmt kzstmt
+define zzwrmt kzwrmt
+define zzwtmt kzwtmt
diff --git a/unix/hlib/libboot.a b/unix/hlib/libboot.a
new file mode 120000
index 00000000..3083e005
--- /dev/null
+++ b/unix/hlib/libboot.a
@@ -0,0 +1 @@
+../bin/libboot.a \ No newline at end of file
diff --git a/unix/hlib/libc/README b/unix/hlib/libc/README
new file mode 100644
index 00000000..a95c47eb
--- /dev/null
+++ b/unix/hlib/libc/README
@@ -0,0 +1,25 @@
+LIBC (C library) include files
+
+ ctype character classes, conversions
+ error c_erract actions
+ finfo c_finfo data structure
+ fset FIO set/stat parameter
+ knames external kernel names
+ libc must be included by all files which use libc
+ math UNIX math functions
+ spp SPP language definitions
+ stdio UNIX standard i/o
+ xnames SPP external names
+ xwhen c_xwhen (exception handling)
+ kernel kernel constants, tables
+ protect file protection
+ prtype process types
+ setjmp non-local goto
+ zfstat FIO driver file status codes
+
+The file "iraf.h" is referenced as <iraf.h> in IRAF C source files, and is used
+to load all other IRAF/LIBC C header files via "#define import_XXX" defines in
+these files. In order for the C compiler to find <iraf.h>, one should either
+[1] add the directory $hlib/libc to the list of directories to be searched by
+the C compiler for include files, or [2] make a link to, or copy of,
+libc/iraf.h in the system directory /usr/include.
diff --git a/unix/hlib/libc/alloc.h b/unix/hlib/libc/alloc.h
new file mode 100644
index 00000000..e40ca1be
--- /dev/null
+++ b/unix/hlib/libc/alloc.h
@@ -0,0 +1,8 @@
+/* ALLOC.H -- Status returns for ZDVALL, ZDVOWN.
+ */
+#define DV_DEVFREE 1 /* device is free and can be allocated */
+#define DV_DEVALLOC 2 /* device is already allocated */
+#define DV_DEVINUSE 3 /* device is in use by someone else */
+#define DV_ERROR 9 /* software error from alloc.e */
+
+#define D_alloc
diff --git a/unix/hlib/libc/ctype.h b/unix/hlib/libc/ctype.h
new file mode 100644
index 00000000..e2d3fb59
--- /dev/null
+++ b/unix/hlib/libc/ctype.h
@@ -0,0 +1,32 @@
+#define _U 01
+#define _L 02
+#define _N 04
+#define _S 010
+#define _P 020
+#define _C 040
+#define _X 0100
+
+#ifdef vms
+globalvalue vms_ctype_defs;
+#endif
+extern char u_ctype_[];
+
+#define isalpha(c) ((u_ctype_+1)[(unsigned int)(c)]&(_U|_L))
+#define isupper(c) ((u_ctype_+1)[(unsigned int)(c)]&_U)
+#define islower(c) ((u_ctype_+1)[(unsigned int)(c)]&_L)
+#define isdigit(c) ((u_ctype_+1)[(unsigned int)(c)]&_N)
+#define isxdigit(c) ((u_ctype_+1)[(unsigned int)(c)]&(_N|_X))
+#define isspace(c) ((u_ctype_+1)[(unsigned int)(c)]&_S)
+#define ispunct(c) ((u_ctype_+1)[(unsigned int)(c)]&_P)
+#define isalnum(c) ((u_ctype_+1)[(unsigned int)(c)]&(_U|_L|_N))
+#define isprint(c) ((u_ctype_+1)[(unsigned int)(c)]&(_P|_U|_L|_N))
+#define iscntrl(c) ((u_ctype_+1)[(unsigned int)(c)]&_C)
+#define isascii(c) ((unsigned)((int)(c))<=0177)
+
+#define toupper(c) ((c)-'a'+'A')
+#define tolower(c) ((c)-'A'+'a')
+#define toascii(c) ((c)&0177)
+#define tointeg(c) ((c)-'0')
+#define todigit(c) ((c)+'0')
+
+#define D_ctype
diff --git a/unix/hlib/libc/error.h b/unix/hlib/libc/error.h
new file mode 100644
index 00000000..c02e7e36
--- /dev/null
+++ b/unix/hlib/libc/error.h
@@ -0,0 +1,12 @@
+/* Error handling.
+ */
+#define EA_FATAL 1
+#define EA_ERROR 2
+#define EA_WARN 3
+#define EA_RESTART (-99)
+
+#define SYS_XACV 501
+#define SYS_XARITH 502
+#define SYS_XINT 503
+
+#define D_error
diff --git a/unix/hlib/libc/finfo.h b/unix/hlib/libc/finfo.h
new file mode 100644
index 00000000..b4c57e70
--- /dev/null
+++ b/unix/hlib/libc/finfo.h
@@ -0,0 +1,19 @@
+/* File info structure definitions (c_finfo).
+ */
+#define SZ_OWNERSTR 16
+#define FI_REGULAR 1 /* file types */
+#define FI_DIRECTORY 2
+#define FI_EXECUTABLE 3
+#define FI_SPECIAL 4
+
+struct _finfo {
+ XLONG fi_type; /* file type */
+ XLONG fi_size; /* file size, machine bytes */
+ XLONG fi_atime; /* time of last access */
+ XLONG fi_mtime; /* time of last modify */
+ XLONG fi_ctime; /* time of file creation */
+ XLONG fi_perm; /* file permission bits */
+ char fi_owner[SZ_OWNERSTR*sizeof(XLONG)];
+};
+
+#define D_finfo
diff --git a/unix/hlib/libc/fpoll.h b/unix/hlib/libc/fpoll.h
new file mode 100644
index 00000000..52e6f4d5
--- /dev/null
+++ b/unix/hlib/libc/fpoll.h
@@ -0,0 +1,59 @@
+/* File poll structure definitions (c_fpoll).
+ */
+#ifndef D_fpoll
+#define D_fpoll
+
+#define IRAF_POLLIN 0x0001 /* There is data to read */
+#define IRAF_POLLPRI 0x0002 /* There is urgent data to read */
+#define IRAF_POLLOUT 0x0004 /* Writing now will not block */
+#define IRAF_POLLERR 0x0008 /* Error condition */
+#define IRAF_POLLHUP 0x0010 /* Hung up */
+#define IRAF_POLLNVAL 0x0020 /* Invalid request: fd not open */
+
+#define SZ_POLLFD 3 /* size of pollfd SPP struct */
+#define MAX_POLL_FD 32 /* max number of polling fds */
+#define INFTIM -1 /* poll indefinitely (block) */
+
+struct _fpoll {
+ XINT fp_fd; /* file type */
+ XSHORT fp_events; /* file size, machine bytes */
+ XSHORT fp_revents; /* time of last access */
+} poll_fds[MAX_POLL_FD];
+
+#ifndef NOLIBCNAMES
+#define _IRAF_FPOLL_LIBCNAMES
+
+
+#ifdef POLLIN
+#undef POLLIN
+#endif
+#define POLLIN IRAF_POLLIN
+
+#ifdef POLLPRI
+#undef POLLPRI
+#endif
+
+#define POLLPRI IRAF_POLLPRI
+#ifdef POLLOUT
+#undef POLLOUT
+#endif
+
+#define POLLOUT IRAF_POLLOUT
+#ifdef POLLERR
+#undef POLLERR
+#endif
+#define POLLERR IRAF_POLLERR
+
+#ifdef POLLHUP
+#undef POLLHUP
+#endif
+#define POLLHUP IRAF_POLLHUP
+
+#ifdef POLLNVAL
+#undef POLLNVAL
+#endif
+#define POLLNVAL IRAF_POLLNVAL
+
+#endif /* ! NOLIBCNAMES */
+
+#endif
diff --git a/unix/hlib/libc/fset.h b/unix/hlib/libc/fset.h
new file mode 100644
index 00000000..5d5fb33e
--- /dev/null
+++ b/unix/hlib/libc/fset.h
@@ -0,0 +1,64 @@
+/*
+ * FSET.H -- FSET/FSTATUS parameters (r = read_only, * = internal to FIO).
+ * Some of these parameters provide access to the guts of the i/o system and
+ * should not be used by packages outside FIO, to avoid a dependence on the
+ * inner workings of FIO. Parameters affecting the file buffer number, types,
+ * or sizes are read-only after the first i/o to the file.
+ */
+
+#define F_ADVICE 1 /* advice on type of access (rand,seq,def) */
+#define F_ASYNC 2 /* enable asynchronous i/o [y/n] */
+#define F_BLKSIZE 3 /*r device block size, chars */
+#define F_BUFPTR 4 /** install externally created file buffer */
+#define F_BUFSIZE 5 /* file buffer size, chars */
+#define F_BUFTOP 6 /** set pointer to top of buffer */
+#define F_BUFTYPE 7 /* file buffer type (F_LOCAL or F_GLOBAL) */
+#define F_CANCEL 8 /* cancel buffered data */
+#define F_CHANNEL 9 /*r channel number */
+#define F_CLOBBER 10 /* is file clobber enabled [y/n] */
+#define F_CLOSEFD 11 /* close host channel when inactive */
+#define F_DEVCODE 12 /** device driver code (index in devtab) */
+#define F_DEVICE 13 /** address of device read/get routine */
+#define F_EOF 14 /*r is file positioned at EOF [y/n] */
+#define F_FFIOMODE 15 /*r is i/o in progress on channel */
+#define F_FILENAME 16 /*r get file name (fstats) */
+#define F_FILESIZE 17 /*r get file size (fstatl) */
+#define F_FILEWAIT 18 /* is file wait on open enabled [y/n] */
+#define F_FIODES 19 /** struct pointer to file descrip. structure */
+#define F_FIRSTBUFOFF 20 /* file offset of first FIO buf (default=1) */
+#define F_FLUSHNL 21 /* is flush on newline enabled [y/n] */
+#define F_IOMODE 22 /* raw (vs "cooked") mode for terminal i/o */
+#define F_KEEP 23 /* keep file after task completion? */
+#define F_LASTREFFILE 24 /*r get FD of last referenced (active) file */
+#define F_MAXBUFSIZE 25 /*r maximum file buffer size */
+#define F_MODE 26 /*r file access mode (ro,wo,rw) */
+#define F_NBUFS 27 /* number of file buffers */
+#define F_NCHARS 28 /*r nchars last transfer */
+#define F_ONEVERSION 29 /* keep only one version of a file */
+#define F_OPEN 30 /*r is file open */
+#define F_OPTBUFSIZE 31 /*r optimal buffer size for device (chars) */
+#define F_PBBSIZE 32 /* push back buffer size, chars */
+#define F_RAW 33 /*r set/stat raw mode (see F_IOMODE) */
+#define F_READ 34 /*r does file have read access [y/n] */
+#define F_REDIR 35 /*r i/o is redirected */
+#define F_SETREDRAW 36 /*w enable screen redraw code (suspend proc) */
+#define F_SZBBLK 37 /*r size in bytes of last dev block r|w */
+#define F_TYPE 38 /*r file type (text, binary) */
+#define F_UNREAD 39 /*r number of unread chars in FIO buffer */
+#define F_VALIDATE 40 /* validate FIO buffer contents (fseti) */
+#define F_WRITE 41 /*r does file have write access [y/n] */
+
+#define F_LOCAL 1 /* allocate local file buffers */
+#define F_GLOBAL 2 /* take file buffers from global pool */
+#define F_GETPROT 2 /* is file protected? */
+#define F_FFIOINACT 0 /* no i/o in progress */
+#define F_FFIOREAD 1 /* read in progress */
+#define F_FFIOWRITE 2 /* write in progress */
+
+/* Terminal mode stuff. I/O mode flags maybe combined, e.g., IO_RAW+IO_NDELAY.
+ */
+#define IO_NORMAL 0 /* "normal" terminal i/o */
+#define IO_RAW 001B /* enables raw mode i/o */
+#define IO_NDELAY 100B /* enables nonblocking i/o */
+
+#define D_fset
diff --git a/unix/hlib/libc/iraf.h b/unix/hlib/libc/iraf.h
new file mode 100644
index 00000000..85c0c60a
--- /dev/null
+++ b/unix/hlib/libc/iraf.h
@@ -0,0 +1,192 @@
+/*
+ * IRAF.H -- Index to the IRAF/C include files and to the major IRAF
+ * directories. All directory references in the IRAF system are relative
+ * to the root directories defined in this file. The UNIX version of IRAF
+ * scans this file at run time to get the logical directory definitions.
+ */
+
+#ifndef D_iraf
+/* ### Start of run time definitions */
+#define HOST "/iraf/iraf/unix/"
+#define IRAF "/iraf/iraf/"
+#define TMP "/tmp/"
+/* ### End of run time definitions */
+
+/* Compile time definitions (for C #ifdefs).
+ */
+/* #define BSDUNIX */
+/* #define SUNOS4 */
+
+#define D_iraf
+#endif
+
+/* Include any header files specified in "#define import_XXX" statements
+ * before we were called.
+ */
+#ifdef import_libc
+#ifndef D_libc
+#include "/iraf/iraf/unix/hlib/libc/libc.h"
+#endif
+#undef import_libc
+#endif
+
+#ifdef import_spp
+#ifndef D_spp
+#include "/iraf/iraf/unix/hlib/libc/spp.h"
+#endif
+#undef import_spp
+#endif
+
+#ifdef import_main
+#ifndef D_main
+#include "/iraf/iraf/unix/hlib/libc/main.h"
+#endif
+#undef import_main
+#endif
+
+#ifdef import_stdio
+#ifndef D_stdio
+#include "/iraf/iraf/unix/hlib/libc/stdio.h"
+#endif
+#undef import_stdio
+#endif
+
+#ifdef import_error
+#ifndef D_error
+#include "/iraf/iraf/unix/hlib/libc/error.h"
+#endif
+#undef import_error
+#endif
+
+#ifdef import_ctype
+#ifndef D_ctype
+#include "/iraf/iraf/unix/hlib/libc/ctype.h"
+#endif
+#undef import_ctype
+#endif
+
+#ifdef import_finfo
+#ifndef D_finfo
+#include "/iraf/iraf/unix/hlib/libc/finfo.h"
+#endif
+#undef import_finfo
+#endif
+
+#ifdef import_fset
+#ifndef D_fset
+#include "/iraf/iraf/unix/hlib/libc/fset.h"
+#endif
+#undef import_fset
+#endif
+
+#ifdef import_fpoll
+#ifndef D_fpoll
+#include "/iraf/iraf/unix/hlib/libc/fpoll.h"
+#endif
+#undef import_fpoll
+#endif
+
+#ifdef import_kernel
+#ifndef D_kernel
+#include "/iraf/iraf/unix/hlib/libc/kernel.h"
+#endif
+#undef import_kernel
+#endif
+
+#ifdef import_xnames
+#ifndef D_xnames
+#include "/iraf/iraf/unix/hlib/libc/xnames.h"
+#endif
+#undef import_xnames
+#endif
+
+#ifdef import_knames
+#ifndef D_knames
+#include "/iraf/iraf/unix/hlib/libc/knames.h"
+#endif
+#undef import_knames
+#endif
+
+#ifdef import_kproto
+#ifndef D_kproto
+#include "/iraf/iraf/unix/hlib/libc/kproto.h"
+#endif
+#undef import_kproto
+#endif
+
+#ifdef import_setjmp
+#ifndef D_setjmp
+#include "/iraf/iraf/unix/hlib/libc/setjmp.h"
+#endif
+#undef import_setjmp
+#endif
+
+#ifdef import_xwhen
+#ifndef D_xwhen
+#include "/iraf/iraf/unix/hlib/libc/xwhen.h"
+#endif
+#undef import_xwhen
+#endif
+
+#ifdef import_protect
+#ifndef D_protect
+#include "/iraf/iraf/unix/hlib/libc/protect.h"
+#endif
+#undef import_protect
+#endif
+
+#ifdef import_prtype
+#ifndef D_prtype
+#include "/iraf/iraf/unix/hlib/libc/prtype.h"
+#endif
+#undef import_prtype
+#endif
+
+#ifdef import_zfstat
+#ifndef D_zfstat
+#include "/iraf/iraf/unix/hlib/libc/zfstat.h"
+#endif
+#undef import_zfstat
+#endif
+
+#ifdef import_alloc
+#ifndef D_alloc
+#include "/iraf/iraf/unix/hlib/libc/alloc.h"
+#endif
+#undef import_alloc
+#endif
+
+#ifdef import_math
+#ifndef D_math
+#include "/iraf/iraf/unix/hlib/libc/math.h"
+#endif
+#undef import_math
+#endif
+
+#ifdef import_prstat
+#ifndef D_prstat
+#include "/iraf/iraf/unix/hlib/libc/prstat.h"
+#endif
+#undef import_prstat
+#endif
+
+#ifdef import_lexnum
+#ifndef D_lexnum
+#include "/iraf/iraf/unix/hlib/libc/lexnum.h"
+#endif
+#undef import_lexnum
+#endif
+
+#ifdef import_ttset
+#ifndef D_ttset
+#include "/iraf/iraf/unix/hlib/libc/ttset.h"
+#endif
+#undef import_ttset
+#endif
+
+#ifdef import_stdarg
+#ifndef D_stdarg
+#include "/iraf/iraf/unix/hlib/libc/stdarg.h"
+#endif
+#undef import_stdarg
+#endif
diff --git a/unix/hlib/libc/kernel.h b/unix/hlib/libc/kernel.h
new file mode 100644
index 00000000..3b240025
--- /dev/null
+++ b/unix/hlib/libc/kernel.h
@@ -0,0 +1,107 @@
+/*
+ * KERNEL.H -- Machine dependent definitions for the 4.1BSD UNIX IRAF Kernel.
+ * The UNIX include file <stdio.h> must also be loaded by any program which
+ * references "kernel.h". The companion include file "language.h" defines
+ * the (generally) machine independent kernel definitions.
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <string.h>
+
+
+
+#ifndef NOKNET
+#define NOKNET /* no networking desired in kernel */
+#endif
+
+/* Tunable kernel parameters. All buffer sizes are in units of bytes.
+ * Buffer lengths are in units of whatever the buffer contains.
+ */
+#define SZ_DISKBLOCK 512 /* used in zsttbf if dev block invar. */
+#define FILE_MODEBITS 0666 /* protection bits for new files */
+#define MAXOFILES 256 /* maximum open files (see <stdio.h>) */
+#define MAXPROCS 20 /* maximum subprocesses per process */
+#define SZ_DEFWORKSET 67108864 /* default working set size, bytes */
+#define SZ_MAXWORKSET 268435456 /* maximum working set (max physmem) */
+#define CLKFREQ 60 /* clock frequency (see zgtime.c) */
+
+#define TX_OPTBUFSIZE SZ_LINE /* optimum buffer size for text file */
+#define TX_MAXBUFSIZE 0 /* maximum buffer size for text file */
+#define BF_OPTBUFSIZE 65536 /* optimum buffer size for binary file */
+#define BF_MAXBUFSIZE 0 /* maximum buffer size for binary file */
+#define SF_OPTBUFSIZE 65536 /* optimum buffer size for static file */
+#define SF_MAXBUFSIZE 0 /* maximum buffer size for static file */
+#define KS_OPTBUFSIZE 65536 /* optimal buffer size for KS i/o */
+#define KS_MAXBUFSIZE 0 /* maximum buffer size for KS i/o */
+#define PR_OPTBUFSIZE 65536 /* optimal buffer size for IPC i/o */
+#define PR_MAXBUFSIZE 4096 /* maximum buffer size for IPC i/o */
+#define ND_OPTBUFSIZE 65536 /* optimal buffer size for ND i/o */
+#define ND_MAXBUFSIZE 0 /* maximum buffer size for ND i/o */
+#define PL_OPTBUFSIZE 1024 /* optimum buffer size for plotter */
+#define PL_MAXBUFSIZE 0 /* maximum buffer size for plotter */
+#define LP_OPTBUFSIZE 1024 /* optimum buffer size for line printer */
+#define LP_MAXBUFSIZE 0 /* maximum buffer size for line printer */
+
+/* ZLOCVA style pointer to address conversions. These macros are used to
+ * convert host pointer addresses (in bytes) to/from iraf pointer values
+ * in units of XCHAR.
+ */
+#define ADDR_TO_LOC(addr) (((XINT)((XCHAR *)(addr)))>>(sizeof(XCHAR)-1))
+#define LOC_TO_ADDR(loc,type) ((type *)((XCHAR *)((loc)<<(sizeof(XCHAR)-1))))
+
+
+/* Kernel file descriptor for accessing UNIX files. A static array ZFD of
+ * descriptor structures is used, indexed by UNIX file descriptor numbers
+ * numbered beginning at 0, the standard input.
+ */
+struct fiodes {
+ FILE *fp; /* file pointer if text file */
+ long fpos; /* file offset, bytes */
+ long filesize; /* file size at open time */
+ int nbytes; /* last nbytes r|w */
+ int io_flags; /* fcntl flags */
+ short flags; /* access mode flags */
+ char *port; /* tty port if tty */
+};
+extern struct fiodes zfd[]; /* array of descriptors */
+
+#define KF_CHARMODE 01 /* char input mode, text files */
+#define KF_NOSEEK 02 /* seeks are illegal on device */
+#define KF_NOSTTY 04 /* stty,gtty calls illegal */
+#define KF_NDELAY 010 /* nonblocking reads */
+#define KF_DIRECTIO 020 /* use direct (unbuffered) i/o */
+#define TTYNAME "/dev/tty" /* user terminal (for ZFIOTY) */
+#define U_STDIN "unix-stdin" /* special filename for stdin */
+#define U_STDOUT "unix-stdout" /* special filename for stdout */
+#define U_STDERR "unix-stderr" /* special filename for stderr */
+#define LEN_RAWCMD 5 /* nchars in rawcmd string */
+#define RAWOFF "\033-rAw" /* turn raw mode off */
+#define RAWON "\033+rAw" /* turn raw mode on */
+#define LEN_SETREDRAW 6 /* nchars in setredraw string */
+#define SETREDRAW "\033=rDw" /* set/enable screenredraw code */
+
+
+#ifdef AUX
+#define SIGFUNC sigfunc_t
+#else
+typedef void (*SIGFUNC)();
+#endif
+
+typedef void (*PFV)();
+#ifdef MACH64
+typedef long (*PFI)();
+#else
+typedef int (*PFI)();
+#endif
+
+
+#ifdef SOLARIS
+#define bzero(a,n) memset(a,0,n)
+#define bcopy(a,b,n) memmove(b,a,n)
+#endif
+
+extern char *irafpath();
+
+#define D_kernel
diff --git a/unix/hlib/libc/knames.h b/unix/hlib/libc/knames.h
new file mode 100644
index 00000000..a67d302b
--- /dev/null
+++ b/unix/hlib/libc/knames.h
@@ -0,0 +1,371 @@
+/*
+ * KNAMES.H -- External names of the kernel procedures. These are defined
+ * because the trailing underscore is peculiar to this version of UNIX.
+ * On some other system the underscore might not be necessary. UNIX uses
+ * the underscore to avoid name collisions between Fortran names and C/UNIX
+ * names. If your system does not employ such a convention, delete the _ but
+ * do not delete the defines - there will probably be name collisions and
+ * some of the names will have to be changed. To change the external name
+ * change the define given here.
+ */
+
+#define IRAF_MAIN irafmn_
+#define ZZSETK zzsetk_
+#define USHLIB ushlib_
+#define VSHLIB vshlib_
+#define VSHEND vshend_
+#define VLIBINIT vlibinit_
+#define KI_CONNECT kicont_
+#define KI_GETHOSTS kigets_
+#define KI_SEND kisend_
+#define KI_RECEIVE kirece_
+
+#define ZARDBF zardbf_
+#define ZARDGD zardgd_
+#define ZARDKS zardks_
+#define ZARDLP zardlp_
+#define ZARDND zardnd_
+#define ZARDPL zardpl_
+#define ZARDPR zardpr_
+#define ZARDSF zardsf_
+#define ZAWRBF zawrbf_
+#define ZAWRGD zawrgd_
+#define ZAWRKS zawrks_
+#define ZAWRLP zawrlp_
+#define ZAWRND zawrnd_
+#define ZAWRPL zawrpl_
+#define ZAWRPR zawrpr_
+#define ZAWRSF zawrsf_
+#define ZAWSET zawset_
+#define ZAWTBF zawtbf_
+#define ZAWTGD zawtgd_
+#define ZAWTKS zawtks_
+#define ZAWTLP zawtlp_
+#define ZAWTND zawtnd_
+#define ZAWTPL zawtpl_
+#define ZAWTPR zawtpr_
+#define ZAWTSF zawtsf_
+#define ZCALL0 zcall0_
+#define ZCALL1 zcall1_
+#define ZCALL2 zcall2_
+#define ZCALL3 zcall3_
+#define ZCALL4 zcall4_
+#define ZCALL5 zcall5_
+#define ZCALL6 zcall6_
+#define ZCALL7 zcall7_
+#define ZCALL8 zcall8_
+#define ZCALL9 zcall9_
+#define ZCALLA zcalla_
+#define ZCLCPR zclcpr_
+#define ZCLDIR zcldir_
+#define ZCLDPR zcldpr_
+#define ZCLSBF zclsbf_
+#define ZCLSGD zclsgd_
+#define ZCLSKS zclsks_
+#define ZCLSLP zclslp_
+#define ZCLSND zclsnd_
+#define ZCLSPL zclspl_
+#define ZCLSSF zclssf_
+#define ZCLSTX zclstx_
+#define ZCLSTY zclsty_
+#define ZDOJMP zdojmp_
+#define ZDVALL zdvall_
+#define ZDVOWN zdvown_
+#define ZFACSS zfacss_
+#define ZFALOC zfaloc_
+#define ZFCHDR zfchdr_
+#define ZFDELE zfdele_
+#define ZFGCWD zfgcwd_
+#define ZFINFO zfinfo_
+#define ZFLSTX zflstx_
+#define ZFLSTY zflsty_
+#define ZFLINK zflink_
+#define ZFMKCP zfmkcp_
+#define ZFMKDR zfmkdr_
+#define ZFNBRK zfnbrk_
+#define ZFPATH zfpath_
+#define ZFPROT zfprot_
+#define ZFPOLL zfpoll_
+#define ZFREE zfree_
+#define ZFRNAM zfrnam_
+#define ZFRMDR zfrmdr_
+#define ZFSUBD zfsubd_
+#define ZFULNK zfulnk_
+#define ZFUNC0 zfunc0_
+#define ZFUNC1 zfunc1_
+#define ZFUNC2 zfunc2_
+#define ZFUNC3 zfunc3_
+#define ZFUNC4 zfunc4_
+#define ZFUNC5 zfunc5_
+#define ZFUNC6 zfunc6_
+#define ZFUNC7 zfunc7_
+#define ZFUNC8 zfunc8_
+#define ZFUNC9 zfunc9_
+#define ZFUNCA zfunca_
+#define ZFUTIM zfutim_
+#define ZFXDIR zfxdir_
+#define ZGCMDL zgcmdl_
+#define ZGETTT zgettt_
+#define ZGETTX zgettx_
+#define ZGETTY zgetty_
+#define ZGFDIR zgfdir_
+#define ZGHOST zghost_
+#define ZGMTCO zgmtco_
+#define ZGTENV zgtenv_
+#define ZGTIME zgtime_
+#define ZGTPID zgtpid_
+#define ZINTPR zintpr_
+#define ZLOCPR zlocpr_
+#define ZLOCVA zlocva_
+#define ZMALOC zmaloc_
+#define ZMEMCK zmemck_
+#define ZMFREE zmfree_
+#define ZNOTTX znottx_
+#define ZNOTTY znotty_
+#define ZOPCPR zopcpr_
+#define ZOPDIR zopdir_
+#define ZOPDPR zopdpr_
+#define ZOPNBF zopnbf_
+#define ZOPNGD zopngd_
+#define ZOPNKS zopnks_
+#define ZOPNLP zopnlp_
+#define ZOPNND zopnnd_
+#define ZOPNPL zopnpl_
+#define ZOPNSF zopnsf_
+#define ZOPNTX zopntx_
+#define ZOPNTY zopnty_
+#define ZOSCMD zoscmd_
+#define ZPANIC zpanic_
+#define ZPUTTX zputtx_
+#define ZPUTTY zputty_
+#define ZRALOC zraloc_
+#define ZSEKTX zsektx_
+#define ZSEKTY zsekty_
+#define ZSTTBF zsttbf_
+#define ZSTTGD zsttgd_
+#define ZSTTKS zsttks_
+#define ZSTTLP zsttlp_
+#define ZSTTND zsttnd_
+#define ZSTTPL zsttpl_
+#define ZSTTPR zsttpr_
+#define ZSTTSF zsttsf_
+#define ZSTTTX zstttx_
+#define ZSTTTY zsttty_
+#define ZSVJMP zsvjmp_
+#define ZTSLEE ztslee_
+#define ZWMSEC zwmsec_
+#define ZXGMES zxgmes_
+#define ZXWHEN zxwhen_
+#define ZZCLMT zzclmt_
+#define ZZEPRO zzepro_
+#define ZZOPMT zzopmt_
+#define ZZRDMT zzrdmt_
+#define ZZRWMT zzrwmt_
+#define ZZSETK zzsetk_
+#define ZZSTMT zzstmt_
+#define ZZSTOP zzstop_
+#define ZZSTRT zzstrt_
+#define ZZWRMT zzwrmt_
+#define ZZWTMT zzwtmt_
+
+
+
+/* If KNET name mapping is enabled selected machine level kernel names are
+ * mapped into procedures in the KI (kernel interface) package. This is
+ * necessary if the high level code is to have networking capabilities.
+ * Define NOKNET to disable this mapping, e.g., in the kernel itself.
+ */
+
+#ifndef NOKNET
+
+#define zardnd_ kardnd_
+#define zawrnd_ kawrnd_
+#define zawtnt_ kawtnd_
+#define zclsnd_ kclsnd_
+#define zfchdr_ kfchdr_
+#define zfgcwd_ kfgcwd_
+#define zfpath_ kfpath_
+#define zfsubd_ kfsubd_
+#define zopnnd_ kopnnd_
+#define zsttnd_ ksttnd_
+#define zardbf_ kardbf_
+#define zardlp_ kardlp_
+#define zardpl_ kardpl_
+#define zardpr_ kardpr_
+#define zardsf_ kardsf_
+#define zawrbf_ kawrbf_
+#define zawrlp_ kawrlp_
+#define zawrpl_ kawrpl_
+#define zawrpr_ kawrpr_
+#define zawrsf_ kawrsf_
+#define zawtbf_ kawtbf_
+#define zawtlp_ kawtlp_
+#define zawtpl_ kawtpl_
+#define zawtpr_ kawtpr_
+#define zawtsf_ kawtsf_
+#define zclcpr_ kclcpr_
+#define zcldir_ kcldir_
+#define zcldpr_ kcldpr_
+#define zclsbf_ kclsbf_
+#define zclslp_ kclslp_
+#define zclspl_ kclspl_
+#define zclspr_ kclspr_
+#define zclssf_ kclssf_
+#define zclstx_ kclstx_
+#define zclsty_ kclsty_
+#define zdvall_ kdvall_
+#define zdvown_ kdvown_
+#define zfacss_ kfacss_
+#define zfaloc_ kfaloc_
+#define zfdele_ kfdele_
+#define zfinfo_ kfinfo_
+#define zflstx_ kflstx_
+#define zflsty_ kflsty_
+#define zfmkcp_ kfmkcp_
+#define zfmkdr_ kfmkdr_
+#define zfprot_ kfprot_
+#define zfrnam_ kfrnam_
+#define zfrmdr_ kfrmdr_
+#define zfutim_ kfutim_
+#define zgettx_ kgettx_
+#define zgetty_ kgetty_
+#define zgfdir_ kgfdir_
+#define zintpr_ kintpr_
+#define znottx_ knottx_
+#define znotty_ knotty_
+#define zopcpr_ kopcpr_
+#define zopdir_ kopdir_
+#define zopdpr_ kopdpr_
+#define zopnbf_ kopnbf_
+#define zopnlp_ kopnlp_
+#define zopnpl_ kopnpl_
+#define zopnpr_ kopnpr_
+#define zopnsf_ kopnsf_
+#define zopntx_ kopntx_
+#define zopnty_ kopnty_
+#define zoscmd_ koscmd_
+#define zputtx_ kputtx_
+#define zputty_ kputty_
+#define zsektx_ ksektx_
+#define zsekty_ ksekty_
+#define zsttbf_ ksttbf_
+#define zsttlp_ ksttlp_
+#define zsttpl_ ksttpl_
+#define zsttpr_ ksttpr_
+#define zsttsf_ ksttsf_
+#define zstttx_ kstttx_
+#define zsttty_ ksttty_
+#define zzclmt_ kzclmt_
+#define zzopmt_ kzopmt_
+#define zzrdmt_ kzrdmt_
+#define zzrwmt_ kzrwmt_
+#define zzstmt_ kzstmt_
+#define zzwrmt_ kzwrmt_
+#define zzwtmt_ kzwtmt_
+
+
+#endif
+
+/* Procedure names of miscellaneous potentially machine dependent Bit and Byte
+ * Primitives.
+ */
+#define ACLRB aclrb_
+#define ANDI andi_
+#define ANDL andl_
+#define ANDS ands_
+#define BITMOV bitmov_
+#define BITPAK bitpak_
+#define BITUPK bitupk_
+#define BSWAP2 bswap2_
+#define BSWAP4 bswap4_
+#define BSWAP8 bswap8_
+#define BYTMOV bytmov_
+#define CHRPAK chrpak_
+#define CHRUPK chrupk_
+#define D1MACH d1mach_
+#define I1MACH i1mach_
+#define MIILEN miilen_
+#define MIIPAK miipak_
+#define MIIUPK miiupk_
+#define NOTI noti_
+#define NOTL notl_
+#define NOTS nots_
+#define ORI ori_
+#define ORL orl_
+#define ORS ors_
+#define R1MACH r1mach_
+#define SHIFTI shifti_
+#define SHIFTS shifts_
+#define SHIFTL shiftl_
+#define STRPAK strpak_
+#define STRUPK strupk_
+#define XORI xori_
+#define XORL xorl_
+#define XORS xors_
+#define I32TO64 i32to4_
+#define I64TO32 i64to2_
+#define IPAK32 ipak32_
+#define IUPK32 iupk32_
+#define IPAK16 ipak16_
+#define IUPK16 iupk16_
+#define IMUL32 imul32_
+#define ISCL32 iscl32_
+#define ISCL64 iscl64_
+#define STRSUM strsum_
+
+#define ACLRC aclrc_
+#define ACLRD aclrd_
+#define ACLRI aclri_
+#define ACLRL aclrl_
+#define ACLRR aclrr_
+#define ACLRS aclrs_
+#define AMOVC amovc_
+#define AMOVD amovd_
+#define AMOVI amovi_
+#define AMOVL amovl_
+#define AMOVR amovr_
+#define AMOVS amovs_
+
+/* Procedure names for the potentially machine dependent VOPS vector
+ * primitives. The ACHT stands for change datatype, the B suffix refers
+ * to primitives which deal with unsigned machine bytes, and the U suffix
+ * refers to primitives which deal with unsigned short (16 bit) integers.
+ */
+#define ACHTBB achtbb_
+#define ACHTBC achtbc_
+#define ACHTBD achtbd_
+#define ACHTBI achtbi_
+#define ACHTBL achtbl_
+#define ACHTBR achtbr_
+#define ACHTBS achtbs_
+#define ACHTBU achtbu_
+#define ACHTBX achtbx_
+#define ACHTCB achtcb_
+#define ACHTCU achtcu_
+#define ACHTDB achtdb_
+#define ACHTDU achtdu_
+#define ACHTIB achtib_
+#define ACHTIU achtiu_
+#define ACHTLB achtlb_
+#define ACHTLU achtlu_
+#define ACHTRB achtrb_
+#define ACHTRU achtru_
+#define ACHTSB achtsb_
+#define ACHTSU achtsu_
+#define ACHTUB achtub_
+#define ACHTUC achtuc_
+#define ACHTUD achtud_
+#define ACHTUI achtui_
+#define ACHTUL achtul_
+#define ACHTUR achtur_
+#define ACHTUS achtus_
+#define ACHTUU achtuu_
+#define ACHTUX achtux_
+#define ACHTXB achtxb_
+#define ACHTXU achtxu_
+
+/*
+#define import_kproto
+*/
+
+#define D_knames
diff --git a/unix/hlib/libc/kproto.h b/unix/hlib/libc/kproto.h
new file mode 100644
index 00000000..df300f81
--- /dev/null
+++ b/unix/hlib/libc/kproto.h
@@ -0,0 +1,496 @@
+/*
+ * KPROTO.H -- IRAF Kernel prototype definitions.
+ */
+
+#include <stdio.h>
+#include <time.h> /* for time_t */
+#include <signal.h> /* for siginfo_t */
+
+#ifndef MACH64
+
+
+/* alloc.c */
+extern int main(int argc, char *argv[]);
+extern int alloc(char *argv[], int statonly);
+extern int dealloc(char *argv[]);
+extern int findsfs(char *argv[]);
+/* dio.c */
+extern int directio(int fd, int advice);
+/* getproc.c */
+extern int uid_executing(int uid);
+/* gmttolst.c */
+extern time_t gmt_to_lst(time_t gmt);
+/* irafpath.c */
+extern char *irafpath(char *fname);
+/* prwait.c */
+extern void pr_enter(int pid, int inchan, int outchan);
+extern int pr_wait(int pid);
+extern int pr_getipc(int pid, int *inchan, int *outchan);
+extern struct proctable *pr_findpid(int pid);
+extern void pr_release(int pid);
+/* tape.c */
+extern int main(int argc, char *argv[]);
+extern void mtop(int op, int count);
+extern char *nextcmd(FILE *in);
+extern char *gettok(void);
+extern char *prompt(void);
+extern void pstatus(void);
+extern void output(char *text);
+extern void phelp(void);
+/* zalloc.c */
+extern int zdvall_(shortint *aliases, int *allflg, int *status);
+extern int zdvown_(shortint *device, shortint *owner, int *maxch, int *status);
+extern int loggedin(int uid);
+/* zawset.c */
+extern int zawset_(int *best_size, int *new_size, int *old_size, int *max_size);
+/* zcall.c */
+extern int zcall0_(int *proc);
+extern int zcall1_(int *proc, void *arg1);
+extern int zcall2_(int *proc, void *arg1, void *arg2);
+extern int zcall3_(int *proc, void *arg1, void *arg2, void *arg3);
+extern int zcall4_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4);
+extern int zcall5_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5);
+extern int zcall6_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6);
+extern int zcall7_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7);
+extern int zcall8_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8);
+extern int zcall9_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9);
+extern int zcalla_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9, void *arg10);
+/* zdojmp.c */
+extern void zdojmp_(int *jmpbuf, int *status);
+/* zfacss.c */
+extern int zfacss_(shortint *fname, int *mode, int *type, int *status);
+/* zfaloc.c */
+extern int zfaloc_(shortint *fname, int *nbytes, int *status);
+/* zfchdr.c */
+extern int zfchdr_(shortint *newdir, int *status);
+/* zfdele.c */
+extern int zfdele_(shortint *fname, int *status);
+/* zfgcwd.c */
+extern int zfgcwd_(shortint *outstr, int *maxch, int *status);
+/* zfinfo.c */
+extern int zfinfo_(shortint *fname, int *finfo_struct, int *status);
+/* zfiobf.c */
+extern int zopnbf_(shortint *osfn, int *mode, int *chan);
+extern int zclsbf_(int *fd, int *status);
+extern int zardbf_(int *chan, shortint *buf, int *maxbytes, int *offset);
+extern int zawrbf_(int *chan, shortint *buf, int *nbytes, int *offset);
+extern int zawtbf_(int *fd, int *status);
+extern int zsttbf_(int *fd, int *param, int *lvalue);
+extern int _u_fmode(int mode);
+extern int vm_access(char *fname, int mode);
+extern int vm_delete(char *fname, int force);
+extern int vm_reservespace(long nbytes);
+extern int vm_largefile(long nbytes);
+extern int vm_directio(int fd, int flag);
+/* zfioks.c */
+extern int zopnks_(shortint *x_server, int *mode, int *chan);
+extern int zclsks_(int *chan, int *status);
+extern int zardks_(int *chan, shortint *buf, int *totbytes, int *loffset);
+extern int zawrks_(int *chan, shortint *buf, int *totbytes, int *loffset);
+extern int zawtks_(int *chan, int *status);
+extern int zsttks_(int *chan, int *param, int *lvalue);
+extern void pr_mask(char *str);
+/* zfiolp.c */
+extern int zopnlp_(shortint *printer, int *mode, int *chan);
+extern int zclslp_(int *chan, int *status);
+extern int zardlp_(int *chan, shortint *buf, int *maxbytes, int *offset);
+extern int zawrlp_(int *chan, shortint *buf, int *nbytes, int *offset);
+extern int zawtlp_(int *chan, int *status);
+extern int zsttlp_(int *chan, int *param, int *lvalue);
+/* zfiomt.c */
+extern int zzopmt_(shortint *device, int *acmode, shortint *devcap, int *devpos, int *newfile, int *chan);
+extern int zzclmt_(int *chan, int *devpos, int *o_status);
+extern int zzrdmt_(int *chan, shortint *buf, int *maxbytes, int *offset);
+extern int zzwrmt_(int *chan, shortint *buf, int *nbytes, int *offset);
+extern int zzwtmt_(int *chan, int *devpos, int *o_status);
+extern int zzstmt_(int *chan, int *param, int *lvalue);
+extern int zzrwmt_(shortint *device, shortint *devcap, int *o_status);
+/* zfiond.c */
+extern int zopnnd_(shortint *pk_osfn, int *mode, int *chan);
+extern int zclsnd_(int *fd, int *status);
+extern int zardnd_(int *chan, shortint *buf, int *maxbytes, int *offset);
+extern int zawrnd_(int *chan, shortint *buf, int *nbytes, int *offset);
+extern int zawtnd_(int *fd, int *status);
+extern int zsttnd_(int *fd, int *param, int *lvalue);
+/* zfiopl.c */
+extern int zopnpl_(shortint *plotter, int *mode, int *chan);
+extern int zclspl_(int *chan, int *status);
+extern int zardpl_(int *chan, shortint *buf, int *maxbytes, int *offset);
+extern int zawrpl_(int *chan, shortint *buf, int *nbytes, int *offset);
+extern int zawtpl_(int *chan, int *status);
+extern int zsttpl_(int *chan, int *param, int *lvalue);
+/* zfiopr.c */
+extern int zopcpr_(shortint *osfn, int *inchan, int *outchan, int *pid);
+extern int zclcpr_(int *pid, int *exit_status);
+extern int zardpr_(int *chan, shortint *buf, int *maxbytes, int *loffset);
+extern int zawrpr_(int *chan, shortint *buf, int *nbytes, int *loffset);
+extern int zawtpr_(int *chan, int *status);
+extern int zsttpr_(int *chan, int *param, int *lvalue);
+/* zfiosf.c */
+extern int zopnsf_(shortint *osfn, int *mode, int *chan);
+extern int zclssf_(int *fd, int *status);
+extern int zardsf_(int *chan, shortint *buf, int *maxbytes, int *offset);
+extern int zawrsf_(int *chan, shortint *buf, int *nbytes, int *offset);
+extern int zawtsf_(int *fd, int *status);
+extern int zsttsf_(int *fd, int *param, int *lvalue);
+/* zfiotx.c */
+extern int zopntx_(shortint *osfn, int *mode, int *chan);
+extern int zclstx_(int *fd, int *status);
+extern int zflstx_(int *fd, int *status);
+extern int zgettx_(int *fd, shortint *buf, int *maxchars, int *status);
+extern int znottx_(int *fd, int *offset);
+extern int zputtx_(int *fd, shortint *buf, int *nchars, int *status);
+extern int zsektx_(int *fd, int *znottx_offset, int *status);
+extern int zstttx_(int *fd, int *param, int *value);
+/* zfioty.c */
+extern int zopnty_(shortint *osfn, int *mode, int *chan);
+extern int zclsty_(int *fd, int *status);
+extern int zflsty_(int *fd, int *status);
+extern int zgetty_(int *fd, shortint *buf, int *maxchars, int *status);
+extern int znotty_(int *fd, int *offset);
+extern int zputty_(int *fd, shortint *buf, int *nchars, int *status);
+extern int zsekty_(int *fd, int *znotty_offset, int *status);
+extern int zsttty_(int *fd, int *param, int *value);
+/* zfmkcp.c */
+extern int zfmkcp_(shortint *osfn, shortint *new_osfn, int *status);
+/* zfmkdr.c */
+extern int zfmkdr_(shortint *newdir, int *status);
+/* zfnbrk.c */
+extern int zfnbrk_(shortint *vfn, int *uroot_offset, int *uextn_offset);
+/* zfpath.c */
+extern int zfpath_(shortint *osfn, shortint *pathname, int *maxch, int *nchars);
+/* zfpoll.c */
+extern int zfpoll_(int *pfds, int *nfds, int *timeout, int *npoll, int *status);
+/* zfprot.c */
+extern int zfprot_(shortint *fname, int *action, int *status);
+/* zfrnam.c */
+extern int zfrnam_(shortint *oldname, shortint *newname, int *status);
+/* zfrmdr.c */
+extern int zfrmdr_(shortint *dir, int *status);
+/* zfsubd.c */
+extern int zfsubd_(shortint *osdir, int *maxch, shortint *subdir, int *nchars);
+/* zfunc.c */
+extern int zfunc0_(int *proc);
+extern int zfunc1_(int *proc, void *arg1);
+extern int zfunc2_(int *proc, void *arg1, void *arg2);
+extern int zfunc3_(int *proc, void *arg1, void *arg2, void *arg3);
+extern int zfunc4_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4);
+extern int zfunc5_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5);
+extern int zfunc6_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6);
+extern int zfunc7_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7);
+extern int zfunc8_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8);
+extern int zfunc9_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9);
+extern int zfunca_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9, void *arg10);
+/* zfutim.c */
+extern int zfutim_(shortint *fname, int *atime, int *mtime, int *status);
+/* zfxdir.c */
+extern int zfxdir_(shortint *osfn, shortint *osdir, int *maxch, int *nchars);
+/* zgcmdl.c */
+extern int zgcmdl_(shortint *cmd, int *maxch, int *status);
+/* zghost.c */
+extern int zghost_(shortint *outstr, int *maxch);
+/* zglobl.c */
+/* zgmtco.c */
+extern int zgmtco_(int *gmtcor);
+/* zgtenv.c */
+extern int zgtenv_(shortint *envvar, shortint *outstr, int *maxch, int *status);
+/* zgtime.c */
+extern int zgtime_(int *clock_time, int *cpu_time);
+/* zgtpid.c */
+extern int zgtpid_(int *pid);
+/* zintpr.c */
+extern int zintpr_(int *pid, int *exception, int *status);
+/* zlocpr.c
+extern int zlocpr_(PFI proc, int *o_epa);
+*/
+/* zlocva.c */
+extern int zlocva_(shortint *variable, int *location);
+/* zmain.c */
+extern int main(int argc, char *argv[]);
+/* zmaloc.c */
+extern int zmaloc_(int *buf, int *nbytes, int *status);
+/* zmfree.c */
+extern int zmfree_(int *buf, int *status);
+/* zopdir.c */
+extern int zopdir_(shortint *fname, int *chan);
+extern int zcldir_(int *chan, int *status);
+extern int zgfdir_(int *chan, shortint *outstr, int *maxch, int *status);
+/* zopdpr.c */
+extern int zopdpr_(shortint *osfn, shortint *bkgfile, shortint *queue, int *jobcode);
+extern int zcldpr_(int *jobcode, int *killflag, int *exit_status);
+/* zoscmd.c */
+extern int zoscmd_(shortint *oscmd, shortint *stdin_file, shortint *stdout_file, shortint *stderr_file, int *status);
+extern int pr_onint(int usig, int *hwcode, int *scp);
+/* zpanic.c */
+extern int zpanic_(int *errcode, shortint *errmsg);
+extern int kernel_panic(char *errmsg);
+/* zraloc.c */
+extern int zraloc_(int *buf, int *nbytes, int *status);
+/* zshlib.c */
+extern void vlibinit_(void);
+/* zwmsec.c */
+extern int zwmsec_(int *msec);
+/* zxwhen.c */
+extern int zxwhen_(int *sig_code, int *epa, int *old_epa);
+extern void ex_handler(int unix_signal, siginfo_t *info, void *ucp);
+extern int zxgmes_(int *os_exception, shortint *errmsg, int *maxch);
+/* zzepro.c */
+extern int zzepro_(void);
+/* zzexit.c */
+extern int exit_(int *code);
+/* zzpstr.c */
+extern int spp_debug(void);
+extern int zzpstr_(shortint *s1, shortint *s2);
+extern int zzlstr_(shortint *s1, shortint *s2);
+extern void spp_printstr(shortint *s);
+extern void spp_printmemc(int memc_ptr);
+/* zzsetk.c */
+extern int zzsetk_(char *ospn, char *osbfn, int prtype, int isatty, int in, int out);
+/* zzstrt.c */
+extern int zzstrt_(void);
+extern int zzstop_(void);
+extern void ready_(void);
+extern void mdump_(int *buf, int *nbytes);
+
+
+
+#else
+
+
+
+/* dio.c */
+extern int directio(int fd, int advice);
+/* getproc.c */
+extern int uid_executing(int uid);
+/* gmttolst.c */
+extern time_t gmt_to_lst(time_t gmt);
+/* irafpath.c */
+extern char *irafpath(char *fname);
+/* prwait.c */
+extern void pr_enter(int pid, int inchan, int outchan);
+extern int pr_wait(int pid);
+extern int pr_getipc(int pid, int *inchan, int *outchan);
+extern struct proctable *pr_findpid(int pid);
+extern void pr_release(int pid);
+/* zalloc.c */
+extern int zdvall_(shortint *aliases, long *allflg, long *status);
+extern int zdvown_(shortint *device, shortint *owner, long *maxch, long *status);
+extern int loggedin(int uid);
+/* zawset.c */
+extern int zawset_(long *best_size, long *new_size, long *old_size, long *max_size);
+/* zcall.c */
+/*
+extern int zcall0_(long *proc);
+extern int zcall1_(long *proc, void *arg1);
+extern int zcall2_(long *proc, void *arg1, void *arg2);
+extern int zcall3_(long *proc, void *arg1, void *arg2, void *arg3);
+extern int zcall4_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4);
+extern int zcall5_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5);
+extern int zcall6_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6);
+extern int zcall7_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7);
+extern int zcall8_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8);
+extern int zcall9_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9);
+extern int zcalla_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9, void *arg10);
+*/
+/* zdojmp.c */
+extern void zdojmp_(long *jmpbuf, long *status);
+/* zfacss.c */
+extern int zfacss_(shortint *fname, long *mode, long *type, long *status);
+/* zfaloc.c */
+extern int zfaloc_(shortint *fname, long *nbytes, long *status);
+/* zfchdr.c */
+extern int zfchdr_(shortint *newdir, long *status);
+/* zfdele.c */
+extern int zfdele_(shortint *fname, long *status);
+/* zfgcwd.c */
+extern int zfgcwd_(shortint *outstr, long *maxch, long *status);
+/* zfinfo.c */
+extern int zfinfo_(shortint *fname, long *finfo_struct, long *status);
+/* zfiobf.c */
+extern int zopnbf_(shortint *osfn, long *mode, long *chan);
+extern int zclsbf_(long *fd, long *status);
+extern int zardbf_(long *chan, shortint *buf, long *maxbytes, long *offset);
+extern int zawrbf_(long *chan, shortint *buf, long *nbytes, long *offset);
+extern int zawtbf_(long *fd, long *status);
+extern int zsttbf_(long *fd, long *param, long *lvalue);
+extern int _u_fmode(int mode);
+extern int vm_access(char *fname, int mode);
+extern int vm_delete(char *fname, int force);
+extern int vm_reservespace(long nbytes);
+extern int vm_largefile(long nbytes);
+extern int vm_directio(int fd, int flag);
+/* zfioks.c */
+extern int zopnks_(shortint *x_server, long *mode, long *chan);
+extern int zclsks_(long *chan, long *status);
+extern int zardks_(long *chan, shortint *buf, long *totbytes, long *loffset);
+extern int zawrks_(long *chan, shortint *buf, long *totbytes, long *loffset);
+extern int zawtks_(long *chan, long *status);
+extern int zsttks_(long *chan, long *param, long *lvalue);
+extern void pr_mask(char *str);
+/* zfiolp.c */
+extern int zopnlp_(shortint *printer, long *mode, long *chan);
+extern int zclslp_(long *chan, long *status);
+extern int zardlp_(long *chan, shortint *buf, long *maxbytes, long *offset);
+extern int zawrlp_(long *chan, shortint *buf, long *nbytes, long *offset);
+extern int zawtlp_(long *chan, long *status);
+extern int zsttlp_(long *chan, long *param, long *lvalue);
+/* zfiomt.c */
+extern int zzopmt_(shortint *device, long *acmode, shortint *devcap, long *devpos, long *newfile, long *chan);
+extern int zzclmt_(long *chan, long *devpos, long *o_status);
+extern int zzrdmt_(long *chan, shortint *buf, long *maxbytes, long *offset);
+extern int zzwrmt_(long *chan, shortint *buf, long *nbytes, long *offset);
+extern int zzwtmt_(long *chan, long *devpos, long *o_status);
+extern int zzstmt_(long *chan, long *param, long *lvalue);
+extern int zzrwmt_(shortint *device, shortint *devcap, long *o_status);
+/* zfiond.c */
+extern int zopnnd_(shortint *pk_osfn, long *mode, long *chan);
+extern int zclsnd_(long *fd, long *status);
+extern int zardnd_(long *chan, shortint *buf, long *maxbytes, long *offset);
+extern int zawrnd_(long *chan, shortint *buf, long *nbytes, long *offset);
+extern int zawtnd_(long *fd, long *status);
+extern int zsttnd_(long *fd, long *param, long *lvalue);
+/* zfiopl.c */
+extern int zopnpl_(shortint *plotter, long *mode, long *chan);
+extern int zclspl_(long *chan, long *status);
+extern int zardpl_(long *chan, shortint *buf, long *maxbytes, long *offset);
+extern int zawrpl_(long *chan, shortint *buf, long *nbytes, long *offset);
+extern int zawtpl_(long *chan, long *status);
+extern int zsttpl_(long *chan, long *param, long *lvalue);
+/* zfiopr.c */
+extern int zopcpr_(shortint *osfn, long *inchan, long *outchan, long *pid);
+extern int zclcpr_(long *pid, long *exit_status);
+extern int zardpr_(long *chan, shortint *buf, long *maxbytes, long *loffset);
+extern int zawrpr_(long *chan, shortint *buf, long *nbytes, long *loffset);
+extern int zawtpr_(long *chan, long *status);
+extern int zsttpr_(long *chan, long *param, long *lvalue);
+/* zfiosf.c */
+extern int zopnsf_(shortint *osfn, long *mode, long *chan);
+extern int zclssf_(long *fd, long *status);
+extern int zardsf_(long *chan, shortint *buf, long *maxbytes, long *offset);
+extern int zawrsf_(long *chan, shortint *buf, long *nbytes, long *offset);
+extern int zawtsf_(long *fd, long *status);
+extern int zsttsf_(long *fd, long *param, long *lvalue);
+/* zfiotx.c */
+extern int zopntx_(shortint *osfn, long *mode, long *chan);
+extern int zclstx_(long *fd, long *status);
+extern int zflstx_(long *fd, long *status);
+extern int zgettx_(long *fd, shortint *buf, long *maxchars, long *status);
+extern int znottx_(long *fd, long *offset);
+extern int zputtx_(long *fd, shortint *buf, long *nchars, long *status);
+extern int zsektx_(long *fd, long *znottx_offset, long *status);
+extern int zstttx_(long *fd, long *param, long *value);
+/* zfioty.c */
+extern int zopnty_(shortint *osfn, long *mode, long *chan);
+extern int zclsty_(long *fd, long *status);
+extern int zflsty_(long *fd, long *status);
+extern int zgetty_(long *fd, shortint *buf, long *maxchars, long *status);
+extern int znotty_(long *fd, long *offset);
+extern int zputty_(long *fd, shortint *buf, long *nchars, long *status);
+extern int zsekty_(long *fd, long *znotty_offset, long *status);
+extern int zsttty_(long *fd, long *param, long *value);
+/* zfmkcp.c */
+extern int zfmkcp_(shortint *osfn, shortint *new_osfn, long *status);
+/* zfmkdr.c */
+extern int zfmkdr_(shortint *newdir, long *status);
+/* zfnbrk.c */
+extern int zfnbrk_(shortint *vfn, long *uroot_offset, long *uextn_offset);
+/* zfpath.c */
+extern int zfpath_(shortint *osfn, shortint *pathname, long *maxch, long *nchars);
+/* zfpoll.c */
+extern int zfpoll_(long *pfds, long *nfds, long *timeout, long *npoll, long *status);
+/* zfprot.c */
+extern int zfprot_(shortint *fname, long *action, long *status);
+/* zfrnam.c */
+extern int zfrnam_(shortint *oldname, shortint *newname, long *status);
+/* zfsubd.c */
+extern int zfsubd_(shortint *osdir, long *maxch, shortint *subdir, long *nchars);
+/* zfunc.c */
+extern long zfunc0_(long *proc);
+extern long zfunc1_(long *proc, void *arg1);
+extern long zfunc2_(long *proc, void *arg1, void *arg2);
+extern long zfunc3_(long *proc, void *arg1, void *arg2, void *arg3);
+extern long zfunc4_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4);
+extern long zfunc5_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5);
+extern long zfunc6_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6);
+extern long zfunc7_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7);
+extern long zfunc8_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8);
+extern long zfunc9_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9);
+extern long zfunca_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9, void *arg10);
+/* zfutim.c */
+extern int zfutim_(shortint *fname, long *atime, long *mtime, long *status);
+/* zfxdir.c */
+extern int zfxdir_(shortint *osfn, shortint *osdir, long *maxch, long *nchars);
+/* zgcmdl.c */
+extern int zgcmdl_(shortint *cmd, long *maxch, long *status);
+/* zghost.c */
+extern int zghost_(shortint *outstr, long *maxch);
+/* zglobl.c */
+/* zgmtco.c */
+extern int zgmtco_(long *gmtcor);
+/* zgtenv.c */
+extern int zgtenv_(shortint *envvar, shortint *outstr, long *maxch, long *status);
+/* zgtime.c */
+extern int zgtime_(long *clock_time, long *cpu_time);
+/* zgtpid.c */
+extern int zgtpid_(long *pid);
+/* zintpr.c */
+extern int zintpr_(long *pid, long *exception, long *status);
+/* zlocpr.c */
+/*
+extern int zlocpr_(PFI proc, long *o_epa);
+*/
+/* zlocva.c */
+extern int zlocva_(shortint *variable, long *location);
+/* zmain.c */
+extern int main(int argc, char *argv[]);
+/* zmaloc.c */
+extern int zmaloc_(long *buf, long *nbytes, long *status);
+/* zmfree.c */
+extern int zmfree_(long *buf, long *status);
+/* zopdir.c */
+extern int zopdir_(shortint *fname, long *chan);
+extern int zcldir_(long *chan, long *status);
+extern int zgfdir_(long *chan, shortint *outstr, long *maxch, long *status);
+/* zopdpr.c */
+extern int zopdpr_(shortint *osfn, shortint *bkgfile, shortint *queue, long *jobcode);
+extern int zcldpr_(long *jobcode, long *killflag, long *exit_status);
+/* zoscmd.c */
+extern int zoscmd_(shortint *oscmd, shortint *stdin_file, shortint *stdout_file, shortint *stderr_file, long *status);
+extern int pr_onint(int usig, int *hwcode, int *scp);
+/* zpanic.c */
+extern int zpanic_(long *errcode, shortint *errmsg);
+extern int kernel_panic(char *errmsg);
+/* zraloc.c */
+extern int zraloc_(long *buf, long *nbytes, long *status);
+/* zshlib.c */
+extern void vlibinit_(void);
+/* zwmsec.c */
+extern int zwmsec_(long *msec);
+/* zxwhen.c */
+extern int zxwhen_(long *sig_code, long *epa, long *old_epa);
+extern void ex_handler(int unix_signal, siginfo_t *info, void *ucp);
+extern int zxgmes_(long *os_exception, shortint *errmsg, long *maxch);
+extern int gfpucw_(long *xcw);
+extern int sfpucw_(long *xcw);
+/* zzepro.c */
+/*
+extern int zzepro_(void);
+*/
+/* zzexit.c */
+extern int exit_(long *code);
+/* zzpstr.c */
+extern int spp_debug(void);
+extern int zzpstr_(shortint *s1, shortint *s2);
+extern int zzlstr_(shortint *s1, shortint *s2);
+extern void spp_printstr(shortint *s);
+extern void spp_printmemc(int memc_ptr);
+/* zzsetk.c */
+extern int zzsetk_(char *ospn, char *osbfn, int prtype, int isatty, int in, int out);
+/* zzstrt.c */
+extern int zzstrt_(void);
+extern int zzstop_(void);
+extern void ready_(void);
+extern void mdump_(long *buf, long *nbytes);
+
+
+#endif
diff --git a/unix/hlib/libc/kproto.h.bak b/unix/hlib/libc/kproto.h.bak
new file mode 100644
index 00000000..adde5ecd
--- /dev/null
+++ b/unix/hlib/libc/kproto.h.bak
@@ -0,0 +1,494 @@
+/*
+ * KPROTO.H -- IRAF Kernel prototype definitions.
+ */
+
+#include <stdio.h>
+#include <time.h> /* for time_t */
+#include <signal.h> /* for siginfo_t */
+
+#ifndef MACH64
+
+
+/* alloc.c */
+extern int main(int argc, char *argv[]);
+extern int alloc(char *argv[], int statonly);
+extern int dealloc(char *argv[]);
+extern int findsfs(char *argv[]);
+/* dio.c */
+extern int directio(int fd, int advice);
+/* getproc.c */
+extern int uid_executing(int uid);
+/* gmttolst.c */
+extern time_t gmt_to_lst(time_t gmt);
+/* irafpath.c */
+extern char *irafpath(char *fname);
+/* prwait.c */
+extern void pr_enter(int pid, int inchan, int outchan);
+extern int pr_wait(int pid);
+extern int pr_getipc(int pid, int *inchan, int *outchan);
+extern struct proctable *pr_findpid(int pid);
+extern void pr_release(int pid);
+/* tape.c */
+extern int main(int argc, char *argv[]);
+extern void mtop(int op, int count);
+extern char *nextcmd(FILE *in);
+extern char *gettok(void);
+extern char *prompt(void);
+extern void pstatus(void);
+extern void output(char *text);
+extern void phelp(void);
+/* zalloc.c */
+extern int zdvall_(short *aliases, int *allflg, int *status);
+extern int zdvown_(short *device, short *owner, int *maxch, int *status);
+extern int loggedin(int uid);
+/* zawset.c */
+extern int zawset_(int *best_size, int *new_size, int *old_size, int *max_size);
+/* zcall.c */
+extern int zcall0_(int *proc);
+extern int zcall1_(int *proc, void *arg1);
+extern int zcall2_(int *proc, void *arg1, void *arg2);
+extern int zcall3_(int *proc, void *arg1, void *arg2, void *arg3);
+extern int zcall4_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4);
+extern int zcall5_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5);
+extern int zcall6_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6);
+extern int zcall7_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7);
+extern int zcall8_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8);
+extern int zcall9_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9);
+extern int zcalla_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9, void *arg10);
+/* zdojmp.c */
+extern void zdojmp_(int *jmpbuf, int *status);
+/* zfacss.c */
+extern int zfacss_(short *fname, int *mode, int *type, int *status);
+/* zfaloc.c */
+extern int zfaloc_(short *fname, int *nbytes, int *status);
+/* zfchdr.c */
+extern int zfchdr_(short *newdir, int *status);
+/* zfdele.c */
+extern int zfdele_(short *fname, int *status);
+/* zfgcwd.c */
+extern int zfgcwd_(short *outstr, int *maxch, int *status);
+/* zfinfo.c */
+extern int zfinfo_(short *fname, int *finfo_struct, int *status);
+/* zfiobf.c */
+extern int zopnbf_(short *osfn, int *mode, int *chan);
+extern int zclsbf_(int *fd, int *status);
+extern int zardbf_(int *chan, short *buf, int *maxbytes, int *offset);
+extern int zawrbf_(int *chan, short *buf, int *nbytes, int *offset);
+extern int zawtbf_(int *fd, int *status);
+extern int zsttbf_(int *fd, int *param, int *lvalue);
+extern int _u_fmode(int mode);
+extern int vm_access(char *fname, int mode);
+extern int vm_delete(char *fname, int force);
+extern int vm_reservespace(long nbytes);
+extern int vm_largefile(long nbytes);
+extern int vm_directio(int fd, int flag);
+/* zfioks.c */
+extern int zopnks_(short *x_server, int *mode, int *chan);
+extern int zclsks_(int *chan, int *status);
+extern int zardks_(int *chan, short *buf, int *totbytes, int *loffset);
+extern int zawrks_(int *chan, short *buf, int *totbytes, int *loffset);
+extern int zawtks_(int *chan, int *status);
+extern int zsttks_(int *chan, int *param, int *lvalue);
+extern void pr_mask(char *str);
+/* zfiolp.c */
+extern int zopnlp_(short *printer, int *mode, int *chan);
+extern int zclslp_(int *chan, int *status);
+extern int zardlp_(int *chan, short *buf, int *maxbytes, int *offset);
+extern int zawrlp_(int *chan, short *buf, int *nbytes, int *offset);
+extern int zawtlp_(int *chan, int *status);
+extern int zsttlp_(int *chan, int *param, int *lvalue);
+/* zfiomt.c */
+extern int zzopmt_(short *device, int *acmode, short *devcap, int *devpos, int *newfile, int *chan);
+extern int zzclmt_(int *chan, int *devpos, int *o_status);
+extern int zzrdmt_(int *chan, short *buf, int *maxbytes, int *offset);
+extern int zzwrmt_(int *chan, short *buf, int *nbytes, int *offset);
+extern int zzwtmt_(int *chan, int *devpos, int *o_status);
+extern int zzstmt_(int *chan, int *param, int *lvalue);
+extern int zzrwmt_(short *device, short *devcap, int *o_status);
+/* zfiond.c */
+extern int zopnnd_(short *pk_osfn, int *mode, int *chan);
+extern int zclsnd_(int *fd, int *status);
+extern int zardnd_(int *chan, short *buf, int *maxbytes, int *offset);
+extern int zawrnd_(int *chan, short *buf, int *nbytes, int *offset);
+extern int zawtnd_(int *fd, int *status);
+extern int zsttnd_(int *fd, int *param, int *lvalue);
+/* zfiopl.c */
+extern int zopnpl_(short *plotter, int *mode, int *chan);
+extern int zclspl_(int *chan, int *status);
+extern int zardpl_(int *chan, short *buf, int *maxbytes, int *offset);
+extern int zawrpl_(int *chan, short *buf, int *nbytes, int *offset);
+extern int zawtpl_(int *chan, int *status);
+extern int zsttpl_(int *chan, int *param, int *lvalue);
+/* zfiopr.c */
+extern int zopcpr_(short *osfn, int *inchan, int *outchan, int *pid);
+extern int zclcpr_(int *pid, int *exit_status);
+extern int zardpr_(int *chan, short *buf, int *maxbytes, int *loffset);
+extern int zawrpr_(int *chan, short *buf, int *nbytes, int *loffset);
+extern int zawtpr_(int *chan, int *status);
+extern int zsttpr_(int *chan, int *param, int *lvalue);
+/* zfiosf.c */
+extern int zopnsf_(short *osfn, int *mode, int *chan);
+extern int zclssf_(int *fd, int *status);
+extern int zardsf_(int *chan, short *buf, int *maxbytes, int *offset);
+extern int zawrsf_(int *chan, short *buf, int *nbytes, int *offset);
+extern int zawtsf_(int *fd, int *status);
+extern int zsttsf_(int *fd, int *param, int *lvalue);
+/* zfiotx.c */
+extern int zopntx_(short *osfn, int *mode, int *chan);
+extern int zclstx_(int *fd, int *status);
+extern int zflstx_(int *fd, int *status);
+extern int zgettx_(int *fd, short *buf, int *maxchars, int *status);
+extern int znottx_(int *fd, int *offset);
+extern int zputtx_(int *fd, short *buf, int *nchars, int *status);
+extern int zsektx_(int *fd, int *znottx_offset, int *status);
+extern int zstttx_(int *fd, int *param, int *value);
+/* zfioty.c */
+extern int zopnty_(short *osfn, int *mode, int *chan);
+extern int zclsty_(int *fd, int *status);
+extern int zflsty_(int *fd, int *status);
+extern int zgetty_(int *fd, short *buf, int *maxchars, int *status);
+extern int znotty_(int *fd, int *offset);
+extern int zputty_(int *fd, short *buf, int *nchars, int *status);
+extern int zsekty_(int *fd, int *znotty_offset, int *status);
+extern int zsttty_(int *fd, int *param, int *value);
+/* zfmkcp.c */
+extern int zfmkcp_(short *osfn, short *new_osfn, int *status);
+/* zfmkdr.c */
+extern int zfmkdr_(short *newdir, int *status);
+/* zfnbrk.c */
+extern int zfnbrk_(short *vfn, int *uroot_offset, int *uextn_offset);
+/* zfpath.c */
+extern int zfpath_(short *osfn, short *pathname, int *maxch, int *nchars);
+/* zfpoll.c */
+extern int zfpoll_(int *pfds, int *nfds, int *timeout, int *npoll, int *status);
+/* zfprot.c */
+extern int zfprot_(short *fname, int *action, int *status);
+/* zfrnam.c */
+extern int zfrnam_(short *oldname, short *newname, int *status);
+/* zfsubd.c */
+extern int zfsubd_(short *osdir, int *maxch, short *subdir, int *nchars);
+/* zfunc.c */
+extern int zfunc0_(int *proc);
+extern int zfunc1_(int *proc, void *arg1);
+extern int zfunc2_(int *proc, void *arg1, void *arg2);
+extern int zfunc3_(int *proc, void *arg1, void *arg2, void *arg3);
+extern int zfunc4_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4);
+extern int zfunc5_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5);
+extern int zfunc6_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6);
+extern int zfunc7_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7);
+extern int zfunc8_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8);
+extern int zfunc9_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9);
+extern int zfunca_(int *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9, void *arg10);
+/* zfutim.c */
+extern int zfutim_(short *fname, int *atime, int *mtime, int *status);
+/* zfxdir.c */
+extern int zfxdir_(short *osfn, short *osdir, int *maxch, int *nchars);
+/* zgcmdl.c */
+extern int zgcmdl_(short *cmd, int *maxch, int *status);
+/* zghost.c */
+extern int zghost_(short *outstr, int *maxch);
+/* zglobl.c */
+/* zgmtco.c */
+extern int zgmtco_(int *gmtcor);
+/* zgtenv.c */
+extern int zgtenv_(short *envvar, short *outstr, int *maxch, int *status);
+/* zgtime.c */
+extern int zgtime_(int *clock_time, int *cpu_time);
+/* zgtpid.c */
+extern int zgtpid_(int *pid);
+/* zintpr.c */
+extern int zintpr_(int *pid, int *exception, int *status);
+/* zlocpr.c
+extern int zlocpr_(PFI proc, int *o_epa);
+*/
+/* zlocva.c */
+extern int zlocva_(short *variable, int *location);
+/* zmain.c */
+extern int main(int argc, char *argv[]);
+/* zmaloc.c */
+extern int zmaloc_(int *buf, int *nbytes, int *status);
+/* zmfree.c */
+extern int zmfree_(int *buf, int *status);
+/* zopdir.c */
+extern int zopdir_(short *fname, int *chan);
+extern int zcldir_(int *chan, int *status);
+extern int zgfdir_(int *chan, short *outstr, int *maxch, int *status);
+/* zopdpr.c */
+extern int zopdpr_(short *osfn, short *bkgfile, short *queue, int *jobcode);
+extern int zcldpr_(int *jobcode, int *killflag, int *exit_status);
+/* zoscmd.c */
+extern int zoscmd_(short *oscmd, short *stdin_file, short *stdout_file, short *stderr_file, int *status);
+extern int pr_onint(int usig, int *hwcode, int *scp);
+/* zpanic.c */
+extern int zpanic_(int *errcode, short *errmsg);
+extern int kernel_panic(char *errmsg);
+/* zraloc.c */
+extern int zraloc_(int *buf, int *nbytes, int *status);
+/* zshlib.c */
+extern void vlibinit_(void);
+/* zwmsec.c */
+extern int zwmsec_(int *msec);
+/* zxwhen.c */
+extern int zxwhen_(int *sig_code, int *epa, int *old_epa);
+extern void ex_handler(int unix_signal, siginfo_t *info, void *ucp);
+extern int zxgmes_(int *os_exception, short *errmsg, int *maxch);
+/* zzepro.c */
+extern int zzepro_(void);
+/* zzexit.c */
+extern int exit_(int *code);
+/* zzpstr.c */
+extern int spp_debug(void);
+extern int zzpstr_(short *s1, short *s2);
+extern int zzlstr_(short *s1, short *s2);
+extern void spp_printstr(short *s);
+extern void spp_printmemc(int memc_ptr);
+/* zzsetk.c */
+extern int zzsetk_(char *ospn, char *osbfn, int prtype, int isatty, int in, int out);
+/* zzstrt.c */
+extern int zzstrt_(void);
+extern int zzstop_(void);
+extern void ready_(void);
+extern void mdump_(int *buf, int *nbytes);
+
+
+
+#else
+
+
+
+/* dio.c */
+extern int directio(int fd, int advice);
+/* getproc.c */
+extern int uid_executing(int uid);
+/* gmttolst.c */
+extern time_t gmt_to_lst(time_t gmt);
+/* irafpath.c */
+extern char *irafpath(char *fname);
+/* prwait.c */
+extern void pr_enter(int pid, int inchan, int outchan);
+extern int pr_wait(int pid);
+extern int pr_getipc(int pid, int *inchan, int *outchan);
+extern struct proctable *pr_findpid(int pid);
+extern void pr_release(int pid);
+/* zalloc.c */
+extern int zdvall_(short *aliases, long *allflg, long *status);
+extern int zdvown_(short *device, short *owner, long *maxch, long *status);
+extern int loggedin(int uid);
+/* zawset.c */
+extern int zawset_(long *best_size, long *new_size, long *old_size, long *max_size);
+/* zcall.c */
+/*
+extern int zcall0_(long *proc);
+extern int zcall1_(long *proc, void *arg1);
+extern int zcall2_(long *proc, void *arg1, void *arg2);
+extern int zcall3_(long *proc, void *arg1, void *arg2, void *arg3);
+extern int zcall4_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4);
+extern int zcall5_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5);
+extern int zcall6_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6);
+extern int zcall7_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7);
+extern int zcall8_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8);
+extern int zcall9_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9);
+extern int zcalla_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9, void *arg10);
+*/
+/* zdojmp.c */
+extern void zdojmp_(long *jmpbuf, long *status);
+/* zfacss.c */
+extern int zfacss_(short *fname, long *mode, long *type, long *status);
+/* zfaloc.c */
+extern int zfaloc_(short *fname, long *nbytes, long *status);
+/* zfchdr.c */
+extern int zfchdr_(short *newdir, long *status);
+/* zfdele.c */
+extern int zfdele_(short *fname, long *status);
+/* zfgcwd.c */
+extern int zfgcwd_(short *outstr, long *maxch, long *status);
+/* zfinfo.c */
+extern int zfinfo_(short *fname, long *finfo_struct, long *status);
+/* zfiobf.c */
+extern int zopnbf_(short *osfn, long *mode, long *chan);
+extern int zclsbf_(long *fd, long *status);
+extern int zardbf_(long *chan, short *buf, long *maxbytes, long *offset);
+extern int zawrbf_(long *chan, short *buf, long *nbytes, long *offset);
+extern int zawtbf_(long *fd, long *status);
+extern int zsttbf_(long *fd, long *param, long *lvalue);
+extern int _u_fmode(int mode);
+extern int vm_access(char *fname, int mode);
+extern int vm_delete(char *fname, int force);
+extern int vm_reservespace(long nbytes);
+extern int vm_largefile(long nbytes);
+extern int vm_directio(int fd, int flag);
+/* zfioks.c */
+extern int zopnks_(short *x_server, long *mode, long *chan);
+extern int zclsks_(long *chan, long *status);
+extern int zardks_(long *chan, short *buf, long *totbytes, long *loffset);
+extern int zawrks_(long *chan, short *buf, long *totbytes, long *loffset);
+extern int zawtks_(long *chan, long *status);
+extern int zsttks_(long *chan, long *param, long *lvalue);
+extern void pr_mask(char *str);
+/* zfiolp.c */
+extern int zopnlp_(short *printer, long *mode, long *chan);
+extern int zclslp_(long *chan, long *status);
+extern int zardlp_(long *chan, short *buf, long *maxbytes, long *offset);
+extern int zawrlp_(long *chan, short *buf, long *nbytes, long *offset);
+extern int zawtlp_(long *chan, long *status);
+extern int zsttlp_(long *chan, long *param, long *lvalue);
+/* zfiomt.c */
+extern int zzopmt_(short *device, long *acmode, short *devcap, long *devpos, long *newfile, long *chan);
+extern int zzclmt_(long *chan, long *devpos, long *o_status);
+extern int zzrdmt_(long *chan, short *buf, long *maxbytes, long *offset);
+extern int zzwrmt_(long *chan, short *buf, long *nbytes, long *offset);
+extern int zzwtmt_(long *chan, long *devpos, long *o_status);
+extern int zzstmt_(long *chan, long *param, long *lvalue);
+extern int zzrwmt_(short *device, short *devcap, long *o_status);
+/* zfiond.c */
+extern int zopnnd_(short *pk_osfn, long *mode, long *chan);
+extern int zclsnd_(long *fd, long *status);
+extern int zardnd_(long *chan, short *buf, long *maxbytes, long *offset);
+extern int zawrnd_(long *chan, short *buf, long *nbytes, long *offset);
+extern int zawtnd_(long *fd, long *status);
+extern int zsttnd_(long *fd, long *param, long *lvalue);
+/* zfiopl.c */
+extern int zopnpl_(short *plotter, long *mode, long *chan);
+extern int zclspl_(long *chan, long *status);
+extern int zardpl_(long *chan, short *buf, long *maxbytes, long *offset);
+extern int zawrpl_(long *chan, short *buf, long *nbytes, long *offset);
+extern int zawtpl_(long *chan, long *status);
+extern int zsttpl_(long *chan, long *param, long *lvalue);
+/* zfiopr.c */
+extern int zopcpr_(short *osfn, long *inchan, long *outchan, long *pid);
+extern int zclcpr_(long *pid, long *exit_status);
+extern int zardpr_(long *chan, short *buf, long *maxbytes, long *loffset);
+extern int zawrpr_(long *chan, short *buf, long *nbytes, long *loffset);
+extern int zawtpr_(long *chan, long *status);
+extern int zsttpr_(long *chan, long *param, long *lvalue);
+/* zfiosf.c */
+extern int zopnsf_(short *osfn, long *mode, long *chan);
+extern int zclssf_(long *fd, long *status);
+extern int zardsf_(long *chan, short *buf, long *maxbytes, long *offset);
+extern int zawrsf_(long *chan, short *buf, long *nbytes, long *offset);
+extern int zawtsf_(long *fd, long *status);
+extern int zsttsf_(long *fd, long *param, long *lvalue);
+/* zfiotx.c */
+extern int zopntx_(short *osfn, long *mode, long *chan);
+extern int zclstx_(long *fd, long *status);
+extern int zflstx_(long *fd, long *status);
+extern int zgettx_(long *fd, short *buf, long *maxchars, long *status);
+extern int znottx_(long *fd, long *offset);
+extern int zputtx_(long *fd, short *buf, long *nchars, long *status);
+extern int zsektx_(long *fd, long *znottx_offset, long *status);
+extern int zstttx_(long *fd, long *param, long *value);
+/* zfioty.c */
+extern int zopnty_(short *osfn, long *mode, long *chan);
+extern int zclsty_(long *fd, long *status);
+extern int zflsty_(long *fd, long *status);
+extern int zgetty_(long *fd, short *buf, long *maxchars, long *status);
+extern int znotty_(long *fd, long *offset);
+extern int zputty_(long *fd, short *buf, long *nchars, long *status);
+extern int zsekty_(long *fd, long *znotty_offset, long *status);
+extern int zsttty_(long *fd, long *param, long *value);
+/* zfmkcp.c */
+extern int zfmkcp_(short *osfn, short *new_osfn, long *status);
+/* zfmkdr.c */
+extern int zfmkdr_(short *newdir, long *status);
+/* zfnbrk.c */
+extern int zfnbrk_(short *vfn, long *uroot_offset, long *uextn_offset);
+/* zfpath.c */
+extern int zfpath_(short *osfn, short *pathname, long *maxch, long *nchars);
+/* zfpoll.c */
+extern int zfpoll_(long *pfds, long *nfds, long *timeout, long *npoll, long *status);
+/* zfprot.c */
+extern int zfprot_(short *fname, long *action, long *status);
+/* zfrnam.c */
+extern int zfrnam_(short *oldname, short *newname, long *status);
+/* zfsubd.c */
+extern int zfsubd_(short *osdir, long *maxch, short *subdir, long *nchars);
+/* zfunc.c */
+extern long zfunc0_(long *proc);
+extern long zfunc1_(long *proc, void *arg1);
+extern long zfunc2_(long *proc, void *arg1, void *arg2);
+extern long zfunc3_(long *proc, void *arg1, void *arg2, void *arg3);
+extern long zfunc4_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4);
+extern long zfunc5_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5);
+extern long zfunc6_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6);
+extern long zfunc7_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7);
+extern long zfunc8_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8);
+extern long zfunc9_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9);
+extern long zfunca_(long *proc, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9, void *arg10);
+/* zfutim.c */
+extern int zfutim_(short *fname, long *atime, long *mtime, long *status);
+/* zfxdir.c */
+extern int zfxdir_(short *osfn, short *osdir, long *maxch, long *nchars);
+/* zgcmdl.c */
+extern int zgcmdl_(short *cmd, long *maxch, long *status);
+/* zghost.c */
+extern int zghost_(short *outstr, long *maxch);
+/* zglobl.c */
+/* zgmtco.c */
+extern int zgmtco_(long *gmtcor);
+/* zgtenv.c */
+extern int zgtenv_(short *envvar, short *outstr, long *maxch, long *status);
+/* zgtime.c */
+extern int zgtime_(long *clock_time, long *cpu_time);
+/* zgtpid.c */
+extern int zgtpid_(long *pid);
+/* zintpr.c */
+extern int zintpr_(long *pid, long *exception, long *status);
+/* zlocpr.c */
+/*
+extern int zlocpr_(PFI proc, long *o_epa);
+*/
+/* zlocva.c */
+extern int zlocva_(short *variable, long *location);
+/* zmain.c */
+extern int main(int argc, char *argv[]);
+/* zmaloc.c */
+extern int zmaloc_(long *buf, long *nbytes, long *status);
+/* zmfree.c */
+extern int zmfree_(long *buf, long *status);
+/* zopdir.c */
+extern int zopdir_(short *fname, long *chan);
+extern int zcldir_(long *chan, long *status);
+extern int zgfdir_(long *chan, short *outstr, long *maxch, long *status);
+/* zopdpr.c */
+extern int zopdpr_(short *osfn, short *bkgfile, short *queue, long *jobcode);
+extern int zcldpr_(long *jobcode, long *killflag, long *exit_status);
+/* zoscmd.c */
+extern int zoscmd_(short *oscmd, short *stdin_file, short *stdout_file, short *stderr_file, long *status);
+extern int pr_onint(int usig, int *hwcode, int *scp);
+/* zpanic.c */
+extern int zpanic_(long *errcode, short *errmsg);
+extern int kernel_panic(char *errmsg);
+/* zraloc.c */
+extern int zraloc_(long *buf, long *nbytes, long *status);
+/* zshlib.c */
+extern void vlibinit_(void);
+/* zwmsec.c */
+extern int zwmsec_(long *msec);
+/* zxwhen.c */
+extern int zxwhen_(long *sig_code, long *epa, long *old_epa);
+extern void ex_handler(int unix_signal, siginfo_t *info, void *ucp);
+extern int zxgmes_(long *os_exception, short *errmsg, long *maxch);
+extern int gfpucw_(long *xcw);
+extern int sfpucw_(long *xcw);
+/* zzepro.c */
+/*
+extern int zzepro_(void);
+*/
+/* zzexit.c */
+extern int exit_(long *code);
+/* zzpstr.c */
+extern int spp_debug(void);
+extern int zzpstr_(short *s1, short *s2);
+extern int zzlstr_(short *s1, short *s2);
+extern void spp_printstr(short *s);
+extern void spp_printmemc(int memc_ptr);
+/* zzsetk.c */
+extern int zzsetk_(char *ospn, char *osbfn, int prtype, int isatty, int in, int out);
+/* zzstrt.c */
+extern int zzstrt_(void);
+extern int zzstop_(void);
+extern void ready_(void);
+extern void mdump_(long *buf, long *nbytes);
+
+
+#endif
diff --git a/unix/hlib/libc/lexnum.h b/unix/hlib/libc/lexnum.h
new file mode 100644
index 00000000..d83ef138
--- /dev/null
+++ b/unix/hlib/libc/lexnum.h
@@ -0,0 +1,9 @@
+/* Lexnum.h
+ */
+#define LEX_OCTAL (-4)
+#define LEX_DECIMAL (-3)
+#define LEX_HEX (-2)
+#define LEX_REAL (-1)
+#define LEX_NONNUM 0
+
+#define D_lexnum
diff --git a/unix/hlib/libc/libc.h b/unix/hlib/libc/libc.h
new file mode 100644
index 00000000..83c2f136
--- /dev/null
+++ b/unix/hlib/libc/libc.h
@@ -0,0 +1,330 @@
+/*
+ * LIBC.H -- Definitions which should be included by all C source files which
+ * use the IRAF runtime C library.
+ */
+
+#ifndef D_libc
+#ifndef D_spp
+#ifndef import_spp
+#include "spp.h"
+#endif
+#endif
+
+#define XCHAR short
+#ifdef MACH64
+#define XINT long
+#define XLONG long
+#else
+#define XINT int
+#define XLONG int
+#endif
+#define SZ_DEFIOBUF 1024
+#define FIO_MAXFD 4096
+
+#define FIOCOM fiocom_ /* [MACHDEP] */
+#define MEMCOM mem_
+#define XERPSH xerpsh_
+#define XERPOP xerpop_
+#define XERPOPI xerpoi_
+#define c_main cmain_
+
+/* Error handling.
+ */
+#define iferr(stmt) {XERPSH();stmt;}if(XERPOPI())
+
+/* SPP/C pointer conversions.
+ */
+extern char MEMCOM[];
+#define Memc (((XCHAR *)MEMCOM)-1)
+#define Memi (((XINT *)MEMCOM)-1)
+#define Memcptr(addr) ((XCHAR *)(addr) - Memc)
+#define Memiptr(addr) ((XINT *)(addr) - Memi)
+
+/* External names.
+ */
+#ifndef NOLIBCNAMES
+
+#define getenv envget
+#define sys_nerr u_sysnerr
+#define sys_errlist u_syserrlist
+
+#define atof u_atof
+#define atoi u_atoi
+#define atol u_atol
+#define calloc u_calloc
+#define envget u_envget
+#define eprintf u_eprintf
+#define fclose u_fclose
+#define fdopen u_fdopen
+#define fflush u_fflush
+#define fgetc u_fgetc
+#define fgets u_fgets
+#define fopen u_fopen
+#define fprintf u_fprintf
+#define fputc u_fputc
+#define fputs u_fputs
+#define fread u_fread
+#define freadline u_readline
+#define free u_free
+#define freopen u_freopen
+#define fscanf u_fscanf
+#define fseek u_fseek
+#define ftell u_ftell
+#define fwrite u_fwrite
+#define gets u_gets
+#define getw u_getw
+#define index u_index
+#define isatty u_isatty
+#define malloc u_malloc
+#define mktemp u_mktemp
+#define perror u_perror
+#define printf u_printf
+#define puts u_puts
+#define putw u_putw
+#define qsort u_qsort
+#define realloc u_realloc
+#define rewind u_rewind
+#define rindex u_rindex
+#define scanf u_scanf
+#define setbuf u_setbuf
+#define setbuffer u_setfbf /* collision */
+#define setlinebuf u_setlinebuf
+#define sprintf u_sprintf
+#define sscanf u_sscanf
+#define strcat u_strcat
+#define strchr u_index
+#define strcmp u_strcmp
+#define strdup u_strdup
+#define strcpy u_strcpy
+#define strlen u_strlen
+#define strncat u_strnt /* collision */
+#define strncmp u_strnp /* collision */
+#define strncpy u_strny /* collision */
+#define strrchr u_rindex
+#define system u_system
+#define ungetc u_ungetc
+
+/* C_SPP names not unique in the first seven characters.
+ */
+#define c_envgetb c_envgb
+#define c_envgeti c_envgi
+#define c_envgets c_envgs
+#define c_ttyclear c_ttycr
+#define c_ttyclearln c_ttycn
+#define c_ttygetb c_ttygb
+#define c_ttygeti c_ttygi
+#define c_ttygetr c_ttygr
+#define c_ttygets c_ttygs
+#define c_ttyputline c_ttype
+#define c_ttyputs c_ttyps
+#define c_ungetc c_ungec
+#define c_ungetstr c_unges
+
+
+/*
+ * Prototype definitions for the IRAF runtime C library.
+ */
+
+/*extern long XERPSH(), XERPOPI();*/ /* standard for iferr use */
+
+extern struct _iobuf *fdopen (XINT fd, char *mode);
+extern struct _iobuf *fopen (char *fname, char *modestr);
+extern struct _iobuf *freopen (char *fname, char *modestr, struct _iobuf *fp);
+extern char *c_cnvdate (long clktime, char *outstr, int maxch);
+extern char *c_cnvtime (long clktime, char *outstr, int maxch);
+extern char *c_getuid (char *outstr, int maxch);
+extern char *c_salloc (unsigned nbytes);
+extern char *c_strpak (short *sppstr, char *cstr, int maxch);
+extern char *calloc (unsigned int nelems, unsigned int elsize);
+extern char *envget (char *var);
+extern char *fgets (char *buf, int maxch, struct _iobuf *fp);
+extern char *gets (char *buf);
+extern char *index (char *str, int ch);
+extern char *malloc (unsigned nbytes);
+extern char *mktemp (char *template);
+extern char *freadline (char *prompt);
+extern char *realloc (char *buf, unsigned newsize);
+extern char *rindex (char *str, int ch);
+extern char *sprintf (char *str, char *format, ...);
+extern char *strcat (char *s1, char *s2);
+extern char *strdup (char *str);
+extern char *strcpy (char *s1, char *s2);
+extern char *strncat (char *s1, char *s2, int n);
+extern char *strncpy (char *s1, char *s2, int n);
+extern int strncmp (char *s1, char *s2, int n);
+
+extern double atof (char *str);
+extern float c_ttygr (XINT tty, char *cap);
+extern int atoi (char *str);
+extern int c_access (char *fname, int mode, int type);
+extern int c_allocate (char *device);
+extern int c_close (XINT fd);
+extern int c_deallocate (char *device, int rewind);
+extern int c_delete (char *fname);
+extern int c_devowner (char *device, char *owner, int maxch);
+extern int c_envfind (char *var, char *outstr, int maxch);
+extern int c_envfree (int envp, int userfcn);
+extern int c_envgb (char *var);
+extern int c_envgi (char *var);
+extern int c_envgs (char *var, char *outstr, int maxch);
+extern int c_envscan (char *input_source);
+extern int c_errcode (void);
+extern int c_errget (char *outstr, int maxch);
+extern int c_fchdir (char *newdir);
+extern int c_filbuf (struct _iobuf *fp);
+extern int c_flsbuf (unsigned int ch, struct _iobuf *fp);
+extern int c_fmapfn (char *vfn, char *osfn, int maxch);
+extern int c_fmkdir (char *newdir);
+extern int c_fnextn (char *vfn, char *extn, int maxch);
+extern int c_fnldir (char *vfn, char *ldir, int maxch);
+extern int c_fnroot (char *vfn, char *root, int maxch);
+extern int c_fpathname (char *vfn, char *osfn, int maxch);
+extern int c_fprintf (XINT fd, char *format);
+extern int c_fredir (XINT fd, char *fname, int mode, int type);
+extern int c_frediro (XINT fd, XINT newfd);
+extern int c_fstati (XINT fd, int param);
+extern int c_getpid (void);
+extern int c_imaccess (char *imname, int mode);
+extern int c_imdrcur (char *device, float *x, float *y, int *wcs,
+ int *key, char *strval, int maxch, int d_wcs, int pause);
+extern int c_kimapchan (int chan, char *nodename, int maxch);
+extern int c_lexnum (char *str, int *toklen);
+extern int c_mktemp (char *root, char *temp_filename, int maxch);
+extern int c_ndopen (char *fname, int mode);
+extern int c_open (char *fname, int mode, int type);
+extern int c_oscmd (char *cmd, char *infile, char *outfile, char *errfile);
+extern int c_poll (XINT fds, int nfds, int timeout);
+extern int c_poll_get_nfds (XINT fds);
+extern XINT c_poll_open (void);
+extern int c_poll_test (XINT fds, XINT fd, int type);
+extern int c_prchdir (int pid, char *newdir);
+extern int c_prcldpr (unsigned job);
+extern int c_prclose (unsigned int pid);
+extern int c_prdone (unsigned job);
+extern int c_prenvfree (int pid, int envp);
+extern int c_prenvset (int pid, char *envvar, char *value);
+extern int c_printf (char *format);
+extern int c_prkill (unsigned job);
+extern int c_prredir (unsigned pid, int stream, int new_fd);
+extern int c_prsignal (unsigned pid, int signal);
+extern int c_prstati (int pid, int param);
+extern int c_rcursor (int fd, char *outstr, int maxch);
+extern int c_rdukey (char *obuf, int maxch);
+extern int c_read (XINT fd, char *buf, int maxbytes);
+extern int c_rename (char *old_fname, char *new_fname);
+extern int c_reopen (XINT fd, int mode);
+extern int c_seek (XINT fd, long offset);
+extern int c_stggetline (XINT fd, char *buf, int maxch);
+extern int c_stgputline (XINT fd, char *buf);
+extern int c_stropen (short *obuf, int maxch, int mode);
+extern int c_ttstati (XINT fd, int param);
+extern int c_ttstats (XINT fd, int param, char *outstr, int maxch);
+extern int c_ttyctrl (XINT fd, XINT tty, char *cap, int afflncnt);
+extern int c_ttygb (XINT tty, char *cap);
+extern XINT c_ttygi (XINT tty, char *cap);
+extern int c_ttygs (XINT tty, char *cap, char *outstr, int maxch);
+extern XINT c_ttyodes (char *ttyname);
+extern int c_ttyps (XINT fd, XINT tty, char *cap, int afflncnt);
+extern XINT c_ttystati (XINT tty, int param);
+extern int c_ungec (XINT fd, int ch);
+extern int c_ungetline (XINT fd, char *str);
+extern int c_write (XINT fd, char *buf, int nbytes);
+extern int fclose (struct _iobuf *fp);
+extern int fflush (struct _iobuf *fp);
+extern int fgetc (struct _iobuf *fp);
+extern int fputc (char ch, struct _iobuf *fp);
+extern int fread (char *bp, int szelem, int nelem, struct _iobuf *fp);
+extern int fscanf (struct _iobuf *fp, char *format, ...);
+extern int fseek (struct _iobuf *fp, long offset, int mode);
+extern int fwrite (char *bp, int szelem, int nelem, struct _iobuf *fp);
+extern int getw (struct _iobuf *fp);
+extern int isatty (XINT fd);
+extern int puts (char *str);
+extern int putw (int word, struct _iobuf *fp);
+extern int scanf (char *format, ...);
+extern int spf_open (char *buf, int maxch);
+extern int sscanf (char *str, char *format, ...);
+extern int strcmp (char *s1, char *s2);
+extern int strlen (char *s);
+extern int system (char *cmd);
+extern int ungetc (int ch, struct _iobuf *fp);
+extern long atol (char *str);
+extern long c_clktime (long reftime);
+extern long c_cputime (long reftime);
+extern long c_note (XINT fd);
+extern long ftell (struct _iobuf *fp);
+extern long rewind (struct _iobuf *fp);
+extern short *c_sppstr (char *str);
+extern short *c_strupk (char *str, short *outstr, int maxch);
+extern unsigned int c_propdpr (char *process, char *bkgfile, char *bkgmsg);
+extern unsigned int c_propen (char *process, int *in, int *out);
+extern void c_devstatus (char *device, int out);
+extern void c_envlist (XINT fd, char *prefix, int show_redefs);
+extern void c_envmark (XINT *envp);
+extern void c_envputs (char *var, char *value);
+extern void c_envreset (char *var, char *value);
+extern void c_erract (int action);
+extern void c_error (int errcode, char *errmsg);
+extern void c_flush (XINT fd);
+extern void c_fseti (XINT fd, int param, int value);
+extern void c_gflush (int stream);
+extern void c_pargb (int ival);
+extern void c_pargc (int ival);
+extern void c_pargd (double dval);
+extern void c_pargi (int ival);
+extern void c_pargl (long lval);
+extern void c_pargr (float rval);
+extern void c_pargs (short sval);
+extern void c_pargstr (char *strval);
+extern void c_poll_clear (XINT fds, XINT fd, int type);
+extern void c_poll_close (XINT fds);
+extern void c_poll_print (XINT fds);
+extern void c_poll_set (XINT fds, XINT fd, int type);
+extern void c_poll_zero (XINT fds);
+extern void c_sfree (int sp);
+extern void c_smark (int *sp);
+extern void c_sttyco (char *args, XINT ttin, XINT ttout, XINT outfd);
+extern void c_tsleep (int nseconds);
+extern void c_ttseti (XINT fd, int param, int value);
+extern void c_ttsets (XINT fd, int param, char *value);
+extern void c_ttycdes (XINT tty);
+extern void c_ttycn (XINT fd, XINT tty);
+extern void c_ttycr (XINT fd, XINT tty);
+extern void c_ttygoto (XINT fd, XINT tty, int col, int line);
+extern void c_ttyinit (XINT fd, XINT tty);
+extern void c_ttype (XINT fd, XINT tty, char *line, int map_cc);
+extern void c_ttyseti (XINT tty, int param, int value);
+extern void c_ttyso (XINT fd, XINT tty, int onoff);
+extern void c_vfnbrk (char *vfn, int *root, int *extn);
+extern void c_wmsec (int msec);
+extern void c_xgmes (int *oscode, char *oserrmsg, int maxch);
+extern void c_xonerr (int errcode);
+extern void c_xttysize (int *ncols, int *nlines);
+extern void eprintf (char *format, ...);
+extern void fprintf (struct _iobuf *fp, char *format, ...);
+extern void fputs (char *str, struct _iobuf *fp);
+extern void free (char *buf);
+extern void perror (char *prefix);
+extern void printf (char *format, ...);
+extern void qsort (char *base, int n, int size, int (*compar) (void));
+extern void setbuf (struct _iobuf *fp, char *buf);
+extern void setfbf (struct _iobuf *fp, char *buf, int size);
+extern void setlinebuf (struct _iobuf *fp);
+extern void spf_close (XINT fd);
+
+/* The following have conflicts because of the order in which the
+** include files are done in iraf.h. Commented out for now.
+extern int c_finfo (char *fname, struct _finfo *fi);
+extern void c_xwhen (int exception, PFI new_handler, PFI *old_handler);
+*/
+
+#endif
+
+/*
+*/
+#include "/iraf/iraf/unix/bin/f2c.h"
+#include "/iraf/iraf/unix/hlib/libc/vosproto.h"
+
+#define D_libc
+#define D_libc_proto
+#endif
diff --git a/unix/hlib/libc/main.h b/unix/hlib/libc/main.h
new file mode 100644
index 00000000..ad5fe71e
--- /dev/null
+++ b/unix/hlib/libc/main.h
@@ -0,0 +1,6 @@
+/* MAIN.H -- For files which have a c_main.
+ */
+#define PR_NOEXIT 0 /* run interpreter */
+#define PR_EXIT 1 /* skip interpreter */
+
+#define D_main
diff --git a/unix/hlib/libc/math.h b/unix/hlib/libc/math.h
new file mode 100644
index 00000000..6d151faf
--- /dev/null
+++ b/unix/hlib/libc/math.h
@@ -0,0 +1,24 @@
+/*
+ * MATH.H -- Math functions for C.
+ */
+
+double XEXP(), XLOG(), XLOG10(), XPOW(), XSQRT();
+double XSIN(), XCOS(), XASIN(), XACOS(), XTAN(), XATAN(), XATAN2();
+
+static double um_x, um_y;
+
+#define nint(x) XNINT((um_x=(x),&um_x))
+#define exp(x) XEXP((um_x=(x),&um_x))
+#define log(x) XLOG((um_x=(x),&um_x))
+#define log10(x) XLOG10((um_x=(x),&um_x))
+#define pow(x,y) XPOW((um_x=(x),&um_x),(um_y=(y),&um_y))
+#define sqrt(x) XSQRT((um_x=(x),&um_x))
+#define sin(x) XSIN((um_x=(x),&um_x))
+#define cos(x) XCOS((um_x=(x),&um_x))
+#define tan(x) XTAN((um_x=(x),&um_x))
+#define asin(x) XASIN((um_x=(x),&um_x))
+#define acos(x) XACOS((um_x=(x),&um_x))
+#define atan(x) XATAN((um_x=(x),&um_x))
+#define atan2(x,y) XATAN2((um_x=(x),&um_x),(um_y=(y),&um_y))
+
+#define D_math
diff --git a/unix/hlib/libc/protect.h b/unix/hlib/libc/protect.h
new file mode 100644
index 00000000..fe9c1a31
--- /dev/null
+++ b/unix/hlib/libc/protect.h
@@ -0,0 +1,7 @@
+/* File protection.
+ */
+#define REMOVE_PROTECTION 0
+#define SET_PROTECTION 1
+#define QUERY_PROTECTION 2
+
+#define D_protect
diff --git a/unix/hlib/libc/prstat.h b/unix/hlib/libc/prstat.h
new file mode 100644
index 00000000..3bd5dbf3
--- /dev/null
+++ b/unix/hlib/libc/prstat.h
@@ -0,0 +1,19 @@
+/* PRSTAT parameters.
+ */
+#define PR_STATUS 1 /* process status (OK, P_DEAD) */
+#define PR_INCHAN 2 /* input channel */
+#define PR_INFD 3 /* FD of input stream */
+#define PR_OUTCHAN 4 /* output channel */
+#define PR_OUTFD 5 /* FD of output stream */
+#define PR_STDIN 7 /* FD's assigned to pseudofile streams */
+#define PR_STDERR 8
+#define PR_STDOUT 9
+#define PR_STDGRAPH 10
+#define PR_STDIMAGE 11
+
+#define P_RUNNING 0 /* process status */
+#define P_BUSY 1 /* process is busy */
+#define P_DONE 2 /* process terminated normally */
+#define P_DEAD 3 /* process died and sent us X_IPC */
+
+#define D_prstat
diff --git a/unix/hlib/libc/prtype.h b/unix/hlib/libc/prtype.h
new file mode 100644
index 00000000..04433abc
--- /dev/null
+++ b/unix/hlib/libc/prtype.h
@@ -0,0 +1,7 @@
+/* Process control.
+ */
+#define PR_CONNECTED 1 /* types of processes */
+#define PR_DETACHED 2
+#define PR_HOST 3
+
+#define D_prtype
diff --git a/unix/hlib/libc/setjmp.h b/unix/hlib/libc/setjmp.h
new file mode 100644
index 00000000..a92d6b47
--- /dev/null
+++ b/unix/hlib/libc/setjmp.h
@@ -0,0 +1,25 @@
+/* SETJMP, LONGJMP -- Non local goto. Requires libc.h and knames.h.
+ * Note that jmp_buf must be at least one int larger than necessary to
+ */
+#ifndef D_libc
+#ifndef import_libc
+#include "libc.h"
+#endif
+#ifndef import_knames
+#include "knames.h"
+#endif
+#endif
+
+typedef int jmp_buf[LEN_JUMPBUF];
+static int u_jmpstat;
+
+#define setjmp(e) (ZSVJMP((e),&u_jmpstat),u_jmpstat)
+#define longjmp(e,v) (u_jmpstat=(v),ZDOJMP((e),&u_jmpstat))
+
+/* The following is necessary to prevent to prevent the optimizer from
+ * doing unwise things with setjmp on a Sun-4.
+ */
+extern int zsvjmp_();
+#pragma unknown_control_flow(zsvjmp_)
+
+#define D_setjmp
diff --git a/unix/hlib/libc/spp.h b/unix/hlib/libc/spp.h
new file mode 100644
index 00000000..23005007
--- /dev/null
+++ b/unix/hlib/libc/spp.h
@@ -0,0 +1,161 @@
+/*
+ * SPP.H -- Language definitions for interfacing SPP to C and C to UNIX.
+ * Note that many of the definitions must agree with those in the SPP
+ * compiler and with <iraf.h> and <mach.h>.
+ */
+
+#ifndef D_spp
+
+/* Assorted machine constants. [MACHDEP]
+ * Use osb$zzeps.f to compute the machine epsilon.
+ */
+#define OSOK 0 /* normal successful completion */
+#define LEN_JUMPBUF 1024 /* C "jmp_buf" len + 1 (or larger) */
+#define EPSILON (1.192e-7) /* smallest real E s.t. (1.0+E > 1.0) */
+#define EPSILOND (2.220d-16) /* double precision epsilon */
+#define MAX_LONG 2147483647
+#define FNNODE_CHAR '!' /* node name delimiter character */
+
+
+/* Indefinite valued numbers. (potentially MACHDEP)
+ */
+#define INDEFS (-32767)
+#define INDEFL (0x80000001)
+#define INDEFI INDEFL
+#define INDEFR 1.6e38
+#define INDEFD 1.6e308
+#define INDEFX (INDEF,INDEF)
+#define INDEF INDEFR
+
+
+/* Oft used constants.
+ */
+#define SZ_LINE 1023
+#define SZ_FNAME 255
+#define SZ_PATHNAME 511
+#define SZ_COMMAND 2047
+#define EOS '\0'
+#define ERR (-1)
+#define OK 0
+#define YES 1
+#define NO 0
+#define MAX_DIGITS 25
+
+#ifndef min
+#define min(a,b) (((a)<(b))?(a):(b))
+#endif
+#ifndef max
+#define max(a,b) (((a)>(b))?(a):(b))
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#ifndef EOF
+#define EOF (-1)
+#endif
+
+/* SPP constants.
+ */
+#define XEOS 0
+#define XERR (-1)
+#define XEOF (-2)
+#define XBOF (-3)
+#define XOK 0
+#define XNO 0
+#define XYES 1
+
+#define BOFL (-3L)
+#define EOFL (-2L)
+
+
+/* SPP datatypes. (potentially MACHDEP)
+ * Must match sizes in hlib$iraf.h
+ */
+#ifndef XCHAR
+#define XCHAR short
+#endif
+
+#ifdef MACH64
+#define XINT long /* ILP64 */
+#define XLONG long
+#define XSTRUCT long
+#define XPOINTER long
+#define XBOOL long
+#else
+#define XINT int /* ILP32 */
+#define XLONG int
+#define XSTRUCT int
+#define XPOINTER int
+#define XBOOL int
+#endif
+
+#define PKCHAR XCHAR
+#define XUBYTE unsigned char
+#define XSHORT short
+#define XUSHORT unsigned short
+#define XREAL float
+#define XDOUBLE double
+#define XCOMPLEX struct cplx
+
+struct cplx {
+ float r;
+ float i;
+};
+
+#define TY_BOOL 1 /* SPP datatype codes */
+#define TY_CHAR 2
+#define TY_SHORT 3
+#define TY_INT 4
+#define TY_LONG 5
+#define TY_REAL 6
+#define TY_DOUBLE 7
+#define TY_COMPLEX 8
+#define TY_STRUCT 9
+#define TY_POINTER 10
+
+
+/* File I/O constants.
+ */
+#define READ_ONLY 1 /* file access modes */
+#define READ_WRITE 2
+#define WRITE_ONLY 3
+#define APPEND 4
+#define NEW_FILE 5
+
+#define TEXT_FILE 11 /* file types */
+#define BINARY_FILE 12
+#define DIRECTORY_FILE 13
+#define STATIC_FILE 14
+#define SYMLINK_FILE 15
+#define SPOOL_FILE (-2)
+
+#define CLIN 1
+#define CLOUT 2
+#define STDIN 3
+#define STDOUT 4
+#define STDERR 5
+#define STDGRAPH 6
+#define STDIMAGE 7
+#define STDPLOT 8
+#define PSIOCTRL 9
+
+/* Filename Mapping definitions.
+ */
+
+#define VFN_READ 1 /* VFN access modes for VFNOPEN */
+#define VFN_WRITE 2
+#define VFN_UNMAP 3
+
+#define VFN_NOUPDATE 0 /* update flag for VFNCLOSE */
+#define VFN_UPDATE 1
+
+/* Oft referenced functions.
+ */
+XCHAR *c_sppstr();
+XCHAR *c_strupk();
+char *c_strpak();
+
+#define D_spp
+#endif
diff --git a/unix/hlib/libc/stdarg-cygwin.h b/unix/hlib/libc/stdarg-cygwin.h
new file mode 100755
index 00000000..965c2aa7
--- /dev/null
+++ b/unix/hlib/libc/stdarg-cygwin.h
@@ -0,0 +1,135 @@
+/* Copyright (C) 1989, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* As a special exception, if you include this header file into source
+ files compiled by GCC, this header file does not by itself cause
+ the resulting executable to be covered by the GNU General Public
+ License. This exception does not however invalidate any other
+ reasons why the executable file might be covered by the GNU General
+ Public License. */
+
+/*
+ * ISO C Standard: 7.15 Variable arguments <stdarg.h>
+ */
+
+#ifndef _STDARG_H
+#ifndef _ANSI_STDARG_H_
+#ifndef RC_INVOKED
+#ifndef __need___va_list
+#define _STDARG_H
+#define _ANSI_STDARG_H_
+#endif /* not __need___va_list */
+#undef __need___va_list
+
+/* Define __gnuc_va_list. */
+
+#ifndef __GNUC_VA_LIST
+#define __GNUC_VA_LIST
+typedef __builtin_va_list __gnuc_va_list;
+#endif
+
+/* Define the standard macros for the user,
+ if this invocation was from the user program. */
+#ifdef _STDARG_H
+
+#define va_start(v,l) __builtin_va_start(v,l)
+#define va_end(v) __builtin_va_end(v)
+#define va_arg(v,l) __builtin_va_arg(v,l)
+#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L
+#define va_copy(d,s) __builtin_va_copy(d,s)
+#endif
+#define __va_copy(d,s) __builtin_va_copy(d,s)
+
+/* Define va_list, if desired, from __gnuc_va_list. */
+/* We deliberately do not define va_list when called from
+ stdio.h, because ANSI C says that stdio.h is not supposed to define
+ va_list. stdio.h needs to have access to that data type,
+ but must not use that name. It should use the name __gnuc_va_list,
+ which is safe because it is reserved for the implementation. */
+
+#ifdef _HIDDEN_VA_LIST /* On OSF1, this means varargs.h is "half-loaded". */
+#undef _VA_LIST
+#endif
+
+#ifdef _BSD_VA_LIST
+#undef _BSD_VA_LIST
+#endif
+
+#if defined(__svr4__) || (defined(_SCO_DS) && !defined(__VA_LIST))
+/* SVR4.2 uses _VA_LIST for an internal alias for va_list,
+ so we must avoid testing it and setting it here.
+ SVR4 uses _VA_LIST as a flag in stdarg.h, but we should
+ have no conflict with that. */
+#ifndef _VA_LIST_
+#define _VA_LIST_
+#ifdef __i860__
+#ifndef _VA_LIST
+#define _VA_LIST va_list
+#endif
+#endif /* __i860__ */
+typedef __gnuc_va_list va_list;
+#ifdef _SCO_DS
+#define __VA_LIST
+#endif
+#endif /* _VA_LIST_ */
+#else /* not __svr4__ || _SCO_DS */
+
+/* The macro _VA_LIST_ is the same thing used by this file in Ultrix.
+ But on BSD NET2 we must not test or define or undef it.
+ (Note that the comments in NET 2's ansi.h
+ are incorrect for _VA_LIST_--see stdio.h!) */
+#if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) || defined(WINNT)
+/* The macro _VA_LIST_DEFINED is used in Windows NT 3.5 */
+#ifndef _VA_LIST_DEFINED
+/* The macro _VA_LIST is used in SCO Unix 3.2. */
+#ifndef _VA_LIST
+/* The macro _VA_LIST_T_H is used in the Bull dpx2 */
+#ifndef _VA_LIST_T_H
+/* The macro __va_list__ is used by BeOS. */
+#ifndef __va_list__
+typedef __gnuc_va_list va_list;
+#endif /* not __va_list__ */
+#endif /* not _VA_LIST_T_H */
+#endif /* not _VA_LIST */
+#endif /* not _VA_LIST_DEFINED */
+#if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__))
+#define _VA_LIST_
+#endif
+#ifndef _VA_LIST
+#define _VA_LIST
+#endif
+#ifndef _VA_LIST_DEFINED
+#define _VA_LIST_DEFINED
+#endif
+#ifndef _VA_LIST_T_H
+#define _VA_LIST_T_H
+#endif
+#ifndef __va_list__
+#define __va_list__
+#endif
+
+#endif /* not _VA_LIST_, except on certain systems */
+
+#endif /* not __svr4__ */
+
+#endif /* _STDARG_H */
+
+#endif /* not RC_INVOKED */
+#endif /* not _ANSI_STDARG_H_ */
+#endif /* not _STDARG_H */
diff --git a/unix/hlib/libc/stdarg-freebsd.h b/unix/hlib/libc/stdarg-freebsd.h
new file mode 100644
index 00000000..6cf6b69d
--- /dev/null
+++ b/unix/hlib/libc/stdarg-freebsd.h
@@ -0,0 +1,90 @@
+/*-
+ * Copyright (c) 2002 David E. O'Brien. All rights reserved.
+ * Copyright (c) 1991, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)stdarg.h 8.1 (Berkeley) 6/10/93
+ * $FreeBSD: src/sys/i386/include/stdarg.h,v 1.20 2005/03/02 21:33:26 joerg Exp $
+ */
+
+#ifndef _MACHINE_STDARG_H_
+#define _MACHINE_STDARG_H_
+
+#include <sys/cdefs.h>
+#include <sys/_types.h>
+
+#ifndef _VA_LIST_DECLARED
+#define _VA_LIST_DECLARED
+typedef __va_list va_list;
+#endif
+
+#ifdef __GNUCLIKE_BUILTIN_STDARG
+
+#define va_start(ap, last) \
+ __builtin_stdarg_start((ap), (last))
+
+#define va_arg(ap, type) \
+ __builtin_va_arg((ap), type)
+
+#if __ISO_C_VISIBLE >= 1999
+#define va_copy(dest, src) \
+ __builtin_va_copy((dest), (src))
+#endif
+
+#define va_end(ap) \
+ __builtin_va_end(ap)
+
+#else /* !__GNUCLIKE_BUILTIN_STDARG */
+
+#define __va_size(type) \
+ (((sizeof(type) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
+
+#ifdef __GNUCLIKE_BUILTIN_NEXT_ARG
+#define va_start(ap, last) \
+ ((ap) = (va_list)__builtin_next_arg(last))
+#else /* !__GNUCLIKE_BUILTIN_NEXT_ARG */
+#define va_start(ap, last) \
+ ((ap) = (va_list)&(last) + __va_size(last))
+#endif /* __GNUCLIKE_BUILTIN_NEXT_ARG */
+
+#define va_arg(ap, type) \
+ (*(type *)((ap) += __va_size(type), (ap) - __va_size(type)))
+
+#if __ISO_C_VISIBLE >= 1999
+#define va_copy(dest, src) \
+ ((dest) = (src))
+#endif
+
+#define va_end(ap)
+
+#endif /* __GNUCLIKE_BUILTIN_STDARG */
+
+#endif /* !_MACHINE_STDARG_H_ */
diff --git a/unix/hlib/libc/stdarg-linux.h b/unix/hlib/libc/stdarg-linux.h
new file mode 100644
index 00000000..f95367b4
--- /dev/null
+++ b/unix/hlib/libc/stdarg-linux.h
@@ -0,0 +1,142 @@
+/* Copyright (C) 1989, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* As a special exception, if you include this header file into source
+ files compiled by GCC, this header file does not by itself cause
+ the resulting executable to be covered by the GNU General Public
+ License. This exception does not however invalidate any other
+ reasons why the executable file might be covered by the GNU General
+ Public License. */
+
+/*
+ * ISO C Standard: 7.15 Variable arguments <stdarg.h>
+ */
+
+#ifndef _STDARG_H
+#ifndef _ANSI_STDARG_H_
+#ifndef __need___va_list
+#define _STDARG_H
+#define _ANSI_STDARG_H_
+#endif /* not __need___va_list */
+#undef __need___va_list
+
+/* Define __gnuc_va_list. */
+
+#ifndef __GNUC_VA_LIST
+#define __GNUC_VA_LIST
+typedef __builtin_va_list __gnuc_va_list;
+#endif
+
+/* Define the standard macros for the user,
+ if this invocation was from the user program. */
+#ifdef _STDARG_H
+
+/* Note that the type used in va_arg is supposed to match the
+ actual type **after default promotions**.
+ Thus, va_arg (..., short) is not valid. */
+
+#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4))
+#define va_start(v,l) __builtin_va_start((v),l)
+#else
+#define va_start(v,l) __builtin_stdarg_start((v),l)
+#endif
+#define va_end __builtin_va_end
+#define va_arg __builtin_va_arg
+#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L
+#define va_copy(d,s) __builtin_va_copy((d),(s))
+#endif
+#define __va_copy(d,s) __builtin_va_copy((d),(s))
+
+
+/* Define va_list, if desired, from __gnuc_va_list. */
+/* We deliberately do not define va_list when called from
+ stdio.h, because ANSI C says that stdio.h is not supposed to define
+ va_list. stdio.h needs to have access to that data type,
+ but must not use that name. It should use the name __gnuc_va_list,
+ which is safe because it is reserved for the implementation. */
+
+#ifdef _HIDDEN_VA_LIST /* On OSF1, this means varargs.h is "half-loaded". */
+#undef _VA_LIST
+#endif
+
+#ifdef _BSD_VA_LIST
+#undef _BSD_VA_LIST
+#endif
+
+#if defined(__svr4__) || (defined(_SCO_DS) && !defined(__VA_LIST))
+/* SVR4.2 uses _VA_LIST for an internal alias for va_list,
+ so we must avoid testing it and setting it here.
+ SVR4 uses _VA_LIST as a flag in stdarg.h, but we should
+ have no conflict with that. */
+#ifndef _VA_LIST_
+#define _VA_LIST_
+#ifdef __i860__
+#ifndef _VA_LIST
+#define _VA_LIST va_list
+#endif
+#endif /* __i860__ */
+typedef __gnuc_va_list va_list;
+#ifdef _SCO_DS
+#define __VA_LIST
+#endif
+#endif /* _VA_LIST_ */
+#else /* not __svr4__ || _SCO_DS */
+
+/* The macro _VA_LIST_ is the same thing used by this file in Ultrix.
+ But on BSD NET2 we must not test or define or undef it.
+ (Note that the comments in NET 2's ansi.h
+ are incorrect for _VA_LIST_--see stdio.h!) */
+#if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) || defined(WINNT)
+/* The macro _VA_LIST_DEFINED is used in Windows NT 3.5 */
+#ifndef _VA_LIST_DEFINED
+/* The macro _VA_LIST is used in SCO Unix 3.2. */
+#ifndef _VA_LIST
+/* The macro _VA_LIST_T_H is used in the Bull dpx2 */
+#ifndef _VA_LIST_T_H
+/* The macro __va_list__ is used by BeOS. */
+#ifndef __va_list__
+typedef __gnuc_va_list va_list;
+#endif /* not __va_list__ */
+#endif /* not _VA_LIST_T_H */
+#endif /* not _VA_LIST */
+#endif /* not _VA_LIST_DEFINED */
+#if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__))
+#define _VA_LIST_
+#endif
+#ifndef _VA_LIST
+#define _VA_LIST
+#endif
+#ifndef _VA_LIST_DEFINED
+#define _VA_LIST_DEFINED
+#endif
+#ifndef _VA_LIST_T_H
+#define _VA_LIST_T_H
+#endif
+#ifndef __va_list__
+#define __va_list__
+#endif
+
+#endif /* not _VA_LIST_, except on certain systems */
+
+#endif /* not __svr4__ */
+
+#endif /* _STDARG_H */
+
+#endif /* not _ANSI_STDARG_H_ */
+#endif /* not _STDARG_H */
diff --git a/unix/hlib/libc/stdarg-osx.h b/unix/hlib/libc/stdarg-osx.h
new file mode 100644
index 00000000..f178505e
--- /dev/null
+++ b/unix/hlib/libc/stdarg-osx.h
@@ -0,0 +1,133 @@
+/* Copyright (C) 1989, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* As a special exception, if you include this header file into source
+ files compiled by GCC, this header file does not by itself cause
+ the resulting executable to be covered by the GNU General Public
+ License. This exception does not however invalidate any other
+ reasons why the executable file might be covered by the GNU General
+ Public License. */
+
+/*
+ * ISO C Standard: 7.15 Variable arguments <stdarg.h>
+ */
+
+#ifndef _STDARG_H
+#ifndef _ANSI_STDARG_H_
+#ifndef __need___va_list
+#define _STDARG_H
+#define _ANSI_STDARG_H_
+#endif /* not __need___va_list */
+#undef __need___va_list
+
+/* Define __gnuc_va_list. */
+
+#ifndef __GNUC_VA_LIST
+#define __GNUC_VA_LIST
+typedef __builtin_va_list __gnuc_va_list;
+#endif
+
+/* Define the standard macros for the user,
+ if this invocation was from the user program. */
+#ifdef _STDARG_H
+
+#define va_start(v,l) __builtin_va_start(v,l)
+#define va_end(v) __builtin_va_end(v)
+#define va_arg(v,l) __builtin_va_arg(v,l)
+#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L
+#define va_copy(d,s) __builtin_va_copy(d,s)
+#endif
+#define __va_copy(d,s) __builtin_va_copy(d,s)
+
+/* Define va_list, if desired, from __gnuc_va_list. */
+/* We deliberately do not define va_list when called from
+ stdio.h, because ANSI C says that stdio.h is not supposed to define
+ va_list. stdio.h needs to have access to that data type,
+ but must not use that name. It should use the name __gnuc_va_list,
+ which is safe because it is reserved for the implementation. */
+
+#ifdef _HIDDEN_VA_LIST /* On OSF1, this means varargs.h is "half-loaded". */
+#undef _VA_LIST
+#endif
+
+#ifdef _BSD_VA_LIST
+#undef _BSD_VA_LIST
+#endif
+
+#if defined(__svr4__) || (defined(_SCO_DS) && !defined(__VA_LIST))
+/* SVR4.2 uses _VA_LIST for an internal alias for va_list,
+ so we must avoid testing it and setting it here.
+ SVR4 uses _VA_LIST as a flag in stdarg.h, but we should
+ have no conflict with that. */
+#ifndef _VA_LIST_
+#define _VA_LIST_
+#ifdef __i860__
+#ifndef _VA_LIST
+#define _VA_LIST va_list
+#endif
+#endif /* __i860__ */
+typedef __gnuc_va_list va_list;
+#ifdef _SCO_DS
+#define __VA_LIST
+#endif
+#endif /* _VA_LIST_ */
+#else /* not __svr4__ || _SCO_DS */
+
+/* The macro _VA_LIST_ is the same thing used by this file in Ultrix.
+ But on BSD NET2 we must not test or define or undef it.
+ (Note that the comments in NET 2's ansi.h
+ are incorrect for _VA_LIST_--see stdio.h!) */
+#if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) || defined(WINNT)
+/* The macro _VA_LIST_DEFINED is used in Windows NT 3.5 */
+#ifndef _VA_LIST_DEFINED
+/* The macro _VA_LIST is used in SCO Unix 3.2. */
+#ifndef _VA_LIST
+/* The macro _VA_LIST_T_H is used in the Bull dpx2 */
+#ifndef _VA_LIST_T_H
+/* The macro __va_list__ is used by BeOS. */
+#ifndef __va_list__
+typedef __gnuc_va_list va_list;
+#endif /* not __va_list__ */
+#endif /* not _VA_LIST_T_H */
+#endif /* not _VA_LIST */
+#endif /* not _VA_LIST_DEFINED */
+#if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__))
+#define _VA_LIST_
+#endif
+#ifndef _VA_LIST
+#define _VA_LIST
+#endif
+#ifndef _VA_LIST_DEFINED
+#define _VA_LIST_DEFINED
+#endif
+#ifndef _VA_LIST_T_H
+#define _VA_LIST_T_H
+#endif
+#ifndef __va_list__
+#define __va_list__
+#endif
+
+#endif /* not _VA_LIST_, except on certain systems */
+
+#endif /* not __svr4__ */
+
+#endif /* _STDARG_H */
+
+#endif /* not _ANSI_STDARG_H_ */
+#endif /* not _STDARG_H */
diff --git a/unix/hlib/libc/stdarg-solaris.h b/unix/hlib/libc/stdarg-solaris.h
new file mode 100644
index 00000000..c35c5ce2
--- /dev/null
+++ b/unix/hlib/libc/stdarg-solaris.h
@@ -0,0 +1,64 @@
+/* Copyright (c) 1988 AT&T */
+/* All Rights Reserved */
+
+/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
+/* The copyright notice above does not evidence any */
+/* actual or intended publication of such source code. */
+
+/*
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * An application should not include this header directly. Instead it
+ * should be included only through the inclusion of other Sun headers.
+ *
+ * The contents of this header is limited to identifiers specified in the
+ * C Standard. Any new identifiers specified in future amendments to the
+ * C Standard must be placed in this header. If these new identifiers
+ * are required to also be in the C++ Standard "std" namespace, then for
+ * anything other than macro definitions, corresponding "using" directives
+ * must also be added to <stdarg.h>.
+ */
+
+#ifndef _ISO_STDARG_ISO_H
+#define _ISO_STDARG_ISO_H
+
+#pragma ident "@(#)stdarg_iso.h 1.4 04/11/19 SMI" /* SVr4.0 1.8 */
+
+/*
+ * This header defines the ISO C 1989 and ISO C++ 1998 variable
+ * argument definitions.
+ *
+ * The varargs definitions within this header are defined in terms of
+ * implementation definitions. These implementation definitions reside
+ * in <sys/va_impl.h>. This organization enables protected use of
+ * the implementation by other standard headers without introducing
+ * names into the users' namespace.
+ */
+
+#include <sys/va_impl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if __cplusplus >= 199711L
+namespace std {
+typedef __va_list va_list;
+}
+#elif !defined(_VA_LIST)
+#define _VA_LIST
+typedef __va_list va_list;
+#endif
+
+#define va_start(list, name) __va_start(list, name)
+#define va_arg(list, type) __va_arg(list, type)
+#define va_end(list) __va_end(list)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ISO_STDARG_ISO_H */
diff --git a/unix/hlib/libc/stdarg.h b/unix/hlib/libc/stdarg.h
new file mode 100644
index 00000000..a52889d8
--- /dev/null
+++ b/unix/hlib/libc/stdarg.h
@@ -0,0 +1,40 @@
+/* STDARG.H -- Interface to the Unix variable argument-list interface.
+ * This version replaces <varargs.h>, but is NOT backwards compatible.
+ *
+ * We pick up the local UNIX definitions for dealing with a variable
+ * number of arguments. This is done via indirection through this file so
+ * that any problems can be dealt with by changing only this file.
+ *
+ * Usage: Include this file using import_stdarg. If USE_STDARG is
+ * defined use the stdarg interface, otherwise use the varargs
+ * interface (ifdef the code accordingly). Old code which uses
+ * varargs directly is unaffected.
+ */
+#ifndef D_stdarg
+
+
+#ifdef MACOSX
+#include "stdarg-osx.h"
+#else
+#ifdef __CYGWIN__
+#include "stdarg-cygwin.h"
+#else
+#ifdef LINUX
+#include "stdarg-linux.h"
+#else
+#ifdef SOLARIS
+#include "stdarg-solaris.h"
+#else
+#ifdef BSD
+#include "stdarg-freebsd.h"
+#else
+#include <stdarg.h>
+#endif
+#endif
+#endif
+#endif
+#endif
+
+
+#define D_stdarg
+#endif
diff --git a/unix/hlib/libc/stdio.h b/unix/hlib/libc/stdio.h
new file mode 100644
index 00000000..c3cc0bd6
--- /dev/null
+++ b/unix/hlib/libc/stdio.h
@@ -0,0 +1,99 @@
+/*
+ * U_STDIO.H -- C defines used to emulate the UNIX standard i/o package upon
+ * IRAF file i/o. These definitions are portable, but highly dependent on
+ * the guts of IRAF FIO.
+ */
+
+#ifndef D_libc
+#ifndef import_libc
+#include "libc.h"
+#endif
+#endif
+
+#define BUFSIZ SZ_DEFIOBUF
+#define _NFILE FIO_MAXFD
+#define FILE struct _iobuf
+
+# ifndef NULL
+#define NULL 0
+# endif
+# ifndef EOF
+#define EOF (-1)
+# endif
+
+/* Filler space is defined here to reduce clutter in the struct def below.
+ */
+#define _F1 _filler1[_NFILE-1]
+#define _F2 _filler2[_NFILE-1]
+#define _F3 _filler3[_NFILE-1]
+#define _F4 _filler4[_NFILE-1]
+#define _F5 _filler5[_NFILE-1]
+#define _F6 _filler6[_NFILE-1]
+#define _F7 _filler7[_NFILE-1]
+
+/* The _iobuf structure is the C version of the FIO common /fiocom/, which
+ * contains all the FIO buffer and i/o pointers. Each structure field is
+ * maintained in the common as an array of length _NFILE, hence in terms of
+ * C the structures are interleaved. The file pointers are indices into
+ * the array Memc, an array of XCHAR.
+ */
+struct _iobuf {
+ XLONG _boffset, _F1; /* XCHAR file offset of buffer */
+ XINT _bufptr, _F2; /* buffer pointer */
+ XINT _buftop, _F3; /* pointer to top of buffer + 1 */
+ XINT _iop, _F4; /* pointer to next XCHAR */
+ XINT _itop, _F5; /* call filbuf when _iop >= */
+ XINT _otop, _F6; /* call flsbuf when _iop >= */
+ XINT _fiodes, _F7; /* FIO file descriptor */
+ XINT _fflags; /* bit flags */
+};
+
+extern XINT FIOCOM[]; /* the FIO common */
+
+#define _FFLUSHNL 01 /* flush buffer on newline */
+#define _FREAD 02 /* read perm on file */
+#define _FWRITE 04 /* read perm on file */
+#define _FEOF 010 /* file positioned to EOF */
+#define _FERR 020 /* i/o error on file */
+#define _FKEEP 040 /* keep file open at exit */
+#define _FFLUSH 0100 /* write to device on newline */
+#define _FRAW 0200 /* raw input mode */
+#define _FNDELAY 0400 /* nonblocking i/o */
+#define _FPUSH 01000 /* data is pushed back */
+#define _FIPC 02000 /* file is an IPC channel */
+
+/* Convert FILE pointers to and from FIO integer file descriptors.
+ */
+#define FDTOFP(fd) ((FILE *)(&FIOCOM[(fd)-1]))
+#define FPTOFD(fp) ((XINT)((XINT *)(fp) - FIOCOM + 1))
+
+#define stdin (FDTOFP(3))
+#define stdout (FDTOFP(4))
+#define stderr (FDTOFP(5))
+
+
+/* I/O macro defines. I/O is assumed to be sequential, i.e., we do not check
+ * for _iop < _bufptr. This is consistent with UNIX usage. The getc and putc
+ * macros are quite efficient despite their complex appearance.
+ */
+#define getchar() fgetc(stdin)
+#define getc(fp) \
+(((fp)->_iop >= (fp)->_itop) ? c_filbuf((fp)) : Memc[(fp)->_iop++] & 0377)
+
+#define putchar(ch) fputc((ch),stdout)
+#define putc(ch,fp) \
+(((fp)->_iop >= (fp)->_otop || ((ch) == '\n' && (fp)->_fflags&_FFLUSH)) ? \
+c_flsbuf((unsigned)(ch),(fp)) : ((int)(Memc[(fp)->_iop++] = (unsigned)(ch))))
+
+#define fileno(fp) (FPTOFD((fp)))
+#define feof(fp) ((fp)->_fflags & _FEOF)
+#define ferror(fp) ((fp)->_fflags & _FERR)
+#define clearerr(fp) ((fp)->_fflags &= ~_FERR)
+
+
+FILE *fopen();
+FILE *fdopen();
+char *fgets();
+char *gets();
+
+#define D_stdio
diff --git a/unix/hlib/libc/ttset.h b/unix/hlib/libc/ttset.h
new file mode 100644
index 00000000..a70e5c99
--- /dev/null
+++ b/unix/hlib/libc/ttset.h
@@ -0,0 +1,27 @@
+/* TTSET.H -- Set terminal control options (TT logical terminal driver).
+ */
+#define TT_INITIALIZE 0 /* initialize TT driver status */
+#define TT_KINCHAN 101 /* kernel tty input channel */
+#define TT_KOUTCHAN 102 /* kernel tty output channel */
+#define TT_LOGINCHAN 103 /* login spoolfile channel */
+#define TT_LOGOUTCHAN 104 /* logout spoolfile channel */
+#define TT_PBINCHAN 105 /* playback spoolfile channel */
+#define TT_UCASEIN 106 /* map input to lower case */
+#define TT_UCASEOUT 107 /* map output to upper case */
+#define TT_SHIFTLOCK 108 /* software shiftlock */
+#define TT_RAWMODE 109 /* raw mode in effect */
+#define TT_LOGIO 110 /* log terminal i/o */
+#define TT_LOGIN 111 /* log terminal input */
+#define TT_LOGOUT 112 /* log terminal output */
+#define TT_PLAYBACK 113 /* take input from a spool file */
+#define TT_PBVERIFY 114 /* pause at \n during playback */
+#define TT_PBDELAY 115 /* msec delay/per record during playback */
+#define TT_PASSTHRU 116 /* passthru mode (direct i/o to device) */
+#define TT_IOFILE 117 /* logio file name */
+#define TT_INFILE 118 /* login file name */
+#define TT_OUTFILE 119 /* logout file name */
+#define TT_PBFILE 120 /* playback file name */
+#define TT_TDEVICE 121 /* terminal device at record time */
+#define TT_GDEVICE 122 /* stdgraph device at record time */
+
+#define D_ttset
diff --git a/unix/hlib/libc/vosproto.h b/unix/hlib/libc/vosproto.h
new file mode 100644
index 00000000..031efd39
--- /dev/null
+++ b/unix/hlib/libc/vosproto.h
@@ -0,0 +1,4035 @@
+extern C_f ahivx_(complex * ret_val, complex *a, integer *npix);
+extern C_f alovx_(complex * ret_val, complex *a, integer *npix);
+extern C_f amedx_(complex * ret_val, complex *a, integer *npix);
+extern C_f asokx_(complex * ret_val, complex *a, integer *npix, integer *ksel);
+extern C_f assqx_(complex * ret_val, complex *a, integer *npix);
+extern C_f asumx_(complex * ret_val, complex *a, integer *npix);
+extern C_f clgetx_(complex * ret_val, shortint *param);
+extern C_f clgpsx_(complex * ret_val, integer *pp, shortint *parnae);
+extern C_f qpgetx_(complex * ret_val, integer *qp, shortint *param);
+extern H_f agbnch_(char *ret_val, ftnlen ret_val_len, integer *idsh);
+extern H_f agdshn_(char *ret_val, ftnlen ret_val_len, integer *idsh);
+extern doublereal adotd_(doublereal *a, doublereal *b, integer *npix);
+extern doublereal adotl_(integer *a, integer *b, integer *npix);
+extern doublereal aelogd_(doublereal *x);
+extern doublereal ahivd_(doublereal *a, integer *npix);
+extern doublereal alovd_(doublereal *a, integer *npix);
+extern doublereal amedd_(doublereal *a, integer *npix);
+extern doublereal apold_(doublereal *x, doublereal *coeff, integer *ncoeff);
+extern doublereal asokd_(doublereal *a, integer *npix, integer *ksel);
+extern doublereal assqd_(doublereal *a, integer *npix);
+extern doublereal assql_(integer *a, integer *npix);
+extern doublereal asumd_(doublereal *a, integer *npix);
+extern doublereal asuml_(integer *a, integer *npix);
+extern doublereal clgetd_(shortint *param);
+extern doublereal clgpsd_(integer *pp, shortint *parnae);
+extern doublereal cqdged_(integer *cq, integer *record, shortint *field);
+extern doublereal cqfged_(integer *cq, shortint *field);
+extern doublereal cqistd_(integer *res, integer *param);
+extern doublereal cqrstd_(integer *res, integer *param);
+extern doublereal dtgetd_(integer *dt, integer *record, shortint *field);
+extern doublereal dtmday_(integer *year, integer *month, integer *day, doublereal *t);
+extern doublereal elogd_(doublereal *x);
+extern doublereal envged_(shortint *varnae);
+extern doublereal fpfixd_(doublereal *x);
+extern doublereal icrmsd_(doublereal *x, doublereal *y, doublereal *fit, doublereal *wts, integer *npts);
+extern doublereal imgetd_(integer *im, shortint *key);
+extern doublereal ingdvd_(doublereal *x);
+extern doublereal ingetd_(integer *in, integer *param);
+extern doublereal inrmsd_(doublereal *y, doublereal *fit, doublereal *wts, integer *npts);
+extern doublereal mefged_(integer *mef, shortint *key);
+extern doublereal mwc1td_(integer *act, doublereal *x);
+extern doublereal obsged_(integer *obs, shortint *param);
+extern doublereal qpgetd_(integer *qp, shortint *param);
+extern doublereal qpmaxd_(doublereal *x, doublereal *y);
+extern doublereal qpmind_(doublereal *x, doublereal *y);
+extern doublereal skstad_(integer *coo, integer *param);
+extern doublereal wfgsdr_(integer *sf1, doublereal *x, doublereal *y, integer *nxd, integer *nyd);
+extern doublereal wfgsel_(integer *sf, doublereal *x, doublereal *y);
+extern doublereal wfmspi_(doublereal *coeff, doublereal *y, doublereal *x, doublereal *dydx);
+extern doublereal wfmspl_(doublereal *coeff, doublereal *xin);
+extern doublereal wlange_(integer *wd, integer *labels, integer *nlabes);
+extern doublereal wlched_(doublereal *ex, doublereal *arr, integer *n);
+extern doublereal wlcoon_(integer *wlct, integer *flip, doublereal *wx1, doublereal *wy1, doublereal *wx2, doublereal *wy2);
+extern doublereal wldisd_(doublereal *x1, doublereal *y1, doublereal *x2, doublereal *y2);
+extern doublereal wlroud_(doublereal *x, doublereal *y);
+extern doublereal wlstre_(doublereal *angle, integer *rightp);
+extern doublereal wlstrl_(shortint *input, integer *axiste, integer *whichs);
+extern doublereal wlvece_(integer *gp, doublereal *x1, doublereal *y1, doublereal *x2, doublereal *y2);
+extern doublereal xacos_(doublereal *x);
+extern doublereal xasin_(doublereal *x);
+extern doublereal xatan2_(doublereal *x, doublereal *y);
+extern doublereal xatan_(doublereal *x);
+extern doublereal xcos_(doublereal *x);
+extern doublereal xexp_(doublereal *x);
+extern doublereal xlog10_(doublereal *x);
+extern doublereal xlog_(doublereal *x);
+extern doublereal xpow_(doublereal *x, doublereal *y);
+extern doublereal xsin_(doublereal *x);
+extern doublereal xsqrt_(doublereal *x);
+extern doublereal xtan_(doublereal *x);
+extern doublereal xtargd_(integer *stp, shortint *key);
+extern integer aabsd_(doublereal *a, doublereal *b, integer *npix);
+extern integer aabsi_(integer *a, integer *b, integer *npix);
+extern integer aabsl_(integer *a, integer *b, integer *npix);
+extern integer aabsr_(real *a, real *b, integer *npix);
+extern integer aabss_(shortint *a, shortint *b, integer *npix);
+extern integer aabsx_(complex *a, complex *b, integer *npix);
+extern integer aaddd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer aaddi_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aaddkd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer aaddki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aaddkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aaddkr_(real *a, real *b, real *c__, integer *npix);
+extern integer aaddks_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer aaddkx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer aaddl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aaddr_(real *a, real *b, real *c__, integer *npix);
+extern integer aadds_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer aaddx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer aandi_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aandki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aandkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aandks_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer aandl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aands_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer aavgd_(doublereal *a, integer *npix, doublereal *mean, doublereal *sigma);
+extern integer aavgi_(integer *a, integer *npix, real *mean, real *sigma);
+extern integer aavgl_(integer *a, integer *npix, doublereal *mean, doublereal *sigma);
+extern integer aavgr_(real *a, integer *npix, real *mean, real *sigma);
+extern integer aavgs_(shortint *a, integer *npix, real *mean, real *sigma);
+extern integer aavgx_(complex *a, integer *npix, real *mean, real *sigma);
+extern integer abavd_(doublereal *a, doublereal *b, integer *nblocs, integer *npixpk);
+extern integer abavi_(integer *a, integer *b, integer *nblocs, integer *npixpk);
+extern integer abavl_(integer *a, integer *b, integer *nblocs, integer *npixpk);
+extern integer abavr_(real *a, real *b, integer *nblocs, integer *npixpk);
+extern integer abavs_(shortint *a, shortint *b, integer *nblocs, integer *npixpk);
+extern integer abavx_(complex *a, complex *b, integer *nblocs, integer *npixpk);
+extern integer abeqc_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abeqd_(doublereal *a, doublereal *b, integer *c__, integer *npix);
+extern integer abeqi_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abeqkc_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abeqkd_(doublereal *a, doublereal *b, integer *c__, integer *npix);
+extern integer abeqki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abeqkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abeqkr_(real *a, real *b, integer *c__, integer *npix);
+extern integer abeqks_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abeqkx_(complex *a, complex *b, integer *c__, integer *npix);
+extern integer abeql_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abeqr_(real *a, real *b, integer *c__, integer *npix);
+extern integer abeqs_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abeqx_(complex *a, complex *b, integer *c__, integer *npix);
+extern integer abgec_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abged_(doublereal *a, doublereal *b, integer *c__, integer *npix);
+extern integer abgei_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abgekc_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abgekd_(doublereal *a, doublereal *b, integer *c__, integer *npix);
+extern integer abgeki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abgekl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abgekr_(real *a, real *b, integer *c__, integer *npix);
+extern integer abgeks_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abgekx_(complex *a, complex *b, integer *c__, integer *npix);
+extern integer abgel_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abger_(real *a, real *b, integer *c__, integer *npix);
+extern integer abges_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abgex_(complex *a, complex *b, integer *c__, integer *npix);
+extern integer abgtc_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abgtd_(doublereal *a, doublereal *b, integer *c__, integer *npix);
+extern integer abgti_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abgtkc_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abgtkd_(doublereal *a, doublereal *b, integer *c__, integer *npix);
+extern integer abgtki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abgtkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abgtkr_(real *a, real *b, integer *c__, integer *npix);
+extern integer abgtks_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abgtkx_(complex *a, complex *b, integer *c__, integer *npix);
+extern integer abgtl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abgtr_(real *a, real *b, integer *c__, integer *npix);
+extern integer abgts_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abgtx_(complex *a, complex *b, integer *c__, integer *npix);
+extern integer ablec_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abled_(doublereal *a, doublereal *b, integer *c__, integer *npix);
+extern integer ablei_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer ablekc_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer ablekd_(doublereal *a, doublereal *b, integer *c__, integer *npix);
+extern integer ableki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer ablekl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer ablekr_(real *a, real *b, integer *c__, integer *npix);
+extern integer ableks_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer ablekx_(complex *a, complex *b, integer *c__, integer *npix);
+extern integer ablel_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abler_(real *a, real *b, integer *c__, integer *npix);
+extern integer ables_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer ablex_(complex *a, complex *b, integer *c__, integer *npix);
+extern integer abltc_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abltd_(doublereal *a, doublereal *b, integer *c__, integer *npix);
+extern integer ablti_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abltkc_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abltkd_(doublereal *a, doublereal *b, integer *c__, integer *npix);
+extern integer abltki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abltkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abltkr_(real *a, real *b, integer *c__, integer *npix);
+extern integer abltks_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abltkx_(complex *a, complex *b, integer *c__, integer *npix);
+extern integer abltl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abltr_(real *a, real *b, integer *c__, integer *npix);
+extern integer ablts_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abltx_(complex *a, complex *b, integer *c__, integer *npix);
+extern integer abnec_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abned_(doublereal *a, doublereal *b, integer *c__, integer *npix);
+extern integer abnei_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abnekc_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abnekd_(doublereal *a, doublereal *b, integer *c__, integer *npix);
+extern integer abneki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abnekl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abnekr_(real *a, real *b, integer *c__, integer *npix);
+extern integer abneks_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abnekx_(complex *a, complex *b, integer *c__, integer *npix);
+extern integer abnel_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abner_(real *a, real *b, integer *c__, integer *npix);
+extern integer abnes_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer abnex_(complex *a, complex *b, integer *c__, integer *npix);
+extern integer abori_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aborki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aborkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aborks_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer aborl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer abors_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer absud_(doublereal *a, doublereal *b, integer *nblocs, integer *npixpk);
+extern integer absui_(integer *a, integer *b, integer *nblocs, integer *npixpk);
+extern integer absul_(integer *a, integer *b, integer *nblocs, integer *npixpk);
+extern integer absur_(real *a, real *b, integer *nblocs, integer *npixpk);
+extern integer absus_(shortint *a, shortint *b, integer *nblocs, integer *npixpk);
+extern integer acht_(shortint *a, shortint *b, integer *nelem, integer *tya, integer *tyb);
+extern integer achtb_(shortint *a, shortint *b, integer *nelem, integer *tyb);
+extern integer achtc_(shortint *a, shortint *b, integer *nelem, integer *tyb);
+extern integer achtcc_(shortint *a, shortint *b, integer *npix);
+extern integer achtcd_(shortint *a, doublereal *b, integer *npix);
+extern integer achtci_(shortint *a, integer *b, integer *npix);
+extern integer achtcl_(shortint *a, integer *b, integer *npix);
+extern integer achtcr_(shortint *a, real *b, integer *npix);
+extern integer achtcs_(shortint *a, shortint *b, integer *npix);
+extern integer achtcx_(shortint *a, complex *b, integer *npix);
+extern integer achtd_(doublereal *a, shortint *b, integer *nelem, integer *tyb);
+extern integer achtdc_(doublereal *a, shortint *b, integer *npix);
+extern integer achtdd_(doublereal *a, doublereal *b, integer *npix);
+extern integer achtdi_(doublereal *a, integer *b, integer *npix);
+extern integer achtdl_(doublereal *a, integer *b, integer *npix);
+extern integer achtdr_(doublereal *a, real *b, integer *npix);
+extern integer achtds_(doublereal *a, shortint *b, integer *npix);
+extern integer achtdx_(doublereal *a, complex *b, integer *npix);
+extern integer achti_(integer *a, shortint *b, integer *nelem, integer *tyb);
+extern integer achtic_(integer *a, shortint *b, integer *npix);
+extern integer achtid_(integer *a, doublereal *b, integer *npix);
+extern integer achtii_(integer *a, integer *b, integer *npix);
+extern integer achtil_(integer *a, integer *b, integer *npix);
+extern integer achtir_(integer *a, real *b, integer *npix);
+extern integer achtis_(integer *a, shortint *b, integer *npix);
+extern integer achtix_(integer *a, complex *b, integer *npix);
+extern integer achtl_(integer *a, shortint *b, integer *nelem, integer *tyb);
+extern integer achtlc_(integer *a, shortint *b, integer *npix);
+extern integer achtld_(integer *a, doublereal *b, integer *npix);
+extern integer achtli_(integer *a, integer *b, integer *npix);
+extern integer achtll_(integer *a, integer *b, integer *npix);
+extern integer achtlr_(integer *a, real *b, integer *npix);
+extern integer achtls_(integer *a, shortint *b, integer *npix);
+extern integer achtlx_(integer *a, complex *b, integer *npix);
+extern integer achtr_(real *a, shortint *b, integer *nelem, integer *tyb);
+extern integer achtrc_(real *a, shortint *b, integer *npix);
+extern integer achtrd_(real *a, doublereal *b, integer *npix);
+extern integer achtri_(real *a, integer *b, integer *npix);
+extern integer achtrl_(real *a, integer *b, integer *npix);
+extern integer achtrr_(real *a, real *b, integer *npix);
+extern integer achtrs_(real *a, shortint *b, integer *npix);
+extern integer achtrx_(real *a, complex *b, integer *npix);
+extern integer achts_(shortint *a, shortint *b, integer *nelem, integer *tyb);
+extern integer achtsc_(shortint *a, shortint *b, integer *npix);
+extern integer achtsd_(shortint *a, doublereal *b, integer *npix);
+extern integer achtsi_(shortint *a, integer *b, integer *npix);
+extern integer achtsl_(shortint *a, integer *b, integer *npix);
+extern integer achtsr_(shortint *a, real *b, integer *npix);
+extern integer achtss_(shortint *a, shortint *b, integer *npix);
+extern integer achtsx_(shortint *a, complex *b, integer *npix);
+extern integer achtu_(shortint *a, shortint *b, integer *nelem, integer *tyb);
+extern integer achtx_(complex *a, shortint *b, integer *nelem, integer *tyb);
+extern integer achtxc_(complex *a, shortint *b, integer *npix);
+extern integer achtxd_(complex *a, doublereal *b, integer *npix);
+extern integer achtxi_(complex *a, integer *b, integer *npix);
+extern integer achtxl_(complex *a, integer *b, integer *npix);
+extern integer achtxr_(complex *a, real *b, integer *npix);
+extern integer achtxs_(complex *a, shortint *b, integer *npix);
+extern integer achtxx_(complex *a, complex *b, integer *npix);
+extern integer acjgx_(complex *a, complex *b, integer *npix);
+extern integer acjgx_(complex *a, complex *b, integer *npix);
+extern integer aclrc_(shortint *a, integer *npix);
+extern integer aclrd_(doublereal *a, integer *npix);
+extern integer aclri_(integer *a, integer *npix);
+extern integer aclrl_(integer *a, integer *npix);
+extern integer aclrr_(real *a, integer *npix);
+extern integer aclrs_(shortint *a, integer *npix);
+extern integer aclrx_(complex *a, integer *npix);
+extern integer acnvd_(doublereal *in, doublereal *out, integer *npix, doublereal *kernel, integer *knpix);
+extern integer acnvi_(integer *in, integer *out, integer *npix, integer *kernel, integer *knpix);
+extern integer acnvl_(integer *in, integer *out, integer *npix, integer *kernel, integer *knpix);
+extern integer acnvr_(real *in, real *out, integer *npix, real *kernel, integer *knpix);
+extern integer acnvrd_(doublereal *in, doublereal *out, integer *npix, real *kernel, integer *knpix);
+extern integer acnvri_(integer *in, integer *out, integer *npix, real *kernel, integer *knpix);
+extern integer acnvrl_(integer *in, integer *out, integer *npix, real *kernel, integer *knpix);
+extern integer acnvrr_(real *in, real *out, integer *npix, real *kernel, integer *knpix);
+extern integer acnvrs_(shortint *in, shortint *out, integer *npix, real *kernel, integer *knpix);
+extern integer acnvs_(shortint *in, shortint *out, integer *npix, shortint *kernel, integer *knpix);
+extern integer adivd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer adivi_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer adivkd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer adivki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer adivkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer adivkr_(real *a, real *b, real *c__, integer *npix);
+extern integer adivks_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer adivkx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer adivl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer adivr_(real *a, real *b, real *c__, integer *npix);
+extern integer adivs_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer adivx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer advzd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix, D_fp errfcn);
+extern integer advzi_(integer *a, integer *b, integer *c__, integer *npix, I_fp errfcn);
+extern integer advzl_(integer *a, integer *b, integer *c__, integer *npix, I_fp errfcn);
+extern integer advzr_(real *a, real *b, real *c__, integer *npix, R_fp errfcn);
+extern integer advzs_(shortint *a, shortint *b, shortint *c__, integer *npix, J_fp errfcn);
+extern integer advzx_(complex *a, complex *b, complex *c__, integer *npix, C_fp errfcn);
+extern integer aexpd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer aexpi_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aexpkd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer aexpki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aexpkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aexpkr_(real *a, real *b, real *c__, integer *npix);
+extern integer aexpks_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer aexpkx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer aexpl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aexpr_(real *a, real *b, real *c__, integer *npix);
+extern integer aexps_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer aexpx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer afftrr_(real *sr, real *si, real *fr, real *fi, integer *npix);
+extern integer afftrr_(real *sr, real *si, real *fr, real *fi, integer *npix);
+extern integer afftrx_(real *a, complex *b, integer *npix);
+extern integer afftrx_(real *a, complex *b, integer *npix);
+extern integer afftxr_(real *sr, real *si, real *fr, real *fi, integer *npix);
+extern integer afftxr_(real *sr, real *si, real *fr, real *fi, integer *npix);
+extern integer afftxx_(complex *a, complex *b, integer *npix);
+extern integer afftxx_(complex *a, complex *b, integer *npix);
+extern integer agaxis_(integer *iaxs, real *qtst, real *qspa, real *wcwp, real *hcwp, real *xbga, real *ybga, real *xnda, real *ynda, real *qlua, real *ubga, real *unda, real *funs, real *qbtp, real *base, real *qjdp, real *wmjl, real *wmjr, real *qmnt, real *qndp, real *wmnl, real *wmnr, real *qltp, real *qlex, real *qlfl, real *qlof, real *qlos, real *dnla, real *wclm, real *wcle, real *rfnl, real *qcim, real *qcie, real *wnll, real *wnlr, real *wnlb, real *wnle);
+extern integer agback_(void);
+extern integer agchax_(integer *iflg, integer *iaxs, integer *iprt, real *vils);
+extern integer agchcu_(integer *iflg, integer *kdsh);
+extern integer agchil_(integer *iflg, char *lbnm, integer *lnno, ftnlen lbnm_len);
+extern integer agchnl_(integer *iaxs, real *vils, char *chrm, integer *mcim, integer *ncim, integer *ipxm, char *chre, integer *mcie, integer *ncie, ftnlen chrm_len, ftnlen chre_len);
+extern integer agchnl_(integer *iaxs, real *vils, char *chrm, integer *mcim, integer *ncim, integer *ipxm, char *chre, integer *mcie, integer *ncie, ftnlen chrm_len, ftnlen chre_len);
+extern integer agcorn_(integer *ntgr, char *bcrn, integer *ncrn, ftnlen bcrn_len);
+extern integer agctcs_(char *tpid, integer *itcs, ftnlen tpid_len);
+extern integer agctko_(real *xbga, real *ybga, real *xdca, real *ydca, real *cfax, real *cfay, real *csfa, integer *jaor, integer *nmmt, real *qmdp, real *wmml, real *wmmr, real *fnll, real *fnlr, integer *mm12, integer *mm34, real *xmmt, real *ymmt);
+extern integer agcurv_(real *xvec, integer *iiex, real *yvec, integer *iiey, integer *nexy, integer *kdsh);
+extern integer agdash_(real *dash, real *wodq, real *wocd, real *scwp);
+extern integer agdflt_(void);
+extern integer agdlch_(integer *idcs);
+extern integer agexax_(integer *iaxs, real *sval, real *umin, real *umax, integer *nice, real *qlua, real *funs, real *qbtp, real *basd, real *base, real *qmjd, real *qmnd, real *qmnt, real *qltd, real *qltp, real *qled, real *qlex, real *qlfd, real *qlfl, real *qmin, real *qmax);
+extern integer agexus_(real *sval, real *zmin, real *zmax, real *zlow, real *zhgh, real *zdra, integer *nviz, integer *iivz, integer *nevz, integer *iiez, real *umin, real *umax);
+extern integer agezsu_(integer *itoc, real *xdra, real *ydra, integer *idxy, integer *many, integer *npts, char *labg, integer *iivx, integer *iiex, integer *iivy, integer *iiey, ftnlen labg_len);
+extern integer agftol_(integer *iaxs, integer *idma, real *vinp, real *votp, real *vlcs, integer *llua, real *ubeg, real *udif, real *funs, integer *nbtp, real *sbse);
+extern integer aggetc_(char *tpid, char *cusr, ftnlen tpid_len, ftnlen cusr_len);
+extern integer aggetf_(char *tpid, real *fusr, ftnlen tpid_len);
+extern integer aggeti_(char *tpid, integer *iusr, ftnlen tpid_len);
+extern integer aggetp_(char *tpid, real *fura, integer *lura, ftnlen tpid_len);
+extern integer aggtch_(integer *idcs, char *chst, integer *lncs, ftnlen chst_len);
+extern integer aginit_(void);
+extern integer agkurv_(real *xvec, integer *iiex, real *yvec, integer *iiey, integer *nexy, real *sval);
+extern integer aglbls_(integer *itst, real *wcwp, real *hcwp, real *fllb, integer *lbim, real *flln, real *dbox, real *sbox, real *rbox);
+extern integer agltc_(shortint *a, shortint *b, integer *npix, shortint *low, shortint *high, real *kmul, real *kadd, integer *nrange);
+extern integer agltd_(doublereal *a, doublereal *b, integer *npix, doublereal *low, doublereal *high, doublereal *kmul, doublereal *kadd, integer *nrange);
+extern integer aglti_(integer *a, integer *b, integer *npix, integer *low, integer *high, real *kmul, real *kadd, integer *nrange);
+extern integer agltl_(integer *a, integer *b, integer *npix, integer *low, integer *high, doublereal *kmul, doublereal *kadd, integer *nrange);
+extern integer agltr_(real *a, real *b, integer *npix, real *low, real *high, real *kmul, real *kadd, integer *nrange);
+extern integer aglts_(shortint *a, shortint *b, integer *npix, shortint *low, shortint *high, real *kmul, real *kadd, integer *nrange);
+extern integer agltx_(complex *a, complex *b, integer *npix, complex *low, complex *high, real *kmul, real *kadd, integer *nrange);
+extern integer agnumb_(integer *nbtp, real *sbse, real *exmu, integer *nltp, integer *nlex, integer *nlfl, char *bfrm, integer *mcim, integer *ncim, integer *ipxm, char *bfre, integer *mcie, integer *ncie, ftnlen bfrm_len, ftnlen bfre_len);
+extern integer agppid_(char *tpid, ftnlen tpid_len);
+extern integer agpwrt_(real *xpos, real *ypos, char *chrs, integer *nchs, integer *isiz, integer *iori, integer *icen, ftnlen chrs_len);
+extern integer agqurv_(real *xvec, integer *iiex, real *yvec, integer *iiey, integer *nexy, real *sval);
+extern integer agrpch_(char *chst, integer *lncs, integer *idcs, ftnlen chst_len);
+extern integer agrstr_(integer *ifno);
+extern integer agsave_(integer *ifno);
+extern integer agscan_(char *tpid, integer *lopa, integer *nipa, integer *iipa, ftnlen tpid_len);
+extern integer agsetc_(char *tpid, char *cusr, ftnlen tpid_len, ftnlen cusr_len);
+extern integer agsetf_(char *tpid, real *fusr, ftnlen tpid_len);
+extern integer agseti_(char *tpid, integer *iusr, ftnlen tpid_len);
+extern integer agsetp_(char *tpid, real *fura, integer *lura, ftnlen tpid_len);
+extern integer agstch_(char *chst, integer *lncs, integer *idcs, ftnlen chst_len);
+extern integer agstup_(real *xdra, integer *nvix, integer *iivx, integer *nevx, integer *iiex, real *ydra, integer *nviy, integer *iivy, integer *nevy, integer *iiey);
+extern integer agutol_(integer *iaxs, real *funs, integer *idma, real *vinp, real *votp);
+extern integer ahgmc_(shortint *data, integer *npix, integer *hgm, integer *nbins, shortint *z1, shortint *z2);
+extern integer ahgmd_(doublereal *data, integer *npix, integer *hgm, integer *nbins, doublereal *z1, doublereal *z2);
+extern integer ahgmi_(integer *data, integer *npix, integer *hgm, integer *nbins, integer *z1, integer *z2);
+extern integer ahgml_(integer *data, integer *npix, integer *hgm, integer *nbins, integer *z1, integer *z2);
+extern integer ahgmr_(real *data, integer *npix, integer *hgm, integer *nbins, real *z1, real *z2);
+extern integer ahgms_(shortint *data, integer *npix, integer *hgm, integer *nbins, shortint *z1, shortint *z2);
+extern integer aiftrr_(real *fr, real *fi, real *sr, real *si, integer *npix);
+extern integer aiftrr_(real *fr, real *fi, real *sr, real *si, integer *npix);
+extern integer aiftrx_(complex *a, real *b, integer *npix);
+extern integer aiftrx_(complex *a, real *b, integer *npix);
+extern integer aiftxr_(real *fr, real *fi, real *sr, real *si, integer *npix);
+extern integer aiftxr_(real *fr, real *fi, real *sr, real *si, integer *npix);
+extern integer aiftxx_(complex *a, complex *b, integer *npix);
+extern integer aiftxx_(complex *a, complex *b, integer *npix);
+extern integer aimgd_(complex *a, doublereal *b, integer *npix);
+extern integer aimgi_(complex *a, integer *b, integer *npix);
+extern integer aimgl_(complex *a, integer *b, integer *npix);
+extern integer aimgr_(complex *a, real *b, integer *npix);
+extern integer aimgs_(complex *a, shortint *b, integer *npix);
+extern integer alani_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer alanki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer alankl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer alanks_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer alanl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer alans_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer alimc_(shortint *a, integer *npix, shortint *minval, shortint *maxval);
+extern integer alimd_(doublereal *a, integer *npix, doublereal *minval, doublereal *maxval);
+extern integer alimi_(integer *a, integer *npix, integer *minval, integer *maxval);
+extern integer aliml_(integer *a, integer *npix, integer *minval, integer *maxval);
+extern integer alimr_(real *a, integer *npix, real *minval, real *maxval);
+extern integer alims_(shortint *a, integer *npix, shortint *minval, shortint *maxval);
+extern integer alimx_(complex *a, integer *npix, complex *minval, complex *maxval);
+extern integer allnd_(doublereal *a, doublereal *b, integer *npix, D_fp errfcn);
+extern integer allni_(integer *a, integer *b, integer *npix, I_fp errfcn);
+extern integer allnl_(integer *a, integer *b, integer *npix, I_fp errfcn);
+extern integer allnr_(real *a, real *b, integer *npix, R_fp errfcn);
+extern integer allns_(shortint *a, shortint *b, integer *npix, J_fp errfcn);
+extern integer allnx_(complex *a, complex *b, integer *npix, C_fp errfcn);
+extern integer alogd_(doublereal *a, doublereal *b, integer *npix, D_fp errfcn);
+extern integer alogi_(integer *a, integer *b, integer *npix, I_fp errfcn);
+extern integer alogl_(integer *a, integer *b, integer *npix, I_fp errfcn);
+extern integer alogr_(real *a, real *b, integer *npix, R_fp errfcn);
+extern integer alogs_(shortint *a, shortint *b, integer *npix, J_fp errfcn);
+extern integer alogx_(complex *a, complex *b, integer *npix, C_fp errfcn);
+extern integer alori_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer alorki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer alorkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer alorks_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer alorl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer alors_(shortint *a, shortint *b, integer *c__, integer *npix);
+extern integer altad_(doublereal *a, doublereal *b, integer *npix, doublereal *k1, doublereal *k2);
+extern integer altai_(integer *a, integer *b, integer *npix, real *k1, real *k2);
+extern integer altal_(integer *a, integer *b, integer *npix, doublereal *k1, doublereal *k2);
+extern integer altar_(real *a, real *b, integer *npix, real *k1, real *k2);
+extern integer altas_(shortint *a, shortint *b, integer *npix, real *k1, real *k2);
+extern integer altax_(complex *a, complex *b, integer *npix, real *k1, real *k2);
+extern integer altmd_(doublereal *a, doublereal *b, integer *npix, doublereal *k1, doublereal *k2);
+extern integer altmi_(integer *a, integer *b, integer *npix, real *k1, real *k2);
+extern integer altml_(integer *a, integer *b, integer *npix, doublereal *k1, doublereal *k2);
+extern integer altmr_(real *a, real *b, integer *npix, real *k1, real *k2);
+extern integer altms_(shortint *a, shortint *b, integer *npix, real *k1, real *k2);
+extern integer altmx_(complex *a, complex *b, integer *npix, real *k1, real *k2);
+extern integer altrd_(doublereal *a, doublereal *b, integer *npix, doublereal *k1, doublereal *k2, doublereal *k3);
+extern integer altri_(integer *a, integer *b, integer *npix, real *k1, real *k2, real *k3);
+extern integer altrl_(integer *a, integer *b, integer *npix, doublereal *k1, doublereal *k2, doublereal *k3);
+extern integer altrr_(real *a, real *b, integer *npix, real *k1, real *k2, real *k3);
+extern integer altrs_(shortint *a, shortint *b, integer *npix, real *k1, real *k2, real *k3);
+extern integer altrx_(complex *a, complex *b, integer *npix, real *k1, real *k2, real *k3);
+extern integer aluid_(doublereal *a, doublereal *b, real *x, integer *npix);
+extern integer aluii_(integer *a, integer *b, real *x, integer *npix);
+extern integer aluil_(integer *a, integer *b, real *x, integer *npix);
+extern integer aluir_(real *a, real *b, real *x, integer *npix);
+extern integer aluis_(shortint *a, shortint *b, real *x, integer *npix);
+extern integer alutc_(shortint *a, shortint *b, integer *npix, shortint *lut);
+extern integer alutd_(integer *a, doublereal *b, integer *npix, doublereal *lut);
+extern integer aluti_(integer *a, integer *b, integer *npix, integer *lut);
+extern integer alutl_(integer *a, integer *b, integer *npix, integer *lut);
+extern integer alutr_(integer *a, real *b, integer *npix, real *lut);
+extern integer aluts_(shortint *a, shortint *b, integer *npix, shortint *lut);
+extern integer amagd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer amagi_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amagl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amagr_(real *a, real *b, real *c__, integer *npix);
+extern integer amags_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer amagx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer amapd_(doublereal *a, doublereal *b, integer *npix, doublereal *a1, doublereal *a2, doublereal *b1, doublereal *b2);
+extern integer amapi_(integer *a, integer *b, integer *npix, integer *a1, integer *a2, integer *b1, integer *b2);
+extern integer amapl_(integer *a, integer *b, integer *npix, integer *a1, integer *a2, integer *b1, integer *b2);
+extern integer amapr_(real *a, real *b, integer *npix, real *a1, real *a2, real *b1, real *b2);
+extern integer amaps_(shortint *a, shortint *b, integer *npix, shortint *a1, shortint *a2, shortint *b1, shortint *b2);
+extern integer amaxc_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer amaxd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer amaxi_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amaxkc_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer amaxkd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer amaxki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amaxkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amaxkr_(real *a, real *b, real *c__, integer *npix);
+extern integer amaxks_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer amaxkx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer amaxl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amaxr_(real *a, real *b, real *c__, integer *npix);
+extern integer amaxs_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer amaxx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer amed3c_(shortint *a, shortint *b, shortint *c__, shortint *m, integer *npix);
+extern integer amed3d_(doublereal *a, doublereal *b, doublereal *c__, doublereal *m, integer *npix);
+extern integer amed3i_(integer *a, integer *b, integer *c__, integer *m, integer *npix);
+extern integer amed3l_(integer *a, integer *b, integer *c__, integer *m, integer *npix);
+extern integer amed3r_(real *a, real *b, real *c__, real *m, integer *npix);
+extern integer amed3s_(shortint *a, shortint *b, shortint *c__, shortint *m, integer *npix);
+extern integer amed4c_(shortint *a, shortint *b, shortint *c__, shortint *d__, shortint *m, integer *npix);
+extern integer amed4d_(doublereal *a, doublereal *b, doublereal *c__, doublereal *d__, doublereal *m, integer *npix);
+extern integer amed4i_(integer *a, integer *b, integer *c__, integer *d__, integer *m, integer *npix);
+extern integer amed4l_(integer *a, integer *b, integer *c__, integer *d__, integer *m, integer *npix);
+extern integer amed4r_(real *a, real *b, real *c__, real *d__, real *m, integer *npix);
+extern integer amed4s_(shortint *a, shortint *b, shortint *c__, shortint *d__, shortint *m, integer *npix);
+extern integer amed5c_(shortint *a, shortint *b, shortint *c__, shortint *d__, shortint *e, shortint *m, integer *npix);
+extern integer amed5d_(doublereal *a, doublereal *b, doublereal *c__, doublereal *d__, doublereal *e, doublereal *m, integer *npix);
+extern integer amed5i_(integer *a, integer *b, integer *c__, integer *d__, integer *e, integer *m, integer *npix);
+extern integer amed5l_(integer *a, integer *b, integer *c__, integer *d__, integer *e, integer *m, integer *npix);
+extern integer amed5r_(real *a, real *b, real *c__, real *d__, real *e, real *m, integer *npix);
+extern integer amed5s_(shortint *a, shortint *b, shortint *c__, shortint *d__, shortint *e, shortint *m, integer *npix);
+extern integer amgsd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer amgsi_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amgsl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amgsr_(real *a, real *b, real *c__, integer *npix);
+extern integer amgss_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer amgsx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer aminc_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer amind_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer amini_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aminkc_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer aminkd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer aminki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aminkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aminkr_(real *a, real *b, real *c__, integer *npix);
+extern integer aminks_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer aminkx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer aminl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer aminr_(real *a, real *b, real *c__, integer *npix);
+extern integer amins_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer aminx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer amodd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer amodi_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amodkd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer amodki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amodkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amodkr_(real *a, real *b, real *c__, integer *npix);
+extern integer amodks_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer amodl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amodr_(real *a, real *b, real *c__, integer *npix);
+extern integer amods_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer amovc_(shortint *a, shortint *b, integer *npix);
+extern integer amovd_(doublereal *a, doublereal *b, integer *npix);
+extern integer amovi_(integer *a, integer *b, integer *npix);
+extern integer amovkc_(shortint *a, shortint *b, integer *npix);
+extern integer amovkd_(doublereal *a, doublereal *b, integer *npix);
+extern integer amovki_(integer *a, integer *b, integer *npix);
+extern integer amovkl_(integer *a, integer *b, integer *npix);
+extern integer amovkr_(real *a, real *b, integer *npix);
+extern integer amovks_(shortint *a, shortint *b, integer *npix);
+extern integer amovkx_(complex *a, complex *b, integer *npix);
+extern integer amovl_(integer *a, integer *b, integer *npix);
+extern integer amovr_(real *a, real *b, integer *npix);
+extern integer amovs_(shortint *a, shortint *b, integer *npix);
+extern integer amovx_(complex *a, complex *b, integer *npix);
+extern integer amuld_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer amuli_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amulkd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer amulki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amulkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amulkr_(real *a, real *b, real *c__, integer *npix);
+extern integer amulks_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer amulkx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer amull_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer amulr_(real *a, real *b, real *c__, integer *npix);
+extern integer amuls_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer amulx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer anegd_(doublereal *a, doublereal *b, integer *npix);
+extern integer anegi_(integer *a, integer *b, integer *npix);
+extern integer anegl_(integer *a, integer *b, integer *npix);
+extern integer anegr_(real *a, real *b, integer *npix);
+extern integer anegs_(shortint *a, shortint *b, integer *npix);
+extern integer anegx_(complex *a, complex *b, integer *npix);
+extern integer anirs_(real *a, shortint *b, integer *n);
+extern integer anotat_(char *labx, char *laby, integer *lbac, integer *lset, integer *ndsh, char *dshl, ftnlen labx_len, ftnlen laby_len, ftnlen dshl_len);
+extern integer anoti_(integer *a, integer *b, integer *npix);
+extern integer anotl_(integer *a, integer *b, integer *npix);
+extern integer anots_(shortint *a, shortint *b, integer *npix);
+extern integer apkxd_(doublereal *a, doublereal *b, complex *c__, integer *npix);
+extern integer apkxi_(integer *a, integer *b, complex *c__, integer *npix);
+extern integer apkxl_(integer *a, integer *b, complex *c__, integer *npix);
+extern integer apkxr_(real *a, real *b, complex *c__, integer *npix);
+extern integer apkxs_(shortint *a, shortint *b, complex *c__, integer *npix);
+extern integer apkxx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer apowd_(doublereal *a, integer *b, doublereal *c__, integer *npix);
+extern integer apowi_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer apowkd_(doublereal *a, integer *b, doublereal *c__, integer *npix);
+extern integer apowki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer apowkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer apowkr_(real *a, integer *b, real *c__, integer *npix);
+extern integer apowks_(shortint *a, integer *b, shortint *c__, integer *npix);
+extern integer apowkx_(complex *a, integer *b, complex *c__, integer *npix);
+extern integer apowl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer apowr_(real *a, integer *b, real *c__, integer *npix);
+extern integer apows_(shortint *a, integer *b, shortint *c__, integer *npix);
+extern integer apowx_(complex *a, integer *b, complex *c__, integer *npix);
+extern integer arcpd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer arcpi_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer arcpl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer arcpr_(real *a, real *b, real *c__, integer *npix);
+extern integer arcps_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer arcpx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer arczd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix, D_fp errfcn);
+extern integer arczi_(integer *a, integer *b, integer *c__, integer *npix, I_fp errfcn);
+extern integer arczl_(integer *a, integer *b, integer *c__, integer *npix, I_fp errfcn);
+extern integer arczr_(real *a, real *b, real *c__, integer *npix, R_fp errfcn);
+extern integer arczs_(shortint *a, shortint *b, shortint *c__, integer *npix, J_fp errfcn);
+extern integer arczx_(complex *a, complex *b, complex *c__, integer *npix, C_fp errfcn);
+extern integer aread_(integer *fd, shortint *buffer, integer *maxchs, integer *charot);
+extern integer areadb_(integer *fd, shortint *buffer, integer *maxbys, integer *byteot);
+extern integer argtd_(doublereal *a, integer *npix, doublereal *ceil, doublereal *newval);
+extern integer argti_(integer *a, integer *npix, integer *ceil, integer *newval);
+extern integer argtl_(integer *a, integer *npix, integer *ceil, integer *newval);
+extern integer argtr_(real *a, integer *npix, real *ceil, real *newval);
+extern integer argts_(shortint *a, integer *npix, shortint *ceil, shortint *newval);
+extern integer argtx_(complex *a, integer *npix, complex *ceil, complex *newval);
+extern integer arltd_(doublereal *a, integer *npix, doublereal *floor, doublereal *newval);
+extern integer arlti_(integer *a, integer *npix, integer *floor, integer *newval);
+extern integer arltl_(integer *a, integer *npix, integer *floor, integer *newval);
+extern integer arltr_(real *a, integer *npix, real *floor, real *newval);
+extern integer arlts_(shortint *a, integer *npix, shortint *floor, shortint *newval);
+extern integer arltx_(complex *a, integer *npix, complex *floor, complex *newval);
+extern integer aselc_(shortint *a, shortint *b, shortint *c__, integer *sel, integer *npix);
+extern integer aseld_(doublereal *a, doublereal *b, doublereal *c__, integer *sel, integer *npix);
+extern integer aseli_(integer *a, integer *b, integer *c__, integer *sel, integer *npix);
+extern integer aselkc_(shortint *a, shortint *b, shortint *c__, integer *sel, integer *npix);
+extern integer aselkd_(doublereal *a, doublereal *b, doublereal *c__, integer *sel, integer *npix);
+extern integer aselki_(integer *a, integer *b, integer *c__, integer *sel, integer *npix);
+extern integer aselkl_(integer *a, integer *b, integer *c__, integer *sel, integer *npix);
+extern integer aselkr_(real *a, real *b, real *c__, integer *sel, integer *npix);
+extern integer aselks_(shortint *a, shortint *b, shortint *c__, integer *sel, integer *npix);
+extern integer aselkx_(complex *a, complex *b, complex *c__, integer *sel, integer *npix);
+extern integer asell_(integer *a, integer *b, integer *c__, integer *sel, integer *npix);
+extern integer aselr_(real *a, real *b, real *c__, integer *sel, integer *npix);
+extern integer asels_(shortint *a, shortint *b, shortint *c__, integer *sel, integer *npix);
+extern integer aselx_(complex *a, complex *b, complex *c__, integer *sel, integer *npix);
+extern integer asqrd_(doublereal *a, doublereal *b, integer *npix, D_fp errfcn);
+extern integer asqri_(integer *a, integer *b, integer *npix, I_fp errfcn);
+extern integer asqrl_(integer *a, integer *b, integer *npix, I_fp errfcn);
+extern integer asqrr_(real *a, real *b, integer *npix, R_fp errfcn);
+extern integer asqrs_(shortint *a, shortint *b, integer *npix, J_fp errfcn);
+extern integer asqrx_(complex *a, complex *b, integer *npix, C_fp errfcn);
+extern integer asrtc_(shortint *a, shortint *b, integer *npix);
+extern integer asrtd_(doublereal *a, doublereal *b, integer *npix);
+extern integer asrti_(integer *a, integer *b, integer *npix);
+extern integer asrtl_(integer *a, integer *b, integer *npix);
+extern integer asrtr_(real *a, real *b, integer *npix);
+extern integer asrts_(shortint *a, shortint *b, integer *npix);
+extern integer asrtx_(complex *a, complex *b, integer *npix);
+extern integer asubd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer asubi_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer asubkd_(doublereal *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer asubki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer asubkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer asubkr_(real *a, real *b, real *c__, integer *npix);
+extern integer asubks_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer asubkx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer asubl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer asubr_(real *a, real *b, real *c__, integer *npix);
+extern integer asubs_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer asubx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer aupxd_(complex *a, doublereal *b, doublereal *c__, integer *npix);
+extern integer aupxi_(complex *a, integer *b, integer *c__, integer *npix);
+extern integer aupxl_(complex *a, integer *b, integer *c__, integer *npix);
+extern integer aupxr_(complex *a, real *b, real *c__, integer *npix);
+extern integer aupxs_(complex *a, shortint *b, shortint *c__, integer *npix);
+extern integer aupxx_(complex *a, complex *b, complex *c__, integer *npix);
+extern integer awritb_(integer *fd, shortint *buffer, integer *nbytes, integer *byteot);
+extern integer awrite_(integer *fd, shortint *buffer, integer *nchars, integer *charot);
+extern integer awsud_(doublereal *a, doublereal *b, doublereal *c__, integer *npix, doublereal *k1, doublereal *k2);
+extern integer awsui_(integer *a, integer *b, integer *c__, integer *npix, real *k1, real *k2);
+extern integer awsul_(integer *a, integer *b, integer *c__, integer *npix, real *k1, real *k2);
+extern integer awsur_(real *a, real *b, real *c__, integer *npix, real *k1, real *k2);
+extern integer awsus_(shortint *a, shortint *b, shortint *c__, integer *npix, real *k1, real *k2);
+extern integer awsux_(complex *a, complex *b, complex *c__, integer *npix, complex *k1, complex *k2);
+extern integer axori_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer axorki_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer axorkl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer axorks_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer axorl_(integer *a, integer *b, integer *c__, integer *npix);
+extern integer axors_(shortint *a, shortint *b, shortint *c__, integer *npix);
+extern integer bndary_(void);
+extern integer bound_(real *z__, integer *mx, integer *nnx, integer *nny, real *ssp);
+extern integer brktie_(integer *ltime, integer *tm);
+extern integer c1dpas_(integer *interp, real *eps);
+extern integer calcnt_(real *z__, integer *m, integer *n, real *a1, real *a2, real *a3, integer *i1, integer *i2, integer *i3);
+extern integer ccpcag_(shortint *p, integer *npts, integer *ltype, integer *curplt, integer *segsie, integer *xseg, integer *yseg, integer *nsegps);
+extern integer ccpcle_(void);
+extern integer ccpclr_(integer *dummy);
+extern integer ccpcls_(shortint *devnae, integer *n);
+extern integer ccpcor_(integer *index);
+extern integer ccpdrg_(real *xseg, real *yseg, integer *nsegps, integer *lwidth);
+extern integer ccpdrr_(shortint *ch, integer *x, integer *y, integer *xsize, integer *ysize, integer *orien, integer *font, integer *qualiy);
+extern integer ccpese_(integer *fn, shortint *instrn, integer *nwords);
+extern integer ccpfat_(shortint *gki);
+extern integer ccpfia_(shortint *p, integer *npts);
+extern integer ccpfot_(integer *font);
+extern integer ccpint_(integer *tty, shortint *devnae);
+extern integer ccplie_(integer *index);
+extern integer ccplwh_(integer *index);
+extern integer ccpopn_(shortint *devnae, integer *dd);
+extern integer ccpops_(shortint *devnae, integer *n, integer *mode);
+extern integer ccpplt_(shortint *gki);
+extern integer ccppmt_(shortint *gki);
+extern integer ccppoe_(shortint *p, integer *npts);
+extern integer ccppor_(shortint *p, integer *npts);
+extern integer ccpret_(void);
+extern integer ccptet_(integer *xc, integer *yc, shortint *text, integer *n);
+extern integer ccptxt_(shortint *gki);
+extern integer ccxadt_(real *x, real *y, integer *xseg, integer *yseg, integer *curset, integer *segsie);
+extern integer ccxdah_(shortint *p, integer *npts, integer *curplt, real *cursen, integer *curset, integer *segsie, integer *xseg, integer *yseg, real *lastpx, real *lastpy);
+extern integer ccxgap_(shortint *p, integer *npts, integer *curplt, real *cursen, real *matchn, real *lastpx, real *lastpy);
+extern integer ccxinl_(real *x, real *y, real *xsize, real *ysize, shortint *ch, real *orien);
+extern integer ccxiny_(real *x, real *y, integer *npts, integer *qualiy);
+extern integer ccxofs_(real *p1x, real *p1y, real *p2x, real *p2y, real *p3x, real *p3y, real *delx, real *dely);
+extern integer ccxpas_(integer *xc, integer *yc, integer *totlen, integer *x0, integer *y0, integer *dx, integer *dy, integer *polytt, integer *orien);
+extern integer cfvld_(integer *ientry, integer *iix, integer *iiy);
+extern integer chdept_(shortint *ch, shortint *str, integer *maxch, integer *op);
+extern integer chkcyc_(real *u, real *v, integer *imax, integer *jptsy, integer *ier);
+extern integer chstr_(char *label, integer *first, integer *last, ftnlen label_len);
+extern integer clccos_(void);
+extern integer clcenr_(shortint *param, shortint *value);
+extern integer clcfre_(integer *marker);
+extern integer clcint_(void);
+extern integer clclit_(integer *fd, shortint *pset, shortint *format);
+extern integer clcloe_(void);
+extern integer clcmak_(integer *marker);
+extern integer clcmd_(shortint *cmd);
+extern integer clcmdw_(shortint *cmd);
+extern integer clcnek_(shortint *taskne);
+extern integer clcpst_(integer *pp);
+extern integer clcscn_(shortint *cmd);
+extern integer clepst_(integer *pp);
+extern integer clgcut_(shortint *promp1, shortint *promp2, integer *curvee, integer *order);
+extern integer clgen_(real *z__, integer *mx, integer *nx, integer *nny, real *cclo, real *chi, real *cinc, integer *nla, integer *nlm, real *cl, integer *ncl, integer *icnst);
+extern integer clgpsa_(integer *pp, shortint *pname, shortint *outstr, integer *maxch);
+extern integer clgpst_(integer *pp, shortint *pname, shortint *outstr, integer *maxch);
+extern integer clgsec_(shortint *prompt, shortint *sectin, integer *x1, integer *x2, integer *step, integer *nsubss);
+extern integer clgstr_(shortint *param, shortint *outstr, integer *maxch);
+extern integer cllpst_(integer *pp, integer *fd, shortint *format);
+extern integer clopen_(integer *stdinn, integer *stdoun, integer *stdern, integer *device, integer *devtye);
+extern integer clpcls_(integer *list);
+extern integer clppsa_(integer *pp, shortint *pname, shortint *sval);
+extern integer clppsb_(integer *pp, shortint *parnae, logical *bval);
+extern integer clppsc_(integer *pp, shortint *parnae, shortint *cval);
+extern integer clppsd_(integer *pp, shortint *parnae, doublereal *dval);
+extern integer clppsi_(integer *pp, shortint *parnae, integer *ival);
+extern integer clppsl_(integer *pp, shortint *parnae, integer *lval);
+extern integer clppsr_(integer *pp, shortint *parnae, real *rval);
+extern integer clppss_(integer *pp, shortint *parnae, shortint *sval);
+extern integer clppst_(integer *pp, shortint *pname, shortint *sval);
+extern integer clppsx_(integer *pp, shortint *parnae, complex *xval);
+extern integer clprew_(integer *list);
+extern integer clprif_(shortint *param, shortint *formag);
+extern integer clpstr_(shortint *param, shortint *value);
+extern integer clputb_(shortint *param, logical *bval);
+extern integer clputc_(shortint *param, shortint *cval);
+extern integer clputd_(shortint *param, doublereal *dval);
+extern integer clputi_(shortint *param, integer *value);
+extern integer clputl_(shortint *param, integer *lval);
+extern integer clputr_(shortint *param, real *rval);
+extern integer clputs_(shortint *param, shortint *value);
+extern integer clputx_(shortint *param, complex *xval);
+extern integer clreqr_(shortint *param);
+extern integer clset_(real *z__, integer *mx, integer *nx, integer *ny, real *chi, real *clo, real *cinc, integer *nla, integer *nlm, real *cl, integer *ncl, integer *icnst, integer *ioffp, real *spval, real *bigest);
+extern integer clseti_(integer *paramr, integer *value);
+extern integer clsgks_(void);
+extern integer cnvdae_(integer *ltime, shortint *outstr, integer *maxch);
+extern integer cnvtie_(integer *ltime, shortint *outstr, integer *maxch);
+extern integer conbd_(void);
+extern integer conbdn_(void);
+extern integer concal_(real *xd, real *yd, real *zd, integer *nt, integer *ipt, integer *nl, integer *ipl, real *pdd, integer *iti, real *xii, real *yii, real *zii, integer *itpv);
+extern integer concld_(integer *icase, integer *ioop);
+extern integer concls_(real *zd, integer *ndp);
+extern integer condet_(integer *ndp, real *xd, real *yd, integer *ncp, integer *ipc);
+extern integer condrw_(real *scrarr);
+extern integer condsd_(void);
+extern integer conecd_(real *val, char *iout, integer *nused, ftnlen iout_len);
+extern integer congen_(real *xi, real *yi, integer *ipack, real *scrarr, integer *ica);
+extern integer conint_(integer *ndp, real *xd, real *yd, real *zd, integer *ncp, integer *ipc, real *pd);
+extern integer conlin_(real *xd, real *yd, real *zd, integer *nt, integer *iwk, real *wk);
+extern integer conloc_(integer *ndp, real *xd, real *yd, integer *nt, integer *ipt, integer *nl, integer *ipl, real *xii, real *yii, integer *iti, integer *iwk, real *wk);
+extern integer conlod_(real *xd, real *yd, real *zd, integer *ndp, real *wk, integer *iwk, real *scrarr);
+extern integer conop1_(char *iopt, ftnlen iopt_len);
+extern integer conop2_(char *iopt, integer *isize, ftnlen iopt_len);
+extern integer conop3_(char *iopt, real *array, integer *isize, ftnlen iopt_len);
+extern integer conop4_(char *iopt, char *array, integer *isize, integer *ifort, ftnlen iopt_len, ftnlen array_len);
+extern integer conot2_(integer *iver, integer *iunit);
+extern integer conout_(integer *iver);
+extern integer conpdv_(real *xd, real *yd, real *zd, integer *ndp);
+extern integer conpmm_(real *scrarr);
+extern integer conran_(real *xd, real *yd, real *zd, integer *ndp, real *wk, integer *iwk, real *scrarr);
+extern integer conrec_(real *z__, integer *l, integer *m, integer *n, real *flo, real *hi, real *finc, integer *nset, integer *nhi, integer *ndot);
+extern integer conreo_(integer *majlns);
+extern integer consld_(real *scrarr);
+extern integer conssd_(real *x, real *y, integer *ic);
+extern integer constp_(real *xd, real *yd, integer *ndp);
+extern integer contlk_(real *xd, real *yd, integer *ndp, integer *ipt);
+extern integer contng_(integer *ndp, real *xd, real *yd, integer *nt, integer *ipt, integer *nl, integer *ipl, integer *iwl, integer *iwp, real *wk);
+extern integer counmp_(integer *co);
+extern integer cqccfe_(integer *cq);
+extern integer cqccit_(integer *cq, integer *catno);
+extern integer cqdgad_(integer *cq, integer *record, shortint *field, doublereal *array, integer *lenary, integer *npts);
+extern integer cqdgai_(integer *cq, integer *record, shortint *field, integer *array, integer *lenary, integer *npts);
+extern integer cqdgar_(integer *cq, integer *record, shortint *field, real *array, integer *lenary, integer *npts);
+extern integer cqdgat_(integer *cq, integer *record, shortint *field, shortint *str, integer *maxchr, integer *nlines);
+extern integer cqdgsr_(integer *cq, integer *record, shortint *field, shortint *str, integer *maxchr);
+extern integer cqdgwd_(integer *cq, integer *record, shortint *field, shortint *str, integer *maxchr);
+extern integer cqffms_(integer *res, shortint *field, shortint *format, integer *szfort);
+extern integer cqfgsr_(integer *cq, shortint *field, shortint *str, integer *maxch);
+extern integer cqfgwd_(integer *cq, shortint *field, shortint *str, integer *maxch);
+extern integer cqfins_(shortint *linebf, integer *fields, integer *maxfis, integer *nfiels);
+extern integer cqfuns_(integer *res, shortint *field, shortint *units, integer *szunis);
+extern integer cqimce_(integer *res);
+extern integer cqirfe_(integer *res);
+extern integer cqists_(integer *res, integer *param, shortint *str, integer *maxch);
+extern integer cqrcle_(integer *res);
+extern integer cqrfre_(integer *res);
+extern integer cqrsts_(integer *res, integer *param, shortint *str, integer *maxch);
+extern integer cqstas_(integer *cq, integer *param, shortint *str, integer *maxch);
+extern integer cqunmp_(integer *cq);
+extern integer ctcell_(real *z__, integer *mx, integer *nx, integer *ny, integer *m, integer *i0, integer *j0);
+extern integer curve3_(real *u, real *v, real *w, integer *n);
+extern integer curve_(real *px, real *py, integer *np);
+extern integer curved_(real *x, real *y, integer *n);
+extern integer dashbd_(void);
+extern integer dashdb_(integer *ipat);
+extern integer dashdc_(char *ipat, integer *jcrt, integer *jsize, ftnlen ipat_len);
+extern integer deletg_(shortint *fname, integer *versis, integer *subfis);
+extern integer displa_(integer *lfra, integer *lrow, integer *ltyp);
+extern integer drawi_(integer *ixa, integer *iya, integer *ixb, integer *iyb);
+extern integer drawpv_(integer *ix, integer *iy, integer *ind);
+extern integer draws_(integer *mx1, integer *my1, integer *mx2, integer *my2, integer *idraw, integer *imark);
+extern integer drawt_(integer *ixa, integer *iya, integer *ixb, integer *iyb);
+extern integer drcntr_(real *z__, integer *l, integer *mm, integer *nn);
+extern integer drline_(real *z__, integer *l, integer *mm, integer *nn);
+extern integer drwstr_(real *u, real *v, real *ux, real *vy, integer *imax, integer *jptsy);
+extern integer drwvec_(integer *m1, integer *m2, integer *m3, integer *m4, char *label, integer *nc, ftnlen label_len);
+extern integer dsulud_(shortint *utab, real *x, real *y, integer *nvalus);
+extern integer dsulue_(integer *lut);
+extern integer dsulut_(real *xvals, real *yvals, integer *nvals);
+extern integer dtcscl_(doublereal *v, integer *e, integer *sense);
+extern integer dtgad_(integer *dt, integer *record, shortint *field, doublereal *array, integer *lenary, integer *npts);
+extern integer dtgar_(integer *dt, integer *record, shortint *field, real *array, integer *lenary, integer *npts);
+extern integer dtgstr_(integer *dt, integer *record, shortint *field, shortint *str, integer *maxchr);
+extern integer dtptie_(integer *dt);
+extern integer dtput_(integer *dt, shortint *format);
+extern integer dtremp_(integer *dt, shortint *dname, shortint *fname, integer *mode);
+extern integer dtstrg_(integer *datate, shortint *str, integer *maxchr);
+extern integer dtunmp_(integer *dt);
+extern integer e9rin_(char *messg, integer *nerr, logical *save, ftnlen messg_len);
+extern integer encd_(real *valu, real *ash, char *iout, integer *nc, integer *ioffd, ftnlen iout_len);
+extern integer encode_(integer *nchars, char *ftnfmt, char *ftnout, real *rval, ftnlen ftnfmt_len, ftnlen ftnout_len);
+extern integer entsr_(integer *irold, integer *irnew);
+extern integer envinr_(shortint *envvar, shortint *outstr, integer *maxch);
+extern integer envint_(void);
+extern integer envlit_(integer *fd, shortint *prefix, integer *prints);
+extern integer envmak_(integer *oldtop);
+extern integer envret_(shortint *key, shortint *value);
+extern integer eprin_(void);
+extern integer eprinf_(shortint *formag);
+extern integer erract_(integer *severy);
+extern integer errof_(void);
+extern integer evvfre_(integer *o);
+extern integer exmpl1_(void);
+extern integer exmpl2_(void);
+extern integer exmpl3_(void);
+extern integer exmpl4_(void);
+extern integer exmpl5_(void);
+extern integer exmpl6_(void);
+extern integer exmpl7_(void);
+extern integer exmpl8_(void);
+extern integer exmplf_(void);
+extern integer expand_(real *maxw);
+extern integer ezcntr_(real *z__, integer *m, integer *n);
+extern integer ezhftn_(real *z__, integer *m, integer *n);
+extern integer ezisos_(real *t, integer *mu, integer *mv, integer *mw, real *eye, real *slab, real *tiso);
+extern integer ezsrfc_(real *z__, integer *m, integer *n, real *angh, real *angv, real *work);
+extern integer ezstrm_(real *u, real *v, real *work, integer *imax, integer *jmax);
+extern integer ezvec_(real *u, real *v, integer *m, integer *n);
+extern integer falloc_(shortint *fname, integer *filese);
+extern integer fcanpb_(integer *fd);
+extern integer fcldir_(integer *channl, integer *status);
+extern integer fclobr_(shortint *fname);
+extern integer fcopy_(shortint *oldfie, shortint *newfie);
+extern integer fcopyo_(integer *in, integer *out);
+extern integer fdebug_(integer *out, integer *fd1arg, integer *fd2arg);
+extern integer fdirne_(shortint *vfn, shortint *path, integer *maxch);
+extern integer fdum_(void);
+extern integer fdvdld_(integer *ientry, integer *iix, integer *iiy);
+extern integer fencd_(integer *nchars, shortint *fformt, shortint *sppour, real *rval);
+extern integer fence3_(real *u, real *v, real *w, integer *n, integer *ior, real *bot);
+extern integer fexbuf_(integer *fd);
+extern integer ffilbf_(integer *fd, integer *bp, integer *bufsie, integer *buffet);
+extern integer ffldir_(integer *chan, integer *status);
+extern integer fflsbf_(integer *fd, integer *bp, integer *maxchs, integer *buffet);
+extern integer fgdevm_(integer *fd);
+extern integer fgtdir_(integer *chan, shortint *outlie, integer *maxch, integer *status);
+extern integer filerr_(shortint *fname, integer *errcoe);
+extern integer fillin_(void);
+extern integer findz_(integer *im, real *z1, real *z2, real *zfrac, integer *maxcos, integer *nsamps);
+extern integer finit_(void);
+extern integer fioclp_(integer *status);
+extern integer fioqfh_(integer *fd, integer *status);
+extern integer fixmem_(integer *oldsie);
+extern integer fl2int_(real *px, real *py, integer *ix, integer *iy);
+extern integer flsbuf_(integer *fd, integer *nresee);
+extern integer fmapfn_(shortint *vfn, shortint *osfn, integer *maxch);
+extern integer fmcloe_(integer *fm);
+extern integer fmcopo_(integer *old, integer *new__);
+extern integer fmcopy_(shortint *dfname, shortint *newnae);
+extern integer fmdebg_(integer *fm, integer *out, integer *what);
+extern integer fmdele_(shortint *dfname);
+extern integer fmfcdg_(integer *fm, integer *out, integer *what);
+extern integer fmfcfe_(integer *fm);
+extern integer fmfcit_(integer *fm, integer *cachee);
+extern integer fmfcsc_(integer *fm);
+extern integer fmiobd_(integer *fm);
+extern integer fmioek_(integer *fm);
+extern integer fmiopr_(integer *fm, integer *errcoe, shortint *opstr);
+extern integer fmiorr_(integer *fm);
+extern integer fmiosf_(integer *fm);
+extern integer fmiotk_(integer *fm);
+extern integer fmkbfs_(integer *fd);
+extern integer fmkcoy_(shortint *oldfie, shortint *newfie);
+extern integer fmkdir_(shortint *newdir);
+extern integer fmkpbf_(integer *fd);
+extern integer fmlfad_(integer *lf, shortint *buf, integer *maxbys, integer *offset);
+extern integer fmlfae_(integer *lf, shortint *buf, integer *nbytes, integer *offset);
+extern integer fmlfat_(integer *lf, integer *status);
+extern integer fmlfbd_(integer *lf, shortint *buf, integer *maxbys, integer *offset);
+extern integer fmlfbe_(integer *lf, shortint *buf, integer *nbytes, integer *offset);
+extern integer fmlfbt_(integer *lf, integer *status);
+extern integer fmlfce_(integer *lf, integer *status);
+extern integer fmlfcy_(integer *old, integer *olfile, integer *new__, integer *nlfile);
+extern integer fmlfde_(integer *fm, integer *lfile);
+extern integer fmlfne_(integer *fm, integer *lfile, integer *type__, shortint *lfname, integer *maxch);
+extern integer fmlfon_(shortint *pklfne, integer *mode, integer *chan);
+extern integer fmlfsi_(integer *lf, integer *param, integer *lvalue);
+extern integer fmlfue_(integer *fm, integer *lfile);
+extern integer fmloct_(integer *fm, integer *lfile);
+extern integer fmrebd_(shortint *dfname);
+extern integer fmrene_(shortint *old, shortint *new__);
+extern integer fmretd_(integer *fm, integer *lfile);
+extern integer fmseti_(integer *fm, integer *param, integer *value);
+extern integer fmsync_(integer *fm);
+extern integer fmterr_(shortint *preame, shortint *format, integer *index);
+extern integer fmtint_(integer *ftype);
+extern integer fmtred_(void);
+extern integer fmtsel_(shortint *ch, integer *col);
+extern integer fmtstr_(integer *fd, shortint *str, integer *col, shortint *fillcr, integer *leftjy, integer *maxch, integer *width);
+extern integer fmunlk_(integer *fm, integer *lfile);
+extern integer fntclb_(integer *list);
+extern integer fntcls_(integer *pp);
+extern integer fntdir_(integer *chan, integer *offset);
+extern integer fntmkt_(shortint *pat, shortint *patstr, integer *maxch, integer *ep, integer *nedit);
+extern integer fntreb_(integer *list);
+extern integer fopdir_(shortint *osfn, integer *mode, integer *channl);
+extern integer four1_(real *data, integer *nn, integer *isign);
+extern integer fowner_(shortint *fname, shortint *owner, integer *maxch);
+extern integer fpathe_(shortint *vfn, shortint *outpue, integer *maxchs);
+extern integer fpnord_(doublereal *x, doublereal *normx, integer *expon);
+extern integer fpnorr_(real *x, real *normx, integer *expon);
+extern integer fpradv_(void);
+extern integer fprinf_(integer *fd, shortint *formag);
+extern integer fprntf_(integer *newfd, shortint *formag, integer *filete);
+extern integer fptdir_(integer *chan, shortint *line, integer *nchars, integer *status);
+extern integer fputtx_(integer *fd, shortint *buf, integer *nchars, integer *status);
+extern integer frame_(void);
+extern integer fredio_(integer *fd, integer *newfd);
+extern integer fredir_(integer *fd, shortint *fname, integer *mode, integer *type__);
+extern integer frenae_(shortint *oldfne, shortint *newfne);
+extern integer frmbfs_(integer *fd);
+extern integer frmtmp_(void);
+extern integer frst3_(real *u, real *v, real *w);
+extern integer frstc_(integer *mx, integer *my, integer *ient);
+extern integer frstd_(real *x, real *y);
+extern integer frstpt_(real *px, real *py);
+extern integer frsts_(real *xx, real *yy, integer *ient);
+extern integer frtnfd_(integer *fd);
+extern integer fsetev_(shortint *envvar, integer *value);
+extern integer fseti_(integer *fd, integer *param, integer *value);
+extern integer fsfdee_(shortint *fname);
+extern integer fsfgee_(shortint *fname, shortint *fsffie, integer *maxch);
+extern integer fskdir_(integer *chan, integer *offset, integer *status);
+extern integer fstats_(integer *fd, integer *what, shortint *outstr, integer *maxch);
+extern integer fstdir_(integer *chan, integer *param, integer *lvalue);
+extern integer fstrfp_(integer *newfp);
+extern integer fsvtfn_(shortint *fname);
+extern integer fswapd_(integer *fd1, integer *fd2);
+extern integer fulib_(integer *errcoe, shortint *upkmsg, integer *msglen);
+extern integer fwatio_(integer *fd);
+extern integer fwtacc_(integer *fd, shortint *fname);
+extern integer fxfacp_(shortint *line, integer *tpt, integer *nbkw, integer *nbl);
+extern integer fxfacs_(integer *kernel, shortint *root, shortint *extn, integer *acmode, integer *status);
+extern integer fxfact_(shortint *line, integer *tst, integer *nsb);
+extern integer fxfadr_(integer *im, shortint *pname, integer *dtype, shortint *pval);
+extern integer fxfakb_(shortint *keywod, integer *value, shortint *commet, integer *pn);
+extern integer fxfakc_(shortint *keywod, shortint *value, integer *len, shortint *commet, integer *pn);
+extern integer fxfakd_(shortint *keywod, doublereal *value, shortint *commet, integer *precin, integer *pn);
+extern integer fxfaki_(shortint *keywod, integer *value, shortint *commet, integer *pn);
+extern integer fxfakr_(shortint *keywod, real *value, shortint *commet, integer *precin, integer *pn);
+extern integer fxfalc_(integer *fit);
+extern integer fxfald_(integer *a, doublereal *b, integer *npix, doublereal *bscale, doublereal *bzero);
+extern integer fxfalr_(integer *a, real *b, integer *npix, doublereal *bscale, doublereal *bzero);
+extern integer fxfalu_(shortint *a, shortint *b, integer *npix);
+extern integer fxfasr_(shortint *a, real *b, integer *npix, doublereal *bscale, doublereal *bzero);
+extern integer fxfbls_(integer *nbl, integer *po);
+extern integer fxfbyt_(integer *im, shortint *fname);
+extern integer fxfche_(integer *im);
+extern integer fxfchm_(integer *im);
+extern integer fxfchp_(integer *im, shortint *ksectn, integer *acmode, integer *group, integer *ksinh);
+extern integer fxfcle_(integer *im, integer *status);
+extern integer fxfcll_(integer *im);
+extern integer fxfcnx_(integer *im, integer *totpix, shortint *obuf, integer *nbytes, integer *boffst);
+extern integer fxfcoj_(integer *im, integer *infd, integer *hdroff, integer *poff, integer *datase);
+extern integer fxfcoy_(integer *kernel, shortint *oroot, shortint *oextn, shortint *nroot, shortint *nextn, integer *status);
+extern integer fxfdae_(shortint *datesr, integer *limtie);
+extern integer fxfdee_(integer *kernel, shortint *root, shortint *extn, integer *status);
+extern integer fxfdiw_(integer *im);
+extern integer fxfdur_(integer *im, integer *status);
+extern integer fxfenb_(shortint *keywod, integer *param, shortint *card, shortint *commet);
+extern integer fxfenc_(shortint *keywod, shortint *param, integer *maxch, shortint *card, shortint *commet);
+extern integer fxfend_(shortint *keywod, doublereal *param, shortint *card, shortint *commet, integer *precin);
+extern integer fxfene_(integer *ctime, shortint *datesr, integer *maxch, shortint *format, integer *cutovr);
+extern integer fxfeni_(shortint *keywod, integer *param, shortint *card, shortint *commet);
+extern integer fxfenl_(shortint *keywod, integer *param, shortint *card, shortint *commet);
+extern integer fxfenr_(shortint *keywod, real *param, shortint *card, shortint *commet, integer *precin);
+extern integer fxfens_(shortint *root, shortint *keywod, integer *axisno);
+extern integer fxfexh_(integer *infd, integer *outfd, integer *nlines, integer *group, integer *nbks, integer *hdroff, integer *pixoff);
+extern integer fxffac_(shortint *fname, integer *size);
+extern integer fxffcr_(shortint *file);
+extern integer fxffiw_(integer *im, shortint *key);
+extern integer fxffog_(integer *fit, shortint *messg);
+extern integer fxfgas_(integer *im, logical *fsec);
+extern integer fxfgeb_(shortint *card, integer *bval);
+extern integer fxfged_(shortint *card, doublereal *dval);
+extern integer fxfgei_(shortint *card, integer *ival);
+extern integer fxfgen_(integer *im, integer *oim, integer *acmode, shortint *outstr, integer *maxch);
+extern integer fxfger_(shortint *card, real *rval);
+extern integer fxfget_(shortint *card, shortint *commet, integer *maxch);
+extern integer fxfglm_(shortint *time, shortint *date, integer *limtie);
+extern integer fxfgsr_(shortint *card, shortint *outstr, integer *maxch);
+extern integer fxfhef_(integer *im, integer *group, integer *acmode, integer *hdroff, integer *diff, integer *ualen);
+extern integer fxfint_(void);
+extern integer fxfkse_(integer *param, shortint *ksectn, integer *ip, integer *fit);
+extern integer fxfksl_(shortint *outstr, integer *param, integer *fit);
+extern integer fxfksm_(shortint *pm, integer *param, integer *fit);
+extern integer fxfksn_(shortint *ksectn, integer *fit, integer *group);
+extern integer fxfkss_(integer *fit, integer *acmode);
+extern integer fxfkst_(integer *fit);
+extern integer fxflor_(integer *in, integer *fit, integer *spool, integer *nrec10, integer *dataln);
+extern integer fxfmad_(shortint *instr, integer *ip, shortint *card, integer *colout, integer *maxcos, integer *delim);
+extern integer fxfmar_(integer *pat, integer *plines, integer *str, integer *slines, integer *merge, integer *po);
+extern integer fxfmas_(integer *im, integer *nheads);
+extern integer fxfmay_(integer *infd, integer *outfd, integer *hdroff, integer *pixoff, integer *charsa);
+extern integer fxfmea_(integer *im, integer *userh, integer *fitsln);
+extern integer fxfnoe_(integer *im);
+extern integer fxfnul_(void);
+extern integer fxfopn_(integer *kernel, integer *im, integer *oim, shortint *root, shortint *extn, shortint *ksectn, integer *group, integer *gcarg, integer *acmode, integer *status);
+extern integer fxfopx_(integer *im, integer *status);
+extern integer fxfove_(integer *im);
+extern integer fxfovt_(integer *fit, integer *im);
+extern integer fxfpaa_(shortint *ibuf, shortint *obuf, integer *npix, integer *pixtye);
+extern integer fxfpld_(integer *im);
+extern integer fxfple_(integer *im, integer *fd);
+extern integer fxfplf_(integer *im);
+extern integer fxfplo_(integer *im, integer *maxlen, integer *pcount, integer *depth);
+extern integer fxfplp_(integer *im, integer *hdrfd, integer *pcount);
+extern integer fxfprr_(integer *im, integer *group);
+extern integer fxfree_(integer *kernel, shortint *oroot, shortint *oextn, shortint *nroot, shortint *nextn, integer *status);
+extern integer fxfrek_(integer *im);
+extern integer fxfren_(integer *im, integer *cfit, integer *igroup, integer *hoff, integer *poff, integer *extn, integer *extv);
+extern integer fxfrep_(shortint *in, shortint *out, shortint *tmp, integer *ntry, integer *nsleep);
+extern integer fxfrfr_(integer *im, integer *group, integer *poff);
+extern integer fxfrhr_(integer *im, integer *group, integer *acmode);
+extern integer fxfsee_(integer *im, logical *overwe);
+extern integer fxfsev_(integer *im);
+extern integer fxfsex_(integer *im, integer *fit);
+extern integer fxfskn_(integer *im, integer *group, integer *cfit, integer *hoff, integer *poff, integer *extn, integer *extv, integer *spool);
+extern integer fxfuna_(shortint *cbuf, integer *npix, integer *pixtye, doublereal *bscale, doublereal *bzero);
+extern integer fxfupd_(integer *im);
+extern integer fxfupr_(integer *im, integer *status);
+extern integer fxfwrr_(integer *im, integer *fit, integer *hdrfd, integer *nchara, integer *group);
+extern integer fxfwrs_(integer *fd, integer *size);
+extern integer fxfxhd_(integer *in, integer *out, shortint *buf, integer *bufsie, integer *hoffst, integer *poffst, integer *hsize);
+extern integer fxfzad_(doublereal *data, integer *npix, doublereal *bscale, doublereal *bzero);
+extern integer fxfzar_(real *data, integer *npix, doublereal *bscale, doublereal *bzero);
+extern integer fxfzcl_(integer *chan, integer *status);
+extern integer fxfzop_(shortint *pkfn, integer *mode, integer *status);
+extern integer fxfzrd_(integer *chan, shortint *obuf, integer *nbytes, integer *boffst);
+extern integer fxfzst_(integer *chan, integer *param, integer *value);
+extern integer fxfzwr_(integer *chan, shortint *ibuf, integer *nbytes, integer *boffst);
+extern integer fxfzwt_(integer *chan, integer *status);
+extern integer gactie_(integer *gp, integer *flags);
+extern integer gacwk_(integer *wkid);
+extern integer gadraw_(integer *gp, real *wx, real *wy);
+extern integer gamove_(integer *gp, real *x, real *y);
+extern integer gargb_(logical *bval);
+extern integer gargc_(shortint *cval);
+extern integer gargd_(doublereal *dval);
+extern integer gargi_(integer *ival);
+extern integer gargl_(integer *lval);
+extern integer gargr_(real *rval);
+extern integer gargrd_(integer *lval, integer *radix);
+extern integer gargs_(shortint *sval);
+extern integer gargsr_(shortint *outstr, integer *maxch);
+extern integer gargtk_(integer *token, shortint *outstr, integer *maxch);
+extern integer gargwd_(shortint *outstr, integer *maxch);
+extern integer gargx_(complex *xval);
+extern integer gascae_(integer *gp, real *v, integer *npts, integer *axis);
+extern integer gaxdrw_(real *wx, real *wy);
+extern integer gaxfis_(integer *w, real *wx1, real *wx2, real *wy1, real *wy2, real *x1, real *dx, integer *xt, real *y1, real *dy, integer *yt);
+extern integer gaxflh_(integer *stream);
+extern integer gaxndc_(real *wx, real *wy, real *sx, real *sy);
+extern integer gaxstt_(real *wx, real *wy);
+extern integer gaxtet_(integer *stream, real *sx, real *sy, shortint *text, integer *hjusty, integer *vjusty);
+extern integer gaxtik_(real *dx, real *dy);
+extern integer gbytes_(integer *bufin, integer *bufout, integer *index, integer *size, integer *skip, integer *count);
+extern integer gca_(real *px, real *py, real *qx, real *qy, integer *dimx, integer *dimy, integer *ncs, integer *nrs, integer *dx, integer *dy, integer *colia);
+extern integer gcancl_(integer *gp);
+extern integer gcas_(real *px, real *py, real *qx, real *qy, integer *dimx, integer *dimy, integer *ncs, integer *nrs, integer *dx, integer *dy, shortint *colia);
+extern integer gclear_(integer *gp);
+extern integer gclks_(void);
+extern integer gclose_(integer *gp);
+extern integer gclrwk_(integer *wkid, integer *cofl);
+extern integer gclwk_(integer *wkid);
+extern integer gctran_(integer *gp, real *x1, real *y1, real *x2, real *y2, integer *wcsa, integer *wcsb);
+extern integer gcurps_(integer *gp, real *x, real *y);
+extern integer gdawk_(integer *wkid);
+extern integer gdeace_(integer *gp, integer *flags);
+extern integer gescae_(integer *gp, integer *fn, shortint *instrn, integer *nwords);
+extern integer gethot_(shortint *outstr, integer *maxch);
+extern integer getsen_(shortint *image, shortint *sectin, integer *maxch);
+extern integer getset_(real *vl, real *vr, real *vb, real *vt, real *wl, real *wr, real *wb, real *wt, integer *lf);
+extern integer getsi_(integer *ix, integer *iy);
+extern integer getusv_(char *vn, integer *iv, ftnlen vn_len);
+extern integer gexflr_(integer *stream);
+extern integer gexfls_(void);
+extern integer gexflt_(integer *stream, integer *gpvale, integer *epagfh);
+extern integer gfa_(integer *n, real *px, real *py);
+extern integer gfill_(integer *gp, real *x, real *y, integer *npts, integer *style);
+extern integer gflush_(integer *gp);
+extern integer gframe_(integer *gp);
+extern integer gfrint_(integer *gp);
+extern integer ggcell_(integer *gp, shortint *m, integer *nx, integer *ny, real *x1, real *y1, real *x2, real *y2);
+extern integer ggscae_(integer *gp, real *x, real *y, real *dx, real *dy);
+extern integer ggview_(integer *gp, real *x1, real *x2, real *y1, real *y2);
+extern integer ggwind_(integer *gp, real *x1, real *x2, real *y1, real *y2);
+extern integer gimcor_(integer *gp, integer *rop, integer *src, integer *st, real *sx, real *sy, real *sw, real *sh, integer *dst, integer *dt, real *dx, real *dy, real *dw, real *dh);
+extern integer gimcrr_(integer *gp, integer *raster, integer *type__, integer *width, integer *height, integer *depth);
+extern integer gimder_(integer *gp, integer *raster);
+extern integer gimdig_(integer *gp, integer *mappig, integer *erase);
+extern integer gimeng_(integer *gp, integer *mappig, integer *refreh);
+extern integer gimfrg_(integer *gp, integer *mappig);
+extern integer gimfrp_(integer *gp, integer *colorp);
+extern integer gimins_(integer *gp);
+extern integer gimiod_(integer *gp, integer *iomap, integer *first, integer *nelem);
+extern integer gimioe_(integer *gp, integer *iomap, integer *first, integer *nelem);
+extern integer gimlop_(integer *gp, integer *colorp, real *offset, real *slope);
+extern integer gimrat_(integer *gp);
+extern integer gimreg_(integer *gp, integer *mappig);
+extern integer gimres_(integer *gp, integer *raster, shortint *data, integer *nbits, integer *x1, integer *y1, integer *nx, integer *ny);
+extern integer gimrex_(integer *gp, integer *raster, integer *ct, real *x1, real *y1, real *width, real *height);
+extern integer gimseg_(integer *gp, integer *mappig, integer *rop, integer *src, integer *st, real *sx, real *sy, real *sw, real *sh, integer *dst, integer *dt, real *dx, real *dy, real *dw, real *dh);
+extern integer gimser_(integer *gp, integer *raster);
+extern integer gimsex_(integer *gp, integer *raster, integer *ct, real *x1, real *y1, real *width, real *height, integer *color, integer *rop);
+extern integer gimwrp_(integer *gp, integer *colorp, integer *first, integer *nelem, integer *r__, integer *g, integer *b);
+extern integer gimwrs_(integer *gp, integer *raster, shortint *data, integer *nbits, integer *x1, integer *y1, integer *nx, integer *ny);
+extern integer giotr_(integer *stream);
+extern integer giotrt_(integer *vex, integer *nexthr);
+extern integer gkical_(integer *fd);
+extern integer gkiclr_(integer *fd);
+extern integer gkicls_(integer *fd, shortint *device);
+extern integer gkides_(integer *fd, integer *flags);
+extern integer gkieof_(integer *fd);
+extern integer gkiese_(integer *fd, integer *fn, shortint *instrn, integer *nwords);
+extern integer gkiexe_(shortint *gki, integer *dd);
+extern integer gkifat_(integer *fd, integer *ap);
+extern integer gkiffh_(integer *fd);
+extern integer gkifia_(integer *fd, shortint *points, integer *npts);
+extern integer gkiflh_(integer *fd);
+extern integer gkiger_(integer *fd, integer *cursor, integer *cn, integer *key, integer *sx, integer *sy, integer *raster, integer *rx, integer *ry);
+extern integer gkiges_(integer *fd, integer *wcs, integer *lenwcs);
+extern integer gkigey_(integer *fd, shortint *m, integer *nx, integer *ny, integer *x1, integer *y1, integer *x2, integer *y2);
+extern integer gkiinl_(integer *stream, integer *dd);
+extern integer gkiint_(integer *stream);
+extern integer gkimfe_(integer *fd, shortint *title);
+extern integer gkiops_(integer *fd, shortint *device, integer *mode);
+extern integer gkiplt_(integer *fd, integer *ap);
+extern integer gkipmt_(integer *fd, integer *ap);
+extern integer gkipoe_(integer *fd, shortint *points, integer *npts);
+extern integer gkipor_(integer *fd, shortint *points, integer *npts);
+extern integer gkipuy_(integer *fd, shortint *m, integer *nx, integer *ny, integer *x1, integer *y1, integer *x2, integer *y2);
+extern integer gkiree_(integer *fd, integer *cn, integer *key, integer *sx, integer *sy, integer *raster, integer *rx, integer *ry);
+extern integer gkirer_(integer *stream, integer *fd, integer *oldfd, integer *oldtye);
+extern integer gkires_(integer *fd, integer *flags);
+extern integer gkirey_(integer *fd, shortint *m, integer *np);
+extern integer gkiser_(integer *fd, integer *x, integer *y, integer *cursor);
+extern integer gkises_(integer *fd, integer *wcs, integer *lenwcs);
+extern integer gkisul_(integer *stream, integer *pid, integer *prpsia);
+extern integer gkitet_(integer *fd, integer *x, integer *y, shortint *text);
+extern integer gkitxt_(integer *fd, integer *ap);
+extern integer gkiwee_(integer *fd, integer *fn, shortint *hdr, integer *hdrlen, shortint *data, integer *dataln);
+extern integer gkiwre_(integer *fd, shortint *gki);
+extern integer gkpcal_(integer *dummy);
+extern integer gkpcle_(void);
+extern integer gkpclr_(integer *dummy);
+extern integer gkpcls_(shortint *devnae, integer *n);
+extern integer gkpdes_(integer *flags);
+extern integer gkpdup_(integer *fd, shortint *data, integer *nwords);
+extern integer gkpese_(integer *fn, shortint *instrn, integer *nwords);
+extern integer gkpfat_(shortint *gki);
+extern integer gkpfia_(shortint *p, integer *npts);
+extern integer gkpflh_(integer *dummy);
+extern integer gkpger_(integer *cursor);
+extern integer gkpges_(shortint *wcs, integer *nwords);
+extern integer gkpgey_(integer *nx, integer *ny, integer *x1, integer *y1, integer *x2, integer *y2);
+extern integer gkpgrm_(integer *graphm);
+extern integer gkpinl_(integer *dd, integer *outfd, integer *verbot, integer *usegks);
+extern integer gkpmfe_(shortint *title, integer *n);
+extern integer gkpops_(shortint *devnae, integer *n, integer *mode);
+extern integer gkpplt_(shortint *gki);
+extern integer gkppmt_(shortint *gki);
+extern integer gkppoe_(shortint *p, integer *npts);
+extern integer gkppor_(shortint *p, integer *npts);
+extern integer gkppst_(integer *fd, shortint *p, integer *npts, shortint *label, integer *verboe, integer *gkiuns);
+extern integer gkppuy_(shortint *m, integer *nx, integer *ny, integer *x1, integer *y1, integer *x2, integer *y2);
+extern integer gkpres_(integer *flags);
+extern integer gkpser_(integer *x, integer *y, integer *cursor);
+extern integer gkpses_(shortint *wcs, integer *nwords);
+extern integer gkptet_(integer *x, integer *y, shortint *text, integer *n);
+extern integer gkptxg_(shortint *code);
+extern integer gkptxt_(shortint *gki);
+extern integer gkpunn_(shortint *gki);
+extern integer glabax_(integer *gp, shortint *title, shortint *xlabel, shortint *ylabel);
+extern integer glbdrd_(integer *gp, integer *ax1, integer *ax2);
+extern integer glbene_(real *x, shortint *out, integer *maxch, shortint *format, real *step);
+extern integer glbfis_(integer *gp, integer *ap, integer *ax1, integer *ax2, integer *angle);
+extern integer glblas_(integer *gp, integer *ax, shortint *xlabel, shortint *ylabel);
+extern integer glblob_(integer *gp, real *sx, real *sy, real *val, shortint *fmt, integer *scalig);
+extern integer glbple_(integer *gp, shortint *title, integer *ntitls);
+extern integer glbsep_(integer *gp, integer *axes, integer *ntitls, shortint *xlabel, shortint *ylabel);
+extern integer glbses_(integer *gp, integer *ap, integer *ax1, integer *ax2, integer *angle);
+extern integer glbset_(integer *gp, integer *ntitls, shortint *xlabel, shortint *ylabel);
+extern integer glbveg_(integer *gp);
+extern integer gline_(integer *gp, real *x1, real *y1, real *x2, real *y2);
+extern integer gmark_(integer *gp, real *x, real *y, integer *markte, real *xsize, real *ysize);
+extern integer gmftie_(integer *gp, shortint *mftite);
+extern integer gmprif_(integer *gp, shortint *object, shortint *format);
+extern integer gmsg_(integer *gp, shortint *object, shortint *messae);
+extern integer gmsgb_(integer *gp, shortint *object, logical *value);
+extern integer gmsgc_(integer *gp, shortint *object, shortint *value);
+extern integer gmsgd_(integer *gp, shortint *object, doublereal *value);
+extern integer gmsgi_(integer *gp, shortint *object, integer *value);
+extern integer gmsgl_(integer *gp, shortint *object, integer *value);
+extern integer gmsgr_(integer *gp, shortint *object, real *value);
+extern integer gmsgs_(integer *gp, shortint *object, shortint *value);
+extern integer gmsgx_(integer *gp, shortint *object, complex *value);
+extern integer gnewpt_(real *ux, real *vy, integer *imax, integer *jptsy);
+extern integer gopks_(integer *errfil);
+extern integer gopwk_(integer *wkid, integer *conid, integer *wtype);
+extern integer gpagee_(integer *gp, shortint *fname, shortint *prompt);
+extern integer gpcell_(integer *gp, shortint *m, integer *nx, integer *ny, real *x1, real *y1, real *x2, real *y2);
+extern integer gpl_(integer *n, real *px, real *py);
+extern integer gplcae_(integer *gp);
+extern integer gplcal_(void);
+extern integer gplclb_(integer *pen, integer *mx, integer *my);
+extern integer gplcll_(integer *pen, integer *mx, integer *my);
+extern integer gplclr_(integer *pen, integer *mx, integer *my);
+extern integer gplclt_(integer *pen, integer *mx, integer *my);
+extern integer gplflh_(void);
+extern integer gpline_(integer *gp, real *x, real *y, integer *npts);
+extern integer gploto_(integer *gp, real *v, integer *npts, real *x1, real *x2, shortint *title);
+extern integer gplotv_(real *v, integer *npts, real *x1, real *x2, shortint *title);
+extern integer gplret_(void);
+extern integer gplsee_(integer *gp, integer *type__);
+extern integer gplwci_(integer *gp, real *wx, real *wy, real *mx, real *my);
+extern integer gpm_(integer *n, real *px, real *py);
+extern integer gpmark_(integer *gp, real *x, real *y, integer *npts, integer *markte, real *xsize, real *ysize);
+extern integer gptclb_(integer *pen, integer *mx, integer *my);
+extern integer gptcll_(integer *pen, integer *mx, integer *my);
+extern integer gptclr_(integer *pen, integer *mx, integer *my);
+extern integer gptclt_(integer *pen, integer *mx, integer *my);
+extern integer gptflh_(void);
+extern integer gqasf_(integer *ierror, integer *lasf);
+extern integer gqchh_(integer *ierror, real *chh);
+extern integer gqchup_(integer *ierror, real *chupx, real *chupy);
+extern integer gqclip_(integer *errind, integer *iclip, real *iar);
+extern integer gqcntn_(integer *errind, integer *cntr);
+extern integer gqmk_(integer *ierr, integer *mtype);
+extern integer gqnt_(integer *ntnr, integer *errind, real *window, real *vport);
+extern integer gqopwk_(integer *n, integer *errind, integer *ol, integer *wkid);
+extern integer gqplci_(integer *errind, integer *coli);
+extern integer gqpmci_(integer *errind, integer *coli);
+extern integer gqpmi_(integer *errind, real *index);
+extern integer gqsort_(integer *x, integer *nelem, I_fp compae, integer *arg);
+extern integer gqtxal_(integer *ierror, integer *txalh, integer *txalv);
+extern integer gqtxci_(integer *ierror, integer *coli);
+extern integer gqtxp_(integer *ierror, integer *path);
+extern integer gqwks_(integer *wkid, integer *errind, integer *state);
+extern integer gray_(void);
+extern integer grcaxs_(integer *stream, real *sx, real *sy, integer *raster, real *rx, real *ry);
+extern integer grccle_(integer *fd, integer *rc);
+extern integer grcint_(integer *rc);
+extern integer grckes_(integer *rc, shortint *opstr, integer *ip, integer *onoff);
+extern integer grcmee_(integer *stream, shortint *messae);
+extern integer grcndr_(real *mx, real *my, real *sx, real *sy);
+extern integer grcnds_(real *ct, real *mx, real *my, real *wx, real *wy);
+extern integer grcpcr_(integer *stream, real *sx, real *sy, integer *raster, real *rx, real *ry);
+extern integer grcpoe_(integer *stream, real *v, integer *npts);
+extern integer grcred_(integer *tr, integer *stream, shortint *fname);
+extern integer grcres_(integer *stream, real *x, real *y);
+extern integer grcrew_(integer *rc, integer *stream, real *sx, real *sy, integer *raster, real *rx, real *ry);
+extern integer grcscc_(real *sx, real *sy, real *mx, real *my);
+extern integer grcscs_(integer *stream, real *sx, real *sy, integer *raster, real *rx, real *ry, real *wx, real *wy, integer *wcs);
+extern integer grcsen_(integer *w, real *ct);
+extern integer grcsts_(integer *fd, integer *rc);
+extern integer grctet_(integer *stream, real *x, real *y, shortint *text);
+extern integer grcvit_(integer *tr, integer *stream, real *sx, real *sy, integer *raster, real *rx, real *ry, shortint *opstr, integer *ip);
+extern integer grcwan_(integer *fd);
+extern integer grcwcc_(real *ct, real *wx, real *wy, real *mx, real *my);
+extern integer grcwod_(shortint *opstr, integer *ip, shortint *outstr, integer *maxch);
+extern integer grcwre_(integer *tr, integer *stream, shortint *fname, logical *clobbr, logical *fullfe);
+extern integer grdraw_(integer *gp, real *x, real *y);
+extern integer greace_(integer *gp, integer *flags);
+extern integer greset_(integer *gp, integer *flags);
+extern integer grid_(integer *majrx, integer *minrx, integer *majry, integer *minry);
+extern integer gridal_(integer *majrx, integer *minrx, integer *majry, integer *minry, integer *ixlab, integer *iylab, integer *igph, real *x, real *y);
+extern integer gridl_(integer *majrx, integer *minrx, integer *majry, integer *minry);
+extern integer gridt_(void);
+extern integer grmove_(integer *gp, real *x, real *y);
+extern integer grscae_(integer *gp, real *v, integer *npts, integer *axis);
+extern integer gsasf_(integer *lasf);
+extern integer gsawi_(integer *param, integer *value);
+extern integer gsawr_(integer *param, real *value);
+extern integer gscan_(integer *gp, shortint *commad);
+extern integer gschh_(real *chh);
+extern integer gschup_(real *chux, real *chuy);
+extern integer gsclip_(integer *iclip);
+extern integer gscur_(integer *gp, real *x, real *y);
+extern integer gselnt_(integer *wcs);
+extern integer gseti_(integer *gp, integer *param, integer *value);
+extern integer gsetr_(integer *gp, integer *param, real *rval);
+extern integer gsets_(integer *gp, integer *param, shortint *value);
+extern integer gsfaci_(integer *index);
+extern integer gsfais_(integer *ints);
+extern integer gslwsc_(real *width);
+extern integer gsmk_(integer *mtype);
+extern integer gsmksc_(real *width);
+extern integer gsplci_(integer *coli);
+extern integer gspmci_(integer *coli);
+extern integer gspmi_(integer *index);
+extern integer gstrsb_(integer *tabs, integer *maxtas, integer *firstp, integer *tabsie);
+extern integer gstsei_(integer *newvae, integer *value, integer *state);
+extern integer gstser_(real *newvae, real *value, integer *state);
+extern integer gstxal_(integer *txalh, integer *txalv);
+extern integer gstxci_(integer *coli);
+extern integer gstxp_(integer *txp);
+extern integer gsview_(integer *gp, real *x1, real *x2, real *y1, real *y2);
+extern integer gsvp_(integer *wcs, real *x1, real *x2, real *y1, real *y2);
+extern integer gswind_(integer *gp, real *x1, real *x2, real *y1, real *y2);
+extern integer gswn_(integer *wcs, real *x1, real *x2, real *y1, real *y2);
+extern integer gtasce_(integer *gp, integer *gt, real *x, real *y, integer *npts);
+extern integer gtcol1_(shortint *cmdstr, integer *gp, integer *gt, integer *newgrh);
+extern integer gtcoln_(shortint *cmdstr, integer *gp, integer *gt, integer *newgrh);
+extern integer gtcopy_(integer *gt1, integer *gt2);
+extern integer gtext_(integer *gp, real *x, real *y, shortint *text, shortint *format);
+extern integer gtfree_(integer *gt);
+extern integer gtgets_(integer *gt, integer *param, shortint *str, integer *szstr);
+extern integer gthelp_(shortint *file);
+extern integer gtickr_(real *x1, real *x2, integer *roughs, integer *logflg, real *xtick1, real *step);
+extern integer gtiret_(integer *gp, integer *gt);
+extern integer gtlabx_(integer *gp, integer *gt);
+extern integer gtrbap_(integer *stream);
+extern integer gtrcol_(integer *stream, shortint *gki, integer *sourcd);
+extern integer gtrctn_(integer *mx, integer *my, integer *sx, integer *sy);
+extern integer gtrdee_(integer *tr, integer *gki);
+extern integer gtrdit_(integer *pid, integer *in, integer *out, integer *stream);
+extern integer gtrest_(integer *gp, integer *gt);
+extern integer gtrfre_(integer *tr, integer *gki, integer *stream);
+extern integer gtrgfh_(integer *stream);
+extern integer gtrgtn_(integer *fd, real *x1, real *x2, real *y1, real *y2);
+extern integer gtrmee_(integer *fd, integer *stream, shortint *name__);
+extern integer gtrops_(shortint *devspc, integer *mode, integer *stream, integer *sourcd);
+extern integer gtrpae_(integer *fd, integer *stream);
+extern integer gtrpon_(shortint *gki);
+extern integer gtrptn_(integer *stream, real *x1, real *x2, real *y1, real *y2);
+extern integer gtrret_(integer *status);
+extern integer gtrrew_(integer *stream);
+extern integer gtrset_(integer *fd, real *x1, real *x2, real *y1, real *y2);
+extern integer gtrsts_(integer *fd);
+extern integer gtrtre_(integer *tr, integer *gki);
+extern integer gtruno_(integer *stream);
+extern integer gtrwae_(integer *fd, integer *stream);
+extern integer gtrwrr_(integer *fd, real *x, real *y);
+extern integer gtrwsn_(shortint *gki);
+extern integer gtseti_(integer *gt, integer *param, integer *ival);
+extern integer gtsetr_(integer *gt, integer *param, real *rval);
+extern integer gtsets_(integer *gt, integer *param, shortint *str);
+extern integer gtswid_(integer *gp, integer *gt);
+extern integer gtuivs_(integer *gp, integer *gt);
+extern integer gtvplt_(integer *gp, integer *gt, real *v, integer *npts, real *x1, real *x2);
+extern integer gtwin1_(integer *gt, integer *gp, real *wx, real *wy, integer *wcs, integer *key, shortint *cmd, integer *redraw);
+extern integer gtwin2_(integer *gt, integer *gp, real *wx1, real *wy1, integer *wcs1, integer *key1, shortint *cmd1, real *wx2, real *wy2, integer *wcs2, integer *key2, shortint *cmd2, integer *redraw);
+extern integer gtwinw_(integer *gt, integer *gp, shortint *cursor, integer *redraw);
+extern integer gtx_(real *px, real *py, char *f77chars, ftnlen f77chars_len);
+extern integer gtxset_(integer *tx, shortint *format, integer *ip);
+extern integer gtycle_(integer *tty);
+extern integer gtyfey_(integer *fd, shortint *device, integer *tty);
+extern integer gtyins_(integer *tty, integer *tcapce, integer *tcapix, integer *ncaps);
+extern integer gtysce_(integer *tty, shortint *termce, shortint *devnae);
+extern integer gumark_(integer *gp, real *x, real *y, integer *npts, real *xcen, real *ycen, real *xsize, real *ysize, integer *fill);
+extern integer gvline_(integer *gp, real *v, integer *npts, real *x1, real *x2);
+extern integer gvmark_(integer *gp, real *v, integer *npts, real *x1, real *x2, integer *markte, real *xsize, real *ysize);
+extern integer gwcsme_(shortint *devnae, shortint *fname, integer *maxch);
+extern integer gwrwcs_(shortint *devnae, integer *wcs, integer *lenwcs);
+extern integer gxgtx_(real *px, real *py, shortint *chars);
+extern integer hafton_(real *z__, integer *l, integer *m, integer *n, real *flo, real *hi, integer *nlev, integer *nopt, integer *nprm, integer *ispv, real *spval);
+extern integer halfax_(integer *majrx, integer *minrx, integer *majry, integer *minry, real *x, real *y, integer *ixlab, integer *iylab);
+extern integer hfinit_(void);
+extern integer iccled_(integer *ic, integer *cv, doublereal *x, doublereal *y, doublereal *w, integer *npts);
+extern integer icclen_(integer *ic, integer *cv, real *x, real *y, real *w, integer *npts);
+extern integer icclod_(integer *ic);
+extern integer icclor_(integer *ic);
+extern integer iccopy_(integer *icin, integer *icout);
+extern integer icdevd_(integer *cv, doublereal *x, doublereal *y, doublereal *w, integer *rejpts, integer *npts, real *lowret, real *highrt, real *grow, integer *refit, integer *nrejet, integer *newret);
+extern integer icdevr_(integer *cv, real *x, real *y, real *w, integer *rejpts, integer *npts, real *lowret, real *highrt, real *grow, integer *refit, integer *nrejet, integer *newret);
+extern integer icdosd_(integer *ic, integer *cv, doublereal *x, doublereal *wts, integer *npts, integer *newx, integer *newwts, integer *newfun, integer *refit);
+extern integer icdosr_(integer *ic, integer *cv, real *x, real *wts, integer *npts, integer *newx, integer *newwts, integer *newfun, integer *refit);
+extern integer icerrd_(integer *ic, shortint *file, integer *cv, doublereal *x, doublereal *y, doublereal *wts, integer *npts);
+extern integer icerrs_(integer *ic, shortint *file, integer *cv, real *x, real *y, real *wts, integer *npts);
+extern integer icferd_(integer *ic, integer *cv, doublereal *x, doublereal *y, doublereal *wts, integer *npts, integer *fd);
+extern integer icferr_(integer *ic, integer *cv, real *x, real *y, real *wts, integer *npts, integer *fd);
+extern integer icfit_(integer *ic, integer *cv, real *x, real *y, real *wts, integer *npts, integer *newx, integer *newy, integer *newwts, integer *newfun);
+extern integer icfitd_(integer *ic, integer *cv, doublereal *x, doublereal *y, doublereal *wts, integer *npts, integer *newx, integer *newy, integer *newwts, integer *newfun);
+extern integer icfshw_(integer *ic, integer *fd);
+extern integer icfvsd_(integer *ic, integer *cv, doublereal *x, doublereal *y, doublereal *wts, integer *npts, integer *fd);
+extern integer icfvsr_(integer *ic, integer *cv, real *x, real *y, real *wts, integer *npts, integer *fd);
+extern integer icfxyd_(integer *ic, integer *cv, doublereal *x, doublereal *y, doublereal *w, integer *npts, integer *fd);
+extern integer icfxyr_(integer *ic, integer *cv, real *x, real *y, real *w, integer *npts, integer *fd);
+extern integer ichelp_(integer *ic);
+extern integer iclisr_(integer *ic, integer *cv, real *x, real *y, real *wts, integer *npts, shortint *file);
+extern integer icopen_(integer *ic);
+extern integer icpkey_(integer *ic, integer *key, integer *xaxis, integer *yaxis);
+extern integer icpstr_(integer *ic, shortint *param, shortint *str);
+extern integer icputi_(integer *ic, shortint *param, integer *ival);
+extern integer icputr_(integer *ic, shortint *param, real *rval);
+extern integer icrejd_(integer *cv, doublereal *x, doublereal *y, doublereal *w, integer *rejpts, integer *npts, real *lowret, real *highrt, integer *nitere, real *grow, integer *nrejet);
+extern integer icrejr_(integer *cv, real *x, real *y, real *w, integer *rejpts, integer *npts, real *lowret, real *highrt, integer *nitere, real *grow, integer *nrejet);
+extern integer icshow_(integer *ic, shortint *file, integer *gt);
+extern integer icvshd_(integer *ic, shortint *file, integer *cv, doublereal *x, doublereal *y, doublereal *wts, integer *npts, integer *gt);
+extern integer icvshr_(integer *ic, shortint *file, integer *cv, real *x, real *y, real *wts, integer *npts, integer *gt);
+extern integer icxysd_(integer *ic, shortint *file, integer *cv, doublereal *x, doublereal *y, doublereal *w, integer *npts);
+extern integer icxysr_(integer *ic, shortint *file, integer *cv, real *x, real *y, real *w, integer *npts);
+extern integer idbcle_(integer *idb);
+extern integer idiot_(real *xdra, real *ydra, integer *npts, integer *ltyp, integer *ldsh, char *labx, char *laby, char *labg, integer *lfra, ftnlen labx_len, ftnlen laby_len, ftnlen labg_len);
+extern integer idkcle_(integer *fd);
+extern integer idkdrw_(integer *fd, integer *ax, integer *ay);
+extern integer idkflh_(integer *fd);
+extern integer idkfre_(integer *fd);
+extern integer idklih_(integer *fd, integer *width);
+extern integer idkmoe_(integer *fd, integer *x, integer *y);
+extern integer idkver_(integer *ax1, integer *ay1, integer *ax2, integer *ay2);
+extern integer iisblk_(integer *chan1, integer *chan2, integer *chan3, integer *chan4, integer *nframs, real *rate);
+extern integer iiscls_(integer *chan, integer *status);
+extern integer iisers_(integer *chan);
+extern integer iisgop_(integer *frame, integer *mode, integer *chan);
+extern integer iishdr_(integer *id, integer *count, integer *subunt, integer *x, integer *y, integer *z__, integer *t);
+extern integer iisio_(shortint *buf, integer *nbytes, integer *status);
+extern integer iislpe_(shortint *y, integer *npts, integer *xc, integer *height, integer *width);
+extern integer iislps_(shortint *lutb, shortint *lutg, shortint *lutr);
+extern integer iismtc_(integer *chan1, integer *chan2);
+extern integer iisofm_(shortint *map);
+extern integer iisopn_(shortint *devino, integer *mode, integer *chan);
+extern integer iispio_(shortint *buf, integer *nx, integer *ny);
+extern integer iisrcr_(integer *status, integer *xcur, integer *ycur);
+extern integer iisrd_(integer *chan, shortint *buf, integer *nbytes, integer *offset);
+extern integer iisrgb_(integer *redchn, integer *greenn, integer *bluecn);
+extern integer iisrlt_(integer *chan, shortint *lut);
+extern integer iisrm_(integer *zfactr);
+extern integer iisrom_(integer *color, shortint *lut);
+extern integer iissee_(integer *frame);
+extern integer iisstt_(integer *chan, integer *what, integer *lvalue);
+extern integer iiswcr_(integer *status, integer *xcur, integer *ycur);
+extern integer iiswlt_(integer *chan, shortint *lut);
+extern integer iiswn3_(integer *chan1, integer *chan2, integer *chan3);
+extern integer iiswom_(integer *color, shortint *lut);
+extern integer iiswr_(integer *chan, shortint *buf, integer *nbytes, integer *offset);
+extern integer iiswt_(integer *chan, integer *nbytes);
+extern integer iiszm_(integer *zfactr, integer *x, integer *y);
+extern integer ikicle_(integer *im);
+extern integer ikicoy_(shortint *old, shortint *new__);
+extern integer ikidee_(shortint *image);
+extern integer ikideg_(shortint *str, integer *fd, integer *flags);
+extern integer ikiint_(void);
+extern integer ikimke_(shortint *root, shortint *extn, shortint *fname, integer *maxch);
+extern integer ikiopn_(integer *nim, shortint *image, shortint *ksectn, integer *clindx, integer *clsize, integer *acmode, integer *oim);
+extern integer ikiopx_(integer *im);
+extern integer ikipae_(shortint *image, shortint *root, shortint *extn);
+extern integer ikiree_(shortint *old, shortint *new__);
+extern integer ikiupr_(integer *im);
+extern integer imaddb_(integer *im, shortint *key, logical *value);
+extern integer imaddd_(integer *im, shortint *key, doublereal *value);
+extern integer imaddf_(integer *im, shortint *key, shortint *datate);
+extern integer imaddi_(integer *im, shortint *key, integer *value);
+extern integer imaddl_(integer *im, shortint *key, integer *value);
+extern integer imaddr_(integer *im, shortint *key, real *value);
+extern integer imadds_(integer *im, shortint *key, shortint *value);
+extern integer imaflp_(shortint *a, integer *npix, integer *szpixl);
+extern integer imakbc_(integer *im, shortint *key, logical *value, shortint *commet);
+extern integer imakbi_(integer *im, shortint *key, logical *value, shortint *commet, shortint *pkey, integer *baf);
+extern integer imakdc_(integer *im, shortint *key, doublereal *value, shortint *commet);
+extern integer imakdi_(integer *im, shortint *key, doublereal *value, shortint *commet, shortint *pkey, integer *baf);
+extern integer imakic_(integer *im, shortint *key, integer *value, shortint *commet);
+extern integer imakii_(integer *im, shortint *key, integer *value, shortint *commet, shortint *pkey, integer *baf);
+extern integer imaklc_(integer *im, shortint *key, integer *value, shortint *commet);
+extern integer imakli_(integer *im, shortint *key, integer *value, shortint *commet, shortint *pkey, integer *baf);
+extern integer imakrc_(integer *im, shortint *key, real *value, shortint *commet);
+extern integer imakri_(integer *im, shortint *key, real *value, shortint *commet, shortint *pkey, integer *baf);
+extern integer imaksc_(integer *im, shortint *key, shortint *value, shortint *commet);
+extern integer imaksi_(integer *im, shortint *key, shortint *value, shortint *commet, shortint *pkey, integer *baf);
+extern integer imalin_(integer *offset, integer *blksie);
+extern integer imaplv_(integer *im, integer *lv, integer *pv, integer *ndim);
+extern integer imastc_(integer *im, shortint *key, shortint *value, shortint *commet);
+extern integer imasti_(integer *im, shortint *key, shortint *value, shortint *commet, shortint *pkey, integer *baf);
+extern integer imastr_(integer *im, shortint *key, shortint *value);
+extern integer imbln1_(integer *imdes, integer *nx);
+extern integer imbln2_(integer *imdes, integer *nx, integer *ny);
+extern integer imbln3_(integer *imdes, integer *nx, integer *ny, integer *nz);
+extern integer imbtrn_(integer *im, integer *v1, integer *v2, integer *ndim);
+extern integer imcfnl_(integer *fn);
+extern integer imcopy_(shortint *old, shortint *new__);
+extern integer imctrt_(integer *imdes, integer *dim, integer *x1arg, integer *x2arg, integer *step);
+extern integer imdbcl_(shortint *m, integer *nx, integer *ny, integer *ax1, integer *ay1, integer *ax2, integer *ay2);
+extern integer imdcal_(integer *dummy);
+extern integer imdcle_(void);
+extern integer imdclr_(integer *dummy);
+extern integer imdcls_(shortint *devnae, integer *n);
+extern integer imdcor_(integer *index);
+extern integer imddae_(integer *gout, shortint *p, integer *npts, integer *ltype);
+extern integer imddrr_(shortint *ch, integer *x, integer *y, integer *xsize, integer *ysize, integer *orien, integer *font);
+extern integer imdect_(shortint *sectin, integer *ip, integer *x1, integer *x2, integer *step);
+extern integer imdele_(shortint *image);
+extern integer imdelf_(integer *im, shortint *key);
+extern integer imdese_(integer *fn, shortint *instrn, integer *nwords);
+extern integer imdfat_(shortint *gki);
+extern integer imdfia_(shortint *p, integer *npts);
+extern integer imdflh_(integer *dummy);
+extern integer imdfot_(integer *font);
+extern integer imdgey_(integer *nx, integer *ny, integer *x1, integer *y1, integer *x2, integer *y2);
+extern integer imdint_(integer *tty, shortint *devnae);
+extern integer imdlie_(integer *index);
+extern integer imdmcl_(shortint *m, integer *nx, integer *ny, integer *ax1, integer *ay1, integer *ax2, integer *ay2);
+extern integer imdops_(shortint *devnae, integer *n, integer *mode);
+extern integer imdopv_(shortint *devnae, integer *frame, integer *color, integer *dd);
+extern integer imdplt_(shortint *gki);
+extern integer imdpmt_(shortint *gki);
+extern integer imdpoe_(shortint *p, integer *npts);
+extern integer imdpor_(shortint *p, integer *npts);
+extern integer imdpus_(integer *ds, integer *frame, shortint *str1, shortint *str2, real *a, real *b, real *c__, real *d__, real *tx, real *ty, real *z1, real *z2, integer *ztr);
+extern integer imdpuy_(shortint *m, integer *nx, integer *ny, integer *ax1, integer *ay1, integer *ax2, integer *ay2);
+extern integer imdrco_(integer *tty, shortint *outstr, integer *maxch, integer *wcs, integer *pause);
+extern integer imdret_(void);
+extern integer imdseg_(shortint *reg, real *sx, real *sy, integer *snx, integer *sny, integer *dx, integer *dy, integer *dnx, integer *dny, shortint *objref);
+extern integer imdses_(integer *chan, shortint *wcstet);
+extern integer imdtet_(integer *xc, integer *yc, shortint *text, integer *n);
+extern integer imdtxt_(shortint *gki);
+extern integer imerr_(shortint *imagee, integer *errcoe);
+extern integer imflpl_(integer *a, integer *npix);
+extern integer imflps_(shortint *a, integer *npix);
+extern integer imflsd_(integer *imdes);
+extern integer imflsh_(integer *im, integer *bp, integer *vs, integer *ve, integer *ndim);
+extern integer imflsi_(integer *imdes);
+extern integer imflsl_(integer *imdes);
+extern integer imflsr_(integer *imdes);
+extern integer imflss_(integer *imdes);
+extern integer imflsx_(integer *imdes);
+extern integer imfluh_(integer *imdes);
+extern integer imfnpy_(shortint *key, integer *strp, integer *nstr, integer *nextch, integer *sbuf);
+extern integer imfnss_(integer *im, shortint *patcoe, integer *strp, integer *nstr, integer *nextch, integer *sbuf);
+extern integer imgclr_(shortint *imspec, shortint *clustr, integer *maxch);
+extern integer imgcom_(integer *im, shortint *key, shortint *commet);
+extern integer imgime_(shortint *imspec, shortint *image, integer *maxch);
+extern integer imgsen_(shortint *imspec, shortint *sectin, integer *maxch);
+extern integer imgstr_(integer *im, shortint *key, shortint *outstr, integer *maxch);
+extern integer iminfi_(integer *im, shortint *key, shortint *pkey, shortint *datate, integer *baf);
+extern integer iminie_(integer *im, integer *lenimr);
+extern integer imioff_(integer *im, integer *pixoff, integer *comprs, integer *devblz);
+extern integer imisec_(integer *imdes, shortint *sectin);
+extern integer immaky_(integer *im, integer *oim);
+extern integer imopsf_(integer *im);
+extern integer impakd_(doublereal *a, integer *b, integer *npix, integer *dtype);
+extern integer impaki_(integer *a, integer *b, integer *npix, integer *dtype);
+extern integer impakl_(integer *a, integer *b, integer *npix, integer *dtype);
+extern integer impakr_(real *a, integer *b, integer *npix, integer *dtype);
+extern integer impaks_(shortint *a, integer *b, integer *npix, integer *dtype);
+extern integer impakx_(complex *a, integer *b, integer *npix, integer *dtype);
+extern integer impare_(shortint *imspec, shortint *clustr, integer *szclur, shortint *ksectn, integer *szksen, shortint *sectin, integer *szsecn, integer *clindx, integer *clsize);
+extern integer imphis_(integer *im, shortint *key, shortint *text, shortint *pkey, integer *baf);
+extern integer impkbc_(integer *im, shortint *key, logical *bval, shortint *commet);
+extern integer impkdc_(integer *im, shortint *key, doublereal *dval, shortint *commet);
+extern integer impkic_(integer *im, shortint *key, integer *ival, shortint *commet);
+extern integer impklc_(integer *im, shortint *key, integer *lval, shortint *commet);
+extern integer impkrc_(integer *im, shortint *key, real *rval, shortint *commet);
+extern integer impksc_(integer *im, shortint *key, shortint *value, shortint *commet);
+extern integer impmlr_(integer *im, integer *bp);
+extern integer impstc_(integer *im, shortint *key, shortint *value, shortint *commet);
+extern integer impstr_(integer *im, shortint *key, shortint *value);
+extern integer imputb_(integer *im, shortint *key, logical *bval);
+extern integer imputd_(integer *im, shortint *key, doublereal *dval);
+extern integer imputf_(integer *im, shortint *file, shortint *pkey, integer *baf);
+extern integer imputh_(integer *im, shortint *key, shortint *text);
+extern integer imputi_(integer *im, shortint *key, integer *ival);
+extern integer imputl_(integer *im, shortint *key, integer *lval);
+extern integer imputr_(integer *im, shortint *key, real *rval);
+extern integer imputs_(integer *im, shortint *key, shortint *value);
+extern integer imrart_(integer *piv, shortint *fname, integer *nlines, integer *insert);
+extern integer imrbpx_(integer *im, shortint *obuf, integer *totpix, integer *v, integer *vinc);
+extern integer imrdpx_(integer *im, shortint *obuf, integer *npix, integer *v, integer *xstep);
+extern integer imrene_(shortint *old, shortint *new__);
+extern integer imrenf_(integer *im, shortint *oldkey, shortint *newkey);
+extern integer imrmbs_(integer *im);
+extern integer imsamp_(shortint *a, shortint *b, integer *npix, integer *szpixl, integer *step);
+extern integer imsetf_(integer *fd, integer *im);
+extern integer imseti_(integer *im, integer *param, integer *value);
+extern integer imsetr_(integer *im, integer *param, real *value);
+extern integer imsmpl_(integer *a, integer *b, integer *npix, integer *step);
+extern integer imsmps_(shortint *a, shortint *b, integer *npix, integer *step);
+extern integer imsslv_(integer *im, integer *vs, integer *ve, integer *v, integer *vinc, integer *npix);
+extern integer imstas_(integer *im, integer *option, shortint *outstr, integer *maxch);
+extern integer imtcle_(integer *imt);
+extern integer imtrew_(integer *imt);
+extern integer imunmp_(integer *im);
+extern integer imupkd_(integer *a, doublereal *b, integer *npix, integer *dtype);
+extern integer imupki_(integer *a, integer *b, integer *npix, integer *dtype);
+extern integer imupkl_(integer *a, integer *b, integer *npix, integer *dtype);
+extern integer imupkr_(integer *a, real *b, integer *npix, integer *dtype);
+extern integer imupks_(integer *a, shortint *b, integer *npix, integer *dtype);
+extern integer imupkx_(integer *a, complex *b, integer *npix, integer *dtype);
+extern integer imwbpx_(integer *im, shortint *ibuf, integer *totpix, integer *v, integer *vinc);
+extern integer imwrie_(integer *imdes, shortint *buf, integer *nchars, integer *offset);
+extern integer imwrpx_(integer *im, shortint *buf, integer *npix, integer *v, integer *xstep);
+extern integer inbfid_(integer *in, integer *npts, integer *nvars__);
+extern integer inbfir_(integer *in, integer *npts, integer *nvars__);
+extern integer incopd_(integer *insrc, integer *indst);
+extern integer incopr_(integer *insrc, integer *indst);
+extern integer indevd_(integer *nl, doublereal *x, doublereal *y, doublereal *w, integer *rejpts, integer *npts, integer *nvars__, doublereal *lowret, doublereal *highrt, doublereal *grow, integer *nrejet, integer *newret);
+extern integer indevr_(integer *nl, real *x, real *y, real *w, integer *rejpts, integer *npts, integer *nvars__, real *lowret, real *highrt, real *grow, integer *nrejet, integer *newret);
+extern integer indumd_(integer *fd, integer *in);
+extern integer indumr_(integer *fd, integer *in);
+extern integer inerrd_(integer *in, integer *nl, doublereal *x, doublereal *y, doublereal *wts, integer *npts, integer *nvars__, doublereal *variae, doublereal *chisqr, doublereal *scattr, doublereal *rms, doublereal *errors);
+extern integer inerrr_(integer *in, integer *nl, real *x, real *y, real *wts, integer *npts, integer *nvars__, real *variae, real *chisqr, real *scattr, real *rms, real *errors);
+extern integer infitd_(integer *in, integer *nl, doublereal *x, doublereal *y, doublereal *wts, integer *npts, integer *nvars__, integer *wtflag, integer *stat);
+extern integer infitr_(integer *in, integer *nl, real *x, real *y, real *wts, integer *npts, integer *nvars__, integer *wtflag, integer *stat);
+extern integer infred_(integer *in);
+extern integer infrer_(integer *in);
+extern integer ingaxd_(integer *in, integer *gt, integer *nl, integer *axis, doublereal *x, doublereal *y, doublereal *z__, integer *npts, integer *nvars__);
+extern integer ingaxr_(integer *in, integer *gt, integer *nl, integer *axis, real *x, real *y, real *z__, integer *npts, integer *nvars__);
+extern integer ingchd_(integer *in, integer *type__);
+extern integer ingchr_(integer *in, integer *type__);
+extern integer ingcod_(integer *in, shortint *cmdstr, integer *gp, integer *gt, integer *nl, doublereal *x, doublereal *y, doublereal *wts, shortint *names, integer *npts, integer *nvars__, integer *lennae, integer *newgrh);
+extern integer ingcor_(integer *in, shortint *cmdstr, integer *gp, integer *gt, integer *nl, real *x, real *y, real *wts, shortint *names, integer *npts, integer *nvars__, integer *lennae, integer *newgrh);
+extern integer ingd1d_(integer *in, integer *gp, doublereal *x, doublereal *y, doublereal *wts, integer *npts, real *wx, real *wy);
+extern integer ingd1r_(integer *in, integer *gp, real *x, real *y, real *wts, integer *npts, real *wx, real *wy);
+extern integer ingdad_(integer *in, shortint *file, doublereal *x, shortint *names, integer *npts, integer *nvars__, integer *lennae);
+extern integer ingdar_(integer *in, shortint *file, real *x, shortint *names, integer *npts, integer *nvars__, integer *lennae);
+extern integer ingded_(integer *in, integer *gp, integer *gt, integer *nl, doublereal *x, doublereal *y, doublereal *wts, integer *npts, integer *nvars__, real *wx, real *wy);
+extern integer ingder_(integer *in, integer *gp, integer *gt, integer *nl, real *x, real *y, real *wts, integer *npts, integer *nvars__, real *wx, real *wy);
+extern integer ingdey_(integer *in, integer *nvars__, integer *newgrh);
+extern integer ingerd_(integer *in, shortint *file, integer *nl, doublereal *x, doublereal *y, doublereal *wts, integer *npts, integer *nvars__);
+extern integer ingerr_(integer *in, shortint *file, integer *nl, real *x, real *y, real *wts, integer *npts, integer *nvars__);
+extern integer ingfid_(integer *in, integer *gp, shortint *cursor, integer *gt, integer *nl, doublereal *x, doublereal *y, doublereal *wts, shortint *names, integer *npts, integer *nvars__, integer *lennae, integer *wtflag, integer *stat);
+extern integer ingfir_(integer *in, integer *gp, shortint *cursor, integer *gt, integer *nl, real *x, real *y, real *wts, shortint *names, integer *npts, integer *nvars__, integer *lennae, integer *wtflag, integer *stat);
+extern integer ingg1d_(integer *in, integer *gp, integer *gt, doublereal *x, doublereal *y, doublereal *wts, integer *npts);
+extern integer ingg1r_(integer *in, integer *gp, integer *gt, real *x, real *y, real *wts, integer *npts);
+extern integer ingg2d_(integer *in, integer *gp, integer *gt, doublereal *x, doublereal *y, integer *npts);
+extern integer ingg2r_(integer *in, integer *gp, integer *gt, real *x, real *y, integer *npts);
+extern integer inggel_(integer *in, integer *xtype, integer *xnum, shortint *label, shortint *units, integer *maxch);
+extern integer inggfd_(integer *in, integer *gp, integer *gt, integer *nl, doublereal *xin, doublereal *wts, integer *npts, integer *nvars__);
+extern integer inggfr_(integer *in, integer *gp, integer *gt, integer *nl, real *xin, real *wts, integer *npts, integer *nvars__);
+extern integer inggrd_(integer *in, integer *gp, integer *gt, integer *nl, doublereal *x, doublereal *y, doublereal *wts, integer *npts, integer *nvars__);
+extern integer inggrr_(integer *in, integer *gp, integer *gt, integer *nl, real *x, real *y, real *wts, integer *npts, integer *nvars__);
+extern integer ingkey_(integer *in, integer *key, integer *axis, integer *type__, integer *varnum);
+extern integer ingpad_(integer *in, integer *nl, doublereal *x, doublereal *y, doublereal *wts, integer *npts, integer *nvars__, integer *gt);
+extern integer ingpar_(integer *in, integer *nl, real *x, real *y, real *wts, integer *npts, integer *nvars__, integer *gt);
+extern integer ingred_(integer *in, shortint *file, integer *nl, doublereal *x, doublereal *y, doublereal *wts, shortint *names, integer *npts, integer *nvars__, integer *lennae);
+extern integer ingrer_(integer *in, shortint *file, integer *nl, real *x, real *y, real *wts, shortint *names, integer *npts, integer *nvars__, integer *lennae);
+extern integer ingshd_(integer *in, shortint *file);
+extern integer ingshr_(integer *in, shortint *file);
+extern integer ingstr_(integer *in, integer *param, shortint *str, integer *maxch);
+extern integer ingtie_(integer *in, shortint *file, integer *gt);
+extern integer ingu1d_(integer *in, integer *gp, doublereal *x, doublereal *y, doublereal *wts, doublereal *userws, integer *npts, real *wx, real *wy);
+extern integer ingu1r_(integer *in, integer *gp, real *x, real *y, real *wts, real *userws, integer *npts, real *wx, real *wy);
+extern integer inguad_(integer *keynum, integer *in, integer *nl, doublereal *x, doublereal *y, doublereal *z__, integer *npts, integer *nvars__);
+extern integer inguar_(integer *keynum, integer *in, integer *nl, real *x, real *y, real *z__, integer *npts, integer *nvars__);
+extern integer ingucd_(integer *in, integer *gp, integer *gt, integer *nl, doublereal *x, doublereal *y, doublereal *wts, integer *npts, integer *nvars__, integer *newgrh);
+extern integer ingucr_(integer *in, integer *gp, integer *gt, integer *nl, real *x, real *y, real *wts, integer *npts, integer *nvars__, integer *newgrh);
+extern integer inguft_(integer *in, integer *gp, integer *gt, integer *nl, real *wx, real *wy, integer *wcs, integer *key, shortint *cmd);
+extern integer ingund_(integer *in, integer *gp, integer *gt, integer *nl, doublereal *x, doublereal *y, doublereal *wts, doublereal *userws, integer *npts, integer *nvars__, real *wx, real *wy);
+extern integer ingunr_(integer *in, integer *gp, integer *gt, integer *nl, real *x, real *y, real *wts, real *userws, integer *npts, integer *nvars__, real *wx, real *wy);
+extern integer ingvad_(integer *in, shortint *file, integer *nvars__);
+extern integer ingvar_(integer *in, shortint *file, integer *nvars__);
+extern integer ingvsd_(integer *in, shortint *file, integer *nl, doublereal *x, doublereal *y, doublereal *wts, shortint *names, integer *npts, integer *nvars__, integer *lennae, integer *gt);
+extern integer ingvsr_(integer *in, shortint *file, integer *nl, real *x, real *y, real *wts, shortint *names, integer *npts, integer *nvars__, integer *lennae, integer *gt);
+extern integer ininid_(integer *in, integer *func, integer *dfunc, doublereal *param, doublereal *dparam, integer *nparas, integer *plist, integer *nfpars);
+extern integer ininir_(integer *in, integer *func, integer *dfunc, real *param, real *dparam, integer *nparas, integer *plist, integer *nfpars);
+extern integer initag_(void);
+extern integer initut_(void);
+extern integer initzi_(integer *ix, integer *iy, integer *iz, integer *lin3, integer *itop, integer *ient);
+extern integer initzs_(integer *ix, integer *iy, integer *iz, integer *lin3, integer *itop, integer *ient);
+extern integer initzt_(integer *ix, integer *iy, integer *iz, integer *lin3, integer *itop, integer *ient);
+extern integer inlimd_(integer *in, doublereal *x, integer *npts, integer *nvars__);
+extern integer inlimr_(integer *in, real *x, integer *npts, integer *nvars__);
+extern integer innlid_(integer *in, integer *nl);
+extern integer innlir_(integer *in, integer *nl);
+extern integer inpkey_(integer *in, integer *key, integer *axis, integer *type__, integer *varnum);
+extern integer inpstr_(integer *in, integer *param, shortint *str);
+extern integer inputd_(integer *in, integer *param, doublereal *dval);
+extern integer inputi_(integer *in, integer *param, integer *ival);
+extern integer inputp_(integer *in, integer *param, integer *pval);
+extern integer inputr_(integer *in, integer *param, real *rval);
+extern integer inrefd_(integer *in, integer *nl, doublereal *x, doublereal *y, doublereal *wts, integer *npts, integer *nvars__, integer *wtflag);
+extern integer inrefr_(integer *in, integer *nl, real *x, real *y, real *wts, integer *npts, integer *nvars__, integer *wtflag);
+extern integer inrejd_(integer *in, integer *nl, doublereal *x, doublereal *y, doublereal *w, integer *npts, integer *nvars__, integer *wtflag);
+extern integer inrejr_(integer *in, integer *nl, real *x, real *y, real *w, integer *npts, integer *nvars__, integer *wtflag);
+extern integer intrde_(void);
+extern integer intree_(void);
+extern integer intrrt_(void);
+extern integer intzi_(real *xx, real *yy, real *zz, integer *lin3, integer *itop);
+extern integer intzs_(real *xx, real *yy, real *zz, integer *lin3, integer *itop);
+extern integer intzt_(real *xx, real *yy, real *zz, integer *lin3, integer *itop);
+extern integer isosrb_(void);
+extern integer isosrf_(real *t, integer *lu, integer *mu, integer *lv, integer *mv, integer *mw, real *eye, integer *muvwp2, real *slab, real *tiso, integer *iflag);
+extern integer iwcfis_(integer *iw);
+extern integer iwcloe_(integer *iw);
+extern integer iwents_(integer *mw, integer *iw, integer *ndim);
+extern integer iwfb2m_(integer *iw, real *fbx, real *fby, real *imx, real *imy);
+extern integer iwim2b_(integer *iw, real *imx, real *imy, real *fbx, real *fby);
+extern integer iwputr_(integer *fd, integer *iw, integer *axis, integer *ctype, shortint *fmt1, shortint *fmt2, integer *maxinx);
+extern integer iwputy_(integer *iw, doublereal *new__, doublereal *old, integer *ndim, shortint *kwfort, integer *kwtype, integer *kwindx);
+extern integer iwsetp_(integer *mw, integer *im);
+extern integer kardbf_(integer *chan, shortint *buf, integer *maxbys, integer *offset);
+extern integer kardgd_(integer *chan, shortint *buf, integer *maxbys, integer *offset);
+extern integer kardlp_(integer *chan, shortint *buf, integer *maxbys, integer *offset);
+extern integer kardpl_(integer *chan, shortint *buf, integer *maxbys, integer *offset);
+extern integer kardpr_(integer *chan, shortint *buf, integer *maxbys, integer *offset);
+extern integer kardsf_(integer *chan, shortint *buf, integer *maxbys, integer *offset);
+extern integer kawrbf_(integer *chan, shortint *buf, integer *nbytes, integer *offset);
+extern integer kawrgd_(integer *chan, shortint *buf, integer *nbytes, integer *offset);
+extern integer kawrlp_(integer *chan, shortint *buf, integer *nbytes, integer *offset);
+extern integer kawrpl_(integer *chan, shortint *buf, integer *nbytes, integer *offset);
+extern integer kawrpr_(integer *chan, shortint *buf, integer *nbytes, integer *offset);
+extern integer kawrsf_(integer *chan, shortint *buf, integer *nbytes, integer *offset);
+extern integer kawtbf_(integer *chan, integer *status);
+extern integer kawtgd_(integer *chan, integer *status);
+extern integer kawtlp_(integer *chan, integer *status);
+extern integer kawtpl_(integer *chan, integer *status);
+extern integer kawtpr_(integer *chan, integer *status);
+extern integer kawtsf_(integer *chan, integer *status);
+extern integer kbzard_(integer *device, integer *chan, shortint *obuf, integer *maxbys, integer *loffst);
+extern integer kbzawr_(integer *device, integer *chan, shortint *ibuf, integer *nbytes, integer *loffst);
+extern integer kbzawt_(integer *device, integer *chan, integer *status);
+extern integer kbzcls_(integer *device, integer *chan, integer *status);
+extern integer kbzopn_(integer *device, shortint *osfn, integer *mode, integer *chan);
+extern integer kbzstt_(integer *device, integer *chan, integer *what, integer *lvalue);
+extern integer kclcpr_(integer *pid, integer *exitss);
+extern integer kcldir_(integer *chan, integer *status);
+extern integer kcldpr_(integer *jobcoe, integer *killfg, integer *exitss);
+extern integer kclsbf_(integer *chan, integer *status);
+extern integer kclsgd_(integer *chan, integer *status);
+extern integer kclslp_(integer *chan, integer *status);
+extern integer kclspl_(integer *chan, integer *status);
+extern integer kclssf_(integer *chan, integer *status);
+extern integer kclstx_(integer *chan, integer *status);
+extern integer kclsty_(integer *chan, integer *status);
+extern integer kdvall_(shortint *device, integer *allflg, integer *status);
+extern integer kdvown_(shortint *device, shortint *owner, integer *maxch, integer *status);
+extern integer kfacss_(shortint *osfn, integer *mode, integer *type__, integer *status);
+extern integer kfaloc_(shortint *osfn, integer *nbytes, integer *status);
+extern integer kfchdr_(shortint *dirnae, integer *status);
+extern integer kfdele_(shortint *osfn, integer *status);
+extern integer kfgcwd_(shortint *outstr, integer *maxch, integer *nchars);
+extern integer kfinfo_(shortint *osfn, integer *fi, integer *status);
+extern integer kflstx_(integer *chan, integer *status);
+extern integer kflsty_(integer *chan, integer *status);
+extern integer kfmkcp_(shortint *oldosn, shortint *newosn, integer *status);
+extern integer kfmkdr_(shortint *osfn, integer *status);
+extern integer kfpath_(shortint *vfn, shortint *osfn, integer *maxch, integer *nchars);
+extern integer kfprot_(shortint *osfn, integer *protfg, integer *status);
+extern integer kfrnam_(shortint *oldosn, shortint *newosn, integer *status);
+extern integer kfsubd_(shortint *osdir, integer *maxch, shortint *subdir, integer *nchars);
+extern integer kfutim_(shortint *osfn, integer *atime, integer *mtime, integer *status);
+extern integer kfxdir_(shortint *vfn, shortint *osdir, integer *maxch, integer *nchars);
+extern integer kgettx_(integer *chan, shortint *text, integer *maxch, integer *status);
+extern integer kgetty_(integer *chan, shortint *text, integer *maxch, integer *status);
+extern integer kgfdir_(integer *chan, shortint *osfn, integer *maxch, integer *status);
+extern integer kience_(integer *data, shortint *str, integer *nchars);
+extern integer kienvt_(shortint *name__, shortint *value);
+extern integer kierrr_(integer *server);
+extern integer kiflux_(integer *device, integer *chan, integer *status);
+extern integer kifman_(shortint *vfn, shortint *pkosfn, integer *maxch);
+extern integer kifren_(integer *chan);
+extern integer kiinit_(integer *inchan, integer *outchn, integer *errchn, integer *device, integer *devtye);
+extern integer kintpr_(integer *pid, integer *vex, integer *status);
+extern integer kishot_(integer *fd);
+extern integer kixnoe_(shortint *r1, shortint *r2, integer *maxch);
+extern integer knottx_(integer *chan, integer *loffst);
+extern integer knotty_(integer *chan, integer *loffst);
+extern integer kopcpr_(shortint *proces, integer *inchan, integer *outchn, integer *pid);
+extern integer kopdir_(shortint *osfn, integer *chan);
+extern integer kopdpr_(shortint *proces, shortint *bkgfie, shortint *bkgmsg, integer *jobcoe);
+extern integer kopnbf_(shortint *osfn, integer *mode, integer *chan);
+extern integer kopngd_(shortint *osfn, integer *mode, integer *chan);
+extern integer kopnlp_(shortint *osfn, integer *mode, integer *chan);
+extern integer kopnpl_(shortint *osfn, integer *mode, integer *chan);
+extern integer kopnsf_(shortint *osfn, integer *mode, integer *chan);
+extern integer kopntx_(shortint *osfn, integer *mode, integer *chan);
+extern integer kopnty_(shortint *osfn, integer *mode, integer *chan);
+extern integer koscmd_(shortint *oscmd, shortint *stdine, shortint *stdoue, shortint *stdere, integer *status);
+extern integer kputtx_(integer *chan, shortint *text, integer *nchars, integer *status);
+extern integer kputty_(integer *chan, shortint *text, integer *nchars, integer *status);
+extern integer ksared_(integer *server, shortint *buf, integer *maxbys);
+extern integer ksawat_(integer *server, integer *status);
+extern integer ksawre_(integer *server, shortint *buf, integer *nbytes);
+extern integer ksektx_(integer *chan, integer *loffst, integer *status);
+extern integer ksekty_(integer *chan, integer *loffst, integer *status);
+extern integer kserrr_(integer *errcoe, shortint *errmsg);
+extern integer kservr_(integer *in, integer *out, integer *buflen);
+extern integer ksfman_(shortint *vfn, shortint *osfn, integer *maxch);
+extern integer ksloaf_(integer *bfdd);
+extern integer ksloax_(integer *txdd);
+extern integer ksop2r_(integer *opcode, integer *subcoe, shortint *ostr, shortint *sstr);
+extern integer ksttbf_(integer *chan, integer *what, integer *lvalue);
+extern integer ksttgd_(integer *chan, integer *what, integer *lvalue);
+extern integer ksttlp_(integer *chan, integer *what, integer *lvalue);
+extern integer ksttpl_(integer *chan, integer *what, integer *lvalue);
+extern integer ksttpr_(integer *chan, integer *what, integer *lvalue);
+extern integer ksttsf_(integer *chan, integer *what, integer *lvalue);
+extern integer kstttx_(integer *chan, integer *what, integer *lvalue);
+extern integer ksttty_(integer *chan, integer *what, integer *lvalue);
+extern integer kszfif_(integer *in, integer *out, integer *iobuf, integer *leniof, integer *bfdd);
+extern integer kszfit_(integer *in, integer *out, integer *iobuf, integer *leniof);
+extern integer kszfix_(integer *in, integer *out, integer *iobuf, integer *leniof, integer *txdd);
+extern integer ktzcls_(integer *device, integer *chan, integer *status);
+extern integer ktzfls_(integer *device, integer *chan, integer *status);
+extern integer ktzget_(integer *device, integer *chan, shortint *obuf, integer *maxch, integer *status);
+extern integer ktznot_(integer *device, integer *chan, integer *loffst);
+extern integer ktzopn_(integer *device, shortint *osfn, integer *mode, integer *chan);
+extern integer ktzput_(integer *device, integer *chan, shortint *ibuf, integer *nchars, integer *status);
+extern integer ktzsek_(integer *device, integer *chan, integer *loffst, integer *status);
+extern integer ktzstt_(integer *device, integer *chan, integer *what, integer *lvalue);
+extern integer kurv1s_(integer *n, real *x, real *y, real *slop1, real *slopn, real *xp, real *yp, real *temp, real *s, real *sigma, integer *islpsw);
+extern integer kurv2s_(real *t, real *xs, real *ys, integer *n, real *x, real *y, real *xp, real *yp, real *s, real *sigma, integer *nslpsw, real *slp);
+extern integer labmod_(char *fmtx, char *fmty, integer *numx, integer *numy, integer *isizx, integer *isizy, integer *ixdec, integer *iydec, integer *ixor, ftnlen fmtx_len, ftnlen fmty_len);
+extern integer lastd_(void);
+extern integer line3_(real *ua, real *va, real *wa, real *ub, real *vb, real *wb);
+extern integer line3w_(real *xa, real *ya, real *xb, real *yb);
+extern integer line_(real *x1, real *y1, real *x2, real *y2);
+extern integer lined_(real *xa, real *ya, real *xb, real *yb);
+extern integer lnocle_(integer *lp);
+extern integer lnosae_(integer *lp, integer *line, integer *loffst, integer *ltag);
+extern integer lpzard_(integer *chan, shortint *buf, integer *maxbys, integer *offset);
+extern integer lpzawe_(integer *chan, shortint *buf, integer *nbytes, integer *offset);
+extern integer lpzawt_(integer *chan, integer *nbytes);
+extern integer lubksb_(real *a, integer *n, integer *np, integer *indx, real *b);
+extern integer ludcmp_(real *a, integer *n, integer *np, integer *indx, real *d__);
+extern integer luminv_(real *a, integer *n, integer *np);
+extern integer maideh_(void);
+extern integer maskce_(integer *colors);
+extern integer masken_(integer *colors, integer *maskvs, integer *nmasks);
+extern integer maskfc_(integer *data, shortint *func, integer *args, integer *nargs, integer *val);
+extern integer maskod_(integer *op, shortint *operad, integer *o);
+extern integer maxmin_(integer *im, real *zmin, real *zmax, integer *nsamps);
+extern integer mcflsh_(void);
+extern integer mefakb_(shortint *keywod, integer *value, shortint *commet, integer *pn);
+extern integer mefakc_(shortint *keywod, shortint *value, integer *len, shortint *commet, integer *pn);
+extern integer mefakd_(shortint *keywod, doublereal *value, shortint *commet, integer *precin, integer *pn);
+extern integer mefaki_(shortint *keywod, integer *value, shortint *commet, integer *pn);
+extern integer mefakr_(shortint *keywod, real *value, shortint *commet, integer *precin, integer *pn);
+extern integer mefape_(integer *mefi, integer *mefo);
+extern integer mefcle_(integer *mef);
+extern integer mefcon_(integer *mefi, integer *mefo, integer *gn);
+extern integer mefcpl_(integer *spool, integer *mef);
+extern integer mefdur_(integer *out, shortint *hdrfne);
+extern integer mefenb_(shortint *keywod, integer *param, shortint *card, shortint *commet);
+extern integer mefenc_(shortint *keywod, shortint *param, integer *maxch, shortint *card, shortint *commet);
+extern integer mefend_(shortint *keywod, doublereal *param, shortint *card, shortint *commet, integer *precin);
+extern integer mefene_(shortint *datesr, integer *szdate);
+extern integer mefeni_(shortint *keywod, integer *param, shortint *card, shortint *commet);
+extern integer mefenl_(shortint *keywod, integer *param, shortint *card, shortint *commet);
+extern integer mefenr_(shortint *keywod, real *param, shortint *card, shortint *commet, integer *precin);
+extern integer mefens_(shortint *root, shortint *keywod, integer *axisno);
+extern integer meffis_(shortint *fname, integer *acmode);
+extern integer meffiw_(integer *hdrp, shortint *key, shortint *keywvl);
+extern integer mefget_(shortint *card, shortint *commet, integer *maxch);
+extern integer mefglm_(shortint *time, shortint *date, integer *limtie);
+extern integer mefgsr_(integer *mef, shortint *key, shortint *outstr, integer *maxch);
+extern integer mefgvb_(shortint *card, integer *bval);
+extern integer mefgvd_(shortint *card, doublereal *dval);
+extern integer mefgvi_(shortint *card, integer *ival);
+extern integer mefgvr_(shortint *card, real *rval);
+extern integer mefgvt_(shortint *card, shortint *outstr, integer *maxch);
+extern integer mefksn_(shortint *ksectn, shortint *extnae, integer *extver);
+extern integer mefkve_(shortint *outstr, integer *lextye, shortint *extnae, integer *extver);
+extern integer mefpae_(integer *fd, integer *offset);
+extern integer mefpar_(integer *out, shortint *card);
+extern integer mefsel_(integer *versin, integer *plsize, shortint *imhdr, shortint *title, integer *ctime, integer *mtime, integer *limtie, real *minval, real *maxval, integer *mef);
+extern integer mefskt_(integer *mef);
+extern integer mefwcb_(shortint *kname, integer *kvalue, shortint *kcomm, integer *fd);
+extern integer mefwcc_(shortint *kname, shortint *kvalue, shortint *kcomm, integer *fd);
+extern integer mefwci_(shortint *kname, integer *kvalue, shortint *kcomm, integer *fd);
+extern integer mefwcr_(shortint *kname, real *kvalue, shortint *kcomm, integer *fd);
+extern integer mefwrk_(integer *out, integer *olines);
+extern integer mefwrl_(integer *mef, shortint *title, integer *ctime, integer *mtime, integer *limtie, real *minval, real *maxval, shortint *plbuf, integer *naxis, integer *axlen);
+extern integer mefwrr_(integer *mefi, integer *mefo, logical *inphdu);
+extern integer mefwrt_(integer *out);
+extern integer miiwrc_(integer *fd, integer *spp, integer *nchars);
+extern integer miiwrd_(integer *fd, integer *spp, integer *nelem);
+extern integer miiwri_(integer *fd, integer *spp, integer *nelem);
+extern integer miiwrl_(integer *fd, integer *spp, integer *nelem);
+extern integer miiwrr_(integer *fd, integer *spp, integer *nelem);
+extern integer miiwrs_(integer *fd, integer *spp, integer *nelem);
+extern integer minmax_(real *z__, integer *l, integer *mm, integer *nn, integer *issizm, real *aash, integer *joffdt);
+extern integer miocle_(integer *mp);
+extern integer miosee_(integer *mp, integer *vs, integer *ve, integer *ndim);
+extern integer miosei_(integer *mp, integer *param, integer *value);
+extern integer mmask_(void);
+extern integer mrinvt_(real *a, real *b, integer *n);
+extern integer mtalle_(shortint *mtname);
+extern integer mtclen_(integer *level, integer *stale, integer *out);
+extern integer mtclre_(void);
+extern integer mtdeae_(shortint *mtname, integer *rewine);
+extern integer mtence_(shortint *outstr, integer *maxch, shortint *device, integer *fileno, integer *recno, shortint *attrl);
+extern integer mtfnae_(shortint *mtname, integer *fileno, shortint *outstr, integer *maxch);
+extern integer mtgets_(shortint *mtname, integer *mt);
+extern integer mtglok_(shortint *mtname, shortint *lockfe, integer *maxch);
+extern integer mtloce_(shortint *device, shortint *lockfe, integer *maxch);
+extern integer mtpare_(shortint *mtname, shortint *device, integer *szdeve, integer *file, integer *record, shortint *attrl, integer *szattl);
+extern integer mtposn_(shortint *mtname, integer *file, integer *record);
+extern integer mtpute_(integer *fd, shortint *text);
+extern integer mtreae_(shortint *mtname, integer *mt);
+extern integer mtrewd_(shortint *mtname, integer *initce);
+extern integer mtsavd_(integer *fd, shortint *keywod, integer *value);
+extern integer mtsavs_(integer *mt);
+extern integer mtstas_(integer *out, shortint *mtname);
+extern integer mtsync_(integer *status);
+extern integer mtupde_(integer *mt);
+extern integer mwaxtn_(doublereal *oltm, doublereal *oltv, doublereal *nltm, doublereal *nltv, integer *pdim, doublereal *ltm, doublereal *ltv, integer *ax, integer *ndim);
+extern integer mwc2td_(integer *act, doublereal *x1, doublereal *y1, doublereal *x2, doublereal *y2);
+extern integer mwc2tr_(integer *act, real *x1, real *y1, real *x2, real *y2);
+extern integer mwcloe_(integer *mw);
+extern integer mwctfe_(integer *ct);
+extern integer mwctrd_(integer *act, doublereal *p1, doublereal *p2, integer *ndim);
+extern integer mwctrr_(integer *act, real *p1, real *p2, integer *ndim);
+extern integer mwgaxp_(integer *mw, integer *axno, integer *axval, integer *ndim);
+extern integer mwgaxt_(integer *mw, integer *axbits, integer *axis, integer *naxes);
+extern integer mwgltd_(integer *mw, doublereal *ltm, doublereal *ltv, integer *ndim);
+extern integer mwgltr_(integer *mw, real *ltm, real *ltv, integer *ndim);
+extern integer mwgsym_(integer *mw, shortint *outstr, integer *maxch);
+extern integer mwgwas_(integer *mw, integer *axis, shortint *attrie, shortint *valstr, integer *maxch);
+extern integer mwgwsd_(integer *mw, integer *axis, doublereal *pv, doublereal *wv, integer *npts);
+extern integer mwgwsr_(integer *mw, integer *axis, real *pv, real *wv, integer *npts);
+extern integer mwgwtd_(integer *mw, doublereal *r__, doublereal *w, doublereal *cd, integer *ndim);
+extern integer mwgwtr_(integer *mw, real *r__, real *w, real *cd, integer *ndim);
+extern integer mwinvd_(doublereal *oltm, doublereal *nltm, integer *ndim);
+extern integer mwinvr_(real *oltm, real *nltm, integer *ndim);
+extern integer mwload_(integer *mw, integer *bp);
+extern integer mwloam_(integer *mw, integer *im);
+extern integer mwltrd_(doublereal *p1, doublereal *p2, doublereal *ltm, doublereal *ltv, integer *ndim);
+extern integer mwltrr_(real *p1, real *p2, real *ltm, real *ltv, integer *ndim);
+extern integer mwlubb_(doublereal *a, integer *ix, doublereal *b, integer *ndim);
+extern integer mwlude_(doublereal *a, integer *ix, integer *ndim);
+extern integer mwmkid_(doublereal *ltm, integer *ndim);
+extern integer mwmkir_(real *ltm, integer *ndim);
+extern integer mwmmud_(doublereal *a, doublereal *b, doublereal *c__, integer *ndim);
+extern integer mwmmur_(real *a, real *b, real *c__, integer *ndim);
+extern integer mwnewm_(integer *mw, shortint *system, integer *ndim);
+extern integer mwrote_(integer *mw, real *theta, real *center, integer *axbits);
+extern integer mwsavm_(integer *mw, integer *im);
+extern integer mwsaxp_(integer *mw, integer *axno, integer *axval, integer *ndim);
+extern integer mwscae_(integer *mw, real *scale, integer *axbits);
+extern integer mwsdes_(integer *mw);
+extern integer mwseti_(integer *mw, integer *param, integer *value);
+extern integer mwshit_(integer *mw, real *shift, integer *axbits);
+extern integer mwshow_(integer *mw, integer *fd, integer *what);
+extern integer mwsltd_(integer *mw, doublereal *ltm, doublereal *ltv, integer *ndim);
+extern integer mwsltr_(integer *mw, real *ltm, real *ltv, integer *ndim);
+extern integer mwssym_(integer *mw, shortint *system);
+extern integer mwswas_(integer *mw, integer *axis, shortint *attrie, shortint *valstr);
+extern integer mwswsd_(integer *mw, integer *axis, doublereal *pv, doublereal *wv, integer *npts);
+extern integer mwswsr_(integer *mw, integer *axis, real *pv, real *wv, integer *npts);
+extern integer mwswtd_(integer *mw, doublereal *r__, doublereal *w, doublereal *cd, integer *ndim);
+extern integer mwswte_(integer *mw, integer *axis, integer *naxes, shortint *wtype, shortint *wattr);
+extern integer mwswtr_(integer *mw, real *r__, real *w, real *cd, integer *ndim);
+extern integer mwtrad_(integer *mw, doublereal *ltv1, doublereal *ltm, doublereal *ltv2, integer *ndim);
+extern integer mwtrar_(integer *mw, real *ltv1, real *ltm, real *ltv2, integer *ndim);
+extern integer mwv1td_(integer *act, doublereal *x1, doublereal *x2, integer *npts);
+extern integer mwv1tr_(integer *act, real *x1, real *x2, integer *npts);
+extern integer mwv2td_(integer *act, doublereal *x1, doublereal *y1, doublereal *x2, doublereal *y2, integer *npts);
+extern integer mwv2tr_(integer *act, real *x1, real *y1, real *x2, real *y2, integer *npts);
+extern integer mwvmud_(doublereal *a, doublereal *b, doublereal *c__, integer *ndim);
+extern integer mwvmur_(real *a, real *b, real *c__, integer *ndim);
+extern integer mwvtrd_(integer *ct, doublereal *v1, doublereal *v2, integer *ndim, integer *npts);
+extern integer mwvtrr_(integer *ct, real *v1, real *v2, integer *ndim, integer *npts);
+extern integer mxmy_(integer *ix, integer *iy);
+extern integer mzscae_(integer *im, integer *zpm, integer *bpm, real *contrt, integer *maxpix, real *z1, real *z2);
+extern integer newpie_(shortint *param, integer *im);
+extern integer newtie_(shortint *param, integer *im);
+extern integer obscle_(integer *obs);
+extern integer obsgsr_(integer *obs, shortint *param, shortint *str, integer *maxchr);
+extern integer obsimn_(integer *obs, integer *im, shortint *obsery, integer *verboe, logical *newobs, logical *obshed);
+extern integer obsino_(integer *obs, integer *fd);
+extern integer obslog_(integer *obs, shortint *task, shortint *params, integer *fd);
+extern integer oifacs_(integer *kernel, shortint *root, shortint *extn, integer *acmode, integer *status);
+extern integer oifcle_(integer *im, integer *status);
+extern integer oifcoy_(integer *kernel, shortint *oldrot, shortint *oldexn, shortint *newrot, shortint *newexn, integer *status);
+extern integer oifdee_(integer *kernel, shortint *root, shortint *extn, integer *status);
+extern integer oifgpe_(shortint *pixfie, shortint *hdrfie, shortint *path, integer *maxch);
+extern integer oifmke_(integer *im, shortint *pixfie, integer *maxch);
+extern integer oifopn_(integer *kernel, integer *im, integer *oim, shortint *root, shortint *extn, shortint *ksectn, integer *clindx, integer *clsize, integer *acmode, integer *status);
+extern integer oifopx_(integer *im, integer *status);
+extern integer oifree_(integer *kernel, shortint *oldrot, shortint *oldexn, shortint *newrot, shortint *newexn, integer *status);
+extern integer oiftrm_(shortint *s, integer *nchars);
+extern integer oifupr_(integer *im, integer *status);
+extern integer oifwrr_(integer *fd, integer *im, integer *htype);
+extern integer ord1_(integer *m, real *b);
+extern integer ord2_(integer *m, real *b);
+extern integer osfnik_(shortint *osfn);
+extern integer osfnms_(shortint *osfn, shortint *lockfe, shortint *timel1, shortint *timel2, integer *maxch);
+extern integer osfnpe_(shortint *spposn, shortint *hoston, integer *maxch);
+extern integer osfnrk_(shortint *osfn);
+extern integer pagefe_(shortint *fname, shortint *prompt);
+extern integer pagefs_(shortint *files);
+extern integer pargb_(logical *bval);
+extern integer pargc_(shortint *cval);
+extern integer pargd_(doublereal *dval);
+extern integer pargg_(doublereal *value, integer *dtype);
+extern integer pargi_(integer *ival);
+extern integer pargl_(integer *lval);
+extern integer pargr_(real *rval);
+extern integer pargs_(shortint *sval);
+extern integer pargsr_(shortint *str);
+extern integer pargx_(complex *xval);
+extern integer patfit_(integer *delim, shortint *patstr, integer *ip, shortint *patbuf, integer *szpat, integer *op);
+extern integer perim3_(integer *magr1, integer *mini1, integer *magr2, integer *mini2, integer *iwhich, real *var);
+extern integer perim_(integer *majrx, integer *minrx, integer *majry, integer *minry);
+extern integer periml_(integer *majrx, integer *minrx, integer *majry, integer *minry);
+extern integer pggetr_(shortint *strval, integer *maxch);
+extern integer pgpusd_(integer *cmd);
+extern integer pgsett_(shortint *prompt, shortint *upromt, shortint *fname);
+extern integer plascp_(integer *pl, integer *vs, integer *ve, integer *outfd);
+extern integer plbox_(integer *pl, integer *x1, integer *y1, integer *x2, integer *y2, integer *rop);
+extern integer plcire_(integer *pl, integer *x, integer *y, integer *radius, integer *rop);
+extern integer plcler_(integer *pl);
+extern integer plcloe_(integer *pl);
+extern integer plcoms_(integer *pl);
+extern integer pldebg_(integer *pl, integer *fd, integer *width, integer *what);
+extern integer pldebt_(integer *fd, shortint *buf, integer *col, integer *firstl, integer *maxcol);
+extern integer plfacs_(integer *kernel, shortint *root, shortint *extn, integer *acmode, integer *status);
+extern integer plfcle_(integer *im, integer *status);
+extern integer plfcoy_(integer *kernel, shortint *oldrot, shortint *oldexn, shortint *newrot, shortint *newexn, integer *status);
+extern integer plfdee_(integer *kernel, shortint *root, shortint *extn, integer *status);
+extern integer plfnul_(void);
+extern integer plfopn_(integer *kernel, integer *im, integer *oim, shortint *root, shortint *extn, shortint *ksectn, integer *clindx, integer *clsize, integer *acmode, integer *status);
+extern integer plfree_(integer *kernel, shortint *oldrot, shortint *oldexn, shortint *newrot, shortint *newexn, integer *status);
+extern integer plfupr_(integer *im, integer *status);
+extern integer plgete_(integer *pl, integer *v);
+extern integer plglls_(integer *pl, integer *v, shortint *lldst, integer *lldeph, integer *npix, integer *rop);
+extern integer plglpi_(integer *pl, integer *v, integer *pxdst, integer *pxdeph, integer *npix, integer *rop);
+extern integer plglpl_(integer *pl, integer *v, integer *pxdst, integer *pxdeph, integer *npix, integer *rop);
+extern integer plglps_(integer *pl, integer *v, shortint *pxdst, integer *pxdeph, integer *npix, integer *rop);
+extern integer plglri_(integer *pl, integer *v, integer *rldst, integer *rldeph, integer *npix, integer *rop);
+extern integer plglrl_(integer *pl, integer *v, integer *rldst, integer *rldeph, integer *npix, integer *rop);
+extern integer plglrs_(integer *pl, integer *v, shortint *rldst, integer *rldeph, integer *npix, integer *rop);
+extern integer plgsie_(integer *pl, integer *naxes, integer *axlen, integer *depth);
+extern integer plline_(integer *pl, integer *x1, integer *y1, integer *x2, integer *y2, integer *width, integer *rop);
+extern integer pllinl_(shortint *llsrc, integer *xs, integer *srcmal, shortint *lldst, integer *ds, integer *dstmal, shortint *llstn, integer *ss, shortint *llout, integer *npix, integer *rop);
+extern integer pllinp_(shortint *llsrc, integer *xs, integer *srcmal, shortint *lldst, integer *ds, integer *dstmal, shortint *llout, integer *npix, integer *rop);
+extern integer pllneg_(shortint *ll, integer *ld);
+extern integer plload_(integer *pl, integer *bp);
+extern integer plloaf_(integer *pl, shortint *mask, shortint *title, integer *maxch);
+extern integer plloam_(integer *pl, shortint *imname, shortint *title, integer *maxch);
+extern integer pllprs_(shortint *ll, integer *fd, shortint *label, integer *firstl, integer *maxcos);
+extern integer plotif_(real *fx, real *fy, integer *ip);
+extern integer plotit_(integer *ix, integer *iy, integer *ip);
+extern integer plpixi_(integer *pxsrc, integer *xs, integer *srcmal, integer *pxdst, integer *ds, integer *dstmal, integer *npix, integer *rop);
+extern integer plpixl_(integer *pxsrc, integer *xs, integer *srcmal, integer *pxdst, integer *ds, integer *dstmal, integer *npix, integer *rop);
+extern integer plpixs_(shortint *pxsrc, integer *xs, integer *srcmal, shortint *pxdst, integer *ds, integer *dstmal, integer *npix, integer *rop);
+extern integer plplls_(integer *pl, integer *v, shortint *llsrc, integer *lldeph, integer *npix, integer *rop);
+extern integer plplpi_(integer *pl, integer *v, integer *pxsrc, integer *pxdeph, integer *npix, integer *rop);
+extern integer plplpl_(integer *pl, integer *v, integer *pxsrc, integer *pxdeph, integer *npix, integer *rop);
+extern integer plplps_(integer *pl, integer *v, shortint *pxsrc, integer *pxdeph, integer *npix, integer *rop);
+extern integer plplri_(integer *pl, integer *v, integer *rlsrc, integer *rldeph, integer *npix, integer *rop);
+extern integer plplrl_(integer *pl, integer *v, integer *rlsrc, integer *rldeph, integer *npix, integer *rop);
+extern integer plplrs_(integer *pl, integer *v, shortint *rlsrc, integer *rldeph, integer *npix, integer *rop);
+extern integer plpoit_(integer *pl, integer *x, integer *y, integer *rop);
+extern integer plpoln_(integer *pl, integer *x, integer *y, integer *npts, integer *rop);
+extern integer plrani_(integer *rlsrc, integer *xs, integer *srcmal, integer *rldst, integer *ds, integer *dstmal, integer *rlout, integer *npix, integer *rop);
+extern integer plranl_(integer *rlsrc, integer *xs, integer *srcmal, integer *rldst, integer *ds, integer *dstmal, integer *rlout, integer *npix, integer *rop);
+extern integer plrans_(shortint *rlsrc, integer *xs, integer *srcmal, shortint *rldst, integer *ds, integer *dstmal, shortint *rlout, integer *npix, integer *rop);
+extern integer plrcle_(integer *plr);
+extern integer plregp_(integer *pl, L_fp ufcn, integer *ufd, integer *y1, integer *y2, integer *rop);
+extern integer plrget_(integer *plr, integer *bufp, integer *xsize, integer *ysize, integer *xblock, integer *yblock);
+extern integer plrop_(integer *plsrc, integer *vssrc, integer *pldst, integer *vsdst, integer *vn, integer *rop);
+extern integer plrpri_(integer *rl, integer *fd, shortint *label, integer *firstl, integer *maxcol);
+extern integer plrprl_(integer *rl, integer *fd, shortint *label, integer *firstl, integer *maxcol);
+extern integer plrprs_(shortint *rl, integer *fd, shortint *label, integer *firstl, integer *maxcol);
+extern integer plrset_(integer *plr, integer *x1, integer *y1, integer *x2, integer *y2);
+extern integer plsavf_(integer *pl, shortint *fname, shortint *title, integer *flags);
+extern integer plsavm_(integer *pl, shortint *imname, shortint *title, integer *flags);
+extern integer plsete_(integer *pl, integer *v);
+extern integer plseti_(integer *pl, integer *param, integer *value);
+extern integer plssie_(integer *pl, integer *naxes, integer *axlen, integer *depth);
+extern integer plsslv_(integer *pl, integer *vs, integer *vn, integer *v, integer *ve);
+extern integer plstel_(integer *plsrc, integer *vssrc, integer *pldst, integer *vsdst, integer *plstn, integer *vsstn, integer *vn, integer *rop);
+extern integer plupde_(integer *pl, integer *v, shortint *ll);
+extern integer plvald_(integer *pl);
+extern integer pmascp_(integer *pl, integer *vs, integer *ve, integer *outfd);
+extern integer pmbox_(integer *pl, integer *x1, integer *y1, integer *x2, integer *y2, integer *rop);
+extern integer pmcire_(integer *pl, integer *x, integer *y, integer *radius, integer *rop);
+extern integer pmcler_(integer *pl);
+extern integer pmglls_(integer *pl, integer *v, shortint *lldst, integer *lldeph, integer *npix, integer *rop);
+extern integer pmglpi_(integer *pl, integer *v, integer *pxdst, integer *pxdeph, integer *npix, integer *rop);
+extern integer pmglpl_(integer *pl, integer *v, integer *pxdst, integer *pxdeph, integer *npix, integer *rop);
+extern integer pmglps_(integer *pl, integer *v, shortint *pxdst, integer *pxdeph, integer *npix, integer *rop);
+extern integer pmglri_(integer *pl, integer *v, integer *rldst, integer *rldeph, integer *npix, integer *rop);
+extern integer pmglrl_(integer *pl, integer *v, integer *rldst, integer *rldeph, integer *npix, integer *rop);
+extern integer pmglrs_(integer *pl, integer *v, shortint *rldst, integer *rldeph, integer *npix, integer *rop);
+extern integer pmline_(integer *pl, integer *x1, integer *y1, integer *x2, integer *y2, integer *width, integer *rop);
+extern integer pmplls_(integer *pl, integer *v, shortint *llraw, integer *lldeph, integer *npix, integer *rop);
+extern integer pmplpi_(integer *pl, integer *v, integer *pxsrc, integer *pxdeph, integer *npix, integer *rop);
+extern integer pmplpl_(integer *pl, integer *v, integer *pxsrc, integer *pxdeph, integer *npix, integer *rop);
+extern integer pmplps_(integer *pl, integer *v, shortint *pxsrc, integer *pxdeph, integer *npix, integer *rop);
+extern integer pmplri_(integer *pl, integer *v, integer *rlsrc, integer *rldeph, integer *npix, integer *rop);
+extern integer pmplrl_(integer *pl, integer *v, integer *rlsrc, integer *rldeph, integer *npix, integer *rop);
+extern integer pmplrs_(integer *pl, integer *v, shortint *rlsrc, integer *rldeph, integer *npix, integer *rop);
+extern integer pmpoit_(integer *pl, integer *x, integer *y, integer *rop);
+extern integer pmpoln_(integer *pl, integer *x, integer *y, integer *npts, integer *rop);
+extern integer pmrcle_(integer *pmr);
+extern integer pmrop_(integer *pmsrc, integer *vssrc, integer *pmdst, integer *vsdst, integer *vn, integer *rop);
+extern integer pmrset_(integer *pmr, integer *x1, integer *y1, integer *x2, integer *y2);
+extern integer pmsete_(integer *pl, integer *v);
+extern integer pmseti_(integer *pl, integer *param, integer *value);
+extern integer pmstel_(integer *pmsrc, integer *vssrc, integer *pmdst, integer *vsdst, integer *pmstn, integer *vsstn, integer *vn, integer *rop);
+extern integer point3_(real *u, real *v, real *w);
+extern integer point_(real *px, real *py);
+extern integer points_(real *px, real *py, integer *np, integer *ic, integer *il);
+extern integer pollce_(integer *fds);
+extern integer pollcr_(integer *fds, integer *fd, integer *type__);
+extern integer pollpt_(integer *fds);
+extern integer pollst_(integer *fds, integer *fd, integer *type__);
+extern integer pollzo_(integer *fds);
+extern integer prchdr_(integer *pid, shortint *newdir);
+extern integer prdumn_(shortint *osfn, integer *mode, integer *chan);
+extern integer preal_(shortint *tval, real *rval);
+extern integer prenvt_(integer *pid, shortint *envvar, shortint *valuer);
+extern integer prkill_(integer *job);
+extern integer pronic_(integer *vex, integer *nexthr);
+extern integer proscd_(integer *pr, shortint *cmd);
+extern integer prpsit_(void);
+extern integer prredr_(integer *pid, integer *stream, integer *newfd);
+extern integer prseti_(integer *pid, integer *param, integer *value);
+extern integer prsigl_(integer *pid, integer *signal);
+extern integer prupde_(integer *pid, shortint *messae, integer *flusht);
+extern integer prvret_(shortint *name__, shortint *value);
+extern integer przclr_(integer *chan, integer *status);
+extern integer pscenr_(integer *ps, shortint *str);
+extern integer pscloe_(integer *ps);
+extern integer psdept_(integer *ps, shortint *line);
+extern integer psesct_(shortint *in, shortint *out, integer *maxch);
+extern integer psfone_(integer *ps, integer *fontse);
+extern integer psfoor_(integer *ps, shortint *ledge, shortint *center, shortint *redge);
+extern integer pshear_(integer *ps, shortint *ledge, shortint *center, shortint *redge);
+extern integer psindt_(integer *ps, integer *nchars);
+extern integer psioxr_(integer *fd, shortint *buf, integer *nchars);
+extern integer pslink_(integer *ps, integer *fillfg);
+extern integer psnewe_(integer *ps);
+extern integer psoutt_(integer *ps, shortint *str, integer *fillfg);
+extern integer pspage_(integer *ps, integer *page);
+extern integer pspagk_(integer *ps);
+extern integer psrigy_(integer *ps, shortint *str);
+extern integer pssets_(integer *ps, real *left, real *right, real *top, real *bottom);
+extern integer pssett_(integer *ps, integer *font);
+extern integer pssety_(integer *ps, integer *justiy);
+extern integer psspft_(integer *ps, integer *font);
+extern integer pstese_(integer *ps, integer *nlines);
+extern integer pstr_(shortint *sppstg);
+extern integer pstrar_(integer *ps);
+extern integer pswrig_(integer *ps);
+extern integer pswrtk_(integer *ps, integer *curpos, shortint *str);
+extern integer psxpos_(integer *ps, integer *xpos);
+extern integer psym3_(real *u, real *v, real *w, integer *ichar, real *size, integer *idir, integer *itop, integer *iup);
+extern integer psypos_(integer *ps, integer *ypos);
+extern integer putcc_(integer *fd, shortint *ch);
+extern integer putci_(integer *fd, integer *ch);
+extern integer putlie_(integer *fd, shortint *linebf);
+extern integer pwrit_(real *px, real *py, char *ch, integer *nc, integer *is, integer *io, integer *ic, ftnlen ch_len);
+extern integer pwrity_(real *x, real *y, char *id, integer *n, integer *isize, integer *itheta, integer *icnt, ftnlen id_len);
+extern integer pwry_(real *x, real *y, integer *id, integer *n, real *size, real *theta, integer *icnt);
+extern integer pwrybd_(void);
+extern integer pwrygt_(char *kchar, char *jchar, integer *index, integer *nsize, integer *ipoint, ftnlen kchar_len, ftnlen jchar_len);
+extern integer pwryso_(char *jchar, integer *index, integer *nsize, ftnlen jchar_len);
+extern integer pwrz_(real *x, real *y, real *z__, integer *id, integer *n, integer *isize, integer *lin3, integer *itop, integer *icnt);
+extern integer pwrzgi_(char *kchar, char *jchar, integer *index, integer *nsize, integer *ipoint, ftnlen kchar_len, ftnlen jchar_len);
+extern integer pwrzgs_(char *kchar, char *jchar, integer *index, integer *nsize, integer *ipoint, ftnlen kchar_len, ftnlen jchar_len);
+extern integer pwrzgt_(char *kchar, char *jchar, integer *index, integer *nsize, integer *ipoint, ftnlen kchar_len, ftnlen jchar_len);
+extern integer pwrzi_(real *x, real *y, real *z__, char *id, integer *n, integer *isize, integer *lin3, integer *itop, integer *icnt, ftnlen id_len);
+extern integer pwrzoi_(char *jchar, integer *index, integer *nsize, ftnlen jchar_len);
+extern integer pwrzos_(char *jchar, integer *index, integer *nsize, ftnlen jchar_len);
+extern integer pwrzot_(char *jchar, integer *index, integer *nsize, ftnlen jchar_len);
+extern integer pwrzs_(real *x, real *y, real *z__, char *id, integer *n, integer *isize, integer *lin3, integer *itop, integer *icnt, ftnlen id_len);
+extern integer pwrzt_(real *x, real *y, real *z__, char *id, integer *n, integer *isize, integer *lin3, integer *itop, integer *icnt, ftnlen id_len);
+extern integer q8qst4_(char *name__, char *lbrary, char *entry__, char *vrsion, ftnlen name_len, ftnlen lbrary_len, ftnlen entry_len, ftnlen vrsion_len);
+extern integer qmscan_(integer *qm, shortint *fname, integer *flags);
+extern integer qmscao_(integer *qm, integer *fd, integer *flags);
+extern integer qmsetm_(integer *qm, shortint *param, shortint *valstr);
+extern integer qmsets_(integer *qm, integer *qp);
+extern integer qmupds_(integer *qm, integer *qp);
+extern integer qpaddb_(integer *qp, shortint *param, logical *value, shortint *commet);
+extern integer qpaddc_(integer *qp, shortint *param, shortint *value, shortint *commet);
+extern integer qpaddd_(integer *qp, shortint *param, doublereal *value, shortint *commet);
+extern integer qpaddf_(integer *qp, shortint *param, shortint *datate, integer *maxelm, shortint *commet, integer *flags);
+extern integer qpaddi_(integer *qp, shortint *param, integer *value, shortint *commet);
+extern integer qpaddl_(integer *qp, shortint *param, integer *value, shortint *commet);
+extern integer qpaddr_(integer *qp, shortint *param, real *value, shortint *commet);
+extern integer qpadds_(integer *qp, shortint *param, shortint *value, shortint *commet);
+extern integer qpaddx_(integer *qp, shortint *param, complex *value, shortint *commet);
+extern integer qpastr_(integer *qp, shortint *param, shortint *value, shortint *commet);
+extern integer qpbind_(integer *qp);
+extern integer qpcfnl_(integer *fl);
+extern integer qpcloe_(integer *qp);
+extern integer qpclot_(integer *gt);
+extern integer qpcopf_(integer *oqp, shortint *oparam, integer *nqp, shortint *nparam);
+extern integer qpcopy_(shortint *opoefe, shortint *npoefe);
+extern integer qpdele_(shortint *poefie);
+extern integer qpdelf_(integer *qp, shortint *param);
+extern integer qpdsym_(integer *qp, integer *out);
+extern integer qpexce_(integer *ex);
+extern integer qpexde_(integer *ex, integer *etlast, integer *offset, integer *dtype);
+extern integer qpexdg_(integer *ex, integer *out, integer *what);
+extern integer qpexfe_(integer *ex, integer *pbsave, integer *dbsave);
+extern integer qpexmk_(integer *ex, integer *pbsave, integer *dbsave);
+extern integer qpexpn_(integer *ex, integer *opcode, integer *arg1, integer *arg2, integer *arg3);
+extern integer qpfacs_(integer *kernel, shortint *root, shortint *extn, integer *acmode, integer *status);
+extern integer qpfcle_(integer *im, integer *status);
+extern integer qpfcos_(integer *im, integer *qp);
+extern integer qpfcoy_(integer *kernel, shortint *oldrot, shortint *oldexn, shortint *newrot, shortint *newexn, integer *status);
+extern integer qpfdee_(integer *kernel, shortint *root, shortint *extn, integer *status);
+extern integer qpflur_(integer *qp);
+extern integer qpfopn_(integer *kernel, integer *im, integer *oim, shortint *root, shortint *extn, shortint *ksectn, integer *clindx, integer *clsize, integer *acmode, integer *status);
+extern integer qpfopx_(integer *im, integer *status);
+extern integer qpfree_(integer *kernel, shortint *oldrot, shortint *oldexn, shortint *newrot, shortint *newexn, integer *status);
+extern integer qpfupr_(integer *im, integer *status);
+extern integer qpfwar_(integer *qpf, integer *im);
+extern integer qpfwfr_(integer *qpf, integer *im);
+extern integer qpfzcl_(integer *chan, integer *status);
+extern integer qpfzop_(shortint *pkfn, integer *mode, integer *status);
+extern integer qpfzrd_(integer *chan, shortint *obuf, integer *nbytes, integer *boffst);
+extern integer qpfzst_(integer *chan, integer *param, integer *value);
+extern integer qpfzwr_(integer *chan, shortint *ibuf, integer *nbytes, integer *boffst);
+extern integer qpfzwt_(integer *chan, integer *status);
+extern integer qpinht_(integer *nqp, integer *oqp, integer *out);
+extern integer qpioce_(integer *io);
+extern integer qpiolk_(integer *io, shortint *mask, integer *merge);
+extern integer qpiomx_(integer *io, shortint *key);
+extern integer qpiops_(integer *io, integer *iev, integer *nevens);
+extern integer qpiosc_(integer *io);
+extern integer qpiose_(integer *io, integer *vs, integer *ve, integer *ndim);
+extern integer qpiosi_(integer *io, integer *param, integer *value);
+extern integer qpiosr_(integer *io, shortint *expr);
+extern integer qpiour_(integer *io, integer *param, real *value);
+extern integer qpiowt_(integer *io, integer *evi);
+extern integer qpmkfe_(shortint *poefie, shortint *extn, shortint *fname, integer *maxch);
+extern integer qppare_(shortint *qpspec, shortint *root, integer *szroot, shortint *filter, integer *szfilr);
+extern integer qppcle_(integer *fd);
+extern integer qppstr_(integer *qp, shortint *param, shortint *strval);
+extern integer qpputb_(integer *qp, shortint *param, logical *value);
+extern integer qpputc_(integer *qp, shortint *param, shortint *value);
+extern integer qpputd_(integer *qp, shortint *param, doublereal *value);
+extern integer qpputi_(integer *qp, shortint *param, integer *value);
+extern integer qpputl_(integer *qp, shortint *param, integer *value);
+extern integer qpputr_(integer *qp, shortint *param, real *value);
+extern integer qpputs_(integer *qp, shortint *param, shortint *value);
+extern integer qpputx_(integer *qp, shortint *param, complex *value);
+extern integer qprebd_(shortint *poefie);
+extern integer qprene_(shortint *opoefe, shortint *npoefe);
+extern integer qprenf_(integer *qp, shortint *param, shortint *newnae);
+extern integer qpsavs_(integer *qp, integer *mw);
+extern integer qpseel_(integer *fl, integer *pos);
+extern integer qpseti_(integer *qp, integer *param, integer *value);
+extern integer qpsetr_(integer *qp, integer *param, real *value);
+extern integer qpsync_(integer *qp);
+extern integer qpungk_(integer *gt, shortint *tokbuf);
+extern integer qpwrie_(integer *qp, shortint *param, shortint *buf, integer *nelem, integer *first, shortint *datate);
+extern integer r2tr_(integer *int__, real *b0, real *b1);
+extern integer r2tx_(integer *nthpo, real *cr0, real *cr1, real *ci0, real *ci1);
+extern integer r4syn_(integer *int__, real *b0, real *b1, real *b2, real *b3);
+extern integer r4tr_(integer *int__, real *b0, real *b1, real *b2, real *b3);
+extern integer r4tx_(integer *nthpo, real *cr0, real *cr1, real *cr2, real *cr3, real *ci0, real *ci1, real *ci2, real *ci3);
+extern integer r8syn_(integer *int__, integer *nn, real *br0, real *br1, real *br2, real *br3, real *br4, real *br5, real *br6, real *br7, real *bi0, real *bi1, real *bi2, real *bi3, real *bi4, real *bi5, real *bi6, real *bi7);
+extern integer r8tr_(integer *int__, integer *nn, real *br0, real *br1, real *br2, real *br3, real *br4, real *br5, real *br6, real *br7, real *bi0, real *bi1, real *bi2, real *bi3, real *bi4, real *bi5, real *bi6, real *bi7);
+extern integer r8tx_(integer *nxtlt, integer *nthpo, integer *lengt, real *cr0, real *cr1, real *cr2, real *cr3, real *cr4, real *cr5, real *cr6, real *cr7, real *ci0, real *ci1, real *ci2, real *ci3, real *ci4, real *ci5, real *ci6, real *ci7);
+extern integer realft_(real *data, integer *n, integer *isign);
+extern integer reord_(real *cl, integer *ncl, real *c1, integer *mark, integer *nmg);
+extern integer reset_(void);
+extern integer resetn_(void);
+extern integer retsr_(integer *irold);
+extern integer rgadd_(integer *rg, shortint *rstr, integer *rmin, integer *rmax);
+extern integer rgbind_(integer *rg, integer *nbin, doublereal *in, integer *nin, doublereal *out, integer *nout);
+extern integer rgbinr_(integer *rg, integer *nbin, real *in, integer *nin, real *out, integer *nout);
+extern integer rgdump_(integer *rg);
+extern integer rgexcd_(integer *rg, doublereal *a, integer *nin, doublereal *b, integer *nout);
+extern integer rgexcr_(integer *rg, real *a, integer *nin, real *b, integer *nout);
+extern integer rgfree_(integer *rg);
+extern integer rggxmd_(integer *gp, shortint *rstr, doublereal *x, integer *npts, integer *pltype);
+extern integer rggxmr_(integer *gp, shortint *rstr, real *x, integer *npts, integer *pltype);
+extern integer rginds_(integer *rg, integer *indics, integer *npts, integer *type__);
+extern integer rginve_(integer *rg, integer *rmin, integer *rmax);
+extern integer rgmere_(integer *rg);
+extern integer rgordr_(integer *rg);
+extern integer rgpacd_(integer *rg, doublereal *a, doublereal *b);
+extern integer rgpacr_(integer *rg, real *a, real *b);
+extern integer rgunpd_(integer *rg, doublereal *packed, doublereal *unpacd);
+extern integer rgunpr_(integer *rg, real *packed, real *unpacd);
+extern integer rgwtbd_(integer *rg, integer *nbin, doublereal *in, doublereal *wtin, integer *nin, doublereal *out, doublereal *wtout, integer *nout);
+extern integer rgwtbr_(integer *rg, integer *nbin, real *in, real *wtin, integer *nin, real *out, real *wtout, integer *nout);
+extern integer rgxadd_(integer *rg, shortint *rstr, doublereal *rvals, integer *npts);
+extern integer rgxadr_(integer *rg, shortint *rstr, real *rvals, integer *npts);
+extern integer rmcloe_(integer *rm);
+extern integer rmdodi_(shortint *leaf, shortint *box, real *window, shortint *outlit, shortint *nrlist);
+extern integer rmdoui_(shortint *leaf, shortint *box, shortint *nrnew, shortint *outnet, real *in, real *window, shortint *outlit, shortint *nrlist);
+extern integer rmdowf_(shortint *leaf, shortint *box, real *window, shortint *outlit, shortint *nrlist);
+extern integer rmdump_(integer *rm, logical *unsord, logical *sorted, logical *in, logical *out);
+extern integer rmpack_(integer *rm, integer *datast);
+extern integer rmscle_(integer *rm);
+extern integer rmsdup_(integer *rm, logical *unsord, logical *sorted, logical *in, logical *out);
+extern integer rmsifp_(shortint *l, shortint *r__, real *window, shortint *outlit, shortint *nrlist);
+extern integer rmswap_(shortint *l, shortint *r__, real *window, shortint *outlit, shortint *nrlist);
+extern integer rmtcle_(integer *rm);
+extern integer rmtdup_(integer *rm, logical *unsord, logical *sorted, logical *in, logical *out);
+extern integer rmtort_(shortint *leaf, shortint *box, shortint *nrnew, shortint *outnet, real *in, real *window, shortint *outlit, shortint *nrlist);
+extern integer rmunpk_(integer *rm, integer *datast);
+extern integer rmuodi_(shortint *leaf, shortint *box, shortint *nrnew, shortint *outnet, real *in, real *window, shortint *outlit, shortint *nrlist);
+extern integer rmuoui_(shortint *leaf, shortint *box, real *window, shortint *outlit, shortint *nrlist);
+extern integer rmuptf_(shortint *leaf, shortint *box, real *window, shortint *outlit, shortint *nrlist);
+extern integer rngadd_(integer *rg, shortint *rstr, real *r1, real *r2, real *dr);
+extern integer rngcle_(integer *rg);
+extern integer rngerr_(integer *errnum, shortint *rstr, real *r1, real *r2, real *dr, integer *rg);
+extern integer salloc_(integer *outpur, integer *nelem, integer *datate);
+extern integer sbytes_(integer *bufout, integer *bufin, integer *index, integer *size, integer *skip, integer *count);
+extern integer scanc_(shortint *cval);
+extern integer set3_(real *xa, real *xb, real *ya, real *yb, real *ulo, real *uhi, real *vlo, real *vhi, real *wlo, real *whi, real *eye);
+extern integer set3d_(real *eye, real *ulo, real *uhi, real *vlo, real *vhi, real *wlo, real *whi);
+extern integer set_(real *vl, real *vr, real *vb, real *vt, real *wl, real *wr, real *wb, real *wt, integer *lf);
+extern integer seter_(char *messg, integer *nerr, integer *iopt, ftnlen messg_len);
+extern integer setfp_(integer *im, integer *fp);
+extern integer seti_(integer *ix, integer *iy);
+extern integer setr_(real *xmin, real *xmax, real *ymin, real *ymax, real *zmin, real *zmax, real *r0);
+extern integer setusv_(char *vn, integer *iv, ftnlen vn_len);
+extern integer sfree_(integer *oldsp);
+extern integer sgchdw_(integer *mx, integer *my);
+extern integer sgchfh_(void);
+extern integer sgchme_(integer *mx, integer *my);
+extern integer sgeprf_(integer *number, shortint *memory, integer *iop, integer *top, shortint *progrm, integer *pc);
+extern integer sgespc_(integer *tr, integer *gki, integer *fn, shortint *instrn, integer *bp, integer *buftop, integer *deletn);
+extern integer sgewsn_(integer *fn, shortint *instrn, real *x1, real *y1, real *x2, real *y2);
+extern integer sgfpor_(integer *fd);
+extern integer sgfttr_(integer *fd, shortint *buf, integer *maxch, integer *status);
+extern integer sgibcl_(shortint *m, integer *nx, integer *ny, integer *ax1, integer *ay1, integer *ax2, integer *ay2);
+extern integer sgical_(integer *dummy);
+extern integer sgicle_(void);
+extern integer sgiclr_(integer *dummy);
+extern integer sgicls_(shortint *devnae, integer *n);
+extern integer sgicor_(integer *index);
+extern integer sgidae_(integer *gout, shortint *p, integer *npts, integer *ltype);
+extern integer sgiese_(integer *fn, shortint *instrn, integer *nwords);
+extern integer sgifat_(shortint *gki);
+extern integer sgifia_(shortint *p, integer *npts);
+extern integer sgiflh_(integer *dummy);
+extern integer sgifot_(integer *font);
+extern integer sgigey_(integer *nx, integer *ny, integer *x1, integer *y1, integer *x2, integer *y2);
+extern integer sgiint_(integer *tty, shortint *devnae);
+extern integer sgilie_(integer *index);
+extern integer sgimcl_(shortint *m, integer *nx, integer *ny, integer *ax1, integer *ay1, integer *ax2, integer *ay2);
+extern integer sgiopn_(shortint *devnae, integer *dd);
+extern integer sgiops_(shortint *devnae, integer *n, integer *mode);
+extern integer sgiplt_(shortint *gki);
+extern integer sgipmt_(shortint *gki);
+extern integer sgipoe_(shortint *p, integer *npts);
+extern integer sgipor_(shortint *p, integer *npts);
+extern integer sgipuy_(shortint *m, integer *nx, integer *ny, integer *ax1, integer *ay1, integer *ax2, integer *ay2);
+extern integer sgiret_(void);
+extern integer sgitet_(integer *xc, integer *yc, shortint *text, integer *n);
+extern integer sgitxt_(shortint *gki);
+extern integer sgkcle_(integer *fd);
+extern integer sgkdrw_(integer *fd, integer *ax, integer *ay);
+extern integer sgkflh_(integer *fd);
+extern integer sgkfre_(integer *fd);
+extern integer sgklih_(integer *fd, integer *width);
+extern integer sgkmke_(shortint *root, integer *num, shortint *outstr, integer *maxch);
+extern integer sgkmoe_(integer *fd, integer *x, integer *y);
+extern integer sgkver_(integer *ax1, integer *ay1, integer *ax2, integer *ay2);
+extern integer sgmgeg_(shortint *gim);
+extern integer sgmiod_(shortint *gim);
+extern integer sgmioe_(shortint *gim);
+extern integer sgmout_(shortint *cap, shortint *gim, integer *nargs);
+extern integer sgmqur_(shortint *gim);
+extern integer sgmquy_(shortint *queryp, shortint *gim, integer *nargs, shortint *retvap, shortint *retval, integer *nout);
+extern integer sgmrep_(shortint *gim);
+extern integer sgmres_(shortint *gim);
+extern integer sgmwie_(integer *width, integer *height);
+extern integer sgmwrp_(shortint *gim);
+extern integer sgmwrs_(shortint *gim);
+extern integer simaxi_(integer *a, integer *na, real *x, integer *b, integer *nb);
+extern integer simaxr_(real *a, integer *na, real *x, real *b, integer *nb);
+extern integer simaxs_(shortint *a, integer *na, real *x, shortint *b, integer *nb);
+extern integer sisami_(integer *a, integer *b, real *x, integer *npix);
+extern integer sisamr_(real *a, real *b, real *x, integer *npix);
+extern integer sisams_(shortint *a, shortint *b, real *x, integer *npix);
+extern integer skcloe_(integer *coo);
+extern integer skctym_(integer *coo, integer *im);
+extern integer skenws_(integer *coo, shortint *wcsstr, integer *maxch);
+extern integer skequl_(integer *cooin, integer *cooout, doublereal *ilng, doublereal *ilat, doublereal *ipmlng, doublereal *ipmlat, doublereal *px, doublereal *rv, doublereal *olng, doublereal *olat);
+extern integer skiipt_(shortint *label, shortint *images, integer *mw, integer *coo);
+extern integer skiiwe_(integer *fd, shortint *label, shortint *images, integer *mw, integer *coo);
+extern integer skimpt_(shortint *label, shortint *images, integer *ctype, integer *lngax, integer *latax, integer *wtype, integer *ptype, integer *radecs, doublereal *equinx, doublereal *epoch);
+extern integer skimwe_(integer *fd, shortint *label, shortint *images, integer *ctype, integer *lngax, integer *latax, integer *wtype, integer *ptype, integer *radecs, doublereal *equinx, doublereal *epoch);
+extern integer skinpt_(shortint *label, shortint *system, integer *ctype, integer *radecs, doublereal *equinx, doublereal *epoch);
+extern integer skinwe_(integer *fd, shortint *label, shortint *system, integer *ctype, integer *radecs, doublereal *equinx, doublereal *epoch);
+extern integer sklltn_(integer *cooin, integer *cooout, doublereal *ilng, doublereal *ilat, doublereal *ipmlng, doublereal *ipmlat, doublereal *px, doublereal *rv, doublereal *olng, doublereal *olat);
+extern integer sksavm_(integer *coo, integer *mw, integer *im);
+extern integer sksetd_(integer *coo, integer *param, doublereal *value);
+extern integer skseti_(integer *coo, integer *param, integer *value);
+extern integer sksets_(integer *coo, integer *param, shortint *value);
+extern integer skstas_(integer *coo, integer *param, shortint *value, integer *maxch);
+extern integer skultn_(integer *cooin, integer *cooout, doublereal *ilng, doublereal *ilat, doublereal *olng, doublereal *olat, integer *npts);
+extern integer smark_(integer *oldsp);
+extern integer sprinf_(shortint *outstr, integer *maxch, shortint *formag);
+extern integer srfabd_(void);
+extern integer srface_(real *x, real *y, real *z__, integer *m, integer *mx, integer *nx, integer *ny, real *s, real *stereo);
+extern integer srfgk_(real *x, real *y, real *z__, integer *m, integer *mx, integer *nx, integer *ny, real *s, real *stereo);
+extern integer srftet_(void);
+extern integer sscan_(shortint *str);
+extern integer stcloe_(integer *stp);
+extern integer stcntr_(real *z__, integer *l, integer *m, integer *n, real *conv);
+extern integer stfacs_(integer *kernel, shortint *root, shortint *extn, integer *acmode, integer *status);
+extern integer stfadr_(integer *im, shortint *pname, integer *dtype, integer *plen, shortint *pval, integer *pno);
+extern integer stfcle_(integer *im, integer *status);
+extern integer stfcos_(integer *stf, integer *spool, integer *gpb, integer *user);
+extern integer stfcoy_(integer *kernel, shortint *oroot, shortint *oextn, shortint *nroot, shortint *nextn, integer *status);
+extern integer stfdee_(integer *kernel, shortint *root, shortint *extn, integer *status);
+extern integer stfgeb_(shortint *card, integer *bval);
+extern integer stfgei_(shortint *card, integer *ival);
+extern integer stfgen_(integer *im, integer *oim, integer *acmode, shortint *outstr, integer *maxch);
+extern integer stfges_(shortint *card, shortint *outstr, integer *maxch);
+extern integer stfget_(shortint *card, shortint *commet, integer *maxch);
+extern integer stfins_(integer *im);
+extern integer stfmeb_(integer *nim, integer *oim);
+extern integer stfmke_(shortint *hdrrot, shortint *hdrexn, shortint *pixfne, integer *maxch);
+extern integer stfnee_(integer *im);
+extern integer stfopn_(integer *kernel, integer *im, integer *oim, shortint *root, shortint *extn, shortint *ksectn, integer *grarg, integer *gcarg, integer *acmode, integer *status);
+extern integer stfopx_(integer *im, integer *status);
+extern integer stforb_(integer *ostf, integer *nstf);
+extern integer stfrdr_(integer *im, integer *group, integer *acmode);
+extern integer stfree_(integer *stp, integer *marker);
+extern integer stfrek_(integer *im);
+extern integer stfrfr_(integer *im, integer *fits, integer *fitsln);
+extern integer stfrgb_(integer *im, integer *group, integer *acmode, real *datamn, real *datamx);
+extern integer stfrne_(integer *kernel, shortint *oroot, shortint *oextn, shortint *nroot, shortint *nextn, integer *status);
+extern integer stfupr_(integer *im, integer *status);
+extern integer stfwfr_(integer *im);
+extern integer stfwgb_(integer *im, integer *group, real *datamn, real *datamx);
+extern integer stgcal_(integer *dummy);
+extern integer stgcle_(void);
+extern integer stgclr_(integer *dummy);
+extern integer stgcls_(shortint *devnae, integer *n);
+extern integer stgct1_(shortint *cap, integer *arg1);
+extern integer stgct2_(shortint *cap, integer *arg1, integer *arg2);
+extern integer stgct3_(shortint *cap, integer *arg1, integer *arg2, integer *arg3);
+extern integer stgctl_(shortint *cap);
+extern integer stgdes_(integer *flags);
+extern integer stgdrr_(shortint *ch, integer *x, integer *y, integer *xsize, integer *ysize, integer *orien, integer *font);
+extern integer stgdrw_(integer *x, integer *y);
+extern integer stgese_(integer *fn, shortint *instrn, integer *nwords);
+extern integer stgfat_(shortint *gki);
+extern integer stgfia_(shortint *p, integer *npts);
+extern integer stgflh_(integer *dummy);
+extern integer stggdb_(void);
+extern integer stggeb_(void);
+extern integer stgger_(integer *cursor);
+extern integer stggey_(integer *nx, integer *ny, integer *x1, integer *y1, integer *x2, integer *y2);
+extern integer stggrm_(integer *stream);
+extern integer stgint_(integer *tty, shortint *devnae);
+extern integer stglor_(integer *newcur);
+extern integer stgmoe_(integer *x, integer *y);
+extern integer stgonr_(integer *errcoe);
+extern integer stgont_(integer *vex, integer *nexthr);
+extern integer stgopn_(shortint *devnae, integer *dd, integer *in, integer *out, integer *xres, integer *yres, integer *hardcr);
+extern integer stgops_(shortint *devnae, integer *n, integer *mode);
+extern integer stgou2_(integer *fd, shortint *progrm, integer *arg1, integer *arg2);
+extern integer stgour_(shortint *cap, shortint *strval);
+extern integer stgplt_(shortint *gki);
+extern integer stgpmt_(shortint *gki);
+extern integer stgpoe_(shortint *p, integer *npts);
+extern integer stgpor_(shortint *p, integer *npts);
+extern integer stgpue_(integer *fd, shortint *text);
+extern integer stgpuy_(shortint *m, integer *nx, integer *ny, integer *ax1, integer *ay1, integer *ax2, integer *ay2);
+extern integer stgrdr_(integer *tty, integer *cursor, integer *outpuc, integer *cn, integer *key, integer *sx, integer *sy, integer *raster, integer *rx, integer *ry);
+extern integer stgren_(integer *xres, integer *yres);
+extern integer stgrer_(integer *cursor, integer *cn, integer *key, integer *sx, integer *sy, integer *raster, integer *rx, integer *ry);
+extern integer stgres_(integer *flags);
+extern integer stgret_(void);
+extern integer stgser_(integer *x, integer *y, integer *cursor);
+extern integer stgtet_(integer *xc, integer *yc, shortint *text, integer *n);
+extern integer stgtxt_(shortint *gki);
+extern integer stgtxy_(integer *qualiy);
+extern integer stgunn_(shortint *gki);
+extern integer stgwry_(integer *fd, shortint *text, integer *nchars);
+extern integer stinfo_(integer *stp, integer *fd, integer *verboe);
+extern integer stkmkg_(integer *curseg, integer *sp, integer *segmee);
+extern integer stline_(real *z__, integer *ll, integer *mm, integer *nn, real *conv);
+extern integer stmark_(integer *stp, integer *marker);
+extern integer strcle_(integer *fd);
+extern integer strdeb_(shortint *line, shortint *outlie, integer *maxch, integer *tabsie);
+extern integer strenb_(shortint *line, shortint *outlie, integer *maxch, integer *tabsie);
+extern integer strlwr_(shortint *a);
+extern integer strmln_(real *u, real *v, real *work, integer *imax, integer *iptsx, integer *jptsy, integer *nset, integer *ier);
+extern integer strsee_(integer *fd, integer *mode);
+extern integer strsrt_(integer *x, shortint *sb, integer *nstr);
+extern integer strtbl_(integer *fd, shortint *buf, integer *strp, integer *nstr, integer *firstl, integer *lastcl, integer *maxch, integer *ncol);
+extern integer strupr_(shortint *str);
+extern integer stsave_(integer *stp, integer *fd);
+extern integer stsque_(integer *stp);
+extern integer sttyco_(shortint *args, integer *ttin, integer *ttout, integer *outfd);
+extern integer sttyet_(shortint *envvar, shortint *value);
+extern integer sttynm_(integer *ttin, integer *ttout, shortint *termil);
+extern integer sttyse_(integer *ttin, integer *ttout, integer *tty);
+extern integer sttysm_(integer *ttin, integer *ttout, integer *fd, integer *all);
+extern integer sttytt_(integer *ttin, integer *ttout, shortint *termil);
+extern integer stxchs_(integer *tx, integer *ch, integer *cw, integer *hwsz, logical *hard, integer *orien);
+extern integer syserr_(integer *errcoe);
+extern integer sysers_(integer *errcoe, shortint *usersg);
+extern integer sysges_(shortint *fname);
+extern integer sysgsg_(shortint *args, integer *ip, shortint *outstr, integer *maxch);
+extern integer sysid_(shortint *outstr, integer *maxch);
+extern integer sysmte_(integer *savete);
+extern integer syspac_(integer *errcoe, shortint *errmsg);
+extern integer syspat_(shortint *args, integer *ip, logical *skip);
+extern integer syspte_(integer *fd, shortint *opstr, integer *savete);
+extern integer sysret_(shortint *args, integer *ip);
+extern integer syssct_(integer *cmdin, shortint *iargs);
+extern integer tautog_(integer *ierror);
+extern integer tautoh_(void);
+extern integer tcnqck_(integer *ierror);
+extern integer tcnsmt_(integer *ierror);
+extern integer tcnsup_(integer *ierror);
+extern integer tconan_(integer *ierror);
+extern integer tconaq_(integer *ierror);
+extern integer tconas_(integer *ierror);
+extern integer tconrc_(void);
+extern integer tconre_(integer *nplot, integer *ierror);
+extern integer tconrn_(void);
+extern integer tconrq_(void);
+extern integer tconrs_(void);
+extern integer tdashc_(integer *ierror);
+extern integer tdashh_(void);
+extern integer tdashl_(integer *ierror);
+extern integer tdashp_(integer *ierror);
+extern integer tdashr_(void);
+extern integer tdashs_(integer *ierror);
+extern integer thaftn_(void);
+extern integer thafto_(integer *ierror);
+extern integer threbd_(void);
+extern integer tick3_(integer *mag, integer *min__);
+extern integer tick43_(integer *magu, integer *minu, integer *magv, integer *minv, integer *magw, integer *minw);
+extern integer tick4_(integer *lmajx, integer *lminx, integer *lmajy, integer *lminy);
+extern integer ticks_(integer *lmaj, integer *lmin);
+extern integer tirafs_(void);
+extern integer tisohr_(integer *ierror);
+extern integer tisosf_(void);
+extern integer tisosr_(integer *nplot, integer *ierror);
+extern integer toldao_(void);
+extern integer tprzs_(void);
+extern integer tpwriy_(void);
+extern integer tpwry_(integer *ierror);
+extern integer tpwrzi_(integer *ierror);
+extern integer tpwrzs_(integer *ierror);
+extern integer tpwrzt_(integer *ierror);
+extern integer tr32_(real *x, real *y, integer *mx, integer *my);
+extern integer trn32i_(real *u, real *v, real *w, real *xt, real *yt, real *zt, integer *ient);
+extern integer trn32s_(real *x, real *y, real *z__, real *xt, real *yt, real *zt, integer *iflag);
+extern integer trn32t_(real *u, real *v, real *w, real *xt, real *yt, real *zt, integer *ient);
+extern integer tsleep_(integer *secons);
+extern integer tsrfac_(integer *nplot, integer *ierror);
+extern integer tsrftt_(void);
+extern integer tst3d2_(void);
+extern integer tstrml_(integer *ierror);
+extern integer tstrmn_(void);
+extern integer tsurfe_(void);
+extern integer tthre2_(void);
+extern integer tthred_(void);
+extern integer tthree_(integer *ierror);
+extern integer ttseti_(integer *fd, integer *param, integer *value);
+extern integer ttsets_(integer *fd, integer *param, shortint *svalue);
+extern integer ttybre_(integer *fd, integer *tty, integer *ostrie, integer *op, integer *sotype, logical *soseen);
+extern integer ttycds_(integer *tty);
+extern integer ttycle_(integer *tty);
+extern integer ttycln_(integer *fd, integer *tty);
+extern integer ttyclr_(integer *fd, integer *tty);
+extern integer ttydee_(shortint *device, shortint *ldevie, integer *maxch);
+extern integer ttydey_(integer *fd, integer *tty, integer *delay);
+extern integer ttyfey_(integer *fd, shortint *device, integer *tty);
+extern integer ttygoo_(integer *fd, integer *tty, integer *col, integer *line);
+extern integer ttygpe_(integer *fd, integer *tty, shortint *text, integer *mapcc);
+extern integer ttygse_(integer *in, integer *out, integer *tty, integer *width, integer *height);
+extern integer ttyins_(integer *tty, integer *tcapce, integer *tcapix, integer *ncaps);
+extern integer ttyint_(integer *fd, integer *tty);
+extern integer ttypue_(integer *fd, integer *tty, shortint *text, integer *mapcc);
+extern integer ttypus_(integer *fd, integer *tty, shortint *ctrlsr, integer *afflnt);
+extern integer ttysce_(integer *tty, shortint *termce, shortint *devnae);
+extern integer ttysei_(integer *tty, integer *paramr, integer *value);
+extern integer ttyso_(integer *fd, integer *tty, integer *onflag);
+extern integer ttywre_(integer *fd, integer *tty, shortint *ctrlsr, integer *nchars, integer *afflnt);
+extern integer tvelvc_(integer *nplot, integer *ierror);
+extern integer tvelvt_(void);
+extern integer twofft_(real *data1, real *data2, real *fft1, real *fft2, integer *n);
+extern integer uerrbd_(void);
+extern integer uliber_(integer *errcode, char *pkerrmsg, integer *msglen, ftnlen pkerrmsg_len);
+extern integer ungete_(integer *fd, shortint *str);
+extern integer ungeti_(integer *fd, integer *ch);
+extern integer unread_(integer *fd, shortint *buf, integer *nchars);
+extern integer utilbd_(void);
+extern integer vect3_(real *u, real *v, real *w);
+extern integer vectd_(real *x, real *y);
+extern integer vector_(real *px, real *py);
+extern integer veldat_(void);
+extern integer velvct_(real *u, integer *lu, real *v, integer *lv, integer *m, integer *n, real *flo, real *hi, integer *nset, integer *length, integer *ispv, real *spv);
+extern integer velvec_(real *u, integer *lu, real *v, integer *lv, integer *m, integer *n, real *flo, real *hi, integer *nset, integer *ispv, real *spv);
+extern integer vfncle_(integer *vfd, integer *update);
+extern integer vfnene_(shortint *vfn, integer *ip, shortint *root, integer *lenrot, shortint *extn, integer *lenexn);
+extern integer vfnexr_(shortint *vfn, shortint *outstr, integer *maxch);
+extern integer vfnman_(shortint *irafen, shortint *osextn, integer *maxch);
+extern integer vfnsqe_(shortint *root, shortint *outstr, integer *maxch);
+extern integer vfntre_(shortint *rawvfn, shortint *osdir, integer *lenosr, shortint *root, integer *lenrot, shortint *extn, integer *lenexn);
+extern integer vfnunn_(shortint *osextn, shortint *irafen, integer *maxch);
+extern integer vmallc_(integer *ubufp, integer *nelems, integer *dtype);
+extern integer vvfnee_(integer *ch, shortint *outbuf, integer *op, integer *maxch);
+extern integer vvfnip_(shortint *map, shortint *iraf, shortint *os, integer *nextn, integer *maxexn);
+extern integer vvfnis_(shortint *ex, shortint *extn, integer *maxexn, integer *nextn);
+extern integer vvfnre_(integer *vfd);
+extern integer wcslab_(integer *mw, real *logx1, real *logx2, real *logy1, real *logy2, integer *gp, shortint *title);
+extern integer wfaitd_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfaitt_(integer *fc, integer *dir);
+extern integer wfaitv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfarcd_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfarct_(integer *fc, integer *dir);
+extern integer wfarcv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfcard_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfcart_(integer *fc, integer *dir);
+extern integer wfcarv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfcscd_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfcsct_(integer *fc, integer *dir);
+extern integer wfcscv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfdecs_(integer *fc, integer *ira, integer *idec);
+extern integer wffnld_(shortint *name__, integer *flags, integer *init, integer *destry, integer *fwd, integer *inv);
+extern integer wfglsd_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfglst_(integer *fc, integer *dir);
+extern integer wfglsv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfgsbb_(doublereal *x, integer *order, doublereal *k1, doublereal *k2, doublereal *basis);
+extern integer wfgsbg_(doublereal *x, integer *order, doublereal *k1, doublereal *k2, doublereal *basis);
+extern integer wfgsbl_(doublereal *x, integer *order, doublereal *k1, doublereal *k2, doublereal *basis);
+extern integer wfgsce_(integer *sf);
+extern integer wfgscf_(integer *sf, doublereal *coeff, integer *ncoeff);
+extern integer wfgsre_(integer *sf, doublereal *fit);
+extern integer wfinit_(void);
+extern integer wfmerd_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfmert_(integer *fc, integer *dir);
+extern integer wfmerv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfmold_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfmolt_(integer *fc, integer *dir);
+extern integer wfmolv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfmspd_(integer *fc, doublereal *in, doublereal *out);
+extern integer wfmspf_(shortint *atval, integer *coeff, doublereal *xmin, doublereal *xmax);
+extern integer wfmspt_(integer *fc, integer *dir);
+extern integer wfmspv_(integer *fc, doublereal *in, doublereal *out);
+extern integer wfmspy_(integer *fc);
+extern integer wfpard_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfpart_(integer *fc, integer *dir);
+extern integer wfparv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfpcod_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfpcot_(integer *fc, integer *dir);
+extern integer wfpcov_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfqscd_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfqsct_(integer *fc, integer *dir);
+extern integer wfqscv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfsind_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfsint_(integer *fc, integer *dir);
+extern integer wfsinv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfsmpn_(integer *fc, doublereal *ax, doublereal *ay);
+extern integer wfsmpt_(integer *fc, integer *dir);
+extern integer wfstgd_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfstgt_(integer *fc, integer *dir);
+extern integer wfstgv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wftand_(integer *fc, doublereal *p, doublereal *w);
+extern integer wftant_(integer *fc, integer *dir);
+extern integer wftanv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wftnxd_(integer *fc, doublereal *p, doublereal *w);
+extern integer wftnxt_(integer *fc, integer *dir);
+extern integer wftnxv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wftnxy_(integer *fc);
+extern integer wftscd_(integer *fc, doublereal *p, doublereal *w);
+extern integer wftsct_(integer *fc, integer *dir);
+extern integer wftscv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfzead_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfzeat_(integer *fc, integer *dir);
+extern integer wfzeav_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfzpnd_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfzpnt_(integer *fc, integer *dir);
+extern integer wfzpnv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfzpny_(integer *fc);
+extern integer wfzpxd_(integer *fc, doublereal *p, doublereal *w);
+extern integer wfzpxt_(integer *fc, integer *dir);
+extern integer wfzpxv_(integer *fc, doublereal *w, doublereal *p);
+extern integer wfzpxy_(integer *fc);
+extern integer wlaxie_(doublereal *x0, doublereal *y0, doublereal *x1, doublereal *y1, doublereal *screey, doublereal *nx, doublereal *ny);
+extern integer wlcons_(doublereal *screey, doublereal *x, doublereal *y, integer *vectoe);
+extern integer wldece_(integer *mw, shortint *input, integer *axno);
+extern integer wldesy_(integer *wd);
+extern integer wldete_(integer *systee, doublereal *polepn, doublereal *screey, integer *graphe);
+extern integer wldms_(doublereal *arcrad, shortint *dms, shortint *units, integer *maxch, integer *precin, logical *all);
+extern integer wlgend_(doublereal *minimm, doublereal *maximm, doublereal *range, doublereal *lbegin, doublereal *lend, doublereal *interl);
+extern integer wlgete_(integer *mw, integer *systee, doublereal *logicr, doublereal *worldr, integer *flip);
+extern integer wlgetf_(doublereal *val1, doublereal *val2, doublereal *min__, doublereal *max__, doublereal *diff, logical *wrap);
+extern integer wlgetn_(integer *lwct, integer *flip, doublereal *polepn, doublereal *screey, doublereal *poleln, integer *badlae);
+extern integer wlgra1_(integer *wd, doublereal *x, doublereal *ymin, doublereal *ymax, integer *gridon, integer *label, real *tickse);
+extern integer wlgra2_(integer *wd, doublereal *y, doublereal *xmin, doublereal *xmax, integer *gridon, integer *label, real *tickse);
+extern integer wlgras_(integer *wd);
+extern integer wlgrid_(integer *wd);
+extern integer wlgris_(integer *wd);
+extern integer wlgrrs_(integer *wd);
+extern integer wlhms_(doublereal *rarad, shortint *hms, shortint *units, integer *maxch, integer *precin, logical *all);
+extern integer wlimdt_(integer *frame, integer *im, real *c1, real *c2, real *l1, real *l2, real *vl, real *vr, real *vb, real *vt);
+extern integer wlintg_(doublereal *value, integer *systee, integer *whichs, shortint *output);
+extern integer wll2wd_(integer *lwct, integer *flip, doublereal *lx, doublereal *ly, doublereal *wx, doublereal *wy, integer *npts);
+extern integer wllabe_(shortint *input, logical *flag__);
+extern integer wllabl_(integer *wd);
+extern integer wllabs_(integer *wd, integer *axis, integer *side, real *offset);
+extern integer wlmapt_(integer *gp, real *c1, real *c2, real *l1, real *l2, real *ux1, real *ux2, real *uy1, real *uy2, logical *fill);
+extern integer wlmark_(integer *gp, integer *wcs, real *tickse, integer *in, doublereal *x0, doublereal *y0, doublereal *x1, doublereal *y1, doublereal *sx, doublereal *sy, doublereal *tickx, doublereal *ticky);
+extern integer wlpoil_(integer *wd, doublereal *x1, doublereal *y1, doublereal *x2, doublereal *y2, integer *axis, doublereal *axisve, integer *gridon, integer *label, real *tickse);
+extern integer wlpoll_(integer *wd);
+extern integer wlpoln_(integer *wlct, integer *flip, doublereal *longie, logical *north, integer *systee, doublereal *polepn);
+extern integer wlputs_(logical *sidefs, shortint *output, integer *maxlen);
+extern integer wlrare_(doublereal *ra, integer *nvalus, doublereal *min__, doublereal *max__, doublereal *diff);
+extern integer wlrote_(real *x, real *y, integer *npts, real *angle, real *nx, real *ny);
+extern integer wlroua_(doublereal *longmn, doublereal *longmx, doublereal *longrn, integer *numtry, doublereal *minimm, doublereal *maximm, doublereal *majorl);
+extern integer wlrouc_(doublereal *latmin, doublereal *latmax, doublereal *latran, integer *numtry, doublereal *minimm, doublereal *maximm, doublereal *majorl);
+extern integer wlrous_(integer *wd, integer *axis, doublereal *minimm, doublereal *maximm, doublereal *range);
+extern integer wlsetp_(integer *wd);
+extern integer wlsidg_(integer *side, shortint *output, integer *maxlen);
+extern integer wlskya_(integer *wd, doublereal *ax1ary, integer *npoins, doublereal *polepn, logical *north, doublereal *ax1min, doublereal *ax1max, doublereal *ax1ran, doublereal *ax2min, doublereal *ax2max, doublereal *ax2ran);
+extern integer wltite_(integer *gp, shortint *title, integer *side, real *size, real *viewpt);
+extern integer wlw2ld_(integer *wlct, integer *flip, doublereal *wx, doublereal *wy, doublereal *lx, doublereal *ly, integer *npts);
+extern integer wlwcsb_(integer *wd);
+extern integer wlwcss_(integer *mw, real *logx1, real *logx2, real *logy1, real *logy2);
+extern integer wlwril_(integer *wd, doublereal *value, integer *side, real *x, real *y, doublereal *angle, integer *axis, integer *precin, logical *dofull, real *offset);
+extern integer wtstr_(real *px, real *py, char *ch, integer *is, integer *io, integer *ic, ftnlen ch_len);
+extern integer xcallc_(integer *ubufp, integer *buflen, integer *dtype);
+extern integer xdevss_(shortint *device, integer *out);
+extern integer xeract_(integer *errore, shortint *messae, integer *severy);
+extern integer xerfmg_(shortint *errmsg, shortint *outstr, integer *maxch);
+extern integer xerpsh_(void);
+extern integer xerpsr_(shortint *str);
+extern integer xerpuc_(shortint *ch);
+extern integer xerpue_(integer *fd, shortint *text);
+extern integer xerret_(void);
+extern integer xerror_(integer *errore, shortint *messae);
+extern integer xersel_(integer *errcoe);
+extern integer xervey_(void);
+extern integer xfatal_(integer *errore, shortint *messae);
+extern integer xfchdr_(shortint *newdir);
+extern integer xfcloe_(integer *fdarg);
+extern integer xfdele_(shortint *fname);
+extern integer xffluh_(integer *fd);
+extern integer xfputc_(integer *fd, shortint *ch);
+extern integer xfputr_(shortint *ch);
+extern integer xfrnam_(shortint *oldnae, shortint *newnae);
+extern integer xfseek_(integer *fd, integer *offset);
+extern integer xfungc_(integer *fd, shortint *ch);
+extern integer xfwrie_(integer *fd, shortint *buffer, integer *maxchs);
+extern integer xgtuid_(shortint *userne, integer *maxch);
+extern integer xmallc_(integer *ubufp, integer *nelems, integer *dtype);
+extern integer xmfree_(integer *ptr, integer *dtype);
+extern integer xmjbuf_(integer *bp);
+extern integer xmktep_(shortint *seed, shortint *tempfe, integer *maxchs);
+extern integer xmpl10_(void);
+extern integer xmpl11_(void);
+extern integer xonerr_(integer *status);
+extern integer xonext_(integer *exitce);
+extern integer xpages_(shortint *files, shortint *device, shortint *prompt, integer *firste, integer *clearn, integer *mapcc);
+extern integer xprinf_(shortint *formag);
+extern integer xqsort_(integer *x, integer *nelem, I_fp compae);
+extern integer xrealc_(integer *ubufp, integer *nelems, integer *dtype);
+extern integer xstdeh_(integer *excepn, integer *nexthr);
+extern integer xstrct_(shortint *str, shortint *outstr, integer *maxch);
+extern integer xstrcy_(shortint *s1, shortint *s2, integer *maxch);
+extern integer xt21id_(integer *im, integer *axis, integer *col1, integer *col2, integer *line1, integer *line2, integer *x, integer *y, integer *npts);
+extern integer xt21ig_(integer *im, integer *axis, integer *col1, integer *col2, integer *line1, integer *line2, integer *x, integer *y, integer *npts);
+extern integer xt21im_(integer *im, integer *axis, integer *col1, integer *col2, integer *line1, integer *line2, integer *x, integer *y, integer *npts);
+extern integer xtansr_(shortint *prompt, integer *answer);
+extern integer xtargs_(integer *stp, shortint *key, shortint *val, integer *maxchr);
+extern integer xtbace_(integer *ba);
+extern integer xtbagi_(integer *ba, integer *c__, integer *l, integer *data, integer *n);
+extern integer xtbags_(integer *ba, integer *c__, integer *l, shortint *data, integer *n);
+extern integer xtbapi_(integer *ba, integer *c__, integer *l, integer *data, integer *n);
+extern integer xtbaps_(integer *ba, integer *c__, integer *l, shortint *data, integer *n);
+extern integer xtclar_(shortint *paramr, integer *answer);
+extern integer xtcsub_(integer *co, integer *col1, integer *col2, integer *line1, integer *line2, integer *data);
+extern integer xtcsum_(integer *co, integer *col1, integer *col2, integer *line1, integer *line2, integer *data);
+extern integer xtdelp_(shortint *output, shortint *origil);
+extern integer xtextn_(integer *fd, shortint *fname, shortint *exttye, integer *indics, shortint *extnae, integer *extver, integer *lindex, integer *lname, integer *lver, shortint *ikpars, integer *err);
+extern integer xtfpfe_(integer *fp);
+extern integer xtfpsp_(integer *pm, integer *nc, integer *nl, integer *v, shortint *data, integer *lvalin, integer *cvalin, integer *lvalot, integer *cvalot);
+extern integer xtgets_(shortint *fname);
+extern integer xtgids_(shortint *str, shortint *dicstr, integer *ids, integer *maxids);
+extern integer xtimet_(shortint *image, shortint *ext, integer *maxchr);
+extern integer xtimrt_(shortint *image, shortint *root, integer *maxchr);
+extern integer xtloge_(integer *logfd, integer *nlogfd, shortint *prefix);
+extern integer xtlsub_(integer *im, integer *col1, integer *col2, integer *line1, integer *line2, integer *data);
+extern integer xtlsum_(integer *im, integer *col1, integer *col2, integer *line1, integer *line2, integer *data);
+extern integer xtmase_(shortint *fname, shortint *extnae, integer *mode, shortint *mname, integer *maxchr);
+extern integer xtmk1d_(shortint *image, shortint *secstr, integer *szfnae);
+extern integer xtmkic_(shortint *image, shortint *secstr, shortint *imagec, integer *szfnae);
+extern integer xtmkip_(shortint *input, shortint *output, shortint *origil, integer *szfnae);
+extern integer xtmksn_(shortint *image, shortint *secstr, shortint *sectin, integer *szsecn);
+extern integer xtpart_(shortint *args, integer *ip, logical *skip);
+extern integer xtphiy_(integer *im, shortint *str);
+extern integer xtsor2_(real *a1, real *a2, integer *npts);
+extern integer xtsor3_(real *a1, real *a2, real *a3, integer *npts);
+extern integer xtsor4_(real *a1, real *a2, real *a3, real *a4, integer *npts);
+extern integer xtsord_(doublereal *a1, doublereal *a2, doublereal *a3, integer *npts);
+extern integer xtstad_(doublereal *sample, integer *nsampe, real *frac, doublereal *mean, doublereal *sigma, doublereal *median, doublereal *mode);
+extern integer xtstai_(integer *sample, integer *nsampe, real *frac, real *mean, real *sigma, real *median, real *mode);
+extern integer xtstar_(real *sample, integer *nsampe, real *frac, real *mean, real *sigma, real *median, real *mode);
+extern integer xtstas_(shortint *sample, integer *nsampe, real *frac, real *mean, real *sigma, real *median, real *mode);
+extern integer xtstre_(shortint *str);
+extern integer xttxte_(integer *fd);
+extern integer xttyse_(integer *width, integer *height);
+extern integer xvvbip_(integer *opcode, integer *in1, integer *in2, integer *out);
+extern integer xvvbop_(integer *opcode, integer *in1, integer *in2, integer *out);
+extern integer xvvqut_(integer *cond, integer *in1, integer *in2, integer *out);
+extern integer xvvunp_(integer *opcode, integer *in, integer *out);
+extern integer xwhen_(integer *signal, integer *handlr, integer *oldhar);
+extern integer ytfpfe_(integer *fp);
+extern integer ytfpsp_(integer *pmin, integer *pm, integer *nc, integer *nl, integer *v, shortint *data, integer *lvalin, integer *cvalin, integer *lvalot, integer *cvalot);
+extern integer zardim_(integer *chan, shortint *buf, integer *nbytes, integer *offset);
+extern integer zardmt_(integer *mtchan, shortint *buf, integer *maxbys, integer *offset);
+extern integer zardnu_(integer *chan, shortint *buf, integer *maxbys, integer *loffst);
+extern integer zardps_(integer *ps, shortint *buf, integer *maxbys, integer *offset);
+extern integer zawrim_(integer *chan, shortint *buf, integer *nbytes, integer *offset);
+extern integer zawrmt_(integer *mtchan, shortint *buf, integer *nbytes, integer *offset);
+extern integer zawrnu_(integer *chan, shortint *buf, integer *nbytes, integer *loffst);
+extern integer zawrps_(integer *ps, shortint *buf, integer *nbytes, integer *offset);
+extern integer zawtim_(integer *chan, integer *nbytes);
+extern integer zawtmt_(integer *mtchan, integer *status);
+extern integer zawtnu_(integer *chan, integer *status);
+extern integer zawtps_(integer *ps, integer *status);
+extern integer zblkim_(integer *chan1, integer *chan2, integer *chan3, integer *chan4, integer *nframs, real *rate);
+extern integer zclrim_(integer *chan);
+extern integer zclsim_(integer *chan, integer *status);
+extern integer zclsmt_(integer *mtchan, integer *status);
+extern integer zclsnu_(integer *chan, integer *status);
+extern integer zclsps_(integer *chan, integer *status);
+extern integer zclstt_(integer *fd, integer *status);
+extern integer zerosc_(void);
+extern integer zersim_(integer *chan);
+extern integer zflsnu_(integer *chan, integer *status);
+extern integer zflstt_(integer *fd, integer *status);
+extern integer zfrmim_(integer *chan);
+extern integer zgetnu_(integer *chan, shortint *buf, integer *maxch, integer *status);
+extern integer zgettt_(integer *fd, shortint *buf, integer *maxch, integer *status);
+extern integer zlset_(real *z__, integer *mx, integer *nx, integer *ny, real *zl, integer *nlevl);
+extern integer zmapim_(integer *chan, shortint *maptye);
+extern integer zmtcim_(integer *chan1, integer *chan2);
+extern integer znotnu_(integer *chan, integer *loffst);
+extern integer znottt_(integer *fd, integer *offset);
+extern integer zopnim_(shortint *devino, integer *mode, integer *chan);
+extern integer zopnmt_(shortint *iodev, integer *acmode, integer *mtchan);
+extern integer zopnnu_(shortint *osfn, integer *mode, integer *chan);
+extern integer zopntt_(shortint *osfn, integer *mode, integer *chan);
+extern integer zputnu_(integer *chan, shortint *buf, integer *nchars, integer *status);
+extern integer zputtt_(integer *fd, shortint *buf, integer *nchars, integer *status);
+extern integer zrcrim_(integer *chan, integer *xcur, integer *ycur);
+extern integer zrgbim_(integer *redchn, integer *greenn, integer *bluecn);
+extern integer zrmim_(integer *chan, integer *zfactr);
+extern integer zscale_(integer *im, real *z1, real *z2, real *contrt, integer *optime, integer *lenste);
+extern integer zscfla_(real *data, real *flat, real *x, integer *npix, real *z0, real *dz);
+extern integer zsczls_(real *sample, integer *npix, real *contrt, real *z1, real *z2);
+extern integer zseknu_(integer *chan, integer *loffst, integer *status);
+extern integer zsektt_(integer *fd, integer *offset, integer *status);
+extern integer zsestt_(integer *fd, integer *param, shortint *svalue);
+extern integer zsettt_(integer *chan, integer *param, integer *value);
+extern integer zststt_(integer *fd, integer *param, shortint *outstr, integer *maxch, integer *nchars);
+extern integer zsttim_(integer *chan, integer *what, integer *lvalue);
+extern integer zsttmt_(integer *mtchan, integer *what, integer *lvalue);
+extern integer zsttnu_(integer *chan, integer *param, integer *lvalue);
+extern integer zsttps_(integer *ps, integer *what, integer *lvalue);
+extern integer zstttt_(integer *fd, integer *param, integer *lvalue);
+extern integer zttgeg_(integer *chan, shortint *obuf, integer *maxch, integer *nchars);
+extern integer zttloo_(integer *inflag, integer *outflg);
+extern integer zttlov_(integer *chan);
+extern integer zttpbf_(integer *errcoe);
+extern integer zttplk_(integer *flag__);
+extern integer zttpug_(integer *chan, shortint *dstr, integer *nchars);
+extern integer zttttt_(shortint *messae);
+extern integer zttupe_(shortint *in, shortint *out, integer *nchars);
+extern integer zwndi3_(integer *chan1, integer *chan2, integer *chan3);
+extern integer zwndim_(integer *chan);
+extern integer agfpbn_(real *fpdp);
+extern integer ahivi_(integer *a, integer *npix);
+extern integer ahivl_(integer *a, integer *npix);
+extern integer alovi_(integer *a, integer *npix);
+extern integer alovl_(integer *a, integer *npix);
+extern integer amedi_(integer *a, integer *npix);
+extern integer amedl_(integer *a, integer *npix);
+extern integer aravd_(doublereal *a, integer *npix, doublereal *mean, doublereal *sigma, doublereal *ksig);
+extern integer aravi_(integer *a, integer *npix, real *mean, real *sigma, real *ksig);
+extern integer aravl_(integer *a, integer *npix, doublereal *mean, doublereal *sigma, doublereal *ksig);
+extern integer aravr_(real *a, integer *npix, real *mean, real *sigma, real *ksig);
+extern integer aravs_(shortint *a, integer *npix, real *mean, real *sigma, real *ksig);
+extern integer aravx_(complex *a, integer *npix, real *mean, real *sigma, real *ksig);
+extern integer asoki_(integer *a, integer *npix, integer *ksel);
+extern integer asokl_(integer *a, integer *npix, integer *ksel);
+extern integer await_(integer *fd);
+extern integer awaitb_(integer *fd);
+extern integer awvgd_(doublereal *a, integer *npix, doublereal *mean, doublereal *sigma, doublereal *lcut, doublereal *hcut);
+extern integer awvgi_(integer *a, integer *npix, real *mean, real *sigma, real *lcut, real *hcut);
+extern integer awvgl_(integer *a, integer *npix, doublereal *mean, doublereal *sigma, doublereal *lcut, doublereal *hcut);
+extern integer awvgr_(real *a, integer *npix, real *mean, real *sigma, real *lcut, real *hcut);
+extern integer awvgs_(shortint *a, integer *npix, real *mean, real *sigma, real *lcut, real *hcut);
+extern integer awvgx_(complex *a, integer *npix, real *mean, real *sigma, real *lcut, real *hcut);
+extern integer begmem_(integer *bestse, integer *oldsie, integer *maxsie);
+extern integer btoi_(logical *boolee);
+extern integer cctoc_(shortint *str, integer *ip, shortint *cval);
+extern integer ccxset_(shortint *text, integer *n, shortint *out, integer *startt);
+extern integer clcfeh_(shortint *param, shortint *outstr, integer *maxch);
+extern integer clcfid_(shortint *param, shortint *outstr, integer *maxch);
+extern integer clgcur_(shortint *param, real *wx, real *wy, integer *wcs, integer *key, shortint *strval, integer *maxch);
+extern integer clgeti_(shortint *param);
+extern integer clgetl_(shortint *param);
+extern integer clgfil_(integer *list, shortint *fname, integer *maxch);
+extern integer clginp_(shortint *param);
+extern integer clgkey_(shortint *param, integer *key, shortint *strval, integer *maxch);
+extern integer clglpb_(shortint *param, logical *bval);
+extern integer clglpc_(shortint *param, shortint *cval);
+extern integer clglpd_(shortint *param, doublereal *dval);
+extern integer clglpi_(shortint *param, integer *ival);
+extern integer clglpl_(shortint *param, integer *lval);
+extern integer clglpr_(shortint *param, real *rval);
+extern integer clglps_(shortint *param, shortint *sval);
+extern integer clglpx_(shortint *param, complex *xval);
+extern integer clglsr_(shortint *param, shortint *outstr, integer *maxch);
+extern integer clgpsi_(integer *pp, shortint *parnae);
+extern integer clgpsl_(integer *pp, shortint *parnae);
+extern integer clgwrd_(shortint *param, shortint *keywod, integer *maxchr, shortint *dictiy);
+extern integer clktie_(integer *oldtie);
+extern integer clopst_(shortint *pset);
+extern integer clplen_(integer *list);
+extern integer clpopi_(shortint *param);
+extern integer clpops_(shortint *param);
+extern integer clpopu_(shortint *param);
+extern integer clpsee_(integer *pp, shortint *parnae);
+extern integer clpsit_(shortint *cmd, integer *arg1, integer *arg2);
+extern integer clscan_(shortint *param);
+extern integer clstai_(integer *paramr);
+extern integer coerce_(integer *ptr, integer *type1, integer *type2);
+extern integer cogetr_(integer *co, integer *col, integer *line1, integer *line2);
+extern integer comap_(integer *im, integer *maxbuf);
+extern integer conxch_(real *x, real *y, integer *i1, integer *i2, integer *i3, integer *i4);
+extern integer cputie_(integer *oldcpe);
+extern integer cqccry_(integer *cq);
+extern integer cqdgei_(integer *cq, integer *record, shortint *field);
+extern integer cqdscn_(integer *cq);
+extern integer cqdtye_(shortint *c__);
+extern integer cqfgad_(integer *cq, shortint *field, doublereal *array, integer *maxlen);
+extern integer cqfgai_(integer *cq, shortint *field, integer *array, integer *maxlen);
+extern integer cqfgar_(integer *cq, shortint *field, real *array, integer *maxlen);
+extern integer cqfgei_(integer *cq, shortint *field);
+extern integer cqfgtt_(integer *cq, shortint *field, shortint *str, integer *maxch);
+extern integer cqfimy_(integer *cq, shortint *imname);
+extern integer cqfinn_(integer *res, integer *fieldo, shortint *fname, integer *szfnae, integer *foffst, integer *fsize, integer *ftype, shortint *units, integer *szunis, shortint *fmts, integer *szfmts);
+extern integer cqfino_(integer *res, shortint *field, integer *foffst, integer *fsize, integer *ftype, shortint *units, integer *szunis, shortint *fmts, integer *szfmts);
+extern integer cqfirt_(integer *cq);
+extern integer cqfnae_(integer *res, integer *fieldo, shortint *fname, integer *szfnae);
+extern integer cqfnur_(integer *res, shortint *field);
+extern integer cqfoft_(integer *res, shortint *field);
+extern integer cqfquy_(integer *cq, shortint *catfie, shortint *catfmt);
+extern integer cqfrit_(integer *cq, shortint *catfmt);
+extern integer cqfsie_(integer *res, shortint *field);
+extern integer cqftye_(integer *res, shortint *field);
+extern integer cqgnrd_(integer *res, shortint *buf, integer *maxch, integer *recptr);
+extern integer cqgqpn_(integer *cq, integer *parno, shortint *pname, integer *maxnae, shortint *value, integer *maxval, shortint *units, integer *maxuns, shortint *format, integer *maxfot);
+extern integer cqgqpr_(integer *cq, shortint *name__, shortint *pname, integer *maxnae, shortint *value, integer *maxval, shortint *units, integer *maxuns, shortint *format, integer *maxfot);
+extern integer cqgred_(integer *res, shortint *buf, integer *maxch, integer *recptr);
+extern integer cqgvac_(integer *res, integer *recptr, shortint *field, shortint *str, integer *maxch);
+extern integer cqgvad_(integer *res, integer *recptr, shortint *field, doublereal *dval);
+extern integer cqgvai_(integer *res, integer *recptr, shortint *field, integer *ival);
+extern integer cqgval_(integer *res, integer *recptr, shortint *field, integer *lval);
+extern integer cqgvar_(integer *res, integer *recptr, shortint *field, real *rval);
+extern integer cqgvas_(integer *res, integer *recptr, shortint *field, shortint *sval);
+extern integer cqhinn_(integer *res, integer *kwno, shortint *hkname, integer *szhkne, shortint *hkvale, integer *szhkve);
+extern integer cqhino_(integer *res, shortint *hkname, shortint *hkvale, integer *szhkve);
+extern integer cqimqy_(integer *cq, shortint *imname);
+extern integer cqirit_(integer *cq);
+extern integer cqisti_(integer *res, integer *param);
+extern integer cqistt_(integer *res, integer *param, shortint *str, integer *maxch);
+extern integer cqkinn_(integer *res, integer *fieldo, shortint *kfield, integer *szkfid, shortint *ikname, integer *szikne, shortint *ikvale, integer *szikve, integer *iktype, shortint *ikunis, integer *szikus);
+extern integer cqkino_(integer *res, shortint *kfield, shortint *ikname, integer *szikne, shortint *ikvale, integer *szikve, integer *iktype, shortint *ikunis, integer *szikus);
+extern integer cqloce_(integer *cq, shortint *name__);
+extern integer cqlocn_(integer *cq, integer *catno, shortint *name__, integer *maxch);
+extern integer cqmap_(shortint *databe, integer *mode);
+extern integer cqnqps_(integer *cq);
+extern integer cqquey_(integer *cq);
+extern integer cqrint_(integer *cq);
+extern integer cqrsti_(integer *res, integer *param);
+extern integer cqrstt_(integer *res, integer *param, shortint *str, integer *maxch);
+extern integer cqscan_(integer *cq);
+extern integer cqsetd_(integer *res, integer *recptr);
+extern integer cqsetn_(integer *cq, integer *catno);
+extern integer cqsett_(integer *cq, shortint *name__);
+extern integer cqsqpn_(integer *cq, integer *parno, shortint *valuer);
+extern integer cqsqpr_(integer *cq, shortint *name__, shortint *valuer);
+extern integer cqstai_(integer *cq, integer *param);
+extern integer cqstat_(integer *cq, integer *param, shortint *str, integer *maxch);
+extern integer cqwinn_(integer *res, integer *fieldo, shortint *wfield, integer *szwfid, shortint *wkname, integer *szwkne, shortint *wkvale, integer *szwkve, integer *wktype, shortint *wkunis, integer *szwkus);
+extern integer cqwino_(integer *res, shortint *wfield, shortint *wkname, integer *szwkne, shortint *wkvale, integer *szwkve, integer *wktype, shortint *wkunis, integer *szwkus);
+extern integer cqwrdr_(integer *index, shortint *outstr, integer *maxch, shortint *dict);
+extern integer ctocc_(shortint *ch, shortint *outstr, integer *maxch);
+extern integer ctod_(shortint *str, integer *ip, doublereal *dval);
+extern integer ctoi_(shortint *str, integer *ip, integer *ival);
+extern integer ctol_(shortint *str, integer *ip, integer *lval);
+extern integer ctor_(shortint *str, integer *ip, real *rval);
+extern integer ctotok_(shortint *str, integer *ip, shortint *outstr, integer *maxch);
+extern integer ctowrd_(shortint *str, integer *ip, shortint *outstr, integer *maxch);
+extern integer ctox_(shortint *str, integer *ip, complex *xval);
+extern integer decods_(shortint *rangeg, integer *ranges, integer *maxras, integer *nvalus);
+extern integer diropn_(shortint *fname, integer *mode);
+extern integer dsmap_(integer *frame, integer *mode, integer *color, integer *chan);
+extern integer dspmmp_(shortint *pmname, integer *refim);
+extern integer dsuluc_(shortint *fname, real *z1, real *z2);
+extern integer dtgeti_(integer *dt, integer *record, shortint *field);
+extern integer dtloce_(integer *dt, shortint *name__);
+extern integer dtmap1_(shortint *databe, shortint *key, integer *mode);
+extern integer dtmap_(shortint *databe, integer *mode);
+extern integer dtmdee_(shortint *datesr, integer *year, integer *month, integer *day, doublereal *time, integer *flags);
+extern integer dtmdes_(shortint *datesr, integer *year, integer *month, integer *day, integer *hours, integer *minuts, doublereal *secons, integer *flags);
+extern integer dtmene_(shortint *datesr, integer *maxch, integer *year, integer *month, integer *day, doublereal *time, integer *precin, integer *flags);
+extern integer dtmens_(shortint *datesr, integer *maxch, integer *year, integer *month, integer *day, integer *hours, integer *minuts, doublereal *secons, integer *precin, integer *flags);
+extern integer dtmlte_(shortint *datesr, integer *ltime);
+extern integer dtoc3_(doublereal *val, shortint *out, integer *maxch, integer *decpl, integer *afmt, integer *width);
+extern integer dtoc_(doublereal *dval, shortint *outstr, integer *maxch, integer *decpl, integer *afmt, integer *width);
+extern integer dtscan_(integer *dt);
+extern integer envfid_(shortint *key, shortint *value, integer *maxch);
+extern integer envfit_(integer *valp);
+extern integer envfre_(integer *oldtop, integer *userfn);
+extern integer envgei_(shortint *varnae);
+extern integer envges_(shortint *key, shortint *value, integer *maxch);
+extern integer envnet_(integer *lastel, integer *valp, integer *showrs);
+extern integer envpus_(shortint *key, shortint *value);
+extern integer envscn_(shortint *cmd);
+extern integer errcoe_(void);
+extern integer errget_(shortint *outstr, integer *maxch);
+extern integer evexpr_(shortint *expr, integer *getopa, integer *ufcnea);
+extern integer evvexr_(shortint *expr, integer *getop, integer *getopa, integer *ufcn, integer *ufcnda, integer *flags);
+extern integer extrea_(real *x, real *y, real *curvae, integer *npts, real *dx);
+extern integer fdevbk_(shortint *path);
+extern integer ffault_(integer *fd, integer *fileot, integer *nresee, integer *rwflag);
+extern integer ffilsz_(integer *fd);
+extern integer fgdev0_(integer *ffp, integer *what);
+extern integer fgetfd_(shortint *filene, integer *mode, integer *type__);
+/*extern integer filbuf_(integer *fd);*/
+extern integer finfo_(shortint *fname, integer *ostrut);
+extern integer fmaccs_(shortint *dfname, integer *mode);
+extern integer fmfinf_(integer *fc, integer *lfile);
+extern integer fmfopn_(integer *fm, integer *lfile, integer *mode, integer *type__);
+extern integer fmgetd_(integer *fm, integer *lfile, integer *mode, integer *type__);
+extern integer fmioed_(integer *fm, integer *lfile, integer *npages);
+extern integer fmlfpe_(shortint *lfname, integer *fm, integer *lfile, integer *type__);
+extern integer fmlfst_(integer *fm, integer *lfile, integer *statbf);
+extern integer fmnexe_(integer *fm);
+extern integer fmopen_(shortint *fname, integer *mode);
+extern integer fmstai_(integer *fm, integer *param);
+extern integer fnextn_(shortint *vfn, shortint *outstr, integer *maxch);
+extern integer fnldir_(shortint *vfn, shortint *outstr, integer *maxch);
+extern integer fnroot_(shortint *vfn, shortint *outstr, integer *maxch);
+extern integer fntedt_(shortint *in, shortint *out, integer *editp, integer *nedit, shortint *patbuf);
+extern integer fntget_(shortint *temple, integer *ix, integer *patp, integer *npat, integer *sbuf, integer *maxch);
+extern integer fntgfb_(integer *list, shortint *fname, integer *maxch);
+extern integer fntgfn_(integer *pp, shortint *outstr, integer *maxch);
+extern integer fntleb_(integer *list);
+extern integer fntopb_(shortint *temple, integer *sort);
+extern integer fntopn_(shortint *temple);
+extern integer fntopt_(shortint *str, shortint *patstr, integer *maxch, shortint *fname, shortint *ldir, integer *ftype);
+extern integer fntree_(integer *pp, shortint *outstr, integer *maxch, integer *token);
+extern integer fntrfb_(integer *list, integer *index, shortint *fname, integer *maxch);
+extern integer fprfmt_(integer *ival);
+extern integer freadp_(integer *fd, integer *offset, integer *nchars);
+extern integer fsetfd_(integer *fd, shortint *filene, integer *mode, integer *type__);
+extern integer fsfopn_(shortint *fname, integer *mode);
+extern integer fstati_(integer *fd, integer *what);
+extern integer fstatl_(integer *fd, integer *what);
+extern integer fstdfe_(shortint *fname, integer *ofd);
+extern integer futime_(shortint *fname, integer *atime, integer *mtime);
+extern integer fwritp_(integer *fd, integer *offset, integer *nchars);
+extern integer fxfchv_(integer *im, integer *group);
+extern integer fxfcte_(shortint *card, integer *kwindx);
+extern integer fxfexr_(integer *fit, integer *ig, integer *extn, integer *extv);
+extern integer fxfhdt_(integer *group, integer *fit, integer *pfd, integer *acmode);
+extern integer fxfhee_(integer *im);
+extern integer fxfksx_(shortint *outstr);
+extern integer fxfred_(integer *fd, shortint *ibuf, shortint *obuf, integer *ncards);
+extern integer fxfstr_(shortint *s1, shortint *s2);
+extern integer fxftox_(integer *im);
+extern integer fxfuad_(integer *fit, integer *im, integer *up, shortint *card);
+extern integer fxfxal_(integer *hd, integer *ncua, integer *nlines);
+extern integer gctod_(shortint *str, integer *ip, doublereal *odval);
+extern integer gctol_(shortint *str, integer *ip, integer *lval, integer *radix);
+extern integer gctox_(shortint *str, integer *ip, complex *oxval);
+extern integer getci_(integer *fd, integer *ch);
+extern integer getdae_(shortint *ch);
+extern integer getlie_(integer *fd, shortint *linebf);
+extern integer getlle_(integer *fd, shortint *obuf, integer *maxch);
+extern integer getloe_(integer *fd, shortint *obuf, integer *maxch, integer *linenm);
+extern integer getner_(integer *ranges, integer *number);
+extern integer getprr_(integer *ranges, integer *number);
+extern integer ggcur_(integer *gp, integer *cn, integer *key, real *sx, real *sy, integer *raster, real *rx, real *ry);
+extern integer ggeti_(integer *gp, shortint *cap);
+extern integer ggets_(integer *gp, shortint *cap, shortint *outstr, integer *maxch);
+extern integer gimgeg_(integer *gp, integer *mappig, integer *rop, integer *src, integer *st, integer *sx, integer *sy, integer *sw, integer *sh, integer *dst, integer *dt, integer *dx, integer *dy, integer *dw, integer *dh);
+extern integer gimqur_(integer *gp, integer *raster, integer *type__, integer *width, integer *height, integer *depth);
+extern integer gimrep_(integer *gp, integer *colorp, integer *first, integer *maxelm, integer *r__, integer *g, integer *b);
+extern integer gkifen_(integer *fd, integer *instrn);
+extern integer glbgek_(integer *gp, integer *ax, real *x, real *y, integer *majork);
+extern integer gltoc_(integer *lval, shortint *outstr, integer *maxch, integer *base);
+extern integer gmttot_(integer *gmt);
+extern integer gopen_(shortint *device, integer *mode, integer *fd);
+extern integer gopeni_(shortint *device, integer *mode, shortint *uifnae, integer *fd);
+extern integer gpatme_(shortint *patstr, integer *from, integer *delim, shortint *patbuf, integer *szpat);
+extern integer gpatmh_(shortint *str, shortint *pat, integer *firstr, integer *lastcr);
+extern integer gptfit_(shortint *gki, integer *ip, integer *lastip);
+extern integer gqvery_(void);
+extern integer grcbol_(shortint *opstr, integer *ip);
+extern integer grccod_(integer *rc, integer *stream, real *sx, real *sy, integer *raster, real *rx, real *ry, shortint *opstr);
+extern integer grccur_(integer *rc, integer *stream, integer *key, real *x, real *y, integer *raster, real *rx, real *ry, integer *ppos);
+extern integer grcmay_(integer *rc, integer *key, integer *nukey);
+extern integer grcopn_(shortint *device, integer *mode, integer *stream, integer *rc);
+extern integer grcrey_(integer *stream, shortint *prompt, shortint *obuf, integer *maxch);
+extern integer grcses_(integer *tr, integer *raster, real *mx, real *my);
+extern integer grdwcs_(shortint *devnae, integer *wcs, integer *lenwcs);
+extern integer gstati_(integer *gp, integer *param);
+extern integer gstats_(integer *gp, integer *param, shortint *outstr, integer *maxch);
+extern integer gstrct_(shortint *str, shortint *outstr, integer *maxch);
+extern integer gstrcy_(shortint *s1, shortint *s2, integer *maxch);
+extern integer gstrdb_(shortint *line, shortint *outlie, integer *maxch, integer *tabs);
+extern integer gstreb_(shortint *line, shortint *outlie, integer *maxch, integer *tabs);
+extern integer gstrmh_(shortint *str, shortint *pat, integer *firstr, integer *lastcr);
+extern integer gtgcu1_(integer *gt, shortint *cur, real *wx, real *wy, integer *wcs, integer *key, shortint *cmd, integer *szcmd);
+extern integer gtgcur_(shortint *cur, real *wx, real *wy, integer *wcs, integer *key, shortint *cmd, integer *szcmd);
+extern integer gtgeti_(integer *gt, integer *param);
+extern integer gtini1_(integer *gp);
+extern integer gtinit_(void);
+extern integer gtndis_(real *x1, real *x2, real *step);
+extern integer gtrcle_(integer *p1, integer *p2, integer *npts, integer *index, real *s, real *ref);
+extern integer gtrcot_(shortint *kernfe, shortint *taskne, shortint *devnae, integer *stream, integer *in, integer *out);
+extern integer gtrfen_(integer *tr, integer *gki);
+extern integer gtrgty_(integer *stream);
+extern integer gtrint_(integer *stream);
+extern integer gtrpop_(shortint *pv, integer *npts, integer *x1, integer *x2, integer *y1, integer *y2);
+extern integer gtrrer_(integer *fd, integer *key, real *sx, real *sy, integer *raster, real *rx, real *ry);
+extern integer gtrwrp_(integer *fd, integer *nchars);
+extern integer gttyld_(shortint *fname, shortint *device, shortint *outstr, integer *maxch);
+extern integer gtybih_(integer *capcoe, integer *tcapce, integer *ncaps);
+extern integer gtycas_(integer *gty);
+extern integer gtyeny_(shortint *cap);
+extern integer gtyexs_(shortint *str, integer *ip, shortint *outstr, integer *maxch);
+extern integer gtyfiy_(integer *tty, shortint *cap, integer *ip);
+extern integer gtygei_(integer *tty, shortint *cap);
+extern integer gtyges_(integer *tty, shortint *cap, shortint *outstr, integer *maxch);
+extern integer gtyopn_(shortint *termce, shortint *device, shortint *ufiels);
+extern integer i8sav_(integer *isw, integer *ivalue, logical *set);
+extern integer iand_(integer *a, integer *b);
+extern integer idbfid_(integer *im, shortint *key, integer *rp);
+extern integer idbfir_(shortint *s1, shortint *s2, integer *maxch);
+extern integer idbgeg_(integer *im, shortint *key, shortint *outstr, integer *maxch);
+extern integer idbkwp_(shortint *key);
+extern integer idbned_(integer *idb, integer *recptr);
+extern integer idbopn_(integer *im, integer *ualen);
+extern integer idbpug_(integer *im, shortint *key, shortint *strval);
+extern integer idkopn_(integer *aframe, integer *acolor, integer *tty);
+extern integer iisflu_(integer *chan);
+extern integer ikiacs_(shortint *image, shortint *root, shortint *extn, integer *acmode);
+extern integer ikiext_(shortint *envime, shortint *defime, shortint *envimn, shortint *defimn);
+extern integer ikiged_(integer *ip, shortint *outstr, integer *maxch, integer *delim);
+extern integer ikigen_(integer *kernel, integer *index, shortint *extn, integer *maxch);
+extern integer ikiger_(shortint *param);
+extern integer ikivan_(integer *kernel, shortint *extn);
+extern integer imaccf_(integer *im, shortint *key);
+extern integer imaccs_(shortint *image, integer *acmode);
+extern integer imcssz_(integer *im, integer *vs, integer *ve, integer *ndim, integer *dtype, integer *npix, integer *rwflag);
+extern integer imdgcr_(shortint *param, real *wx, real *wy, integer *wcs, integer *key, shortint *strval, integer *maxch);
+extern integer imdges_(integer *frame, integer *server, shortint *image, integer *szimae, shortint *title, integer *sztite, real *a, real *b, real *c__, real *d__, real *tx, real *ty);
+extern integer imdgsg_(shortint *cap);
+extern integer imdma1_(integer *frame, integer *mode, integer *selece, integer *erase);
+extern integer imdmae_(integer *frame, integer *mode, integer *selece);
+extern integer imdmap_(shortint *device, integer *accese, I_fp imdopn);
+extern integer imdopn_(shortint *fname, integer *accese);
+extern integer imdqup_(integer *wcs, shortint *reg, real *sx, real *sy, integer *snx, integer *sny, integer *dx, integer *dy, integer *dnx, integer *dny, shortint *objref);
+extern integer imdrcr_(shortint *device, real *x, real *y, integer *wcs, integer *key, shortint *strval, integer *maxch, integer *inwcs, integer *pause);
+extern integer imdwcr_(void);
+extern integer imgeti_(integer *im, shortint *key);
+extern integer imgetl_(integer *im, shortint *key);
+extern integer imgfte_(integer *im, shortint *key);
+extern integer imggsc_(integer *im, integer *vs, integer *ve, integer *ndim, integer *dtype, integer *totpix);
+extern integer imggsd_(integer *imdes, integer *vs, integer *ve, integer *ndim);
+extern integer imggsi_(integer *imdes, integer *vs, integer *ve, integer *ndim);
+extern integer imggsl_(integer *imdes, integer *vs, integer *ve, integer *ndim);
+extern integer imggsr_(integer *imdes, integer *vs, integer *ve, integer *ndim);
+extern integer imggss_(integer *imdes, integer *vs, integer *ve, integer *ndim);
+extern integer imggsx_(integer *imdes, integer *vs, integer *ve, integer *ndim);
+extern integer imgibf_(integer *im, integer *vs, integer *ve, integer *ndim, integer *dtype);
+extern integer imgl1d_(integer *im);
+extern integer imgl1i_(integer *im);
+extern integer imgl1l_(integer *im);
+extern integer imgl1r_(integer *im);
+extern integer imgl1s_(integer *im);
+extern integer imgl1x_(integer *im);
+extern integer imgl2d_(integer *im, integer *linenm);
+extern integer imgl2i_(integer *im, integer *linenm);
+extern integer imgl2l_(integer *im, integer *linenm);
+extern integer imgl2r_(integer *im, integer *linenm);
+extern integer imgl2s_(integer *im, integer *linenm);
+extern integer imgl2x_(integer *im, integer *linenm);
+extern integer imgl3d_(integer *im, integer *line, integer *band);
+extern integer imgl3i_(integer *im, integer *line, integer *band);
+extern integer imgl3l_(integer *im, integer *line, integer *band);
+extern integer imgl3r_(integer *im, integer *line, integer *band);
+extern integer imgl3s_(integer *im, integer *line, integer *band);
+extern integer imgl3x_(integer *im, integer *line, integer *band);
+extern integer imgnfn_(integer *fn, shortint *outstr, integer *maxch);
+extern integer imgnld_(integer *imdes, integer *linepr, integer *v);
+extern integer imgnli_(integer *imdes, integer *linepr, integer *v);
+extern integer imgnll_(integer *imdes, integer *linepr, integer *v);
+extern integer imgnln_(integer *im, integer *linepr, integer *v, integer *dtype);
+extern integer imgnlr_(integer *imdes, integer *linepr, integer *v);
+extern integer imgnls_(integer *imdes, integer *linepr, integer *v);
+extern integer imgnlx_(integer *imdes, integer *linepr, integer *v);
+extern integer imgobf_(integer *im, integer *vs, integer *ve, integer *ndim, integer *dtype);
+extern integer imgs1d_(integer *im, integer *x1, integer *x2);
+extern integer imgs1i_(integer *im, integer *x1, integer *x2);
+extern integer imgs1l_(integer *im, integer *x1, integer *x2);
+extern integer imgs1r_(integer *im, integer *x1, integer *x2);
+extern integer imgs1s_(integer *im, integer *x1, integer *x2);
+extern integer imgs1x_(integer *im, integer *x1, integer *x2);
+extern integer imgs2d_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2);
+extern integer imgs2i_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2);
+extern integer imgs2l_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2);
+extern integer imgs2r_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2);
+extern integer imgs2s_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2);
+extern integer imgs2x_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2);
+extern integer imgs3d_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2, integer *z1, integer *z2);
+extern integer imgs3i_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2, integer *z1, integer *z2);
+extern integer imgs3l_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2, integer *z1, integer *z2);
+extern integer imgs3r_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2, integer *z1, integer *z2);
+extern integer imgs3s_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2, integer *z1, integer *z2);
+extern integer imgs3x_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2, integer *z1, integer *z2);
+extern integer imloop_(integer *v, integer *vs, integer *ve, integer *vinc, integer *ndim);
+extern integer immap_(shortint *imspec, integer *acmode, integer *hdrarg);
+extern integer immapz_(shortint *imspec, integer *acmode, integer *hdrarg);
+extern integer imnote_(integer *im, integer *v);
+extern integer imofnl_(integer *im, shortint *temple, integer *sort);
+extern integer imofns_(integer *im, shortint *temple);
+extern integer imofnu_(integer *im, shortint *temple);
+extern integer impgsd_(integer *imdes, integer *vs, integer *ve, integer *ndim);
+extern integer impgsi_(integer *imdes, integer *vs, integer *ve, integer *ndim);
+extern integer impgsl_(integer *imdes, integer *vs, integer *ve, integer *ndim);
+extern integer impgsr_(integer *imdes, integer *vs, integer *ve, integer *ndim);
+extern integer impgss_(integer *imdes, integer *vs, integer *ve, integer *ndim);
+extern integer impgsx_(integer *imdes, integer *vs, integer *ve, integer *ndim);
+extern integer impl1d_(integer *im);
+extern integer impl1i_(integer *im);
+extern integer impl1l_(integer *im);
+extern integer impl1r_(integer *im);
+extern integer impl1s_(integer *im);
+extern integer impl1x_(integer *im);
+extern integer impl2d_(integer *im, integer *linenm);
+extern integer impl2i_(integer *im, integer *linenm);
+extern integer impl2l_(integer *im, integer *linenm);
+extern integer impl2r_(integer *im, integer *linenm);
+extern integer impl2s_(integer *im, integer *linenm);
+extern integer impl2x_(integer *im, integer *linenm);
+extern integer impl3d_(integer *im, integer *line, integer *band);
+extern integer impl3i_(integer *im, integer *line, integer *band);
+extern integer impl3l_(integer *im, integer *line, integer *band);
+extern integer impl3r_(integer *im, integer *line, integer *band);
+extern integer impl3s_(integer *im, integer *line, integer *band);
+extern integer impl3x_(integer *im, integer *line, integer *band);
+extern integer impmmo_(integer *pl, integer *refim);
+extern integer impmmp_(shortint *mask, integer *mode, integer *refim);
+extern integer impmon_(shortint *mask, integer *mode, shortint *title, integer *maxch, integer *refim);
+extern integer impmsr_(integer *im, integer *bp, integer *szbuf);
+extern integer impnld_(integer *imdes, integer *linepr, integer *v);
+extern integer impnli_(integer *imdes, integer *linepr, integer *v);
+extern integer impnll_(integer *imdes, integer *linepr, integer *v);
+extern integer impnln_(integer *im, integer *linepr, integer *v, integer *dtype);
+extern integer impnlr_(integer *imdes, integer *linepr, integer *v);
+extern integer impnls_(integer *imdes, integer *linepr, integer *v);
+extern integer impnlx_(integer *imdes, integer *linepr, integer *v);
+extern integer imps1d_(integer *im, integer *x1, integer *x2);
+extern integer imps1i_(integer *im, integer *x1, integer *x2);
+extern integer imps1l_(integer *im, integer *x1, integer *x2);
+extern integer imps1r_(integer *im, integer *x1, integer *x2);
+extern integer imps1s_(integer *im, integer *x1, integer *x2);
+extern integer imps1x_(integer *im, integer *x1, integer *x2);
+extern integer imps2d_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2);
+extern integer imps2i_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2);
+extern integer imps2l_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2);
+extern integer imps2r_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2);
+extern integer imps2s_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2);
+extern integer imps2x_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2);
+extern integer imps3d_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2, integer *z1, integer *z2);
+extern integer imps3i_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2, integer *z1, integer *z2);
+extern integer imps3l_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2, integer *z1, integer *z2);
+extern integer imps3r_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2, integer *z1, integer *z2);
+extern integer imps3s_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2, integer *z1, integer *z2);
+extern integer imps3x_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2, integer *z1, integer *z2);
+extern integer imsinb_(integer *im, integer *vs, integer *ve, integer *ndim);
+extern integer imstai_(integer *im, integer *option);
+extern integer imtgem_(integer *imt, shortint *outstr, integer *maxch);
+extern integer imtlen_(integer *imt);
+extern integer imtmae_(shortint *fnt, shortint *outstr, integer *maxch);
+extern integer imtopn_(shortint *temple);
+extern integer imtopp_(shortint *param);
+extern integer imtrgm_(integer *imt, integer *index, shortint *outstr, integer *maxch);
+extern integer ingetc_(integer *in, integer *param);
+extern integer ingeti_(integer *in, integer *param);
+extern integer ingetp_(integer *in, integer *param);
+extern integer ingnd_(integer *gp, doublereal *x, doublereal *y, integer *npts, real *wx, real *wy);
+extern integer ingned_(integer *in, integer *gp, integer *gt, integer *nl, doublereal *x, doublereal *y, integer *npts, integer *nvars__, real *wx, real *wy);
+extern integer ingner_(integer *in, integer *gp, integer *gt, integer *nl, real *x, real *y, integer *npts, integer *nvars__, real *wx, real *wy);
+extern integer ingnr_(integer *gp, real *x, real *y, integer *npts, real *wx, real *wy);
+extern integer inlstd_(integer *index, shortint *outstr, integer *maxch, shortint *dict);
+extern integer inlstt_(shortint *str, integer *ip, shortint *dict, integer *skip, shortint *outstr, integer *maxch);
+extern integer ior_(integer *a, integer *b);
+extern integer irafmn_(shortint *acmd, integer *ainchn, integer *aoutcn, integer *aerrcn, integer *adrivr, integer *adevte, integer *prtype, shortint *bkgfie, integer *jobcoe, I_fp sysruk, I_fp onenty);
+extern integer isdiry_(shortint *vfn, shortint *pathne, integer *maxch);
+extern integer ishift_(integer *inword, integer *n);
+extern integer itoc_(integer *ival, shortint *str, integer *maxch);
+extern integer iwcare_(shortint *card, integer *type__, integer *axis, integer *index);
+extern integer iwfind_(integer *iw, integer *type__, integer *axis, integer *index);
+extern integer iwgbis_(integer *iw, integer *ctype, integer *axis);
+extern integer iwopen_(integer *ds, integer *frame, shortint *imname, integer *szimne, integer *wcssts);
+extern integer iwrfis_(integer *mw, integer *im, integer *mode);
+extern integer ixdecs_(shortint *rangeg, integer *ranges, integer *maxras, integer *nvalus);
+extern integer ixgetr_(integer *ranges, integer *number);
+extern integer kfmx_(real *rx);
+extern integer kfmy_(real *ry);
+extern integer kfpx_(real *rx);
+extern integer kfpy_(real *ry);
+extern integer kicont_(shortint *rname);
+extern integer kidece_(shortint *str, integer *nchars);
+extern integer kiexte_(shortint *resoue, shortint *nodene, integer *maxch, integer *nchars);
+extern integer kifine_(shortint *alias);
+extern integer kigetn_(integer *server, integer *oschan);
+/*extern integer kigets_(void);*/
+extern integer kignoe_(shortint *rname, shortint *outstr, integer *delim);
+extern integer kiloce_(shortint *node);
+extern integer kimape_(shortint *name__, shortint *newnae, integer *maxch);
+extern integer kimapn_(integer *chan, shortint *nodene, integer *maxch);
+extern integer kiopes_(integer *node);
+/*extern integer kirece_(integer *server, integer *opcode, integer *subcoe);*/
+/*extern integer kisend_(integer *server, integer *opcode, integer *subcoe);*/
+extern integer kisenv_(integer *server, integer *opcode, integer *subcoe);
+extern integer kmallc_(integer *ubufp, integer *nelems, integer *dtype);
+extern integer kmpx_(integer *ix);
+extern integer kmpy_(integer *iy);
+extern integer kpmx_(integer *ix);
+extern integer kpmy_(integer *iy);
+extern integer krealc_(integer *ptr, integer *aneles, integer *adtype);
+extern integer ksrece_(integer *server);
+extern integer kssend_(integer *server, integer *opcode, integer *subcoe);
+extern integer kumx_(real *rx);
+extern integer kumy_(real *ry);
+extern integer kupx_(real *rx);
+extern integer kupy_(real *ry);
+extern integer ldecos_(shortint *rangeg, integer *ranges, integer *maxras, integer *nvalus);
+extern integer lexnum_(shortint *str, integer *ipstat, integer *nchars);
+extern integer lgetnr_(integer *ranges, integer *number);
+extern integer lgetpr_(integer *ranges, integer *number);
+extern integer lnofeh_(integer *lp, integer *line, integer *loffst, integer *ltag);
+extern integer lnoopn_(integer *maxlis);
+extern integer lpopen_(shortint *device, integer *mode, integer *type__);
+extern integer lsttot_(integer *lst);
+extern integer ltoc_(integer *lval, shortint *outstr, integer *maxch);
+extern integer mallo1_(integer *outpur, integer *nelems, integer *dtype, integer *szalin, integer *fwaaln);
+extern integer maskcp_(shortint *colorg);
+extern integer maskcr_(integer *colors, integer *maskvl);
+extern integer mefgei_(integer *mef, shortint *key);
+extern integer mefgel_(integer *mef, shortint *key);
+extern integer mefgnc_(integer *mef);
+extern integer mefkce_(shortint *card, integer *index);
+extern integer mefklx_(shortint *outstr);
+extern integer meflor_(integer *mef, integer *spool, integer *group);
+extern integer mefopn_(shortint *fitsfe, integer *acmode, integer *oldp);
+extern integer mefpie_(integer *mef);
+extern integer mefrdn_(integer *mef, integer *gn);
+extern integer mefrdr_(integer *mef, integer *group, shortint *extnae, integer *extver);
+extern integer mefrdv_(integer *mef, shortint *extnae, integer *extver);
+extern integer mefred_(integer *fd, shortint *ibuf, shortint *obuf, integer *ncards);
+extern integer mefstr_(shortint *s1, shortint *s2);
+extern integer meftox_(integer *mef);
+extern integer mgdptr_(integer *fwa, integer *dtype, integer *szalin, integer *fwaaln);
+extern integer mgtfwa_(integer *ptr, integer *dtype);
+extern integer miirec_(integer *fd, integer *spp, integer *maxchs);
+extern integer miired_(integer *fd, doublereal *spp, integer *maxelm);
+extern integer miirei_(integer *fd, integer *spp, integer *maxelm);
+extern integer miirel_(integer *fd, integer *spp, integer *maxelm);
+extern integer miirer_(integer *fd, real *spp, integer *maxelm);
+extern integer miires_(integer *fd, shortint *spp, integer *maxelm);
+extern integer miogld_(integer *mp, integer *ptr, integer *mval, integer *v, integer *npix);
+extern integer miogli_(integer *mp, integer *ptr, integer *mval, integer *v, integer *npix);
+extern integer miogll_(integer *mp, integer *ptr, integer *mval, integer *v, integer *npix);
+extern integer mioglr_(integer *mp, integer *ptr, integer *mval, integer *v, integer *npix);
+extern integer miogls_(integer *mp, integer *ptr, integer *mval, integer *v, integer *npix);
+extern integer mioglx_(integer *mp, integer *ptr, integer *mval, integer *v, integer *npix);
+extern integer mioopn_(shortint *mask, integer *flags, integer *im);
+extern integer mioopo_(integer *pm, integer *im);
+extern integer miopld_(integer *mp, integer *ptr, integer *mval, integer *v, integer *npix);
+extern integer miopli_(integer *mp, integer *ptr, integer *mval, integer *v, integer *npix);
+extern integer miopll_(integer *mp, integer *ptr, integer *mval, integer *v, integer *npix);
+extern integer mioplr_(integer *mp, integer *ptr, integer *mval, integer *v, integer *npix);
+extern integer miopls_(integer *mp, integer *ptr, integer *mval, integer *v, integer *npix);
+extern integer mioplx_(integer *mp, integer *ptr, integer *mval, integer *v, integer *npix);
+extern integer miosti_(integer *mp, integer *param);
+extern integer msvfwa_(integer *fwa, integer *dtype, integer *szalin, integer *fwaaln);
+extern integer mtcap_(shortint *mtname);
+extern integer mtdevd_(shortint *iodev);
+extern integer mtfile_(shortint *fname);
+extern integer mtgtyn_(shortint *device, shortint *ufiels);
+extern integer mtneeo_(shortint *mtname);
+extern integer mtopen_(shortint *mtname, integer *acmode, integer *bufsie);
+extern integer mtskid_(integer *fd, integer *nrecos);
+extern integer mwalld_(integer *mw, integer *nelem);
+extern integer mwalls_(integer *mw, integer *nchars);
+extern integer mwcopd_(integer *mw, integer *omw, integer *ooff, integer *nelem);
+extern integer mwcops_(integer *mw, integer *omw, integer *ooff);
+extern integer mwfins_(integer *mw, shortint *system);
+extern integer mwflop_(integer *mw, shortint *fnname);
+extern integer mwgctd_(integer *act, doublereal *oltm, doublereal *oltv, integer *axtyp1, integer *axtyp2, integer *maxdim);
+extern integer mwgctr_(integer *act, real *oltm, real *oltv, integer *axtyp1, integer *axtyp2, integer *maxdim);
+extern integer mwnewy_(integer *omw);
+extern integer mwopem_(integer *im);
+extern integer mwopen_(integer *bufptr, integer *ndim);
+extern integer mwrefr_(integer *mw, shortint *str);
+extern integer mwsave_(integer *omw, integer *bp, integer *buflen);
+extern integer mwsctn_(integer *mw, shortint *syste1, shortint *syste2, integer *axbits);
+extern integer mwstai_(integer *mw, integer *param);
+extern integer ndopen_(shortint *fname, integer *mode);
+extern integer nerro_(integer *nerr);
+extern integer nowhie_(shortint *in, shortint *out, integer *maxch);
+extern integer nscan_(void);
+extern integer obsgei_(integer *obs, shortint *param);
+extern integer obsopn_(shortint *obsery);
+extern integer obspas_(integer *obs, shortint *param);
+extern integer obsvon_(shortint *obsery, integer *verboe);
+extern integer oifrdr_(integer *fd, integer *im, integer *uchars, integer *htype);
+extern integer onenty_(integer *prtype, shortint *bkgfie, shortint *cmd);
+extern integer onenty_(integer *prtype, shortint *bkgfie, shortint *cmd);
+extern integer oscmd_(shortint *cmd, shortint *infile__, shortint *outfie, shortint *errfie);
+extern integer osfnlk_(shortint *osfn);
+extern integer osfntt_(shortint *osfn, integer *time);
+extern integer osfnuk_(shortint *osfn, integer *time);
+extern integer patamh_(shortint *str, integer *from, shortint *pat);
+extern integer patgel_(shortint *patstr, shortint *patbuf, integer *szpat, integer *ip, integer *op);
+extern integer patgse_(shortint *pat, integer *n);
+extern integer patinx_(shortint *pat, integer *n);
+extern integer patloe_(shortint *ch, shortint *pat, integer *offset);
+extern integer patmae_(shortint *str, shortint *pat, integer *szpat);
+extern integer patmah_(shortint *str, shortint *pat);
+extern integer patomh_(shortint *str, integer *ip, shortint *pat, integer *pp);
+extern integer patsts_(shortint *patbuf, integer *szpat, integer *op, integer *lastop, integer *lastce);
+extern integer peaks_(real *x, real *y, real *backgd, integer *npts, real *dx);
+extern integer pggetd_(integer *tty, shortint *fname, integer *nchars, integer *totchs, integer *lineno, integer *fileno, integer *nfiles);
+extern integer pggete_(integer *fd, shortint *lbuf);
+extern integer pgpage_(integer *tty, shortint *fname, shortint *newfne, shortint *upromt, integer *clearn, integer *firste, integer *mapcc, integer *fileno, integer *nfiles, logical *redirn, integer *spoold);
+extern integer pgpeed_(void);
+extern integer placcs_(integer *pl, integer *v);
+extern integer plallc_(integer *pl, integer *nwords);
+extern integer plcome_(integer *pl1, integer *pl2, integer *outfd);
+extern integer plcree_(integer *naxes, integer *axlen, integer *depth);
+extern integer plempe_(integer *pl);
+extern integer pll2pi_(shortint *llsrc, integer *xs, integer *pxdst, integer *npix);
+extern integer pll2pl_(shortint *llsrc, integer *xs, integer *pxdst, integer *npix);
+extern integer pll2ps_(shortint *llsrc, integer *xs, shortint *pxdst, integer *npix);
+extern integer pll2ri_(shortint *llsrc, integer *xs, integer *rl, integer *npix);
+extern integer pll2rl_(shortint *llsrc, integer *xs, integer *rl, integer *npix);
+extern integer pll2rs_(shortint *llsrc, integer *xs, shortint *rl, integer *npix);
+extern integer plllen_(shortint *ll);
+extern integer plloop_(integer *v, integer *vs, integer *ve, integer *ndim);
+extern integer plnewy_(integer *oldpl);
+extern integer plopen_(integer *smp);
+extern integer plp2li_(integer *pxsrc, integer *xs, shortint *lldst, integer *npix);
+extern integer plp2ll_(integer *pxsrc, integer *xs, shortint *lldst, integer *npix);
+extern integer plp2ls_(shortint *pxsrc, integer *xs, shortint *lldst, integer *npix);
+extern integer plp2ri_(integer *pxsrc, integer *xs, integer *rl, integer *npix);
+extern integer plp2rl_(integer *pxsrc, integer *xs, integer *rl, integer *npix);
+extern integer plp2rs_(shortint *pxsrc, integer *xs, shortint *rl, integer *npix);
+extern integer plr2li_(integer *rlsrc, integer *xs, shortint *lldst, integer *npix);
+extern integer plr2ll_(integer *rlsrc, integer *xs, shortint *lldst, integer *npix);
+extern integer plr2ls_(shortint *rlsrc, integer *xs, shortint *lldst, integer *npix);
+extern integer plr2pi_(integer *rlsrc, integer *xs, integer *pxdst, integer *npix);
+extern integer plr2pl_(integer *rlsrc, integer *xs, integer *pxdst, integer *npix);
+extern integer plr2ps_(shortint *rlsrc, integer *xs, shortint *pxdst, integer *npix);
+extern integer plrefe_(integer *pl, integer *v);
+extern integer plrgex_(integer *plr, integer *i__, integer *j);
+extern integer plropn_(integer *pl, integer *plane, integer *buflit);
+extern integer plsave_(integer *pl, integer *bp, integer *buflen, integer *flags);
+extern integer plstai_(integer *pl, integer *param);
+extern integer pmaccs_(integer *pl, integer *v);
+extern integer pmnewk_(integer *refim, integer *depth);
+extern integer pmrgex_(integer *pmr, integer *i__, integer *j);
+extern integer pmropn_(integer *pl, integer *plane, integer *buflit);
+extern integer pmstai_(integer *pl, integer *param);
+extern integer pollgs_(integer *fds);
+extern integer pollon_(void);
+extern integer polltt_(integer *fds, integer *fd, integer *type__);
+extern integer prclcr_(integer *pid);
+extern integer prcldr_(integer *job);
+extern integer prcloe_(integer *pid);
+extern integer prdone_(integer *job);
+extern integer prenve_(integer *pid, integer *marker);
+/*extern integer prfilf_(integer *fd);*/
+extern integer prfinc_(integer *pid);
+extern integer prgete_(integer *fd, shortint *lbuf);
+extern integer prgetr_(integer *pid, integer *stream);
+extern integer propcr_(shortint *proces, integer *in, integer *out);
+extern integer propdr_(shortint *proces, shortint *bkgfie, shortint *bkgmsg);
+extern integer propen_(shortint *proces, integer *in, integer *out);
+extern integer protet_(shortint *fname, integer *action);
+extern integer prpsio_(integer *pid, integer *fd, integer *rwflag);
+extern integer prstai_(integer *pid, integer *param);
+extern integer pscens_(integer *ps, shortint *str);
+extern integer pschwh_(shortint *ch, integer *font);
+extern integer psgett_(integer *ps, shortint *fontcr);
+extern integer psioit_(shortint *lbuf, integer *pseude, integer *nchars);
+extern integer psopen_(integer *fd, integer *defaur);
+extern integer psrjps_(integer *ps, shortint *str);
+extern integer pstexh_(integer *ps, shortint *str);
+extern integer qmaccs_(void);
+extern integer qmgetc_(integer *fd, integer *ch);
+extern integer qmsetr_(integer *uservl, integer *defval);
+extern integer qmspai_(integer *uservl, integer *defval);
+extern integer qmsymb_(integer *qm);
+extern integer qpaccf_(integer *qp, shortint *param);
+extern integer qpaccs_(shortint *poefie, integer *mode);
+extern integer qpargt_(integer *gt, shortint *argbuf, integer *maxch);
+extern integer qpctod_(shortint *str, integer *ip, doublereal *dval);
+extern integer qpctoi_(shortint *str, integer *ip, integer *ival);
+extern integer qpdtye_(integer *qp, shortint *datate, integer *dsym);
+extern integer qpelee_(integer *qp, shortint *datate, integer *reftye);
+extern integer qpexad_(integer *ex, shortint *attrie, integer *xs, integer *xe, integer *xlen);
+extern integer qpexai_(integer *ex, shortint *attrie, integer *xs, integer *xe, integer *xlen);
+extern integer qpexar_(integer *ex, shortint *attrie, integer *xs, integer *xe, integer *xlen);
+extern integer qpexcd_(integer *ex, shortint *atname, shortint *assigp, shortint *expr, integer *offset, integer *dtype);
+extern integer qpexci_(integer *ex, shortint *atname, shortint *assigp, shortint *expr, integer *offset, integer *dtype);
+extern integer qpexcr_(integer *ex, shortint *atname, shortint *assigp, shortint *expr, integer *offset, integer *dtype);
+extern integer qpexdc_(integer *ex, integer *nelem, integer *dtype);
+extern integer qpexdr_(integer *ex, shortint *strval);
+extern integer qpexee_(integer *ex, integer *iev, integer *oev, integer *nev);
+extern integer qpexge_(integer *ex, shortint *attrie, shortint *outstr, integer *maxch);
+extern integer qpexgr_(integer *ex, shortint *outstr, integer *maxch);
+extern integer qpexmr_(integer *ex, shortint *exprlt);
+extern integer qpexon_(integer *qp, shortint *expr);
+extern integer qpexpd_(shortint *expr, integer *xs, integer *xe, integer *xlen);
+extern integer qpexpi_(shortint *expr, integer *xs, integer *xe, integer *xlen);
+extern integer qpexpr_(shortint *expr, integer *xs, integer *xe, integer *xlen);
+extern integer qpexps_(integer *ex);
+extern integer qpexpt_(integer *qp, shortint *s1, shortint *s2, integer *maxch);
+extern integer qpexrd_(integer *ex, doublereal *value);
+extern integer qpexsd_(doublereal *x1, doublereal *x2, doublereal *xs, doublereal *xe, integer *nrangs, integer *ip, doublereal *oxs, doublereal *oxe);
+extern integer qpexsi_(integer *x1, integer *x2, integer *xs, integer *xe, integer *nrangs, integer *ip, integer *oxs, integer *oxe);
+extern integer qpexsr_(real *x1, real *x2, real *xs, real *xe, integer *nrangs, integer *ip, real *oxs, real *oxe);
+extern integer qpgeti_(integer *qp, shortint *param);
+extern integer qpgetk_(integer *gt, shortint *tokbuf, integer *maxch);
+extern integer qpgetl_(integer *qp, shortint *param);
+extern integer qpgetm_(integer *qp, shortint *param, integer *opp);
+extern integer qpgmsm_(integer *qp, shortint *macro, integer *textp);
+extern integer qpgnfn_(integer *fl, shortint *outstr, integer *maxch);
+extern integer qpgpsm_(integer *qp, shortint *param);
+extern integer qpgstr_(integer *qp, shortint *param, shortint *outstr, integer *maxch);
+extern integer qpioge_(integer *io, integer *vs, integer *ve, integer *maxdim);
+extern integer qpiogr_(integer *io, shortint *outstr, integer *maxch);
+extern integer qpiols_(integer *io);
+extern integer qpioon_(integer *qp, shortint *paramx, integer *mode);
+extern integer qpiope_(integer *io, shortint *expr, integer *filter, integer *szfilr, shortint *mask, integer *szmask);
+extern integer qpiori_(integer *io, integer *obuf, integer *vs, integer *ve, integer *ndim, real *xblock, real *yblock);
+extern integer qpiors_(integer *io, shortint *obuf, integer *vs, integer *ve, integer *ndim, real *xblock, real *yblock);
+extern integer qpiort_(integer *io, integer *evi);
+extern integer qpiost_(integer *io, integer *param);
+extern integer qplenf_(integer *qp, shortint *param);
+extern integer qplenl_(integer *fl);
+extern integer qploas_(integer *qp);
+extern integer qpmaxi_(integer *x, integer *y);
+extern integer qpmini_(integer *x, integer *y);
+extern integer qpnexk_(integer *gt);
+extern integer qpofnl_(integer *qp, shortint *temple, logical *sort);
+extern integer qpofns_(integer *qp, shortint *temple);
+extern integer qpofnu_(integer *qp, shortint *temple);
+extern integer qpopen_(shortint *poefie, integer *mode, integer *oqp);
+extern integer qpopet_(integer *qp, shortint *text);
+extern integer qpparl_(integer *qp, shortint *fieldt, integer *dd);
+extern integer qppopn_(integer *qp, shortint *param, integer *mode, integer *type__);
+extern integer qpputm_(integer *qp, shortint *param, integer *opp);
+extern integer qpquef_(integer *qp, shortint *param, shortint *datate, integer *maxelm, shortint *commet, integer *flags);
+extern integer qprawk_(integer *gt, shortint *outstr, integer *maxch);
+extern integer qpread_(integer *qp, shortint *param, shortint *buf, integer *maxelm, integer *first, shortint *datate);
+extern integer qprlmd_(integer *os, integer *oe, integer *olen, doublereal *xs, doublereal *xe, integer *nx, doublereal *ys, doublereal *ye, integer *ny);
+extern integer qprlmi_(integer *os, integer *oe, integer *olen, integer *xs, integer *xe, integer *nx, integer *ys, integer *ye, integer *ny);
+extern integer qprlmr_(integer *os, integer *oe, integer *olen, real *xs, real *xe, integer *nx, real *ys, real *ye, integer *ny);
+extern integer qpsizf_(integer *qp, integer *dtype, integer *dsym, integer *reftye);
+extern integer qpstai_(integer *qp, integer *param);
+extern integer rcursr_(integer *stream, shortint *outstr, integer *maxch);
+extern integer rdukey_(shortint *keystr, integer *maxch);
+extern integer reopen_(integer *fd, integer *mode);
+extern integer rgence_(integer *rg, shortint *outstr, integer *maxch);
+extern integer rginre_(integer *rg, integer *rval);
+extern integer rgintt_(integer *rg1, integer *rg2);
+extern integer rgnext_(integer *rg, integer *number);
+extern integer rgrans_(shortint *rstr, integer *rmin, integer *rmax);
+extern integer rgunin_(integer *rg1, integer *rg2);
+extern integer rgwinw_(integer *rg, integer *rmin, integer *rmax);
+extern integer rgxrad_(shortint *rstr, doublereal *rvals, integer *npts);
+extern integer rgxrar_(shortint *rstr, real *rvals, integer *npts);
+extern integer rmopen_(integer *box, shortint *type__, integer *ndatas, integer *pixtye);
+extern integer rmsopn_(integer *box, integer *type__, real *data);
+extern integer rmtopn_(integer *box, real *data);
+extern integer rnginx_(integer *rg, integer *ival, real *rval);
+extern integer rngopn_(shortint *rstr, real *r1, real *r2, real *dr);
+extern integer sgeexe_(shortint *progrm, shortint *memory, integer *regiss);
+extern integer sgfger_(integer *fd, shortint *svbuf, integer *sp, shortint *buf, integer *ip, integer *maxch, integer *nchars);
+extern integer sgidrr_(shortint *ch, integer *x, integer *y, integer *xsize, integer *ysize, integer *orien, integer *font);
+extern integer sgigeg_(integer *maxlen, logical *penup, integer *ltype);
+extern integer sgigsg_(shortint *cap);
+extern integer sgkopn_(shortint *device, integer *tty);
+extern integer siblki_(integer *im, integer *x1, integer *x2, integer *y, integer *xbavg, integer *ybavg);
+extern integer siblkr_(integer *im, integer *x1, integer *x2, integer *y, integer *xbavg, integer *ybavg);
+extern integer siblks_(integer *im, integer *x1, integer *x2, integer *y, integer *xbavg, integer *ybavg);
+extern integer siblmi_(integer *im, integer *fp, integer *x1, integer *x2, integer *y, integer *xbavg, integer *ybavg, integer *order);
+extern integer siblmr_(integer *im, integer *fp, integer *x1, integer *x2, integer *y, integer *xbavg, integer *ybavg, integer *order);
+extern integer siblms_(integer *im, integer *fp, integer *x1, integer *x2, integer *y, integer *xbavg, integer *ybavg, integer *order);
+extern integer skcopy_(integer *cooin);
+extern integer skdecm_(integer *im, shortint *wcs, integer *mw, integer *coo);
+extern integer skdecr_(shortint *instr, integer *coo, integer *imcoo);
+extern integer skdecs_(shortint *instr, integer *mw, integer *coo, integer *imcoo);
+extern integer skimws_(integer *im, integer *mw, integer *ctype, integer *lngax, integer *latax, integer *wtype, integer *radecs, doublereal *equinx, doublereal *epoch);
+extern integer skstai_(integer *coo, integer *param);
+extern integer skstrs_(shortint *instr, integer *ctype, integer *radecs, doublereal *equinx, doublereal *epoch);
+extern integer skwrdr_(integer *index, shortint *outstr, integer *maxch, shortint *dict);
+extern integer stallc_(integer *stp, integer *blklen);
+extern integer stentr_(integer *stp, shortint *key, integer *usymln);
+extern integer stfcte_(shortint *card, integer *index);
+extern integer stfind_(integer *stp, shortint *key);
+extern integer stfinl_(integer *stp, shortint *key, integer *symbos, integer *maxsys);
+extern integer stgene_(shortint *progrm, shortint *memory, integer *regiss);
+extern integer stggee_(integer *fd, shortint *obuf);
+extern integer stggsg_(shortint *cap);
+extern integer stgmsn_(integer *fd);
+extern integer stgrey_(integer *fd, shortint *obuf, integer *maxch);
+extern integer stgtxe_(integer *pksize);
+extern integer sthash_(shortint *key, integer *moduls);
+extern integer sthead_(integer *stp);
+extern integer stname_(integer *stp, integer *sym);
+extern integer stnext_(integer *stp, integer *sym);
+extern integer stnsys_(integer *stp, integer *marker);
+extern integer stopen_(shortint *name__, integer *leninx, integer *lenstb, integer *szsbuf);
+extern integer stpstr_(integer *stp, shortint *str, integer *minchs);
+extern integer strdic_(shortint *instr, shortint *outstr, integer *maxchs, shortint *dict);
+extern integer strefb_(integer *stp, integer *offset);
+extern integer streff_(integer *stp, integer *offset);
+extern integer strese_(integer *fd);
+extern integer strgee_(integer *fd);
+extern integer strids_(shortint *set, shortint *str);
+extern integer stridx_(shortint *ch, shortint *str);
+extern integer strlds_(shortint *set, shortint *str);
+extern integer strldx_(shortint *ch, shortint *str);
+extern integer strmac_(shortint *macro, shortint *argstr, shortint *outstr, integer *maxch);
+extern integer strmah_(shortint *str, shortint *pat);
+extern integer strncp_(shortint *s1, shortint *s2, integer *n);
+extern integer stropn_(shortint *str, integer *maxch, integer *mode);
+extern integer strseh_(shortint *str, shortint *patstr);
+extern integer stsize_(integer *stp);
+extern integer sttygg_(shortint *args, integer *ip, shortint *keyw, integer *maxkc, shortint *value, integer *maxvc, integer *defact, integer *yesno);
+extern integer sysged_(integer *fd, shortint *cmd, shortint *taskne, integer *arglit, integer *timeit, integer *prtype);
+extern integer syshot_(shortint *keyfi1, shortint *keyfi2, shortint *parfie, shortint *showpt, logical *showvl);
+extern integer sysruk_(shortint *task, shortint *cmd, integer *rukarf, integer *rukint);
+extern integer sysruk_(shortint *task, shortint *cmd, integer *rukarf, integer *rukint);
+extern integer ttopen_(shortint *termil, integer *mode);
+extern integer ttstai_(integer *fd, integer *param);
+extern integer ttstas_(integer *fd, integer *param, shortint *outstr, integer *maxch);
+extern integer ttybih_(integer *capcoe, integer *tcapce, integer *ncaps);
+extern integer ttycas_(integer *tty);
+extern integer ttyctl_(integer *fd, integer *tty, shortint *cap, integer *afflnt);
+extern integer ttyeny_(shortint *cap);
+extern integer ttyexs_(shortint *str, integer *ip, shortint *outstr, integer *maxch);
+extern integer ttyfiy_(integer *tty, shortint *cap, integer *ip);
+extern integer ttygds_(shortint *ttynae);
+extern integer ttygei_(integer *tty, shortint *cap);
+extern integer ttyges_(integer *tty, shortint *cap, shortint *outstr, integer *maxch);
+extern integer ttylod_(shortint *fname, shortint *device, shortint *outstr, integer *maxch);
+extern integer ttyods_(shortint *ttynae);
+extern integer ttyopn_(shortint *termce, shortint *device, I_fp ttylod);
+extern integer ttyred_(integer *fd, integer *tty, shortint *outbuf, integer *maxch, shortint *patbuf, integer *timeot);
+extern integer ttysti_(integer *tty, integer *paramr);
+extern integer ttysui_(shortint *ctrlsr, shortint *outstr, integer *maxch, integer *coords, integer *ncoors);
+extern integer vfnadd_(integer *vfd, shortint *osfn, integer *maxch);
+extern integer vfndee_(shortint *osfn, integer *ip, shortint *outstr, integer *maxch);
+extern integer vfndel_(integer *vfd, shortint *osfn, integer *maxch);
+extern integer vfnenr_(integer *vfd, shortint *osfn, integer *maxch);
+extern integer vfngen_(integer *vfd, shortint *vfn, shortint *osfn, integer *maxch);
+extern integer vfnise_(shortint *fname);
+extern integer vfnmap_(integer *vfd, shortint *osfn, integer *maxch);
+extern integer vfnmau_(integer *vfd, shortint *osfn, integer *maxch);
+extern integer vfnopn_(shortint *vfn, integer *mode);
+extern integer vfnunp_(integer *vfd, shortint *osfn, shortint *vfn, integer *maxch);
+extern integer vvfncm_(shortint *a, integer *nchars);
+extern integer wfgson_(shortint *atstr);
+extern integer wfsmph_(doublereal *x, doublereal *v, integer *npts);
+extern integer wlcree_(void);
+extern integer wldir1_(integer *wlct, integer *flip, doublereal *polepn, logical *north, doublereal *polarn, doublereal *lbegin, doublereal *lend, doublereal *screey);
+extern integer wlfine_(doublereal *x, doublereal *y, doublereal *screey);
+extern integer wlfuln_(integer *wd, integer *labels, integer *nlabes, integer *axis, integer *side, integer *precin);
+extern integer wlline_(shortint *linetg);
+extern integer wlmaxy_(doublereal *array, integer *npts);
+extern integer wloppe_(integer *side);
+extern integer wlpren_(integer *wd, integer *axis);
+extern integer xalloe_(shortint *device);
+extern integer xdeale_(shortint *device, integer *rewind);
+extern integer xdevor_(shortint *device, shortint *owner, integer *maxch);
+extern integer xerpoi_(void);
+extern integer xfaccs_(shortint *fname, integer *mode, integer *type__);
+extern integer xfnote_(integer *fd);
+extern integer xfopen_(shortint *fname, integer *mode, integer *type__);
+extern integer xfpoll_(integer *fds, integer *nfds, integer *timeot);
+extern integer xfread_(integer *fd, shortint *buffer, integer *maxchs);
+extern integer xfscan_(integer *fd);
+extern integer xgdevt_(shortint *device, shortint *outstr, integer *maxch, integer *onedev);
+extern integer xgtpid_(void);
+extern integer xisaty_(integer *fd);
+extern integer xnint_(doublereal *x);
+extern integer xsizef_(integer *dtype);
+extern integer xstrcp_(shortint *s1, shortint *s2);
+extern integer xstrln_(shortint *str);
+extern integer xtargn_(shortint *argstr);
+extern integer xtbaon_(integer *nc, integer *nl, integer *maxval);
+extern integer xtext1_(shortint *files, shortint *exttye, shortint *index, shortint *extnae, shortint *extver, integer *lindex, integer *lname, integer *lver, shortint *ikpars, integer *err);
+extern integer xtexts_(shortint *files, shortint *exttye, shortint *index, shortint *extnae, shortint *extver, integer *lindex, integer *lname, integer *lver, integer *datals, shortint *ikpars, integer *err, integer *imext);
+extern integer xtfpd_(integer *fp, integer *im, integer *line, integer *fd);
+extern integer xtfpi_(integer *fp, integer *im, integer *line, integer *fd);
+extern integer xtfpit_(integer *pm, integer *lvalin, integer *cvalin);
+extern integer xtfpl_(integer *fp, integer *im, integer *line, integer *fd);
+extern integer xtfpr_(integer *fp, integer *im, integer *line, integer *fd);
+extern integer xtfps_(integer *fp, integer *im, integer *line, integer *fd);
+extern integer xtfpsd_(integer *fp, integer *im, integer *line, integer *col1, integer *col2, integer *line1, integer *line2, integer *fd);
+extern integer xtfpsi_(integer *fp, integer *im, integer *line, integer *col1, integer *col2, integer *line1, integer *line2, integer *fd);
+extern integer xtfpsl_(integer *fp, integer *im, integer *line, integer *col1, integer *col2, integer *line1, integer *line2, integer *fd);
+extern integer xtfpsr_(integer *fp, integer *im, integer *line, integer *col1, integer *col2, integer *line1, integer *line2, integer *fd);
+extern integer xtfpss_(integer *fp, integer *im, integer *line, integer *col1, integer *col2, integer *line1, integer *line2, integer *fd);
+extern integer xtfpvd_(integer *fp, integer *im, integer *line);
+extern integer xtfpvi_(integer *fp, integer *im, integer *line);
+extern integer xtfpvl_(integer *fp, integer *im, integer *line);
+extern integer xtfpvr_(integer *fp, integer *im, integer *line);
+extern integer xtfpvs_(integer *fp, integer *im, integer *line);
+extern integer xtimes_(shortint *files, shortint *index, shortint *extnae, shortint *extver, integer *lindex, integer *lname, integer *lver, shortint *ikpars, integer *err);
+extern integer xtimtm_(integer *list1, integer *list2, integer *list3, shortint *image1, shortint *image2, shortint *image3, integer *szimae);
+extern integer xtlogn_(shortint *logpam, shortint *prefix, integer *logfd, integer *stdflg);
+extern integer xtoc_(complex *xval, shortint *outstr, integer *maxch, integer *decpl, integer *fmt, integer *width);
+extern integer xtsamd_(integer *im, integer *bpm, doublereal *sample, integer *nsampe, integer *nlines);
+extern integer xtsami_(integer *im, integer *bpm, integer *sample, integer *nsampe, integer *nlines);
+extern integer xtsamr_(integer *im, integer *bpm, real *sample, integer *nsampe, integer *nlines);
+extern integer xtsams_(integer *im, integer *bpm, shortint *sample, integer *nsampe, integer *nlines);
+extern integer xtscod_(integer *i__, integer *j);
+extern integer xtscoe_(integer *i__, integer *j);
+extern integer xttxtn_(shortint *fname);
+extern integer xvvnee_(integer *type1, integer *type2);
+extern integer xvvpah_(shortint *str, shortint *pat);
+extern integer xxscan_(void);
+extern integer ytfpit_(integer *pmin, integer *lvalin, integer *cvalin);
+extern integer zsccoa_(real *a, shortint *badpix, integer *npix, real *mean, real *sigma);
+extern integer zscfie_(real *data, integer *npix, real *zstart, real *zslope, real *krej, integer *ngrow, integer *maxitr);
+extern integer zscpmn_(shortint *sectin, integer *refim);
+extern integer zscres_(real *data, real *flat, real *normx, shortint *badpix, integer *npix, doublereal *sumxsr, doublereal *sumxz, doublereal *sumx, doublereal *sumz, real *thresd, integer *ngrow);
+extern integer zttger_(integer *chan, integer *ch);
+extern integer zttloe_(shortint *in, shortint *out, integer *nchars);
+extern integer zttquy_(shortint *logtet, integer *nchars, shortint *dtext, integer *maxch, integer *szdtet);
+extern logical aveqc_(shortint *a, shortint *b, integer *npix);
+extern logical aveqd_(doublereal *a, doublereal *b, integer *npix);
+extern logical aveqi_(integer *a, integer *b, integer *npix);
+extern logical aveql_(integer *a, integer *b, integer *npix);
+extern logical aveqr_(real *a, real *b, integer *npix);
+extern logical aveqs_(shortint *a, shortint *b, integer *npix);
+extern logical aveqx_(complex *a, complex *b, integer *npix);
+extern logical clgetb_(shortint *param);
+extern logical clgpsb_(integer *pp, shortint *parnae);
+extern logical envgeb_(shortint *varnae);
+extern logical fmlocd_(integer *fm, integer *lfile);
+extern logical fnulle_(shortint *fname);
+extern logical fpequd_(doublereal *x, doublereal *y);
+extern logical fpequr_(real *x, real *y);
+extern logical fpnonr_(real *x1, real *x2);
+extern logical fxffpd_(doublereal *x, doublereal *y, integer *it);
+extern logical fxfisk_(shortint *line);
+extern logical fxfxn1_(shortint *buf, integer *dataln);
+extern logical ggetb_(integer *gp, shortint *cap);
+extern logical glbeq_(real *a, real *b);
+extern logical gtygeb_(integer *tty, shortint *cap);
+extern logical imgetb_(integer *im, shortint *key);
+extern logical impml1_(integer *im);
+extern logical impml2_(integer *im, integer *lineno);
+extern logical impml3_(integer *im, integer *lineno, integer *bandno);
+extern logical impmlv_(integer *im, integer *v);
+extern logical impms1_(integer *im, integer *x1, integer *x2);
+extern logical impms2_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2);
+extern logical impms3_(integer *im, integer *x1, integer *x2, integer *y1, integer *y2, integer *z1, integer *z2);
+extern logical impmsv_(integer *im, integer *vs, integer *ve, integer *ndim);
+extern logical isinre_(integer *ranges, integer *number);
+extern logical itob_(integer *intege);
+extern logical lisine_(integer *ranges, integer *number);
+extern logical mefcmv_(integer *mef, shortint *extnae, integer *extver);
+extern logical mefgeb_(integer *mef, shortint *key);
+extern logical plempy_(integer *pl);
+extern logical pllcot_(shortint *llsrc, integer *xs, integer *npix, integer *mval);
+extern logical pllemy_(shortint *llsrc, integer *xs, integer *npix);
+extern logical plleql_(shortint *l1, shortint *l2);
+extern logical plliny_(integer *pl, integer *v);
+extern logical plreqi_(integer *r1, integer *r2);
+extern logical plreql_(integer *r1, integer *r2);
+extern logical plreqs_(shortint *r1, shortint *r2);
+extern logical plsect_(integer *plsrc, integer *v1, integer *v2, integer *ndim, integer *mval);
+extern logical plsecy_(integer *plsrc, integer *v1, integer *v2, integer *ndim);
+extern logical plubox_(integer *ufd, integer *y, integer *rlreg, integer *xs, integer *npix);
+extern logical plucie_(integer *ufd, integer *y, integer *rlreg, integer *xs, integer *npix);
+extern logical plupon_(integer *ufd, integer *line, integer *rlreg, integer *xs, integer *npix);
+extern logical pmempy_(integer *pl);
+extern logical pmliny_(integer *pl, integer *v);
+extern logical pmsect_(integer *pl, integer *vs, integer *ve, integer *ndim, integer *mval);
+extern logical pmsecy_(integer *pl, integer *vs, integer *ve, integer *ndim);
+extern logical qpgetb_(integer *qp, shortint *param);
+extern logical qplesd_(doublereal *x, doublereal *y);
+extern logical qplesi_(integer *x, integer *y);
+extern logical qplesr_(real *x, real *y);
+extern logical rngeli_(integer *rg, integer *x);
+extern logical rngelr_(integer *rg, real *x, real *delta);
+extern logical rngini_(integer *rg, integer *x);
+extern logical rnginr_(integer *rg, real *x);
+extern logical sgewse_(void);
+extern logical sgmexe_(integer *fn, shortint *gim, integer *nwords);
+extern logical sgmspc_(integer *tr, integer *gki, integer *fn, shortint *gim, integer *bp, integer *buftop, integer *deletn);
+extern logical sgmwse_(logical *enable);
+extern logical sgmwsn_(integer *fn, shortint *gim, real *rx1, real *ry1, real *rx2, real *ry2);
+extern logical streq_(shortint *s1, shortint *s2);
+extern logical strge_(shortint *s1, shortint *s2);
+extern logical strgt_(shortint *s1, shortint *s2);
+extern logical strle_(shortint *s1, shortint *s2);
+extern logical strlt_(shortint *s1, shortint *s2);
+extern logical strne_(shortint *s1, shortint *s2);
+extern logical strse1_(shortint *str, shortint *patstr, integer *patlen);
+extern logical ttygeb_(integer *tty, shortint *cap);
+extern logical xerpop_(void);
+extern logical xtexth_(shortint *extnae, shortint *pattes);
+extern logical xtimlq_(integer *im1, integer *im2);
+extern logical xtimnq_(shortint *imnam1, shortint *imnam2);
+extern real adoti_(integer *a, integer *b, integer *npix);
+extern real adotr_(real *a, real *b, integer *npix);
+extern real adots_(shortint *a, shortint *b, integer *npix);
+extern real adotx_(complex *a, complex *b, integer *npix);
+extern real aelogr_(real *x);
+extern real agmaxi_(real *sval, real *zhgh, real *zdra, integer *nviz, integer *iivz, integer *nevz, integer *iiez);
+extern real agmini_(real *sval, real *zlow, real *zdra, integer *nviz, integer *iivz, integer *nevz, integer *iiez);
+extern real ahivr_(real *a, integer *npix);
+extern real alovr_(real *a, integer *npix);
+extern real amedr_(real *a, integer *npix);
+extern real apolr_(real *x, real *coeff, integer *ncoeff);
+extern real asokr_(real *a, integer *npix, integer *ksel);
+extern real assqi_(integer *a, integer *npix);
+extern real assqr_(real *a, integer *npix);
+extern real assqs_(shortint *a, integer *npix);
+extern real asumi_(integer *a, integer *npix);
+extern real asumr_(real *a, integer *npix);
+extern real asums_(shortint *a, integer *npix);
+extern real c1dcer_(real *x, real *data, integer *npts, real *width);
+extern real cented_(real *x, real *data, integer *npts, real *width, integer *type__, real *radius, real *thresd);
+extern real cfux_(real *rx);
+extern real cfuy_(real *ry);
+extern real clgetr_(shortint *param);
+extern real clgpsr_(integer *pp, shortint *parnae);
+extern real cmfx_(integer *ix);
+extern real cmfy_(integer *iy);
+extern real cmux_(integer *ix);
+extern real cmuy_(integer *iy);
+extern real concom_(real *xq, real *yq, real *xd, real *yd, real *zd, integer *ndp, real *wk, integer *iwk, integer *loc);
+extern real conlcm_(real *x, real *y, real *xd, real *yd, real *zd, integer *ndp, real *wk, integer *iwk, integer *loc);
+extern real cpfx_(integer *ix);
+extern real cpfy_(integer *iy);
+extern real cpux_(integer *ix);
+extern real cpuy_(integer *iy);
+extern real cqdger_(integer *cq, integer *record, shortint *field);
+extern real cqfger_(integer *cq, shortint *field);
+extern real cqistr_(integer *res, integer *param);
+extern real cqrstr_(integer *res, integer *param);
+extern real cufx_(real *rx);
+extern real cufy_(real *ry);
+extern real dtgetr_(integer *dt, integer *record, shortint *field);
+extern real elogr_(real *x);
+extern real envger_(shortint *varnae);
+extern real fpfixr_(real *x);
+extern real fran_(void);
+extern real gammln_(real *xx);
+extern real gasdev_(integer *seed);
+extern real ggetr_(integer *gp, shortint *cap);
+extern real glbmip_(real *x1, real *x2, integer *nminor);
+extern real glbtin_(integer *gp, integer *ax, real *ndcleh);
+extern real grcrel_(shortint *opstr, integer *ip);
+extern real gstatr_(integer *gp, integer *param);
+extern real gtdise_(real *x, real *step, real *nearek);
+extern real gtgetr_(integer *gt, integer *param);
+extern real gtliny_(real *x1, real *x2);
+extern real gtxctn_(integer *gp, real *x1, integer *wcs1, integer *wcs2);
+extern real gtyctn_(integer *gp, real *y1, integer *wcs1, integer *wcs2);
+extern real gtyger_(integer *tty, shortint *cap);
+extern real icrmsr_(real *x, real *y, real *fit, real *wts, integer *npts);
+extern real imgetr_(integer *im, shortint *key);
+extern real imstar_(integer *im, integer *param);
+extern real ingdvr_(real *x);
+extern real ingetr_(integer *in, integer *param);
+extern real inrmsr_(real *y, real *fit, real *wts, integer *npts);
+extern real mefger_(integer *mef, shortint *key);
+extern real mwc1tr_(integer *act, real *x);
+extern real obsger_(integer *obs, shortint *param);
+extern real poidev_(real *xm, integer *seed);
+extern real qmspar_(real *uservl, real *defval);
+extern real qpgetr_(integer *qp, shortint *param);
+extern real qpiovr_(integer *io, integer *param);
+extern real qpmaxr_(real *x, real *y);
+extern real qpminr_(real *x, real *y);
+extern real qpstar_(integer *qp, integer *param);
+extern real rmgdaa_(integer *rm, integer *index);
+extern real rmgmed_(integer *rm, real *nclip, integer *navg, real *blank, integer *exclue, shortint *nused);
+extern real rmmed_(integer *rm, real *nclip, integer *navg, real *blank, integer *exclue, integer *index, real *in, shortint *mask, shortint *nused);
+extern real rmsord_(integer *rm, real *nclip, integer *index, real *data);
+extern real rmturh_(integer *rm, integer *index, real *data);
+extern real rngnet_(integer *rg, real *x, integer *ival, real *rval);
+extern real rpthe4_(real *p1x, real *p1y, real *p2x, real *p2y);
+extern real ttyger_(integer *tty, shortint *cap);
+extern real wldisr_(real *x1, real *y1, real *x2, real *y2);
+extern shortint ahivc_(shortint *a, integer *npix);
+extern shortint ahivs_(shortint *a, integer *npix);
+extern shortint alovc_(shortint *a, integer *npix);
+extern shortint alovs_(shortint *a, integer *npix);
+extern shortint amedc_(shortint *a, integer *npix);
+extern shortint ameds_(shortint *a, integer *npix);
+extern shortint asokc_(shortint *a, integer *npix, integer *ksel);
+extern shortint asoks_(shortint *a, integer *npix, integer *ksel);
+extern shortint chfeth_(shortint *str, integer *ip, shortint *ch);
+extern shortint chrlwr_(shortint *ch);
+extern shortint chrupr_(shortint *ch);
+extern shortint clgetc_(shortint *param);
+extern shortint clgets_(shortint *param);
+extern shortint clgpsc_(integer *pp, shortint *parnae);
+extern shortint clgpss_(integer *pp, shortint *parnae);
+extern shortint cqitye_(integer *itype);
+extern shortint imgetc_(integer *im, shortint *key);
+extern shortint imgets_(integer *im, shortint *key);
+extern shortint mefgec_(integer *mef, shortint *key);
+extern shortint mefges_(integer *mef, shortint *key);
+extern shortint psfonr_(integer *ps, integer *font);
+extern shortint qpgetc_(integer *qp, shortint *param);
+extern shortint qpgets_(integer *qp, shortint *param);
+extern shortint xfgetc_(integer *fd, shortint *ch);
+extern shortint xfgetr_(shortint *ch);
+extern int bitmov_(integer *a, integer *aoff, integer *b, integer *boff, integer *nbits);
+extern int bswap2_(char *a, integer *aoff, char *b, integer *boff, integer *nbytes, ftnlen a_len, ftnlen b_len);
+extern int bswap4_(char *a, integer *aoff, char *b, integer *boff, integer *nbytes, ftnlen a_len, ftnlen b_len);
+extern int bytmov_(char *a, integer *aoff, char *b, integer *boff, integer *nbytes, ftnlen a_len, ftnlen b_len);
+extern int chrpak_(shortint *a, integer *aoff, char *b, integer *boff, integer *nchars, ftnlen b_len);
+extern int chrupk_(char *a, integer *aoff, shortint *b, integer *boff, integer *nchars, ftnlen a_len);
+extern int f77pak_(shortint *sppstr, char *f77str, integer *maxch, ftnlen f77str_len);
+extern int f77upk_(char *f77str, shortint *sppstr, integer *maxch, ftnlen f77str_len);
+extern int ieevpd_(doublereal *native, doublereal *ieee, integer *nelem);
+extern int ieevud_(doublereal *ieee, doublereal *native, integer *nelem);
+extern int ieepad_(doublereal *x);
+extern int ieeupd_(doublereal *x);
+extern int ieesnd_(doublereal *x);
+extern int ieegnd_(doublereal *x);
+extern int ieestd_(integer *onin, integer *onout);
+extern int ieezsd_(void);
+extern int ieemad_(integer *inval, integer *outval);
+extern int ieegmd_(integer *inval, integer *outval);
+extern int ieesmd_(integer *inval, integer *outval);
+extern int ieevpr_(real *native, real *ieee, integer *nelem);
+extern int ieevur_(real *ieee, real *native, integer *nelem);
+extern int ieepar_(real *x);
+extern int ieeupr_(real *x);
+extern int ieesnr_(real *x);
+extern int ieegnr_(real *x);
+extern int ieestr_(integer *onin, integer *onout);
+extern int ieezsr_(void);
+extern int ieemar_(integer *inval, integer *outval);
+extern int ieegmr_(integer *inval, integer *outval);
+extern int ieesmr_(integer *inval, integer *outval);
+extern integer miilen_(integer *nelems, integer *miidae);
+extern integer miinem_(integer *nchars, integer *miitye);
+extern int miipak_(integer *spp, integer *mii, integer *nelems, integer *sppdae, integer *miidae);
+extern int miipa6_(integer *spp, integer *mii, integer *nelems, integer *sppdae);
+extern int miipa2_(integer *spp, integer *mii, integer *nelems, integer *sppdae);
+extern int miipa8_(integer *spp, integer *mii, integer *nelems, integer *sppdae);
+extern int miipad_(integer *spp, doublereal *mii, integer *nelems, integer *sppdae);
+extern int miipar_(integer *spp, real *mii, integer *nelems, integer *sppdae);
+extern integer miipke_(integer *nelems, integer *miitye);
+extern int miiupk_(integer *mii, integer *spp, integer *nelems, integer *miidae, integer *sppdae);
+extern int miiup6_(integer *mii, integer *spp, integer *nelems, integer *sppdae);
+extern int miiup2_(integer *mii, integer *spp, integer *nelems, integer *sppdae);
+extern int miiup8_(integer *mii, integer *spp, integer *nelems, integer *sppdae);
+extern int miiupd_(doublereal *mii, integer *spp, integer *nelems, integer *sppdae);
+extern int miiupr_(real *mii, integer *spp, integer *nelems, integer *sppdae);
+extern integer nmilen_(integer *nelems, integer *nmidae);
+extern integer nminem_(integer *nchars, integer *nmitye);
+extern int nmipak_(integer *spp, integer *nmi, integer *nelems, integer *sppdae, integer *nmidae);
+extern int nmipa6_(integer *spp, integer *nmi, integer *nelems, integer *sppdae);
+extern int nmipa2_(integer *spp, integer *nmi, integer *nelems, integer *sppdae);
+extern int nmipa8_(integer *spp, integer *nmi, integer *nelems, integer *sppdae);
+extern int nmipad_(integer *spp, doublereal *nmi, integer *nelems, integer *sppdae);
+extern int nmipar_(integer *spp, real *nmi, integer *nelems, integer *sppdae);
+extern integer nmipke_(integer *nelems, integer *nmitye);
+extern int nmiupk_(integer *nmi, integer *spp, integer *nelems, integer *nmidae, integer *sppdae);
+extern int nmiup6_(integer *nmi, integer *spp, integer *nelems, integer *sppdae);
+extern int nmiup2_(integer *nmi, integer *spp, integer *nelems, integer *sppdae);
+extern int nmiup8_(integer *nmi, integer *spp, integer *nelems, integer *sppdae);
+extern int nmiupd_(doublereal *nmi, integer *spp, integer *nelems, integer *sppdae);
+extern int nmiupr_(real *nmi, integer *spp, integer *nelems, integer *sppdae);
+extern int strpak_(shortint *instr, char *outstr, integer *maxch, ftnlen outstr_len);
+extern int strupk_(char *instr, shortint *outstr, integer *maxch, ftnlen instr_len);
+extern real urand_(integer *lseed);
+extern integer xori_(integer *a, integer *b);
+extern shortint xors_(shortint *a, shortint *b);
+extern integer xorl_(integer *a, integer *b);
+extern integer sysruk_(shortint *task, shortint *cmd, integer *rukarf, integer *rukint);
+extern int sbit_(void);
+extern int tbit_(void);
diff --git a/unix/hlib/libc/xnames.h b/unix/hlib/libc/xnames.h
new file mode 100644
index 00000000..a99e12b6
--- /dev/null
+++ b/unix/hlib/libc/xnames.h
@@ -0,0 +1,244 @@
+/*
+ * XNAMES.H -- C callable external names of the SPP library procedures.
+ * The C version of the name is identical to the SPP name except that it is
+ * given as a macro in upper case. The definition is the host system external
+ * name of the Fortran procedure. The trailing underscore in these names is
+ * UNIX dependent; other systems use a leading underscore, or no special
+ * characters at all (the purpose of the underscore on UNIX systems is to
+ * avoid name collisions between C and Fortran procedures, since the F77
+ * runtime library on UNIX is built on the UNIX/C library). Change the names
+ * in the column at the right if your system employs a different convention.
+ *
+ * If your system does not employ something like the underscore to avoid
+ * name collisions, name collisions can be expected. To fix these change
+ * the name given here and add a define to lib$iraf.h to change the external
+ * name generated by the preprocessor. It is NOT necessary to resolve name
+ * collisions by changing the actual program sources.
+ *
+ * The external names defined herein MUST agree with those in "hlib$iraf.h".
+ */
+
+#define ACCESS xfaccs_ /* to avoid name collisions */
+#define CALLOC xcallc_
+#define CLOSE xfcloe_
+#define DELETE xfdele_
+#define ERROR xerror_
+#define FLUSH xffluh_
+#define GETC xfgetc_
+#define GETCHAR xfgetr_
+#define MALLOC xmallc_
+#define MFREE xmfree_
+#define MKTEMP xmktep_
+#define NOTE xfnote_
+#define OPEN xfopen_
+#define PRINTF xprinf_
+#define PUTC xfputc_
+#define PUTCHAR xfputr_
+#define QSORT xqsort_
+#define READ xfread_
+#define REALLOC xrealc_
+#define SEEK xfseek_
+#define SIZEOF xsizef_
+#define UNGETC xfungc_
+#define WRITE xfwrie_
+
+#define AREAD aread_ /* other VOS names */
+#define AREADB areadb_
+#define AWAIT await_
+#define AWAITB awaitb_
+#define AWRITE awrite_
+#define AWRITEB awritb_
+#define BEGMEM begmem_
+#define BRKTIME brktie_
+#define BTOI btoi_
+#define CLKTIME clktie_
+#define CNVDATE cnvdae_
+#define CNVTIME cnvtie_
+#define COERCE coerce_
+#define CPUTIME cputie_
+#define CTOD ctod_
+#define CTOX ctox_
+#define DIROPEN diropn_
+#define DTOC dtoc_
+#define ENVFIND envfid_
+#define ENVFREE envfre_
+#define ENVGETB envgeb_
+#define ENVGETI envgei_
+#define ENVGETS envges_
+#define ENVINIT envint_
+#define ENVLIST envlit_
+#define ENVMARK envmak_
+#define ENVPUTS envpus_
+#define ENVRESET envret_
+#define ENVSCAN envscn_
+#define ERRACT erract_
+#define ERRCODE errcoe_
+#define ERRGET errget_
+#define FALLOC falloc_
+#define FATAL xfatal_
+#define FCHDIR xfchdr_
+#define FCOPY fcopy_
+#define FCOPYO fcopyo_
+#define FDEBUG fdebug_
+#define FDELPF fdelpf_
+#define FDEVBLK fdevbk_
+#define FDIRNAME fdirne_
+#define FILBUF filbuf_
+#define FINFO finfo_
+#define FIXMEM fixmem_
+#define FLSBUF flsbuf_
+#define FMAPFN fmapfn_
+#define FMKDIR fmkdir_
+#define FNEXTN fnextn_
+#define FNLDIR fnldir_
+#define FNROOT fnroot_
+#define FNTCLS fntcls_
+#define FNTGFN fntgfn_
+#define FNTOPN fntopn_
+#define FOWNER fowner_
+#define FPATHNAME fpathe_
+#define FPRINTF fprinf_
+#define FREDIR fredir_
+#define FREDIRO fredio_
+#define FSETI fseti_
+#define FSTATI fstati_
+#define FSTATL fstatl_
+#define FSTATS fstats_
+#define GETPID xgtpid_
+#define GCTOD gctod_
+#define GCTOL gctol_
+#define GCTOX gctox_
+#define GETLINE getlie_
+#define GETUID xgtuid_
+#define GLTOC gltoc_
+#define GPATMAKE gpatme_
+#define GPATMATCH gpatmh_
+#define GSTRMATCH gstrmh_
+#define GTR_GFLUSH gtrgfh_
+#define IMACCESS imaccs_
+#define IMDRCUR imdrcr_
+#define IRAF_MAIN irafmn_
+#define XISATTY xisaty_
+#define XTTYSIZE xttyse_
+#define ITOB itob_
+#define KI_EXTNODE kiexte_
+#define KI_MAPCHAN kimapn_
+#define LEXNUM lexnum_
+#define LPOPEN lpopen_
+#define NDOPEN ndopen_
+#define ONENTRY onenty_
+#define ONERROR onerrr_
+#define ONEXIT onexit_
+#define OSCMD oscmd_
+#define PARGB pargb_
+#define PARGC pargc_
+#define PARGD pargd_
+#define PARGI pargi_
+#define PARGL pargl_
+#define PARGR pargr_
+#define PARGS pargs_
+#define PARGSTR pargsr_
+#define PARGX pargx_
+#define POLL xfpoll_
+#define POLL_OPEN pollon_
+#define POLL_CLOSE pollce_
+#define POLL_ZERO pollzo_
+#define POLL_SET pollst_
+#define POLL_CLEAR pollcr_
+#define POLL_TEST polltt_
+#define POLL_GET_NFDS pollgs_
+#define POLL_PRINT pollpt_
+#define PRCHDIR prchdr_
+#define PRCLCPR prclcr_
+#define PRCLDPR prcldr_
+#define PRCLOSE prcloe_
+#define PRDONE prdone_
+#define PRENVFREE prenve_
+#define PRENVSET prenvt_
+#define PRFILBUF prfilf_
+#define PRKILL prkill_
+#define PROPCPR propcr_
+#define PROPDPR propdr_
+#define PROPEN propen_
+#define PROTECT protet_
+#define PRREDIR prredr_
+#define PRSIGNAL prsigl_
+#define PRSTATI prstai_
+#define PRUPDATE prupde_
+#define PRPSINIT prpsit_
+#define PUTCC putcc_
+#define PUTLINE putlie_
+#define RCURSOR rcursr_
+#define RDUKEY rdukey_
+#define RENAME xfrnam_
+#define REOPEN reopen_
+#define SALLOC salloc_
+#define SFREE sfree_
+#define SMARK smark_
+#define SPRINTF sprinf_
+#define STG_GETLINE stggee_
+#define STG_PUTLINE stgpue_
+#define STKCMP stkcmp_
+#define STRMATCH strmah_
+#define STROPEN stropn_
+#define STRTBL strtbl_
+#define STTYCO sttyco_
+#define SYSRUK sysruk_
+#define TSLEEP tsleep_
+#define TTSETI ttseti_
+#define TTSETS ttsets_
+#define TTSTATI ttstai_
+#define TTSTATS ttstas_
+#define TTYCDES ttycds_
+#define TTYCLEAR ttyclr_
+#define TTYCLEARLN ttycln_
+#define TTYCLOSE ttycls_
+#define TTYCTRL ttyctl_
+#define TTYGDES ttygds_
+#define TTYGETB ttygeb_
+#define TTYGETI ttygei_
+#define TTYGETR ttyger_
+#define TTYGETS ttyges_
+#define TTYGOTO ttygoo_
+#define TTYINIT ttyint_
+#define TTYODES ttyods_
+#define TTYOPEN ttyopn_
+#define TTYPUTLINE ttypue_
+#define TTYPUTS ttypus_
+#define TTYSETI ttysei_
+#define TTYSO ttyso_
+#define TTYSTATI ttysti_
+#define UNGETLINE ungete_
+#define UNREAD unread_
+#define URAND urand_
+#define VFNOPEN vfnopn_
+#define VFNCLOSE vfncle_
+#define VFNMAP vfnmap_
+#define VFNADD vfnadd_
+#define VFNDEL vfndel_
+#define VFNUNMAP vfnunp_
+#define VMALLOC vmallc_
+#define XACOS xacos_
+#define XALLOCATE xalloe_
+#define XASIN xasin_
+#define XATAN xatan_
+#define XATAN2 xatan2_
+#define XCOS xcos_
+#define XDEALLOCATE xdeale_
+#define XDEVOWNER xdevor_
+#define XDEVSTATUS xdevss_
+#define XER_RESET xerret_
+#define XEXP xexp_
+#define XLOG xlog_
+#define XLOG10 xlog10_
+#define XNINT xnint_
+#define XMJBUF xmjbuf_
+#define XONERR xonerr_
+#define XPOW xpow_
+#define XSIN xsin_
+#define XSQRT xsqrt_
+#define XTAN xtan_
+#define XTOC xtoc_
+#define XWHEN xwhen_
+
+#define D_xnames
diff --git a/unix/hlib/libc/xwhen.h b/unix/hlib/libc/xwhen.h
new file mode 100644
index 00000000..90281911
--- /dev/null
+++ b/unix/hlib/libc/xwhen.h
@@ -0,0 +1,10 @@
+/* Exception handling.
+ */
+#define X_ACV 501 /* access violation */
+#define X_ARITH 502 /* arithmetic error */
+#define X_INT 503 /* keyboard interrupt */
+#define X_IPC 504 /* write to IPC with no reader */
+#define X_IGNORE NULL /* ignore exception */
+#define X_FIRST_EXCEPTION 501
+
+#define D_xwhen
diff --git a/unix/hlib/libc/zfstat.h b/unix/hlib/libc/zfstat.h
new file mode 100644
index 00000000..48862cd3
--- /dev/null
+++ b/unix/hlib/libc/zfstat.h
@@ -0,0 +1,8 @@
+/* File status parameters (zsttbf, etc.)
+ */
+#define FSTT_BLKSIZE 1
+#define FSTT_FILSIZE 2
+#define FSTT_OPTBUFSIZE 3
+#define FSTT_MAXBUFSIZE 4
+
+#define D_zfstat
diff --git a/unix/hlib/libos.a b/unix/hlib/libos.a
new file mode 120000
index 00000000..fcecfe3d
--- /dev/null
+++ b/unix/hlib/libos.a
@@ -0,0 +1 @@
+../bin/libos.a \ No newline at end of file
diff --git a/unix/hlib/login.cl b/unix/hlib/login.cl
new file mode 100644
index 00000000..bd10cd22
--- /dev/null
+++ b/unix/hlib/login.cl
@@ -0,0 +1,182 @@
+# LOGIN.CL -- User login file for the IRAF command language.
+
+# Identify login.cl version (checked in images.cl).
+if (defpar ("logver"))
+ logver = "IRAF V2.16.1 Oct 2013"
+
+set home = "U_HOME"
+set imdir = "U_IMDIR"
+set cache = "U_CACHEDIR"
+set uparm = "home$uparm/"
+set userid = "U_USER"
+
+# Set the terminal type. We assume the user has defined this correctly
+# when issuing the MKIRAF and no longer key off the unix TERM to set a
+# default.
+if (access (".hushiraf") == no)
+ print "setting terminal type to 'U_TERM' ..."
+stty U_TERM
+
+
+#============================================================================
+# Uncomment and edit to change the defaults.
+#set editor = vi
+#set printer = lp
+#set pspage = "letter"
+#set stdimage = imt800
+#set stdimcur = stdimage
+#set stdplot = lw
+#set clobber = no
+#set imclobber = no
+#set filewait = yes
+#set cmbuflen = 512000
+#set min_lenuserarea = 64000
+#set imtype = "imh"
+set imextn = "oif:imh fxf:fits,fit fxb:fxb plf:pl qpf:qp stf:hhh,??h"
+
+
+# XIMTOOL/DISPLAY stuff. Set node to the name of your workstation to
+# enable remote image display. The trailing "!" is required.
+#set node = "my_workstation!"
+
+# CL parameters you mighth want to change.
+#ehinit = "nostandout eol noverify"
+#epinit = "standout showall"
+showtype = yes
+
+
+#============================================================================
+# Default USER package; extend or modify as you wish. Note that this can
+# be used to call FORTRAN programs from IRAF.
+
+package user
+
+task $adb $bc $cal $cat $comm $cp $csh $date $dbx $df $diff = "$foreign"
+task $du $find $finger $ftp $grep $lpq $lprm $ls $mail $make = "$foreign"
+task $man $mon $mv $nm $od $ps $rcp $rlogin $rsh $ruptime = "$foreign"
+task $rwho $sh $spell $sps $strings $su $telnet $tip $top = "$foreign"
+task $awk $sed $vi $emacs $w $wc $less $rusers $sync $pwd $gdb = "$foreign"
+
+task $xc $mkpkg $generic $rtar $wtar $buglog = "$foreign"
+#task $fc = "$xc -h $* -limfort -lsys -lvops -los"
+task $fc = ("$" // envget("iraf") // "unix/hlib/fc.csh" //
+ " -h $* -limfort -lsys -lvops -los")
+task $nbugs = ("$(setenv EDITOR 'buglog -e';" //
+ "less -Cqm +G " // envget ("iraf") // "local/bugs.*)")
+task $cls = "$clear;ls"
+task $clw = "$clear;w"
+task $pg = ("$(less -Cqm $*)")
+
+
+#============================================================================
+# Load private home$loginuser.cl definitions. The global login means that
+# a user can create a loginuser.cl in the HOME$.iraf/ directory that will
+# apply to all logins. In a case where MKIRAF created a local login.cl then
+# this will load any loginuser.cl in the current directory.
+
+if (access ("home$loginuser.cl"))
+ cl < "home$loginuser.cl"
+;
+keep
+
+
+# Allow a local loginuser.cl to override global definitions. In a global
+# login this allows a 'loginuser.cl' file in a current project directory to
+# override definitions set in the global login.cl/loginuser.cl file. In a
+# case where MKIRAF create a local login this simple re-loads the loginuser.cl
+
+if (access ("./loginuser.cl"))
+ cl < "./loginuser.cl"
+;
+keep
+
+
+# Allow for a local uparm directory. In a global login this allows us to
+# create a 'uparm' directory in a specific project dir that will override
+# the params in the global login. In a case where MKIRAF created a local
+# uparm this simply redefines the 'uparm' as the absolute path.
+
+path (osfn(".")) | scan (s1)
+if (access (s1 // "uparm/")) {
+ s1 = substr (s1, strldx("!",s1)+1, strlen(s1)) # strip 'node!' prefix
+ printf ("reset uparm = \"" // s1 // "uparm/\"; keep\n") | cl()
+ s1 = ""
+}
+;
+keep
+
+#============================================================================
+# Load the default CL package. Doing so here allows us to override package
+# paths and load personalized packages from our loginuser.cl.
+clpackage
+
+
+# List any packages you want loaded at login time, ONE PER LINE.
+images # general image operators
+plot # graphics tasks
+dataio # data conversions, import export
+lists # list processing
+
+# The if(deftask...) is needed for V2.9 compatibility.
+if (deftask ("proto"))
+ proto # prototype or ad hoc tasks
+
+tv # image display
+utilities # miscellaneous utilities
+noao # optical astronomy packages
+vo # Virtual Observatory tools
+
+prcache directory
+cache directory page type help
+
+# Print the message of the day.
+if (access (".hushiraf"))
+ menus = no
+else {
+ clear; type hlib$motd
+}
+
+
+#============================================================================
+# Check for updates to the system
+chkupdate
+
+# Notify the user if we're using the global login.
+path (".") | scan (s1)
+if ( osfn("home$") != substr (s1, strldx("!",s1)+1, strlen(s1)) ) {
+ printf (" *** Using global login file: %slogin.cl\n", osfn("home$"))
+}
+;
+
+
+#============================================================================
+# Uncomment to initialize the SAMP interface on startup.
+if (deftask ("samp") == yes) {
+ printf (" *** Initializing SAMP .... ")
+ if (sampHubAccess() == yes) {
+ # Enable SAMP messaaging. Set default handlers that don't require
+ # VO capabilities.
+ samp quiet
+ samp ("on", >& "dev$null")
+# samp ("handler", "table.load.votable", "tinfo $url", >& "dev$null")
+# samp ("handler", "image.load.fits", "imstat $url", >& "dev$null")
+ samp noquiet
+ print ("on")
+ } else
+ print ("No Hub Available\n")
+}
+
+
+#============================================================================
+# Delete any old MTIO lock (magtape position) files.
+if (deftask ("mtclean"))
+ mtclean
+else
+ delete uparm$mt?.lok,uparm$*.wcs verify-
+
+
+#============================================================================
+print (" The following commands or packages are currently defined:\n")
+
+keep
+
diff --git a/unix/hlib/mach.h b/unix/hlib/mach.h
new file mode 120000
index 00000000..19fd90e9
--- /dev/null
+++ b/unix/hlib/mach.h
@@ -0,0 +1 @@
+mach32.h \ No newline at end of file
diff --git a/unix/hlib/mach32.h b/unix/hlib/mach32.h
new file mode 100644
index 00000000..0765113b
--- /dev/null
+++ b/unix/hlib/mach32.h
@@ -0,0 +1,34 @@
+# Machine Parameters
+
+define SZB_CHAR 2 # machine bytes per char
+define SZB_ADDR 1 # machine bytes per address increment
+define SZ_VMPAGE 256 # page size (1 if no virtual mem.)
+define MAX_DIGITS 25 # max digits in a number
+define NDIGITS_RP 7 # number of digits of real precision
+define NDIGITS_DP 16 # number of digits of precision (double)
+define MAX_EXPONENT 38 # max exponent, base 10
+define MAX_EXPONENTR 38 # IEEE single
+define MAX_EXPONENTD 308 # IEEE double
+
+define MAX_SHORT 32767 # largest numbers
+define MAX_INT 2147483647
+define MAX_LONG 2147483647
+define MAX_REAL 0.99e37 # anything larger is INDEF
+define MAX_DOUBLE 0.99d307
+define NBITS_BYTE 8 # nbits in a machine byte
+define NBITS_SHORT 16 # nbits in a short
+define NBITS_INT 32 # nbits in an integer
+define NBITS_LONG 32 # nbits in a long
+define EPSILONR (1.192e-7) # smallest E such that 1.0 + E > 1.0
+define EPSILOND (2.220d-16) # double precision epsilon
+define EPSILON EPSILONR
+
+# Is byte swapping needed for a 2 or 4 byte MII integer or a 4 or 8 byte
+# IEEE floating to convert to or from MII format on this machine?
+
+define BYTE_SWAP2 YES
+define BYTE_SWAP4 YES
+define BYTE_SWAP8 YES
+define IEEE_SWAP4 YES
+define IEEE_SWAP8 YES
+define IEEE_USED YES
diff --git a/unix/hlib/mach64.h b/unix/hlib/mach64.h
new file mode 100644
index 00000000..c87a96ff
--- /dev/null
+++ b/unix/hlib/mach64.h
@@ -0,0 +1,34 @@
+# Machine Parameters
+
+define SZB_CHAR 2 # machine bytes per char
+define SZB_ADDR 1 # machine bytes per address increment
+define SZ_VMPAGE 256 # page size (1 if no virtual mem.)
+define MAX_DIGITS 25 # max digits in a number
+define NDIGITS_RP 7 # number of digits of real precision
+define NDIGITS_DP 16 # number of digits of precision (double)
+define MAX_EXPONENT 38 # max exponent, base 10
+define MAX_EXPONENTR 38 # IEEE single
+define MAX_EXPONENTD 308 # IEEE double
+
+define MAX_SHORT 32767 # largest numbers
+define MAX_INT 2147483647
+define MAX_LONG 2147483647
+define MAX_REAL 0.99e37 # anything larger is INDEF
+define MAX_DOUBLE 0.99d307
+define NBITS_BYTE 8 # nbits in a machine byte
+define NBITS_SHORT 16 # nbits in a short
+define NBITS_INT 64 # nbits in an integer
+define NBITS_LONG 64 # nbits in a long
+define EPSILONR (1.192e-7) # smallest E such that 1.0 + E > 1.0
+define EPSILOND (2.220d-16) # double precision epsilon
+define EPSILON EPSILONR
+
+# Is byte swapping needed for a 2 or 4 byte MII integer or a 4 or 8 byte
+# IEEE floating to convert to or from MII format on this machine?
+
+define BYTE_SWAP2 YES
+define BYTE_SWAP4 YES
+define BYTE_SWAP8 YES
+define IEEE_SWAP4 YES
+define IEEE_SWAP8 YES
+define IEEE_USED YES
diff --git a/unix/hlib/math.h b/unix/hlib/math.h
new file mode 100644
index 00000000..42aa6ba0
--- /dev/null
+++ b/unix/hlib/math.h
@@ -0,0 +1,59 @@
+# MATH.H -- Definitions of various mathematical constants.
+# Values are given to 20 decimal places.
+# From Abramowitz & Stegun, Handbook of Mathematical Functions, Ch. 1.
+# LN denotes natural logarithm
+# LOG denote base 10 logarithm
+
+
+# Real precision definitions.
+
+define SQRTOF2 1.4142135623730950488
+
+define BASE_E 2.7182818284590452353
+define EXP_PI 23.140692632779269006
+
+define LN_2 .69314718055994530942
+define LN_10 2.3025850929940456840
+define LN_PI 1.1447298858494001741
+define LOG_E .43429448190325182765
+
+define PI 3.1415926535897932385
+define TWOPI 6.2831853071795864769
+define FOURPI 12.566370614359172953
+define HALFPI 1.5707963267948966192
+define SQRTOFPI 1.7724538509055160273
+
+define RADIAN 57.295779513082320877
+define RADTODEG (($1)*RADIAN)
+define DEGTORAD (($1)/RADIAN)
+
+define GAMMA .57721566490153286061 # Euler's constant
+define LN_GAMMA (-.54953931298164482234)
+define EXP_GAMMA 1.7810724179901979852
+
+
+# Double precision definitions.
+
+define DSQRTOF2 1.4142135623730950488d0
+
+define DBASE_E 2.7182818284590452353d0
+define DEXP_PI 23.140692632779269006d0
+
+define DLN_2 .69314718055994530942d0
+define DLN_10 2.3025850929940456840d0
+define DLN_PI 1.1447298858494001741d0
+define DLOG_E .43429448190325182765d0
+
+define DPI 3.1415926535897932385d0
+define DTWOPI 6.2831853071795864769d0
+define DFOURPI 12.566370614359172953d0
+define DHALFPI 1.5707963267948966192d0
+define DSQRTOFPI 1.7724538509055160273d0
+
+define DRADIAN 57.295779513082320877d0
+define DRADTODEG (($1)*DRADIAN)
+define DDEGTORAD (($1)/DRADIAN)
+
+define DGAMMA .57721566490153286061d0 # Euler's constant
+define DLN_GAMMA (-.54953931298164482234d0)
+define DEXP_GAMMA 1.7810724179901979852d0
diff --git a/unix/hlib/mkfloat.csh b/unix/hlib/mkfloat.csh
new file mode 100755
index 00000000..e65460c6
--- /dev/null
+++ b/unix/hlib/mkfloat.csh
@@ -0,0 +1,143 @@
+#!/bin/csh
+#
+# MKFLOAT.CSH -- Install the indicated version of the IRAF binaries, i.e.,
+# archive the current objects and libraries, set BIN to point to bin.FFF,
+# and set mkpkg to produce FFF binaries (FFF = f68881, ffpa, sparc, etc.).
+#
+# NOTE -- This script should be run only by the IRAF system manager. It is
+# assumed that the environment variables defined in the IRAF .login and in
+# hlib/irafuser.csh are defined.
+
+
+set ARCH = "$1"
+set DIRS = "lib pkg sys"
+set FILE = unix/hlib/mkpkg.inc
+set DFL = _DFL.mkfloat
+set TFL = _TFL.mkfloat
+
+set mach = `uname -s | tr '[A-Z]' '[a-z]'`
+set os_mach = `uname -s | tr '[A-Z]' '[a-z]' | cut -c1-6`
+
+unalias ls rm cat grep tar cmp diff echo ln mv zcat gunzip compress which
+unset noclobber
+
+# Set the following to -xpf for BSD Tar and to -xof for SYSV Tar.
+set TARXFLGS = -xpf
+#set TARXFLGS = -xof
+
+# set echo
+
+# See if we're able to compress the files.
+set do_compress = 1
+if (! -x `which compress` || $os_mach == "cygwin") then
+ if (! -x `which gzip`) then
+ echo "no compress command found, OBJS.arc files will not be compressed"
+ set do_compress = 0
+ else
+ set COMPRESS = "gzip -S .Z"
+ endif
+else
+ set COMPRESS = `which compress`
+endif
+
+# Check for an error in the package structure, i.e. the 'bin' is a directory
+# and not a symlink we can change. It's valid for an external package to
+# have only a 'bin' directory, but then it's toplevel mkpkg shouldn't be
+# calling us.
+if ("`ls -l bin | grep 'l.........'`" == "") then
+ echo "'bin' is a directory, should be symbolic link pointing to valid"
+ echo "architecture. Possible error in copying package structure??"
+ echo "Use tar to copy and move directories to preserve links."
+ exit 1
+else
+ set float = `ls -l bin | sed -e 's+^.*bin\.++'`
+endif
+if ("$ARCH" == "") then
+ echo "system is configured for $float"
+ exit 0
+else if ($float == "$ARCH") then
+ echo "system is already configured for $ARCH"
+ exit 0
+else if (! -e bin.$ARCH) then
+ echo "must set up a bin.$ARCH subdirectory first"
+ exit 1
+endif
+
+# Get the list of directories to be changed.
+shift
+if ("$1" == "-d") then
+ set DIRS = ""
+ shift
+ while ("$1" != "")
+ set DIRS = "$DIRS $1"
+ shift
+ end
+endif
+
+echo -n \
+"deleting any dreg .e files left lying about in the source directories... "
+rmbin -n -o .a .o .e .E $DIRS > $TFL; grep '\.[eE]$' $TFL | tee _.e_files
+rm -f `cat _.e_files` _.e_files; grep -v '\.[eE]$' $TFL > $DFL; rm $TFL
+echo "done"
+
+echo -n "archiving and deleting $float objects... "
+if (-e bin.$float) then
+ if (! -z $DFL) then
+ tar -cf bin.$float/OBJS.arc `cat $DFL`
+ tar -tf bin.$float/OBJS.arc | grep -v '/$' | cut -d " " -f 1 > $TFL
+ cmp -s $DFL $TFL
+ if ($status) then
+ echo "Error: cannot archive $float objects"
+ diff $DFL $TFL
+ rm $DFL $TFL bin.$float/OBJS.arc
+ exit 1
+ else if ($do_compress == 1) then
+ echo "done"
+ echo -n "compressing bin.$float/OBJS.arc "
+ nice $COMPRESS -f bin.$float/OBJS.arc &
+ rm -f $TFL
+ endif
+ endif
+else
+ echo "old objects will not be archived as no bin.$float directory found"
+endif
+echo ""
+rm -f `cat $DFL` $DFL
+
+if ($ARCH != generic) then
+ echo -n "restoring archived $ARCH objects... "
+ if (-e bin.$ARCH/OBJS.arc.Z) then
+ if ({ (zcat bin.$ARCH/OBJS.arc.Z | tar $TARXFLGS -) }) then
+ rm -f bin.$ARCH/OBJS.arc.Z
+ endif
+ echo "done"
+ else if (-e bin.$ARCH/OBJS.arc.gz) then
+ if ({ (cat bin.$ARCH/OBJS.arc.gz | gunzip | tar $TARXFLGS -) }) then
+ rm -f bin.$ARCH/OBJS.arc.gz
+ endif
+ echo "done"
+ else if (-e bin.$ARCH/OBJS.arc) then
+ if ({ (cat bin.$ARCH/OBJS.arc | tar $TARXFLGS -) }) then
+ rm -f bin.$ARCH/OBJS.arc
+ endif
+ echo "done"
+ else
+ echo ""
+ echo "no object archive found; full sysgen will be needed"
+ endif
+endif
+
+# Set BIN to point to new directory.
+rm -f bin; ln -s bin.$ARCH bin
+
+# If script is run at IRAF root, edit mkpkg.inc for new float option.
+#if (-e $FILE) then
+# sed -e "s+= $float+= $ARCH+" $FILE > temp; mv -f temp $FILE
+#endif
+
+# Warn the user if the new ARCH does not match their current IRAFARCH.
+if ($?IRAFARCH == 1) then
+ if ($ARCH != $IRAFARCH && $ARCH != generic) then
+ echo "Warning: IRAFARCH is still set in your environment to $IRAFARCH"
+ endif
+endif
diff --git a/unix/hlib/mkfloat.sh b/unix/hlib/mkfloat.sh
new file mode 100755
index 00000000..66da9170
--- /dev/null
+++ b/unix/hlib/mkfloat.sh
@@ -0,0 +1,142 @@
+#!/bin/bash
+#
+# MKFLOAT.SH -- Install the indicated version of the IRAF binaries, i.e.,
+# archive the current objects and libraries, BIN to point to bin.FFF,
+# and mkpkg to produce FFF binaries (FFF=f68881, ffpa, sparc, etc.).
+#
+# NOTE -- This script should be run only by the IRAF system manager. It is
+# assumed that the environment variables defined in the IRAF .login and in
+# hlib/irafuser.csh are defined.
+
+
+ARCH="$1"
+DIRS="lib pkg sys"
+FILE=unix/hlib/mkpkg.inc
+DFL=_DFL.mkfloat
+TFL=_TFL.mkfloat
+
+mach=`uname -s | tr '[A-Z]' '[a-z]'`
+os_mach=`uname -s | tr '[A-Z]' '[a-z]' | cut -c1-6`
+
+
+# Set the following to -xpf for BSD Tar and to -xof for SYSV Tar.
+TARXFLGS=-xpf
+#TARXFLGS=-xof
+
+# See if we're able to compress the files.
+do_compress=1
+if [ ! -x `which compress` -o "$os_mach" = "cygwin" ]; then
+ if [ ! -x `which gzip` ]; then
+ /bin/echo "no compress command found, files will not be compressed"
+ do_compress=0
+ else
+ COMPRESS="gzip -S .Z"
+ fi
+else
+ COMPRESS=`which compress`
+fi
+
+# Check for an error in the package structure, i.e. the 'bin' is a directory
+# and not a symlink we can change. It's valid for an external package to
+# have only a 'bin' directory, but then it's toplevel mkpkg shouldn't be
+# calling us.
+if [ "`ls -l bin | grep 'l.........'`" = "" ]; then
+ /bin/echo "'bin' is a directory, should be symbolic link pointing to valid"
+ /bin/echo "architecture. Possible error in copying package structure??"
+ /bin/echo "Use tar to copy and move directories to preserve links."
+ exit 1
+else
+ float=`ls -l bin | sed -e 's+^.*bin\.++'`
+fi
+if [ "$ARCH" = "" ]; then
+ /bin/echo "system is configured for $float"
+ exit 0
+elif [ "$float" = "$ARCH" ]; then
+ /bin/echo "system is already configured for $ARCH"
+ exit 0
+elif [ ! -e bin.$ARCH ]; then
+ /bin/echo "must up a bin.$ARCH subdirectory first"
+ exit 1
+fi
+
+# Get the list of directories to be changed.
+shift
+DIRS=""
+if [ "$1" = "-d" ]; then
+ DIRS=""
+ shift
+ while : ; do
+ DIRS="$DIRS $1"
+ shift
+ done
+fi
+
+/bin/echo -n \
+"deleting any dreg .e files left lying about in the source directories... "
+rmbin -n -o .a .o .e .E $DIRS > $TFL; grep '\.[eE]$' $TFL | tee _.e_files
+rm -f `cat _.e_files` _.e_files; grep -v '\.[eE]$' $TFL > $DFL; rm $TFL
+/bin/echo "done"
+
+/bin/echo -n "archiving and deleting $float objects... "
+if [ -e bin.$float ]; then
+ if [ -s $DFL ]; then
+ tar -cf bin.$float/OBJS.arc `cat $DFL`
+ tar -tf bin.$float/OBJS.arc | grep -v '/$' | cut -d " " -f 1 > $TFL
+ cmp -s $DFL $TFL
+ if [ $status ]; then
+ /bin/echo "Error: cannot archive $float objects"
+ diff $DFL $TFL
+ rm $DFL $TFL bin.$float/OBJS.arc
+ exit 1
+ elif (( $do_compress>0 )); then
+ /bin/echo "done"
+ /bin/echo -n "compressing bin.$float/OBJS.arc "
+ nice $COMPRESS -f bin.$float/OBJS.arc &
+ rm -f $TFL
+ fi
+ fi
+else
+ /bin/echo "old objects will not be archived as no bin.$float dir found"
+fi
+/bin/echo "done."
+rm -f `cat $DFL` $DFL
+
+if [ $ARCH != "generic" ]; then
+ /bin/echo -n "restoring archived $ARCH objects... "
+ if [ -e bin.$ARCH/OBJS.arc.Z ]; then
+ zcat bin.$ARCH/OBJS.arc.Z | tar $TARXFLGS -
+ if (( $status<1 )); then
+ rm -f bin.$ARCH/OBJS.arc.Z
+ fi
+ /bin/echo "done"
+ elif [ -e bin.$ARCH/OBJS.arc.gz ]; then
+ cat bin.$ARCH/OBJS.arc.gz | gunzip | tar $TARXFLGS -
+ if (( $status<1 )); then
+ rm -f bin.$ARCH/OBJS.arc.gz
+ fi
+ /bin/echo "done"
+ elif [ -e bin.$ARCH/OBJS.arc ]; then
+ cat bin.$ARCH/OBJS.arc | tar $TARXFLGS -
+ if (( $status<1 )); then
+ rm -f bin.$ARCH/OBJS.arc
+ fi
+ /bin/echo "done"
+ else
+ /bin/echo ""
+ /bin/echo "no object archive found; full sysgen will be needed"
+ fi
+fi
+
+# Set BIN to point to new directory.
+rm -f bin; ln -s bin.$ARCH bin
+
+
+# Warn the user if the new ARCH does not match their current IRAFARCH.
+if [ -n $IRAFARCH ]; then
+ if [ "$ARCH" != "$IRAFARCH" ]; then
+ /bin/echo "Warning: IRAFARCH is still in your environment to $IRAFARCH"
+ fi
+ if [ "$ARCH" == "generic" ]; then
+ /bin/echo "Warning: IRAFARCH is still in your environment to 'generic'"
+ fi
+fi
diff --git a/unix/hlib/mkiraf.csh b/unix/hlib/mkiraf.csh
new file mode 100755
index 00000000..d89aecb5
--- /dev/null
+++ b/unix/hlib/mkiraf.csh
@@ -0,0 +1,119 @@
+#! /bin/csh
+# MKIRAF -- Setup the IRAF environment for a user. Should be called from the
+# directory from which the user will thereafter type "cl" to start a session.
+
+# The following definitions are site dependent. [SITEDEP]
+
+set iraf = "/iraf/iraf"
+set imdir = "/iraf/imdirs"
+set cachedir = "/iraf/cache"
+set ttymsg =\
+"Terminal types: xgterm,xterm,gterm,vt640,vt100,etc."
+
+# ------------- (end of site dependent definitions) ------------------------
+
+unalias rm mkdir pwd echo mkdir sed whoami pushd popd
+
+# The following kludge is for Solaris, which doesn't have whoami.
+if (! $?USER) then
+ setenv USER `whoami`
+endif
+alias whoami "(echo $USER)"
+
+# Protect against running mkiraf in an iraf system directory.
+pushd $iraf >& /dev/null; set irafdir = `pwd`; popd >& /dev/null
+if ("`pwd | grep $irafdir`" != "") then
+ if ("`pwd | grep iraf/local`" == "") then
+ echo "Error: current directory is not an iraf user login directory"
+ exit 1
+ endif
+endif
+
+
+# Process command-line arguments.
+set user_term = "none"
+set init = 0
+set quiet = 0
+
+while ($#argv >= 1)
+ if ("$argv[1]" == "-t" || "$argv[1]" == "-term") then
+ set user_term = $argv[2]
+ shift
+ else if ("$argv[1]" == "-i" || "$argv[1]" == "-init") then
+ set init = 1
+ else if ("$argv[1]" == "-q" || "$argv[1]" == "-quiet") then
+ set quiet = 1
+ else
+ echo "Unknown flag '"$argv[1]"'"
+ endif
+ shift
+end
+
+
+
+# Make an empty "uparm" (user parameter) directory.
+if (! -e uparm) then
+ if ($quiet == 0) then
+ echo '-- creating a new uparm directory'
+ endif
+ mkdir uparm
+else
+ if ($init == 0) then
+ echo -n 'Initialize uparm? (y|n): '
+ set yesno = $<
+ if ($yesno == 'y' || $yesno == 'yes') then
+ echo '-- initializing uparm'
+ rm -rf uparm; mkdir uparm
+ endif
+ else
+ if ($quiet == 0) then
+ echo '-- initializing uparm'
+ endif
+ /bin/rm -rf uparm; mkdir uparm
+ endif
+endif
+
+if (-e login.cl) then
+ mv -f login.cl login.cl.OLD
+endif
+
+
+# Edit the login.cl file, setting the user's home directory, default image
+# directory, and terminal.
+
+if ($user_term == "none") then
+ echo $ttymsg
+ echo -n 'Enter terminal type: '
+ echo $< | sed -e "s;.*;s+U_TERM+&+;" > _sed
+else
+ echo $user_term | sed -e "s;.*;s+U_TERM+&+;" > _sed
+endif
+
+pwd | sed -e "s;.*;s+U_HOME+&/+;" >> _sed
+pwd | sed -e "s;.*;s+U_UPARM+&/uparm/+;" >> _sed
+
+if (! (-e "$imdir" && -w "$imdir") ) then
+ set imdir = HDR$
+ whoami | sed -e "s;.*;s+U_IMDIR+${imdir}/+;" >> _sed
+else
+ whoami | sed -e "s;.*;s+U_IMDIR+${imdir}/&/+;" >> _sed
+ whoami | sed -e "s;.*;mkdir $imdir/& 2> /dev/null;" | sh
+endif
+
+if (! (-e "$cachedir" && -w "$cachedir") ) then
+ set cachedir = /tmp/
+ whoami | sed -e "s;.*;s+U_CACHEDIR+${cachedir}/+;" >> _sed
+else
+ whoami | sed -e "s;.*;s+U_CACHEDIR+${cachedir}/&/+;" >> _sed
+ whoami | sed -e "s;.*;mkdir $cachedir/& 2> /dev/null;" | sh
+endif
+
+whoami | sed -e "s;.*;s+U_USER+&+;" >> _sed
+
+sed -f _sed < $iraf/unix/hlib/login.cl > login.cl; rm _sed
+
+
+if ($quiet == 0) then
+ echo 'A new LOGIN.CL file has been created in the current directory.'
+ echo 'You may wish to review and edit this file to change the defaults.'
+endif
diff --git a/unix/hlib/mkiraf.sh b/unix/hlib/mkiraf.sh
new file mode 100755
index 00000000..e62072ce
--- /dev/null
+++ b/unix/hlib/mkiraf.sh
@@ -0,0 +1,189 @@
+#!/bin/bash
+#
+# MKIRAF -- Setup the IRAF environment for a user. Should be called from the
+# directory from which the user will thereafter type "cl" to start a session.
+#
+# Usage:
+#
+# % mkiraf [--term=<term>] [--init] [--noinit] [--quiet]
+#
+# Where
+# -t,--term=<term> Set the default terminal type
+# -i,--init Initialize the uparm directory
+# -n,--noinit Do not nitialize the uparm directory
+# -q,--quiet Suppress output
+#
+# Use of the -t, -i, or -n options will suppress the corresponding prompts
+# for input.
+
+
+ # Initialize the script variables.
+myterm="none"
+uparm_init=-1
+quiet=0
+def=0
+defterm="xgterm"
+
+ # Paths edited by the install script.
+iraf="/iraf/iraf/"
+imdir="/iraf/imdir/"
+cachedir="/iraf/cache/"
+
+
+# ------------- (end of site dependent definitions) ------------------------
+
+# The following kludge is for Solaris, which doesn't have whoami.
+if [ "$USER" = "" ]; then
+ USER=`whoami`
+fi
+
+
+# Parse the command-line options.
+for i in "$@"
+do
+ case $i in
+ -t=*|--term=*) # Set the default terminal type
+ myterm=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
+ ;;
+ -d|--default) # Create default login dir
+ def=1
+ quiet=1
+ echo ""
+ ;;
+ -i|--init) # Initialize uparm directory
+ uparm_init=1
+ ;;
+ -n|--noinit) # Don't initialize uparm directory
+ uparm_init=0
+ ;;
+ -q|--quiet) # Suppress output
+ quiet=1
+ ;;
+ *)
+ /bin/echo "Error: unknown option '$i'"
+ exit 1
+ ;;
+ esac
+done
+
+
+
+# Protect against running mkiraf in an iraf system directory.
+irafdir=`cd $iraf ; pwd`
+if [ ! "`pwd | grep $irafdir`" = "" ]; then
+ if [ "`pwd | grep iraf/local`" = "" ]; then
+ /bin/echo "Error: current directory is not an iraf user login directory"
+ exit 1
+ fi
+fi
+
+if (( $def == 1 )); then
+ imdir=`echo $HOME`"/.iraf/imdir/"
+ cachedir=`echo $HOME`"/.iraf/cache/"
+ #myterm="xgterm"
+ cd $HOME
+ if [ ! -e .iraf ]; then
+ mkdir $HOME/.iraf
+ fi
+ cd $HOME/.iraf
+ if [ ! -e bin ]; then
+ mkdir bin
+ fi
+ if [ ! -e imdir ]; then
+ mkdir imdir
+ fi
+ if [ ! -e cache ]; then
+ mkdir cache
+ fi
+ cp $iraf/unix/hlib/setup.*sh .
+fi
+
+
+# Make an empty "uparm" (user parameter) directory.
+if [ ! -e uparm ]; then
+ if (( quiet<1 )); then
+ if (( $def == 0 )); then
+ /bin/echo '-- creating a new uparm directory'
+ fi
+ fi
+ mkdir uparm
+elif [ ! -d uparm ]; then
+ /bin/echo "Error: a file uparm exists"
+ exit 1
+else
+ if (( uparm_init<0 )) ; then
+ if (( quiet<1 )) ; then
+ /bin/echo -n 'Initialize uparm? (y|n): '
+ read yesno
+ else
+ yesno="yes"
+ fi
+ if [ "$yesno" = "y" -o "$yesno" = "yes" ]; then
+ if (( quiet<1 )); then
+ /bin/echo '-- initializing uparm'
+ fi
+ /bin/rm -rf uparm
+ mkdir uparm
+ fi
+ elif (( uparm_init==1 )); then
+ if (( quiet<1 )); then
+ /bin/echo '-- initializing uparm'
+ fi
+ /bin/rm -rf uparm
+ mkdir uparm
+ fi
+fi
+
+# Edit the login.cl file, setting the user's home directory, default image
+# directory, and terminal.
+
+if [ "$myterm" == "none" ]; then
+ /bin/echo "Terminal types: xgterm,xtermjh,xterm,etc."
+ /bin/echo -n 'Enter terminal type ('$defterm'): '
+ read myterm
+ if [ "$myterm" == "" ]; then
+ myterm=$defterm
+ fi
+fi
+
+# Initialize the 'imdir' and 'cachedir' paths.
+IDIR="${imdir}$USER"
+if [ -d $imdir ]; then
+ mkdir -p $IDIR &> /dev/null
+fi
+if [ ! -d $IDIR -o ! -w $IDIR ]; then
+ IDIR="HDR$"
+fi
+
+CDIR="${cachedir}$USER"
+if [ -d $cachedir ]; then
+ mkdir -p $CDIR &> /dev/null
+fi
+if [ ! -d $CDIR -o ! -w $CDIR ]; then
+ CDIR="/tmp"
+fi
+
+
+# Back up the old login.cl file.
+if [ -e login.cl ]; then
+ mv -f login.cl login.cl.OLD
+fi
+
+# Create the path editing script.
+_sed() {
+ /bin/echo $1 | sed -e "s;.*;s+U_TERM+&+;"
+ pwd | sed -e "s;.*;s+U_HOME+&/+;"
+ pwd | sed -e "s;.*;s+U_UPARM+&/uparm/+;"
+ /bin/echo $IDIR | sed -e "s;.*;s+U_IMDIR+&/+;"
+ /bin/echo $CDIR | sed -e "s;.*;s+U_CACHEDIR+&/+;"
+ /bin/echo $USER | sed -e "s;.*;s+U_USER+&+;"
+}
+
+sed "`_sed $myterm`" < ${iraf}/unix/hlib/login.cl > login.cl
+
+if (( $def == 0 )); then
+ if (( quiet<1 )) ; then
+ /bin/echo 'A new LOGIN.CL file has been created in the current directory.'
+ /bin/echo 'You may wish to review and edit this file to change the defaults.'
+ fi
+fi
diff --git a/unix/hlib/mkmlist.csh b/unix/hlib/mkmlist.csh
new file mode 100755
index 00000000..e4435916
--- /dev/null
+++ b/unix/hlib/mkmlist.csh
@@ -0,0 +1,21 @@
+#! /bin/csh
+# MKMLIST -- Make a library member list on the standard output, e.g., for
+# inclusion in a MKPKG file.
+
+# try to protect people from themselves...
+unalias ls ex rm grep sed sort uniq cat
+
+ls *.[xfcs] > _ml1
+grep '^include' *.x >> _ml1
+
+grep -v '#' _ml1 | grep -v '<syserr.h>' | sort | uniq |\
+ sed -e 's/^.*include./ /' | sed -e 's/\"//g' |\
+ sed -e 's/\.x/.x /' > _ml2
+
+ex - << 'EOC' _ml2
+g/^ / .-1,.j
+1,$s/^/ /
+wq
+'EOC'
+
+cat _ml2; rm _ml[12]
diff --git a/unix/hlib/mkmlist.sh b/unix/hlib/mkmlist.sh
new file mode 100755
index 00000000..7d61264b
--- /dev/null
+++ b/unix/hlib/mkmlist.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+# MKMLIST -- Make a library member list on the standard output, e.g., for
+# inclusion in a MKPKG file.
+
+_ml1() {
+ ls *.[xfcs]
+ grep '^include' *.x
+}
+
+_ml2() {
+ _ml1 | grep -v '#' | grep -v '<syserr.h>' | sort | uniq |\
+ sed -e 's/^.*include./ /' | sed -e 's/\"//g' |\
+ sed -e 's/\.x/.x /' | tr -s '\n ' '\t'
+}
+
+echo -n " "
+_ml2 | sed -e 's/\( \)\([^<]\)/# \2/g' | tr '#' '\n' |\
+ sed -e 's/> </> </g'
+
diff --git a/unix/hlib/mkpkg.inc b/unix/hlib/mkpkg.inc
new file mode 100644
index 00000000..f2f61d04
--- /dev/null
+++ b/unix/hlib/mkpkg.inc
@@ -0,0 +1,77 @@
+# Global (possibly system dependent) definitions for MKPKG.
+
+$verbose
+
+$set MACH = $(IRAFARCH) # machine/fpu type
+$set HOSTID = unix # host system name
+$set SITEID = noao # site name
+
+$ifeq (MACH, freebsd) then
+$set XFLAGS = "-c -w -/m32" # default XC compile flags
+$set XVFLAGS = "-c -w" -/m32 # VOPS XC compile flags
+$set LFLAGS = "-z -/static -/m32" # default XC link flags
+$else $ifeq (MACH, linux) then
+$set XFLAGS = "-c -w" # default XC compile flags
+$set XVFLAGS = "-c -w" # VOPS XC compile flags
+$set LFLAGS = "-Nz" # default XC link flags
+$else $ifeq (MACH, linux64) then
+$set XFLAGS = "-c -w -/g -/m64" # default XC compile flags
+$set XVFLAGS = "-c -w -/g -/m64" # VOPS XC compile flags
+$set LFLAGS = "-Nz -/g -/m64" # default XC link flags
+$else $ifeq (MACH, redhat) then
+$set XFLAGS = "-c -w" # default XC compile flags
+$set XVFLAGS = "-c -w" # VOPS XC compile flags
+$set LFLAGS = "-Nz" # default XC link flags
+$else $ifeq (MACH, macosx) then
+$set XFLAGS = "-c -w" # default XC compile flags
+$set XVFLAGS = "-c -w" # VOPS XC compile flags
+$set LFLAGS = "-Nz" # default XC link flags
+$else $ifeq (MACH, macintel) then
+$set XFLAGS = "-c -w" # default XC compile flags
+$set XVFLAGS = "-c -w" # VOPS XC compile flags
+$set LFLAGS = "-Nz" # default XC link flags
+$else $ifeq (MACH, ipad) then
+$set XFLAGS = "-c -w" # default XC compile flags
+$set XVFLAGS = "-c -w" # VOPS XC compile flags
+$set LFLAGS = "-Nz" # default XC link flags
+$else $ifeq (MACH, linuxppc) then
+$set XFLAGS = "-c -w" # default XC compile flags
+$set XVFLAGS = "-c -w" # VOPS XC compile flags
+$set LFLAGS = "-Nz" # default XC link flags
+$else $ifeq (MACH, sunos) then
+$set XFLAGS = "-c -w" # default XC compile flags
+$set XVFLAGS = "-c -w" # VOPS XC compile flags
+$set LFLAGS = "-Nz" # default XC link flags
+$else $ifeq (MACH, cygwin) then
+$set XFLAGS = "-c -w" # default XC compile flags
+$set XVFLAGS = "-c -w" # VOPS XC compile flags
+$set LFLAGS = "-Nz" # default XC link flags
+$else
+$set XFLAGS = "-c -w" # default XC compile flags
+$set XVFLAGS = "-c -w" # VOPS XC compile flags
+$set LFLAGS = "-z -/static" # default XC link flags
+$end
+
+$set USE_LIBMAIN = yes # update lib$libmain.o (root object)
+$set USE_KNET = yes # use the KI (network interface)
+$set USE_SHLIB = no # use (update) the shared library
+$set USE_CCOMPILER = yes # use the C compiler
+$set USE_GENERIC = yes # use the generic preprocessor
+$set USE_NSPP = no # make the NCAR/NSPP graphics kernel
+$set USE_IIS = no # make the IIS display control package
+$set USE_CALCOMP = no # make the Calcomp graphics kernel
+$set LIB_CALCOMP = "-lcalcomp" # name of host system calcomp library
+
+$ifeq (MACH, linux, redhat, macosx, macintel, ipad) then
+ $include "hlib$mkpkg.sf.MACX"
+$else $ifeq (MACH, linux, redhat, linuxppc) then
+ $include "hlib$mkpkg.sf.LNUX"
+$else $ifeq (MACH, linux64) then
+ $include "hlib$mkpkg.sf.LNUX64"
+$else $ifeq (MACH, freebsd) then
+ $include "hlib$mkpkg.sf.FBSD"
+$else $ifeq (MACH, sunos) then
+ $include "hlib$mkpkg.sf.SX86"
+$else $ifeq (MACH, cygwin) then
+ $include "hlib$mkpkg.sf.CYGW"
+$end
diff --git a/unix/hlib/mkpkg.sf.CYGW b/unix/hlib/mkpkg.sf.CYGW
new file mode 100644
index 00000000..bf27cba9
--- /dev/null
+++ b/unix/hlib/mkpkg.sf.CYGW
@@ -0,0 +1,50 @@
+# Mkpkg special file list for Linux/IRAF, GNU compilers.
+
+$special "sys$osb/": aclrb.c as$aclrb.c
+ bytmov.c as$bytmov.c
+ ieeer.x as$ieeer.x
+ ieeed.x as$ieeed.x
+ ;
+
+$special "sys$vops/ak/": aclrc.x as$aclrc.c
+ aclrs.x as$aclrs.c
+ aclri.x as$aclri.c
+ aclrl.x as$aclrl.c
+ aclrr.x as$aclrr.c
+ aclrd.x as$aclrd.c
+ ;
+
+$special "sys$vops/lz/": amovc.x as$amovc.c
+ amovs.x as$amovs.c
+ amovi.x as$amovi.c
+ amovl.x as$amovl.c
+ amovr.x as$amovr.c
+ amovd.x as$amovd.c
+ ;
+
+#$special "sys$memdbg/": zrtadr.c as$zrtadr.s ;
+
+
+# These routines use local include files with multi-line macros
+
+$set XARCH = '& "$xc -c -A &"'
+$special "sys$plio/tf/":
+ plrropi.x $(XARCH)
+ plrropl.x $(XARCH)
+ plrrops.x $(XARCH)
+ ;
+
+$special "sys$plio/":
+ pllnext.x $(XARCH)
+ pllrop.x $(XARCH)
+ pllsten.x $(XARCH)
+ plsectnc.x $(XARCH)
+ plsectne.x $(XARCH)
+ ;
+
+$set XBIG = '& "$xc -c -w -/Nx512 -/Ns2048 &"'
+$special "sys$fmtio/": evvexpr.x $(XBIG) ;
+
+$set XNL = '& "$xc -c -/NL400 &"'
+$special "math$slalib/": obs.f $(XNL) ;
+
diff --git a/unix/hlib/mkpkg.sf.FBSD b/unix/hlib/mkpkg.sf.FBSD
new file mode 100644
index 00000000..8554d0c3
--- /dev/null
+++ b/unix/hlib/mkpkg.sf.FBSD
@@ -0,0 +1,40 @@
+# Mkpkg special file list for FreeBSD/IRAF, GNU compilers.
+
+$special "sys$osb/": aclrb.c as$aclrb.c
+ bytmov.c as$bytmov.c
+ ieeer.x as$ieeer.x
+ ieeed.x as$ieeed.x
+ ;
+
+$special "sys$vops/ak/": aclrc.x as$aclrc.c
+ aclrs.x as$aclrs.c
+ aclri.x as$aclri.c
+ aclrl.x as$aclrl.c
+ aclrr.x as$aclrr.c
+ aclrd.x as$aclrd.c
+ ;
+
+$special "sys$vops/lz/": amovc.x as$amovc.c
+ amovs.x as$amovs.c
+ amovi.x as$amovi.c
+ amovl.x as$amovl.c
+ amovr.x as$amovr.c
+ amovd.x as$amovd.c
+ ;
+
+#$special "sys$memdbg/": zrtadr.c as$zrtadr.s ;
+
+
+# The iraf main has to be compiled without optimization on the Sun-4
+# as setjmp does not save the register set.
+
+#$set XNO = '& "$xc -cq &"'
+#$special "sys$etc/":
+# main.x $(XNO)
+# ;
+
+$set XBIG = '& "$xc -c -w -/Nx512 -/Ns2048 &"'
+$special "sys$fmtio/": evvexpr.x $(XBIG) ;
+
+$set XNL = '& "$xc -c -/NL400 &"'
+$special "math$slalib/": obs.f $(XNL) ;
diff --git a/unix/hlib/mkpkg.sf.I386 b/unix/hlib/mkpkg.sf.I386
new file mode 100644
index 00000000..97b0133d
--- /dev/null
+++ b/unix/hlib/mkpkg.sf.I386
@@ -0,0 +1,92 @@
+# Mkpkg special file list for SUN/IRAF, SUN/UNIX V3.2.
+
+# All files needing special processing for the local host operating system,
+# e.g., to permit host dependent optimization or to work around compiler bugs,
+# should be listed here.
+
+# Files optimized for the local host system.
+# -----------------------------------------
+
+$special "sys$osb/": aclrb.c as$aclrb.c
+ bytmov.c as$bytmov.c
+ ieeer.x as$ieeer.x
+ ieeed.x as$ieeed.x
+ ;
+
+$special "sys$vops/ak/": aclrc.x as$aclrc.c
+ aclrs.x as$aclrs.c
+ aclri.x as$aclri.c
+ aclrl.x as$aclrl.c
+ aclrr.x as$aclrr.c
+ aclrd.x as$aclrd.c
+ ;
+
+$special "sys$vops/lz/": amovc.x as$amovc.c
+ amovs.x as$amovs.c
+ amovi.x as$amovi.c
+ amovl.x as$amovl.c
+ amovr.x as$amovr.c
+ amovd.x as$amovd.c
+ ;
+
+#$special "sys$gio/nspp/sysint/": ishift.x as$ishift.s ;
+#$special "sys$gio/ncarutil/sysint/": ishift.x as$ishift.s ;
+
+# Files requiring special compilation due to host compiler bugs.
+# -------------------------------------------------------------
+
+$set XNO = '& "$xc -cq -/$(MACH) &"'
+$set XO1 = '& "$xc -cq -/O1 -/$(MACH) &"'
+$set XO2 = '& "$xc -cq -/O2 -/$(MACH) &"'
+
+$special "sys$vops/lz/": amods.x as$amods.s ;
+
+$special "sys$etc/":
+ onerror.x $(XNO)
+ onexit.x $(XNO)
+ ;
+$special "sys$gio/ncarutil/":
+ conrec.f $(XNO)
+ srface.f $(XNO)
+ pwrzi.f $(XNO)
+ pwrzs.f $(XNO)
+ ;
+
+$special "sys$gio/cursor/":
+ grcwcs.x $(XNO);
+
+$special "sys$mwcs/":
+ wftan.x $(XNO);
+
+# The following causes the compiler to produce semi-infinite intermediate code
+# tables, necessitating use of reduced levels (O1 or O2) of optimization.
+
+$special "sys$osb/":
+ achtbu.c $(XO1)
+ achtcu.c $(XO1)
+ achtdu.c $(XO1)
+ achtiu.c $(XO1)
+ achtlu.c $(XO1)
+ achtru.c $(XO1)
+ achtsu.c $(XO1)
+ achtuu.c $(XO1)
+ achtxu.c $(XO1)
+ achtub.c $(XO1)
+ achtuc.c $(XO1)
+ achtud.c $(XO1)
+ achtui.c $(XO1)
+ achtul.c $(XO1)
+ achtur.c $(XO1)
+ achtus.c $(XO1)
+ achtuu.c $(XO1)
+ achtux.c $(XO1)
+ ;
+
+# Partial optimization needed to prevent infinite loop in iropt.
+# In main.c and errs.c, no optimization is needed to avoid an optimizer problem
+# associated with ZSVJMP (setjmp). I tried using a #pragma to fix this but
+# it didn't work.
+
+$special "$(pkg)cl/": ytab.c & "$xc -cq -/O2 &"
+ main.c & "$xc -cq &"
+ errs.c & "$xc -cq &";
diff --git a/unix/hlib/mkpkg.sf.LNUX b/unix/hlib/mkpkg.sf.LNUX
new file mode 100644
index 00000000..3db4dc03
--- /dev/null
+++ b/unix/hlib/mkpkg.sf.LNUX
@@ -0,0 +1,41 @@
+# Mkpkg special file list for Linux/IRAF, GNU compilers.
+
+$special "sys$osb/": aclrb.c as$aclrb.c
+ bytmov.c as$bytmov.c
+ ieeer.x as$ieeer.x
+ ieeed.x as$ieeed.x
+ ;
+
+$special "sys$vops/ak/": aclrc.x as$aclrc.c
+ aclrs.x as$aclrs.c
+ aclri.x as$aclri.c
+ aclrl.x as$aclrl.c
+ aclrr.x as$aclrr.c
+ aclrd.x as$aclrd.c
+ ;
+
+$special "sys$vops/lz/": amovc.x as$amovc.c
+ amovs.x as$amovs.c
+ amovi.x as$amovi.c
+ amovl.x as$amovl.c
+ amovr.x as$amovr.c
+ amovd.x as$amovd.c
+ ;
+
+#$special "sys$memdbg/": zrtadr.c as$zrtadr.s ;
+
+
+# The iraf main has to be compiled without optimization on the Sun-4
+# as setjmp does not save the register set.
+
+#$set XNO = '& "$xc -cq &"'
+#$special "sys$etc/":
+# main.x $(XNO)
+# ;
+
+$set XBIG = '& "$xc -c -w -/Nx512 -/Ns3072 &"'
+$special "sys$fmtio/": evvexpr.x $(XBIG) ;
+
+$set XNL = '& "$xc -c -/NL400 &"'
+$special "math$slalib/": obs.f $(XNL) ;
+
diff --git a/unix/hlib/mkpkg.sf.LNUX64 b/unix/hlib/mkpkg.sf.LNUX64
new file mode 100644
index 00000000..3db4dc03
--- /dev/null
+++ b/unix/hlib/mkpkg.sf.LNUX64
@@ -0,0 +1,41 @@
+# Mkpkg special file list for Linux/IRAF, GNU compilers.
+
+$special "sys$osb/": aclrb.c as$aclrb.c
+ bytmov.c as$bytmov.c
+ ieeer.x as$ieeer.x
+ ieeed.x as$ieeed.x
+ ;
+
+$special "sys$vops/ak/": aclrc.x as$aclrc.c
+ aclrs.x as$aclrs.c
+ aclri.x as$aclri.c
+ aclrl.x as$aclrl.c
+ aclrr.x as$aclrr.c
+ aclrd.x as$aclrd.c
+ ;
+
+$special "sys$vops/lz/": amovc.x as$amovc.c
+ amovs.x as$amovs.c
+ amovi.x as$amovi.c
+ amovl.x as$amovl.c
+ amovr.x as$amovr.c
+ amovd.x as$amovd.c
+ ;
+
+#$special "sys$memdbg/": zrtadr.c as$zrtadr.s ;
+
+
+# The iraf main has to be compiled without optimization on the Sun-4
+# as setjmp does not save the register set.
+
+#$set XNO = '& "$xc -cq &"'
+#$special "sys$etc/":
+# main.x $(XNO)
+# ;
+
+$set XBIG = '& "$xc -c -w -/Nx512 -/Ns3072 &"'
+$special "sys$fmtio/": evvexpr.x $(XBIG) ;
+
+$set XNL = '& "$xc -c -/NL400 &"'
+$special "math$slalib/": obs.f $(XNL) ;
+
diff --git a/unix/hlib/mkpkg.sf.MACX b/unix/hlib/mkpkg.sf.MACX
new file mode 100644
index 00000000..d90c5604
--- /dev/null
+++ b/unix/hlib/mkpkg.sf.MACX
@@ -0,0 +1,41 @@
+# Mkpkg special file list for MacOSX/IRAF, GNU compilers.
+
+$special "sys$osb/": aclrb.c as$aclrb.c
+ bytmov.c as$bytmov.c
+ ieeer.x as$ieeer.x
+ ieeed.x as$ieeed.x
+ ;
+
+$special "sys$vops/ak/": aclrc.x as$aclrc.c
+ aclrs.x as$aclrs.c
+ aclri.x as$aclri.c
+ aclrl.x as$aclrl.c
+ aclrr.x as$aclrr.c
+ aclrd.x as$aclrd.c
+ ;
+
+$special "sys$vops/lz/": amovc.x as$amovc.c
+ amovs.x as$amovs.c
+ amovi.x as$amovi.c
+ amovl.x as$amovl.c
+ amovr.x as$amovr.c
+ amovd.x as$amovd.c
+ ;
+
+#$special "sys$memdbg/": zrtadr.c as$zrtadr.s ;
+
+
+# The iraf main has to be compiled without optimization on the Sun-4
+# as setjmp does not save the register set.
+
+#$set XNO = '& "$xc -cq &"'
+#$special "sys$etc/":
+# main.x $(XNO)
+# ;
+
+$set XBIG = '& "$xc -c -w -/Nx512 -/Ns2048 &"'
+$special "sys$fmtio/": evvexpr.x $(XBIG) ;
+
+$set XNL = '& "$xc -c -/NL400 &"'
+$special "math$slalib/": obs.f $(XNL) ;
+
diff --git a/unix/hlib/mkpkg.sf.OS4 b/unix/hlib/mkpkg.sf.OS4
new file mode 100644
index 00000000..968ae23e
--- /dev/null
+++ b/unix/hlib/mkpkg.sf.OS4
@@ -0,0 +1,82 @@
+# Mkpkg special file list for SUN/IRAF, SUN/UNIX V3.2.
+
+# All files needing special processing for the local host operating system,
+# e.g., to permit host dependent optimization or to work around compiler bugs,
+# should be listed here.
+
+# Files optimized for the local host system.
+# -----------------------------------------
+
+$special "sys$osb/": aclrb.c as$aclrb.c
+ bytmov.c as$bytmov.c
+ ;
+
+$special "sys$vops/ak/": aclrc.x as$aclrc.c
+ aclrs.x as$aclrs.c
+ aclri.x as$aclri.c
+ aclrl.x as$aclrl.c
+ aclrr.x as$aclrr.c
+ aclrd.x as$aclrd.c
+ ;
+
+$special "sys$vops/lz/": amovc.x as$amovc.c
+ amovs.x as$amovs.c
+ amovi.x as$amovi.c
+ amovl.x as$amovl.c
+ amovr.x as$amovr.c
+ amovd.x as$amovd.c
+ ;
+
+$special "sys$gio/nspp/sysint/": ishift.x as$ishift.s ;
+$special "sys$gio/ncarutil/sysint/": ishift.x as$ishift.s ;
+
+# SUNOS 4.0.
+# ---------------------------------------------
+
+$set XNO = '& "$xc -cq -/$(MACH) &"'
+$set XO1 = '& "$xc -cq -/O1 -/$(MACH) &"'
+$set XO2 = '& "$xc -cq -/O2 -/$(MACH) &"'
+
+# Files requiring special compilation due to host compiler bugs.
+# -------------------------------------------------------------
+
+$special "sys$etc/":
+ onerror.x $(XNO)
+ onexit.x $(XNO)
+ ;
+
+$special "sys$gio/cursor/":
+ grcwcs.x $(XNO);
+
+# The following causes the compiler to produce semi-infinite intermediate code
+# tables, necessitating use of reduced levels (O1 or O2) of optimization.
+
+$special "sys$osb/":
+ achtbu.c $(XO1)
+ achtcu.c $(XO1)
+ achtdu.c $(XO1)
+ achtiu.c $(XO1)
+ achtlu.c $(XO1)
+ achtru.c $(XO1)
+ achtsu.c $(XO1)
+ achtuu.c $(XO1)
+ achtxu.c $(XO1)
+ achtub.c $(XO1)
+ achtuc.c $(XO1)
+ achtud.c $(XO1)
+ achtui.c $(XO1)
+ achtul.c $(XO1)
+ achtur.c $(XO1)
+ achtus.c $(XO1)
+ achtuu.c $(XO1)
+ achtux.c $(XO1)
+ ;
+
+# Partial optimization needed to prevent infinite loop in iropt.
+# In main.c and errs.c, no optimization is needed to avoid an optimizer problem
+# associated with ZSVJMP (setjmp). I tried using a #pragma to fix this but
+# it didn't work.
+
+$special "$(pkg)cl/": ytab.c & "$xc -cq -/O2 &"
+ main.c & "$xc -cq &"
+ errs.c & "$xc -cq &";
diff --git a/unix/hlib/mkpkg.sf.S34 b/unix/hlib/mkpkg.sf.S34
new file mode 100644
index 00000000..9634d72c
--- /dev/null
+++ b/unix/hlib/mkpkg.sf.S34
@@ -0,0 +1,122 @@
+# Mkpkg special file list for SUN/IRAF, SUN/UNIX V3.2.
+
+# All files needing special processing for the local host operating system,
+# e.g., to permit host dependent optimization or to work around compiler bugs,
+# should be listed here.
+
+# Files optimized for the local host system.
+# -----------------------------------------
+
+$special "sys$gio/nspp/sysint/": ishift.x as$ishift.s ;
+$special "sys$gio/ncarutil/sysint/": ishift.x as$ishift.s ;
+
+$special "sys$osb/": aclrb.c as$aclrb.c
+ bytmov.c as$bytmov.c
+ ;
+
+$special "sys$vops/ak/": aclrc.x as$aclrc.c
+ aclrs.x as$aclrs.c
+ aclri.x as$aclri.c
+ aclrl.x as$aclrl.c
+ aclrr.x as$aclrr.c
+ aclrd.x as$aclrd.c
+ ;
+
+$special "sys$vops/lz/": amovc.x as$amovc.c
+ amovs.x as$amovs.c
+ amovi.x as$amovi.c
+ amovl.x as$amovl.c
+ amovr.x as$amovr.c
+ amovd.x as$amovd.c
+ ;
+
+# Files requiring special compilation due to host compiler bugs.
+# -------------------------------------------------------------
+
+# Hand compile without SUN-f77 hardware floating point switch, but with
+# optimization, otherwise the f77 compiler fails due to complex datatype
+# expressions. (7/31)
+
+$set XCS = '& "$xc -c &"'
+
+$special "sys$vops/ak/":
+ abeqkx.x $(XCS)
+ abeqx.x $(XCS)
+ abgekx.x $(XCS)
+ abgtkx.x $(XCS)
+ ablekx.x $(XCS)
+ abltkx.x $(XCS)
+ abnekx.x $(XCS)
+ abnex.x $(XCS)
+ advzx.x $(XCS)
+ ;
+
+$special "sys$vops/lz/":
+ allnx.x $(XCS)
+ alogx.x $(XCS)
+ arcpx.x $(XCS)
+ arczx.x $(XCS)
+ ;
+
+# Hand compile without optimization, but with hardware floating point, to
+# get around optimizer bugs in SUN-f77.
+
+$set XCQ = '& "$xc -cq -/$(MACH) &"'
+
+$special "sys$etc/": main.x $(XCQ);
+$special "sys$fmtio/": fprfmt.x $(XCQ);
+$special "sys$gio/cursor/": grcwcs.x $(XCQ);
+$special "math$curfit/": cvaccumd.x $(XCQ)
+ cvaccumr.x $(XCQ);
+$special "images$lib/": ranges.x $(XCQ);
+
+# Additions for SunOS 4.0 in case this is used for that too.
+# ---------------------------------------------------------------------
+
+$set XNO = '& "$xc -cq -/$(MACH) &"'
+$set XO1 = '& "$xc -cq -/O1 -/$(MACH) &"'
+$set XO2 = '& "$xc -cq -/O2 -/$(MACH) &"'
+
+# Files requiring special compilation due to host compiler bugs.
+# -------------------------------------------------------------
+
+$special "sys$etc/":
+ onerror.x $(XNO)
+ onexit.x $(XNO)
+ ;
+
+$special "sys$gio/cursor/":
+ grcwcs.x $(XNO);
+
+# The following causes the compiler to produce semi-infinite intermediate code
+# tables, necessitating use of reduced levels (O1 or O2) of optimization.
+
+$special "sys$osb/":
+ achtbu.c $(XO1)
+ achtcu.c $(XO1)
+ achtdu.c $(XO1)
+ achtiu.c $(XO1)
+ achtlu.c $(XO1)
+ achtru.c $(XO1)
+ achtsu.c $(XO1)
+ achtuu.c $(XO1)
+ achtxu.c $(XO1)
+ achtub.c $(XO1)
+ achtuc.c $(XO1)
+ achtud.c $(XO1)
+ achtui.c $(XO1)
+ achtul.c $(XO1)
+ achtur.c $(XO1)
+ achtus.c $(XO1)
+ achtuu.c $(XO1)
+ achtux.c $(XO1)
+ ;
+
+# Partial optimization needed to prevent infinite loop in iropt.
+# In main.c and errs.c, no optimization is needed to avoid an optimizer problem
+# associated with ZSVJMP (setjmp). I tried using a #pragma to fix this but
+# it didn't work.
+
+$special "$(pkg)cl/": ytab.c & "$xc -cq -/O2 &"
+ main.c & "$xc -cq &"
+ errs.c & "$xc -cq &";
diff --git a/unix/hlib/mkpkg.sf.SF2C b/unix/hlib/mkpkg.sf.SF2C
new file mode 100644
index 00000000..9e3219a7
--- /dev/null
+++ b/unix/hlib/mkpkg.sf.SF2C
@@ -0,0 +1,37 @@
+# Mkpkg special file list for Solaris/IRAF, Cygnus/Gnu/F2c.
+
+$special "sys$osb/": aclrb.c as$aclrb.c
+ bytmov.c as$bytmov.c
+ ieeer.x as$ieeer.x
+ ieeed.x as$ieeed.x
+ ;
+
+$special "sys$vops/ak/": aclrc.x as$aclrc.c
+ aclrs.x as$aclrs.c
+ aclri.x as$aclri.c
+ aclrl.x as$aclrl.c
+ aclrr.x as$aclrr.c
+ aclrd.x as$aclrd.c
+ ;
+
+$special "sys$vops/lz/": amovc.x as$amovc.c
+ amovs.x as$amovs.c
+ amovi.x as$amovi.c
+ amovl.x as$amovl.c
+ amovr.x as$amovr.c
+ amovd.x as$amovd.c
+ ;
+
+# $special "sys$memdbg/": zrtadr.c as$zrtadr.s ;
+
+
+# The iraf main has to be compiled without optimization on the Sun-4
+# as setjmp does not save the register set.
+
+$set XNO = '& "$xc -cq &"'
+$special "sys$etc/":
+ main.x $(XNO)
+ ;
+
+# $set XBIG = '& "$xc -c -/Ns2048 &"'
+# $special "sys$fmtio/": evvexpr.x $(XBIG) ;
diff --git a/unix/hlib/mkpkg.sf.SSUN b/unix/hlib/mkpkg.sf.SSUN
new file mode 100644
index 00000000..124c88cb
--- /dev/null
+++ b/unix/hlib/mkpkg.sf.SSUN
@@ -0,0 +1,65 @@
+# Mkpkg special file list for Solaris/IRAF, SunSoft compilers.
+
+$set XCF = "$xc -c -/libmil"
+
+$special "sys$osb/": aclrb.c as$aclrb.c "$(XCF) aclrb.c"
+ bytmov.c as$bytmov.c "$(XCF) bytmov.c"
+ ieeer.x as$ieeer.x
+ ieeed.x as$ieeed.x
+ ;
+
+$special "sys$vops/ak/": aclrc.x as$aclrc.c "$(XCF) aclrc.c"
+ aclrs.x as$aclrs.c "$(XCF) aclrs.c"
+ aclri.x as$aclri.c "$(XCF) aclri.c"
+ aclrl.x as$aclrl.c "$(XCF) aclrl.c"
+ aclrr.x as$aclrr.c "$(XCF) aclrr.c"
+ aclrd.x as$aclrd.c "$(XCF) aclrd.c"
+ ;
+
+$special "sys$vops/lz/": amovc.x as$amovc.c "$(XCF) amovc.c"
+ amovs.x as$amovs.c "$(XCF) amovs.c"
+ amovi.x as$amovi.c "$(XCF) amovi.c"
+ amovl.x as$amovl.c "$(XCF) amovl.c"
+ amovr.x as$amovr.c "$(XCF) amovr.c"
+ amovd.x as$amovd.c "$(XCF) amovd.c"
+ ;
+
+$special "sys$memdbg/": zrtadr.c as$zrtadr.s ;
+
+
+# The following is needed to disable a warning about <varargs.h> being
+# explicitly included (see $hlib/libc/varargs.h).
+
+$set XNOWARN = '& "$xc -c -/erroff=E_INC_USR_INC_MAY_NOT_PORTABLE &"'
+$special "libc$":
+ printf.c $(XNOWARN)
+ eprintf.c $(XNOWARN)
+ sprintf.c $(XNOWARN)
+ scanf.c $(XNOWARN)
+ ;
+$special "pkg$cl/":
+ clprintf.c $(XNOWARN)
+ errs.c $(XNOWARN)
+ ;
+
+# The iraf main has to be compiled without optimization on the Sun-4
+# as setjmp does not save the register set.
+
+$set XNO = '& "$xc -cq &"'
+$special "sys$etc/":
+ main.x $(XNO)
+ ;
+
+# $set XBIG = '& "$xc -c -/Ns2048 &"'
+# $special "sys$fmtio/": evvexpr.x $(XBIG) ;
+
+
+# The following need to be linked nonshared to avoid the 268 MB memory limit
+# in the shared Sun/IRAF library implementation.
+
+$set NONSHARE = '& "LFLAGS = -z -/Bstatic"'
+$special "dataio$": xx_dataio.e $(NONSHARE) ;
+$special "images$": xx_images.e $(NONSHARE) ;
+$special "images$tv/": xx_tv.e $(NONSHARE) ;
+$special "plot$": xx_plot.e $(NONSHARE) ;
+
diff --git a/unix/hlib/mkpkg.sf.SUN3 b/unix/hlib/mkpkg.sf.SUN3
new file mode 100644
index 00000000..556afcaa
--- /dev/null
+++ b/unix/hlib/mkpkg.sf.SUN3
@@ -0,0 +1,54 @@
+# Mkpkg special file list for SUN/IRAF, SUN/UNIX V3.2.
+# Modified for SunOS 4.0.
+
+# All files needing special processing for the local host operating system,
+# e.g., to permit host dependent optimization or to work around compiler bugs,
+# should be listed here.
+
+# Files optimized for the local host system.
+# -----------------------------------------
+
+$special "sys$gio/nspp/sysint/": ishift.x as$ishift.s ;
+$special "sys$gio/ncarutil/sysint/": ishift.x as$ishift.s ;
+
+$special "sys$osb/": aclrb.c as$aclrb.c
+ bytmov.c as$bytmov.c
+ ieeer.x as$ieeer.x
+ ieeed.x as$ieeed.x
+ ;
+
+$special "sys$vops/ak/": aclrc.x as$aclrc.c
+ aclrs.x as$aclrs.c
+ aclri.x as$aclri.c
+ aclrl.x as$aclrl.c
+ aclrr.x as$aclrr.c
+ aclrd.x as$aclrd.c
+ ;
+
+$special "sys$vops/lz/": amovc.x as$amovc.c
+ amovs.x as$amovs.c
+ amovi.x as$amovi.c
+ amovl.x as$amovl.c
+ amovr.x as$amovr.c
+ amovd.x as$amovd.c
+ ;
+
+# Files requiring special compilation due to host compiler bugs.
+# -------------------------------------------------------------
+
+# All this has been commented out for the new V1.3 Fortran compiler.
+$set XNO = '& "$xc -cq &"'
+$set XO1 = '& "$xc -cq -/O1 &"'
+$set XO2 = '& "$xc -cq -/O2 &"'
+
+$special "sys$vops/ak/":
+ abnekx.x $(XNO)
+ abnex.x $(XNO)
+ ;
+$special "sys$vops/lz/":
+ aveqx.x $(XNO)
+ ;
+
+$set XBIG = '& "$xc -c -/Ns2048 -/Nx2048 &"'
+$special "sys$fmtio/": evvexpr.x $(XBIG) ;
+
diff --git a/unix/hlib/mkpkg.sf.SUN4 b/unix/hlib/mkpkg.sf.SUN4
new file mode 100644
index 00000000..de55ae44
--- /dev/null
+++ b/unix/hlib/mkpkg.sf.SUN4
@@ -0,0 +1,55 @@
+# Mkpkg special file list for SUN/IRAF.
+# SunOS Release Sys4GAMMA (HERCULES) #1: Fri Sep 18 10:15:21 PDT 1987
+# SunOS Release Sys4BETA1 (ORION) #1: Fri Oct 23 13:09:29 PDT 1987
+
+$special "sys$osb/": aclrb.c as$aclrb.c
+ bytmov.c as$bytmov.c
+ ieeer.x as$ieeer.x
+ ieeed.x as$ieeed.x
+ ;
+
+$special "sys$vops/ak/": aclrc.x as$aclrc.c
+ aclrs.x as$aclrs.c
+ aclri.x as$aclri.c
+ aclrl.x as$aclrl.c
+ aclrr.x as$aclrr.c
+ aclrd.x as$aclrd.c
+ ;
+
+$special "sys$vops/lz/": amovc.x as$amovc.c
+ amovs.x as$amovs.c
+ amovi.x as$amovi.c
+ amovl.x as$amovl.c
+ amovr.x as$amovr.c
+ amovd.x as$amovd.c
+ ;
+
+$special "sys$memdbg/": zrtadr.c as$zrtadr.s ;
+
+# The iraf main has to be compiled without optimization on the Sun-4
+# as setjmp does not save the register set.
+
+$set XNO = '& "$xc -cq &"'
+$special "sys$etc/":
+ main.x $(XNO)
+ ;
+
+# All files needing special processing for the local host operating system,
+# e.g., to permit host dependent optimization or to work around compiler bugs,
+# should be listed here.
+
+$special "sys$vops/ak/":
+ abnekx.x $(XNO)
+ abnex.x $(XNO)
+ ;
+$special "sys$vops/lz/":
+ aveqx.x $(XNO)
+ ;
+
+# TMPFS bug should be fixed by now.
+#$special "sys$etc/":
+# oscmd.x as$oscmd.s
+# ;
+
+$set XBIG = '& "$xc -c -/Ns2048 &"'
+$special "sys$fmtio/": evvexpr.x $(XBIG) ;
diff --git a/unix/hlib/mkpkg.sf.SX86 b/unix/hlib/mkpkg.sf.SX86
new file mode 100644
index 00000000..a0b56fcf
--- /dev/null
+++ b/unix/hlib/mkpkg.sf.SX86
@@ -0,0 +1,41 @@
+# Mkpkg special file list for Solaris-X86/IRAF GNU compilers.
+
+$special "sys$osb/": aclrb.c as$aclrb.c
+ bytmov.c as$bytmov.c
+ ieeer.x as$ieeer.x
+ ieeed.x as$ieeed.x
+ ;
+
+$special "sys$vops/ak/": aclrc.x as$aclrc.c
+ aclrs.x as$aclrs.c
+ aclri.x as$aclri.c
+ aclrl.x as$aclrl.c
+ aclrr.x as$aclrr.c
+ aclrd.x as$aclrd.c
+ ;
+
+$special "sys$vops/lz/": amovc.x as$amovc.c
+ amovs.x as$amovs.c
+ amovi.x as$amovi.c
+ amovl.x as$amovl.c
+ amovr.x as$amovr.c
+ amovd.x as$amovd.c
+ ;
+
+#$special "sys$memdbg/": zrtadr.c as$zrtadr.s ;
+
+
+# The iraf main has to be compiled without optimization on the Sun-4
+# as setjmp does not save the register set.
+
+#$set XNO = '& "$xc -cq &"'
+#$special "sys$etc/":
+# main.x $(XNO)
+# ;
+
+$set XBIG = '& "$xc -c -w -/Nx512 -/Ns2048 &"'
+$special "sys$fmtio/": evvexpr.x $(XBIG) ;
+
+$set XNL = '& "$xc -c -/NL400 &"'
+$special "math$slalib/": obs.f $(XNL) ;
+
diff --git a/unix/hlib/motd b/unix/hlib/motd
new file mode 100644
index 00000000..77d4f035
--- /dev/null
+++ b/unix/hlib/motd
@@ -0,0 +1,14 @@
+
+ NOAO/IRAF PC-IRAF Revision 2.16.1 EXPORT Mon Oct 14 21:40:13 MST 2013
+ This is the EXPORT version of IRAF V2.16 supporting PC systems.
+
+
+ Welcome to IRAF. To list the available commands, type ? or ??. To get
+ detailed information about a command, type `help <command>'. To run a
+ command or load a package, type its name. Type `bye' to exit a
+ package, or `logout' to get out of the CL. Type `news' to find out
+ what is new in the version of the system you are using.
+
+ Visit http://iraf.net if you have questions or to report problems.
+
+
diff --git a/unix/hlib/r1mach.f b/unix/hlib/r1mach.f
new file mode 100644
index 00000000..167e19f1
--- /dev/null
+++ b/unix/hlib/r1mach.f
@@ -0,0 +1,376 @@
+ REAL FUNCTION R1MACH(I)
+C
+C SINGLE-PRECISION MACHINE CONSTANTS
+C
+C R1MACH(1) = B**(EMIN-1), THE SMALLEST POSITIVE MAGNITUDE.
+C
+C R1MACH(2) = B**EMAX*(1 - B**(-T)), THE LARGEST MAGNITUDE.
+C
+C R1MACH(3) = B**(-T), THE SMALLEST RELATIVE SPACING.
+C
+C R1MACH(4) = B**(1-T), THE LARGEST RELATIVE SPACING.
+C
+C R1MACH(5) = LOG10(B)
+C
+C TO ALTER THIS FUNCTION FOR A PARTICULAR ENVIRONMENT,
+C THE DESIRED SET OF DATA STATEMENTS SHOULD BE ACTIVATED BY
+C REMOVING THE C FROM COLUMN 1.
+C
+C FOR IEEE-ARITHMETIC MACHINES (BINARY STANDARD), THE FIRST
+C SET OF CONSTANTS BELOW SHOULD BE APPROPRIATE.
+C
+C WHERE POSSIBLE, DECIMAL, OCTAL OR HEXADECIMAL CONSTANTS ARE USED
+C TO SPECIFY THE CONSTANTS EXACTLY. SOMETIMES THIS REQUIRES USING
+C EQUIVALENT INTEGER ARRAYS. IF YOUR COMPILER USES HALF-WORD
+C INTEGERS BY DEFAULT (SOMETIMES CALLED INTEGER*2), YOU MAY NEED TO
+C CHANGE INTEGER TO INTEGER*4 OR OTHERWISE INSTRUCT YOUR COMPILER
+C TO USE FULL-WORD INTEGERS IN THE NEXT 5 DECLARATIONS.
+C
+C COMMENTS JUST BEFORE THE END STATEMENT (LINES STARTING WITH *)
+C GIVE C SOURCE FOR R1MACH.
+C
+ INTEGER SMALL(2)
+ INTEGER LARGE(2)
+ INTEGER RIGHT(2)
+ INTEGER DIVER(2)
+ INTEGER LOG10(2)
+ INTEGER I
+C/6S
+C/7S
+ SAVE SMALL, LARGE, RIGHT, DIVER, LOG10
+C/
+ REAL RMACH(5)
+C
+ EQUIVALENCE (RMACH(1),SMALL(1))
+ EQUIVALENCE (RMACH(2),LARGE(1))
+ EQUIVALENCE (RMACH(3),RIGHT(1))
+ EQUIVALENCE (RMACH(4),DIVER(1))
+ EQUIVALENCE (RMACH(5),LOG10(1))
+C
+C MACHINE CONSTANTS FOR IEEE ARITHMETIC MACHINES, SUCH AS THE AT&T
+C 3B SERIES, MOTOROLA 68000 BASED MACHINES (E.G. SUN 3 AND AT&T
+C PC 7300), AND 8087 BASED MICROS (E.G. IBM PC AND AT&T 6300).
+C
+ DATA SMALL(1) / 8388608 /
+ DATA LARGE(1) / 2139095039 /
+ DATA RIGHT(1) / 864026624 /
+ DATA DIVER(1) / 872415232 /
+ DATA LOG10(1) / 1050288283 /
+C
+C MACHINE CONSTANTS FOR AMDAHL MACHINES.
+C
+C DATA SMALL(1) / 1048576 /
+C DATA LARGE(1) / 2147483647 /
+C DATA RIGHT(1) / 990904320 /
+C DATA DIVER(1) / 1007681536 /
+C DATA LOG10(1) / 1091781651 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM.
+C
+C DATA RMACH(1) / Z400800000 /
+C DATA RMACH(2) / Z5FFFFFFFF /
+C DATA RMACH(3) / Z4E9800000 /
+C DATA RMACH(4) / Z4EA800000 /
+C DATA RMACH(5) / Z500E730E8 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE BURROUGHS 5700/6700/7700 SYSTEMS.
+C
+C DATA RMACH(1) / O1771000000000000 /
+C DATA RMACH(2) / O0777777777777777 /
+C DATA RMACH(3) / O1311000000000000 /
+C DATA RMACH(4) / O1301000000000000 /
+C DATA RMACH(5) / O1157163034761675 /, SC/987/
+C
+C MACHINE CONSTANTS FOR FTN4 ON THE CDC 6000/7000 SERIES.
+C
+C DATA RMACH(1) / 00564000000000000000B /
+C DATA RMACH(2) / 37767777777777777776B /
+C DATA RMACH(3) / 16414000000000000000B /
+C DATA RMACH(4) / 16424000000000000000B /
+C DATA RMACH(5) / 17164642023241175720B /, SC/987/
+C
+C MACHINE CONSTANTS FOR FTN5 ON THE CDC 6000/7000 SERIES.
+C
+C DATA RMACH(1) / O"00564000000000000000" /
+C DATA RMACH(2) / O"37767777777777777776" /
+C DATA RMACH(3) / O"16414000000000000000" /
+C DATA RMACH(4) / O"16424000000000000000" /
+C DATA RMACH(5) / O"17164642023241175720" /, SC/987/
+C
+C MACHINE CONSTANTS FOR CONVEX C-1.
+C
+C DATA RMACH(1) / '00800000'X /
+C DATA RMACH(2) / '7FFFFFFF'X /
+C DATA RMACH(3) / '34800000'X /
+C DATA RMACH(4) / '35000000'X /
+C DATA RMACH(5) / '3F9A209B'X /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3.
+C
+C DATA RMACH(1) / 200034000000000000000B /
+C DATA RMACH(2) / 577767777777777777776B /
+C DATA RMACH(3) / 377224000000000000000B /
+C DATA RMACH(4) / 377234000000000000000B /
+C DATA RMACH(5) / 377774642023241175720B /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200.
+C
+C NOTE - IT MAY BE APPROPRIATE TO INCLUDE THE FOLLOWING LINE -
+C STATIC RMACH(5)
+C
+C DATA SMALL/20K,0/,LARGE/77777K,177777K/
+C DATA RIGHT/35420K,0/,DIVER/36020K,0/
+C DATA LOG10/40423K,42023K/, SC/987/
+C
+C MACHINE CONSTANTS FOR THE HARRIS SLASH 6 AND SLASH 7.
+C
+C DATA SMALL(1),SMALL(2) / '20000000, '00000201 /
+C DATA LARGE(1),LARGE(2) / '37777777, '00000177 /
+C DATA RIGHT(1),RIGHT(2) / '20000000, '00000352 /
+C DATA DIVER(1),DIVER(2) / '20000000, '00000353 /
+C DATA LOG10(1),LOG10(2) / '23210115, '00000377 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES.
+C
+C DATA RMACH(1) / O402400000000 /
+C DATA RMACH(2) / O376777777777 /
+C DATA RMACH(3) / O714400000000 /
+C DATA RMACH(4) / O716400000000 /
+C DATA RMACH(5) / O776464202324 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES,
+C THE XEROX SIGMA 5/7/9 AND THE SEL SYSTEMS 85/86.
+C
+C DATA RMACH(1) / Z00100000 /
+C DATA RMACH(2) / Z7FFFFFFF /
+C DATA RMACH(3) / Z3B100000 /
+C DATA RMACH(4) / Z3C100000 /
+C DATA RMACH(5) / Z41134413 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE INTERDATA 8/32
+C WITH THE UNIX SYSTEM FORTRAN 77 COMPILER.
+C
+C FOR THE INTERDATA FORTRAN VII COMPILER REPLACE
+C THE Z'S SPECIFYING HEX CONSTANTS WITH Y'S.
+C
+C DATA RMACH(1) / Z'00100000' /
+C DATA RMACH(2) / Z'7EFFFFFF' /
+C DATA RMACH(3) / Z'3B100000' /
+C DATA RMACH(4) / Z'3C100000' /
+C DATA RMACH(5) / Z'41134413' /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE PDP-10 (KA OR KI PROCESSOR).
+C
+C DATA RMACH(1) / "000400000000 /
+C DATA RMACH(2) / "377777777777 /
+C DATA RMACH(3) / "146400000000 /
+C DATA RMACH(4) / "147400000000 /
+C DATA RMACH(5) / "177464202324 /, SC/987/
+C
+C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING
+C 32-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL).
+C
+C DATA SMALL(1) / 8388608 /
+C DATA LARGE(1) / 2147483647 /
+C DATA RIGHT(1) / 880803840 /
+C DATA DIVER(1) / 889192448 /
+C DATA LOG10(1) / 1067065499 /, SC/987/
+C
+C DATA RMACH(1) / O00040000000 /
+C DATA RMACH(2) / O17777777777 /
+C DATA RMACH(3) / O06440000000 /
+C DATA RMACH(4) / O06500000000 /
+C DATA RMACH(5) / O07746420233 /, SC/987/
+C
+C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING
+C 16-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL).
+C
+C DATA SMALL(1),SMALL(2) / 128, 0 /
+C DATA LARGE(1),LARGE(2) / 32767, -1 /
+C DATA RIGHT(1),RIGHT(2) / 13440, 0 /
+C DATA DIVER(1),DIVER(2) / 13568, 0 /
+C DATA LOG10(1),LOG10(2) / 16282, 8347 /, SC/987/
+C
+C DATA SMALL(1),SMALL(2) / O000200, O000000 /
+C DATA LARGE(1),LARGE(2) / O077777, O177777 /
+C DATA RIGHT(1),RIGHT(2) / O032200, O000000 /
+C DATA DIVER(1),DIVER(2) / O032400, O000000 /
+C DATA LOG10(1),LOG10(2) / O037632, O020233 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE SEQUENT BALANCE 8000.
+C
+C DATA SMALL(1) / $00800000 /
+C DATA LARGE(1) / $7F7FFFFF /
+C DATA RIGHT(1) / $33800000 /
+C DATA DIVER(1) / $34000000 /
+C DATA LOG10(1) / $3E9A209B /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES.
+C
+C DATA RMACH(1) / O000400000000 /
+C DATA RMACH(2) / O377777777777 /
+C DATA RMACH(3) / O146400000000 /
+C DATA RMACH(4) / O147400000000 /
+C DATA RMACH(5) / O177464202324 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE VAX UNIX F77 COMPILER.
+C
+C DATA SMALL(1) / 128 /
+C DATA LARGE(1) / -32769 /
+C DATA RIGHT(1) / 13440 /
+C DATA DIVER(1) / 13568 /
+C DATA LOG10(1) / 547045274 /, SC/987/
+C
+C MACHINE CONSTANTS FOR THE VAX-11 WITH
+C FORTRAN IV-PLUS COMPILER.
+C
+C DATA RMACH(1) / Z00000080 /
+C DATA RMACH(2) / ZFFFF7FFF /
+C DATA RMACH(3) / Z00003480 /
+C DATA RMACH(4) / Z00003500 /
+C DATA RMACH(5) / Z209B3F9A /, SC/987/
+C
+C MACHINE CONSTANTS FOR VAX/VMS VERSION 2.2.
+C
+C DATA RMACH(1) / '80'X /
+C DATA RMACH(2) / 'FFFF7FFF'X /
+C DATA RMACH(3) / '3480'X /
+C DATA RMACH(4) / '3500'X /
+C DATA RMACH(5) / '209B3F9A'X /, SC/987/
+C
+C *** ISSUE STOP 777 IF ALL DATA STATEMENTS ARE COMMENTED...
+C IF (SC .NE. 987) THEN
+C* *** CHECK FOR AUTODOUBLE ***
+C SMALL(2) = 0
+C RMACH(1) = 1E13
+C IF (SMALL(2) .NE. 0) THEN
+C* *** AUTODOUBLED ***
+C IF ( SMALL(1) .EQ. 1117925532
+C * .AND. SMALL(2) .EQ. -448790528) THEN
+C* *** IEEE BIG ENDIAN ***
+C SMALL(1) = 1048576
+C SMALL(2) = 0
+C LARGE(1) = 2146435071
+C LARGE(2) = -1
+C RIGHT(1) = 1017118720
+C RIGHT(2) = 0
+C DIVER(1) = 1018167296
+C DIVER(2) = 0
+C LOG10(1) = 1070810131
+C LOG10(2) = 1352628735
+C ELSE IF ( SMALL(2) .EQ. 1117925532
+C * .AND. SMALL(1) .EQ. -448790528) THEN
+C* *** IEEE LITTLE ENDIAN ***
+C SMALL(2) = 1048576
+C SMALL(1) = 0
+C LARGE(2) = 2146435071
+C LARGE(1) = -1
+C RIGHT(2) = 1017118720
+C RIGHT(1) = 0
+C DIVER(2) = 1018167296
+C DIVER(1) = 0
+C LOG10(2) = 1070810131
+C LOG10(1) = 1352628735
+C ELSE IF ( SMALL(1) .EQ. -2065213935
+C * .AND. SMALL(2) .EQ. 10752) THEN
+C* *** VAX WITH D_FLOATING ***
+C SMALL(1) = 128
+C SMALL(2) = 0
+C LARGE(1) = -32769
+C LARGE(2) = -1
+C RIGHT(1) = 9344
+C RIGHT(2) = 0
+C DIVER(1) = 9472
+C DIVER(2) = 0
+C LOG10(1) = 546979738
+C LOG10(2) = -805796613
+C ELSE IF ( SMALL(1) .EQ. 1267827943
+C * .AND. SMALL(2) .EQ. 704643072) THEN
+C* *** IBM MAINFRAME ***
+C SMALL(1) = 1048576
+C SMALL(2) = 0
+C LARGE(1) = 2147483647
+C LARGE(2) = -1
+C RIGHT(1) = 856686592
+C RIGHT(2) = 0
+C DIVER(1) = 873463808
+C DIVER(2) = 0
+C LOG10(1) = 1091781651
+C LOG10(2) = 1352628735
+C ELSE
+C WRITE(*,*)'Adjust autodoubled R1MACH by uncommenting'
+C WRITE(*,*)'data statements appropriate for your machine.'
+C STOP 777
+C END IF
+C ELSE
+C RMACH(1) = 1234567.
+C IF (SMALL(1) .EQ. 1234613304) THEN
+C* *** IEEE ***
+C SMALL(1) = 8388608
+C LARGE(1) = 2139095039
+C RIGHT(1) = 864026624
+C DIVER(1) = 872415232
+C LOG10(1) = 1050288283
+C ELSE IF (SMALL(1) .EQ. -1271379306) THEN
+C* *** VAX ***
+C SMALL(1) = 128
+C LARGE(1) = -32769
+C RIGHT(1) = 13440
+C DIVER(1) = 13568
+C LOG10(1) = 547045274
+C ELSE IF (SMALL(1) .EQ. 1175639687) THEN
+C* *** IBM ***
+C SMALL(1) = 1048576
+C LARGE(1) = 2147483647
+C RIGHT(1) = 990904320
+C DIVER(1) = 1007681536
+C LOG10(1) = 1091781651
+C ELSE
+C WRITE(*,*)'Adjust R1MACH by uncommenting'
+C WRITE(*,*)'data statements appropriate for your machine.'
+C STOP 777
+C END IF
+C END IF
+C SC = 987
+C END IF
+C
+C *** ISSUE STOP 776 IF ALL DATA STATEMENTS ARE OBVIOUSLY WRONG...
+C IF (RMACH(4) .GE. 1.0) STOP 776
+C*C/6S
+C*C IF (I .LT. 1 .OR. I .GT. 5)
+C*C 1 CALL SETERR(24HR1MACH - I OUT OF BOUNDS,24,1,2)
+C*C/7S
+C* IF (I .LT. 1 .OR. I .GT. 5)
+C* 1 CALL SETERR('R1MACH - I OUT OF BOUNDS',24,1,2)
+C*C/
+C
+C IF (I .LT. 1 .OR. I .GT. 5) THEN
+C WRITE(*,*) 'R1MACH(I): I =',I,' is out of bounds.'
+C STOP
+C END IF
+ IF (I .LT. 1 .OR. I .GT. 5) THEN
+ R1MACH = 0.0
+ END IF
+ R1MACH = RMACH(I)
+ RETURN
+C
+C* /* C source for R1MACH -- remove the * in column 1 */
+C*#include <stdio.h>
+C*#include <float.h>
+C*#include <math.h>
+C*
+C*float r1mach_(long *i)
+C*{
+C* switch(*i){
+C* case 1: return FLT_MIN;
+C* case 2: return FLT_MAX;
+C* case 3: return FLT_EPSILON/FLT_RADIX;
+C* case 4: return FLT_EPSILON;
+C* case 5: return log10(FLT_RADIX);
+C* }
+C*
+C* fprintf(stderr, "invalid argument: r1mach(%ld)\n", *i);
+C* exit(1);
+C* return 0; /* for compilers that complain of missing return values */
+C* }
+ END
diff --git a/unix/hlib/setup.csh b/unix/hlib/setup.csh
new file mode 100755
index 00000000..b51a1950
--- /dev/null
+++ b/unix/hlib/setup.csh
@@ -0,0 +1,21 @@
+#!/bin/csh -f
+
+# Allow a previously defined $iraf to be used.
+if ( ! ( $?iraf )) then
+ setenv iraf /iraf/iraf/
+endif
+
+# Allow a previously defined $IRAFARCH to be used.
+if ( ! ( $?IRAFARCH )) then
+ setenv IRAFARCH `$iraf/unix/hlib/irafarch.csh -actual`
+endif
+source $iraf/unix/hlib/irafuser.csh
+
+set path = ($HOME/.iraf/bin $path)
+set cdpath = ($iraf $iraf/pkg $iraf/noao $iraf/sys $iraf/unix $iraf/unix/boot)
+
+# The world'd most obvious alias ....
+alias iraf "xgterm -e cl &"
+
+rehash
+
diff --git a/unix/hlib/setup.sh b/unix/hlib/setup.sh
new file mode 100755
index 00000000..fc96eeb6
--- /dev/null
+++ b/unix/hlib/setup.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# Allow a previously defined $iraf to be used.
+if [ -n $iraf ]; then
+ export iraf=/iraf/iraf/
+fi
+
+# Allow a previously defined $IRAFARCH to be used.
+if [ -n $IRAFARCH ]; then
+ export IRAFARCH=`$iraf/unix/hlib/irafarch.sh -actual`
+fi
+source $iraf/unix/hlib/irafuser.sh
+
+export PATH=$HOME/.iraf/bin:${PATH}
+
+# The world'd most obvious alias ....
+alias iraf="xgterm -e cl &"
+
diff --git a/unix/hlib/spy.cl b/unix/hlib/spy.cl
new file mode 100644
index 00000000..31522f4d
--- /dev/null
+++ b/unix/hlib/spy.cl
@@ -0,0 +1,31 @@
+# SPY -- [MACHDEP] Give info on who is logged in, what they are up to,
+# how much resources they have consumed, and so on. This routine is
+# machine dependent.
+
+procedure spy()
+
+begin
+ string mach
+
+ if ($nargs > 0) {
+ # "Verbose" mode: show UNIX processor status, filtering
+ # out all the uninteresting system processes.
+
+ print ("!!uname" | cl() | scan (mach)
+ if (strlwr (mach) == "ssol") {
+ !! ps -ef | grep -v root
+ } else if (strlwr (mach) == "SunOS") {
+ !! ps -axu | grep -v root
+ } else if (strlwr (mach) == "linux" || strlwr (mach) == "Darwin") {
+ !! ps axuf | grep -v root
+ } else {
+ !! ps -ef | grep -v root
+ }
+
+ } else {
+ # Merely give info on who is logged in and what they are doing.
+ # The following is for Berkeley UNIX only.
+
+ !! w
+ }
+end
diff --git a/unix/hlib/strip b/unix/hlib/strip
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/unix/hlib/strip
diff --git a/unix/hlib/strip.iraf b/unix/hlib/strip.iraf
new file mode 100644
index 00000000..74e61ada
--- /dev/null
+++ b/unix/hlib/strip.iraf
@@ -0,0 +1,66 @@
+# STRIP.IRAF -- Rmfiles command script, used to strip the IRAF system down to
+# its bare essentials (for a production version of the system). The RMFILES
+# program which reads this must be run from the IRAF root directory.
+
+ unix/as.linux -all
+ unix/as.linux64 -all
+ unix/as.i386 -all
+ unix/as.mc68020 -all
+ unix/as.rs6000 -all
+ unix/as.sparc -all
+ unix/as.ssol -all
+ unix/as.vax -all
+ unix/boot -allbut .hlp .hd
+ unix/gdev -all
+ unix/os -all
+ unix/mc68000 -all
+ unix/portkit -all
+ unix/shlib -all
+ unix/sun -all
+
+ dev -only .dat
+ doc -allbut .hlp
+ math -all
+ pkg -allbut .hlp .hd .men .cl .par .key .dat .mip
+ pkg/bench -all
+ sys -all
+
+-file unix/hlib/libcalcomp.a
+-file pkg/dataio/fits/structure.hlp
+-file pkg/images/imcalc/Imcalc.hlp
+-file pkg/images/tv/iis/ids/doc/Imdis.hlp
+-file pkg/images/tv/doc/Tv.hlp
+-file pkg/lists/doc/Lcalc.hlp
+-file pkg/lists/doc/Lists.hlp
+-file pkg/system/doc/Sys.hlp
+-file pkg/system/doc/Sys_intro.hlp
+-file pkg/system/help/design.hlp
+-file tags
+
+-file bin.alpha/OBJS.arc.Z
+-file bin.ddec/OBJS.arc.Z
+-file bin.f2c/OBJS.arc.Z
+-file bin.f68881/OBJS.arc.Z
+-file bin.ffpa/OBJS.arc.Z
+-file bin.hp300/OBJS.arc.Z
+-file bin.hp700/OBJS.arc.Z
+-file bin.hp800/OBJS.arc.Z
+-file bin.i386/OBJS.arc.Z
+-file bin.irix/OBJS.arc.Z
+-file bin.mips/OBJS.arc.Z
+-file bin.rs6000/OBJS.arc.Z
+-file bin.sf2c/OBJS.arc.Z
+
+-file bin.sparc/OBJS.arc.Z
+-file bin.ssun/OBJS.arc.Z
+
+-file bin.redhat/OBJS.arc.Z
+-file bin.linux/OBJS.arc.Z
+-file bin.linux64/OBJS.arc.Z
+-file bin.macosx/OBJS.arc.Z
+-file bin.macintel/OBJS.arc.Z
+-file bin.cygwin/OBJS.arc.Z
+-file bin.freebsd/OBJS.arc.Z
+-file bin.sunos/OBJS.arc.Z
+-file bin.linuxppc/OBJS.arc.Z
+
diff --git a/unix/hlib/sysinfo b/unix/hlib/sysinfo
new file mode 100755
index 00000000..b3c6f8dc
--- /dev/null
+++ b/unix/hlib/sysinfo
@@ -0,0 +1,2503 @@
+#!/bin/csh -f
+#
+# SYSINFO -- Display IRAF system diagnostic and configuration information.
+#
+# The intent of this program is to provide a means for IRAF site managers
+# to troubleshoot their IRAF installations by running numerous verification
+# tests on the iraf directory structure, networking setup, external package
+# installations, tape configurations, etc. Failed tests are not always
+# fatal but may indicate a problem in the way something was installed or
+# configured.
+#
+# Usage: sysinfo [ -G | -V | -N | -P | -D | -T | -h ]
+#
+# where: -G Print General Info only"
+# -V Do Verification tests only"
+# -N Do Networking tests only"
+# -P Do Extern Package tests only"
+# -D Do Display tests only"
+# -T Do Tape Device tests only"
+# -h Print this message"
+#
+# ----------------------------------------------------------------------------
+
+unset noclobber
+unalias cd cp cmp echo ln mv rm sed set grep ls chmod chown pwd touch sort
+unalias uniq head sed tr which
+set path = ($path /sbin /usr/sbin /bin /usr/bin /usr/ucb /etc /usr/etc /usr/openwin/bin /usr/X11R6/bin /usr/X11/bin)
+onintr sysinfo_cleanup
+
+
+##############################################################################
+# START OF MACHDEP DEFINITIONS.
+##############################################################################
+
+# MACHDEP definitions which may be reset below.
+
+set hmach = "INDEF"
+set pciraf = 0
+set suniraf = 0
+set do_tapecaps = 0
+set hilite = 0
+
+# Utility aliases.
+alias BOLD_ON "(if ($hilite) tput bold)"
+alias BOLD_OFF "(if ($hilite) tput sgr0)"
+alias SO_ON "(if ($hilite) tput smso)"
+alias SO_OFF "(if ($hilite) tput rms0)"
+
+alias DO_OK "(echo -n '[ '; BOLD_ON; echo -n ' OK '; BOLD_OFF; echo ' ]')"
+alias DO_WARN "(echo -n '[ '; BOLD_ON; echo -n 'WARN'; BOLD_OFF; echo ' ]')"
+alias DO_FAIL "(echo -n '[ '; SO_ON; echo -n 'FAIL'; SO_OFF; echo ' ]')"
+
+alias MSG "(echo -n ' ';BOLD_ON;echo -n '*** ';BOLD_OFF; echo \!*)"
+alias MSGN "(echo -n ' ';BOLD_ON;echo -n '*** ';BOLD_OFF; echo -n \!*)"
+alias MSGB "(echo -n ' ';BOLD_ON;echo -n '*** ';echo \!*; BOLD_OFF)"
+alias MSGBN "(echo -n ' ';BOLD_ON;echo -n '*** ';echo -n \!*;BOLD_OFF)"
+alias ERRMSG "(echo -n ' ';BOLD_ON;echo -n 'ERROR: ';BOLD_OFF; echo \!*)"
+alias WARNING "(echo -n ' ';BOLD_ON;echo -n 'WARNING: ';BOLD_OFF; echo \!*)"
+alias NEWLINE "(echo '')"
+
+alias RM "rm -rf"
+
+
+
+
+# Determine platform architecture.
+set UNAME=""
+if (-e /usr/bin/uname) then
+ set uname_cmd = /usr/bin/uname
+ set UNAME=`/usr/bin/uname | tr '[A-Z]' '[a-z]'`
+else if (-e /bin/uname) then
+ set uname_cmd = /bin/uname
+ set UNAME=`/bin/uname | tr '[A-Z]' '[a-z]'`
+else
+ WARNING "No 'uname' command found to determine architecture."
+ exit 1
+endif
+
+set pciraf = 0
+set hmach = "INDEF"
+switch ($UNAME)
+ case sunos:
+ if (`$uname_cmd -m | cut -c2-` != "86pc") then
+ setenv OSVERSION `uname -r | cut -c1`
+ if ($OSVERSION == 5) then # Sparc Solaris
+ set mach = "ssun"
+ set hmach = "ssol"
+ set TAPES = "/dev/rmt/[0-9]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/usr/ucb/ls -s"
+ set LSDF = "-lLtg"
+ else # Sparc SunOS 4.x
+ set mach = "sparc"
+ set hmach = "sparc"
+ set TAPES = "/dev/*st[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/bin/ls -s"
+ set LSDF = "-lLtg"
+ endif
+ else
+ set mach = "sunos" # Intel Solaris
+ set hmach = "sunos"
+ set TAPES = "/dev/*st[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/bin/ls -s"
+ set LSDF = "-lLt"
+ set pciraf = 1
+ endif
+ breaksw
+ case linux:
+ if (`$uname_cmd -m` == "x86_64") then # Linux64
+ set mach = "linux64"
+ set hmach = "linux64"
+ set TAPES = "/dev/*st[0-7]"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/bin/ls -s"
+ set LSDF = "-lLt"
+
+ else if (`$uname_cmd -m` == "ppc") then # LinuxPPC
+ set mach = "linuxppc"
+ set hmach = "linuxppc"
+ set TAPES = "/dev/*st[0-7]"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/bin/ls -s"
+ set LSDF = "-lLt"
+ else
+ if (-f /etc/redhat-release) then # RedHat Linux
+ set mach = "redhat"
+ set hmach = "redhat"
+ set TAPES = "/dev/*st[0-7]"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/bin/ls -s"
+ set LSDF = "-lLtg"
+ else # Other Linux
+ set mach = "linux"
+ set hmach = "linux"
+ set TAPES = "/dev/*st[0-7]"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/bin/ls -s"
+ set LSDF = "-lLtg"
+ endif
+ endif
+ set pciraf = 1
+ breaksw
+ case darwin: # Mac OS X
+ case macosx:
+ case macintel:
+ if (`$uname_cmd -m` == "x86_64") then # 64-bit
+ set mach = "macintel"
+ set hmach = "macintel"
+ else
+ set mach = "macosx" # 32-bit
+ set hmach = "macosx"
+ endif
+ set TAPES = "/dev/*sa[0-7]"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/bin/ls -s"
+ set LSDF = "-lLtg"
+ set pciraf = 1
+ breaksw
+ case freebsd: # FreeBSD
+ set mach = "freebsd"
+ set hmach = "freebsd"
+ set TAPES = "/dev/*sa[0-7]"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/bin/ls -s"
+ set LSDF = "-lLtg"
+ set pciraf = 1
+ breaksw
+ case hp-ux: # HP/UX 10.20
+ set mach = "hp700"
+ set hmach = "hp700"
+ set TAPES = "/dev/rmt/[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/bin/ls -s"
+ set LSDF = "-lLt"
+ breaksw
+ case irix: # SGI IRIX 6.5
+ case irix64:
+ set mach = "irix"
+ set hmach = "irix"
+ set TAPES = "/dev/tps[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/bin/ls -s"
+ set LSDF = "-lLt"
+ breaksw
+ case aix: # IBM AIX V4
+ set mach = "rs6000"
+ set hmach = "rs6000"
+ set TAPES = "/dev/rmt[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/bin/ls -s"
+ set LSDF = "-lLtg"
+ breaksw
+ case osf1: # Alpha Tru64
+ set mach = "alpha"
+ set hmach = "alpha"
+ set TAPES = "/dev/nrmt[0-7]* /dev/rmt[0-7]*"
+ set shlib = "yes"
+ set LIBFILES = "libiraf.so"
+ set LS = "/bin/ls -s"
+ set LSDF = "-lLtg"
+ breaksw
+ case ultrix: # DEC Ultrix
+ set mach = "ultrix"
+ set hmach = "ultrix"
+ set TAPES = "/dev/[n]rmt[0-7]*"
+ set shlib = "no"
+ set LIBFILES = ""
+ set LS = "/bin/ls -s"
+ set LSDF = "-lLtg"
+ breaksw
+
+ default:
+ # We don't want to be limited by the CYGWIN version numbering so
+ # look for a truncated match here before punting.
+ set os_mach = `echo $UNAME | cut -c1-6`
+ if ("$os_mach" == "cygwin") then
+ set mach = "cygwin"
+ set hmach = "cygwin"
+ set shlib = "no"
+ set LIBFILES = ""
+ set TAPES = "" # no tape support
+ set do_tapecaps = 0
+ set do_tapes = 0
+ set do_pipes = 0
+ breaksw
+
+ else
+ ERRMSG "Unable to determine platform architecture. Please"
+ ERRMSG "contact the forums at http://forums.iraf.net"
+ NEWLINE
+ exit 1
+ else
+endsw
+
+###################### END OF MACHDEP DEFINITIONS. ########################
+
+
+#=============================================================================
+# Initializations.
+#=============================================================================
+set errstat = 0 # initialize status counters
+set ok_count = 0
+set err_count = 0
+set warn_count = 0
+set defstat = " OK "
+
+
+#=============================================================================
+# Process any command line arguments.
+#=============================================================================
+
+set early_exit = 0
+set general = 0
+set severe = 0
+
+while ("$1" != "")
+ switch ("$1")
+ case -G: # Output General Info only
+ set general = 1
+ set early_exit = 1
+ goto General
+ breaksw
+ case -V: # Verification Test Only
+ set early_exit = 1
+ breaksw
+ case -N: # Test Networking Only
+ set early_exit = 1
+ goto Networking
+ breaksw
+ case -P: # Test Packages Only
+ set early_exit = 1
+ goto External_Packages
+ breaksw
+ case -D: # Test Display Only
+ set early_exit = 1
+ goto Image_Display
+ breaksw
+ case -T: # Test Tapes Only
+ set early_exit = 1
+ goto Tape_Device
+ breaksw
+
+ case -hl: # disable highlighting
+ NEWLINE
+ echo "WARNING: Highlighting is not permitted by this script, ignoring."
+ NEWLINE
+ breaksw
+ case +hl: # enable highlighting
+ NEWLINE
+ echo "WARNING: Highlighting is not permitted by this script, ignoring."
+ NEWLINE
+ breaksw
+
+ case -help:
+ case -h:
+ goto Usage
+ default:
+ ERRMSG "SYSINFO: unknown argument $1"
+ goto Usage
+ endsw
+
+ if ("$2" == "") then
+ break
+ else
+ shift
+ endif
+end
+
+
+
+#=============================================================================
+# General Information
+#=============================================================================
+
+General:
+
+NEWLINE
+BOLD_ON
+echo " General Information"
+echo " ==================="
+BOLD_OFF
+NEWLINE
+
+# Document the system information.
+echo "Host name: "`hostname`
+echo "Operating System: "`uname -a`
+echo "Architecture: "$mach
+echo "HSI architecture: "$hmach
+
+if ($pciraf && -e /etc/issue) then
+ set issue = `cat /etc/issue`
+ NEWLINE
+ echo "PC Issue: " $issue
+endif
+
+NEWLINE
+
+# Check the iraf root directory stuff
+echo -n "IRAF environment path: "
+if ($?iraf == 1) then
+ set env_iraf = $iraf
+ echo "$iraf"
+else
+ set env_iraf = ""
+ echo "<undefined>"
+endif
+
+echo -n "Checking for <iraf.h> "
+if (-e /usr/include/iraf.h) then
+ NEWLINE
+ echo -n " IRAF path: "
+ set ip = `grep "^#define IRAF" /usr/include/iraf.h | sed -e 's/\"//g'`
+ if ("$ip" != "") then
+ echo $ip[3]
+ set irafh_iraf = $ip[3]
+ else
+ echo "not found"
+ endif
+
+ echo -n " HOST path: "
+ set ip = `grep "^#define HOST" /usr/include/iraf.h | sed -e 's/\"//g'`
+ if ("$ip" != "") then
+ echo $ip[3]
+ else
+ echo "not found"
+ endif
+
+ echo -n " TMP path: "
+ set ip = `grep "^#define TMP" /usr/include/iraf.h | sed -e 's/\"//g'`
+ if ("$ip" != "") then
+ echo $ip[3]
+ else
+ echo "not found"
+ endif
+else
+ echo " not found"
+ NEWLINE
+ echo " *** The file /usr/include/iraf.h was not found on this system"
+ echo " *** which means the install script was not run on this machine."
+ if ("$env_iraf" != "") then
+ echo " *** Using environment definition: $env_iraf"
+ endif
+ NEWLINE
+ set irafh_iraf = ""
+endif
+
+if ("$env_iraf" != "" && "$irafh_iraf" != "") then
+ if ("$env_iraf" != "$irafh_iraf") then
+ NEWLINE
+ echo "WARNING: iraf environment and <iraf.h> root directories differ."
+
+ # First make sure we have a valid path.
+ if ( !(-e $env_iraf/unix/hlib/zzsetenv.def)) then
+ MSG "Environment definition looks incorrect."
+ MSG "Using <iraf.h> definition '$irafh_iraf'"
+
+ # Strip off any trailing '/'.
+ set iraf = `echo $irafh_iraf | sed -e 's+/\(["]*\)$+\1+'`
+
+ else if ( !(-e $irafh_iraf/unix/hlib/zzsetenv.def)) then
+ MSG "<iraf.h> definition looks incorrect."
+ MSG "Using environment definition '$env_iraf'"
+
+ # Strip off any trailing '/'.
+ set iraf = `echo $env_iraf | sed -e 's+/\(["]*\)$+\1+'`
+ endif
+
+ NEWLINE
+
+ else
+ if ("$env_iraf" != "") then
+ set iraf = `echo $env_iraf | sed -e 's+/\(["]*\)$+\1+'`
+ else
+ set iraf = `echo $irafh_iraf | sed -e 's+/\(["]*\)$+\1+'`
+ endif
+ endif
+
+else if ("$env_iraf" == "" && "$irafh_iraf" == "") then
+ NEWLINE
+ MSG "No 'iraf' defined in the environment and there is no <iraf.h>"
+ MSG "file on this machine. Please specify an iraf path in the"
+ MSG "environment or run the install script to proceed."
+ NEWLINE
+ exit 1
+
+else if ("$env_iraf" == "") then
+ # Strip off any trailing '/'.
+ set iraf = `echo $irafh_iraf | sed -e 's+/\(["]*\)$+\1+'`
+
+else if ("$irafh_iraf" == "") then
+ # Strip off any trailing '/'.
+ set iraf = `echo $env_iraf | sed -e 's+/\(["]*\)$+\1+'`
+endif
+
+
+NEWLINE
+echo "Using iraf root path: $iraf"
+NEWLINE
+
+# Initialize for files we'll be checking later.
+set tapecap_file = "$iraf/dev/tapecap"
+set termcap_file = "$iraf/dev/termcap"
+set graphcap_file = "$iraf/dev/graphcap"
+
+
+
+# Get the motd header string.
+echo -n 'IRAF version: '
+if (-e $iraf/unix/hlib/motd) then
+ set motd = "$iraf/unix/hlib/motd"
+ set ver = `head -1 $motd | sed -e 's/NOAO//g' -e 's/EXPORT//g'`
+ echo $ver
+else
+ echo "<unknown>"
+endif
+NEWLINE
+
+
+# Get the last time the hlib$utime (install) was updated.
+echo -n "Install script last run: "
+if (-e $iraf/unix/hlib/utime) then
+ set dat = `$LS $LSDF $iraf/unix/hlib/utime | head -2 | tail -1`
+ set utime = `echo -n $dat | awk '{printf ("%3s %2s %-5s\t", $7, $8, $9)}'`
+ echo $utime
+else
+ echo "<unknown>"
+endif
+
+# Look around for the local iraf commands directory.
+echo -n "IRAF command directories: "
+set clpath = `which cl`
+set lbins = ""
+if ("`echo $clpath | grep 'Command not found'`" == "") then
+ set d_lbin = $clpath:h
+
+ foreach p ($path)
+ if (-d $p && -e $p/cl) then
+ set lbin = $p
+ set lbins = `echo $lbins $p`
+ if ("$lbins" == "$lbin") then
+ echo $p
+ else
+ echo " $p"
+ endif
+ endif
+ end
+
+ if ("$lbin" == "") then
+ echo "not found"
+ endif
+else
+ echo "not found"
+endif
+
+
+# If we use a shared library see if it's in the path someplace.
+if ("$shlib" == "yes") then
+ echo -n "IRAF shared lib directory: "
+ set llib = ""
+ set llibs = ""
+
+ # Look around and come up with a likely candidate directory.
+ set sysp = "/usr/local/lib /local/lib /usr/lib /var/shlib /lib"
+ if ($?LD_LIBRARY_PATH) then
+ set userp = `echo $LD_LIBRARY_PATH | sed -e 's/:/ /g'`
+ else
+ set userp = ""
+ endif
+ foreach p ($sysp $userp)
+ if (-d $p) then
+ foreach l ($LIBFILES)
+ if (-e $p/$l) then
+ set llib = $p
+ set llibs = `echo $llibs $p`
+
+ if ("$llibs" == "$llib") then
+ echo $p
+ else
+ echo " $p"
+ endif
+ endif
+ end
+ endif
+ end
+
+ if ("$llib" == "") then
+ echo "not found"
+ endif
+endif
+
+
+# Get the default imdir from the mkiraf.csh
+echo -n "Default image storage dir: "
+set hlib = $iraf/unix/hlib/
+if (-e $hlib/mkiraf.csh) then
+ set p = `grep "^set imdir" $hlib/mkiraf.csh | sed -e 's/\"//g'`
+ if ("$p" != "") then
+ echo $p[4]
+ set imdir = $p[4]
+ else
+ echo "not found"
+ endif
+else
+ echo "<unknown>"
+endif
+
+
+# Print some interesting default system settings from hlib$zzsetenv.def.
+set WS = '[ ]'
+set ZZDEFS = "printer stdplot editor imtype stdimage cmbuflen min_lenuserarea graphcap termcap tapecap"
+
+NEWLINE
+echo 'Default settings in the hlib$zzsetenv.def file:'
+
+if (-e $hlib/zzsetenv.def) then
+ foreach i ($ZZDEFS)
+ set p = `grep "^set$WS$i" $hlib/zzsetenv.def | sed -e 's/\"//g'`
+ if ("$p" != "") then
+ set $i = '$p[4]'
+ echo ${i}: $p[4] | awk '{ printf (" %-12s\t %s\n", $1, $2)}'
+
+ # Save the *cap file for later use.
+ if ("$i" == "termcap" && "$p[4]" != 'dev$termcap') then
+ set termcap_file = $p[4]
+ else if ("$i" == "graphcap" && "$p[4]" != 'dev$graphcap') then
+ set graphcap_file = $p[4]
+ else if ("$i" == "tapecap" && "$p[4]" != 'dev$tapecap') then
+ set tapecap_file = $p[4]
+ endif
+ else
+ echo ${i}: | awk '{ printf (" %-12s\tnot found\n", $1, $2)}'
+ endif
+ end
+else
+ MSG 'hlib$zzsetenv.def file not found'
+ set severe = 1
+endif
+NEWLINE
+
+
+if ($pciraf) then
+ NEWLINE
+ echo "X Server Version information:"
+ echo " "`X -version |& egrep "^XFree86"`
+ echo " "`X -version |& egrep "^Release"`
+ echo " "`X -version |& egrep "Operating"`
+endif
+
+
+NEWLINE
+echo "Compilers and Development Tools Available:"
+echo " (NOTE: duplicates are possible due to the search path"
+echo " used and symbolic links for commands.)"
+NEWLINE
+set found = 0
+foreach d ($path)
+ foreach i (cc gcc acc c89 f77 g77 f90 fort f2c yacc bison lex flex)
+ if (-e $d/$i) then
+ echo " "$d/$i
+ set found = 1
+ endif
+ end
+end
+if ($found == 0) then
+ echo " None Found"
+ NEWLINE
+endif
+
+
+if ($severe == 1) then
+ NEWLINE
+ NEWLINE
+ BOLD_ON
+ echo "======================================================================"
+ echo "SYSINFO: Aborting due to severe errors."
+ echo "======================================================================"
+ BOLD_OFF
+ NEWLINE
+ exit 1
+
+else if ($general == 1) then
+ goto exit_early
+endif
+
+
+
+
+
+#=============================================================================
+# Installation Verification
+#=============================================================================
+
+Verification:
+
+echo; NEWLINE
+echo "======================= Verifying Installation ======================="
+NEWLINE
+
+##############################################################################
+#
+# Step 1: VERIFICATION
+#
+# Run some simple checks to be sure the system was unpacked correctly
+# and the settings used are correct. Verification tests include:
+#
+# o Verify the machine type and document settings.
+# o Check iraf root directory looks correct.
+# o Check iraf root and imdir aren't the same
+# o Check iraf user exists in passwd file.
+# o Check iraf user login path in passwd file is iraf$local.
+# o Check iraf tree for proper structure.
+# o Check iraf tree is owned by 'iraf'
+# o Check binary dirs are both populated correctly.
+# o Check that the local bin directory exists.
+# o Check that the local lib directory exists.
+#
+# An error at this stage will cause the script to exit so we can reset and
+# try again.
+#
+##############################################################################
+
+
+# ============================================
+# The following is partially system dependent.
+# ============================================
+
+# Set the BINDIRS pathnames - directories where the HSI executables go.
+set host = "$iraf/unix"
+set hbin = "$iraf/unix/bin.$hmach"
+set hlib = "$iraf/unix/hlib"
+set fbin = "$iraf/bin"
+
+# Replace any // by /.
+set host = `echo $host | sed -e "s+//+/+g"`
+set hbin = `echo $hbin | sed -e "s+//+/+g"`
+set fbin = `echo $fbin | sed -e "s+//+/+g"`
+set hlib = `echo $hlib | sed -e "s+//+/+g"`
+
+# Strip any trailing /.
+set host = `echo $host | sed -e 's+/\(["]*\)$+\1+'`
+set hbin = `echo $hbin | sed -e 's+/\(["]*\)$+\1+'`
+set fbin = `echo $fbin | sed -e 's+/\(["]*\)$+\1+'`
+set hlib = `echo $hlib | sed -e 's+/\(["]*\)$+\1+'`
+set BINDIRS = "$hbin $hlib $fbin $host"
+
+# The following file lists are partially system dependent.
+set PATHFILES = "mkiraf.csh libc/iraf.h cl.csh ../../local/.login"
+set MODEFILES = "cl.csh fc.csh mkiraf.csh mkfloat.csh mkmlist.csh $host/reboot generic.e mkpkg.e rmbin.e rmfiles.e rpp.e rtar.e wtar.e xc.e xpp.e xyacc.e sgidispatch.e $hbin/sgi2*.e"
+set LINKFILES = "cl.e mkiraf.csh mkmlist.csh generic.e mkpkg.e rmbin.e rmfiles.e rtar.e sgidispatch.e wtar.e rpp.e xpp.e xyacc.e xc.e"
+set CMDLINKS = "cl mkiraf mkmlist generic mkpkg rmbin rmfiles rtar sgidispatch wtar rpp xpp xyacc xc"
+# ------------------------------------------
+
+
+# Check for <iraf.h> file.
+echo -n "Checking for <iraf.h> file ... "
+if (! (-e /usr/include/iraf.h)) then
+ DO_FAIL ; set errstat = 1 ; set iraf_root_ok = 0
+ NEWLINE
+ MSG "The file /usr/include/iraf.h was not found which means"
+ MSG "the install script was not run on this machine."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+else
+ DO_OK ; set iraf_root_ok = 1
+ set ok_count = `expr $ok_count + 1`
+endif
+
+
+# Check $iraf path in PATHFILES
+echo -n "Checking iraf path in system files ... "
+
+set err_seen = 0
+foreach i ($PATHFILES)
+ if (-e $iraf/unix/hlib/$i) then
+ grep $iraf $iraf/unix/hlib/$i >& /dev/null
+ endif
+ if ($status == 1 || (! (-e $iraf/unix/hlib/$i))) then
+ if ("$err_seen" == 0) then
+ DO_FAIL
+ set err_seen = 1 ; set err_count = `expr $err_count + 1`
+ endif
+ if (! -e $i) then
+ MSG "File $i not found."
+ else
+ MSG "File $i contains the wrong iraf path"
+ endif
+ endif
+end
+if ("$err_seen" == 0) then
+ BOLD_ON
+ echo "[ $defstat ]"
+ BOLD_OFF
+endif
+
+
+
+# Check that the specified local bin directory exists.
+echo -n "Checking that local command bin directory exists ... "
+if ("$lbin" == "") then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "No local bin directory found on this machine which"
+ MSG "implies that either your path does not include the"
+ MSG "local bin dir or else the install script was not run"
+ MSG "on this machine."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+else
+ if (-d "$lbin") then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ else
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The specified local bin directory does not exist. This"
+ MSG "directory should be a common local bin directory which "
+ MSG "is found in all user's paths, e.g. /usr/local/bin."
+ MSG "Please create the directory or else reset and try again."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+ endif
+endif
+
+
+# Check that the specified local lib directory exists.
+if ("$shlib" == "yes") then
+ echo -n "Checking that local lib directory exists ... "
+ if (-d "$llib") then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ else
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The specified local lib directory does not exist. This"
+ MSG "directory should be a common local lib directory which "
+ MSG "is found in all user's paths, e.g. /usr/local/lib."
+ MSG "This directory is required for the iraf shared library."
+ MSG "Please create the directory or else reset and try again."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+ endif
+endif
+
+
+# Check mode on MODEFILES
+echo -n "Checking iraf file permissions ... "
+set err_seen = 0
+foreach i ($MODEFILES)
+ set file = $i
+ if (! -e $file) then
+ foreach j ($BINDIRS)
+ if (-e $j/$i) then
+ set file = $j/$i
+ break
+ endif
+ end
+ endif
+
+ if (-e $file) then
+ if ("`$LS -l $file | grep '.rwxr.xr.x'`" == "") then
+ if ("$err_seen" == 0) then
+ DO_WARN
+ set err_seen = 1 ; set err_count = `expr $err_count + 1`
+ endif
+ MSG "File $file:t not mode 0755."
+ endif
+ else
+ if ("$err_seen" == 0) then
+ DO_FAIL
+ set err_seen = 1 ; set err_count = `expr $err_count + 1`
+ endif
+ MSG "File $file:t not found."
+ endif
+end
+if ("$err_seen" == 0) then
+ BOLD_ON
+ echo "[ $defstat ]"
+ BOLD_OFF
+endif
+
+
+# Check valid links on CMDLINKS
+echo "Checking iraf command links ..."
+set err_seen = 0
+foreach p ($lbins)
+ echo -n " Checking command dir $p ... "
+
+ foreach cmd ($CMDLINKS)
+
+ # Locate the file to be linked to.
+ set file1 = $cmd:r
+ foreach j ($BINDIRS)
+ set file2 = $j/$file1.csh
+ if (-e $file2) then
+ break
+ endif
+ set file2 = $j/$cmd.e
+ if (-e $file2) then
+ break
+ endif
+ end
+
+ # See first if it exists directly, or as a link to some other
+ # valid file.
+ if (! (-e $p/$cmd) && ! (-e $file2) ) then
+ if ("$err_seen" == 0) then
+ DO_FAIL
+ set err_seen = 1 ; set err_count = `expr $err_count + 1`
+ endif
+ echo -n " " ; MSG "File $p/$cmd not found."
+
+ # Then check that the link is correct
+ else if ("`$LS -l $p/$file1 | grep $file2`" == "") then
+ if ("$err_seen" == 0) then
+ DO_FAIL
+ set err_seen = 1 ; set err_count = `expr $err_count + 1`
+ endif
+ echo -n " " ; MSG "Link $p/$cmd is invalid."
+ endif
+ end
+ if ("$err_seen" == 0) then
+ BOLD_ON
+ echo "[ $defstat ]"
+ BOLD_OFF
+ endif
+end
+if ($err_seen == 1) then
+ NEWLINE
+ MSG "1) A 'not found' error means that one or more of the commands"
+ MSG " normally installed by the install script was not found."
+ MSG " This may indicate a non-standard installation."
+ MSG "2) A 'link is invalid' message means that the command link"
+ MSG " was found but either points to a nonexistent file or to"
+ MSG " the wrong file for this platform (e.g. the HSI bin.sparc"
+ MSG " directory instead of bin.ssol)."
+ MSG "3) Multiple local bin directories are not strictly an error"
+ MSG " but may confuse users. Unneeded links should be removed."
+ MSG ""
+ MSG "The command links should be checked in either cases and the"
+ MSG "install script rerun to clear the error."
+ NEWLINE
+endif
+
+
+# Check iraf root directory looks correct.
+NEWLINE
+echo -n "Checking contents of iraf root directory ... "
+if (! ((-d $iraf/dev) && (-d $iraf/pkg) && (-d $iraf/noao))) then
+ DO_FAIL ; set errstat = 1 ; set iraf_root_ok = 0
+ NEWLINE
+ MSG "The definition of '$iraf' looks incorrect. The iraf root"
+ MSG "directory is the place where the AS distribution was unpacked,"
+ MSG "it contains subdirectories such as 'dev', 'local', 'noao', and"
+ MSG "'pkg' and the binary directory links."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+else
+ DO_OK ; set iraf_root_ok = 1
+ set ok_count = `expr $ok_count + 1`
+endif
+
+
+# Cannot have iraf and imdir the same.
+echo -n "Checking iraf root and imdir directory ... "
+if ($iraf == $imdir) then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "'imdir' should not be the same as the iraf root directory."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+else
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+endif
+
+# Check iraf user.
+echo -n "Checking for iraf user account ... "
+
+set pass = ""
+if ($pciraf && ($mach == "macosx" || $mach == "macintel")) then
+ # Special-case user info check for OS X and systems where the /etc/passwd
+ # file may not contain the user info.
+
+ if (`id iraf |& grep -i 'no such user'` != "") then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "No 'iraf' user was found on the system. The iraf user should"
+ MSG "be created before installing the system to ensure all files"
+ MSG "are owned by the iraf user, and the have the proper environment"
+ MSG "defined for installation and maintanence."
+ NEWLINE
+
+ else
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+
+ # Check iraf user login path and shell
+ echo -n "Checking iraf user login directory ... "
+
+ set v = `finger iraf |& egrep "^Directory"`
+ set ihome = `echo $v[2] | sed -e 's+/\(["]*\)$+\1+'`
+ set shel = `echo $v[4] | sed -e 's+/\(["]*\)$+\1+' | grep csh`
+ if ("$ihome" != "$iraf/local" || $shel == "") then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The iraf user login info appears to be incorrect. For the"
+ MSG "given iraf root this path should be '$iraf/local',"
+ MSG "please run the 'chpass' command to change this. The iraf"
+ MSG "user account should also be defined to use a C-shell."
+ if ("$iraf_root_ok" == 0) then
+ MSG "(This error may be related to the incorrect definition of"
+ MSG "the iraf root directory seen above.)"
+ endif
+ NEWLINE
+ else
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ endif
+
+ endif
+
+else if (!(-r /etc/passwd)) then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The /etc/passwd file is not readable so I can't check for"
+ MSG "and iraf user. This may also cause problems with IRAF
+ MSG "networking when connecting to this machine."
+ NEWLINE
+else
+ set pass = `grep ^iraf: /etc/passwd`
+ if ("$pass" == "") then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "No 'iraf' user was found in the /etc/passwd file. The iraf"
+ MSG "user should be created before installing the system to ensure"
+ MSG "all files are owned by the iraf user, and the have the proper"
+ MSG "environment defined for installation and maintanence."
+ NEWLINE
+ else
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+
+ # Check iraf user login path in passwd file is iraf$local.
+ echo -n "Checking iraf user login directory ... "
+ set pass = `grep ^iraf: /etc/passwd | sed -e 's/[ \*]/_/g'|sed -e 's/:/ /g'`
+
+ set c = `echo $pass | wc -w`
+ set indx = `expr $c - 1`
+
+ set ihome = `echo $pass[$indx] | sed -e 's+/\(["]*\)$+\1+'`
+ set shel = `echo $pass[$c] | sed -e 's+/\(["]*\)$+\1+' | grep csh`
+ if ("$ihome" != "$iraf/local" || $shel == "") then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The iraf user login directory appears to be incorrect."
+ MSG "For the given iraf root this path should be '$iraf/local',"
+ MSG "please edit the /etc/passwd file to change this. The iraf"
+ MSG "user account should also be defined to use a C-shell."
+ if ("$iraf_root_ok" == 0) then
+ MSG "(This error may be related to the incorrect definition of"
+ MSG "the iraf root directory seen above.)"
+ endif
+ NEWLINE
+ else
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ endif
+ endif
+endif
+
+
+# Check iraf tree for proper structure.
+set iraf_r = $iraf # iraf root directory
+set iraf_p = $iraf_r:h # iraf parent directory
+set iraf_b = $iraf_p/irafbin # irafbin directory
+set iraf_ib = $iraf_b/bin.$mach # irafbin IB directory
+set iraf_nb = $iraf_b/noao.bin.$mach # irafbin NB directory
+set iraf_tree_ok = 1
+
+echo "Checking for proper iraf tree structure in $iraf_p ..."
+
+echo -n " Checking for 'iraf' subdir ... "
+if (-d "$iraf_p/iraf") then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+else
+ DO_FAIL ; set errstat = 1 ; set iraf_tree_ok = 0
+ set err_count = `expr $err_count + 1`
+endif
+
+echo -n " Checking for 'irafbin' subdir ... "
+if (-d "$iraf_p/irafbin") then
+ DO_OK ; set ok_count = `expr $ok_count + 1`
+else
+ set zztemp = $iraf_tree_ok
+ echo " " ; set errstat = 1 ; set iraf_tree_ok = 0
+
+ # Look for a fallback to recover ...
+ echo -n " Checking for fallback tree structure ... "
+ set iraf_p = $iraf/../
+ set iraf_b = $iraf_p/irafbin # irafbin directory
+ set iraf_ib = $iraf_b/bin.$mach # irafbin IB directory
+ set iraf_nb = $iraf_b/noao.bin.$mach # irafbin NB directory
+ if (-d "$iraf_p/irafbin") then
+ DO_OK ; set errstat = 0 ; set iraf_tree_ok = $zztemp
+ set ok_count = `expr $ok_count + 1`
+ else
+ DO_FAIL ; set errstat = 1 ; set iraf_tree_ok = 0
+ set err_count = `expr $err_count + 1`
+ endif
+endif
+
+echo -n " Checking for 'irafbin/bin.$mach' subdir ... "
+if (-d "$iraf_p/irafbin/bin.$mach") then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+else
+ DO_FAIL ; set errstat = 1 ; set iraf_tree_ok = 0
+ set err_count = `expr $err_count + 1`
+endif
+
+echo -n " Checking for 'irafbin/noao.bin.$mach' subdir ... "
+if (-d "$iraf_p/irafbin/noao.bin.$mach") then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+else
+ DO_FAIL ; set errstat = 1 ; set iraf_tree_ok = 0
+ set err_count = `expr $err_count + 1`
+endif
+
+
+if ("$iraf_tree_ok" == 0) then
+ set back = $cwd ; chdir $iraf_p ; set iraf_p = $cwd; chdir $back
+ NEWLINE
+ MSG " An error was detected in the structure of the iraf tree."
+ MSG " Your directory tree should look something like:"
+ MSG ""
+ MSG " $iraf_p"
+ MSG " / \"
+ MSG " (AS) /iraf /irafbin"
+ MSG " / \"
+ MSG " (IB) bin.$mach noao.bin.$mach (NB)"
+ MSG ""
+ MSG " The AS, IB, and NB distribution files are shown where they"
+ MSG " should be unpacked."
+ NEWLINE
+endif
+
+
+echo -n " Checking file ownerships ... "
+
+if ($mach == "hp700" || $mach == "rs6000" || $mach == "irix") then
+ set downr = `$LS -lLd $iraf_p/iraf | awk '{print ($5)}'`
+ set fownr = `$LS -lLd $iraf_p/iraf/mkpkg | awk '{print ($5)}'`
+else
+ set downr = `$LS -lLd $iraf_p/iraf | awk '{print ($4)}'`
+ set fownr = `$LS -lLd $iraf_p/iraf/mkpkg | awk '{print ($4)}'`
+endif
+
+if ("$downr" == "iraf" && "$fownr" == "iraf") then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+else if ("$downr" == "tody" && "$fownr" == "tody") then
+ # Special exemption for NOAO installations.
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+else
+ DO_FAIL
+ NEWLINE
+ MSG "(root dir owned by $downr, iraf files owned by $fownr)"
+ MSG "The iraf tree should be owned by the iraf user so it can"
+ MSG "be updated and maintained properly."
+ MSG ""
+ MSG 'To fix this, login as root, set the iraf environment, and'
+ MSG 'issue the commands:'
+ MSG ""
+ MSG " cd " `echo $iraf_p`
+ MSG ' chown -R iraf . # change dir owner'
+ MSG ' cd $hbin # go to HSI bin dir'
+ MSG ' chown 0 alloc.e # fix alloc.e ownership'
+ MSG ' chmod 4755 alloc.e # fix permissions'
+ NEWLINE
+ set errstat = 1 ; set err_count = `expr $err_count + 1`
+endif
+
+
+# Check that binary dirs are populated correctly.
+set archs = ""
+set back = $cwd ; chdir $iraf_p ; set iraf_p = $cwd; chdir $back
+
+NEWLINE ; NEWLINE
+echo "======================================================================"
+NEWLINE
+echo "Checking Core system binaries in $iraf_p/irafbin ..."
+
+# Do a special check that we have a bin directory for the current arch.
+echo -n " Checking for current platform arch... "
+if (! -e $iraf_ib) then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The core system binary directory, $iraf_ib, does"
+ MSG "not exist for this platform."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+else
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+endif
+
+NEWLINE
+echo " Size Date"
+echo " ---- ----"
+
+# Check all of the bin directories in case we have a multi-arch system
+foreach i ($iraf_p/irafbin/bin.*)
+ set dir = $i:t
+ if ($dir:r == "bin") then
+ set sz = `(chdir $i ; du -s | awk '{printf ("%d", $1)}')`
+ echo -n $dir $sz | awk '{printf ("%18s\t%5d\t", $1, $2)}'
+
+ if (`$LS -lL $i | wc -l` > 1) then
+ set dat = `$LS $LSDF $i/* | head -2 | tail -1`
+ echo -n $dat | awk '{printf ("%3s %2s %-5s\t\t\t", $7, $8, $9)}'
+
+ if (! (-e "$i/cl.e" && -e "$i/x_system.e")) then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The core system binary directory, $i:t, does"
+ MSG "not appear to contain the proper binaries. The IB dist-"
+ MSG "ribution files should be unpacked in this directory."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+ else
+ DO_OK ; set ok_count = `expr $ok_count + 1`
+
+ # Save the list of installed binaries, allow for changes between
+ # the binary arch and HSI arch here (e.g. ssun->ssol).
+ if ("$dir:e" == "ssun") then
+ set archs = `echo $archs ssol`
+ else
+ set archs = `echo $archs $dir:e`
+ endif
+ endif
+
+ else
+ echo "< empty > [ FAIL ]" ; set errstat = 1
+ NEWLINE
+ MSG "bin directory is empty or does not contain IRAF binaries."
+ NEWLINE
+ endif
+ endif
+end
+
+
+NEWLINE
+NEWLINE
+echo "Checking NOAO Package binaries in $iraf_p/irafbin ..."
+
+# Do a special check that we have a bin directory for the current arch.
+echo -n " Checking for current platform arch... "
+if (! -e $iraf_nb) then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The NOAO package binary directory, $iraf_nb, does"
+ MSG "not exist for this platform."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+else
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+endif
+
+NEWLINE
+NEWLINE
+echo " Size Date"
+echo " ---- ----"
+foreach i ($iraf_p/irafbin/noao.bin.*)
+ set dir = $i:t
+ if ($dir:r == "noao.bin") then
+ set sz = `(chdir $i ; du -s | awk '{printf ("%d", $1)}')`
+ echo -n $dir $sz | awk '{printf ("%18s\t%5d\t", $1, $2)}'
+
+ if (`$LS -lL $i | wc -l` > 1) then
+ set dat = `$LS $LSDF $i/* | head -2 | tail -1`
+ echo -n $dat | awk '{printf ("%3s %2s %-5s\t\t\t", $7, $8, $9)}'
+
+ if (! (-e "$i/x_apphot.e" && -e "$i/x_rv.e")) then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ if (-e "$iraf_ib/x_apphot.e" && -e "$iraf_ib/x_rv.e") then
+ NEWLINE
+ MSG "The NOAO package binary directory, $iraf_nb, is"
+ MSG "empty but the binaries appear to have been unpacked in"
+ MSG "the core system directory, $iraf_ib. These will need to"
+ MSG "be moved, please delete the binaries and start again, be"
+ MSG "sure to unpack the NB distribution files in the $iraf_nb"
+ MSG "directory and the core system file in the $iraf_ib"
+ MSG "directory."
+ else
+ NEWLINE
+ MSG "The NOAO package binary directory, $iraf_nb, does"
+ MSG "not appear to contain the proper files. The NB dist-"
+ MSG "ribution files should be unpacked in this directory."
+ endif
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+ else
+ DO_OK ; set ok_count = `expr $ok_count + 1`
+ endif
+
+ else
+ echo "< empty > [ FAIL ]" ; set errstat = 1
+ NEWLINE
+ MSG "bin directory is empty or does not contain NOAO binaries."
+ NEWLINE
+ endif
+
+ else
+ continue
+ endif
+end
+
+
+# Check the HSI binaries.
+NEWLINE
+NEWLINE
+echo "Checking HSI system binaries in $iraf/unix ..."
+
+# Do a special check that we have a bin directory for the current arch.
+echo -n " Checking for current platform arch... "
+if (! -e $iraf/unix/bin.$hmach) then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The HSI binary directory, $iraf/unix/bin.$hmach, does"
+ MSG "not exist for this platform."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+
+else if (! (-e "$iraf/unix/bin.$hmach/alloc.e")) then
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The HSI binary directory, $iraf/unix/bin.$hmach, appears"
+ MSG "to be empty."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+else
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+endif
+
+NEWLINE
+NEWLINE
+echo " Size Date"
+echo " ---- ----"
+
+set delete_bin = ""
+set empty_bin = ""
+foreach i ($iraf_p/iraf/unix/bin.*)
+ set dir = $i:t
+ if ($dir:r == "bin") then
+ set sz = `(chdir $i ; du -s | awk '{printf ("%d", $1)}')`
+ echo -n $dir $sz | awk '{printf ("%18s\t%5d\t", $1, $2)}'
+
+ if (`$LS -lL $i | wc -l` > 1) then
+ set d = `$LS $LSDF $i/* | head -2 | tail -1`
+ echo -n $dat | awk '{printf ("%3s %2s %-5s\t\t\t", $7, $8, $9)}'
+
+ if (! (-e "$i/alloc.e" && -e "$i/xc.e")) then
+ DO_FAIL ; set errstat = 1
+ else
+ DO_OK ; set ok_count = `expr $ok_count + 1`
+ endif
+ if ("`echo $archs | grep $dir:e`" == "") then
+ set delete_bin = `echo $delete_bin $dir`
+ endif
+
+ else
+ if ($sz < 8 && "`echo $archs | grep $dir:e`" == "") then
+ BOLD_ON
+ echo "< unused > [ OK ]"
+ BOLD_OFF
+ else
+ BOLD_ON
+ echo "< empty > [ WARNING ]" ; set errstat = 1
+ BOLD_OFF
+ set warn_count = `expr $warn_count + 1`
+ set empty_bin = `echo $empty_bin $dir`
+ endif
+ if ($sz > 8 && "`echo $archs | grep $dir:e`" == "") then
+ set delete_bin = `echo $delete_bin $dir`
+ endif
+ endif
+
+ else
+ continue
+ endif
+end
+NEWLINE
+
+if ("$delete_bin" != "") then
+ NEWLINE
+ MSG "The following bin directories were found to be"
+ MSG "unneeded for this installation. If disk usage is a"
+ MSG "concern the contents may be deleted to reclaim space:"
+ MSG ""
+ foreach i ($delete_bin)
+ MSG " $iraf/unix/$i"
+ end
+endif
+NEWLINE
+
+if ($early_exit == 1) then
+ goto exit_early
+endif
+
+#=============================================================================
+# Networking Information
+#=============================================================================
+
+Networking:
+
+set net_errstat = 0 # initialize error status
+
+NEWLINE
+echo "======================= Networking Information ======================="
+NEWLINE
+
+set hname = `hostname`
+set lhost_abbr = `hostname | awk '{printf ("%16.16s\n", $1 ) }'`
+set ihosts = $iraf/dev/hosts
+set nhost_files = `$LS -1 $iraf/dev/hosts* | wc -l`
+
+echo 'Local host name: '$hname
+echo 'Truncated host name: '$lhost_abbr
+if (`echo $hname | grep "\."` != "") then
+ # When using FQDN lnode may not be set....
+ set is_fqdn = yes
+ set domain = `hostname | sed -e 's/^[a-zA-Z0-9_\-]*\.//g'`
+ set lhost = `hostname | sed -e 's/\.[a-zA-Z0-9]*//g'`
+else
+ set is_fqdn = no
+ set domain = "<unknown>"
+ set lhost = $hname
+endif
+echo 'Domain name: '$domain
+echo 'No. of dev$host* files: '$nhost_files
+echo 'Using IRAF hosts file: '$ihosts
+
+
+NEWLINE
+echo -n 'Checking for iraf hosts file ... '
+if (-e $ihosts) then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+
+ set nhosts = `grep irafks.e $ihosts | wc -l`
+ set lnode = `grep irafks.e $ihosts | sort | grep $lhost | head -1`
+
+ # The following madness is required to workaround shortcomings in the
+ # GNU versions of the sed command (i.e. Linux/FreeBSD). Working sed
+ # commands for Sun here.
+ #
+ # set n = `cat $ihosts | sort | grep $lhost | head -1`
+ # set irafks = `echo $n | sed -e 's/^[a-zA-Z0-9 _\!\/\-\.:]*//g'`
+ # set nalias = `echo $n | sed -e 's/:[a-zA-Z0-9 _\!\/\-\.]*//g'`
+ # set rhs = `echo $n | sed -e 's/^[a-zA-Z0-9 _\!\-\.]*://g'`
+ # set nnode = `echo $rhs | sed -e 's/\![a-zA-Z0-9 _\!\/\-\.]*//g'`
+
+ set TEMP = "/tmp/_$$"
+ echo $lnode | sed -e 's/\!/ /g' > $TEMP
+ set line = `cat $TEMP`
+ RM $TEMP
+
+ set nalias = ""
+ set irafks = ""
+ set nnode = ""
+ if ("$line" != "") then
+ while ("$line[1]" != "")
+ if ("$line[1]" == ":") then
+ break
+ else
+ set nalias = `echo $nalias $line[1]`
+ endif
+ shift line
+ end
+ shift line
+ set nnode = $line[1] ; shift line
+ set irafks = $line[1] ; shift line
+ endif
+
+ # Print out the entry information found.
+ echo ' No. nodes in hosts file: '$nhosts
+ echo ' irafks.e pathname: '$irafks
+ echo ' Node aliases: '$nalias
+ echo ' Network node name: '$nnode
+ NEWLINE
+
+ # Make sure the node is in the file.
+ echo -n ' Checking for local node in hosts file ... '
+ if ("`grep $lhost $ihosts | head -1`" != "") then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ else
+ DO_FAIL ; set net_errstat = 1
+ NEWLINE
+ MSG "The local host, $lhost, was not found in the iraf hosts"
+ MSG "file $iraf/dev/hosts. This means that IRAF networking"
+ MSG "will not be available from this machine to others in the"
+ MSG "iraf network."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+ endif
+
+ # See if the irafks.e path is correct on this machine.
+ if ("$irafks" != "") then
+ echo -n ' Checking for irafks.e binary ... '
+ if (-e $irafks) then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ else
+ DO_FAIL ; set net_errstat = 1
+ NEWLINE
+ MSG "The named irafks.e binary was not found on this system."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+ endif
+ endif
+
+ # Look for duplicate host names which may trigger a CL bug.
+ echo -n ' Checking for duplicate hosts in dev$hosts file ... '
+ set dup_hosts = `grep irafks.e $ihosts | sort | awk '{print $1}' | uniq -d`
+ if ("$#dup_hosts" == 0) then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ else
+ DO_WARN ; set net_errstat = 1
+ NEWLINE
+ MSG 'Duplicate hosts found in dev$hosts file:'
+ grep irafks.e $ihosts | \
+ sort | \
+ awk '{print $1}' | \
+ uniq -d | \
+ awk '{printf(" ***\t\t%s\n", $1)}'
+ MSG ""
+ MSG "Duplicate node names should be removed to ensure"
+ MSG "networking and the CL operate properly."
+ NEWLINE
+ set warn_count = `expr $warn_count + 1`
+ endif
+
+else
+ DO_FAIL ; set net_errstat = 1
+ NEWLINE
+ MSG "The IRAF hosts file, $ihosts, was not found."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+endif
+
+
+# See what NETSTATUS says about this setup.
+NEWLINE
+echo -n 'Verify NETSTATUS says iraf networking is enabled ... '
+set system = $iraf/bin.$mach/x_system.e
+if (-e $system) then
+ set net = `$system netstatus | grep -i "interface disabled"`
+ if ("$net" == "") then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ else
+ DO_FAIL ; set net_errstat = 1
+ NEWLINE
+ MSG "The NETSTATUS task claims that networking is disabled."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+ endif
+else
+ DO_FAIL ; set net_errstat = 1
+ NEWLINE
+ MSG "The NETSTATUS task binary could not be executed."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+endif
+
+
+# See if we're in the trusted hosts file for rsh access.
+NEWLINE
+echo -n 'Checking for host in /etc/hosts.equiv ... '
+set equiv = /etc/hosts.equiv
+if (-e $equiv) then
+ if ("`grep $lhost $equiv | head -1`" != "") then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ else
+ DO_WARN ; set net_errstat = 1
+ NEWLINE
+ MSG "The local host, '$lhost', is not present in the $equiv"
+ MSG "file."
+ MSG ""
+ MSG "By default IRAF networking will try to use the 'rsh'"
+ MSG "protocol for connecting to a remote machine. Without a"
+ MSG "$equiv entry a networking attempt will fail and"
+ MSG "a password prompt will be required since an rexec protocol"
+ MSG "is the fallback. Some systems are not configured for rsh"
+ MSG "access even with a $equiv file, or rsh is not a valid"
+ MSG "command, and so some other protocol will be required."
+ MSG ""
+ MSG "A KSRSH unix environment variable may be defined to specify"
+ MSG "a different command or protocol (e.g. remsh or ssh). This"
+ MSG "is not a fatal error and will not prevent IRAF networking"
+ MSG "from working, but can be used to avoid to password prompt."
+ NEWLINE
+ set warn_count = `expr $warn_count + 1`
+ endif
+else
+ DO_WARN ; set net_errstat = 1
+ NEWLINE
+ MSG "The trusted hosts file, '$equiv', is not present on this"
+ MSG "system. This may mean that the 'rsh' connection protocol"
+ MSG "is not available and IRAF networking will require password"
+ MSG "prompts."
+ MSG ""
+ MSG "By default IRAF networking will try to use the 'rsh'"
+ MSG "protocol for connecting to a remote machine. Without a"
+ MSG "$equiv entry a networking attempt will fail and"
+ MSG "a password prompt will be required since an 'rexec' protocol"
+ MSG "is the fallback. Some systems are not configured for rsh"
+ MSG "access even with a $equiv file, or 'rsh' is not a valid"
+ MSG "command, and so some other protocol will be required."
+ MSG ""
+ MSG "A 'KSRSH' unix environment variable may be defined to specify"
+ MSG "a different command or protocol (e.g. 'remsh' or 'ssh'). This"
+ MSG "is not a fatal error and will not prevent IRAF networking from"
+ MSG "operating, but can be used to avoid to password prompt."
+ NEWLINE
+ set warn_count = `expr $warn_count + 1`
+endif
+
+
+# Print out the recommended dev$hosts entry for this machine.
+NEWLINE
+echo "----------------------------------------------------------------------"
+NEWLINE
+echo "Recommended $ihosts file entry for this machine: "
+NEWLINE
+echo -n " "
+if ("$is_fqdn" == "no") then
+ echo $lhost " : "$hname"\!"$iraf/bin.$mach/irafks.e
+else
+ echo $lhost $lhost_abbr " : " $nnode"\!"$iraf/bin.$mach/irafks.e
+endif
+NEWLINE
+
+
+if ($early_exit == 1) then
+ goto exit_early
+endif
+
+#=============================================================================
+# Image Display Device Information
+#=============================================================================
+
+Image_Display:
+
+NEWLINE
+echo "===================== Image Display Device Info ======================"
+NEWLINE
+
+set DISPLAY_SERVERS = "ximtool ximtool-alt saoimage ds9 saotng"
+set GRAPHICS_TERMS = "xgterm xterm"
+set IMTOOLRC = /usr/local/lib/imtoolrc
+
+
+if (! ($?termcap_file)) then
+ set termcap_file = "$iraf/dev/termcap"
+endif
+if (! ($?graphcap_file)) then
+ set graphcap_file = "$iraf/dev/graphcap"
+endif
+
+
+echo -n "Display Servers Available: "
+set found = 0
+set have_sockets = 0
+set have_saoimage = 0
+set have_ximtool = 0
+foreach i ($DISPLAY_SERVERS)
+ set p = `which $i |& grep -i "^\/"`
+ if ($status == 0) then
+ if ("$found" == 0) then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ endif
+ set d = `$LS $LSDF $p | head -2 | tail -1`
+ echo $d | awk '{printf (" ( Date: %3s %2s %-5s )\t", $7, $8, $9) }'
+ echo " "$p
+ set found = 1
+ if ("$i" == "saoimage") set have_saoimage = 1
+ if ("$i" == "ximtool") set have_ximtool = 1
+ if ("$i" != "saoimage") set have_sockets = 1
+ endif
+end
+
+if ($found == 0) then
+ DO_FAIL ; set errstat = 1
+ echo " None Found"
+ NEWLINE
+ MSG "No display servers were found on this machine or in the user"
+ MSG "path. A display server such as XImtool/SAOimage/SAOtng/DS9"
+ MSG "is required to be running on the local machine before an iraf"
+ MSG "display command (e.g. DISPLAY/TVMARK/IMEXAMINE) will work."
+ MSG ""
+ MSG "Remote displays (i.e. the server on one machine and IRAF on"
+ MSG "another) require either iraf networking be enabled or the X"
+ MSG "'DISPLAY' variable be set so the server appears on the remote"
+ MSG "machine."
+ MSG ""
+ MSG "XImtool can be downloaded from"
+ MSG ""
+ MSG " http://iraf.net/ftp/iraf/x11iraf"
+ MSG ""
+ MSG "or it's mirror sites. Contact http://iraf.net with questions."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+endif
+NEWLINE
+
+
+echo -n "Graphics Terminals Available: "
+set found = 0
+foreach i ($GRAPHICS_TERMS)
+ set p = `which $i |& grep "^\/"`
+ if ($status == 0) then
+ if ("$found" == 0) then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ endif
+ set d = `$LS $LSDF $p | head -2 | tail -1`
+ echo $d | awk '{printf (" ( Date: %3s %2s %-5s )\t", $7, $8, $9) }'
+ echo " "`which $i`
+ set found = 1
+ endif
+end
+if ($found == 0) then
+ DO_FAIL ; set errstat = 1
+ echo " None Found"
+ NEWLINE
+ MSG "No 'xterm' or 'xgterm' binary was found on this systen or"
+ MSG "in the user path. IRAF graphics require some form of "
+ MSG "graphics-enabled terminal window to be running or else"
+ MSG "garbarge characters will appear on the screen. Windows"
+ MSG "such as 'cmdtool', 'rxvt', 'aixterm', 'hpterm', 'decterm'"
+ MSG "do not support graphics and should not be used for IRAF."
+ MSG ""
+ MSG "The default terminal type is set in the login.cl when"
+ MSG "a user runs MKIRAF, this is the type of window they should"
+ MSG "be running when starting IRAF. Users can use the 'show"
+ MSG "terminal' command to see the current setting, or 'stty"
+ MSG "xterm' or 'stty xgterm' command (or rerun MKIRAF and reset"
+ MSG "the default terminal type) to change the default iraf terminal."
+ MSG ""
+ MSG "XGterm can be downloaded from"
+ MSG ""
+ MSG " http://iraf.net/ftp/iraf/x11iraf"
+ MSG ""
+ MSG "or it's mirror sites. Contact site support with questions."
+ set err_count = `expr $err_count + 1`
+endif
+NEWLINE
+
+
+# Check for imtoolrc file and /usr/local/lib dir.
+set errstat = 0
+NEWLINE
+echo -n "Checking for /usr/local/lib directory ... "
+if (-d /usr/local/lib) then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+
+ # Check for imtoolrc file...
+ echo -n "Checking for imtoolrc file ... "
+ if (-e $IMTOOLRC) then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+
+ set islink = `$LS -l $IMTOOLRC | grep "^l"`
+ set file = $iraf/dev/imtoolrc
+ if ("$islink" != "" && -e $file) then
+
+ # Check for valid link
+ echo -n "Checking for valid imtoolrc link ... "
+ set tmp = `diff $IMTOOLRC $file | wc -l`
+ if ("$tmp" == 0) then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ else
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The /usr/local/lib/imtoolrc link is invalid"
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+ endif
+ endif
+
+ else
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The /usr/local/lib/imtoolrc file is missing."
+ MSG "This normally gets created by the iraf install script"
+ MSG "but only if /usr/local/lib already exists. Without"
+ MSG "this file you won't be able to use ximtool with a buffer"
+ MSG "larger than 512x512, to fix this just create the"
+ MSG "/usr/local/lib dir and rerun the install script or"
+ MSG "make the link by hand as the root user."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+ endif
+
+
+ # Check for imtoolcmap directory...
+ if ($have_ximtool == 1) then
+ echo -n "Checking for imtoolcmap directory ... "
+ if (-d /usr/local/lib/imtoolcmap) then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+
+ else
+ DO_WARN
+ NEWLINE
+ MSG "The /usr/local/lib/imtoolcmap directory is missing."
+ MSG "This directory is not required but provides extra"
+ MSG "colormap options for XImtool. The colormaps may be"
+ MSG "be obtained from "
+ MSG ""
+ MSG " http://iraf.net/ftp/iraf/x11iraf/imtoolcmap.tar"
+ MSG ""
+ MSG "This should be unpacked as the /usr/local/lib/imtoolcmap"
+ MSG "directory. This is not a fatal error."
+ NEWLINE
+ set warn_count = `expr $warn_count + 1`
+ endif
+ endif
+
+
+else
+ DO_FAIL ; set errstat = 1
+ NEWLINE
+ MSG "The /usr/local/lib directory does not exist."
+ NEWLINE
+ set err_count = `expr $err_count + 1`
+endif
+if ($errstat == 1) then
+ MSG "The imtoolrc file is used by the display servers (XImtool,"
+ MSG "SAOimage, etc) to set various frame buffer sizes. Without"
+ MSG "this file the server can only use a 512x512 frame buffer,"
+ MSG "and displays to larger buffers will result in the message"
+ MSG "'attempt to write out of bounds on framebuf'. Sites can"
+ MSG "rerun the install script or make the link by hand, users"
+ MSG 'can copy the dev$imtoolrc file to their $HOME directory as'
+ MSG "'.imtoolrc' as a workaround."
+endif
+
+if ($have_saoimage == 1) then
+ echo -n "Checking file descriptor limits: "
+ set ds = `limit descriptors | awk '{print ($2)}'`
+ if ("$ds" != "64") then
+ DO_WARN
+ NEWLINE
+ MSG "SAOimage has a hardwired restriction of 64 file descriptors,"
+ MSG "however this user shell allows more. When there are many"
+ MSG "windws open SAOimage may fail, this warning applies only"
+ MSG "to users of SAOimage. A 'limit descriptors 64' command"
+ MSG "can be used to reset the limit."
+ NEWLINE
+ set warn_count = `expr $warn_count + 1`
+ else
+ DO_OK
+ endif
+endif
+
+
+# See whether we have fifo pipes installed.
+set errstat = 0
+if ( !($pciraf && ($mach == "macosx" || $mach == "macintel")) ) then
+ foreach p (/dev/imt1i /dev/imt1o)
+ echo -n "Checking for $p fifo pipe ... "
+ if (-e $p) then
+ if ("`$LS -l $p | grep '.rw.rw.rw.'`" == "") then
+ if ($have_sockets == 1) then
+ DO_WARN ; set errstat = 1
+ set warn_count = `expr $warn_count + 1`
+ else
+ DO_FAIL ; set errstat = 1
+ set err_count = `expr $err_count + 1`
+ endif
+ MSG "File $p not mode 666."
+ else
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ endif
+ else
+ if ($have_sockets == 1) then
+ DO_WARN ; set errstat = 1
+ set warn_count = `expr $warn_count + 1`
+ else
+ DO_FAIL ; set errstat = 1
+ set err_count = `expr $err_count + 1`
+ endif
+ MSG "The $p fifo pipe is missing."
+ endif
+ end
+
+ echo -n "Checking for /dev/imt1 fifo pipe link ... "
+ if (-e /dev/imt1) then
+ if ("`$LS -l /dev/imt1 | grep imt1o`" != "") then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ else
+ if ($have_sockets == 1) then
+ DO_WARN ; set errstat = 1
+ set warn_count = `expr $warn_count + 1`
+ else
+ DO_FAIL ; set errstat = 1
+ set err_count = `expr $err_count + 1`
+ endif
+ MSG "The /dev/imt1 fifo pipe link is invalid."
+ endif
+ else
+ if ($have_sockets == 1) then
+ DO_WARN ; set errstat = 1
+ set warn_count = `expr $warn_count + 1`
+ else
+ DO_FAIL ; set errstat = 1
+ set err_count = `expr $err_count + 1`
+ endif
+ MSG "The /dev/imt1 fifo pipe link is missing (but is not"
+ MSG "strictly required for proper display). If it exists it"
+ MSG "should be a symlink pointing to /dev/imt1o."
+ endif
+ if ($errstat == 1 && $have_sockets == 0) then
+ NEWLINE
+ MSG "The /dev fifo pipes are used only by SAOimage as a default"
+ MSG "communication with IRAF or as a fallback for other display"
+ MSG "servers such as XImtool. Except for SAOimage or in the case"
+ MSG "of some other mechanism such as a private graphcap file or"
+ MSG "IMTDEV environment variable, missing /dev pipes should not be"
+ MSG "fatal for image display. A 'Cannot open device' message may"
+ MSG "simply mean there is no display server running, or the 'node'"
+ MSG "CL environment variable has been set to an invalid node or"
+ MSG "iraf networking is not enabled on the host. The pipes are"
+ MSG "created by the install script (which can be run on this host)"
+ MSG "or they can be created by hand as root with the 'mknod' or"
+ MSG "'mkfifo' command."
+ NEWLINE
+ endif
+endif
+
+
+# Make sure there are entries in the the termcap and graphcap files for xgterm
+# and imtool.
+
+echo -n "Checking termcap file for an XGterm entry ... "
+set temp = `grep -l xgterm $termcap_file | grep -v "^#"`
+if ("$temp" == "") then
+ DO_FAIL ; set errstat = 1
+ set err_count = `expr $err_count + 1`
+else
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+endif
+
+echo -n "Checking graphcap file for XGterm/imtool entries ... "
+set gcok = yes
+foreach i (xgterm imtool)
+ set temp = `grep -l $i $graphcap_file | grep -v "^#"`
+ if ("$temp" == "" && "$gcok" == "yes") then
+ DO_FAIL ; set errstat = 1
+ set err_count = `expr $err_count + 1`
+ set gcok = no
+ endif
+end
+if ($gcok == yes) then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+endif
+
+if ($early_exit == 1) then
+ goto exit_early
+endif
+
+#=============================================================================
+# Tape Device Information
+#=============================================================================
+
+Tape_Device:
+
+NEWLINE
+echo "====================== Tape Device Information ======================="
+NEWLINE
+
+set errstat = 0
+
+if (! ($?tapecap_file)) then
+ set tapecap_file = "$iraf/dev/tapecap"
+endif
+
+# Check the alloc.e binary.
+NEWLINE
+set file = "$iraf/unix/bin.$hmach/alloc.e"
+echo -n 'Checking for hbin$alloc.e binary ... '
+if (-e $file) then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+
+ echo -n 'Checking hbin$alloc.e ownership ... '
+ if (-e $file) then
+ if ("`$LS -l $file | grep 'root'`" == "") then
+ DO_FAIL
+ set errstat = 1 ; set err_count = `expr $err_count + 1`
+ echo " *** File $file:t not owned by root."
+ else
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ endif
+ endif
+
+ echo -n 'Checking hbin$alloc.e binary permissions ... '
+ if (-e $file) then
+ if ("`$LS -l $file | grep '.rwsr.xr.x'`" == "") then
+ DO_FAIL
+ set errstat = 1 ; set err_count = `expr $err_count + 1`
+ echo " *** File $file:t not mode 4755."
+ else
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ endif
+ endif
+
+ if ($errstat == 1) then
+ NEWLINE
+ MSG "The alloc.e binary is used to allocate tape devices"
+ MSG "for exclusive access by the user. It does this by"
+ MSG "changing the ownership and permissions on the /dev"
+ MSG "files associated with each device. For this reason"
+ MSG "it must be owned by root with setuid permissions so"
+ MSG "it can execute properly. Tape devices are not required"
+ MSG "to be allocated before they are used but executing the"
+ MSG "ALLOC command w/in iraf will result in an error."
+ MSG "This error can be cleared by running the IRAF install"
+ MSG "script as root, or issuing the commands:"
+ MSG ""
+ MSG " # cd $hbin"
+ MSG " # chown 0 alloc.e ; chmod 4755 alloc.e"
+ NEWLINE
+ endif
+
+else
+ DO_FAIL ; set errstat = 1
+ set err_count = `expr $err_count + 1`
+ MSG "File $file not found."
+endif
+
+
+# Check for a tapecap file.
+set errstat = 0
+NEWLINE
+echo -n 'Checking for tapecap file ... '
+if (-e $iraf/dev/tapecap.`hostname`) then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ echo " Using file: $iraf/dev/tapecap.`hostname`"
+else
+ if (-e $tapecap_file) then
+ DO_OK
+ set ok_count = `expr $ok_count + 1`
+ echo " Using tapecap file: $tapecap_file"
+ else
+ DO_FAIL ; set errstat = 1
+ set err_count = `expr $err_count + 1`
+ endif
+endif
+if ($errstat == 1) then
+ NEWLINE
+ MSG 'No tapecap file found on this system.'
+ NEWLINE
+ MSG 'IRAF will first attempt to find a file in the iraf$dev'
+ MSG 'directory called "tapecap.\<node\>", if that fails it will'
+ MSG 'fallback to use the dev$tapecap file (or whichever file is'
+ MSG 'named by the 'tapecap' variable in the hlib$zzsetenv.def file).'
+ MSG ''
+ MSG 'Not all IRAF distributions come with a default tapecap file'
+ MSG 'appropriate for the given machine. For example, the default'
+ MSG 'dev$tapecap for Sun/IRAF is for SunOS and will not generally'
+ MSG 'work for Solaris. The PC-IRAF distribution comes with generic'
+ MSG 'tapecap.linux, tapecap.freebsd, etc files which must be renamed'
+ MSG '"tapecap" to be used. Generic device entries are provided with'
+ MSG 'each tapecap file (e.g. mtp for a DAT on unit 0) but in most'
+ MSG 'cases the tapecap file must be installed and/or configured'
+ MSG 'before devices will be accessible.'
+ MSG ''
+ MSG 'Further information on configuring tapecaps can be found in'
+ MSG 'the last IRAF Newsletter at:'
+ MSG ''
+ MSG ' http://iraf.noao.edu/irafnews/apr98/irafnews.1f.html'
+ MSG ''
+ MSG 'or by contacting http://iraf.net'
+ NEWLINE
+endif
+
+
+
+NEWLINE
+echo "Tape Device Template: $TAPES"
+
+set nloks = `$LS -lL /tmp/*.lok |& grep -v -i "no match" | wc -l`
+if ($nloks == 0) then
+ set nloks = "<none>"
+endif
+echo "Lok Files on this machine: $nloks"
+if ("$nloks" != '<none>') then
+ $LS -lL /tmp/*.lok
+endif
+
+NEWLINE
+
+set ntapes = `$LS -lL $TAPES |& grep -v -i "no match" | wc -l`
+if ($ntapes == 0) then
+ set ntapes = "<none>"
+endif
+echo "Tape Devices Available: $ntapes"
+NEWLINE
+
+if ("$ntapes" != '<none>') then
+
+NEWLINE
+echo " ******************************************************************"
+echo " ** More tape devices files may be defined than there are actual **"
+echo " ** devices on the machine. For those file which correspond to **"
+echo " ** a physical device the file should have mode 666 and be owned **"
+echo " ** by root. **"
+echo " ******************************************************************"
+NEWLINE
+
+ ls -lL $TAPES
+endif
+
+if ($early_exit == 1) then
+ goto exit_early
+endif
+
+
+#=============================================================================
+# External Package Information
+#=============================================================================
+
+External_Packages:
+
+NEWLINE
+echo "=================== External Package Information ====================="
+NEWLINE
+
+# Check the iraf root directory stuff
+if ($?iraf == 1) then
+ set hlib = $iraf/unix/hlib
+else
+ if (-e /usr/include/iraf.h) then
+ set ip = `grep "^#define IRAF" /usr/include/iraf.h |sed -e 's/\"//g'`
+ if ("$ip" != "") then
+ set iraf = $ip[3]
+ endif
+ set hlib = $iraf/unix/hlib
+
+ else
+ MSG "No 'iraf' defined in your environment and no <iraf.h>"
+ MSG "file found on this system."
+ MSG ""
+ MSG "Aborting..."
+ endif
+endif
+
+# Strip off any trailing '/'.
+set iraf = `echo $iraf | sed -e 's+/\(["]*\)$+\1+'`
+
+set epkg = $hlib/extern.pkg
+
+
+# Get the helpdb string.
+set helpdb = `cat $epkg | grep -v "^#" | grep helpdb`
+
+
+# Get the list of tasks defined in the extern.pkg file.
+set t = `cat $epkg | grep -v "^#" | grep task | sed -e 's/task//g' -e 's/=//g' -e 's/\.pkg//g' -e 's/\$//g'`
+
+set tasks = ""
+while ("$t[1]" != "")
+ set tasks = `echo $tasks $t[1]`
+ shift t ; shift t
+ if ("$#t" == "0") then
+ break
+ endif
+end
+
+# Get the variables and paths declared, includes data directories.
+
+cat $epkg | grep -v "^#" | grep -v helpdb | grep ^set > /tmp/_ext$$
+cat $epkg | grep -v "^#" | grep -v helpdb | grep ^reset >> /tmp/_ext$$
+
+set l = `cat /tmp/_ext$$ | sed -e 's/reset//g' -e 's/set//g' -e 's/=//g'`
+
+set pkg = ""
+set ppath = ""
+while ("$l[1]" != "")
+ set pkg = `echo $pkg $l[1]`
+ set ppath = `echo $ppath $l[2]`
+ shift l; shift l
+
+ if ("$#l" == "0") then
+ break
+ endif
+end
+RM /tmp/_ext$$
+
+
+NEWLINE
+echo " 1) The 'Path' check verifies that the extern.pkg path exists and is"
+echo " not located in the iraf root directory (NOAO excepted)."
+echo " 2) The 'Helpdb' check verifies that the package is declared in the"
+echo " helpdb string. A warning here indicates the helpdb.mip file is"
+echo " out of date w.r.t the package .hd files. Help database files may"
+echo " be updated using the SOFTOOLS.MKHELPDB task."
+echo " 3) The 'Binaries' check prints the most recent file date for the"
+echo " installed binaries. A failed test indicates no binaries for"
+echo " the current architecture."
+echo " 4) The date given is the date of the most recent file in the named"
+echo " bin directory. Dates before 12/99 indicate binaries which should"
+echo " be recompiled for Y2K compliance (assuming IRAF V2.11.3 or later"
+echo " is available on the machine)."
+NEWLINE
+NEWLINE
+echo "Number of declared packages: " $#tasks
+echo "Number of logical directories: " $#ppath
+NEWLINE
+echo "Checking packages ..."
+NEWLINE
+echo " Package Path Helpdb Binaries Date"
+echo " ------- ---- ------ -------- ----"
+#NEWLINE
+
+
+set CL = $iraf/bin.$mach/cl.e
+if (! -e $CL) then
+ echo "ERROR: CL executable not found, skipping package checks..."
+ set err_count = `expr $err_count + 1`
+ goto exit_early
+endif
+
+
+set lp = ""
+set lpath = ""
+set delpak = ()
+set delpak_p = ()
+foreach p ($pkg)
+ set decl = `cat $epkg | grep task | grep $p`
+ set pat = $ppath[1]
+ if ("$decl" != "") then
+
+ # See if this is an iraf logical path and resolve it.
+ echo $pat | egrep '\$' >& /dev/null
+ if ($status == 0) then
+ set cmd = `echo $pat | awk '{printf("=osfn(\"%s\");logout\n", $1)}'`
+ echo "#\!$CL -f" > /tmp/_cmd$$
+ echo $cmd >> /tmp/_cmd$$
+ chmod 755 /tmp/_cmd$$
+
+ set pat = `/tmp/_cmd$$`
+ rm -rf /tmp/_cmd$$
+ endif
+
+ # Check that the path exists.
+ if (-d $pat) then
+ echo $p | awk '{printf ("%12.12s", $1 ) }'
+ if ("$p" == "noao") then
+ BOLD_ON
+ echo -n " [ OK ]"
+ BOLD_OFF
+ set ok_count = `expr $ok_count + 1`
+ else
+ if (`echo $pat | grep $iraf` == "") then
+ BOLD_ON
+ echo -n " [ OK ]"
+ BOLD_OFF
+ set ok_count = `expr $ok_count + 1`
+ else if (`echo $pat | grep $iraf | grep "/\.\."` != "") then
+ BOLD_ON
+ echo -n " [ OK ]"
+ BOLD_OFF
+ set ok_count = `expr $ok_count + 1`
+ else
+ BOLD_ON
+ echo " [FAIL] " ; set errstat = 1
+ BOLD_OFF
+ echo " *** invalid path: $p = $pat"
+ echo " *** package should not be in iraf root dir"
+ set err_count = `expr $err_count + 1`
+ set delpak = ($delpak $p)
+ set delpak_p = ($delpak_p $pat)
+ goto pkg_err
+ endif
+ endif
+ else
+ set delpak = ($delpak $p)
+ set delpak_p = ($delpak_p $pat)
+ set err_count = `expr $err_count + 1`
+ goto pkg_err
+ endif
+
+
+ # See if the package was declared with help.
+ echo $helpdb | grep $p >& /dev/null
+ if ($status == 0) then
+
+ # The package has help but we'll assume the standard help
+ # database name and look to see if the helpdb itself is current.
+ # The helpdb.mip file should be newer than any <foo>.hd files in
+ # the package tree.
+ if (-e $pat/lib/helpdb.mip) then
+ set pkgp = `echo $pat | sed -e 's+/\(["]*\)$+\1+'`
+ set hdbfile = "$pkgp/lib/helpdb.mip"
+ set hdfiles = `find $pkgp -name \*.hd -a -newer $hdbfile -print`
+ if ("$hdfiles" != "") then
+ echo -n " [WARN] "
+ set warn_count = `expr $warn_count + 1`
+ else
+ echo -n " [ OK ] "
+ set ok_count = `expr $ok_count + 1`
+ endif
+ else
+ echo -n " [ OK ] "
+ set ok_count = `expr $ok_count + 1`
+ endif
+
+ else
+ echo -n " [FAIL] " ; set errstat = 1
+ set err_count = `expr $err_count + 1`
+ endif
+
+ # See if binaries exist for this platform.
+ set dir = $pat/bin.$mach
+ if (-d $dir) then
+ if (`$LS -lL $dir | wc -l` > 1) then
+ set d = `$LS $LSDF $pat/bin.$mach/* | head -2 | tail -1`
+ set dat = `echo $d |awk '{printf("%s %s %s",$7,$8,$9)}'`
+
+ #echo -n "[ OK ]"
+ if ("`echo $dat | grep 199 | grep Dec`" == "") then
+ if ("`echo $dat | grep 200`" == "" && "`echo $dat | grep ':'`" == "") then
+ echo -n "[WARN]"
+ set warn_count = `expr $warn_count + 1`
+ else
+ echo -n "[ OK ]"
+ set ok_count = `expr $ok_count + 1`
+ endif
+ else
+ echo -n "[ OK ]"
+ set ok_count = `expr $ok_count + 1`
+ endif
+
+ echo $d | awk '{printf ("\t%3s %2s %-5s", $7, $8, $9) }'
+ echo " "bin.$mach
+ else
+ echo -n "[FAIL] " ; set errstat = 1
+ set err_count = `expr $err_count + 1`
+ echo "<not found> "bin.$mach
+ #goto pkg_err
+ endif
+ else
+ echo -n "[FAIL] " ; set errstat = 1
+ echo "<not found> "bin.$mach
+ set err_count = `expr $err_count + 1`
+ endif
+
+ # Check for other architectures installed
+ if (-e $pat/bin) then
+ if (-e $pat/bin.$mach) then
+ foreach dir ($pat/bin.*)
+ set b = $dir:t
+ if ("$b" != "bin.generic" && "$b" != "bin.$mach") then
+ if (`$LS -l $dir | wc -l` > 1) then
+ set d = `$LS $LSDF $pat/$b/* | head -2 | tail -1`
+ set dat = `echo $d |awk '{printf("%s %s %s",$7,$8,$9)}'`
+ echo -n " "
+ if ("`echo $dat | grep 199 | grep Dec`" == "") then
+ if ("`echo $dat | grep 200`" == "" && "`echo $dat | grep ':'`" == "") then
+ echo -n " [WARN] "
+ set warn_count = `expr $warn_count + 1`
+ else
+ echo -n " [ OK ] "
+ set ok_count = `expr $ok_count + 1`
+ endif
+ else
+ echo -n " [ OK ] "
+ set ok_count = `expr $ok_count + 1`
+ endif
+ echo $d |awk '{printf ("%3s %2s %-5s", $7, $8, $9)}'
+ echo " "$b
+ endif
+ endif
+ end
+ endif
+ endif
+ #NEWLINE
+
+ else
+ set lp = `echo $lp $p`
+ set lpath = `echo $lpath $pat`
+ endif
+
+pkg_err:
+ shift ppath
+end
+
+# Report unnecessary packages or logical dirs.
+set npack = $#delpak
+if ($npack != 0) then
+ NEWLINE
+ NEWLINE
+ MSG "The folowing packages were declared but do not exist on the"
+ MSG 'current platform and can be removed from the hlib$extern.pkg'
+ MSG "file:"
+ MSG ""
+
+ set i = 1
+ while ($i <= $npack)
+ echo $delpak[$i] $delpak_p[$i] | \
+ awk '{printf (" ***\t%16s = %s\n", $1, $2)}'
+ set i = `expr $i + 1`
+ end
+ MSG ""
+endif
+
+
+# Now check logical directories defined in the file.
+set dellog = ()
+set dellog_p = ()
+if ("$lp" != "") then
+ NEWLINE
+ NEWLINE
+ echo "Checking logical directories ..."
+ NEWLINE
+ echo " Logical Directory Path"
+ echo " ----------------- ----"
+
+ foreach p ($lp)
+ set pat = $lpath[1]
+ echo $p | awk '{printf ("%20.20s", $1 ) }'
+
+ # See if this is an iraf logical path and resolve it.
+ echo $pat | egrep '\$' >& /dev/null
+ if ($status == 0) then
+ set cmd = `echo $pat | awk '{printf("=osfn(\"%s\");logout\n", $1)}'`
+ echo "#\!$CL -f" > /tmp/_cmd$$
+ echo $cmd >> /tmp/_cmd$$
+ chmod 755 /tmp/_cmd$$
+
+ set pat = `/tmp/_cmd$$`
+ rm -rf /tmp/_cmd$$
+ endif
+
+ if (-d $pat) then
+ echo " [ OK ]"
+ set ok_count = `expr $ok_count + 1`
+ else
+ echo -n " [ FAIL ]" ; set errstat = 1
+ echo " *** invalid path"
+ set dellog = ($dellog $p)
+ set dellog_p = ($dellog_p $pat)
+ set err_count = `expr $err_count + 1`
+ endif
+
+ shift lpath
+ end
+endif
+
+
+set nlog = $#dellog
+if ($nlog != 0) then
+ NEWLINE
+ NEWLINE
+ MSG "The folowing logical directories were found to be invalid for"
+ MSG 'current platform and can be removed from the hlib$extern.pkg'
+ MSG "file:"
+ MSG ""
+
+ set i = 1
+ while ($i <= $nlog)
+ echo $dellog[$i] $dellog_p[$i] | \
+ awk '{printf (" ***\t%16s = %s\n", $1, $2)}'
+ set i = `expr $i + 1`
+ end
+ MSG ""
+endif
+
+
+exit_early:
+
+ NEWLINE
+ NEWLINE
+ echo "======================================================================"
+ NEWLINE
+ echo "SYSINFO completed with: Tests Passed: $ok_count"
+ echo " Warnings: $warn_count"
+ echo " Errors: $err_count"
+ if ($err_count > 0) then
+ NEWLINE
+ echo " Not all errors listed here will be fatal but may indicate a"
+ echo " problem with some aspect of the system, or will reveal the"
+ echo " likely cause of a problem currently being seen."
+ NEWLINE
+ echo " Users should contact http://iraf.net if help is needed with"
+ echo " correcting any problems, or with suggestions/comments for"
+ echo " future versions of this diagnostic script."
+ endif
+ NEWLINE
+ echo "======================================================================"
+ NEWLINE
+
+sysinfo_cleanup:
+ RM /tmp/_cmd$$
+ RM /tmp/_ext$$
+
+exit 0
+
+
+# Print usage information. We will not get here unless the "-help" flag
+# was issued.
+
+Usage:
+
+ NEWLINE
+ echo "Usage: sysinfo [ -G | -V | -N | -P | -D | -T | -help ]"
+ NEWLINE
+ echo " where: -G Print General Info only"
+ echo " -V Do Verification tests only"
+ echo " -N Do Networking tests only"
+ echo " -P Do Extern Package tests only"
+ echo " -D Do Display tests only"
+ echo " -T Do Tape Device tests only"
+ echo " -h Print this message"
+ NEWLINE
+
diff --git a/unix/hlib/uninstall b/unix/hlib/uninstall
new file mode 100755
index 00000000..0eaaa694
--- /dev/null
+++ b/unix/hlib/uninstall
@@ -0,0 +1,365 @@
+#!/bin/csh
+#
+# ----------------------------------------------------------------------------
+#
+# UNINSTALL -- Remove IRAF on a UNIX/IRAF host.
+#
+# Usage: uninstall [-n] [-h] [-hl] [-c] [-v] [-b <directory>]
+#
+# where -n # no execute
+# -h # print this help summary
+# -hl # disable text highlighting
+# -c # remove command links only
+# -v # print verbage output
+# -b # specify local bin directory to search
+#
+# Use "uninstall -n" to do a dry run to see what the would be done, without
+# actually modifying the host system. To do the actual un-install one must
+# be superuser, but anyone can run "uninstall -n" to see what it would do.
+#
+# ----------------------------------------------------------------------------
+
+unset noclobber
+unalias rm set grep ls pwd
+onintr uninstall_cleanup_
+
+set exec = yes
+set lbin = ""
+set cmd_only = no
+set verbage = no
+set hilite = 1
+
+set FILES = "/usr/include/iraf.h /usr/local/lib/imtoolrc"
+set DEVS = "/dev/imt1i /dev/imt1o /dev/imt1"
+set CMDS = "cl mkiraf mkmlist generic mkpkg rmbin rmfiles rtar sgidispatch wtar rpp xpp xyacc xc"
+
+alias RM "/bin/rm -f"
+
+# Utility aliases.
+alias BOLD_ON "(if ($hilite) tput bold)"
+alias BOLD_OFF "(if ($hilite) tput sgr0)"
+
+alias ERRMSG "(echo -n ' ';BOLD_ON;echo -n 'ERROR: ';BOLD_OFF; echo \!*)"
+alias WARNING "(echo -n ' ';BOLD_ON;echo -n 'WARNING: ';BOLD_OFF; echo \!*)"
+alias NEWLINE "(echo '')"
+
+
+#=============================================================================
+# Process any command line arguments.
+#=============================================================================
+while ("$1" != "")
+ switch ("$1")
+ case -n: # no execute
+ set exec = no
+ alias RM "echo -n \!* >& /dev/null"
+ breaksw
+ case -hl: # disable highlighting
+ set hilite = 0
+ case +hl: # enable highlighting
+ set hilite = 1
+ breaksw
+ case -h: # print usage
+ goto Usage
+ case -c: # command file links only
+ set cmd_only = yes
+ breaksw
+ case -q: # quiet output
+ set verbage = no
+ breaksw
+ case -v: # verbage output
+ set verbage = yes
+ breaksw
+ case -b: # set local bin directory (unix)
+ if ("$2" != "") then
+ shift
+ else
+ echo "missing argument to '-b <localbindir>' switch"
+ exit 1
+ endif
+ set lbin = "$1"
+
+ if (! -e $lbin) then
+ echo "ERROR: Local bin dir '$lbin' not found."
+ exit 1
+ endif
+ breaksw
+ default:
+ echo "ERROR: unrecognized command-line argument '$1'"
+ goto Usage
+ endsw
+
+ if ("$2" == "") then
+ break
+ else
+ shift
+ endif
+end
+
+# Initialize.
+clear
+NEWLINE
+BOLD_ON
+echo " IRAF System Un-installation"
+echo " ---------------------------"
+BOLD_OFF
+NEWLINE
+
+
+# See whether we're gonna work....
+if ($exec == yes && `whoami` != "root") then
+
+ BOLD_ON
+ echo "**********************************************************************"
+ echo -n "WARNING"
+ BOLD_OFF
+ echo ": This script must be run as root for changes to take effect."
+ echo " If you decide to proceed, the 'no-op' flag will be enabled"
+ echo " by default. No changes will be made to the system files,"
+ echo " however you will be able to see what the script does."
+ BOLD_ON
+ echo "**********************************************************************"
+ BOLD_OFF
+ echo ""
+ echo -n "Proceed with a no-op uninstallation anyway (y)? " ; setenv ans "$<"
+ if ("$ans" == "n" || "$ans" == "no") then
+ echo "Quitting."
+ exit 0
+ endif
+ NEWLINE; NEWLINE
+
+ set exec = no
+ alias RM "echo -n \!* >& /dev/null"
+endif
+
+
+set iraf_paths = ""
+set n_iraf_paths = 0
+
+# Search the path for iraf command directories, assume we may have more than
+# one so build up a list of all of them.
+if ("$lbin" == "") then
+ foreach i ($path)
+ if (-d $i && -e $i/cl && -e $i/mkiraf) then
+ set iraf_paths = ($iraf_paths $i)
+ set n_iraf_paths = `expr $n_iraf_paths + 1`
+ endif
+ end
+
+ # Look around and come up with a likely candidate directory.
+ if ($n_iraf_paths == 0) then
+ set d_lbin = ""
+ foreach dir (/usr/local/bin /opt/local/bin /local/bin /usr/bin /bin)
+ if (-d $i && -e $i/cl && -e $i/mkiraf) then
+ set iraf_paths = ($iraf_paths $i)
+ set n_iraf_paths = `expr $n_iraf_paths + 1`
+ endif
+ end
+
+ if (! $n_iraf_paths) then
+ echo "WARNING: no IRAF command directories found."
+ endif
+ endif
+endif
+
+
+echo "Files to be deleted to remove IRAF from this machine:"
+NEWLINE
+BOLD_ON
+if ("$cmd_only" == "no") then
+ foreach i ($FILES $DEVS)
+ if (-e $i) echo " $i"
+ end
+endif
+
+foreach i ($iraf_paths)
+ echo " All IRAF commands found in $i, including"
+end
+echo ""
+echo " cl mkiraf mkmlist generic mkpkg"
+echo " rmbin rmfiles rtar wtar xc"
+echo " xpp rpp xyacc sgidispatch"
+echo ""
+BOLD_OFF
+
+
+NEWLINE
+echo 'You will be prompted before any files are removed. The system may'
+echo 'be restored by rerunning the IRAF install script on this machine.'
+NEWLINE
+
+echo -n "Hit <CR> to proceed, 'q' to quit: "
+
+set ans = "$<"
+if ("$ans" == "q" || "$ans" == "quit") exit 0
+NEWLINE ; NEWLINE
+
+
+# Initialize the local bin dir to delete.
+set npath = 1
+set d_lbin = $iraf_paths[$npath]
+
+
+
+# ============================================================================
+# Delete the miscellaneous files associated with the system.
+# ============================================================================
+
+if ("$cmd_only" == "no") then
+
+ # See whether we want to delete the <iraf.h> symlink.
+ foreach file ($FILES)
+ if ($verbage == yes) NEWLINE
+ if (-e $file) then
+ echo -n "Remove the $file link (y/n/q)? (y) "
+ set ans = "$<"
+ if ("$ans" == "y" || "$ans" == "Y" || "$ans" == "") then
+ if ($verbage == yes) echo -n " Deleting $file...."
+ RM $file
+ if (-e $i && $exec == yes && $verbage == yes) then
+ echo "file '$i' could not be deleted."
+ else if ($verbage == yes) then
+ echo "ok"
+ endif
+ else if ("$ans" == "q" || "$ans" == "q") then
+ echo "Quitting."
+ exit 0
+ endif
+ endif
+ end
+
+ # See whether we want to delete the fifo pipes.
+ if (-e /dev/imt1i || -e /dev/imt1o) then
+ if ($verbage == yes) NEWLINE
+ echo -n "Remove the /dev fifo pipes (y/n/q)? (y) "
+ set ans = "$<"
+ if ("$ans" == "y" || "$ans" == "Y" || "$ans" == "") then
+ foreach i ($DEVS) # remove fifo devs
+ if ($verbage == yes) echo -n " Deleting $i...."
+ if (-e $i) then
+ RM $file
+ if (-e $i && $exec == yes && $verbage == yes) then
+ echo "file '$i' could not be deleted."
+ else if ($verbage == yes) then
+ echo "ok"
+ endif
+ endif
+ end
+ else if ("$ans" == "q" || "$ans" == "q") then
+ echo "Quitting."
+ exit 0
+ endif
+ endif
+
+endif
+
+
+#=============================================================================
+# Get UNIX directory where commands (links) are installed, if not found then
+# set it on command line.
+#=============================================================================
+
+if ($n_iraf_paths > 0) then
+ # Initialize the local bin dir to delete.
+ set npath = 1
+ set d_lbin = $iraf_paths[$npath]
+endif
+
+
+if ("$d_lbin" == "") then
+again_:
+ echo -n "Local iraf commands directory? "
+ set lbin = "$<"
+ if ("$lbin" == "") goto again_
+
+ if (!( -e $lbin/cl && -e $lbin/mkiraf)) then
+ echo "IRAF commands not found in $lbin, please try again..."
+ set lbin = ""
+ goto again_
+ endif
+
+else
+next_:
+ if ($verbage == yes) NEWLINE
+ echo -n "Remove IRAF Commands in $d_lbin (y/n/q)? (y) "
+ set ans = "$<"
+ if ("$ans" == "y" || "$ans" == "Y" || "$ans" == "") then
+ set lbin = $d_lbin
+ else if ("$ans" == "n" || "$ans" == "no") then
+ goto no_delete_
+ else if ("$ans" == "q" || "$ans" == "quit") then
+ echo "Quitting."
+ exit 0
+ else
+ set npath = `expr $npath + 1`
+ set d_lbin = $iraf_paths[$npath]
+ goto next_
+ endif
+endif
+
+foreach i ($CMDS) # remove the iraf commands
+ set file = $lbin/$i
+ if (-e $file) then
+ if ($verbage == yes) echo -n " Deleting $file...."
+ if (-e $file) then
+ RM $file
+ if (-e $file && $exec == yes && $verbage == yes) then
+ echo "[ ERROR: file '$file' could not be deleted. ]"
+ else if ($verbage == yes) then
+ echo "ok"
+ endif
+ endif
+ else
+ echo -n " Warning: $file was not found on this machine...."
+ endif
+end
+
+
+#=============================================================================
+# Delete the iraf commands and files.
+#=============================================================================
+
+set npath = `expr $npath + 1`
+
+# See whether this was the only instance and quit.
+if ($npath <= $n_iraf_paths) then
+ set d_lbin = $iraf_paths[$npath]
+ goto next_
+endif
+
+no_delete_:
+
+set back = `pwd` ; chdir $iraf/.. ; set iraf_p = `pwd` ; chdir $back
+NEWLINE
+NEWLINE
+echo "IRAF has been successfully uninstalled from this system. To fully"
+echo "remove the system you must delete the iraf directory tree using the"
+echo "command: "
+NEWLINE
+BOLD_ON
+echo " % /bin/rm -rf $iraf_p"
+BOLD_OFF
+NEWLINE
+echo "External packages, X11IRAF and/or other display servers and packages"
+echo "will also need to be deleted separately."
+NEWLINE
+exit 0
+
+uninstall_cleanup_:
+
+exit 0
+
+
+
+# Print usage information. We will not get here unless the "-help" flag
+# was issued.
+
+Usage:
+ echo "Usage: uninstall [-n] [-h] [-hl] [-c] [-v] [-b <directory>]"
+ echo " "
+ echo " where -n # no execute"
+ echo " -h # print this help summary"
+ echo " -hl # disable text highlighting"
+ echo " -c # remove command links only"
+ echo " -v # print verbage output"
+ echo " -b # specify local bin directory to search"
+ exit 0
diff --git a/unix/hlib/util.csh/.repo_desc b/unix/hlib/util.csh/.repo_desc
new file mode 100644
index 00000000..0658e86d
--- /dev/null
+++ b/unix/hlib/util.csh/.repo_desc
@@ -0,0 +1,27 @@
+#
+# Pkg Deps Description
+
+adccdrom none ADC CD-ROM tools
+cfh12k mscred,fitsutil CFHT 12K reductions
+ctio none CTIO tools
+deitab none DEIMOS tables package
+esowfi mscred,fitsutil ESO WFI reductions
+fitsutil none FITS utilities
+guiapps none Prototype GUI application
+iue none IUE reduction package
+mem0 none Maximum Entropy deconvolution
+mscred fitsutil Mosaic CCD reduction package
+mtools none Jeff Munn's utility package
+nfextern none General IR reductions/NEWFIRM package
+nfdat_ctio nfextern Calibration data for NEWFIRM at CTIO
+optic mscred,fitsutil OPTIC reductions
+rvsao none SAO's RV package
+song none SONG reductions
+sqiid none SQIID reductions
+stecf none ST-ECF v1.5
+steward none Steward Observatory tools
+stsdas tables STSDAS v3.12 - HST reduction tools
+tables none TABLES v3.12 - Tables utilities
+ucsclris none UCSC LRIS mask making
+upsqiid none UPiated SQIID reductions
+xdimsum none IR reductions
diff --git a/unix/hlib/util.csh/.repo_local b/unix/hlib/util.csh/.repo_local
new file mode 100644
index 00000000..d5b230b3
--- /dev/null
+++ b/unix/hlib/util.csh/.repo_local
@@ -0,0 +1,200 @@
+# Arch Pkg Epoch File
+#
+ linux64 adccdrom 1339696737 adccdrom-linux64.tar.gz
+ linux adccdrom 1339696737 adccdrom-linux.tar.gz
+ redhat adccdrom 1339696738 adccdrom-src.tar.gz
+ macintel adccdrom 1339696735 adccdrom-macintel.tar.gz
+ macosx adccdrom 1339696736 adccdrom-macosx.tar.gz
+ ssun adccdrom 1339696738 adccdrom-src.tar.gz
+ sparc adccdrom 1339696738 adccdrom-src.tar.gz
+ freebsd adccdrom 1339696738 adccdrom-src.tar.gz
+ sunos adccdrom 1339696738 adccdrom-src.tar.gz
+ linux64 cfh12k 1332309566 cfh12k-universal.tar.gz
+ linux cfh12k 1332309566 cfh12k-universal.tar.gz
+ redhat cfh12k 1332309566 cfh12k-universal.tar.gz
+ macintel cfh12k 1332309566 cfh12k-universal.tar.gz
+ macosx cfh12k 1332309566 cfh12k-universal.tar.gz
+ ssun cfh12k 1332309566 cfh12k-universal.tar.gz
+ sparc cfh12k 1332309566 cfh12k-universal.tar.gz
+ freebsd cfh12k 1332309566 cfh12k-universal.tar.gz
+ sunos cfh12k 1332309566 cfh12k-universal.tar.gz
+ linux64 ctio 1339696753 ctio-linux64.tar.gz
+ linux ctio 1339696757 ctio-linux.tar.gz
+ redhat ctio 1339696759 ctio-src.tar.gz
+ macintel ctio 1339696741 ctio-macintel.tar.gz
+ macosx ctio 1339696747 ctio-macosx.tar.gz
+ ssun ctio 1339696759 ctio-src.tar.gz
+ sparc ctio 1339696759 ctio-src.tar.gz
+ freebsd ctio 1339696759 ctio-src.tar.gz
+ sunos ctio 1339696759 ctio-src.tar.gz
+ linux64 deitab 1339696765 deitab-linux64.tar.gz
+ linux deitab 1339696767 deitab-linux.tar.gz
+ redhat deitab 1339696768 deitab-src.tar.gz
+ macintel deitab 1339696760 deitab-macintel.tar.gz
+ macosx deitab 1339696762 deitab-macosx.tar.gz
+ ssun deitab 1339696768 deitab-src.tar.gz
+ sparc deitab 1339696768 deitab-src.tar.gz
+ freebsd deitab 1339696768 deitab-src.tar.gz
+ sunos deitab 1339696768 deitab-src.tar.gz
+ linux64 esowfi 1332309566 esowfi-universal.tar.gz
+ linux esowfi 1332309566 esowfi-universal.tar.gz
+ redhat esowfi 1332309566 esowfi-universal.tar.gz
+ macintel esowfi 1332309566 esowfi-universal.tar.gz
+ macosx esowfi 1332309566 esowfi-universal.tar.gz
+ ssun esowfi 1332309566 esowfi-universal.tar.gz
+ sparc esowfi 1332309566 esowfi-universal.tar.gz
+ freebsd esowfi 1332309566 esowfi-universal.tar.gz
+ sunos esowfi 1332309566 esowfi-universal.tar.gz
+ linux64 fitsutil 1339696790 fitsutil-linux64.tar.gz
+ linux fitsutil 1339696797 fitsutil-linux.tar.gz
+ redhat fitsutil 1339696802 fitsutil-src.tar.gz
+ macintel fitsutil 1339696774 fitsutil-macintel.tar.gz
+ macosx fitsutil 1339696782 fitsutil-macosx.tar.gz
+ ssun fitsutil 1339696802 fitsutil-src.tar.gz
+ sparc fitsutil 1339696802 fitsutil-src.tar.gz
+ freebsd fitsutil 1339696802 fitsutil-src.tar.gz
+ sunos fitsutil 1339696802 fitsutil-src.tar.gz
+ linux64 guiapps 1339696827 guiapps-linux64.tar.gz
+ linux guiapps 1339696837 guiapps-linux.tar.gz
+ redhat guiapps 1339696843 guiapps-src.tar.gz
+ macintel guiapps 1339696808 guiapps-macintel.tar.gz
+ macosx guiapps 1339696817 guiapps-macosx.tar.gz
+ ssun guiapps 1339696843 guiapps-src.tar.gz
+ sparc guiapps 1339696843 guiapps-src.tar.gz
+ freebsd guiapps 1339696843 guiapps-src.tar.gz
+ sunos guiapps 1339696843 guiapps-src.tar.gz
+ linux64 mem0 1339696846 mem0-linux64.tar.gz
+ linux mem0 1339696847 mem0-linux.tar.gz
+ redhat mem0 1339696847 mem0-src.tar.gz
+ macintel mem0 1339696844 mem0-macintel.tar.gz
+ macosx mem0 1339696845 mem0-macosx.tar.gz
+ ssun mem0 1339696847 mem0-src.tar.gz
+ sparc mem0 1339696847 mem0-src.tar.gz
+ freebsd mem0 1339696847 mem0-src.tar.gz
+ sunos mem0 1339696847 mem0-src.tar.gz
+ linux64 mscdb 1339696652 mscdb-universal.tar.gz
+ linux mscdb 1339696652 mscdb-universal.tar.gz
+ redhat mscdb 1339696652 mscdb-universal.tar.gz
+ macintel mscdb 1339696652 mscdb-universal.tar.gz
+ macosx mscdb 1339696652 mscdb-universal.tar.gz
+ ssun mscdb 1339696652 mscdb-universal.tar.gz
+ sparc mscdb 1339696652 mscdb-universal.tar.gz
+ freebsd mscdb 1339696652 mscdb-universal.tar.gz
+ sunos mscdb 1339696652 mscdb-universal.tar.gz
+ linux64 mscred 1343187073 mscred-linux64.tar.gz
+ linux mscred 1343187056 mscred-linux.tar.gz
+ redhat mscred 1343187082 mscred-src.tar.gz
+ macintel mscred 1343187018 mscred-macintel.tar.gz
+ macosx mscred 1343187037 mscred-macosx.tar.gz
+ ssun mscred 1343187082 mscred-src.tar.gz
+ sparc mscred 1343187082 mscred-src.tar.gz
+ freebsd mscred 1343187082 mscred-src.tar.gz
+ sunos mscred 1343187082 mscred-src.tar.gz
+ linux64 mtools 1339696859 mtools-linux64.tar.gz
+ linux mtools 1339696862 mtools-linux.tar.gz
+ redhat mtools 1339696863 mtools-src.tar.gz
+ macintel mtools 1339696850 mtools-macintel.tar.gz
+ macosx mtools 1339696855 mtools-macosx.tar.gz
+ ssun mtools 1339696863 mtools-src.tar.gz
+ sparc mtools 1339696863 mtools-src.tar.gz
+ freebsd mtools 1339696863 mtools-src.tar.gz
+ sunos mtools 1339696863 mtools-src.tar.gz
+ linux64 nfextern 1343186860 nfextern-linux64.tar.gz
+ linux nfextern 1343186815 nfextern-linux.tar.gz
+ redhat nfextern 1343187011 nfextern-src.tar.gz
+ macintel nfextern 1343186914 nfextern-macintel.tar.gz
+ macosx nfextern 1343186971 nfextern-macosx.tar.gz
+ ssun nfextern 1332311037 nfextern-ssun.tar.gz
+ sparc nfextern 1343187011 nfextern-src.tar.gz
+ freebsd nfextern 1343187011 nfextern-src.tar.gz
+ sunos nfextern 1343187011 nfextern-src.tar.gz
+ linux64 optic 1332309566 optic-universal.tar.gz
+ linux optic 1332309566 optic-universal.tar.gz
+ redhat optic 1332309566 optic-universal.tar.gz
+ macintel optic 1332309566 optic-universal.tar.gz
+ macosx optic 1332309566 optic-universal.tar.gz
+ ssun optic 1332309566 optic-universal.tar.gz
+ sparc optic 1332309566 optic-universal.tar.gz
+ freebsd optic 1332309566 optic-universal.tar.gz
+ sunos optic 1332309566 optic-universal.tar.gz
+ linux64 patch 1337903759 patch-src.tar.gz
+ linux patch 1337903759 patch-src.tar.gz
+ redhat patch 1337903759 patch-src.tar.gz
+ macintel patch 1337903759 patch-src.tar.gz
+ macosx patch 1337903759 patch-src.tar.gz
+ ssun patch 1337903759 patch-src.tar.gz
+ sparc patch 1337903759 patch-src.tar.gz
+ freebsd patch 1337903759 patch-src.tar.gz
+ sunos patch 1337903759 patch-src.tar.gz
+ linux64 rvsao 1322067222 rvsao-redhat.tar.gz
+ linux rvsao 1322067222 rvsao-redhat.tar.gz
+ redhat rvsao 1322067222 rvsao-redhat.tar.gz
+ macintel rvsao 1322067226 rvsao-macosx.tar.gz
+ macosx rvsao 1322067226 rvsao-macosx.tar.gz
+ ssun rvsao 1322067223 rvsao-ssun.tar.gz
+ sparc rvsao 1322067228 rvsao-src.tar.gz
+ freebsd rvsao 1322067228 rvsao-src.tar.gz
+ sunos rvsao 1322067228 rvsao-src.tar.gz
+ linux64 song 1332309566 song-universal.tar.gz
+ linux song 1332309566 song-universal.tar.gz
+ redhat song 1332309566 song-universal.tar.gz
+ macintel song 1332309566 song-universal.tar.gz
+ macosx song 1332309566 song-universal.tar.gz
+ ssun song 1332309566 song-universal.tar.gz
+ sparc song 1332309566 song-universal.tar.gz
+ freebsd song 1332309566 song-universal.tar.gz
+ sunos song 1332309566 song-universal.tar.gz
+ linux64 sqiid 1332309566 sqiid-universal.tar.gz
+ linux sqiid 1332309566 sqiid-universal.tar.gz
+ redhat sqiid 1332309566 sqiid-universal.tar.gz
+ macintel sqiid 1332309566 sqiid-universal.tar.gz
+ macosx sqiid 1332309566 sqiid-universal.tar.gz
+ ssun sqiid 1332309566 sqiid-universal.tar.gz
+ sparc sqiid 1332309566 sqiid-universal.tar.gz
+ freebsd sqiid 1332309566 sqiid-universal.tar.gz
+ sunos sqiid 1332309566 sqiid-universal.tar.gz
+ linux64 stsdas 1316518910 stsdas-linux.tar.gz
+ linux stsdas 1316518910 stsdas-linux.tar.gz
+ redhat stsdas 1316518961 stsdas-src.tar.gz
+ macintel stsdas 1316518808 stsdas-macosx.tar.gz
+ macosx stsdas 1316518808 stsdas-macosx.tar.gz
+ ssun stsdas 1316518961 stsdas-src.tar.gz
+ sparc stsdas 1316518961 stsdas-src.tar.gz
+ freebsd stsdas 1316518961 stsdas-src.tar.gz
+ sunos stsdas 1316518961 stsdas-src.tar.gz
+ linux64 tables 1316518978 tables-linux.tar.gz
+ linux tables 1316518978 tables-linux.tar.gz
+ redhat tables 1316518984 tables-src.tar.gz
+ macintel tables 1316518971 tables-macosx.tar.gz
+ macosx tables 1316518971 tables-macosx.tar.gz
+ ssun tables 1316518984 tables-src.tar.gz
+ sparc tables 1316518984 tables-src.tar.gz
+ freebsd tables 1316518984 tables-src.tar.gz
+ sunos tables 1316518984 tables-src.tar.gz
+ linux64 ucsclris 1339696867 ucsclris-linux64.tar.gz
+ linux ucsclris 1339696867 ucsclris-linux.tar.gz
+ redhat ucsclris 1339696868 ucsclris-src.tar.gz
+ macintel ucsclris 1339696864 ucsclris-macintel.tar.gz
+ macosx ucsclris 1339696865 ucsclris-macosx.tar.gz
+ ssun ucsclris 1339696868 ucsclris-src.tar.gz
+ sparc ucsclris 1339696868 ucsclris-src.tar.gz
+ freebsd ucsclris 1339696868 ucsclris-src.tar.gz
+ sunos ucsclris 1339696868 ucsclris-src.tar.gz
+ linux64 upsqiid 1332309566 upsqiid-universal.tar.gz
+ linux upsqiid 1332309566 upsqiid-universal.tar.gz
+ redhat upsqiid 1332309566 upsqiid-universal.tar.gz
+ macintel upsqiid 1332309566 upsqiid-universal.tar.gz
+ macosx upsqiid 1332309566 upsqiid-universal.tar.gz
+ ssun upsqiid 1332309566 upsqiid-universal.tar.gz
+ sparc upsqiid 1332309566 upsqiid-universal.tar.gz
+ freebsd upsqiid 1332309566 upsqiid-universal.tar.gz
+ sunos upsqiid 1332309566 upsqiid-universal.tar.gz
+ linux64 xdimsum 1339696873 xdimsum-linux64.tar.gz
+ linux xdimsum 1339696874 xdimsum-linux.tar.gz
+ redhat xdimsum 1339696874 xdimsum-src.tar.gz
+ macintel xdimsum 1339696869 xdimsum-macintel.tar.gz
+ macosx xdimsum 1339696871 xdimsum-macosx.tar.gz
+ ssun xdimsum 1339696874 xdimsum-src.tar.gz
+ sparc xdimsum 1339696874 xdimsum-src.tar.gz
+ freebsd xdimsum 1339696874 xdimsum-src.tar.gz
+ sunos xdimsum 1339696874 xdimsum-src.tar.gz
diff --git a/unix/hlib/util.csh/.repo_manifest b/unix/hlib/util.csh/.repo_manifest
new file mode 100644
index 00000000..d5b230b3
--- /dev/null
+++ b/unix/hlib/util.csh/.repo_manifest
@@ -0,0 +1,200 @@
+# Arch Pkg Epoch File
+#
+ linux64 adccdrom 1339696737 adccdrom-linux64.tar.gz
+ linux adccdrom 1339696737 adccdrom-linux.tar.gz
+ redhat adccdrom 1339696738 adccdrom-src.tar.gz
+ macintel adccdrom 1339696735 adccdrom-macintel.tar.gz
+ macosx adccdrom 1339696736 adccdrom-macosx.tar.gz
+ ssun adccdrom 1339696738 adccdrom-src.tar.gz
+ sparc adccdrom 1339696738 adccdrom-src.tar.gz
+ freebsd adccdrom 1339696738 adccdrom-src.tar.gz
+ sunos adccdrom 1339696738 adccdrom-src.tar.gz
+ linux64 cfh12k 1332309566 cfh12k-universal.tar.gz
+ linux cfh12k 1332309566 cfh12k-universal.tar.gz
+ redhat cfh12k 1332309566 cfh12k-universal.tar.gz
+ macintel cfh12k 1332309566 cfh12k-universal.tar.gz
+ macosx cfh12k 1332309566 cfh12k-universal.tar.gz
+ ssun cfh12k 1332309566 cfh12k-universal.tar.gz
+ sparc cfh12k 1332309566 cfh12k-universal.tar.gz
+ freebsd cfh12k 1332309566 cfh12k-universal.tar.gz
+ sunos cfh12k 1332309566 cfh12k-universal.tar.gz
+ linux64 ctio 1339696753 ctio-linux64.tar.gz
+ linux ctio 1339696757 ctio-linux.tar.gz
+ redhat ctio 1339696759 ctio-src.tar.gz
+ macintel ctio 1339696741 ctio-macintel.tar.gz
+ macosx ctio 1339696747 ctio-macosx.tar.gz
+ ssun ctio 1339696759 ctio-src.tar.gz
+ sparc ctio 1339696759 ctio-src.tar.gz
+ freebsd ctio 1339696759 ctio-src.tar.gz
+ sunos ctio 1339696759 ctio-src.tar.gz
+ linux64 deitab 1339696765 deitab-linux64.tar.gz
+ linux deitab 1339696767 deitab-linux.tar.gz
+ redhat deitab 1339696768 deitab-src.tar.gz
+ macintel deitab 1339696760 deitab-macintel.tar.gz
+ macosx deitab 1339696762 deitab-macosx.tar.gz
+ ssun deitab 1339696768 deitab-src.tar.gz
+ sparc deitab 1339696768 deitab-src.tar.gz
+ freebsd deitab 1339696768 deitab-src.tar.gz
+ sunos deitab 1339696768 deitab-src.tar.gz
+ linux64 esowfi 1332309566 esowfi-universal.tar.gz
+ linux esowfi 1332309566 esowfi-universal.tar.gz
+ redhat esowfi 1332309566 esowfi-universal.tar.gz
+ macintel esowfi 1332309566 esowfi-universal.tar.gz
+ macosx esowfi 1332309566 esowfi-universal.tar.gz
+ ssun esowfi 1332309566 esowfi-universal.tar.gz
+ sparc esowfi 1332309566 esowfi-universal.tar.gz
+ freebsd esowfi 1332309566 esowfi-universal.tar.gz
+ sunos esowfi 1332309566 esowfi-universal.tar.gz
+ linux64 fitsutil 1339696790 fitsutil-linux64.tar.gz
+ linux fitsutil 1339696797 fitsutil-linux.tar.gz
+ redhat fitsutil 1339696802 fitsutil-src.tar.gz
+ macintel fitsutil 1339696774 fitsutil-macintel.tar.gz
+ macosx fitsutil 1339696782 fitsutil-macosx.tar.gz
+ ssun fitsutil 1339696802 fitsutil-src.tar.gz
+ sparc fitsutil 1339696802 fitsutil-src.tar.gz
+ freebsd fitsutil 1339696802 fitsutil-src.tar.gz
+ sunos fitsutil 1339696802 fitsutil-src.tar.gz
+ linux64 guiapps 1339696827 guiapps-linux64.tar.gz
+ linux guiapps 1339696837 guiapps-linux.tar.gz
+ redhat guiapps 1339696843 guiapps-src.tar.gz
+ macintel guiapps 1339696808 guiapps-macintel.tar.gz
+ macosx guiapps 1339696817 guiapps-macosx.tar.gz
+ ssun guiapps 1339696843 guiapps-src.tar.gz
+ sparc guiapps 1339696843 guiapps-src.tar.gz
+ freebsd guiapps 1339696843 guiapps-src.tar.gz
+ sunos guiapps 1339696843 guiapps-src.tar.gz
+ linux64 mem0 1339696846 mem0-linux64.tar.gz
+ linux mem0 1339696847 mem0-linux.tar.gz
+ redhat mem0 1339696847 mem0-src.tar.gz
+ macintel mem0 1339696844 mem0-macintel.tar.gz
+ macosx mem0 1339696845 mem0-macosx.tar.gz
+ ssun mem0 1339696847 mem0-src.tar.gz
+ sparc mem0 1339696847 mem0-src.tar.gz
+ freebsd mem0 1339696847 mem0-src.tar.gz
+ sunos mem0 1339696847 mem0-src.tar.gz
+ linux64 mscdb 1339696652 mscdb-universal.tar.gz
+ linux mscdb 1339696652 mscdb-universal.tar.gz
+ redhat mscdb 1339696652 mscdb-universal.tar.gz
+ macintel mscdb 1339696652 mscdb-universal.tar.gz
+ macosx mscdb 1339696652 mscdb-universal.tar.gz
+ ssun mscdb 1339696652 mscdb-universal.tar.gz
+ sparc mscdb 1339696652 mscdb-universal.tar.gz
+ freebsd mscdb 1339696652 mscdb-universal.tar.gz
+ sunos mscdb 1339696652 mscdb-universal.tar.gz
+ linux64 mscred 1343187073 mscred-linux64.tar.gz
+ linux mscred 1343187056 mscred-linux.tar.gz
+ redhat mscred 1343187082 mscred-src.tar.gz
+ macintel mscred 1343187018 mscred-macintel.tar.gz
+ macosx mscred 1343187037 mscred-macosx.tar.gz
+ ssun mscred 1343187082 mscred-src.tar.gz
+ sparc mscred 1343187082 mscred-src.tar.gz
+ freebsd mscred 1343187082 mscred-src.tar.gz
+ sunos mscred 1343187082 mscred-src.tar.gz
+ linux64 mtools 1339696859 mtools-linux64.tar.gz
+ linux mtools 1339696862 mtools-linux.tar.gz
+ redhat mtools 1339696863 mtools-src.tar.gz
+ macintel mtools 1339696850 mtools-macintel.tar.gz
+ macosx mtools 1339696855 mtools-macosx.tar.gz
+ ssun mtools 1339696863 mtools-src.tar.gz
+ sparc mtools 1339696863 mtools-src.tar.gz
+ freebsd mtools 1339696863 mtools-src.tar.gz
+ sunos mtools 1339696863 mtools-src.tar.gz
+ linux64 nfextern 1343186860 nfextern-linux64.tar.gz
+ linux nfextern 1343186815 nfextern-linux.tar.gz
+ redhat nfextern 1343187011 nfextern-src.tar.gz
+ macintel nfextern 1343186914 nfextern-macintel.tar.gz
+ macosx nfextern 1343186971 nfextern-macosx.tar.gz
+ ssun nfextern 1332311037 nfextern-ssun.tar.gz
+ sparc nfextern 1343187011 nfextern-src.tar.gz
+ freebsd nfextern 1343187011 nfextern-src.tar.gz
+ sunos nfextern 1343187011 nfextern-src.tar.gz
+ linux64 optic 1332309566 optic-universal.tar.gz
+ linux optic 1332309566 optic-universal.tar.gz
+ redhat optic 1332309566 optic-universal.tar.gz
+ macintel optic 1332309566 optic-universal.tar.gz
+ macosx optic 1332309566 optic-universal.tar.gz
+ ssun optic 1332309566 optic-universal.tar.gz
+ sparc optic 1332309566 optic-universal.tar.gz
+ freebsd optic 1332309566 optic-universal.tar.gz
+ sunos optic 1332309566 optic-universal.tar.gz
+ linux64 patch 1337903759 patch-src.tar.gz
+ linux patch 1337903759 patch-src.tar.gz
+ redhat patch 1337903759 patch-src.tar.gz
+ macintel patch 1337903759 patch-src.tar.gz
+ macosx patch 1337903759 patch-src.tar.gz
+ ssun patch 1337903759 patch-src.tar.gz
+ sparc patch 1337903759 patch-src.tar.gz
+ freebsd patch 1337903759 patch-src.tar.gz
+ sunos patch 1337903759 patch-src.tar.gz
+ linux64 rvsao 1322067222 rvsao-redhat.tar.gz
+ linux rvsao 1322067222 rvsao-redhat.tar.gz
+ redhat rvsao 1322067222 rvsao-redhat.tar.gz
+ macintel rvsao 1322067226 rvsao-macosx.tar.gz
+ macosx rvsao 1322067226 rvsao-macosx.tar.gz
+ ssun rvsao 1322067223 rvsao-ssun.tar.gz
+ sparc rvsao 1322067228 rvsao-src.tar.gz
+ freebsd rvsao 1322067228 rvsao-src.tar.gz
+ sunos rvsao 1322067228 rvsao-src.tar.gz
+ linux64 song 1332309566 song-universal.tar.gz
+ linux song 1332309566 song-universal.tar.gz
+ redhat song 1332309566 song-universal.tar.gz
+ macintel song 1332309566 song-universal.tar.gz
+ macosx song 1332309566 song-universal.tar.gz
+ ssun song 1332309566 song-universal.tar.gz
+ sparc song 1332309566 song-universal.tar.gz
+ freebsd song 1332309566 song-universal.tar.gz
+ sunos song 1332309566 song-universal.tar.gz
+ linux64 sqiid 1332309566 sqiid-universal.tar.gz
+ linux sqiid 1332309566 sqiid-universal.tar.gz
+ redhat sqiid 1332309566 sqiid-universal.tar.gz
+ macintel sqiid 1332309566 sqiid-universal.tar.gz
+ macosx sqiid 1332309566 sqiid-universal.tar.gz
+ ssun sqiid 1332309566 sqiid-universal.tar.gz
+ sparc sqiid 1332309566 sqiid-universal.tar.gz
+ freebsd sqiid 1332309566 sqiid-universal.tar.gz
+ sunos sqiid 1332309566 sqiid-universal.tar.gz
+ linux64 stsdas 1316518910 stsdas-linux.tar.gz
+ linux stsdas 1316518910 stsdas-linux.tar.gz
+ redhat stsdas 1316518961 stsdas-src.tar.gz
+ macintel stsdas 1316518808 stsdas-macosx.tar.gz
+ macosx stsdas 1316518808 stsdas-macosx.tar.gz
+ ssun stsdas 1316518961 stsdas-src.tar.gz
+ sparc stsdas 1316518961 stsdas-src.tar.gz
+ freebsd stsdas 1316518961 stsdas-src.tar.gz
+ sunos stsdas 1316518961 stsdas-src.tar.gz
+ linux64 tables 1316518978 tables-linux.tar.gz
+ linux tables 1316518978 tables-linux.tar.gz
+ redhat tables 1316518984 tables-src.tar.gz
+ macintel tables 1316518971 tables-macosx.tar.gz
+ macosx tables 1316518971 tables-macosx.tar.gz
+ ssun tables 1316518984 tables-src.tar.gz
+ sparc tables 1316518984 tables-src.tar.gz
+ freebsd tables 1316518984 tables-src.tar.gz
+ sunos tables 1316518984 tables-src.tar.gz
+ linux64 ucsclris 1339696867 ucsclris-linux64.tar.gz
+ linux ucsclris 1339696867 ucsclris-linux.tar.gz
+ redhat ucsclris 1339696868 ucsclris-src.tar.gz
+ macintel ucsclris 1339696864 ucsclris-macintel.tar.gz
+ macosx ucsclris 1339696865 ucsclris-macosx.tar.gz
+ ssun ucsclris 1339696868 ucsclris-src.tar.gz
+ sparc ucsclris 1339696868 ucsclris-src.tar.gz
+ freebsd ucsclris 1339696868 ucsclris-src.tar.gz
+ sunos ucsclris 1339696868 ucsclris-src.tar.gz
+ linux64 upsqiid 1332309566 upsqiid-universal.tar.gz
+ linux upsqiid 1332309566 upsqiid-universal.tar.gz
+ redhat upsqiid 1332309566 upsqiid-universal.tar.gz
+ macintel upsqiid 1332309566 upsqiid-universal.tar.gz
+ macosx upsqiid 1332309566 upsqiid-universal.tar.gz
+ ssun upsqiid 1332309566 upsqiid-universal.tar.gz
+ sparc upsqiid 1332309566 upsqiid-universal.tar.gz
+ freebsd upsqiid 1332309566 upsqiid-universal.tar.gz
+ sunos upsqiid 1332309566 upsqiid-universal.tar.gz
+ linux64 xdimsum 1339696873 xdimsum-linux64.tar.gz
+ linux xdimsum 1339696874 xdimsum-linux.tar.gz
+ redhat xdimsum 1339696874 xdimsum-src.tar.gz
+ macintel xdimsum 1339696869 xdimsum-macintel.tar.gz
+ macosx xdimsum 1339696871 xdimsum-macosx.tar.gz
+ ssun xdimsum 1339696874 xdimsum-src.tar.gz
+ sparc xdimsum 1339696874 xdimsum-src.tar.gz
+ freebsd xdimsum 1339696874 xdimsum-src.tar.gz
+ sunos xdimsum 1339696874 xdimsum-src.tar.gz
diff --git a/unix/hlib/util.csh/.repo_pkgs b/unix/hlib/util.csh/.repo_pkgs
new file mode 100644
index 00000000..eb7b2181
--- /dev/null
+++ b/unix/hlib/util.csh/.repo_pkgs
@@ -0,0 +1,22 @@
+adccdrom
+cfh12k
+ctio
+deitab
+esowfi
+fitsutil
+guiapps
+mem0
+mscdb
+mscred
+mtools
+nfextern
+optic
+patch
+rvsao
+song
+sqiid
+stsdas
+tables
+ucsclris
+upsqiid
+xdimsum
diff --git a/unix/hlib/util.csh/.zzsetenv.def b/unix/hlib/util.csh/.zzsetenv.def
new file mode 100644
index 00000000..2fa992c0
--- /dev/null
+++ b/unix/hlib/util.csh/.zzsetenv.def
@@ -0,0 +1 @@
+keep
diff --git a/unix/hlib/util.csh/README b/unix/hlib/util.csh/README
new file mode 100644
index 00000000..2a17ea68
--- /dev/null
+++ b/unix/hlib/util.csh/README
@@ -0,0 +1,19 @@
+
+ This directory contains utility scripts used to build and
+maintain the system from the top-level IRAF root directory. These
+scripts should NOT be used to build individual packages or source
+directories.
+
+Contents include:
+
+ README This file
+ chk64 Check subdirectories for 64-bit issues
+ mkarch Reconfigure the system for given architecture
+ mkclean Clean the current architecture of binaries
+ mkdist Create a distribution file (NYI)
+ mkproto Create system prototype files
+ mksrc Clean the system of all binaries
+ mksysgen Build from a clean system source
+ mkup Update current-arch binaries
+ mkupx Update current-arch binaries (debug)
+
diff --git a/unix/hlib/util.csh/check_update b/unix/hlib/util.csh/check_update
new file mode 100755
index 00000000..a26298e9
--- /dev/null
+++ b/unix/hlib/util.csh/check_update
@@ -0,0 +1,68 @@
+#!/bin/csh -f
+#
+# CHECK_UPDATE -- Check to see if an update is available. Return $status=1
+# if a patch is available.
+#
+
+# Called from Makefile, set iraf root.
+source $iraf/unix/hlib/irafuser.csh
+
+
+set REPO = `${iraf}/util/pkgrepo`
+if ($?IRAFARCH) then
+ set arch = $IRAFARCH
+else
+ set arch = `${iraf}/unix/hlib/irafarch.csh -actual`
+endif
+
+
+# Check to see if a patch file is available.
+
+/bin/rm -f /tmp/_rdate /tmp/_pdate
+
+set FGET = "${iraf}/util/fget"
+${FGET} -q -o /tmp/_rdate http://iraf.noao.edu/ftp/v216/PCIX/.release_date
+${FGET} -q -o /tmp/_pdate http://iraf.noao.edu/ftp/v216/PCIX/.patch_release
+
+if (-e /tmp/_rdate) then
+ set rdate = `cat /tmp/_rdate`
+else
+ echo "cannot get rdate"
+ exit 0
+endif
+if (-e /tmp/_pdate) then
+ set pdate = `cat /tmp/_pdate`
+else
+ echo "cannot get pdate"
+ exit 0
+endif
+
+
+if (-e ${iraf}/.patch_release) then
+ set ipdate = `/bin/ls -l --time-style=+%s ${iraf}/.patch_release | \
+ awk '{ print ($6) }'`
+else
+ set ipdate = 0
+endif
+
+if ($#argv > 0 && "$1" == "-d") then # Debug
+ echo " rdate = " $rdate
+ echo " pdate = " $pdate
+ echo "ipdate = " $ipdate
+endif
+
+if ($rdate > $pdate) then # New Release
+ exit 1
+endif
+
+
+if ($pdate == 0) then
+ exit 0
+
+else if ($pdate > $ipdate && $ipdate != 0) then # Patch newer than installed
+ exit 1
+
+endif
+
+
+exit 0 # No update available
diff --git a/unix/hlib/util.csh/chk64 b/unix/hlib/util.csh/chk64
new file mode 100755
index 00000000..3ebe24bc
--- /dev/null
+++ b/unix/hlib/util.csh/chk64
@@ -0,0 +1,17 @@
+#!/bin/csh -f
+
+find . -type f -name \*.x -exec egrep -H SZ_REAL {} \; >& _real
+find . -type f -name \*.h -exec egrep -H SZ_REAL {} \; >& _realh
+
+find . -type f -name \*.h -exec egrep -H SZ_INT {} \; >& _inth
+find . -type f -name \*.x -exec egrep -H SZ_INT {} \; >& _int
+
+find . -type f -name \*.x -exec egrep -H SZ_STRUCT {} \; >& _sz
+find . -type f -name \*.h -exec egrep -H SZ_STRUCT {} \; >& _szh
+
+find . -type f -name \*.x -exec egrep -H mii_ {} \; >& _mii
+find . -type f -name \*.gx -exec egrep -H SZ_PIXEL {} \; >& _szpix
+
+find . -type f -name \*.x -exec egrep -H sizeof {} \; | \
+ egrep -v -e ":int" >& _sizeof
+find . -type f -name \*.x -exec egrep -H szdtype {} \; >& _szdtype
diff --git a/unix/hlib/util.csh/fget b/unix/hlib/util.csh/fget
new file mode 100755
index 00000000..23af7c6a
--- /dev/null
+++ b/unix/hlib/util.csh/fget
@@ -0,0 +1,185 @@
+#!/bin/csh -f
+#
+# FGET -- Download a URL.
+#
+# Usage: fget [-h] [-n] [-q | -v] url
+#
+# Where -n no-op flag
+# -q suppress output
+# -v verbose output
+# -d set download directory
+# -o set output filename
+# -h this message
+#
+# Example:
+# % fget -q ftp://iraf.noao.edu/iraf/extern/foo-linux.tar.gz
+#
+# ----------------------------------------------------------------------------
+
+
+unset noclobber
+onintr cleanup_
+unalias cd cp cmp echo ln mv rm sed set grep ls chmod chown pwd touch sort which
+unalias ftp wget
+
+setenv path "(../util /sbin /usr/sbin /bin /usr/bin /usr/5bin /usr/ucb /etc /usr/etc $path /usr/local/bin /opt/local/bin /local/bin /home/local/bin)"
+
+# set echo
+
+
+##############################################################################
+# START OF MACHDEP DEFINITIONS.
+##############################################################################
+
+# MACHDEP definitions which may be reset below.
+
+
+# Find the iraf root directory.
+if (! $?iraf) then
+ set iraf = ""
+ foreach f ( ~/.iraf.h ~/.iraf/iraf.h /usr/include/iraf.h)
+ # $iraf is defined, use a well-known path for the system
+ if (-e ${f}) then
+ set i = `egrep IRAF ${f} | egrep \#define | sed -e 's/"//g'`
+ set iraf = $i[3]
+echo $i
+ break
+ endif
+ end
+endif
+if ("$iraf" == "") then
+ if (-e /iraf/iraf) then
+ set iraf = /iraf/iraf/
+ else
+ set iraf = `dirname $0`/../
+ endif
+endif
+
+# Determine platform architecture.
+set arch = `$iraf/unix/hlib/irafarch.csh`
+
+
+##############################################################################
+# END OF MACHDEP DEFINITIONS.
+##############################################################################
+
+#=============================================================================
+# Declarations and initializations.
+#=============================================================================
+
+set exec = yes
+set verb = no
+set url = ""
+set fname = ""
+set ddir = ""
+
+
+# Process cmdline flags.
+while ("$1" != "")
+ switch ("$1")
+ case -n: # no execute
+ set exec = no
+ breaksw
+ case -q: # be quiet
+ set verb = no
+ set quiet = yes
+ breaksw
+ case -v: # be chatty
+ set verb = yes
+ set quiet = no
+ breaksw
+ case -h: # print help summary
+ goto Usage
+ case -d: # set download directory
+ set ddir = $2
+ shift
+ breaksw
+ case -o: # set output file name
+ set fname = $2
+ shift
+ breaksw
+ default:
+ set url = $1
+ break
+ endsw
+
+ if ("$2" == "") then
+ break
+ else
+ shift
+ endif
+end
+
+
+# Error checks.
+if ("$url" == "") then
+ if ("$verb" == "yes") then
+ echo "ERROR: URL not specified"
+ endif
+ exit 1
+endif
+
+# Get the download filename. Delete an existing copy of the file
+if ($fname == "") then
+ set fname = $url:t
+endif
+if (-e "$fname") then
+ /bin/rm -f $fname
+endif
+
+# Ensure URL is an HTTP protocol.
+set prot = `echo $url | cut -c1-3`
+if ("$prot" == "ftp") then
+ set u = `echo $url | sed -e 's;ftp://iraf.noao.edu/iraf;http://iraf.noao.edu/ftp;'`
+ set url = $u
+endif
+
+# Do it.
+if ("$exec" == "yes") then
+ if ("$verb" == "yes") then
+ echo "Downloading "$url" ...."
+ endif
+
+ set args = "url='$url' fname='${ddir}${fname}' cache='/tmp' verbose=no extn='' use_cache=no"
+ if ("$verb" == "no") then
+ $iraf/bin.$arch/x_system.e urlget ${args} \$nargs=2 >& /dev/null
+ else
+ $iraf/bin.$arch/x_system.e urlget ${args} \$nargs=2
+ endif
+
+ if ("$verb" == "yes") then
+ echo "done"
+ endif
+endif
+
+
+# Verify we have the file.
+if (! -e $url:t) then
+ if ("$verb" == "yes") then
+ echo "Error downloading file '"$fname"'"
+ endif
+ exit 1
+else
+ if ($#argv > 1) then
+ mv $url:t $2
+ endif
+endif
+
+# Normal exit.
+exit 0
+
+
+
+#=============================================================================
+# Usage
+#=============================================================================
+
+Usage:
+ echo "Usage: fget [-h] [-n] [-q | -v] url"
+ echo ""
+ echo " where -n # no execute"
+ echo " -q # suppress output"
+ echo " -v # verbose output"
+ echo " -h # this message"
+
+exit 0
diff --git a/unix/hlib/util.csh/iraf_latest b/unix/hlib/util.csh/iraf_latest
new file mode 100755
index 00000000..dfde7893
--- /dev/null
+++ b/unix/hlib/util.csh/iraf_latest
@@ -0,0 +1,91 @@
+#!/bin/csh -f
+#
+# IRAF_LATEST - Update the system with the latest distribution files.
+
+unalias grep ls
+
+set opt = "all"
+
+
+if ($#argv < 1) then
+ echo "Usage: iraf_latest <opt>"
+ exit 0
+else
+ set opt = $1
+endif
+
+
+# Called from Makefile, set iraf root.
+set iraf = $cwd/
+source $iraf/unix/hlib/irafuser.csh
+
+
+set REPO = `${iraf}/util/pkgrepo`
+if ($?IRAFARCH) then
+ set arch = $IRAFARCH
+else
+ set arch = `${iraf}/unix/hlib/irafarch.csh -actual`
+endif
+
+
+echo "iraf_latest: cwd = " $cwd
+
+# Figure out which binaries are required.
+set files = "patch-src.tar.gz" # always need the source ....
+set bins = ""
+foreach b (linux linux64 macosx macintel)
+ if (-e "bin.$b/x_images.e") then
+ set bins = `echo $bins " " $b`
+ switch ($b)
+ case linux:
+ set files = `echo "$files patch.lnux.x86.tar.gz"`
+ breaksw
+ case linux64:
+ set files = `echo "$files patch.lnux.x86_64.tar.gz"`
+ breaksw
+ case macosx:
+ set files = `echo "$files patch.macx.uni.tar.gz"`
+ breaksw
+ case macintel:
+ set files = `echo "$files patch.macx.x86_64.tar.gz"`
+ breaksw
+ endsw
+ endif
+end
+echo "Updating binaries: " $bins
+
+
+# Download the needed files to /tmp
+
+set FGET = "${iraf}/util/fget"
+set REPO = `util/pkgrepo`
+foreach f ($files)
+ echo -n "Downloading: $f"
+ ${FGET} -q -d /tmp/ $REPO/$f
+ if (! (-e /tmp/$f)) then
+ echo ""
+ echo "Error downloading $REPO/$f, quitting"
+ exit
+ endif
+
+ echo -n " Unpacking ..."
+ tar zxf /tmp/$f
+ /bin/rm -f /tmp/$f
+
+ echo " Done."
+end
+
+
+# For the initial release, the update procedures haven't yet been defined.
+# This script will be replaced by the working version at the first release.
+
+
+if ($opt == "all") then # Update everything
+ if (-e extern/.installed) then
+ echo "Update all external packages ..."
+ (chdir extern ; make update)
+ endif
+endif
+
+echo ""
+exit 0
diff --git a/unix/hlib/util.csh/iraf_update b/unix/hlib/util.csh/iraf_update
new file mode 100755
index 00000000..f43ede90
--- /dev/null
+++ b/unix/hlib/util.csh/iraf_update
@@ -0,0 +1,100 @@
+#!/bin/csh -f
+#
+# IRAF_UPDATE - Update the core IRAF system with a cumulative patch.
+
+unalias grep ls
+
+set opt = "all"
+set all = yes
+set src_only = no
+set list_only = no
+set core_only = no
+set noao_only = no
+set vo_only = no
+
+if ($#argv < 1) then
+ set opt = "all"
+ set all = yes
+else
+
+ # Process cmdline flags.
+ while ("$1" != "")
+ switch ("$1")
+ case -all: # clean all package sources
+ set all = yes
+ set opt = "all"
+ breaksw
+ case -src: # update only source code
+ set src_only = yes
+ set opt = "src"
+ breaksw
+ case -list: # list files needing updating
+ set list_only = yes
+ set opt = "list"
+
+ echo ""
+ util/check_update
+ if ($status == 0) then
+ echo "IRAF is up to date"
+ else
+ echo "An IRAF update is available"
+ endif
+ echo ""
+ (chdir util ; ${iraf}/util/pkgupdate -list)
+ exit 0
+
+ case -core: # update only core system
+ set core_only = yes
+ set opt = "core"
+ breaksw
+ case -noao: # update only NOAO package
+ set noao_only = yes
+ set opt = "noao"
+ breaksw
+ case -vo: # update only VO package
+ set vo_only = yes
+ set opt = "vo"
+ breaksw
+ default:
+ echo "Error: Unknown option '"$1"', quitting."
+ exit 1
+ endsw
+
+ shift
+ end
+endif
+
+
+# Called from Makefile, set iraf root.
+set iraf = $cwd/
+source $iraf/unix/hlib/irafuser.csh
+set irafdir = $iraf
+
+
+set REPO = `${irafdir}/util/pkgrepo`
+if ($?IRAFARCH) then
+ set arch = $IRAFARCH
+else
+ set arch = `${irafdir}/unix/hlib/irafarch.csh -actual`
+endif
+
+
+# Init the build scripts as the first update.
+#echo "Updating build scripts ...."
+util/self_update
+
+
+# Execute the update.
+echo "Updating IRAF system ...."
+util/iraf_latest $opt
+
+if ($status == 2) then
+ echo -n "Update Status: No updates necessary"
+else if ($status == 0) then
+ echo -n "Update Status: Successful "
+else
+ echo -n "Update Status: Fails "
+endif
+echo ""
+
+exit 0
diff --git a/unix/hlib/util.csh/mkarch b/unix/hlib/util.csh/mkarch
new file mode 100755
index 00000000..ceec0db8
--- /dev/null
+++ b/unix/hlib/util.csh/mkarch
@@ -0,0 +1,58 @@
+#!/bin/csh -f
+#
+# MKARCH - Reset the platform architecture. Assumes source-only tree and
+# that it's safe to just manually change links.
+
+
+set aarch = `unix/hlib/irafarch.csh -actual`
+
+if (-e $iraf/unix/bin.$aarch/mkpkg.e) then
+ # Assume we've got a system with binaries and can use MKPKG.
+ set use_mkpkg = 1
+else
+ if ($?IRAFARCH && -e $iraf/unix/bin.$IRAFARCH/mkpkg.e) then
+ set use_mkpkg = 1
+ else
+ # Change the links manually, but strip all binaries first.
+ set use_mkpkg = 0
+ endif
+endif
+
+
+if ($#argv == 1) then
+ set arch = $1
+
+loop_:
+ echo "Making architecture: "$arch
+
+ if ($use_mkpkg == 1) then
+ mkpkg $arch
+ (chdir noao ; mkpkg -p noao $arch)
+ (chdir vo ; mkpkg -p vo $arch)
+ else
+ $iraf/util/mkclean
+ /bin/rm -rf bin noao/bin unix/bin unix/as vo/bin
+
+ ln -s bin.$arch bin
+ (chdir vo ; ln -s bin.$arch bin)
+ (chdir noao ; ln -s bin.$arch bin)
+ (chdir unix ; ln -s bin.$arch bin)
+ (chdir unix ; ln -s as.$arch as)
+ endif
+
+ if ("$arch" == "macintel" || "$arch" == "linux64") then
+ (chdir unix/hlib ; \
+ rm -f iraf.h mach.h ; \
+ ln -s iraf64.h iraf.h ; \
+ ln -s mach64.h mach.h)
+ else
+ (chdir unix/hlib ; \
+ rm -f iraf.h mach.h ; \
+ ln -s iraf32.h iraf.h ; \
+ ln -s mach32.h mach.h)
+ endif
+
+else
+ set arch = $aarch
+ goto loop_
+endif
diff --git a/unix/hlib/util.csh/mkbindist b/unix/hlib/util.csh/mkbindist
new file mode 100755
index 00000000..acf4a987
--- /dev/null
+++ b/unix/hlib/util.csh/mkbindist
@@ -0,0 +1,80 @@
+#!/bin/csh -f
+
+unset noclobber
+onintr cleanup_
+unalias cd cp cmp echo ln mv rm sed set grep ls chmod chown pwd touch sort which
+
+setenv path "(/sbin /usr/sbin /bin /usr/bin /usr/5bin /usr/ucb /etc /usr/etc $path /usr/local/bin /opt/local/bin /local/bin /home/local/bin /usr/openwin/bin /usr/X11R6/bin /usr/X11/bin)"
+
+# Utility aliases.
+alias PUT "mv -f \!*; chown $user \!$ " # [MACHDEP]
+alias BOLD_ON "(tput bold)"
+alias BOLD_OFF "(tput sgr0)"
+alias SO_ON "(tput smso)"
+alias SO_OFF "(tput sgr0)"
+
+alias DO_OK "(echo -n '[ '; BOLD_ON; echo -n ' OK '; BOLD_OFF; echo ' ]')"
+alias DO_WARN "(echo -n '[ '; BOLD_ON; echo -n 'WARN'; BOLD_OFF; echo ' ]')"
+alias DO_FAIL "(echo -n '[ '; SO_ON; echo -n 'FAIL'; SO_OFF; echo ' ]')"
+
+alias ERRMSG "(echo -n ' ';BOLD_ON;echo -n 'ERROR: ' ;BOLD_OFF; echo \!*)"
+alias WARNING "(echo -n ' ';BOLD_ON;echo -n 'WARNING: ';BOLD_OFF; echo \!*)"
+alias NEWLINE "(echo '')"
+
+
+
+# set echo
+
+if (! $?iraf) then
+ echo ""
+ echo "Error: You must have the iraf env variable defined !"
+ echo ""
+ exit 1
+endif
+
+set exec = yes
+set arch = `$iraf/unix/hlib/irafarch.csh -actual`
+
+
+#=============================================================================
+# Process any command line arguments.
+#=============================================================================
+while ("$1" != "")
+ switch ("$1")
+ case -n: # no execute
+ set exec = no
+ breaksw
+ default:
+ ERRMSG "$0: unknown argument $1"
+ breaksw
+ endsw
+
+ if ("$2" == "") then
+ break
+ else
+ shift
+ endif
+end
+
+
+
+#----------------------------------
+# Determine platform architecture.
+#----------------------------------
+
+set mach = `$iraf/unix/hlib/irafarch.csh -actual`
+set hmach = `$iraf/unix/hlib/irafarch.csh -actual`
+
+echo "mach = " $mach
+echo "hmach = " $hmach
+
+make generic
+
+echo -n "Making $arch binary distribution ...."
+ make generic
+ if ($exec == "yes") then
+ tar czf ../${arch}-bin.tar.gz bin.$arch */bin.$arch extern/*/bin.$arch
+ else
+ echo "tar czf ../${arch}-bin.tar.gz bin.$arch */bin.$arch extern/*/bin.$arch"
+ endif
+echo " Done"
diff --git a/unix/hlib/util.csh/mkclean b/unix/hlib/util.csh/mkclean
new file mode 100755
index 00000000..6b7d3198
--- /dev/null
+++ b/unix/hlib/util.csh/mkclean
@@ -0,0 +1,121 @@
+#!/bin/csh -f
+#
+# MKCLEAN -- Make a pure source tree and configure the links for the
+# current architecture.
+
+
+unset noclobber
+onintr cleanup_
+unalias cd cp cmp echo ln mv rm sed set grep ls chmod chown pwd touch sort which
+
+setenv path "(/sbin /usr/sbin /bin /usr/bin /usr/5bin /usr/ucb /etc /usr/etc $path /usr/local/bin /opt/local/bin /local/bin /home/local/bin /usr/openwin/bin /usr/X11R6/bin /usr/X11/bin)"
+
+# Utility aliases.
+alias PUT "mv -f \!*; chown $user \!$ " # [MACHDEP]
+alias BOLD_ON "(tput bold)"
+alias BOLD_OFF "(tput sgr0)"
+alias SO_ON "(tput smso)"
+alias SO_OFF "(tput sgr0)"
+
+alias DO_OK "(echo -n '[ '; BOLD_ON; echo -n ' OK '; BOLD_OFF; echo ' ]')"
+alias DO_WARN "(echo -n '[ '; BOLD_ON; echo -n 'WARN'; BOLD_OFF; echo ' ]')"
+alias DO_FAIL "(echo -n '[ '; SO_ON; echo -n 'FAIL'; SO_OFF; echo ' ]')"
+
+alias ERRMSG "(echo -n ' ';BOLD_ON;echo -n 'ERROR: ' ;BOLD_OFF; echo \!*)"
+alias WARNING "(echo -n ' ';BOLD_ON;echo -n 'WARNING: ';BOLD_OFF; echo \!*)"
+alias NEWLINE "(echo '')"
+
+
+
+# set echo
+
+if (! $?iraf) then
+ echo ""
+ echo "Error: You must have the iraf env variable defined !"
+ echo ""
+ exit 1
+endif
+
+set exec = yes
+set arch = `$iraf/unix/hlib/irafarch.csh`
+
+
+#=============================================================================
+# Process any command line arguments.
+#=============================================================================
+while ("$1" != "")
+ switch ("$1")
+ case -n: # no execute
+ set exec = no
+ breaksw
+ default:
+ ERRMSG "$0: unknown argument $1"
+ breaksw
+ endsw
+
+ if ("$2" == "") then
+ break
+ else
+ shift
+ endif
+end
+
+
+
+
+
+#----------------------------------
+# Determine platform architecture.
+#----------------------------------
+
+set mach = `$iraf/unix/hlib/irafarch.csh -actual`
+set hmach = `$iraf/unix/hlib/irafarch.csh -actual`
+
+echo "mach = " $mach
+echo "hmach = " $hmach
+
+echo -n "Clean host directories ...."
+ if ($exec == "yes") then
+ /bin/rm -f unix/bin.$arch/[agm-z]*.e unix/bin.$arch/lib[bco]*.a >& /dev/null
+ else
+ /bin/ls -l unix/bin.$arch/[agm-z]*.e unix/bin.$arch/lib[bco]*.a
+ endif
+echo " Done"
+
+
+
+echo -n "Clean src directories ...."
+foreach i (local math pkg sys noao/[adfimnorst]*)
+ if ($exec == "yes") then
+ find $i -type f -name \*.a -exec /bin/rm -f {} \; >& /dev/null
+ find $i -type f -name \*.e -exec /bin/rm -f {} \; >& /dev/null
+ find $i -type f -name \*.o -exec /bin/rm -f {} \; >& /dev/null
+ else
+ find $i -type f -name \*.a -exec /bin/ls -l {} \;
+ find $i -type f -name \*.e -exec /bin/ls -l {} \;
+ find $i -type f -name \*.o -exec /bin/ls -l {} \;
+ endif
+end
+echo " Done"
+
+
+echo -n "Clean '$arch' bin directories ...."
+if ($exec == "yes") then
+ /bin/rm -rf bin.$arch/lib[a-z]*.a >& /dev/null
+ /bin/rm -rf bin.$arch/*.[eoZ] >& /dev/null
+ /bin/rm -rf noao/bin.$arch/*.[aeoZ] >& /dev/null
+else
+ /bin/ls -l bin.$arch/lib[a-z]*.a >& /dev/null
+ /bin/ls -l bin.$arch/*.[aeoZ] >& /dev/null
+ /bin/ls -l noao/bin.$arch/*.[aeoZ] >& /dev/null
+endif
+echo " Done"
+
+
+echo -n "Cleaning spool files ...."
+if ($exec == "yes") then
+ find . -name spool\* -print -exec /bin/rm -f {} \; >& /dev/null
+else
+ find . -name spool\* -print
+endif
+echo " Done"
diff --git a/unix/hlib/util.csh/mkdist b/unix/hlib/util.csh/mkdist
new file mode 100755
index 00000000..2f0711bc
--- /dev/null
+++ b/unix/hlib/util.csh/mkdist
@@ -0,0 +1,25 @@
+#!/bin/csh -f
+
+foreach i (cygwin freebsd linux linux64 macintel macosx sunos)
+ touch bin.$i/IRAF.NET
+ touch noao/bin.$i/IRAF.NET
+end
+
+touch bin.cygwin/IB.CYGW.x86
+touch bin.freebsd/IB.FBSD.x86
+touch bin.linux/IB.LNUX.x86
+touch bin.linux64/IB.LNUX.x86_64
+touch bin.macintel/IB.MACX.x86_64
+touch bin.macosx/IB.MACX.UNI
+touch bin.sunos/IB.SSUN.x86
+touch bin.ipad/IB.IPAD.ARM
+
+touch noao/bin.cygwin/NB.CYGW.x86
+touch noao/bin.freebsd/NB.FBSD.x86
+touch noao/bin.linux/NB.LNUX.x86
+touch noao/bin.linux64/NB.LNUX.x86_64
+touch noao/bin.macintel/NB.MACX.x86_64
+touch noao/bin.macosx/NB.MACX.UNI
+touch noao/bin.sunos/NB.SSUN.x86
+touch noao/bin.ipad/NB.IPAD.ARM
+
diff --git a/unix/hlib/util.csh/mkproto b/unix/hlib/util.csh/mkproto
new file mode 100755
index 00000000..f0fe1dbf
--- /dev/null
+++ b/unix/hlib/util.csh/mkproto
@@ -0,0 +1,114 @@
+#!/bin/csh -f
+#
+# MKPROTO -- Generate the VOS prototype definitions.
+
+unalias chdir ls egrep wc rm
+
+
+set vos_dir = "sys"
+#set math_dir = "math"
+set math_dir = ""
+set xtools_dir = "pkg/xtools"
+set ds_dir = "pkg/images/tv/display pkg/images/tv/wcslab"
+
+#set vosdirs = "$vos_dir $math_dir $ds_dir"
+set vosdirs = "$vos_dir $math_dir $xtools_dir $ds_dir"
+
+set curdir = `echo $cwd`
+set tproto = /tmp/_vosproto.$$
+
+
+foreach d ($vosdirs)
+
+ # Process each of the subdirectories.
+ #
+ foreach sd (`find $d -type d -print`)
+
+ # Skip the IMFORT library and any documentation directories
+ if ($sd:t != "doc" && "`echo $sd | egrep -e imfort`" == "" && \
+ "`echo $sd | egrep -e osb`" == "" && \
+ "`echo $sd | egrep -e memdbg`" == "" && \
+ "`echo $sd | egrep -e nspp`" == "") then
+
+ chdir $sd # go to subdirectory
+
+ set nf = `ls -1 | egrep -e "\.f" | wc -l` # nfiles to process
+ set nx = `ls -1 | egrep -e "\.x" | wc -l` # nfiles to process
+
+ echo "Processing: "$nx" "$nf" "$sd
+ if ($nf > 0 || $nx > 0) then
+
+ # Skip any files beginning with the letters 'zz', e.g. test
+ # files like zzdebug.x
+
+ foreach f ( [a-z][a-y]*.[xf] )
+ if ($f != 'intrp.f' && \
+ $f != 'xtpmmap.x' && \
+ $f != 'ytpmmap.x') then
+ xc -c -/P $f >& /dev/null # make prototype
+ else
+ echo " Skipping " $f
+ endif
+ end
+
+ egrep -h ^extern *.P >> $tproto # save prototypes
+ /bin/rm -f *.[oP] >& /dev/null # clean up
+ endif
+
+ chdir $curdir # back to top
+
+ else
+ echo " Skipping " $sd
+ endif
+ end
+end
+
+# Sort the prototype file, exclude certain symbols which are duplicates
+# in the VOS but harmless because they occur in places that never conflict,
+# e.g. the stdgraph and imd kernels.
+
+cat $tproto | \
+ egrep -v arbpix_ | \
+ egrep -v imdgeg_ | \
+ egrep -v stxset_ | \
+ egrep -v stxpas_ | \
+ egrep -v dgt_ | \
+ egrep -v sgt_ | \
+ egrep -v asider_ | \
+ egrep -v asifit_ | \
+ egrep -v bndsol_ | \
+ egrep -v ffa_ | \
+ egrep -v ffs_ | \
+ egrep -v fft842_ | \
+ egrep -v avdrs_ | \
+ egrep -v asigrl_ | \
+ egrep -v smooth_ | \
+ egrep -v sigl2 | \
+ egrep -v sigm2 | \
+ egrep -v impcom_ | \
+ egrep -v intrp | \
+ egrep -v srch | \
+ egrep -v codim | \
+ egrep -v mrsole | \
+ egrep -v mreval | \
+ egrep -v \ icg | \
+ egrep -v iclisd | \
+ egrep -v gscr | \
+ egrep -v imdcom | \
+ egrep -v getrot | \
+ egrep -v gtplot | \
+ egrep -v xev | \
+ egrep -v ceps | \
+ egrep -v sgt | \
+ egrep -v sgt | \
+ egrep -v U_fp | \
+ sort >$iraf/unix/hlib/libc/vosproto.h
+
+# sigl2* and sigm2* removed because of multiple uses in apps
+# impcom removed because imio$dbc/impcom.x conflicts with plot$t_implot.x
+# use of 'impcom' as a common
+# intrp* removed because it's use is xtools$ was commented out
+# srch* removed because it's use is xtools$ was commented out
+# mrsole/mreval removed because of duplicate use (splot$deblend.x and
+# xtools$numrecipes)
+# icguag removed duplicate use in noao$imred/dtoi
diff --git a/unix/hlib/util.csh/mksrc b/unix/hlib/util.csh/mksrc
new file mode 100755
index 00000000..648b8e7c
--- /dev/null
+++ b/unix/hlib/util.csh/mksrc
@@ -0,0 +1,117 @@
+#!/bin/csh -f
+#
+# MKSRC -- Make a pure source tree and configure the links for the
+# current architecture.
+
+
+unset noclobber
+onintr cleanup_
+unalias cd cp cmp echo ln mv rm sed set grep ls chmod chown pwd touch sort which
+
+setenv path "(/sbin /usr/sbin /bin /usr/bin /usr/5bin /usr/ucb /etc /usr/etc $path /usr/local/bin /opt/local/bin /local/bin /home/local/bin /usr/openwin/bin /usr/X11R6/bin /usr/X11/bin)"
+
+# Utility aliases.
+alias PUT "mv -f \!*; chown $user \!$ " # [MACHDEP]
+alias BOLD_ON "(tput bold)"
+alias BOLD_OFF "(tput sgr0)"
+alias SO_ON "(tput smso)"
+alias SO_OFF "(tput sgr0)"
+
+alias DO_OK "(echo -n '[ '; BOLD_ON; echo -n ' OK '; BOLD_OFF; echo ' ]')"
+alias DO_WARN "(echo -n '[ '; BOLD_ON; echo -n 'WARN'; BOLD_OFF; echo ' ]')"
+alias DO_FAIL "(echo -n '[ '; SO_ON; echo -n 'FAIL'; SO_OFF; echo ' ]')"
+
+alias ERRMSG "(echo -n ' ';BOLD_ON;echo -n 'ERROR: ' ;BOLD_OFF; echo \!*)"
+alias WARNING "(echo -n ' ';BOLD_ON;echo -n 'WARNING: ';BOLD_OFF; echo \!*)"
+alias NEWLINE "(echo '')"
+
+
+
+# set echo
+
+
+if (! $?iraf) then
+ echo ""
+ echo "Error: You must have the iraf env variable defined !"
+ echo ""
+ exit 1
+endif
+
+
+set exec = yes
+set arch = `$iraf/unix/hlib/irafarch.csh`
+
+
+#=============================================================================
+# Process any command line arguments.
+#=============================================================================
+while ("$1" != "")
+ switch ("$1")
+ case -n: # no execute
+ set exec = no
+ breaksw
+ default:
+ ERRMSG "$0: unknown argument $1"
+ breaksw
+ endsw
+
+ if ("$2" == "") then
+ break
+ else
+ shift
+ endif
+end
+
+
+
+
+
+#----------------------------------
+# Determine platform architecture.
+#----------------------------------
+
+echo -n "Clean host directories ...."
+ if ($exec == "yes") then
+ /bin/rm -f unix/bin.*/[agm-z]*.e unix/bin.*/lib[bco]*.a >& /dev/null
+ else
+ /bin/ls -l unix/bin.*/[agm-z]*.e unix/bin.*/lib[bco]*.a
+ endif
+echo " Done"
+
+
+
+echo -n "Clean src directories ...."
+foreach i (local math pkg sys noao)
+ if ($exec == "yes") then
+ find $i -type f -name \*.a -exec /bin/rm -f {} \; >& /dev/null
+ find $i -type f -name \*.e -exec /bin/rm -f {} \; >& /dev/null
+ find $i -type f -name \*.o -exec /bin/rm -f {} \; >& /dev/null
+ find $i -type f -name OBJS\* -exec /bin/ls -l {} \; >& /dev/null
+ else
+ find $i -type f -name \*.a -exec /bin/ls -l {} \;
+ find $i -type f -name \*.e -exec /bin/ls -l {} \;
+ find $i -type f -name \*.o -exec /bin/ls -l {} \;
+ find $i -type f -name OBJS\* -exec /bin/ls -l {} \;
+ endif
+end
+echo " Done"
+
+
+echo -n "Clean bin directories ...."
+if ($exec == "yes") then
+ /bin/rm -rf bin.*/*.[aeoZ] noao/bin.*/*.[aeoZ] OBJS* >& /dev/null
+else
+ /bin/ls -l bin.*/*.[aeoZ] noao/bin.*/*.[aeoZ] OBJS*
+endif
+echo " Done"
+
+
+echo -n "Cleaning spool files ...."
+if ($exec == "yes") then
+ find . -name spool\* -print -exec /bin/rm -f {} \; >& /dev/null
+ find . -name _spool\* -print -exec /bin/rm -f {} \; >& /dev/null
+else
+ find . -name spool\* -print
+ find . -name _spool\* -print
+endif
+echo " Done"
diff --git a/unix/hlib/util.csh/mksysgen b/unix/hlib/util.csh/mksysgen
new file mode 100755
index 00000000..770bfd3c
--- /dev/null
+++ b/unix/hlib/util.csh/mksysgen
@@ -0,0 +1,50 @@
+#!/bin/csh -f
+#
+
+if (! $?iraf) then
+ #echo ""
+ #echo "Error: You must have the iraf env variable defined !"
+ #echo ""
+ #exit 1
+
+ set iraf = $cwd/
+endif
+
+
+set c_start = `date`
+/bin/rm -f spool */spool
+
+
+$iraf/util/mkclean # clean old binaries
+
+cd $iraf/unix # NOVOS bootstrap
+source hlib/irafuser.csh
+sh -x mkpkg.sh |& tee -a spool
+
+cd $iraf/ # build NOVOS
+mkpkg |& tee -a spool
+
+cd $iraf/unix # VOS bootstrap
+source hlib/irafuser.csh
+sh -x mkpkg.sh |& tee -a spool
+
+cd $iraf/vendor # build vendor libs
+(make all |& tee -a ../spool.final)
+
+cd $iraf/ # build core system
+mkpkg |& tee -a ../spool.final
+
+cd $iraf/noao # build NOAO package
+setenv noao $cwd/
+mkpkg -p noao |& tee -a ../spool.final
+
+/bin/rm -rf bin*/pkgconfig # misc cleanup
+
+set c_end = `date`
+
+
+echo ""
+echo ""
+echo ""
+echo "Start: $c_start"
+echo " End: $c_end"
diff --git a/unix/hlib/util.csh/mkup b/unix/hlib/util.csh/mkup
new file mode 100755
index 00000000..a55c4faf
--- /dev/null
+++ b/unix/hlib/util.csh/mkup
@@ -0,0 +1,30 @@
+#!/bin/csh -f
+#
+
+set iraf = $cwd/
+source $iraf/unix/hlib/irafuser.csh
+
+# Reconfigure the system for the proper architecture if needed.
+if ($?IRAFARCH) then # use environment value
+ make $IRAFARCH
+else # use actual value
+ set arch = `$iraf/unix/hlib/irafarch.csh -actual`
+ set cfgarch = `mkpkg arch`
+ if ($cfgarch[5] != $arch) then
+ #make $arch
+ setenv IRAFARCH $arch
+ endif
+endif
+
+cd $iraf/ # build core system
+mkpkg
+mkpkg update
+
+cd $iraf/noao # build NOAO package
+setenv noao $cwd/
+mkpkg -p noao
+
+cd $iraf/vo # build VO package
+setenv vo $cwd/
+cd votools # build VOTOOLS package
+mkpkg -p vo update
diff --git a/unix/hlib/util.csh/mkupx b/unix/hlib/util.csh/mkupx
new file mode 100755
index 00000000..85d73405
--- /dev/null
+++ b/unix/hlib/util.csh/mkupx
@@ -0,0 +1,15 @@
+#!/bin/csh -f
+#
+
+set iraf = $cwd/
+
+cd $iraf/ # build core system
+mkpkg -x
+
+cd $iraf/noao # build NOAO package
+setenv noao $cwd/
+mkpkg -x -p noao
+
+cd $iraf/vo # build VO package
+setenv vo $cwd/
+mkpkg -x -p vo
diff --git a/unix/hlib/util.csh/pkgclean b/unix/hlib/util.csh/pkgclean
new file mode 100755
index 00000000..5dbf50cf
--- /dev/null
+++ b/unix/hlib/util.csh/pkgclean
@@ -0,0 +1,89 @@
+#!/bin/csh -f
+#
+# PKGCLEAN -- Clean the named package, or all packages from the system.
+#
+# Usage: pkgclean [-all] [-dist] [-init] <pkg>
+#
+# Where -all clean all packages
+# <pkg> package to be removed
+#
+# ----------------------------------------------------------------------------
+
+
+unset noclobber
+unalias rm
+
+set all = no
+set init = no
+
+# Process cmdline flags.
+while ("$1" != "")
+ switch ("$1")
+ case -all: # clean all package sources
+ set all = yes
+ breaksw
+ case -init: # init all packages
+ set init = yes
+ breaksw
+ default:
+ set pkg = $1
+ break
+ endsw
+
+ shift
+end
+
+
+if ("$all" == "yes") then
+ if (-e ".repo_pkgs") then
+ foreach p (`cat .repo_pkgs`)
+ if (-e $p) then
+ /bin/rm -rf $p
+ mkdir $p
+
+ echo "" > .installed
+ echo "" > .zzsetenv.def
+ endif
+ end
+ endif
+
+else if ("$init" == "yes") then
+ if (-e ".repo_pkgs") then
+ foreach p (`cat .repo_pkgs`)
+ if (-e $p) then
+ /bin/rm -rf $p
+ endif
+ end
+ endif
+ /bin/rm -rf Makefile >& /dev/null
+ /bin/rm -rf .installed >& /dev/null
+ /bin/rm -rf .repo* >& /dev/null
+ echo "" > .zzsetenv.def
+
+else
+ if (-e $pkg) then
+ /bin/rm -rf $pkg
+ mkdir $pkg
+ else
+ echo "Package '$pkg' is not currently installed"
+ exit 1
+ endif
+endif
+
+
+# Normal exit.
+exit 0
+
+
+
+#=============================================================================
+# Usage
+#=============================================================================
+
+Usage:
+ echo "Usage: pkgclean [-all] [-dist] [-init] <pkg>"
+ echo ""
+ echo " Where -all clean all packages"
+ echo " <pkg> package to be removed"
+
+exit 0
diff --git a/unix/hlib/util.csh/pkgdel b/unix/hlib/util.csh/pkgdel
new file mode 100755
index 00000000..fc8843d3
--- /dev/null
+++ b/unix/hlib/util.csh/pkgdel
@@ -0,0 +1,17 @@
+#!/bin/csh -f
+#
+# PKGDEL -- Delete an external package from the dynamic directory.
+#
+#
+
+
+set bindir = "`dirname $0`" # get iraf root
+set irafdir = $bindir:h
+
+
+
+if (-e $1) then
+ /bin/rm -rf $1 >& /dev/null
+endif
+
+exit 0
diff --git a/unix/hlib/util.csh/pkgenv b/unix/hlib/util.csh/pkgenv
new file mode 100755
index 00000000..9d4b9ada
--- /dev/null
+++ b/unix/hlib/util.csh/pkgenv
@@ -0,0 +1,15 @@
+#!/bin/csh -f
+#
+# PKGENV -- Initialize the package environment
+
+
+/bin/rm -f .installed .zzsetenv.def
+
+foreach p ( `cat .repo_pkgs` )
+
+ if (-e $p/.installed) then
+ cat $p/.installed >> .installed
+ echo "reset $p = $cwd/$p/" >> .zzsetenv.def
+ endif
+end
+echo "keep" >> .zzsetenv.def
diff --git a/unix/hlib/util.csh/pkgget b/unix/hlib/util.csh/pkgget
new file mode 100755
index 00000000..730485a3
--- /dev/null
+++ b/unix/hlib/util.csh/pkgget
@@ -0,0 +1,192 @@
+#!/bin/csh -f
+#
+# PKGGET -- Download the specified URL to the current directory. We use
+# a command specific to the system we're on. We assume the URL has been
+# properly escaped in the argument list.
+#
+# Usage: pkgget [-h] [-n] [-v] url
+#
+# Where -n no-op flag
+# -v verbose output
+# -h this message
+#
+# Example:
+# % pkgget -q ftp://iraf.noao.edu/iraf/extern/foo-linux.tar.gz
+#
+# ----------------------------------------------------------------------------
+
+
+unset noclobber
+onintr cleanup_
+unalias cd cp cmp echo ln mv rm sed set grep ls chmod chown pwd touch sort which
+unalias ftp wget
+
+setenv path "(../util /sbin /usr/sbin /bin /usr/bin /usr/5bin /usr/ucb /etc /usr/etc $path /usr/local/bin /opt/local/bin /local/bin /home/local/bin)"
+
+# Utility aliases.
+alias PUT "mv -f \!*; chown $user \!$ " # [MACHDEP]
+alias BOLD_ON "(tput bold)"
+alias BOLD_OFF "(tput sgr0)"
+alias SO_ON "(tput smso)"
+alias SO_OFF "(tput sgr0)"
+
+alias DO_OK "(echo -n '[ '; BOLD_ON; echo -n ' OK '; BOLD_OFF; echo ' ]')"
+alias DO_WARN "(echo -n '[ '; BOLD_ON; echo -n 'WARN'; BOLD_OFF; echo ' ]')"
+alias DO_FAIL "(echo -n '[ '; SO_ON; echo -n 'FAIL'; SO_OFF; echo ' ]')"
+
+alias ERRMSG "(echo -n ' ';BOLD_ON;echo -n 'ERROR: ' ;BOLD_OFF; echo \!*)"
+alias WARNING "(echo -n ' ';BOLD_ON;echo -n 'WARNING: ';BOLD_OFF; echo \!*)"
+alias NEWLINE "(echo '')"
+
+
+
+# set echo
+
+
+
+##############################################################################
+# START OF MACHDEP DEFINITIONS.
+##############################################################################
+
+# MACHDEP definitions which may be reset below.
+set VERSION = `cat ../.version`
+
+# Utility aliases.
+
+
+#----------------------------------
+# Determine platform architecture.
+#----------------------------------
+
+set UNAME=""
+if (-e /usr/bin/uname) then
+ set uname_cmd = /usr/bin/uname
+ set UNAME=`/usr/bin/uname | tr '[A-Z]' '[a-z]'`
+else if (-e /bin/uname) then
+ set uname_cmd = /bin/uname
+ set UNAME=`/bin/uname | tr '[A-Z]' '[a-z]'`
+else
+ WARNING "No 'uname' command found to determine architecture."
+ exit 1
+endif
+
+switch ($UNAME)
+ case linux:
+ set dlcmd = "/usr/bin/wget"
+ breaksw
+ case darwin: # Mac OSX/iOS
+ case macosx:
+ case macintel:
+ case ipad:
+ #set dlcmd = "/usr/bin/ftp -A"
+ set dlcmd = "/usr/bin/ftp"
+ breaksw
+
+ # Other architectures to be added here
+
+ default:
+ ERRMSG "Unable to determine platform architecture."
+ exit 1
+endsw
+
+# If we don't have a download command installed, use our own .....
+if (! -e $dlcmd) then
+ set dlcmd = `dirname $0`/fget
+endif
+
+##############################################################################
+# END OF MACHDEP DEFINITIONS.
+##############################################################################
+
+#=============================================================================
+# Declarations and initializations.
+#=============================================================================
+
+set exec = yes
+set verb = no
+set url = ""
+
+
+# Process cmdline flags.
+while ("$1" != "")
+ switch ("$1")
+ case -n: # no execute
+ set exec = no
+ breaksw
+ case -v: # be chatty
+ set verb = yes
+ set quiet = no
+ breaksw
+ case -h: # print help summary
+ goto Usage
+ default:
+ set url = $1
+ break
+ endsw
+
+ if ("$2" == "") then
+ break
+ else
+ shift
+ endif
+end
+
+
+# Error checks.
+if ("$url" == "") then
+ if ("$verb" == "yes") then
+ echo "ERROR: URL not specified"
+ endif
+ exit 1
+endif
+
+
+# Do it.
+if ("$exec" == "yes") then
+ if ("$verb" == "yes") then
+ echo "Downloading "$url" ...."
+ endif
+
+ if ("$verb" == "no") then
+ $dlcmd $url >& /dev/null
+ else
+ $dlcmd $url
+ endif
+
+ if ("$verb" == "yes") then
+ echo "done"
+ endif
+endif
+
+
+# Verify we have the file.
+if (! -e $url:t) then
+ if ("$verb" == "yes") then
+ echo "Error downloading file '"$url:t"'"
+ endif
+ exit 1
+
+else
+ if ($#argv > 1) then
+ mv $url:t $2
+ endif
+endif
+
+# Normal exit.
+exit 0
+
+
+
+#=============================================================================
+# Usage
+#=============================================================================
+
+Usage:
+ echo "Usage: pkgget [-h] [-n] [-q | -v] url"
+ echo ""
+ echo " where -n # no execute"
+ echo " -q # suppress output"
+ echo " -v # verbose output"
+ echo " -h # this message"
+
+exit 0
diff --git a/unix/hlib/util.csh/pkginit b/unix/hlib/util.csh/pkginit
new file mode 100755
index 00000000..b93eb61d
--- /dev/null
+++ b/unix/hlib/util.csh/pkginit
@@ -0,0 +1,43 @@
+#!/bin/csh -f
+#
+# PKGINIT - Initialize the dynamic package directory by fetching the most
+# recent repository definition files.
+
+unalias grep
+
+set bindir = "`dirname $0`" # get iraf root directory
+set irafdir = $bindir:h
+
+set REPO = `${irafdir}/util/pkgrepo` # get repo url
+set man = ".repo_manifest"
+set arch = `${irafdir}/unix/hlib/irafarch.csh -actual`
+
+
+$irafdir/util/pkgget ${REPO}/REPO.MANIFEST .repo_manifest
+if ($status == 1) then
+ echo "Cannot download repository manifest file, quitting."
+ exit $status
+endif
+
+$irafdir/util/pkgget ${REPO}/REPO.DESC .repo_desc
+if ($status == 1) then
+ echo "Cannot download repository description file, quitting."
+ exit $status
+endif
+
+
+# Create a list of packages available for the current platform. We pull
+# out the list from the repository manifest of all packages. If we have
+# IRAFARCH defined, assumed we're interested in managing multiple
+# architectures so don't filter by the current architecture.
+
+if ($?IRAFARCH) then
+ cat $man | egrep -v "^#" | awk '{printf("%s\n", $2)}' | uniq > .repo_pkgs
+ cat $man > .repo_local
+else
+ cat $man | grep "${arch}\ " | awk '{printf("%s\n", $2)}' > .repo_pkgs
+ cat $man | grep "${arch}\ " > .repo_local
+endif
+
+
+exit 0
diff --git a/unix/hlib/util.csh/pkginst b/unix/hlib/util.csh/pkginst
new file mode 100755
index 00000000..2111a607
--- /dev/null
+++ b/unix/hlib/util.csh/pkginst
@@ -0,0 +1,86 @@
+#!/bin/csh -f
+#
+# PKGINST - Install the named package.
+
+unalias grep sort uniq ls awk
+
+if ($#argv < 1) then
+ exit 0
+else
+ set pkg = $1
+endif
+
+set bindir = "`dirname $0`" # get iraf root directory
+set irafdir = $bindir:h
+
+set REPO = `${irafdir}/util/pkgrepo`
+if ($?IRAFARCH) then
+ set arch = $IRAFARCH
+else
+ set arch = `${irafdir}/unix/hlib/irafarch.csh -actual`
+endif
+
+echo "Setting architecture: '$arch' .... "
+
+
+# Get any dependency package names.
+set deps=`grep ^$pkg .repo_desc | awk '{printf("%s\n",$2)}' | sed -e 's/,/ /g'`
+set pkg_dep = ""
+foreach d ( $deps )
+ if ("$d" != "none") then
+ echo "Adding dependency '$d' ...."
+ set pkg_dep = "$pkg_dep $d"
+ endif
+end
+
+# Make a unique list of package, i.e. remove multiple instances of a package.
+# [Note: Not used, the manifest should have this already. ]
+set list = `echo $pkg_dep $pkg|awk 'BEGIN {RS=" |\n";}{print $1;}'|sort|uniq`
+
+# Process the requested package and any dependencies.
+foreach ip ($pkg_dep $pkg)
+
+ set pfile = `grep \ $ip\ .repo_manifest | grep ${arch}\ | head -1 | awk '{printf("%s\n",$4)}'`
+
+ echo $pfile | grep src.tar.gz > /dev/null
+ if ($status == 0) then
+ set src_only = 1
+ else
+ set src_only = 0
+ endif
+
+ # Remove an existing package file.
+ if (-e $pfile) then
+ /bin/rm -f $pfile
+ endif
+
+ # Download the repo file and unpack it.
+ echo -n "Installing package '$ip' .... "
+ ${irafdir}/util/pkgget ${REPO}/$pfile
+ if ($status == 1) then
+ echo " [Error]"
+ exit $status
+ endif
+
+ if (-e $pfile) then
+
+ tar zxf $pfile
+ /bin/rm -f $pfile
+ echo `date +%s`" " ${ip}.${arch} > $ip/.installed.${arch}
+ echo `date +%s`" " $ip > $ip/.installed
+
+ if ($src_only == 1) then
+ echo " [SOURCE ONLY]"
+ echo `date +%s`" " $ip > $ip/.src_only
+ else
+ echo " [OK]"
+ endif
+ else
+ echo " [Error]"
+ endif
+
+ ${irafdir}/util/pkgenv -init
+
+end
+
+exit 0
diff --git a/unix/hlib/util.csh/pkgrepo b/unix/hlib/util.csh/pkgrepo
new file mode 100755
index 00000000..f87cbe66
--- /dev/null
+++ b/unix/hlib/util.csh/pkgrepo
@@ -0,0 +1,13 @@
+#!/bin/csh -f
+#
+# PKGREPO - Get the repository base URI, either from the environment
+# variable 'IRAF_REPO' or the default.
+
+
+if ($?IRAF_REPO) then
+ echo $IRAF_REPO
+else
+ echo "ftp://iraf.noao.edu/iraf/v216/REPO"
+endif
+
+exit 0
diff --git a/unix/hlib/util.csh/pkgupdate b/unix/hlib/util.csh/pkgupdate
new file mode 100755
index 00000000..7d93bcd7
--- /dev/null
+++ b/unix/hlib/util.csh/pkgupdate
@@ -0,0 +1,106 @@
+#!/bin/csh -f
+#
+# PKGUPDATE - Update the named packages
+
+unalias grep ls
+
+set pkg = ""
+set all = no
+set list_only = no
+
+if ($#argv < 1) then
+ exit 0
+else
+ # Process cmdline flags.
+ while ("$1" != "")
+ switch ("$1")
+ case -all: # clean all package sources
+ set all = yes
+ breaksw
+ case -list: # list packages needing updating
+ set list_only = yes
+ breaksw
+ default:
+ set pkg = $1
+ break
+ endsw
+
+ shift
+ end
+endif
+
+
+set bindir = "`dirname $0`" # get iraf root directory
+set irafdir = $bindir:h
+
+set REPO = `${irafdir}/util/pkgrepo`
+if ($?IRAFARCH) then
+ set arch = $IRAFARCH
+else
+ set arch = `${irafdir}/unix/hlib/irafarch.csh -actual`
+endif
+
+echo "Updating repository data ...."
+../util/pkginit # init repository information
+
+# Check for a self-update.
+if ("$pkg" == "-self") then
+ echo "Updating utility scripts ...."
+ /bin/rm -f /tmp/util.tgz
+ ../util/pkgget ${REPO}/util-universal.tar.gz /tmp/util.tgz
+ (chdir ../util ; tar zxf /tmp/util.tgz ; /bin/rm -f /tmp/util.tgz)
+ echo "Done"
+ exit 0
+endif
+
+# Check for a extern update.
+if ("$pkg" == "-config") then
+ echo "Updating config script ...."
+ ../util/pkgget ${REPO}/config-universal configure
+ chmod 777 configure
+ echo "Done"
+ exit 0
+endif
+
+
+
+# Process the requested package and any dependencies.
+foreach ip ( `cat .repo_pkgs` )
+
+ if (-e $ip/.installed) then
+
+ set pd = `grep $ip $ip/.installed | awk '{printf("%s\n", $1)}'`
+ set rd = `grep $ip .repo_manifest | head -1 | awk '{printf("%s\n", $3)}'`
+
+ set alist = `(chdir $ip; ls -1 .inst*.* | sed -e "s/\.installed\.//g")`
+
+ if ($rd > $pd) then
+
+ # Update each installed architecture automatically.
+ foreach a ( $alist )
+
+ if ("$list_only" == "yes") then
+ printf "Package %-12s for %-8s is out of date ....\n" $ip $a
+ else
+ if ("$all" == "yes" || "$ip" == "$pkg") then
+ echo "Updating package '$ip' for '$a' ...."
+ ../util/pkginst $ip
+ endif
+ endif
+ end
+
+ else
+ if ("$list_only" == "yes" || $rd <= $pd) then
+ printf "Package %-12s is current ....\n" $ip
+ endif
+ endif
+
+ else
+ printf "Package %-12s is not installed ....\n" $ip
+ endif
+
+ ${irafdir}/util/pkgenv -init
+end
+
+echo "Done"
+exit 0
diff --git a/unix/hlib/util.csh/self_update b/unix/hlib/util.csh/self_update
new file mode 100755
index 00000000..9ba35b43
--- /dev/null
+++ b/unix/hlib/util.csh/self_update
@@ -0,0 +1,37 @@
+#!/bin/csh -f
+#
+# SELF_UPDATE - Update the update scripts.
+
+unalias grep ls
+
+set iraf = $cwd/
+source $iraf/unix/hlib/irafuser.csh
+
+chdir $iraf/util
+
+set REPO = `${iraf}/util/pkgrepo`
+if ($?IRAFARCH) then
+ set arch = $IRAFARCH
+else
+ set arch = `${iraf}/unix/hlib/irafarch.csh -actual`
+endif
+
+
+echo -n "Updating utility scripts ...."
+
+# Delete any existing downloads.
+if (-e /tmp/util.tgz) then
+ /bin/rm -f /tmp/util.tgz
+endif
+
+# Get the latest script distribution.
+./fget -o /tmp/util.tgz ${REPO}/util-universal.tar.gz
+
+# Go to iraf root, unpack and clean up. Using the IRAF root gives us
+# the chance to update the toplevel Makefile or other build scripts in
+# the system, e.g. in the 'vendor' directory.
+(chdir ../ ; tar zxf /tmp/util.tgz ; /bin/rm -f /tmp/util.tgz )
+
+echo "Done"
+
+exit 0
diff --git a/unix/hlib/util.sh b/unix/hlib/util.sh
new file mode 100755
index 00000000..be8b7c85
--- /dev/null
+++ b/unix/hlib/util.sh
@@ -0,0 +1,115 @@
+#!/bin/sh
+#
+# UTIL.SH -- Utility support script for IRAF commands.
+#
+# ----------------------------------------------------------------------------
+
+
+##############################################################################
+# Start of MACHDEP definitions.
+##############################################################################
+
+# MACHDEP definitions which may be reset below.
+LS() {
+ /bin/ls # [MACHDEP]
+} ; export LS
+
+
+export IRAF_VERSION="V2.16"
+export V=`/bin/echo $IRAF_VERSION | cut -c2-5`
+
+export hilite=1
+
+
+##############################################################################
+# Utility aliases.
+##############################################################################
+
+ECHO() {
+ if [ "$1" == "-n" ]; then
+ /bin/echo -n "$2"
+ else
+ /bin/echo "$1"
+ fi
+} ; export ECHO
+
+RM() {
+ rm -rf $1
+} ; export RM
+
+LN() {
+ ln -s $2 $1
+} ; export LN
+
+BOLD_ON() {
+ if [ $hilite ]; then tput bold; fi
+} ; export BOLD_ON
+BOLD_OFF() {
+ if [ $hilite ]; then tput sgr0; fi
+} ; export BOLD_OFF
+SO_ON() {
+ if [ $hilite ]; then tput smso; fi
+} ; export SO_ON
+SO_OFF() {
+ if [ $hilite ]; then tput sgr0; fi
+} ; export SO_OFF
+
+DO_OK() {
+ ECHO -n "[ "; BOLD_ON; ECHO -n " OK "; BOLD_OFF; ECHO " ]"
+} ; export DO_OK
+
+DO_WARN() {
+ ECHO -n "[ "; BOLD_ON; ECHO -n "WARN"; BOLD_OFF; ECHO " ]"
+} ; export DO_WARN
+
+DO_FAIL() {
+ ECHO -n "[ "; SO_ON; ECHO -n "FAIL"; SO_OFF; ECHO " ]"
+} ; export DO_FAIL
+
+NEWLINE() {
+ ECHO ''
+} ; export NEWLINE
+
+
+
+PUT() {
+ cp -p $1 $2
+} ; export PUT
+
+PROMPT() {
+ BOLD_ON; ECHO -n $1; BOLD_OFF; ECHO -n " (yes): "
+} ; export PROMPT
+
+PROMPT_N() {
+ BOLD_ON; ECHO -n $1; BOLD_OFF; ECHO -n " (no): "
+} ; export PROMPT_N
+
+MSG() {
+ ECHO -n " "; BOLD_ON; ECHO -n "*** "; BOLD_OFF; ECHO $1
+} ; export MSG
+
+MSGB() {
+ ECHO -n " ";BOLD_ON;ECHO -n "*** ";ECHO $1; BOLD_OFF
+} ; export MSGB
+
+MSGN() {
+ ECHO -n " ";BOLD_ON;ECHO -n "*** ";BOLD_OFF; ECHO -n $1
+} ; export MSGB
+
+MSGBN() {
+ ECHO -n " ";BOLD_ON;ECHO -n "*** ";ECHO -n $1; BOLD_OFF
+} ; export MSGB
+
+ERRMSG() {
+ ECHO -n " ";BOLD_ON;ECHO -n "ERROR: " ;BOLD_OFF; ECHO $1
+} ; export ERRMSG
+
+WARNING() {
+ ECHO -n " ";
+ BOLD_ON;
+ ECHO -n "WARNING: ";
+ BOLD_OFF;
+ ECHO $1
+} ; export WARNING
+
+
diff --git a/unix/hlib/utime b/unix/hlib/utime
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/unix/hlib/utime
diff --git a/unix/hlib/vocl.csh b/unix/hlib/vocl.csh
new file mode 120000
index 00000000..bc54b0f4
--- /dev/null
+++ b/unix/hlib/vocl.csh
@@ -0,0 +1 @@
+cl.csh \ No newline at end of file
diff --git a/unix/hlib/vocl.sh b/unix/hlib/vocl.sh
new file mode 100755
index 00000000..2efae89d
--- /dev/null
+++ b/unix/hlib/vocl.sh
@@ -0,0 +1,165 @@
+#!/bin/bash
+#
+# CL.SH -- Startup the version of the CL executable compiled for the
+# architecture or floating point hardware appropriate for the current
+# machine. This script can be used to invoke a number of CL flavors
+# depending on how it is called. The install script will create a 'cl'
+# and 'ecl' command link to this script with the intent that a different
+# binary would be started for each command.
+
+
+# Determine CL binary to run based on how we were called.
+
+
+nm=${0##*/}
+cl_binary="vocl.e"
+
+case "$nm" in
+ "cl" | "cl.sh")
+ cl_binary="cl.e"
+ ;;
+ "ecl" | "ecl.sh")
+ cl_binary="ecl.e"
+ ;;
+ "vocl" | "vocl.sh")
+ cl_binary="vocl.e"
+ ;;
+ *)
+ if (( $# > 1 )); then
+ if [ $1 == "-old" -o $1 == "-o" ]; then
+ cl_binary="cl.e"
+ elif [ $1 == "-ecl" -o $1 == "-e" ]; then
+ cl_binary="ecl.e"
+ elif [ $1 == "-vo" ]; then
+ cl_binary="vocl.e"
+ elif [ ${1##*.} == "c" ]; then
+ # Workaround for autoconf scripts attempting to use this
+ # command as a valid compiler option. On some systems (mostly
+ # Debian) a valid CC command can't be found and eventually
+ # the 'cl' (lisp) compiler is tried. It will always apparently
+ # have the conftest.c test file, so simply exit with a code to
+ # tell autoconf it won't work.
+ exit 1
+ fi
+ fi
+esac
+
+# Determine IRAF root directory (value set in install script).
+d_iraf="/iraf/iraf/"
+if [ -n $iraf ]; then
+ if [ ! -e $iraf ]; then
+ echo "Warning: iraf=$iraf does not exist (check .cshrc or .login)"
+ echo "Session will default to iraf=$d_iraf"
+ unset iraf ; sleep 3
+ fi
+fi
+if [ -z $iraf ]; then
+ export iraf="$d_iraf"
+fi
+
+# Check for a version query.
+if [ $# > 1 ]; then
+ case "$1" in
+ "-v" | "-V" | "-version" | "--version")
+ head -1 $iraf/unix/hlib/motd
+ exit 0
+ ;;
+ *)
+ ;;
+ esac
+fi
+
+
+# Determine platform architecture.
+if [ -e $iraf/unix/hlib/irafarch.sh ]; then
+ ACTUAL_ARCH=`$iraf/unix/hlib/irafarch.sh -actual`
+else
+ ACTUAL_ARCH=$IRAFARCH
+fi
+
+if [ -n "$IRAFARCH" ]; then
+ if [ -e $iraf/bin.${IRAFARCH}/${cl_binary} ]; then
+ MACH=$IRAFARCH
+ else
+ echo "ERROR: No $iraf/bin.${IRAFARCH}/${cl_binary} binary found."
+ if [ "$ACTUAL_ARCH" != "$IRAFARCH" ]; then
+ echo "ERROR: IRAFARCH set to '$IRAFARCH', should be '$ACTUAL_ARCH'"
+ fi
+ exit 1
+ fi
+ export arch=".$MACH"
+
+else
+ os_mach=`uname -s | tr '[A-Z]' '[a-z]' | cut -c1-6`
+
+ if [ -e $iraf/unix/hlib/irafarch.csh ]; then
+ MACH=`$iraf/unix/hlib/irafarch.csh`
+ else
+ MACH=$os_mach
+ fi
+
+ if [ "$os_mach" == "linux" ]; then # handle linux systems
+ if [ `uname -m` == "x86_64" ]; then
+ export mach="linux64"
+ else
+ export mach="linux"
+ fi
+ elif [ "$os_mach" == "darwin" ]; then # handle Mac systems
+ if [ "`uname -m`" == "x86_64" ]; then
+ export mach="macintel"
+ else
+ export mach="macosx"
+ fi
+ elif [ "$os_mach" == "cygwin" ]; then
+ export mach="cygwin"
+ else
+ mach=`uname -s | tr '[A-Z]' '[a-z]'`
+ fi
+
+ export arch=".$MACH"
+ if [ -z $IRAFARCH ]; then
+ export IRAFARCH="$MACH"
+ fi
+
+ if [ ! -e $iraf/bin.${MACH}/${cl_binary} ]; then
+ echo "ERROR: No $iraf/bin.${IRAFARCH}/${cl_binary} binary found."
+ exit 1
+ fi
+fi
+
+
+# Recent linux systems display a problem in how pointer addresses
+# interact with the stack and can result in a segfault. Remove the
+# stacksize limit for IRAF processes until this is better understood.
+if [ "$IRAFARCH" == "redhat" -o \
+ "$IRAFARCH" == "linux64" -o \
+ "$IRAFARCH" == "linux" ]; then
+ ulimit -s unlimited
+fi
+
+
+# Just run the CL if IRAFARCH already defined.
+if [ -n "$IRAFARCH" ]; then
+ if [ -z $IRAFARCH ]; then
+ export arch=""
+ else
+ export arch=".$IRAFARCH"
+ fi
+
+ export IRAFBIN=${iraf}bin$arch/
+ file=${IRAFBIN}$cl_binary
+ if [ -e $file ]; then
+ exec $file
+ else
+ echo "$file not found"
+ fi
+fi
+
+
+# Set the architecture to be used.
+export IRAFARCH=$MACH
+export arch=.$IRAFARCH
+export IRAFBIN=${iraf}bin$arch/
+
+# Run the desired CL.
+exec ${IRAFBIN}$cl_binary
diff --git a/unix/hlib/zzsetenv.def b/unix/hlib/zzsetenv.def
new file mode 100644
index 00000000..881d9c7c
--- /dev/null
+++ b/unix/hlib/zzsetenv.def
@@ -0,0 +1,119 @@
+# Global IRAF base environment list.
+
+set pkglibs = "hlib$libc/"
+
+# The following should be commented out or reset to "no" to enable world
+# coordinate support (MWCS) in V2.9. Note however that the IRAF packages
+# have not yet been modified to use MWCS, and enabling MWCS may cause these
+# packages to misbehave.
+
+#set nomwcs = yes
+
+# The following can be used to en/disable the VO modifications in the system.
+# The 'use_vo' variable can be used to globally disable features, finer
+# grained controls might also be added.
+
+set use_vo = yes
+set use_new_imt = yes
+set vo_prefetch = yes
+set vo_nthreads = 4
+set vo_runid = "iraf2161"
+
+set samp_auto = yes
+set samp_onstart = no
+
+
+# Default cache directory.
+set cache = "tmp$cache/"
+set cache_age = 30
+
+
+# Local system defaults.
+
+set clobber = no
+set imclobber = no
+set cmbuflen = 128000
+set editor = vi
+set filewait = yes
+set glbcolor = "pt=3,fr=9,al=3,tl=6,ax=5,tk=5"
+set graphcap = dev$graphcap
+set imtype = "fits"
+set imextn = "oif:imh fxf:fits,fit,fts plf:pl qpf:qp stf:hhh,??h"
+set min_lenuserarea = 64000
+set multversions = no
+set printer = lp
+set pspage = "letter"
+set stdgraph = xgterm
+set stdimage = imt512
+set stdimcur = stdimage
+set stdplot = lp
+set stdvdm = uparm$vdm
+set tapecap = dev$tapecap
+set termcap = dev$termcap
+set terminal = xgterm
+set ttybaud = 9600
+set ttyncols = 80
+set ttynlines = 40
+set version = "NOAO/IRAF V2.16.1"
+
+# System directories.
+
+set as = "host$as/"
+set bin = "iraf$bin(arch)/"
+set boot = "host$boot/"
+set dev = "iraf$dev/"
+set doc = "iraf$doc/"
+set hlib = "host$hlib/"
+set lib = "iraf$lib/"
+set math = "iraf$math/"
+set os = "host$os/"
+set osb = "sys$osb/"
+set pkg = "iraf$pkg/"
+set sys = "iraf$sys/"
+
+set clio = "sys$clio/"
+set dbio = "sys$dbio/"
+set debug = "sys$debug/"
+set etc = "sys$etc/"
+set fio = "sys$fio/"
+set flib = "sys$flib/"
+set fmio = "sys$fmio/"
+set fmtio = "sys$fmtio/"
+set gio = "sys$gio/"
+set gty = "sys$gty/"
+set imfort = "sys$imfort/"
+set imio = "sys$imio/"
+set ki = "sys$ki/"
+set libc = "sys$libc/"
+set memio = "sys$memio/"
+set mtio = "sys$mtio/"
+set mwcs = "sys$mwcs/"
+set plio = "sys$plio/"
+set pmio = "sys$pmio/"
+set psio = "sys$psio/"
+set qpoe = "sys$qpoe/"
+set tty = "sys$tty/"
+set vops = "sys$vops/"
+
+# System package directories.
+
+set cl = "pkg$cl/"
+set clpackage = "hlib$"
+set dataio = "pkg$dataio/"
+set dbms = "pkg$dbms/"
+set images = "pkg$images/"
+set language = "pkg$language/"
+set lists = "pkg$lists/"
+set obsolete = "pkg$obsolete/"
+set plot = "pkg$plot/"
+set proto = "pkg$proto/"
+set softools = "pkg$softools/"
+set system = "pkg$system/"
+set utilities = "pkg$utilities/"
+set xtools = "pkg$xtools/"
+
+
+# Load definitions for any locally added external packages.
+
+set @hlib$extern.pkg
+set @iraf$extern/.zzsetenv.def