UNIX/IRAF, starting 11/30/85

Goals:	Restructure the system to better isolate machine dependence, make
	installation and updating easier (there are many subtleties at
	present).  Merge in many revisions from VMS/IRAF, SUN/IRAF,
	and AOS/IRAF.
--------------------------------------------------------------------------

Major Problems at present:

	Root Directory dependencies
	    CL, XC, Mklib, etc. must be recompiled whenever the root
	    directory is changed.  The root directory name must be changed
	    in all the Makefiles, and eventually in all the zzsetenv.def
	    files.

	Installed Tasks
	    A number of tasks must be installed in UNIX directories outside
	    of IRAF; these tend to get lost whenever someone works on UNIX.

	Links
	    Links are used for libraries, executables, and include files.
	    These can get lost when a file is altered, or when the system
	    is moved in pieces on a tar tape.  At present someone must know
	    where all the links are and go through and remake them by hand.

	Scattered machine dependencies
	    There are a number of assembler files scattered about the system
	    and referenced in the Makelib files.  When installing the system
	    on a new host one must search out all these files, and either write
	    new assembler modules or comment out the optimized versions in
	    the Makelib files.

	Automatic System Creation Procedure
	    The "sysgen" capability for the VOS is good, but other than that
	    the autogeneration facilities are rudimentary.  There is no
	    automated full system generation capability.  There is no easy
	    way to relink all the packages when important kernel changes are
	    made.  The UNIX/IRAF development system (other than the VOS) has
	    never been fully recompiled due to the lack of these faciltities,
	    hence there is old code that will no longer compile hidden in the
	    system.

	Makefiles
	    UNIX/IRAF currently uses the UNIX Make facility for package
	    generation.  The result is many UNIX dependent Makefiles scattered
	    about the system.  When moving IRAF to a non-UNIX system some other
	    facility must be developed to make the packages.  This prevents
	    automated installation of new versions of IRAF, since all of the
	    make files must be translated for the new system.

	Awkward Machine Dependencies
	    The magtape device table is currently wired into the kernel; should
	    be table driven at runtime.  The ALLOCATE stuff is awful, and
	    depends upon an external, non-standard UNIX program.  The graphics
	    system requires NCAR metacode translators which are not part of
	    the IRAF system.

These problems are awkward enough to require the assistance of an IRAF guru
for system installation and updating; installations and updates consume limited
manpower resources; maintenance starts to take so much time that new software
initiatives suffer.  A more easily maintained system is required, now that we
have versions of IRAF running so many host machines.

Strategies:

    [1]	Collect ALL machine dependent files together in one place, so that
	the major parts of the system can be updated by merely reading in a
	TAR tape.
    [2] Develop an automated full system generation procedure so that the
	system can be automatically regenerated after an update.  This requires
	doing away with the Makefiles and the use of Make (and of DCL and
	mkpkg.com files on VMS).
    [3] Do away with the links.
    [4] Do away with the remaining root directory dependence.

The major new developments are the creation of the HOST directory system, and
the replacement of Make, Mklib, DCL/mkpkg.com etc. by a new portable IRAF
bootstrap utility called MKPKG.
------------------------------------------------------------------------------

iraf$unix/*	[VAX/UNIX version of IRAF]
iraf$vms/*	[VAX/VMS  version of IRAF] (to be added)
iraf$sun/*	[SUN/UNIX version of IRAF] (to be added)
iraf$aos/*	[AOS/VS   version of IRAF] (to be added)

	Created a new directory tree off the iraf root, to be used to hold ALL
	machine dependent code in IRAF.  This will make it possible to update
	entire directory trees automatically, without need for an expensive
	merge operation in those directories (the system dependent directories
	will still require occasional merges).  The name "unix" reflects the
	host dependence of this directory system.  Other systems have a
	different root directory name.  The logical name for the active host
	interface directory is "host$".  (12/1)

	Subdirectories of host$:

		as		assembler stuff (optimized operators)
		boot		bootstrap utilities (XC, Mkpkg, etc.)
		hlib		text files (include files, etc.)
		os		the iraf kernel

	The DEV directory is to be retained and will contain the device tables
	for the local system.  These are site dependent, unlike the HOST files,
	which are machine/os dependent.  OSB remains in the VOS because it is
	part of LIBVOPS.A, and is mostly portable anyhow.

host/boot
host/boot/bootlib
	Moved the softools$boot directory to host$boot, since it contains much
	machine dependent stuff.  Moved the RTAR host interface routines out
	into the "bootlib" directory, as the start of a host interface library
	for the boot utilities.  Started on a complete rewrite of MKLIB, to
	be replaced by a more comprehensive utility called MKPKG.  (12/1)

unix/os/zgtenv.c
	Modified to get the values of certain well known environment variables
	at run time from the <iraf.h> file, after first searching the UNIX
	environment.  This eliminates the need to recompile the bootstrap C
	programs (including the CL) when the value of a fundamental variable
	like "iraf$" is changed.  (12/3)

sys/ki/kignode.x
	There were problems when installing a binary version of IRAF on a
	new system, when the binary version was configured with networking
	turned on.  If the installer, thinking that they would not be using
	networking, did not update the dev$hosts table, then the networking
	software would not find an entry for the local host (i.e., we would
	be running with the host name table for a different site).
	Not surprisingly this would cause problems, but to avoid the trap
	I modified kignode.x to effectively disable networking if no entry
	for the local host (as named by ZGHOST) is found in the host name
	table.  When this situation occurs, all node names are assumed to
	be aliases for the local node, causing all file references to be
	resolved locally.  This also makes it easy to turn off networking
	temporarily, by simply commenting out the entry for the local host
	in the dev$hosts file.  (12/3)

sys/fmtio/ctol.x
	Would interpret "-" as a number, value zero, length one char.
	This was causing image sections to fail, e.g., "[*,-*]".  Fixed to
	treat a lone minus sign as not a number.  (12/3)

unix/os/zfpath.x
unix/os/str.c
	ZFPATH was making calls to the VOS procedures GSTRCPY and STRUPK.
	Added the equivalent local services to the kernel.  (12/5)

pkg/gio/gumark.x
	The call to GGSCALE was using unit square marker polyline point coords
	X,Y instead of the center coords of the marker XCEN,YCEN.  (12/5)

unix/os/zfchdr.c
	When called with the name of a subdirectory, would cache the subdir
	name rather than the pathname of the new directory, causing a
	subsequent call to ZFGCWD to fail.  This has not been a problem
	because ZFCHDR is not supposed to be called that way, but it seemed
	safer to change it to handle this case.  (12/6)

unix/os/prwait.c
	The subprocess exit code (argument to exit()) was not being returned
	properly (wrong byte of exit longword).  (12/8)

unix/os/zoscmd.c	KERNEL CHANGE
-------------------------------------------------------------------------------
	When a host system command is interrupted the exit status returned
	by the subprocess is now ignored, with ZOSCMD returning a special
	code indicating interrupt instead.  This is the only reliable way
	of signalling interrupt to the parent process, because the exit status
	returned by foreign tasks is not defined.  (12/8)

	The ZOSCMD for all kernels should return the INTERRUPT exit code
	(SYS_XINT=503) when the OS command is interrupted, e.g., due to a
	<ctrl/c>.
-------------------------------------------------------------------------------

host/boot/mkpkg/*
	The new MKPKG task is now tested and installed.  MKPKG replaces both
	MKLIB and MAKE (and the mkpkg.com files in VMS/IRAF.  The task is
	upwards compatible with MKLIB but is much more powerful; see the task
	documentation for details.  This is a bootstrap utility, hence it is
	written in C and makes calls only to LIBBOOT.A (a new library for the
	bootstrap utilities) and LIBOS.A.

	Unlike MKLIB, which was originally written as an experiment and which
	was never a very good program (it was closely tied to UNIX), MKPKG was
	carefully written.  In particular, the machine dependent parts were
	isolated (as far as possible) to make it relatively easy to port the
	utility to new systems, and extensive diagnostics are built in.  When
	used to update libraries, MKPKG is several times as fast as the original
	MKLIB since it uses a file date cache.  (12/8)

host/bootlib/*
	A new directory and library (lib$libboot.a).  The concept here is to
	isolate the machine interface for the C language bootstrap utilities.
	As functions are needed by these utilities, new modules are added
	to this library.  Some of the modules talk directly to the host system,
	others to LIBOS, others to both, etc.  To bootstrap the utility tasks
	(XC, MKPKG, etc.) one must first make the libraries libboot.a and
	libos.a.  Once these are up the bootstrap utilities can be linked
	and used to make the VOS.  Once the VOS is up the bootstrap utilities
	can be relinked with LIBSYS and LIBVOPS to get full filename mapping.
	On a UNIX host the bootstrap version of VFN2OSFN is all that is needed.
	(12/8)

sys/etc/main.x
	When a task is run standalone, will now look for the ZZSETENV.DEF in
	the system library hlib$ if not found in the current directory.
	This will get rid of the (partially system dependent) ZZSETENV.DEF
	files scattered about the system, but still make it possible to have
	a special version of the file in the local directory for debugging.
	(12/8)

lib/*
hlib/*
	Moved the following files to unix/hlib (= host$hlib).  The new MKPKG
	facility will find the header files in either directory; all files
	are still referenced as <file.h> in source file includes.  (12/8)

	    cllogout.cl			(standard iraf stuff)
	    clpackage.cl
	    config.h
	    iraf.h
	    libc/
	    login.cl
	    mach.h
	    math.h
	    zzsetenv.def

	    generic.e			(bootstrap utilities)
	    mkpkg.e
	    rpp.e
	    xc.e
	    xpp.e

	    cidir.sh			(real UNIX dependent stuff)
	    dgrep.sh
	    dupdir.c
	    dupdir.e
	    irafuser.csh
	    mkiraf.csh
	    nightly.sh

	Now that all these things are out of lib$, a new version of lib$ from
	the UNIX development system can be installed on another system by a
	simple copy operation, without a time consuming and error prone merge
	operation.

host/boot/spp/xc.c
	Removed the IRAFDIR pathname, -r irafdir, etc. stuff.  Added references
	to the libraries libboot.a and libos.a in the Makefile.  Got rid of the
	link on the executable and replaced it by a "make install".
	The utiltity now makes VFN's of the form "iraf$..." or "host$..." and
	calls vfn2osfn() to get a pathname.  The latter calls ZGTENV which
	references either the environment or the <iraf.h> file (as discussed
	earlier), hence XC no longer needs to be recompiled when the root
	directory is changed.  Since vfn2osfn is used references to include
	files in subdirectories of a system library (e.g., lib$pkg or lib$math)
	are now fully supported.  (12/8)

host/boot/spp/xpp/xppmain.c
host/boot/spp/xpp/xppcode.c
	All the same changes as in XC, above.  Also added a call to os_sysfile()
	to go searching for system include files, which can now be in either 
	lib$ or hlib$.  (12/8)

host/boot/generic/*
	The GENERIC utility was moved into its own subdirectory.  Added a
	makefile.  Got rid of the link to the executable in lib$.  Added a
	make install to move the .e instead.  (12/8)

host/boot/xyacc
	Changed SPP-Yacc subdirectory name to xyacc.  Brought Makefile up to
	date; added make install to move executable into hlib$.  This utility
	is really only supported in the UNIX version of IRAF for system software
	development, hence did not make it fully autogenerating.  (12/8)

unix/os/*
	Made a mkpkg file to maintain LIBOS.  Deleted the linked copies of the
	kernel.h and kname.h include files, so that now there is only the one
	copy in libc.  Added an "mkpkg.csh" to bootstrap the library before
	the mkpkg utility is up.  (12/8)

host/hlib/clpackage.cl
	Added defines for as$ and hlib$.  Deleted the define for tmp$ since
	this is now a system dependent definition (like iraf$ and host$).
	Added a define for imdir$ since this now defaults to tmp$.  Added
	comments pointing out what is system dependent and what isn't. (12/8)

sys/vops/apowk.x
	Case **0 was setting the output vector to zero rather than one. (12/9)

sys/etc/sysid.x
	If the value of the "userid" environment variable is "USER" (the
	default login.cl value), SYSID will now call getuid() to get the
	user's host system login name, and use that in the output string
	rather than having labels come out as "USER@lyra".  (12/9)

host/boot/generic/*
	Cleaned up the code somewhat and added a new $FOR preprocessor
	directive for expanding generic sections of code inline.  Formerly
	the expanded code sections where always written to separate files;
	this led to use of UNIX tasks in the Makefiles to generate the files
	and concatenate them into a single file.  Also added a mkpkg.csh
	for bootstrapping the task.  (12/9)

sys/clio/*
sys/etc/*
sys/fio/*
sys/fmtio/*
sys/gio/*
sys/imio/*
sys/ki/*
sys/memio/*
sys/mtio/*
sys/osb/*
sys/tty/*
sys/vops/*
	The following were done for each source directory in the VOS:

	    o	Added a mkpkg file, deleted the Makelib file.  In each case
		the library module list with include file dependencies was
		generated fresh to make sure that all include file depenencies
		were noted (these tend to get left out as code is modified).
	    
	    o	Deleted the local copy of a global files, leaving only the
		lib$ version, to avoid problems with links.  Converted all
		"file" references to local copies of global files to <file>
		references.  Note that include files which are only referenced
		locally do not appear in the system library and are referenced
		as "file" in the source and mkpkg files.

	    o	Deleted all zzsetenv.def files (no longer needed).

	    o	Deleted any junk files found.

	The mkpkg files are set up in such a way that the library can be
	updated either locally, by simply typing "mkpkg", or by running mkpkg
	from a higher level in the directory system, e.g., sys$.  This
	obsoletes the "update" utility.  (12/9)

sys/gio/cursor/keys.hlp
lib/scr/cursor.key
	Create a new library directory lib$scr to hold files required at
	runtime for output on a terminal screen.  Moved the cursor mode keys
	file there.  This makes it possible to get cursor mode help after
	the sources for the VOS have been deleted to save space.  (12/9)

sys/gio/ncarutil/sysint/ishift.s
sys/gio/ncarutil/sysint/i1mach.f
	Moved ishift.s to as$.  Moved i1mach.f to hlib$.  Set up the mkpkg
	file to conditionally compile as$ishift.s if found, else it uses the
	local ishift.x (which is much slower).  (12/9)

sys/gio/ncarutil/tests
	Changed the filenames *.t.f to *t.f for portability reasons.  Changed
	the names of the files containing tasks from x_file.x to file.x; only
	the file x_ncartest.x should have an x_ prefix since it is the only
	executable.  There was an old version of "strmln" in the directory
	which is not used and should probably be deleted (or moved somewhere
	else), but I left it in for Suzanne to decide what to do with it.
	Set up a mkpkg to make the test package, got rid of the Makefile.
	(12/9)

sys/gio/nspp/*
	These directories formerly contained the graphics library used by the
	original GRAPH, CONTOUR, SURFACE, etc. programs.  These programs have
	since been converted to use the new NCAR/GKS/GIO stuff, so most of the
	code in these directories was no longer used.  The only program in the
	system still using the LIBNSPP.A library is the GIO/NCAR graphics
	kernel, which talks directly to the NCAR system plot package (nspp)
	(I think there may be other package which reference the library, but
	they do not need too).

	Accordingly, the gio$nspp directories were pared down to just the
	system plot package and associated interface routines.  Extensions to
	the system plot package used by the NSPP kernel (cell array, etc.)
	remain in the gio$nsppkern directory.  The system interface code for
	LIBNSPP uses some of the same code as ncarutil/sysint; both share the
	same machine dependent files off in hlib$ and as$.  (12/9)

host/boot/spp/xc.c
lib/libboot.a
lib/libos.a
	Added calls to os_sysfile to generate the library names in XC, allowing
	libraries to reside in either lib$ or hlib$.  Moved LIBBOOT and LIBOS
	to hlib$.  (12/10)

host/boot/spp/xc.c
	When linking an executable "file.e", the unix version of XC will now
	generate a executable called "T_file.e" in the current directory.
	If the link completes successfully the target executable is deleted
	and the temp is renamed.  This achieves the following:

	    [1]	If the link fails, the old exectable is not affected and is
		still available (particularly useful on the development system
		when people may be using the package someone is working on).

	    [2]	The link will not fail if someone is using the installed
		executable, since the linker is not being asked to replace the
		installed executable.  For similar reasons, the link will not
		fail if the installed executable was created by someone else.

	The temporary executable is not deleted if the link fails, since one
	might want to examine its symbol table.  (12/10)

sys/imio/imfort*
	Move the imfort stuff (Fortran callable image interface) to the
	pkg$local directory, since it is only a prototype local interface.
	(12/10)

sys/gio/ncarutil/sysint
	Deleted the reference to i1mach.f, since this module is already
	present in the VOPS library.  (12/11)

sys/osb/*
	Moved the machine dependent files into as$ and hlib$ and set up the
	mkpkg to automatically reference these.  (12/11)

sys/tty/*
	Moved the "cacheg.dat" and "cachet.dat" files to dev$ and changed the
	names to "dev$cacheg.inc" and "dev$cachet.inc" (inc = include file).
	This is permissible now since XC calls vfn2osfn() to map the names of
	include files, and is desirable since this is a site dependent file.
	Combined files zzmktty.x and ttycomp.x and changed the name to
	x_mkttydata.x.  Set up the mkpkg to install the x_mkttydata.e in lib$
	like all the other system executables.  (12/11)

unix/os/zsvjmp.s
	Moved zsvjmp.s to as$.  On a UNIX host this was the only machine
	dependent file in the kernel.  (12/12)

unix/os/zfpath.x
unix/os/zfsubd.x
unix/os/zfxdir.x
unix/os/zfnbrk.x
	Replaced the above files by equivalent C language procedures.  This
	results in an all-C kernel and eliminates the chicken before the egg
	problem on a new system.  The C procedures work directly on the XCHAR
	strings just like the SPP procedures did, hence their is no
	computational penalty (although the use of unpacked strings in the
	four procedures is certainly inconsistent with the rest of the kernel,
	and I question whether the gain in efficiency is worth it).  Deleted
	the str.c file introduced a couple of days ago to get a local strcpy.
	(12/12)

unix/os/zfioks.c
	Changed a reference to the old symbol IRAFDIR to a call to ZGTENV
	to get the pathname of "iraf".  (12/14)

host/boot/spp/rpprat/baderr.r
host/boot/spp/rpprat/synerr.r
	The "% character" escapes to pass character*(*) declarations on to the
	Fortran did not have the 6 leading spaces required by good ole Fortran,
	causing a syntax error.  (12/14)

host/boot/spp/rpp/rppfor
host/boot/spp/rpp/ratlibf
	Did a "make fortran" to update the Fortran sources.  Several
	modifications were made in recent months without updating the Fortran
	and testing the software.  (12/14)

(Have completed testing of the automatic bootstrap procedure for the HOST
(directories, and the sysgen procedure for the SYS direcories.  The former
(uses "mkpkg.csh" files to bootstrap the bootstrap utilities, and the latter
(of course used MKPKG.)
...

pkg/system/allocate.cl
pkg/system/deallocate.cl
pkg/system/devstatus.cl
pkg/system/diskspace.cl
pkg/system/gripes.cl
pkg/system/spy.cl
	Moved the above machine dependent CL scripts and their associated
	parameter files to the HLIB directory, and changed system.cl to
	reference the tasks there.  (12/14)

pkg/system/_magtape.x
pkg/system/x_systest.x
	Deleted the mtdevlist task which referenced a procedure which has
	been dropped from MTIO.  (12/15)

pkg/cl/cldate.c
pkg/cl/builtin.c
	Deleted the task version() and the C file cldate.c.  This feature
	has not been very useful (the date the CL itself was last compiled
	or linked is not very interesting) and some machine dependent 
	machinations are required to generate the date string.  (12/15)

pkg/cl/Makefile
pkg/cl/Makelib
pkg/cl/mkpkg
	Deleted the Makefile and Makelib and added a "mkpkg" file.  This calls
	Yacc and Lex to translate the .l and .y files, but this does not make
	the package machine dependent since the translated .c files are all
	that is required on machines other than the software development VAX.
	The CL should now be 100% portable (except for C bugs).  (12/15)

pkg/cl/tests/
	Deleted the tests subdirectory since the contents were just a bunch
	of junk tasks that the authors (including myself) have long since
	forgotten about.  This stuff should be made to order during testing
	by the tester in their own directories, outside of the production
	system.  (12/15)

pkg/cl/login.cl
	Cleaned up somewhat so that is should work on other systems; removed
	all unix pathnames.  (12/15)

pkg/cl/binop.c
	Deleted reference "import_mach" to nonexistent include file.  (12/15)

pkg/cl/edcap.c
	Deleted reference "import_fio" to nonexistent include file.  (12/15)

pkg/cl/main.c
	Deleted the envinit() procedure since we now assume that the essential
	environment variables (e.g., iraf, host, tmp, hostid) are provided
	somehow by ZGTENV.  Changed the library references for the CL login
	and logout files (clpackage.cl, cllogout.cl) to reference HLIB rather
	than LIB, since these files are site dependent.  (12/15)

pkg/cl/sizes.c
	Discovered and deleted this junk (nonfunctional) file.  (12/15)

lib/clpackage.men
	Deleted this junk file (the real one is in pkg$clpackage/).  (12/15)

lib/gvset.h
lib/gwindow.h
	Deleted these header files as the code which used them (in gio$nspp)
	has since been deleted.  (12/15)

lib/xstdgraph.e
lib/xstdimage.e
lib/xstdplot.e
dev/graphcap
	The names of these tasks were changed back to x_*.e for consistency
	with the rest of IRAF; both UNIX and VMS permit underscores in file
	names.  (12/15)

dev/*.tbi
	Deleted all the .tbi files (part of termcap, used to initialize tab
	stops on terminals).  We will probably never use these and they can
	be regenerated if ever needed.  (12/15)

sys/vops/acht.x
	Added a generic $ifdef to conditionally declare the loop variable I,
	so that it is not declared if the loop is not used (else the compiler
	generates a warning message).  (12/15)

sys/gio/nspp/portlib/flushb.f
	Variable idummy not used; commented out.  (12/15)

pkg/cl/debug.c
	Changed the reference to "lib$iraf.h" in d_f() to "hlib$iraf.h".
	(12/16)

pkg/cl/edcap.c
	The get_editor() function was opening but not closing the edcap file,
	eventually causing the CL to run out of file descriptors and crash.
	Also, get_editor() was not saving the name of the editor in the
	field "command[EDITOR_ID].keystroke" (not my choice for a name),
	hence get_editor was being called every time EHIST or EPARAM was
	called.  (12/16)

host/hlib/mkpkg.inc
host/hlib/libc/iraf.h
unix/os/zgtenv.c
host/boot/mkpkg/*
	Deleted the logical name "hostid" from ZGTENV and the <iraf.h> file.
	Only "iraf", "host", and "tmp" are left now at the lowest level.
	It turns out that "hostid" is used only in the MKPKG files.  Rather
	than use a predefined host environment variable I set up MKPKG to
	read the system include file "hlib$mkpkg.inc" at startup time.
	This makes it easy to set up the system with all sorts of machine
	dependent MKPKG configuration parameters and switches, if necessary.
	The current list includes HOSTID, XFLAGS (compile), LFLAGS (link),
	USE_CCOMPILER, and USE_GENERIC.  I anticipate adding switches to
	conditionally build various graphics kernels and the like, as these
	may reference libraries not present on all systems, and it is a waste
	of time to keep a graphics kernel up to date if it will never be
	used.  (12/16)

sys/vops/asel.x
	The "$t" suffix was missing from the procedure name.  (12/16)

host/boot/generic/generic.c
	We have been naming generic SPP and C files with ".x" and ".c"
	extensions.  This is misleading; the extensions should be ".gx" and
	".gc".  Modified the generic preprocessor to generate a file with
	a ".X" extension when a generic file with a ".gX" extension is input.
	(12/16)

sys/osb/*
sys/vops/*
	Changed the names of all generic sources in OSB and VOPS to use the
	extensions ".gc" and ".gx".  (12/16)


(The following is a copy of some mail sent to the IRAF group)
-------------------------
Anyone calling the generic preprocessor via the new MKPKG facility should look
at OSB or VOPS for an example of how to set it up.  The major points are the
following:

    [1]	Generic SPP files should have the extension ".gx".  The GENERIC
	preprocessor has been modified to make ".x" output files when fed
	".gx" input files (in general, ".gX" -> ".X").

    [2] The generic preprocessor is not a required bootstrap utility except
	on our software development VAX; that is why we always keep the
	preprocessed output files around.  The MKPKG files should be set
	up as follows:

		tfiles:
			$ifolder (fi.x, f.gx) $generic ... f.gx $endif
				(etc)
			;

		libpkg.a:
			$ifeq (USE_GENERIC, yes) $call tfiles $endif
			@subdir
			file.x
			    (etc)
			;

	Note that the USE_GENERIC symbol is available to test if the local
	system has a generic preprocessing capability.  This symbol and a
	few others are defined in the MKPKG include file hlib$mkpkg.inc,
	which is automatically included whenever MKPKG is run.  This file
	should be very useful for machine dependent conditional compilation,
	e.g., we will only build the calcomp graphics kernel (etc) on a system
	that sets a switch saying it wants the kernel (if the system does
	not have a -lcalcomp library, the package would not even link).

    [3]	A new preprocessor directive $FOR (types) ... $ENDFOR has been added
	to the generic preprocessor for expanding generic sections of code
	inline.  This should be used in conjunction with the -o switch to set
	the output filename, e.g.:

		$generic file.gx -o file.x

	And inside the file "file.gx", e.g.:

			<type specific code>

		$for (silrdx)
			<generic code>
		$endfor

			<type specific code>
			    ...

sys/gio/calcomp/mkpkg
sys/gio/nsppkern/mkpkg
sys/gio/mkpkg
sys/mkpkg
host/hlib/mkpkg.inc
	Modified the NSPP and Calcomp graphics kernels to keep the kernel
	library in lib$, like the stdgraph kernel already does.  This is
	necessary if an external task is to be able to use the kernel as an
	inline kernel.  Added switch symbols to the MKPKG include file to
	conditionally compile the NSPP and Calcomp kernels, as these will
	not be used on some systems.  (12/17)

math/*/mkpkg
pkg/*/mkpkg
	The IRAF group members started writing mkpkg files for these
	directories, and we began testing.  (12/17)

host/boot/rmbin/
	Added a new utility RMBIN for descending directory trees and deleting
	binary files.  This is needed to strip the system down to only sources
	for a complete rebuild.  (12/19)

unix/os/zfacss.c
	The test for a directory file was not correct.  (12/19)

--------------------------
Numerous changes to the MATH and PKG software were made in the process of
getting the MKPKG based full system generation facilities to work.  In the
process many awkward things were fixed, e.g., all the assembler files were
moved to AS, local .x or stubbed out versions were added with MKPKG
conditionals to use them if the AS versions are not found, all old code was
made to use the new lib$pkg and lib$math subdirectories, most of the library
member lists were regenerated, many dead files were deleted, old code that
had not been recompiled in years was recompiled and bugs fixed, etc.  The first
error-free full system rebuild (rmbin followed by mkpkg at the root) took place
on the UNIX/750 on 12/21, taking 20 hours single user.
--------------------------

unix/boot/wtar/*
unix/boot/rtar/*
unix/boot/bootlib/tape.c (etc.)
	Added WTAR to the suite of portable bootstrap utilities.  Fixed RTAR
	so that it can read from tape as well as disk on non-UNIX systems,
	and shares bootlib library procedures with WTAR (and also RMBIN, which
	is a lot like WTAR).  Only a little of the VMS version of WTAR could
	be used due to VMS dependencies spread throughout the code (even if
	under #ifdefs).  The new version also fixes a number of problems with
	the VMS version: IRAF file and magtape names are now used consistently,
	case is preserved when transferring filenames to the tape, etc.

	Most importantly, the new RTAR and WTAR are portable above LIBBOOT and
	LIBOS (the ZFIOMT driver is used), hence they can be used on systems
	like AOS as well as on UNIX and VMS.  WTAR is useful even on UNIX
	systems due to its ability to omit binary files, e.g., when making
	source tapes on the UNIX/VAX for the SUN (not having to remember what
	/dev/rmtXX to use is also nice).  The old VMS version of WTAR, by the
	way, uses a nonstandard VMS/C printf format (e.g., %6.8o) for encoding
	the file headers.  (12/23)

unix/os/ufstat.c
unix/os/zfacss.c
unix/os/zfinfo.c
unix/os/zfiobf.c
unix/os/zfiotx.c		[UNIX]
	Added cacheing of the "stat" information from the last call to the
	UNIX system service STAT.  This can significantly reduce the number
	of system calls in applications that access a lot of files.  (12/24)

host/boot/rtar/rtar.c
	Added a switch "-s" to RTAR to strip the extra whitespace added to the
	end of text files by WTAR (on VMS).  This causes compiles to fail on
	UNIX, causes diffs to fail, and in any event the tape utilities should
	not modify files.  (12/24)

images/tv/*
	Installed the entire TV package from VMS/IRAF, since all the recent
	development work has been done there.  Reorganized CV with the task
	at the top and the libraries in subdirectories, so that it can have
	a standard mkpkg.  Set up mkpkg to conditionally compile either the
	UNIX or VMS device i/o interface.  (12/24)

unix/os/zfiotx.c		[UNIX]
	Discovered that the unix text file driver will append to any existing
	file when called to open a file in NEW_FILE mode.  This was never
	discovered before because the VOS will always delete any existing file
	before opening a new file, but the bootstrap utilities (RTAR) are not
	so careful.  (12/24)

images/tv/*
	Discovered many declared but not used variables.  Also found one used
	but not declared variable ("frame" in display/t_display.x).  Evidently
	these are not found by the VMS compiler.  File zsnap.x in CV/iism70
	was referencing ASEL when ASELS was intended.  (12/26)

images/tv/*
host/gdev
	The "m70unix" and "m70vms" subdirectories in DISPLAY and CV were
	bothersome due to the duplication of code, protrusion of system
	dependence into the pkg sources, and limited networking support
	for the VMS version of the IIS interface (which was bypassing the
	IRAF kernel).  To address these problems I added a new device driver
	ZFIOGD for binary graphics devices, e.g., image displays, versatec
	plotters, and the like.

	This driver is the i/o interface to binary graphics devices; it isolates
	the host system dependence of the interface but does nothing about the
	device dependence.  The GIO driver, on the other hand, deals with the
	device dependence but should not be host system dependent.  The ZFIOGD
	interface is a streaming binary file interface, hence provides a
	data driven interface even if the host system device driver is control
	driven.  The data driven nature of ZFIOGD and its ZFIOBF semantics
	make it trivial to support network access via the kernel interface.

	The ZFIOGD driver is logically part of the kernel, but is programmed
	in SPP, may share header files with the GIO kernel, and wants to use
	high level functions (e.g., memory allocation, string ops), hence is
	maintained in LIBSYS rather than LIBOS.  The sources are in HOST$GDEV
	since this is partially system dependent code.  ZFIOGD can support
	any number or set of actual graphics devices without change to the KI.
	Currently only the IIS M70/M75 is supported.  The new interface for
	UNIX has the advantage of permitting an IOCTL call to master clear
	the IIS at device open time (since we no longer assume that it is a
	simple binary file, we can do anything we want).  (12/26)

sys/imio/imdmap.x
pkg/images/tv/display/*
dev/*.imh
	Setup up IMDMAP to open the image header in memory (as a NEW_IMAGE)
	without accessing the .imh file in DEV.  Deleted the .imh files;
	once the MTIO lock file is gone we can remove world write permission
	and quota on DEV$.  IMDMAP now uses graphcap to get the device
	parameters and initializes the in-core image header structure
	accordingly.  (12/27)

sys/fio/delete.x
	DELETE will now ignore attempts to delete "dev$null".  (12/27)

unix/as/*.s		[UNIX]
	It turns out that the UNIX assembler makes branch labels global unless
	they begin with an "L".  Renamed a number of branch labels with
	cryptic LXX names so that they will not be kept in the symbol table
	(they would come out looking like functions in profiles) (12/28)

unix/as/aclr.s
	Added a fast assembler version of ACLR.  (12/28)

pkg/images/tv/display
	Tested, debugged, optimized.  (12/28)

pkg/images/tv/cv/*
	Brought up to date, now uses same bottom end as display.  (12/28)

-------------------------
[Begin diff/merge of revisions from VMS/IRAF]

sys/etc/maideh.x
	Message buffer size increased from 64 to SZ_LINE.  (12/28)

sys/etc/propdpr.x
	New version with support for queueing of bkg jobs installed.  (12/28)

sys/etc/tsleep.x
	ztslee -> zwmsec.  (12/28)

sys/fio/fgetfd.x
	Added "int or()".  (12/28)

sys/fio/fwtacc.x
	Modified to return not accessible for directory files; such files
	cannot be read as ordinary files on some systems.  (12/28)

sys/fio/osfnlock.x
	Modified to temporarily override ONECASE_OUT; no longer does any
	case conversion at all.  This is necessary for the kernel interface
	and is fairly safe since few systems with case insensitive filenames
	permit only single case names as input (if such is the case, the
	kernel will probably do the case mapping in any case).  (12/28)

sys/fio/vfnmap.x
sys/fio/vfntrans.x
	Installed vms/iraf versions without change.  Numerous minor bug
	fixes, ztslee -> zwmsec, bug fix in initialization of extn map,
	etc.  (12/28)

sys/fmtio/ctol.x
	Modified to permit + as well as - (but much more than that is req'd
	before IRAF permits + in numbers everywhere).  (12/28)

sys/fmtio/dtoc.x
	IS_INDEF -> IS_INDEFD.  (12/28)

sys/fmtio/parg.x
	The int(dval) would cause integer overflow when DVAL was a floating
	point number with a very large exponent.  (12/28)

sys/fmtio/strtbl.x
	Array argument declaration buf[nstr] changed to buf[ARB] to avoid
	VMS/Fortran runtime error if nstr==0.  (12/28)

sys/gio/glabax/glbfind.x
	Two bug fixes: invalid tick calculation causing floating point
	overflow; inability to turn tick drawing off with GSET option.  (12/28)

[[[[ I am finding a lot of revs and bug fixes in unix/iraf that have not yet
[[[[ made it into vms/iraf; we need to update vms/iraf as soon as the merge
[[[[ is completed and mkpkg, etc. is working in vms/iraf....

sys/gio/nsppkern/pixels.f
	Arguments to ISHIFT were not both of the same type.  (12/28)

sys/imio/imsetr.x
	Min/max argument type mismatch.  (12/28)

sys/imio/imwrite.x
	When extending the pixel file at EOF, would write one too many chars,
	causing pixels to be written and then read back at different file
	offsets (never happened on UNIX/IRAF because pixel files are always
	preallocated).  (12/28)

sys/ki/kbzstt.x
	Now returns the min of the max network transfer size and the max
	device transfer size, rather than the value of the device parameter,
	which can be larger than the network interface can handle.  (12/28)

sys/ki/kopdpr.x
	Added support for queued bkg jobs.  (12/28)

sys/libc/cfmapfn.c
	Argument maxch passed by value rather than reference.  (12/28)

sys/libc/cprdet.c
	Added support for queued bkg jobs.  (12/28)
	
sys/libc/ctype.c	[TEMPORARY]
	Added #ifdef vms globalvalue junk for the VMS linker.  (12/28)

sys/libc/cxwhen.c
	Deleted the code for c_xgmes, since it has been moved out into a
	separate file.  (12/28)

sys/libc/isatty.c +
	New operator added to LIBC.  Used by the CL to test if the process
	stdin is a terminal.  (12/28)

sys/libc/cfnames.c +
	New operator added to LIBC.  Used to parse filenames.  (12/28)

sys/fio/vfntrans.x
	The filename extension map common was still not portable, since the
	map string itself was being initialized in the common with a data
	statement.  Also, the compiler would give a harmless but annoying
	warning message about mismatched lengths for the common.  The code
	was modified to fix both of these problems.  (12/29)

sys/ki/kbzstt.x
	Local variable status never used.  (12/29)

sys/osb/f77pak.f
	The exit test in the last loop (for blank fill) would do a "next"
	rather than a "break", causing the loop to needlessly run on until
	the top index was reached.  (12/29)

sys/osb/xor.x
	The expression for the exclusive-or in terms of AND and OR was
	incorrect.  (12/29)

sys/vops/aiftrx.x
	Replaced the amovr(a,b,npix) by amovx(a,b,npix/2+1), since the input
	vector is the complex transform.  (12/29)

sys/vops/acnv.x
sys/vops/acnvr.x
	In the npix=5 case, K4 was being assigned into instead of K5.  (12/29)

hlib/libc/knames.h
lib/knet.h
sys/ki/irafks.x
sys/ki/kfiogd.x
sys/ki/mkpkg
sys/ki/ki.h
	Added network support for the ZFIOGD driver.  (12/29)

os/alloc.c +		[UNIX]
os/zalloc.c +		[UNIX]
hlib/alloc.e +		[UNIX]
hlib/libc/alloc.h +
hlib/libc/iraf.h
hlib/libc/knames.h
hlib/knet.h
ki/kdvall.x
ki/kdvown.x
ki/ki.h
ki/irafks.x
dev/devices		KERNEL CHANGES
-----------------------------------------------------------------------------
	Added two new routines ZDVALL and ZDVOWN to the kernel.  These are
	used to allocate and deallocate (and mount) devices, and to query
	device allocation.  Allocation over the network is implemented but
	will not currently work for a VMS host due to the process structure
	(it will work for UNIX, as usual).  

		zdvall (device, status)
		zdvown (device, owner, maxch, status)

	A device table DEV$DEVICES was also added to runtime parameterize the
	allocatable devices.  This table is read by the VOS, passing only
	host system device names to the kernel.  The table will also be used
	to get the host device name to open a magtape.

sys/zfiomt.c
	The logical drive argument to ZZOPMT and ZZRWMT is now the physical
	drive name as the VOS does the mapping using the dev$devices table.

hlib/libc/kernel.h
	Deleted magtape device table.  With this change the last of the
	compile time device tables are gone from IRAF.  (12/31)
-----------------------------------------------------------------------------

dev/termcap
	Added an entry for the Visual 500 terminal (contributed by Skip
	    Schaller, Steward Obs.) (12/31)

sys/fio/getlline.x
	Added a new utility procedure to the FIO package.  GETLONGLINE is
	like GETLINE except that it knows about comments, blank lines, help
	sections, and backslash newline continuation.  Comments, blank
	lines, and help text are ignored and long lines are joined, returning
	long lines of a user specified maximum length to the caller.  (12/31)

lib/xalloc.h
sys/etc/xalloc.x
sys/etc/xgdevlist.x
	Added a device allocation package to the VOS.

		  xallocate - allocate device
	        xdeallocate - deallocate device
		  xdevowner - determine if device is allocated
		  xgdevlist - get device list from dev$devices
  
		     status =   xallocate (device)
		     status = xdeallocate (device, rewind)
		     status =   xdevowner (device, owner, maxch)
		     status =   xgdevlist (device, devlist, maxch)

	status:
		OK		operation succeeded
		ERR		cannot allocate device
		error		i/o failure, e.g., dev$devices file not found

		DV_DEVFREE	device is free and can be allocated
		DV_DEVALLOC	device is already allocated
		DV_DEVINUSE	device is in use by someone else
		DV_DEVNOTFOUND	device not in device table

	If the device is a magtape, xallocate will call mt_allocate to create
	the "lock" file (not actually used as a lock anymore, just to record
	the position), and xdeallocate will call mt_deallocate.    (12/31)

sys/mtio/*
unix/os/zfiomt.c		[UNIX]
	The following changes were made to MTIO.

	    [1] The "lock" file is still used to keep track of the tape
		position after task termination, but it is no longer used
		to lock the device (the XALLOC code performs that function).
		Any existing lock file will be overwritten at allocate time.
		The lock file can be deleted while the drive is in use without
		harm; MTIO will merely rewind the tape to get to a known
		position.

	    [2] The lock file is now written into UPARM rather than DEV, and
		world write permission has been removed from DEV forever.
		With this change, the only place world write permission is
		still required is for the gripesfile.

	    [3] The lock file is no longer read and written every time the
		drive is opened and closed.  Instead, MTIO caches the position
		between opens and only updates the lock file at task
		termination time (or if error recovery takes place).  Hence,
		a DEVSTATUS after reading a tape will work as before, but
		accessing multiple files in a single call to a task should
		be speeded up considerably.  (12/31)

sys/etc/onerror.x
sys/etc/main.x
	Procedures posted with ONERROR during task execution are now called
	at task termination, whether the task terminates normally or abnormally.
	The task termination code will be OK if the task terminates normally,
	else it is the error code passed to ERROR, FATAL, SYSERR, etc.  This
	feature is used by MTIO to update the lock file at task termination
	time.  It appears that there was also a bug in the old implementation,
	i.e., the posted error handlers were not getting cleared following
	normal task termination. (12/31)

sys/etc/error.x
	The system will now quietly do a max(errcode,1) to guarantee that an
	error exit will not be confused with normal task termination, in case
	the lazy programmer is calling ERROR with errcode=0.  (12/31)

pkg/dataio/fits/read_fits.x
	When just reading the fits headers (make_image=no) will now immap
	DEV$NULL rather than a real disk file, to eliminate the overhead
	associated with writing and then deleting a scratch image header.
	(1/2)

unix/os/zfiomt.c		[UNIX]
	The unix MTIO driver will now backspace over the first tape mark when
	writing at EOT, to save one interrecord gap between files.  The skip
	record forward primitive was changed to do a READ rather than an IOCTL
	since all drivers do not return EOF when an IOCTL skip record passes
	a tape mark.  (1/2)

(new MTIO tested and debugged, 1/2)

sys/fio/diropen.x
unix/os/zopdir.c		[UNIX]
	Changed the VOS to skip "." prefixed files (as well as the normal
	hidden files with reserved extensions) if a directory is opened with
	skipping of hidden files enabled.  Change ZOPDIR to NOT filter out
	.xxx files.  This makes it possible for the VOS to access .xxx files,
	and eliminates a difference between the UNIX and VMS versions of the
	system.  (1/3)

hlib/libc/xnames.h
sys/libc/callocate.c
	Added C language bindings for the VOS device allocation facilities.
	(1/3)

pkg/cl/builtin.c
	Revised the device allocation stuff to use the new VOS facilities.
	(1/3)

hlib/allocate.cl
hlib/deallocate.cl
	Modified these scripts to call the hidden CL tasks _allocate and
	_deallocate, which do the real work.  The new scripts are actually
	machine independent and do not really need to be scripts, but have
	been kept as scripts to avoid changing the user interface and to
	provide scope for adding machine dependence if necessary.  (1/3)

unix/os/zfiotx.c		[UNIX]
	I had thought that the unix fseek returned the new file position in
	the case of a successful seek (like lseek), but evidently it returns
	zero instead.  This would cause the file position to be lost if there
	were more than one seek on a text file.  This explains part of the
	problems we have been having with PROCEDURE scripts in the UNIX/IRAF
	CL.  (1/3)

pkg/cl/grammar.l
	In the process of fixing the above bug, I thought I had found a problem
	with comments in the command mode lexical analyzer.  I changed the
	comment eater to fix what turned out not to be a problem, but left the
	revision in because it should process comments more efficiently than
	the previous code (which used .* to match the comment).  (1/3)

sys/mtio/mtstatus.x +
etc/xalloc.x
	Added a new procedure XDEVSTATUS to ETC to print the status for a
	device; if the device is an allocated magtape, this calls MTSTATUS
	to print the contents of the lockfile.  (1/3)

pkg/cl/builtin.c
hlib/devstatus.cl
	Added a new hidden task _devstatus to the CL; modified the DEVSTATUS
	script in the SYSTEM package to call this.  (1/3)

(MTIO revision completed and tested)
--------------
Begin merge VMS/IRAF CL revisions into UNIX CL  (1/4)

pkg/cl/bkg.c
	Installed vms version; contains modifications for bkg job queues.

pkg/cl/builtin.c
	Minor revs from vms version merged in (documented in vms notesfile),
	plus of course the all-new device allocation stuff from unix/iraf.

pkg/cl/cmain.c
	Deleted this obsolete junk file.

pkg/cl/decl.c
pkg/cl/eparam.c
pkg/cl/exec.c
pkg/cl/grammar.y
pkg/cl/lexicon.c
pkg/cl/modes.c
pkg/cl/prcache.c
	Replaced by vms versions.

pkg/cl/grammar.l
	Merged in &queue modifications.

pkg/cl/lex.sed
	Added sed command to increase YYLMAX allocation from 200 to 2048.

pkg/cl/main.c
	Merged minor revs in both versions.

(end merge) (1/4)
----------------

pkg/cl/eparam.c
	Replaced a STRCHR by INDEX; would not compile on UNIX as there is no
	STRCHR function.  (1/4)

pkg/cl/modes.c
	There was an unmatched { and the file would not compile; went and
	looked at the vms version and the same bug was found there.  Probably
	the VMS Mklib failed to recompile the file, so I never found the
	bug.  (1/4)

pkg/cl/builtin.c
	Deleted unused variable buf in clsleep().  (1/4)

pkg/cl/system.c
	Deleted unused variable stat.  (1/4)

pkg/cl/edcap.c
	Function what_cmd would return an undefined function value if the
	match loop terminated at nchars.  Added a return(0) at end of
	function.  (1/4)

pkg/cl/eparam.c
	eparam.c(139): warning: op unused in function ep_setoptions
	eparam.c(590): warning: out unused in function e_check_vals
	eparam.c(744): warning: argument maxch unused in function e_getfield
	eparam.c(1012): warning: op unused in function eh_setoptions  (1/4)

pkg/cl/exec.c
	Variable ip unused in execnewtask().  (1/4)

pkg/system/_magtape.x -
pkg/system/x_system.x
pkg/system/system.cl
	Deleted tasks mtallocate and mtdeallocate, and file _magtape.x  (1/4)

pkg/system/directory.x
	Now calls strtbl only if nfiles > 0.  (1/4)

pkg/system/system.hd
	Various changes to bring it up to date.  Added a couple of new manual
	pages to system/doc.  (1/4)

pkg/language/doc
	Updated from vms/iraf.  We plan to edit these at some point to more
	closely approximate our standard manual page format.  (1/4)

host/boot/bootlib/tape.c
	Now knows about DEV$DEVICES.  Accepts either logical drive names
	such as "mta" or "mta.1600", or host names such as "mt.MUA0:" or
	"mt.mua0.1600" (e.g., if dev$devices is not up yet).  (1/4)

sys/gio/cursor/grcpage.x
sys/gio/cursor/grcwaitp.x +
	Moved grc_waitpage out of grcpage.x into a separate file to fix a
	circular library reference preventing topological sorting of the
	library LIBCUR.  Circular library references such as this have
	not been a problem on UNIX or VMS since the libraries are randomly
	accessed at link time, but some systems (e.g., AOS) access libraries
	sequentially, and in any event linking from a topologically sorted
	library is faster, and circular references are probably dangerous.
	(1/4)

(sys/gio/cursor/prpsio.x)
pkg/cl/main.c
hlib/libc/xnames.h
sys/gio/cursor/gtr.com
sys/gio/cursor/psioinit.x +
sys/gio/cursor/psioxfer.x +
sys/gio/cursor/psioisxt.x +
	PRPSIO is the traffic controller for pseudofile i/o.  There is a
	circular library referencing problem with this routine, wherein
	prpsio might call gtrctrl which might call gtropenws which references
	the entry point address of prpsio in a call to LOCPR if the GKI
	kernel is a subkernel (gtropenws does not actually call prpsio,
	however, so the reference is not reentrant).

	This can be fixed by computing the EPA of prpsio at a higher level
	and letting the lower level code use the value as data.  This will
	fix the topological ordering problem, but the fact that the problem
	occurred at all makes one wonder if reentrancy is really ruled out.
	Investigation of GKI reveals that it is indeed possible for PRPSIO
	to call itself indirectly by calling GIOTR which calls GKI (but only
	if certain graphics instructions are encountered at run time when
	a subprocess is talking to a subkernel).

	This problem can be resolved by some restructuring of PRPSIO, and
	will probably have to be resolved before we have fully functional
	i/o to graphics subkernels.  The problem is however too complex
	and too risky of solution to be dealt with at the present time,
	and aside from the library ordering problem we have not had any
	problems with the present code.

	The temporary solution is for the CL to put the EPA of the PRPSIO
	procedure in the GTR common at startup time.  This gets around the
	circular library reference problem for the moment, but does nothing
	about the reentrancy problems.  The two PRPSIO subprocedures were
	also moved out into separate files.  (1/4)

sys/gio/gadraw.x
sys/gio/wcstogki.x +
sys/gio/gplflush.x +
	Moved the gpl_wcstogki and gpl_flush procedures out of gadraw.x into
	separate files to fix a library ordering problem.  Deleted the
	gpl_gviewport procedure at the tail of the gadraw.x file, since it
	is an internal procedure which is apparently no longer used anywhere.
	(1/4)

sys/gio/ncarutil/concom.f -
sys/gio/ncarutil/conterp.f -
sys/gio/ncarutil/conlib/ +
	Unpacked the two NCAR files concom.f and conterp.f in the subdirectory
	conlib, one subroutine per file, to permit topological ordering of the
	libncar library.  (1/4)

sys/fio/fstati.x
sys/fio/ffilsz.x
	Removed the syserr() calls from FSTATI (which calls FFILSZ) due to
	library ordering problems, and probably reentrant code problems too.
	FSTATI is too low level to be calling higher level code, e.g.,
	it is called by ENVGETS, by the ZFIOCL driver, and other low level
	codes.  (1/4)

sys/etc/environ.x
sys/etc/envinit.x +
sys/etc/envgets.x +
	Moved the ENVINIT and ENVGETS procedures out into a separate files
	since they call high level functions.  (1/4)

sys/fio/xerputc.x
	Changed this routine to use a local array to buffer the output line,
	rather than the FIO pathname buffer, just to make sure no conflict
	ever occurs.  (1/4)

sys/etc/erract.x
	Replaced the call to PUTLINE to output the warning message to STDERR
	by a call to ZAWRPS, for obvious reasons.  (1/4)

sys/memio/malloc.x
sys/memio/realloc.x
	Replaced all ERROR, SYSERR, FATAL, etc. calls by calls to SYS_PANIC.
	Dynamic memory allocation is fundamental, and is used even in the KI.
	The error handling code calls the kernel zroutines to talk to files
	and the CL, the zroutines use the KI, which calls MEMIO, which used
	to call the error handling code causing circular library references
	and possible error recursion.  (1/4)

sys/ki/kigchan.x
	FATAL replaced by call to sys_panic.  (1/4)

sys/ki/ktzopn.x
	Had an IFERR, which calls XERPOP, which calls ....  (1/4)

---------------------
Begin merge of AOS revs.

pkg/cl/bkg.c
	Added declaration: extern long c_clktime();  (1/5)

pkg/cl/task.h
pkg/cl/mem.h
	The macros NEXT_TASK and DEREFERENCE coerce a pointer to unsigned
	and add a byte offset.  This does not work on byte addressed machines
	since we are then adding a byte offset to a word pointer.  Replaced
	the "(unsigned)ptr" references by "(unsigned)(char *)ptr".  (1/5)

pkg/system/help/nomore.x
pkg/system/delete.x
pkg/system/match.x
pkg/system/page.x
sys/fio/fclobber.x			[IMPORTANT PORTABILTY NOTE]
sys/fio/vfnmap.x
sys/fmtio/evexpr.y
sys/fmtio/evexpr.x
sys/gio/stdgraph/stgrcur.x
sys/tty/ttyopen.x
	It turns out that the Fortran standard does not permit expressions
	of the form BOOL.EQ.BOOL, although most real compilers are not so
	stupid.  Fortran requires that such expressions be written as
	BOOL.EQV.BOOL, i.e., the .EQV. and .NEQV. operators must be used
	to compare booleans for equality.  The current preprocessor is not
	capabable of fixing such expressions, hence all occurrences of such
	equivalences must be fixed in the code; fortunately the construct
	is rare.  (1/5)

host/boot/spp/rpp/rpprat/gtok.r
host/boot/spp/rpp/rppfor/gtok.f
	The B = 10 * B + C - 48 would cause fixed point overflow for large
	numbers.  Radix conversion is not needed in RPP (since it is done
	in XPP) hence the code was changed to simply accumulate the numeric
	token.  The Fortran translation file was updated.  (1/5)

sys/fmtio/dtoc3.x
	For the AOS compiler, had to convert

	    v = v + 0.5 * 10. ** -no_digits
	to
	    v = v + 0.5 * 10. ** (-no_digits)

	This is a bug in the AOS compiler, but we loose nothing by changing
	the SPP code to workaround it.  (1/5)

sys/os/*.c
	Changed all occurrences such as "return (*status = XERR);" to the 2
	statement form which does not return a function value, since the Z
	routines are Fortran callable subroutines not functions (this caused
	a problem with the AOS Fortran optimizer, i.e., not saving a register
	or something - AOS uses part of the UNIX kernel as is).  (1/5)

------------------
End of AOS bug merge.

------------------
(begin SUN merge)

host/boot/spp/xpp/decl.c
	Modified to break output declaration lines when they exceed 80 columns.
	Formerly lines were broken arbitrarily after 8 arguments; this would
	fail, of course, when the argument names or the procedure name were
	large.  (1/5)

[IMPORTANT PORTABILITY NOTE]
	The SUN version of 4.2BSD buffers the C stderr output when redirected
	just like stdout.  Output to stderr is not automatically flushed when
	a newline is seen.  If the output from a program which writes to both
	stdout and stderr is redirected, output will come out mixed up unless
	fflush(stderr) is called after every write to stderr.  4.3BSD UNIX
	also buffers stderr for efficiency reasons, hence this change in the
	semantics of C stdio may be permanent.

	(all of the new bootstrap utilities call fflush, but some of the old
	(ones probably don't, yet).

host/boot/spp/*.c
	Added fflush(stderr) after all writes to stderr in C files in these
	directories.  (1/5)

-------------------
End of SUN revisions (so far).

host/hlib/iraf.h
host/hlib/libc/iraf.h
host/hlib/libc/libc.h
host/hlib/libc/knames.h
host/hlib/libc/names.h
host/hlib/libc/knames.no_
host/hlib/libc/names.no_
	Added a new define F77_NO_ to <iraf.h>.  This is defined to tell LIBC
	that Fortran external names do not use the trailing underscore.  If so,
	<iraf.h> loads the .no_ files instead of the .h files.  This does not
	solve the problem of machine dependent external names, but should help
	quite a bit since it works for our major systems.  I also change the
	names of all the VOS procedures with names likely to collide with host
	or C library names if the underscores are removed.  The names are also
	redefined in the SPP iraf.h, and the redefined names are used whether
	they are needed or not (i.e., they are used on UNIX, too).  This should
	simplify debugging as one need only learn one set of funny names.  (1/5)

sys/libc/fseek.c
	Changed the LIBC unix emulation FSEEK to return OK or ERR to conform
	to UNIX.  It formerly was a long function returning the new position,
	which is not the way UNIX does it (see ZFIOTX bug above).  No existing
	C code was affected by this semantic change.  (1/6)

pkg/cl/builtin.c
	GFLUSH was flushing only STDPLOT; modified to flush all three std
	graphics streams.  (1/6)

sys/gio/gopen.x
	Changed argument one of gexfls_set from FD to OUTFD.  (1/6)

sys/gio/gclose.x
	The test for a pseudofile output stream was based on READ permission
	on the output file.  That seems like a poor criterion, so I changed it
	to a simple numerical test (regular file if fd > STDPLOT).  Also, if
	GOPEN opens the stdvdm file then GCLOSE had better close it, so I
	added a test for that case.  Note that GCLOSE does not normally close
	the output file, since the user would normally open it before calling
	GOPEN.  (1/6)

sys/fio/fdebug.x
	Added pargstr for APPEND mode.  (1/6)

sys/tty/ttyopen.x
	Formerly used a construct  "while (IS_WHITE (getc (fd, ch)))"  which
	is illegal because the IS_WHITE macro makes multiple calls to the getc
	function.  (1/6)

sys/etc/lpopen.x
	Now recognizes the special device "text", which has a termcap entry
	and is used to get ascii LPRINT output on the standard output.  (1/7)

sys/tty/tty.h
sys/tty/ttyputl.x
	Optimized TTYPUTLINE for the common case where the output line of text
	contains no special control characters.  This routine was probably the
	main contributor to the inefficiency of LPRINT.  (1/7)

dev/termcap
	Changed the number of lines per page from 66 to 64 for the Versatec
	entries, as otherwise formfeed sometimes causes entire blank pages to
	be output.  Also, overstrike does not appear to work for the Versatec,
	so the OS capability was removed from the termcap entries for these
	devices.  This will cause standout mode text to be printed in upper
	case.  (1/7)

pkg/system/lprint.x
	Lprint moves pages of text one tab to the right if the output device
	is a printer with a wide page.  This would cause problems if the
	first char on a line was a formfeed, since formfeed breaks a line.
	The remainder of the line following the formfeed would come out one
	tab to the left; this was causing manual page headers to be misaligned
	when printed on the Versatec.  Added a test for a formfeed at the
	beginning of a line to fix the problem (not a very general solution).
	(1/7)

sys/etc/main.x
sys/etc/onerror.x
sys/etc/onexit.x
	Added runtime initialization of the commons of the ONEXIT and ONERROR
	procedures.  Formerly we were depending upon the linker to initialize
	the commons to zeros; this is the case on most systems, but cannot be
	assumed in portable code.  (1/10)

hlib/libc/error.h
	Added defines for the SYS_XXXX error codes, as in <error.h>.  (1/10)

unix/os/zoscmd.c
host/boot/mkpkg/*
	Modified ZOSCMD to return SYS_XINT in the event of an interrupt, and
	to guarantee that it is not returned if an interrupt does not occur.
	Changed the value of the INTERRUPT status code in MKPKG to SYS_XINT.
	The ordinary value in use at first was getting returned on occasion
	when an interrupt did not occur, causing MKPKG to terminate when it
	should not.  (1/10)

host/boot/spp/xpp/xppcode.c
	Modified to output the SAVE statement before any DATA statements.
	We discovered this violation of the F77 standard in a recent experiment
	trying to compile IRAF code on a beta release of 4.3BSD UNIX, which
	is evidently more strict about the F77 standard than 4.2BSD.  (1/11)

sys/imio/imopsf.x
	Moved the call to function FDEVBLK in the argument list of IMIOFF
	out into a separate statement and added an ERRCHK for it, so that
	IMIOFF is not called if an error occurs in FDEVBLK, causing it to
	return a zero block size.  (1/11)

sys/imio/imioff.x
	Replaced the BLKSIZE variable in the call to the MOD function in
	IMALIGN by max(1,blksize), to avoid integer divide by zero if the
	block size is zero.  (1/11)

host/as/zsvjmp.s		[UNIX]	[IMPORTANT KERNEL NOTE]
	It turns out that UNIX only aligns commons on longword boundaries
	by default (as does VMS).  This can lead to pointer misalignment
	problems when accessing data of type DOUBLE or COMPLEX in a buffer
	with page alignment, e.g., a FIO or IMIO data buffer.  In other
	words, forcing page alignment on a dynamically allocated buffer
	will result in the buffer not being aligned for SPP pointer references
	of type DOUBLE and COMPLEX, if the MEM common is not also page aligned.
	This has turned out to be a problem on both UNIX and VMS, although
	in both cases there has been a simple solution.

	In the case of UNIX I have arranged for the MEM common to be located
	at location zero at link time.  This has the following results:

	    [1] Since MEM is at virtual address zero, it is aligned for all
		machine datatypes as well as page aligned.

	    [2] Debugging is easier since MEM is not at some arbitrary offset.
		SPP pointers become almost equivalent to real pointers.  To
		convert an SPP pointer into a virtual address, subtract one
		and multiply by the number of bytes (2, 4, or 8) per element.
		For example, if X is a pointer to INT, the ADB address of
		the integer pointed to by X is given by

			byte_address = (x - 1) * 4

	    [3] Having MEM located at zero has the significant benefit that
		uninitialized pointer references are likely to cause a memory
		fault, rather than causing some arbitrary region of memory to
		be overwritten.  In particular, dereferencing a NULL pointer
		will cause a reference to location -2, -4, or -8, causing a
		memory violation.  Also, address 0 is in the read protected
		text segment, so small pointer values should also cause a
		memory fault when writing to the referenced location.

	The assembler directives required to locate MEM at location zero have
	been placed in ZSVJMP.S for Berkeley UNIX, for the simple reason that
	it is the only assembler module in the kernel, and it is linked into
	every process.  This is obviously a very machine dependent solution to
	the problem.  (1/11)

dev/vi.ed
	I'm not sure how, but ^P and ^N were being used for MOVE_START and
	MOVE_END, rather than the more logical PREV_PAGE and NEXT_PAGE.
	The latter commands were not even in the menu.  Added NEXT_PAGE and
	PREV_PAGE as ^N and ^P, and changed the escape sequences for the
	MOVE commands to something more obscure (in the process of tracing
	this down I found an obscure bug in the new ttyputline; EPARAM is
	great for finding bugs, as the i/o is so complicated).  (1/11)

pkg/cl/grammar.y
pkg/cl/gram.c
	In grammar.y, changed posit and inarglist variables from static to
	global.  In gram.c, modified crackident() to treat keywords as ordinary
	identifiers in argument lists and expressions.  Formerly the CL would
	abort on a syntax error upon entry of commands such as

		help xxx.hlp file+
	or
		wcardimage alpha,beta for=i5

	The point is that it is easy to accidentlayy enter a keyword name when
	abbreviating a parameter name or entering an unquoted string; when this
	happens the user has no idea what they did wrong.  A syntax error is
	easily avoided by making crackident() context sensitive.  I could also
	have turned keywords off in declaration lists, but did not do so to
	minimize future merge problems with the ST version of the CL.  (1/12)

sys/gio/stdgraph/stginit.x
	The device name string was being saved by stg_init(), but the pointer
	to the string was not being set in SG_DEVNAME(g_sg).  The bug was
	harmless but would cause the stdgraph kernel to reinitialize itself
	from the graphcap on every call to open workstation.  (1/12)

	This is the first uninitialized pointer bug caught by the loc(mem)=0 
	revision noted above!

sys/gio/cursor/rcursor.x
	Another uninitialized pointer problem.  In rcursor, grc_open() was
	being called before the descriptor pointed to by RC was allocated
	and initialized by grc_init().  (1/12)

pkg/cl/exec.c
	Replaced call to prparamval() in printcall() by lower level procedures
	which do not call cl_error().  Printcall() is called by killtask()
	during CL error recovery, and error recursion followed by panic
	shutdown will result if cl_error is called during killtask.  (1/12)

pkg/cl/builtin.c
	Fixed a bug in clflprcache() so that everything is not flushed if
	the named task is not found in the cache.  (1/12)

sys/fmtio/lexdata.inc
	This was a fix to lexnum for a bug reported by ST.  The fix made at
	ST was not correct.  The entry for cc=ED in state 10=RFR was QRX
	but should have been RFX.  The routine is almost impossible to figure
	out by just studying the code; you need to look at the state diagram
	in fmtio/doc/lexnum.hlp.  A more serious problem is that the routine
	is not very efficient.  While in the neighborhood I made a couple
	of simple optimizations which should speed it up significantly,
	although it is still not very efficient.  A simple brute force,
	special case recognizer would probably have been fastest, but the
	current code is reasonably compact and correctly handles a lot of
	special cases.  (1/12)

pkg/system/help/help.hlp
	Fixed a typo.  (1/12)

pkg/system/help.par
pkg/system/help/help.h
pkg/system/help/help.hlp
pkg/system/help/modtemp.x
pkg/system/help/t_help.x
	Modified the default action of HELP to print help only for the first
	module matched by the template, rather than all modules matching the
	template.  Since the current package is searched first, the first
	module matched is likely to be what the user expects.  If user wants
	help for a task for which there is no help file in the current
	package searching will continue elsewhere, but this is not considered
	a bug since there should be help for every task in a package.
	A package does not have to be loaded to get help on a module therein.
	A new boolean parameter ALL was added to the help parameters with
	default value NO.  If the value is set to YES, HELP will behave as
	before, i.e., it will print help for all modules in the help database
	matching the given template.  The value of ALL automatically defaults
	to YES if a pattern matching metacharacter is present in the module
	template entered by the user.  (1/12)

pkg/local/mkpkg
pkg/local/local.cl
pkg/local/x_local.x
pkg/local/t_mpc.x +
pkg/local/imcntr.par +
pkg/local/radplt.par +
	Installed the interim MPC-like image centering and radial profile
	plotting tasks (contr. by G. Jacoby) in the LOCAL package.  (1/12)

pkg/local/peritek/*
	Cleaned up the package.  Fixed it to get OS channel codes correctly
	whether or not the KI is in use.  Move the UNIX peritek IOCTL defs
	file into the directory so that it will compile on all hosts.  Set
	up LOCAL mkpkg so that the Peritek stuff will not be compiled at all
	except at NOAO.  (1/12)

pkg/vops/*.x
pkg/vops/*.gx
	Replaced all "a[npix]" type variable array dimension declarations
	by "a[ARB]".  The former declaration would cause a runtime abort
	on VMS if the procedure were called with NPIX=0.  (1/13)

lib/gio.h
sys/gio/gopen.x
sys/gio/gclose.x
	GCLOSE would close the output file if GOPEN opened device "stdvdm",
	but did not open the output file (i.e., if the user opened the output
	file before calling GOPEN).  Added a new flag word GP_GFLAGS to the
	GIO descriptor and allocated one of the bits for a flag to tell
	GCLOSE whether or not to close the output file.  This removes all
	ambiguity and should rule out any more bugs.  (1/13)

unix/os/zfiobf.c	[IMPORTANT KERNEL NOTE]
sys/fio/fgetfd.x
	When opening a binary file in APPEND mode, FIO has to read the partial
	block at the end of the file in order to append data to it.  Read
	permission is therefore required on a binary file opened in APPEND mode.
	The read perm bit was restored in FGETFD, and ZOPNBF was modified to
	open the binary file with read-write permission.  Note that this
	requires that ZOPNBF create the file if it does not already exist,
	since the UNIX open() will abort when trying to open an nonexistent
	binary file for read-write access.  (1/14)

	NOTE -- Appending to an odd size binary file did not work at all prior
		to this bug fix (except back when FIO was first written).

pkg/cl/exec.c
	The following command would cause a syntax error:

		cl> printf ("!cat junk") | cl

	The lexmodes=yes lexical analyzer was not recognizing beginning of
	line, causing the ! operator to be interpreted as YOP_NOT instead
	of YOP_OSESC.  Added a lexinit() when a new cl() is pushed in
	execnewtask().  (1/14)

host/os/zoscmd.c		[UNIX]
	Fixed a bug that was calling bkg MKPKG jobs to see interrupts.  The
	special zoscmd interrupt handler was being posted even when interrupts
	were already disabled in the parent process.  (1/15)

sys/vops/amap.gx
	Was using integer arithmetic to calculate the mapping coefficients.
	(1/15)

sys/gio/glabax/glbsview.x
	Increased the amount of space at the left of the plot to avoid
	truncation of numbers printed in scientific notation (unfortunately,
	the plot will also be smaller as a result).  There was also an error
	in the computation, the presence of the x label and ticks was being
	used to compute the xwidth, whereas it is the y label and ticks which
	affects the x width of the plot.  (1/15)

pkg/system/beep.x
pkg/system/clear.x
pkg/system/sleep.x
pkg/system/time.x
pkg/system/revisions.cl
pkg/system/revisions.par
pkg/system/doc/...
	Deleted the above files and their manual pages (these tasks were moved
	to the language pkg some time ago).  The REVISIONS task will come back
	later in a more useful and efficient form.  (1/15)

sys/imio/imunmap.x
sys/imio/imdelete.x
	IMIO has been modified to set file protection on image header files
	at imunmap time on a new image or new copy image.  This will prevent
	creation of zombie pixel files by accidental use of DELETE rather than
	IMDELETE to delete images.  Unfortunately, this also prevents use of
	file protection to protect an image from deletion by IMDELETE, but
	at least at NOAO, few if any users ever explicitly protect images.
	(1/15)

host/os/zfrnam.c			[UNIX]
	In testing out the rename operation on the new protected image header
	files, I discovered that the original protect link is not being
	deleted because ZFPROT cannot find the named file, which has been
	renamed at the host level by the time ZFPROT is called to unprotect
	the original file.  Modified ZFRNAM to remove protection from the
	original file before renaming it, and to restore protection if the
	rename fails.  (1/15)

host/boot/rtar.c
	Added explicit initialization statements for all the switches, and
	made the default action to strip trailing whitespace and blank lines
	at the end of a text file (necessary when unpacking a tar archive
	written on VMS).  Switch -n defeats stripping.  Also increased size
	of pad buffer from 1024 to 8196, for very large text files.  (1/16)

host/os/zxwhen.c			[UNIX]
	Added a new debugging tool to the exception handler.  If the external
	variable debug_sig is set nonzero with the debugger before running
	a process, then the action SIG_DFL will be set for all UNIX signals.
	This will cause the process to core dump and die when the first
	signal occurs.  One can then go in after the fact with the debugger
	and figure out what the process was doing when the exception occurred.
	This is very useful when the exception only occurs when the process
	is being run from the CL, in which case ADB cannot be used during
	process execution.

	Example:
		cl> adb -w x_pkg.e
		debug_sig?w1
		$q
		cl> (enter command; process runs and core dumps)
		cl> adb x_pkg.e core
		$c
		    (get stack trace showing where exception occurred)

	Note: adb -w works only if the process is not currently executing.
	(1/16)

host/boot/spp/xpp/xppcode.c
sys/tty/ttyopen.x
	The above mentioned diagnostic, in concert with the MEM=0 revision made
	earlier, enabled me to find the following subtle bug in the SPP
	compiler.  In TTYOPEN, the load device entry routine was taking an
	error action due to a bad device name, causing the error handler to
	be entered.  The error handler was doing an MFREE on the tty
	descriptor and then calling  ERRACT(EA_ERROR).  The problem was that
	the ERRACT was not error checked, hence processing would continue.
	The MFREE sets the input pointer to NULL, hence a couple statements
	down we were assigning to a structure pointed to by a null pointer,
	causing a segmentation violation (fun, huh?).

	I spot checked other parts of the VOS and found that RETURN was
	called only occasionally after ERRACT, hence the same type of bug
	could occur in other parts of the system.  The language specifies
	that one is supposed to explicitly ERRCHK the ERRACT subroutine,
	but it is harmless (and safer) to have the system do so automatically,
	so I changed the compiler to automatically ERRCHK all calls to ERRACT.
	This involved modifications to only 2 lines of code in xppcode.c.
	(1/16)

sys/tty/ttygdes.x
sys/tty/ttyodes.x
sys/etc/envindir.x +
	The graphcap search failure leading to the bug mentioned above was
	caused by ttyopen being called for the device "@terminal".  Obviously,
	the higher level code could have resolved the indirection, but for
	reasons of defensive programming I added the capability to ttyodes
	and ttygdes.  The new procedure ENVINDIR was added to ETC to resolve
	any indirection in the name (not value) of an environment variable.
	(1/16)

host/hlib/mkiraf.csh
	Modified to reference hlib$login.cl, rather than lib$login.cl.  (1/16)

sys/osb/mkpkg
	The mkpkg file would pass bytmov.c to the library module list even
	though it had already passed bytmov.s.  (1/17)

sys/osb/bytmov.c
	Was not using AOFF and BOFF; would work only provided the offsets were
	1 (which is usually the case).  (1/17)

general
	The @terminal syntax for specifying the stdgraph device is causing so
	many problems thoughout the system that I think we should just drop it,
	if its that hard to do, its probably not a good idea anyway.  (1/17)


Begin simultaneous port to SUN and VMS!!
(Document here only notes which affect the master system; SUN or VMS specific
(revisions are docmented in their respective notes files).
-----------------------------------------------------------

host/boot/bootlib/_bytmov.c
host/boot/bootlib/osamovb.c
host/boot/bootlib/mkpkg
host/boot/bootlib/mkpkg.csh
	Changed the bootlib procedure os_amovb() to use BYTMOV instead of AMOVC.
	Added a local C version of BYTMOV so that the assembler version can be
	optional.  Added conditionals to mkpkg.csh and mkpkg to use the local
	C version if the assembler version cannot be found.  All assembler
	modules are now optional except ZSVJMP.S.  (1/18)

host/mc6800/README
host/mc6800/ishift.s
host/mc6800/zsvjmp.s
	Documented the host$* changes required for a MC68000 based machine
	(e.g., the SUN workstation).  Put a couple of SUN/UNIX assembler sources
	in the directory so that they can be moved into place during
	installation.  Note that these will not work on an ISI/UNIX due to
	differences in the two assemblers.  (1/18)

host/hlib/mkiraf.csh		[UNIX]
	Extracted the machine dependent pathnames into SET definitions at the
	head of the file, and eliminated all site dependence from the remainder
	of the script.  (1/18)

host/boot/boot/mkpkg.csh
host/boot/boot/bootlib/mkpkg.csh		[UNIX]
	The bootlib mkpkg.csh file has a multiline if then else, hence was
	made into an executable .csh and called directly as a task in the
	boot bootstrap-mkpgk.csh, rather than with sh -x.  (1/18)

host/boot/mkpkg/pkg.c
	In push_context(), should not call ftell() if cx->fp is NULL, i.e.,
	when executing do_include from the main at startup time.  (1/18)

host/boot/bootlib/gmttolst.c -
	Deleted this file, it is not used anywhere and got forgotten about.
	(1/18)

sys/fio/delete.x
sys/fio/falloc.x
sys/fio/frename.x
sys/fio/protect.x
	These routines now recognize and ignore attempts to delete, rename,
	protect, etc. the null file "dev$null".  (1/19)

host/hlib/zzsetenv.def
	When a task is run from the host it initializes its environment from
	the zzsetenv.def file in hlib$; the CL is such a task.  I removed the
	definition of UPARM from the default zzsetenv.def, because it is
	referenced by the CL during startup when looking for cl.par, and the
	uparm definition referenced home$, causing a "env.home: " query during
	process startup.  (1/19)

lib/syserrmsg
	Replaced SYS_FUNPROTECT by a more informative message.  (1/19)

host/hlib/libc.h
	Added a libc style u_ definition for ISATTY.  Without this, the CL
	crashed badly on the SUN because the UNIX stdio code was calling the
	LIBC version of isatty().  (1/19)

sys/ki/kdvall.x
sys/ki/irafks.x
	All references to ZDVALL and KDVALL in this directory were missing the
	second argument.  (1/20)

host/os/zalloc.c
	Was calling ZGTENV to get the path to hlib$.  Changed to get the path
	to host$, and construct the pathname to hlib$, since hlib$ is not
	defined in <iraf.h>.  (1/20)

host/boot/mkpkg/host.c
	The UNIX version of mkpkg used to do nothing when asked to check out
	a file, if a local copy of the file already existed.  This would cause
	problems when the system was moved to a new root directory, as the
	already checked out version, a symbolic link on unix, would contain
	a pathname which was no longer correct.  Changed to delete the local
	copy and always check out a new version.  (1/20)

host/boot/bootlib/tape.c
	In the decoding of the density number, changed "*ip + '0'" to
	"*ip - '0'".  Also, in the call to sprintf, replaced "density" by
	"*density".  (1/20)

pkg/cl/eparam.c
	Paramget() was being used to fetch the parameter value string.  This
	would cause eparam to lock up the CL in terminal raw mode when one
	of the parameters in the parameter file was indirect.  Replaced the
	call to paramget() by a call to the lower level routine sprop().
	(1/21)

host/boot/mkpkg.c/scanlib.c
	In working on the VMS version of MKPKG, I coded a hash table package
	for the scanlib() library module list database.  I had to test this
	anyway, so I merged it into the UNIX version of scanlib, in place of
	the old linear search scheme used formerly.  Performance improved
	significantly for large libraries, as one would expect, e.g., for
	a null mkpkg on vops$:

	      make .files + 1:02	(old make + mklib)
		20.2u 16.6s 0:49	(new mkpkg, linear search)
		 7.9u 16.6s 0:32	(new mkpkg, hash table)

	An entire null sysgen on the VOS (from directory sys$) now takes
	1:26 (86 clock seconds, 13 libraries) on my unix 750, when running
	single user.

	Given the name translation and fdate caches already in use, and now
	the library module hash table, MKPKG probably isn't going to get
	much faster; it is probably 4-8 times faster than the original
	combination of Make plus MKLIB.  The VMS version, which actually
	physically reads each file, is much slower still.  (1/21)

host/boot/xyacc/Makefile		[UNIX]
	Replaced machine dependent pathnames with offsets.  (1/22)

host/boot/mkpkg/host.c
	add_objects() was being called with one too few arguments.  (1/22)

host/hlib/login.cl
	Added a default USER package to the default login.cl.  (1/22)

host/boot/spp/xpp/xppcode.c
host/boot/spp/xpp/xppmain.c
	Changed  include "iraf.h"  to  include <iraf.h>.  (1/22)

host/boot/spp/xpp/xpp.h
host/boot/spp/xpp/xppmain.c
	Parameterized the success code returned by XPP in xpp.h, to avoid
	having xppmain.c be different in unix and vms (success=1 in vms,
	0 in unix).  (1/22)

sys/fmtio/lexnum.x
	Changed stk_ip[] from short to int.  (1/29)

pkg/cl/builtin.c
	Two instances of

		flags != LT_PFILE;

	were changed to

		flags &= ~LT_PFILE;	(1/29)

pkg/system/help/t_help.x
	Added , to the list of pattern metacharacters, so that help will not
	stop after printing only the first help page when given a command
	such as "help taska,taskb".  (1/29)

sys/ki/irafks.x
	Changed all the "call ki_error()" to "call ks_error()"; a typo.  Added
	KI_FIOGD (the graphics binary file device driver) to the case list in
	the main routine.  (1/29)

sys/gio/cursor/gtropenws.x
	Moved the strcpy to set TR_DEVNAME until after the new kernel has been
	successfully opened.  Before, if the open failed (e.g., because no
	x_*.e kernel executable was found), then the second attempt to open the
	kernel would result in a misleading "bad file descriptor" error
	message.  (2/5)

sys/fio/rename.x
	RENAME will copy a file if the zfrnam fails.  Added code to transfer
	file protection to the new file, and remove it from the old file
	before deletion so that the delete will not abort.  (2/7)

pkg/system/help/lroff/lroff.h
pkg/system/help/lroff/lroff.x
pkg/system/help/lroff/do_ls.x -> dols.x
pkg/system/help/lroff/section.x
	(etc.)
	LROFF would learn new values for the .ls indent, .sh nlines to skip,
	etc., which would remain in effect after task termination, causing
	subsequent text to be formatted incorrectly if that text used the
	default values.  The offending static variables were moved into the
	lroff common, and code was added to lroff() to initialize these when
	lroff() is called.  In the process I eliminated the ENTRY constructs
	in section.x.  (2/7)

pkg/system/help/lroff/dols.x
	Fixed a bug that was causing 2 ".ls" directives in a row to output
	two blank lines, rather than one.  (2/7)

pkg/system/help/help.hlp
	This manual page was moved to system$doc/help.hlp.  (2/7)

pkg/system/doc/*.hlp
	Went through all these manual pages, fixing grammatical and other
	errors, clarifying the discussions, improving the examples, checking
	the examples to make sure they work, adding entries for parameters
	not mentioned, correcting the names of misnamed parameters, and so
	on.  This led to the lroff and help bug fixes noted here, most of
	which have been known for some time in any case.  (2/7)

pkg/system/help/t_help.x
	When called to process a file_template (text process an ordinary file,
	rather than a module in the help database), will no longer query for
	the name of the help database and all the parameters associated with
	formatting manual pages.  Formerly the task would abort if there were
	no help database, even when called as a simple text formatter.  (2/7)

sys/etc/main.x
	Fixed a bug that I admit I have known about for years but never got
	motivated to track down until now.  The bug showed up when PAGEing
	help output in a pipe; if one quit early in PAGE, and then ran page
	again in a pipe, the first output seen would sometimes be from the
	whatever was previously being paged.  This was traced to a problem
	with task termination.  The IRAF main was changed to not only flush
	the STDOUT when a task terminates, but to also F_CANCEL any unread
	input on STDIN.  (2/7)

iraf$bin			+
pkg/cl/exec.c			add call to findexe
pkg/cl/main.c			IRAFLIB->IRAFBIN
pkg/cl/builtin.c		add call to findexe in clprcache
unix/hlib/zzsetenv.def		add set bin = iraf$bin/
unix/hlib/clpackage.cl		add set bin = iraf$bin/
unix/hlib/irafuser.csh		lib/cl.e -> bin/cl.e
dev/graphcap			all lib$ -> bin$
dev/hosts			all lib$ -> bin$

	Created a new directory iraf$bin, logical bin$, to hold "installed"
	exececutables.  A new function findexe() was added to exec.c, and
	a reference to it was added to the call to pr_connect().  The CL will
	first look in BIN for the executable when connecting a subprocess,
	and if it is not found there, use the pathname given in the TASK
	statement.  This allows us to install the executables all in a single
	directory without need to change the TASK statement or move the
	parameter files (which still must be in the directory referenced in
	the TASK statement).  Note that there need be no executable file in
	the package directory; a "mkpkg install" or "mkpkg update" will $move
	it to bin$.

	In addition to permitting installed executables, this revision also
	allows multiple tasks, each with its own parameter file, to share the
	same executable.  For example, we currently copy the ONEDSPEC
	executable to the IMRED directories for the IIDS and IRS, since while
	these packages can share the executable they need independent parameter
	files.  By installing the executable all packages can share the same
	executable and still have separate parameter files.

sys/libc/cfnroot.c
sys/libc/cfnextn.c
	Changed the FNLDIR references to calls to FNROOT and FNEXTN.  (2/10)

sys/libc/cfnames.c
	Deleted this file, since c_fnldir, c_fnroot, and c_fnextn are already
	present in the library in separate files.  (2/10)

pkg/cl/main.c
	Changed several debugger eprintf calls to printf calls, to avoid
	use of eprintf until the CL has finished starting up.  (2/10)

lib/cl.par -> pkg/cl/cl.par
	Since the CL is now installed just like any other executable, its
	parameter file is kept in the source directory rather than lib$. (2/10)

all mkpkg files
	The "update:" entries now do a "$move x_pkg.e bin$".  (2/10)

dev/pix
dev/pix.pix
	Installed the "standard test image" and its associated pixel file (for
	testing software and new installations) in dev$.  (2/10)

--------------------
Begin merge of V2.2 VMS/IRAF changes into UNIX/IRAF.
See the VMS notes for additional details.


unix/os/zfnbrk.c
	Can now handle \X in filenames, without interpreting the \ as a
	directory delimiter.  (2/10)

unix/hlib/libc/xnames.h
unix/hlib/libc/xnames.no_
	Added a define for VFNUNMAP.  (2/10)

unix/os/zzinit.c -
unix/os/zzstrt.c +
unix/hlib/libc/knames.h
unix/hlib/libc/knames.no_
	Added the (no-op) procedures ZZSTRT and ZZSTOP to the UNIX kernel.
	These are called by the bootstrap utilities, or any other program
	which does not have a ZMAIN but which uses LIBOS, to perform any
	necessary kernel initialization.  (2/10)

unix/boot/...
	Changed all the _zstartup, _zshutdown references to ZZSTRT, ZZSTOP.
	Added references to a couple programs that did not have them yet.
	(2/10)

unix/boot/bootlib/osfpathname.c
	Added a call to vfn2osfn before the call to ZFPATH.  (2/10)

unix/boot/bootlib/oschdir.c
	Replaced call to os_fpathname by call to ZFSUBD.  (2/10)

unix/hlib/libc/spp.h
	Added #define for OSOK.  (2/10)

unix/hlib/libc/libc.h
	Added #ifdef for NOLIBCNAMES.  (2/10)

sys/mkpkg
	Replaced with VMS version.  (2/10)

unix/boot/mkpkg/*
	Replaced all the "portable" files with the VMS versions, which will
	work on either system.  (2/10)

unix/boot/bootlib/*
	Updated with code from VMS version where appropriate.  (2/10)

vms/boot/bootlib/osgetenv.c
	Added code for bin$.  (2/10)

unix/boot/generic/*
	Numerous changes to enhance the portability of this code.  (2/10)

unix/boot/rmbin/rmbin.c
unix/boot/rtar/rtar.c
unix/boot/rtar/wtar.c
	Replaced by the VMS versions.  (2/10)

unix/boot/spp/xpp/lex.sed +
unix/boot/spp/xpp/Makefile
	Now postprocesses the lexyy.c file to convert certain nonportable
	constructs into a more portable form.  (2/10)

pkg/mkpkg
	Added a conditional purge [...] for VMS, and a $purge bin$ for
	all systems.  (2/10)

pkg/cl/scan.c
pkg/cl/opcodes.c
pkg/cl/main.c
pkg/cl/globals.c
	Merged VMS changes into these files.  Scan: tab as well as blank in
	whitespace; the rest, #ifdef globalgarbage for VMS linker.  (2/10)

unix/hlib/devstatus.cl
	Added a verbose option like that for VMS; isn't worth much, but it
	make the task parameters match on both systems.  (2/10)

sys/etc/syserr.x
	In syserrs, added a check for overflow on the error message string.
	(2/10)

sys/ki/kiconnect.x
	Added a call to ki_gethosts() to read the host name table if it has
	not yet been read.  (2/10)

sys/clio/zfiocl.x
	In zardps, repaired some code that was confused about bytes and chars
	and was overwriting memory as a result.  (2/10)

dev/graphcap
	Merged in changes from VMS version.  (2/10)

sys/tty/*
	Replaced the entire directory by the VMS version, which adds TTYWRITE
	to permit null padding in control strings.  (2/10)

sys/gio/stdgraph/stdgraph.h
sys/gio/stdgraph/stgencode.x
sys/gio/stdgraph/t_showcap.x
	Replaced by the VMS versions.  Adds !! operator for generating
	millisecond delays in graphcap control strings, etc.  (2/10)

pkg/images/tv/*
	Replaced all of the TV code by the VMS version, except the tv/doc
	directory and tv/cv/ids/iis.doc, which had been modified recently
	in the UNIX version.  (2/10)

(did a full reboot of UNIX/IRAF)

unix/boot/mkpkg/pkg.c
vms/boot/mkpkg/pkg.c
	Open_mkpkgfile() would die on a bus error if the mkpkgfile did not
	exist.  Made the call to k_fseek conditional upon the successful
	open of the mkpkgfile.  (2/10)

unix/os/zfsubd.c
	If the input directory is null, will now immediately fetch the current
	directory and fold the subdirectory into that.  (2/10)

sys/gio/calcomp/mkpkg
sys/gio/nsppkern/mkpkg
sys/gio/stdgraph/mkpkg
sys/tty/mkpkg
	Changed to move exe to bin$ instead of lib$.  (2/10)

pkg/cl/builtin.c
pkg/cl/edcap.c
pkg/cl/eparam.h
pkg/cl/globals.h
	Added a new attribute EDITOR_CMD to EDCAP.  This defines the command
	sent to the host to run the editor (not necessarily equivalent to the
	logical name of the editor).  The commands are defined in the dev$*.ed
	files, and are host system dependent but not site dependent.  (2/11)

dev/*.ed
	Added an EDITOR_CMD entry to each file for UNIX.  (2/11)

doc/*
	This directory contained a lot of internal memos, etc., of value only
	for iraf management.  These were moved out of the system, leaving only
	the sources for those documents which might be of general interest.
	(2/12)

local/*			[UNIX]
	Added a new subdirectory LOCAL to to the UNIX version of IRAF.  This
	serves the same purpose that it does in VMS/IRAF.  Sites installing
	IRAF for the first time should create a new account "iraf" for the
	IRAF system, with login directory $iraf/local.  The UNIX distribution
	tape will contain a default .login etc. for the IRAF account (this is
	needed to bootstrap the system, should it be necessary to do so).
	Mail to IRAF will accumulate in the "mbox" in local, the "notes" file
	will be stored in local, and so on.  This directory will not be
	modified when an update of the system is installed.  (2/12)

pkg/cl/builtin.c
	Added a call to findexe() whereever _pname is used.  If this not done,
	tasks like prcache and flprcache may fail to find the process in the
	cache.  (2/12)

unix/hlib/clpackage.cl
unix/hlib/zzsetenv.def
	Since the zzsetenv.def file is always loaded now when the CL starts
	up (because the CL is run from the host), and since a lot of the set
	environment defs in clpackage.cl redefine those in zzsetenv.def,
	I moved the remaining non CL-specific SET defs from clpackage.cl to
	zzsetenv.def.  The file clpackage.cl is now machine and site
	independent and can safely be forgotten about.  Also, since the system
	package is now loaded at login time, I replaced the fscan stuff,
	used to print the message of the day, by a call to PAGE.  (2/12)

iraf$mkpkg
	Added an "update" entry point, to avoid having to run separate mkpkg's
	in sys and pkg to relink all the system executables.  (2/12)

sys/ki/kishownet.x +
pkg/system/netstatus.x
pkg/system/x_system.x,system.cl,etc.
	Added a new function ki_shownet to KI to print the network status.
	Added a new task NETSTATUS to the system package to bring this to
	the user level.  NETSTATUS tells if the network is active, lists
	the nodes on the local net, and lists the aliases for each node. (2/12)

dev/edt.ed
dev/emacs.ed
    	Updated with the VMS versions, which now include the PREV_PAGE and
	NEXT_PAGE entries.  (2/12)

dev/hosts
dev/uhosts
	Brought these up to date; added a bunch of new hosts.  (2/12)

unix/os/zgtenv.c
	An optimization; <iraf.h> is not read unless the named environment
	variable is a known one.  (2/12)

sys/sys.hd
host/os/doc/os.hd
	Replaced the references to sys$ by host$ so that HELP can find the
	manual pages.  (2/13)

pkg/images/tv/cv/ids/idsfont.x
pkg/images/tv/cv/iism70/idsoptn.x -
	There was a name collision of the procedures ids_open and ids_optn.
	The second was a no-op anyhow, so I deleted it, and commented out
	the call in ids_font.  (2/13)

sys/gio/cursor/grcwaitp.x
	Modified to display another "wait" message after the user responds
	to the first wait with the space bar, causing the system help
	to be printed.  (2/13)

unix/os/zopdpr.c
unix/os/zmain.c
	Fixed a bug in zopdpr that was preventing KILL from killing bkg jobs
	on UNIX.  Also added the ability to use an &NN argument to set the
	priority at which the bkg job is to run.  (2/13)

dev/termcap
dev/graphcap
	Several new entries were added to each file (contributed by our early
	release sites).  (2/13)

pkg/language/
	The manual pages for the language package were extensively revised,
	corrected, and extended.  (2/12-13)

pkg/softools/
	Manual pages were added for all the softools tasks, including all
	the bootstrap utilities.  (2/13)

host/spp/xpp/xppcode.c
	The size of the output buffer was increased by a large factor to
	avoid overflow when compiling large procedures, e.g., procedures
	with a lot of data statements.  (2/13)

pkg/lists/*
	The names of the tasks GCURSOR and IMCURSOR were changed to RGCURSOR
	and RIMCURSOR.  The manual pages for these and all other tasks in
	the package were revised and printed.  (2/13)

host/boot/rmfiles/ +
iraf/mkpkg
	Added a new bootstrap utility RMFILES.  This is similar to RMBIN,
	but is driven by a script and is not limited to deleting binary
	files.  Two new entries "strip" and "stripall" were added to the
	root mkpkg file for stripping production versions of the system.
	The results:

		full system		41.493 Mb
		mkpkg strip		19.838
		mkpkg stripall		17.062

	Stripall differs from strip in that it deletes the libraries as
	well, preventing software development but still permitting full
	use of the standard system.  (2/16)

doc/*
	Renamed some files with .doc extensions to make it easier to
	delete them with the stripper.  (2/16)

doc/gripesfile
doc/newsfile
lib/motd
	These files were moved to HLIB, since they are system dependent,
	and should not be clobbered when a new version of the system is
	installed.  (2/16)

(Skip made tape for AOS/VS)

hlib/zzsetenv.def
	Changed host$osb/ to sys$osb/.  (2/17)

unix/os/zfmkcp.c
	An argument was being passed to ZFPROT by value rather than by
	reference.  (2/28)

sys/imio/imfort
	Tested the Fortran/IMIO interface for UNIX.  One of the Fortran
	test programs had to be modified before it would compile on UNIX,
	and another had a bug (misplaced continue in do loop).  The only
	serious problem was the linker conflict (see below).  (3/5)

unix/os/mkpkg
	Added an $ifeq (USE_LIBMAIN to the mkpkg to not put zmain.o in the
	library if libmain.o is used.  The library version is not used
	anyhow, as XC explicitly references lib$libmain.o during linking.
	The unix zmain.o contains the external "main"; when using libos.a
	in a Fortran program, the linker would use the iraf zmain instead
	of the Fortran main, causing the Fortran program to fail to link.
	(3/5)

unix/hlib/newsfile
unix/hlib/gripes.cl
	Installed the vms/iraf versions.  (3/5)

unix/os/zgcmdl.c
	Added this new kernel primitive; used to get the host system command
	used to invoke the process, e.g., in a foreign task.  This is used
	by the IMFORT interface to allow host Fortran programs to get the
	CL foreign task command line.  (3/5)

unix/os/zmaloc.c
unix/hlib/kernel.h
	Added a #ifdef DEBUGMEM to zmaloc.c and a #define DEBUGMEM to
	kernel.h so that compilation of the special version of MALLOC can
	be easily defeated.  The debug version is useful on the VAX, but
	should be disabled on the SUN to permit use of the standard UNIX
	version when using the SUN graphics libraries.  (3/5)

-------------------------
(V2.2 was sent out sometime near here)

unix/mc68000/ishift.SUN
	Would not right shift properly.  (3/14)

sys/osb/miiupk16.x
sys/osb/miiupk32.x
	These subroutines were modifying (byte swapping) the input array.
	(3/14)

sys/ki/kireceive.x
	Modified to deal with out of band data by checking to see if the out
	of band data is a character string (usually an error message), printing
	the message on STDERR if so, and then returning ERR on the channel.
	(3/14)

dev/graphcap
	Modified DD entries for the versatecs and the dicomed to queue the
	print jobs to these devices.  (3/15)

pkg/cl/lexicon.c
	Modified to permit inclusion of {} inside unqoted strings.  The change
	was made in a way which does not interfere with the use of {} to
	delimit compound statements.  (3/18)

sys/imio/imrename.x +
	Added a new operator IMRENAME to IMIO, so that people won't have to
	use the FIO rename to operate upon images, which is a violation of
	the IMIO interface.  (3/18)

pkg/cl/lexicon.c
pkg/cl/debug.c
pkg/cl/opcodes.c
pkg/cl/compile.c
pkg/cl/main.c
pkg/cl/builtin.c
pkg/cl/prcache.c
pkg/cl/exec.c
sys/gio/cursor/gtropenws.x
	Added redirection for the standard graphics streams.  The syntax is
	as follows:

		>(G|I|P)+ file			# (create file)
	or
		>>(G|I|P)+ file			# (append to file)

	e.g., ">G file" to redirect STDGRAPH to "file", or ">GI file" to
	redirect both STDGRAPH and STDIMAGE to file.  Note that multiple
	redirection arguments may be given on the command line.  The >GI,
	etc., is lexically a token, hence there must be no space after the >,
	and the GIP must be upper case.  (3/24)

pkg/cl/config.h
	Increased the size of the stack and dictionary.  (4/13)

pkg/cl/main.c
	Fixed a bug in the calls to FDOPEN, dating back to the installation of
	the graphics redirection code, above.  (4/13)

unix/hlib/[dir]1mach.f
	Added (commented-out) lines for the IEEE machine constants, determined
	on the Sun-2.  (4/15)

sys/osb/miiupk16.x
sys/osb/miiupk32.x
	Would not write into output array if byte swapping was not used on the
	host machine (not found until code was run on 68000 series machine).
	(4/23)

-------------------
Package reorganization (add package tree NOAO) 26-27 Apr)
Detailed notes were not kept for this as hundreds of files were edited.

pkg/*
noao/*
	Added a new directory NOAO off the root.  Moved all the optical
	astronomy packages from PKG to NOAO.  (4/26)

lib/pkg/
lib/scr/
noao/lib/scr/
noao/lib/scr/stdlines/
	Created a library noao/lib for the NOAO package.  Moved all NOAO
	related files from lib/pkg and lib/scr to the new library.  All the
	XTOOLS library global includes remain in lib/pkg.  (4/26)

pkg/utilities
noao/astutil
	Created a new package ASTUTIL in NOAO.  Moved all the astronomy tasks
	from the UTILITIES package to the new ASTUTIL package.  (4/26)

pkg/dataio
noao/mtntape
	Created a new package MTNTAPE in NOAO.  Moved all the mountain tape
	readers from DATAIO to the new MTNTAPE package.  (4/26)

pkg/local -> noao/proto, iraf$local
	Broke the old LOCAL package up into two packages PROTO (in NOAO) and
	LOCAL.  The PROTO package is essentially the old LOCAL package, but
	the concept of the package has been changed to reflect its usage.
	The new LOCAL package is in the directory iraf$local/tasks, i.e., in
	the local (site dependent) directories.  This is all set up as a
	package in the root, ready for the individual sites to add their own
	collection of packages.  (4/26)

pkg/clpackage
lib/clpackage.hd
lib/root.hd
unix/hlib/clpackage.hd
	The help directories were restructured to make it easier to tie
	local or add-on packages into the help database.  The old pkg$clpackage
	directories were deleted and the files moved into hlib$.  Entries for
	the LOCAL and NOAO packages were added to hlib$clpackage.hd.  To add
	a new help tree to the help database, all the user need do is make an
	entry in this file to for the root .hd of the new help tree, and run
	mkhelpdb.  (4/26)

unix/hlib/clpackage.men
unix/hlib/clpackage.cl
	Removed the entries for all the NOAO packages.  The 'page motd' entry
	was moved to hlib$login.cl since the terminal type may not have been
	set properly until after the user login.cl has been processed.  This
	also makes it possible for the user to omit the message of the day if
	they wish.  (4/27)

unix/hlib/mkiraf.csh
	Changed all the USER, HOME, etc. entries to U_USER, U_HOME, etc.,
	to avoid unintended editor script substitutions.  Added an unalias
	command to protect the user from their own folly if they have
	aliased rm, etc.  (4/27)

unix/hlib/zzsetenv.def
	Moved all the NOAO logical directory definitions to noao$noao.cl.
	Added SET defines for the NOAO, LOCAL, and SDAS directories.  (4/27)

unix/hlib/login.cl
	Changed all the USER, HOME, etc. entries to U_USER, U_HOME, etc., to
	avoid unintended editor script substitutions.  Moved the page motd
	code in from clpackage.cl.  (4/27)

pkg///*.hlp
noao///*.hlp
	All manual pages were modified to give the package path in the
	manual page header.  (4/27)

pkg///*.men
noao///*.men
	All "Revisions" entries were removed from the menu files, since this
	is a temporary thing and it prevents the long form menu from matching
	the multicolumn menu.  In the future, any non-task manual pages should
	be listed separately from the task list.  (4/27)

sys/mkpkg
sys/imio/mkpkg
	Added entries for libfort.a; must have forgotten to put these in when
	the IMFORT package was added.  (4/28)

unix/hlib/mkmlist.csh
	Changed the bgrep to fgrep for increased portability.  This utility is
	not used often enough to make the use of bgrep worth the loss of
	portability.  (4/28)

pkg/images/tv/display/iisers.x
pkg/images/tv/cv/iism70/zclear.x
pkg/images/tv/cv/iism70/iiscursor.x
	There were several cases of a 32 bit signed integer containing a 16 bit
	unsigned integer value being assigned into a 16 bit signed integer
	variable.  This works on machines that do the assignment at runtime,
	truncating the value in the process.  It would cause a compile time
	error on the SUN-3, which carries out the initialization at compile
	time.  Changed to [short = andi (intval, 177777B)], which forces a
	runtime assignment.  (4/28)

sys/gio/nspp/portlib/flush.f
sys/gio/nspp/portlib/flash[13].f
sys/gio/nsppkern/gktcancel.x
sys/gio/nsppkern/gktclear.x
sys/gio/nsppkern/gktclose.x
sys/gio/ncarutil/sysint/spps.f
	Changed the name of the NSPP routine "flush" to "mcflsh" to avoid
	library conflicts with the Fortran FLUSH.  (4/28)

unix/hlib/libc/finfo.h
	The fi_owner field of the finfo structure was not dimensioned
	properly, causing the storage allocated for the structure to be
	overrun.  This was found in a call to pfileopen/filetime in the
	CL; the finfo structure is allocated space on the stack, hence the
	stack was being corrupted (found on the SUN).  This is a fairly
	serious bug which has been in the system for a long time.  (4/28)

sys/gio/stdgraph/stgdrawch.x
	The sgch_flush procedure was being called with a short argument (op/2)
	when an integer argument was expected.  (4/29)

sys/gio/stdgraph/stgrcur.x
	The cursor read algorithm was enhanced by the addition of a general
	pattern matching capability, used to improve the detection of botched
	cursor reads, permitting automatic retries.  The old algorithm was
	fine for fixed size cursor strings, but did not work well for
	variable length cursor value strings such as returned by Regis.  (4/29)

pkg/cl/*
	Starting with the new version of the CL from ST, did a diff of the
	local changes to the CL since V2.2 (graphics redirection, {} in command
	mode) and merged these into the ST version of the CL, which has been
	worked on extensively since last fall, adding improved error handling,
	a better logfile capability, eparam enhancements, parser improvements,
	and so on.  (5/2)

pkg/cl/gquery.c
	Added (char *) declarations for strcpy() and index().  (5/2)

pkg/cl/cl.par
	Moved the mode parameter to the end of the CL parameter list, where it
	is for most parameter sets.  Eparam does not print the query mode
	params before the hidden ones (it should, like lparam, to indicate the
	calling sequence), but since most pfiles are already ordered that way,
	this is good enough for now.

	Also changed the default values for EPINIT and EHINIT.  Not using
	standout mode in ehistory is simply a matter of preference; neither
	the Cshell nor DCL uses standout mode either, and I find it distracting.
	I never have understood what the noshowall option in eparam is good
	for; I suspect this has something to do with SDAS not using hidden
	parameters in the way they were designed to be used.  With regular
	IRAF tasks one always wants to see the hidden parameters too; most
	of the parameters are generally hidden.  (5/2)

	[See the hlib$clpackage.cl mod below to personalize these parameters
	for your site].

unix/hlib/login.cl
	In the login.cl template, changed the call to `page' to a call to
	`clear;type'.  The "more" query in page() causes problems if the user
	types ahead and the motd is longer than one screen.  If the user does
	not want the screen cleared, or does not want the motd at all, they
	can now easily change the login action.  (5/2)

pkg/cl/eparam.c
	Some problems are apparent in using the new EPARAM.  Some of these
	were fixed before and must have gotten lost in the merge.

	To the strings "PACKAGE = %s\n" and "TASK    = %s\n" in the screen
	repaint function, added a \r before the \n.  This is necessary because
	the Eparam screen is updated in raw mode, and no output processing
	is done in raw mode, hence newlines are not converted to CRLF.
	This causes the next line to be printed at the END of the last line,
	one line down on the screen (!!).

	In drawkey(), would clip the prompt string at the right margin of
	the terminal only if the VALUE string was too long to fit in the
	value field.  Parameters with long prompt strings but short values
	would wrap around, stepping on the next line.

unix/hlib/clpackage.cl
unix/hlib/login.cl
	Deleted the ehinit, epinit environment definitions.  Added commented
	out cl parameter assignments to the login.cl file.  (5/2)

	NOTE - `editor' should remain an environment variable, rather than
	being changed to a CL parameter, because the CL is not the only
	task in the system which needs to know the user's editor preference.
	The VOS facilities, e.g., DBMS, will use this variable too.

pkg/cl/cl.par
pkg/cl/config.h
pkg/cl/prcache.c
pkg/cl/modes.c
	Added a new "active" CL parameter `szprcache' to the CL parameter file.
	Changed NFGPROC in config.h to MAXSUBPROC, the maximum rather than
	actual number of cached processes.  Modified the prcache.c and modes.c
	codes to dynamically change the size of the process cache when this
	parameter is set.  This was done because the optimal size of the process
	cache depends upon the host operating system, upon whether the system
	is single user or multiple user, upon on the per user quota, and so on.
	The system manager can now set the default cache size to the optimum
	value for each individual host, by editing hlib$clpackage.cl.  (5/2)

pkg/cl/cl.par
unix/hlib/clpackage.cl
	Changed the default value of the `lexmodes' parameter to yes in cl.par.
	In clpackage.cl, added commented out assignments for all the CL
	parameters for which a site might want to change the default values.
	This makes it easy for sites to provide their favorite default values
	for EHINIT, EPINIT, SZPRCACHE, KEEPLOG, etc.  (5/2)

pkg/cl/cl.par
	Changed the default value of `logfile' to "home$logfile.cl".  The HOME
	directory seems a better default for the logfile than UPARM, so that
	the user won't forget that this potentially very large file is around,
	and so that they can find it easier.  (5/3)

unix/hlib/cllogout.cl
unix/hlib/clpackage.cl
	Added a new task declaration $_logout = home$logout.cl in clpackage.cl.
	Added code to hlib$cllogout.cl to call this task at logout time if a
	logout.cl file is present in the user's home directory.  (5/3)

cl syntax errors -
	The new facility to help give the user some insight into syntax errors
	is great, and I notice the reduce/reduce conflicts are gone from the
	grammar now too.

pkg/cl/history.c
	Eliminated the unused 4 spaces at the left in the logfile.  (5/3)

pkg/cl/builtin.c
pkg/cl/eparam.c
pkg/cl/modes.c			[EXPERIMENTAL]
pkg/cl/exec.c
pkg/cl/pfiles.c
pkg/cl/param.h
	Added a "menu mode" to the CL.  This was the easiest to implement of
	the many EPARAM related changes recently discussed, which is the main
	reason it was done now.  The main revisions were: [1] moved pfilecopy
	code from eparam.c to cleparam() in builtin.c, so that eparam() now
	simply edits a pfile structure in memory (it should have been done
	that way originally).  Added a status return to eparam() to indicate
	what type of exit was taken.  Added M_MENU mode all over the place.
	Added a conditional call to eparam() to execnewtask(), after the pfile
	has been copied, the command line parameters processed into it, etc.
	Modified effmode() to not query when a task is run in menu mode.
	Added a new function taskmode() to modes.c to determine the effective
	mode for a task.

	Menu mode may be set only at the task or package level (setting menu
	mode at the CL level is not useful since even simple tasks like DIR
	will then cause eparam to be called).  Menu mode is available only for
	tasks which are called interactively, hence tasks called from within
	scripts or in batch mode will not call eparam().  When menu mode is
	disabled in this context, it is as if the mode were auto instead.
	If menu mode is not asserted, everything behaves as it did before
	there was such a thing as menu mode.  Note that the task mode must
	be set to "a" or "al" if setting the package mode to "m" or "ml" is
	to have any effect.  Setting the task mode to "m" or "ml" will always
	work, of course.

	When a task is executed in menu mode eparam() is called after the
	argument list (if any) has been processed, and immediately before the
	task is executed.  Exiting eparam() with ctrl/z runs the task, exiting
	with ctrl/c aborts everything and does not update the parameters.
	To simply edit the parameters, one runs task EPARAM explicitly.  (5/3)

pkg/cl/task.c
pkg/cl/param.c
pkg/cl/modes.c
	Turned off the fancy context dependent checks to see if abbreviations
	are to be permitted; abbreviations are now permitted in scripts etc.
	if enabled by the CL parameter.  Modified ltasksrch() to return a
	match if an acceptable abbreviation is found in the current package,
	without searching all the other loaded packages to see if the abbrev.
	is unique.  Eliminated the kludgy code in newltask() which would
	directly fiddle with and later restore the CL parameter `abbrev...'
	to disable abbreviations while checking for a redefined task.
	This was done by adding an argument to ltaskfind().  (5/3)

pkg/cl/modes.c
	LEARN mode is now enabled only for tasks which are called
	interactively.  Tasks called by scripts, etc., or in batch mode,
	do not have their parameters learned.  This should speed things
	up a bit and avoid mysterious changes to parameter values when
	tasks are called as subroutines in scripts.  (5/3)

	Note that a pfile will *always* be updated if a parameter is set in
	an explicit assignment, or on eparam.

pkg/cl/param.c
	Moved the call to parse_clmodes() to before, rather than after, the
	value of the CL parameter is modified, in case the new value is
	illegal and parse_clmodes aborts.  (5/3)

pkg/cl/builtin.c	(clpackage)
	The PACKAGE builtin was not initializing the package descriptor
	properly, causing the package parameter file to be misplaced and
	preventing package parameters from being found in ambiguous (task,
	package, cl) searches.  5/4)

pkg/cl/param.c		(lookup_param)
pkg/cl/modes.c		(effmode searches for parameters too)
	Parameter searches now look in the package parameter file properly;
	possibly this has never worked up until now.  Ambiguous parameter
	references of the form "=param" are resolved as follows (searching
	for the named parameter):

	Case 1: current task = `cl' (interactive)
		- look in pfile of current package
		- look in pfile of CL

	Case 2: current task != `cl' (e.g., a compiled or script task)
		- look in pfile of task
		- look in pfile of package to which task belongs
		- look in pfile of CL

	Note that in case 2, the pfile to which the task belongs is NOT
	necessarily the same as the current package.  Indirection to a
	package parameter can be achieved merely by omitting the parameter
	declaration from the task's parameter set, although explicit
	indirection is normally preferable to permit a command line override.

	Note: If the current package redefines any CL parameters, this can
	be confusing.  The prime example of this is the "mode" parameter,
	present in each task, each package, and in the CL.  Interactively
	typing "=mode" or "mode=value" will set the mode of the current
	package, not the mode of the CL.  Type "cl.mode=value" to set the
	mode of the CL (or use eparam).  (5/4)

unix/os/zfiotx.c
	Modified the UNIX terminal driver to read the cursor in cooked rather
	than raw mode, using a signal handler to catch interrupts and convert
	them into ordinary character reads.  It appears that raw mode is very
	raw, i.e., even ctrl/s ctrl/q is turned off, which can cause data to
	be lost or unsolicited characters to be seen.  (5/4)

sys/fio/zfiott.x
sys/fio/finit.x
sys/clio/clopen.x
sys/etc/ttopen.x
lib/ttset.h
unix/hlib/ttset.h
unix/hlib/xnames.h,xnames.no_
unix/hlib/iraf.h
	Added a new portable driver to the VOS and made it the standard terminal
	driver for the high level code.  If the iraf main is called by zmain
	with the kernel terminal driver, clopen() maps the stdio streams to the
	TT logical terminal driver.  The TT driver is a place to implement any
	VOS logical terminal functions; currently it is used only to support
	monocase terminals, or dualcase terminals with the shift lock on (for
	people who are fond of entering everything in upper case).  The package
	TTOPEN in ETC contains a direct terminal open routine (will be used
	for screen editors implemented in subprocesses) plus TTSETI and TTSTATI
	routines, used to set and query terminal driver options.  FINIT was
	modified to always load the TT driver as well as the TY driver.

	The logical terminal driver currently supports two options:

		ucasein		Map input to lower case.  A character may be
				prefixed by ^ to enter an upper case character,
				e.g., "PAGE ^MAKEFILE" -> "page Makefile".
				To shift to upper case, "^+"; to shift back
				to lower case, "^-", e.g., "PAGE ^+README" ->
				"page README".  The ^ character must be
				doubled to be passed through.  Note that ^
				is also the history metacharacter, but there
				are only so many keys to work with.

		ucaseout	Map all terminal output to upper case (may be
				needed for some terminals).

	Case mapping is disabled in raw mode.  A user requested this capability
	because they have a lot of old monocase terminals.  It also should
	be useful for people who like to work with the shift lock on.  (5/5)

pkg/cl/builtin.c
pkg/system/stty.cl
pkg/system/stty.par -
	Added a new builtin _stty, used to set/stat the VOS logical terminal
	driver, and modified the system.stty task to use it (STTY should
	probable be written as a builtin at some point).  For example,
	"stty ucasein" turns on monocase mode.  STTY is now a procedure
	script, hence the .par is gone.  (5/5)

pkg/cl/eparam.c
sys/gio/cursor/rcursor.x
sys/gio/stdgraph/stgopenws.x,stgclws.x,stgdeact.x,stgreact.x
	Minor changes to support `stty ucase...' modes, which require some
	support in routines that do raw i/o to the terminal (case mapping,
	etc., is disabled while in raw mode).  (5/5)

miinelem.x +
miipksize.x +
miireadc.x +
miireadi.x +
miireads.x +
miiwritec.x +
miiwritei.x +
miiwrites.x +
	Added the following routines to the MII package.  The MIIPKSIZE routine
	returns the size in chars of a packed MII array of the given MII type,
	and obsoletes the old MIILEN function (miilen is still in the library,
	however).  The MIINELEM function returns the number of elements of the
	given MII type in a packed array of the given size in chars.  The read
	and write routines are like the corresponding FIO routines, but are
	used to read and write data stored externally in MII format.  (5/7)

sys/etc/symtab/stsave.x
sys/etc/symtab/strestore.x
	Modified these routines to use the new miiread/miiwrite facilities to
	save the symbol table externally in a machine independent format.
	This makes it possible to use the symbol table package as a kind of
	mini-database facility, providing a quite efficient interface for a
	certain class of applications.  (5/8)

sys/gio/ncarutil/sysint/erprt77.f
	In a couple of places, moved SAVE statements to before DATA statements
	in the same procedure - required by Fortran standard.  (5/8)

sys/fio/ztiott.x
lib/ttset.h
hlib/libc/ttset.h
pkg/system/stty.cl
pkg/cl/builtin.c
	Added a new option "logio" to the VOS logical terminal driver.  This
	is used to log all i/o to the terminal in a text file home$ttyio.log.
	ALL i/o is logged, including graphics and raw mode i/o.  Control codes
	are rendered into printable form for output to the logfile.  This
	feature is most useful as a debugging tool when trying to figure out
	why the system is not talking to a new terminal correctly.  To turn
	logging on, type `stty logio' in the CL.  To turn it off, type
	`stty clear logio'.  The data passed in each ZGETTT or ZPUTTT call
	is logged as one line of text; newlines in the data are logged as \n.
	Long lines are broken, with the continuation line indented 4 spaces.
	(5/9)

sys/gio/gki/gkisetwcs.x
	Modified to always write a copy of the SETWCS instruction to the output
	metacode stream, even if writing to a standard graphics stream.  (5/12)

sys/fio/fexbuf.x
sys/fio/open.x
sys/fio/fgetfd.x
unix/hlib/iraf.h
	Modified FIO to support the SPOOL_FILE file type.  This type of binary
	file spools data in a buffer in memory.  Typically, a routine writes to
	the spool file, the spool file is rewound, and another program reads
	the data back out, after which the data may be cancelled and the
	process repeated.  Spool files have long been in use in by GIO; this
	revision makes the facility available to applications software.  (5/12)

unix/os/zfiomt.c
	Changed value of the count field in the mtop structure for the rewind
	function from 0 to 1.  (5/14)

unix/boot/spp/rpp/(baderr.[rf],synerr.[rf])
 vms/boot/spp/rpp/(baderr.[rf],synerr.[rf])
	These routines are called with obsolete Hollerith character strings,
	e.g., 5Habcde, in the argument list.  Sometime ago we changed the
	declarations for the Hollerith arguments to character*(*), thinking
	that that was the correct specification.  Both the UNIX and VMS
	Fortran compilers, however, implement Hollerith as a single address
	in the argument list pointing to a null delimited character string
	(like a C string).  Character*(*) is something quite different on
	VMS, hence the XC/rpp error messages were getting garbled.  Changed
	the declaration for the Hollerith character string back to INTEGER,
	which causes the pointer to be passed on to the low level interface
	procedure correctly.  (5/14)

sys/fio/fdevblk.x
	Modified to accept any pathname as input, not just directory pathnames.
	The directory prefix is extracted and a temporary file created to
	determine the device block size, as before.  If an error occurs a
	special error message is now generated, instead of the former message
	"cannot open file (zbk12345)", which was rather cryptic.  (5/14)

sys/fio/fseti.x
	In the case F_CANCEL, added the statement `boffset[fd] = 0'.  This
	ensures that FIO will not under any circumstances consider the contents
	of the buffer to be valid.  Also added LNOTE/LSEEK calls to preserve
	the file offset over the cancel operation.  Formerly the file offset
	was set to be beginning of the buffer by the cancel.  Preserving the
	file offset means that a cancel when reading from a blocked file is
	harmless but will pick up any recent changes to the file if shared.
	Modifications to a file can likewise be cancelled provided the FIO
	buffer has not been flushed in the interim.  (5/19)

unix/hlib/stripper
unix/hlib/stripall
	No longer deletes the .hd (help directory) files.  (5/16)

sys/fio/fioclean.x
	This routine, which cleans up during error recovery, deletes any
	partially written new files if an error occurs.  This would cause a
	misleading message when the file being deleted was a special device.
	Added a check for special devices.  (5/19)

sys/fio/fseti.x
	When the file type is set to SPOOL_FILE, the FBLKSIZE parameter is now
	also set to zero to indicate that the file is a streaming file.  Spool
	files are considered to be streaming binary files.  (5/20)

sys/fio/fwtacc.x
	The sleep time of 60 seconds when waiting for a file to become
	accessible was too long.  Changed to a short interval which gradually
	increases to a long interval.  (5/23)

pkg/plot/implot.keys
pkg/plot/implot.x
	Moved the implot.keys file to lib$scr/implot.key, modified the implot.x
	file accordingly.  (5/23)

lib/imhdr.h
lib/imio.h
sys/imio/*
sys/imio/iki/ +		IKI	Image Kernel Interface
sys/imio/iki/oif +	OIF	"old iraf format" kernel
sys/imio/iki/stf +	STF	"space telescope format" kernel

	Installed the newly revised IMIO interface, which was developed outside
	the system without logging the revisions due to the extensive nature of
	the revisions required.  IMIO has been restructured to isolate all
	knowledge of the physical image format into a new interface called the
	image kernel interface (IKI).  The IKI in turn can support any number
	of image kernels, each of which provides an interface to a specific
	host image format.  These image kernels function very much like the
	FIO device drivers and can even be dynamically loaded like the FIO
	device drivers, to do IMIO to a device for which the full system is
	not configured (linked).

	Two image formats are supported by the current interface, i.e., the
	old IRAF format and the STScI GEIS format (FITS group format images).
	IMIO automatically determines the image type at image open time.
	A new environment variable IMTYPE determines the default type image
	when a new image is created, but this may be overridden by simply
	including the filename extension in the image name.

	A number of useful extensions were made to the semantics associated
	with the use of the IMDIR environent variable.  All IMIO datafiles
	now have filename extensions by default.  Existing code should require
	no changes to use the new interface, only relinking.  Existing images
	can be read without reformatting.  The new IMIO is documented more
	fully elsewhere.  (5/23)

sys/imio/db/idb.h
sys/imio/db/idbfind.x
	The IDB interface can now work with either a fixed record size user
	area (80 char cards plus newline) or a variable length record size
	as before.  Keyword searches will be faster if fixed size records are
	used.  The interface automatically senses the record type at image
	open time.  When searching for a keyword, IDB will now reference the
	FIRST keyword matched, rather than the last as before.  (5/23)

sys/fio/close.x
	For the SPOOL_FILE case, replaced the call to frmbfs() by a call to
	frtnfd(), to return the file descriptor allocated by open().  (5/24)

pkg/images/iminfo/imheader.x
	Modified to print group information if multigroup image, e.g.,
	[group/gcount] in section name.  Also replaced file template expansion
	by image template expansion to permit use of [] in image names.  (5/24)

sys/fio/fcopy.x
	Added some minimum copy buffer size logic to avoid copy failure when
	copying a file for which fstati(fd,F_BUFSIZE) returns zero for some
	reason.  (5/24)

sys/fio/fntgfn.x
	Made a couple of major extensions to the file template code to permit
	the use of filename templates to generate the names of output files.
	Also debugged the backslash escape logic in this code so that pattern
	metacharacters (e.g., []) can be escaped in templates.

	The new features are: [1] new filename construction by string
	concatenation, and [2] filename editing by string substitution.
	Some examples follow.

	n_ // *.x		Prepend `n_' to all .x files
	nite1.* // .flat	Append `.flat' to all nite1.* files
	*.c // _X_ // *.h	E.g., `builtin.c_X_bkg.h' (real useful, huh)

	*%%_1%.imh		Append `_1' to the ROOT name of all .imh
				  files, e.g., `pix.imh' -> `pix_1.imh'
	*.%x%gx			Change extn from `.x' to `.gx'

	As before, more complex templates can be built up by forming a list
	of patterns such as those shown, delimited by commas.  The @listfile
	notation may be used to read list files.  The number of concatenatable
	fields and edit operations is arbitrary and is currently set to 8
	concatenatable fields and 8 string substitutions per list element.
	When concatenating successive elements from different lists, the length
	of the output list is the length of the shortest input lists, hence the
	input lists need not all be the same length.

	Added a new entry point FNTRFNB to the package, used to randomly read
	the file list, unlike FNTGFNB which reads the list sequentially.  (5/26)

sys/fmtio/patmatch.x
	Added an indexing feature to support the FNTGFN string substitution
	capability discussed above.  The character % may be embedded in
	patterns to index the marked fields of the matched string.  Note that
	this is not trivial as the index depends upon the data being matched,
	e.g., * may expand to any number of characters, and fields may be
	anchored either at the left or the right (hence this feature had to
	be built directly into the pattern matching code).  Inclusion of the
	% in patterns does not affect the match, i.e., the % is not matched
	against anything.  At match time, the pattern matching engine saves
	the current character index in the encoded pattern buffer whenever
	the INDEX (=%) instruction is encountered in the pattern.  The index
	values may be recalled after a successful match with the new PATINDEX
	function.  (5/26)

pkg/xtools/imt.x -
sys/imio/imt.x +
	Deleted the old image template package from XTOOLS and installed the
	new template code in IMIO.  The new code uses the revised filename
	template and pattern matching code, supports the expanded image name
	syntax, and supports metacharacter escapes that actually work.  (5/27)

sys/imio/imgclust.x
sys/imio/imgimage.x
sys/imio/imgsect.x
	Added three new procedures to IMIO, to be used to parse image
	specifications.  These may be called to get the cluster name, the
	image name (including the cluster index if any), or the image section.
	These routines call IMPARSE which does the real work, but are more
	convenient to use in applications programs.  (5/27)

	Sample imspec: pix[3][*,-*]

			   procedure				returns

		imgcluster (imspec, cluster, maxch)		pix
		  imgimage (imspec, image, maxch)		pix[3]
		imgsection (imspec, section, maxch)		[*,-*]

sys/fmtio/strdic.x
	Now ignores whitespace at the beginning of the input keyword.  (5/27)

unix/os/zfiotx.c
	It turns out that read-write mode is desirable for text files in the
	IKI/STF kernel, so I made it legal in the UNIX kernel (it is also
	legal in the VMS kernel).  This mode was not legal under FOPEN in old
	UNIX systems, but probably that is a thing of the past and even then
	one could have gotten around it by modifying the UNIX FOPEN.  Read
	write access is now considered legal for text files; a seek or flush
	is required when changing modes to synchronize the i/o system.
	Currently RW mode is used only for file locking purposes and use of
	this mode for i/o is not recommended.  (5/27)

pkg/cl/lexicon.c
	The escape sequence handler in this code would map \c into c,
	preventing the \ from being passed on to the code that needs it.
	It now maps \c into c if c is one of the characters "&;=+-\"'\\#><()|",
	i.e., the token delimiters recognized by the lexical analyzer,
	otherwise \c is mapped to \c.  (5/28)

pkg/cl/history.c
	The escape sequence handler in the history mechanism, which works over
	the input text even before it gets to the lexical analyzer, would strip
	the \ from \c when c was one of the characters ^$*.  For example, \$
	would be converted to $, preventing the escape from reaching the lower
	level software.  Modified to recognize only \^, mapping it to ^,
	since ^ is the only real history metacharacter.  (5/28)

sys/imio/immaky.x
	Would name the new image when the old was intended, in the history
	message.  (5/28)

sys/fio/fcopy.x
	Modified to close the input file if the call to fmkcopy fails.  (5/29)

sys/fio/fmkcopy.x
	Was issusing the open-failure message if the mkcopy failed.  Added a
	special error message for fmkcopy.  (5/29)

unix/hlib/gripes.cl
vms/hlib/gripes.cl
	Now uses USERID instead of HOME to record who the gripe is from. (5/29)

pkg/cl/grammar.h
pkg/cl/param.c
	The .p_length parameter attribute is now treated properly.  (5/29)

pkg/cl/unop.c
pkg/cl/operand.h
	Added a new intrinsic function STRLEN.  (5/29)

pkg/cl/param.c
	In validparamget(), revised the `parameter is undefined' message to
	read `the requested field of parameter .. is undefined', since I
	thought the parameter itself could not be found when I saw the first
	message.  (5/29)

pkg/system/lprint.x
pkg/system/page.x
pkg/system/type.x
pkg/system/help/houtput.x
	In a number of calls to ttyputline(), the argument map_cc was being
	passed as a boolean when an integer was expected.  (5/29)

pkg/cl/prcache.c
pkg/cl/builtin.c
pkg/cl/exec.c
pkg/cl/task.h
	Added some new code to clpack(), restor(), the process cache, etc.,
	to automatically flush all processes connected since a package was
	loaded, when the package exits.  These idle processes consume
	resources needlessly and it is best to free up the process slot
	immediately, just as we already free dictionary space, environment
	name slots, etc.  (5/29)

(Ongoing testing and development of the IKI/STF interface, not recorded here
(since this is a new interface.  It is clear that bug fixes and further
(development will go on for some time - this is a complex interface).

vms/boot/spp/xc.c
vms/boot/spp/xc.com
vms/boot/spp/mkpkg
vms/boot/spp/mkpkg.com
	Installed revised version of VMS/XC from ST.  (6/1)

vms/hlib/irafemacs.com
	Installed new version from ST.  (6/1)

vms/dev/hosts
	Removed quotes around .exe file names in VMS node entries.  (6/1)

vms/hlib/irafuser.com
	Changed a few of the job logicals to process ones to save job table
	space; they don't all need to be job logicals.  (6/1)

pkg/system/doc/directory.hlp
	Fixed typo, \fb -> \fB.  (6/1)

vms/as/README
vms/as/cstr.s +
	Added assembler optimized versions of C string ops. (6/1)

sys/libc/mkpkg
	Revised to use as$cstr.s if available.  (6/1)

vms/boot/mkpkg/mkpkg.hlp
unix/boot/mkpkg/mkpkg.hlp
	Fixed typo, \fmkpkg -> \fBmkpkg.  (6/1)

math/mathgen/mkpkg
	Added a `$purge lib$' at the end of mathgen:.  (6/1)

vms/boot/bootlib/dcl.c
	Installed revised version from ST.  (6/1)

vms/boot/bootlib/vfn2osfn.c
unix/boot/bootlib/vfn2osfn.c
	Added check to return the null string if an error occurs mapping the
	file; formerly it would return the most recent file successfully
	mapped.  (6/1)

pkg/language/*
	New manual pages added for logging, putlog task; others were modified
	to reflect the recent changes in the CL.  (6/1)

vms/os/mkpkg
vms/os/zfiopl.c
vms/os/mcsub.c +
	Installed the VMS NCAR/MCVAX version of zfiopl (the plotter interface)
	from ST.  (6/1)

vms/os/rms.c
	Assorted epN() changed to _epN().  (6/1)

vms/os/str.c
	Minor cosmetic changes.  (6/1)

vms/os/vms.h
	Size parameters for zfiopl were changed.  (6/1)

vms/os/zxwhen.c
	Modifications to permit traceback output to be spooled in a file for
	debugging purposes.  Default is no traceback.  (6/1)

vms/os/zmain.c
	Installed the ST version; minor changes, e.g., correcting erroneous
	comments. (6/1)

vms/os/net/decnet.c
	Minor fix in a comment.  (6/1)
	TODO: Compile both for decnet and tcp/ip; runtime switch depending
		upon node. 

(System moved to VMS on 6/1.  Merged all recent hlib,libc revisions into the
(VMS hlib,libc.  System bootstrapped successfully on 6/2, started full sysgen
(on 6/2.

vms/hlib/libc/xnames.h,.no_
vms/hlib/libc/xnames.no_
unix/hlib/libc/xnames.h
unix/hlib/libc/xnames.no_
	Added entry for ENVINIT, called by the bootlib routines on VMS.  (6/2)

sys/gio/gclose.x
	Added a declaration for and().  (6/3)

vms/hlib/lib/iraf.h	[DISCUSSION]
	There was a note in the ST notes file concerning the removal of the
	IRAF,HOST,TMP pathnames from the C <iraf.h>, which gets installed in
	sys$library.  Of course it would be nice if the logical names always
	got propagated to subprocesses and this file were never referenced,
	in which case it would not matter what values were put in <iraf.h>.
	At present, however, this is not the case and the file is getting
	referenced at runtime to resolve pathnames.  This is evident when
	there are two versions of IRAF in the system, as the operation of
	mkpkg is affected, of at least the operation of subprocesses called
	by mkpkg.  The ZGTENV routine only reads <iraf.h> if logical name
	resolution fails.  If we can figure out why it fails then we can do
	away with the pathnames, but for the moment I have to leave them in
	to ensure that IRAF programs know where the IRAF runtime files live.

	More information on this item - we just discovered that the quota
	on the size of the job table can cause logical name propagation to
	subprocesses to fail.  Perhaps this is the source of the problems
	we have experienced in the past.  I still choose to leave the
	pathnames in <iraf.h>, since it does little to impress the customer
	with the reliability of our software when something fundamental like
	mkpkg fails due to a quota problem on the job table.  The fact is
	that VMS does not reliably propagate logical names to subprocesses,
	so we need a backup mechanism to ensure reliable operation.  (6/3)

vms/hlib/mkiraf.com
	Added a couple queries to give the user more control over the operation
	of MKIRAF.  The first query asks if the uparm files are to be deleted.
	The second asks for the name of the terminal; if nothing is entered
	it picks a default and prints it on the terminal.  Deleted the code
	to delete the old login.cl file; this is not necessary on VMS since
	it has file versions, and mkiraf.com is a very VMS dependent utility.
	(6/3)

sys/fio/fntgfn.x
	Modified to perform string concatenation only on the root of the
	filename, i.e., rather than after the filename extension.  Hence,
	the template `*.imh // _2' produces filenames `*_2.imh'.  The
	extension is defined to be the first . delimited field encountered
	in any of the strings being concatenated.  If there are multiple
	such fields, the first such encountered is the extension of the
	output filename.  (6/4)

vms/os/zopcpr.c
	Changed the value of WSEXTENT for the subprocess from 1000 to 4096
	pages.  This seems harmless since all it does is allow the system
	to give the process that much working set if the process needs it
	and the load on the system permits it.  (6/4)

dev/cacheg.dat
dev/cachet.dat
	These files were updated to pick up any recent changes in the graphcap
	and termcap entries for the cached devices.  (6/4)

sys/fio/ffault.x
	Modified to return the number of chars available to be read in the
	buffer after the iop, rather than in the entire buffer.  This causes
	ffault to return EOF when faulting at a seek offset beyond EOF on a
	blocked binary file.  (6/4)

lib/evexpr.h
sys/fmtio/evexpr.y
	An awkward feature of the way operand structure storage is mangaged
	led to a "memory corrupted" bug in HEDIT.  Reworked the EVEXPR code
	to do the operand structure storage management in a set of procedures,
	rather than by direct manipulation of the structure in the code.
	EVEXPR no longer tries to reuse the same output operand structure,
	it now allocates a new one on every call, leaving it up to the caller
	to deallocate the operand structure returned.  All allocation and
	deallocation of string storage for string operands is now handled by
	the operand structure procedures.  (6/6)

sys/fmtio/mkpkg
unix/hlib/irafuser.csh
	Set up the FMTIO mkpkg to automatically run xyacc to remake evexpr.x
	from evexpr.y if out out date, so that I don't have to remember what
	command to enter (only on UNIX hosts).  (6/6)

images/imutil/hedit.x
images/iminfo/hselect.x
	Modified as necessary for recent EVEXPR revisions.  As far as I know,
	these are the only programs currently using EVEXPR.  This fixed the
	HEDIT "memory corrupted" bug, which was due to having two operand
	structures pointing to the same string buffer which was therefore
	being deallocated twice.  (6/6)

sys/fio/fnullfile.x+
sys/fio/protect.x
sys/fio/open.x
sys/fio/frename.x
sys/fio/falloc.x
sys/fio/delete.x
sys/imio/iki/ikimkfn.x
	Added a boolean function fnullfile() to FIO, called to test if the
	named file is the nullfile.  Modified the listed procedures to use
	the new primitive.  The new procedure was added as a simple string
	equality test for "dev$null" is not a reliable test, i.e., the file
	name may have been mapped before being passed to the procedure which
	tests for the nullfile.  (6/7)

sys/fio/fntgfn.x
	The first version of the filename template package would consider
	the first dot delimited field encountered to be the filename extension.
	This no longer seems the best choice when dot-fields are used within
	a filename for other purposes.  FNT was changed so that only alpha
	dot fields are considered to be extensions.  Hence, "pix.01 // .44" ->
	"pix.01.44", and "pix.01.imh // ".44" -> "pix.01.44.imh".  (6/7)

sys/imio/iki/ikirename.x
sys/imio/iki/ikicopy.x
	If the old and new names are the same, now does nothing.  Also fixed
	some bugs in the logic for generating the root and extn fields of the
	new image name.  (6/7)

sys/imio/iki/oif/oifrename.x
	Added code to rename pixel file as well as header file.  This has to
	be done as the pixel file may reside in the same directory as the
	header file, and the rename operation may move the header to a
	different directory.  (6/7)

vms/boot/mkpkg/*
	Merged in changes from ST.  These were minor - XC called as a
	subroutine, and a bug fix in one of the $if's.  (6/7)

vms/boot/mkpkg/tok.c
	Changed SZ_LINE to SZ_PBBUF in getargs().  (6/7)

unix/boot/mkpkg/tok.c
unix/boot/mkpkg/host.c
	Merged in recent additions to vms/mkpkg so that these high level files
	can be identical on the two systems.  (6/7)

vms/os/zopcpr.c
	Installed a bug fix to increase the termination mailbox buffer quota
	to hopefully fix the RWAST/RWMBX hung process problem.  (6/7)

vms/boot/bootlib/dcl.c
	Modified to return OK only if the VMS status received from the oscmd
	is 1.  Return status is thus OK|ERR, which is what the calling code
	(mkpkg) expects.  (6/7)

vms/boot/spp/xc.c
	Now checks for the existence of files before trying to compile them.
	(6/7)

sys/tty/ttysubi.x
	Was not handling the format "%+" properly.  This would cause the
	VT52 termcap entry to fail.  (6/7)

pkg/images/imarith/t_imarith.x
	Checked if a change recently noted had gotten installed.  Cleaned up
	the code slightly but did not make any functional changes.  (6/7)

dev/hosts [VMS]
	On our clustered VMS system, set up the satellite 750 vela as an
	alias for the central host draco.  This makes the networking software
	work with the cluster.  (6/7)

pkg/cl/history.c
	In putlog(), modified to prevent overflow of the output line buffer.
	Also added a crude facility to break long output lines into multiple
	lines with backslash escapes.  Should be redone sometime to break lines
	at whitespace, indent continuation, etc., using a VOS `putlongline'
	procedure (there is already a getlongline).  (6/7)

sys/fio/osfnlock.x
	Modified osfn_pkfname() to strip all backslash escapes from the final
	output OS filename.  Most of the code leaves the \ in to protect the
	escaped character from the transformations to follow, hence the \
	often make it all the way down to this last routine.  With this last
	revision, \$, \[, etc. now work in the limited tests thus far run on
	VMS/IRAF.  (6/8)

sys/fio/fntgfn.x
	Now that \ can appear harmlessly in filenames during translation,
	modified the template code to leave the \ in in more cases.  This
	makes it possible to use OS pathnames in templates in many cases,
	provided the metacharacters are escaped.  By the way, in the process
	of doing the recent filename template modifications the template
	code was modified to recognize / as well as $ as a directory
	delimiter, hence templates such as `xx/*.h' are now legal.  (6/8)

sys/fio/fchdir.x
	Fixed a comment, deleted a commented out block of code.  (6/8)

sys/fio/diropen.x
	Added an errchk for syserrs().  Would continue on if could not open
	directory, calling fstati on an unitialized file descriptor, leading
	to a segmentation violation in the case which led to discovery of the
	bug.  (6/8)

sys/fio/unread.x
sys/fio/ungetline.x
sys/fio/rename.x
sys/fio/fredir.x
	Due to the above errchk bug, looked for the same problem in the other
	FIO files and made minor changes to the files listed.  (6/8)

sys/fio/fdirname.x
	On VMS, if fed the name of a subdirectory `subdir' would return
	`subdir]'.  Modified to return the concatenatable virtual path of
	the given directory operand.  (6/8)

pkg/system/directory.x
pkg/system/directory.par	[NEW DIRECTORY PROGRAM!]
pkg/system/isdir.x
	Wrote a completely new directory lister program to replace the horrible
	old thing we have been stuck with the last few years.  The new program
	only does the simple (most commonly used) things, but at least it works
	correctly.  Can now list subdirectories, or any directory by pathname,
	also logical directories, directories on remote nodes, files by
	template, etc.  Prints "no files found" rather than echoing back the
	unmatched filename.  The syntax has been changed to be more terse, and
	a number of new options have been added.  Example:

		dir *.x l+		(long form listing)

	The old "options" parameter is gone.  New parameters allow
	specification of number of columns, whether or not to sort (not
	needed on VMS probably), max chars of each filename to print (useful
	when directory contains a few very long filenames), option to show
	hidden files, etc.  The new program is also more efficient and faster
	than the old one.  (6/8)

sys/fio/vfnmap.x
	In vfnunmap(), modified the code which deletes a trailing . (null
	filename extension) to not do so if the previous character was also
	a ., to avoid mapping `..' into `.'.  (6/8)

lib/protect.h +
sys/fio/protect.x
	Reworked the fio.protect function so that it can be used to set,
	remove, or query file protection, using the action codes defined
	in the new file <protect.h>.  Smartened up the code to know about
	directory files; formerly, an attempt to query protection on a
	subdirectory would cause a "nonexistent file" error due to the
	.dir extension in VMS.  (6/9)

sys/imio/iki/oif/oifclose.x
sys/imio/iki/oif/oifdelete.x
pkg/system/directory.x
pkg/system/unprotect.x
pkg/system/protect.x
	Modified to use <protect.h>.  (6/9)

sys/fmtio/patmatch.x
	The metacharacters ^ and $, when found inside a pattern, were not
	being encoded as regular characters properly.  This would cause a
	"cannot happen" message later when trying to apply the encoded
	pattern.  (6/9)

sys/imio/iki/oifmkpfn.x
	Fixed an interesting bug in the make-pixfile-filename routine.
	The root image name was being tacked onto the OS directory name
	where the pixfile would go.  FIO does not translate filenames
	that have an osdir prefix, so the result was that filenames were
	being produced which were illegal on the host system (VMS).
	This is kind of subtle - have to be on the watch for this sort
	of bug in the future.  (6/9)

sys/imio/db/imget*.x
	Added errchk declarations for the lower level imget routine.
	Would cause a floating point exception when attempting to get the
	value of a nonexistent parameter, e.g., when attempting to convert
	an unitialized double to a real.  (6/9)

vms/hlib/install.com
vms/hlib/installr.com
	Made entries for all iraf executables in the script, commenting out
	all but those we wish to have actually installed (hope the install
	utility accepts the comments).  (6/10)

dev/pix.hhh	[VMS]
	Installed the real pix.hhh header template file in the DEV directory
	on vms/iraf.  This is a funny format file peculiar to VMS, hence if
	DEV is restored from a TAR tape the file type will be lost.  The
	template file is required to create new STF header files in the
	correct format.  I also read in the SCIDAT test image files and
	tried out the STF kernel with them for the first time in VMS/IRAF
	(the software was all developed on UNIX).  Amazingly, it worked
	the first time, at least as far as I can tell.  (6/10)

unix/boot/mkpkg/pkg.c
	Modified to accept either "-f stdin" or "-f STDIN".  (6/11)

unix/boot/mkpkg/char.c
	In getcmd(), $ would delimit the command even when used as a character
	within an identifier.  Modified to recognize $ as the command delimiter
	only when it occurs as the first character in a new token.  This fixes
	the problem of $ characters in filenames in $SET macros.  (6/11)

unix/boot/mkpkg/pkg.c
unix/boot/mkpkg/tok.c
	The $include directive was not working properly when called from within
	a module.  The module name was being passed into the context of the
	include file, causing mkpkg to search the include file for the named
	module and then abort with a module not found message.  Modified the
	push_context() function to set the module name to the null string
	(disabling the module search) if the special module name "BOF" is
	given.  (6/11)

sys/imio/iki/oif/oifdelete.x
	Now checks if the pixel file exists before trying to delete it.
	No warning message is issued if there is no pixel file, only if the
	pixel file exists but cannot be deleted.  An image opened new-image
	or new-copy and then closed without writing any pixels will not have
	a pixel file.  (6/11)

pkg/images/doc/imrename.hlp +
pkg/images/images.cl
pkg/images/images.hd
pkg/images/x_images.x
pkg/images/images.men
pkg/images/imutil/mkpkg
pkg/images/imutil/t_imrename.x +
pkg/images/imrename.par +
	Added a new task IMRENAME to the IMAGES package.  (6/11)

vms/boot/mkpkg/pkg.c
vms/boot/mkpkg/tok.c
	Installed the new versions of these files from unix/iraf with the
	bug fixes.  (6/11)

unix/boot/bootlib/osgetenv.c
vms/boot/bootlib/osgetenv.c
	One of our users edited the pathnames in the <iraf.h> file, rendering
	the file unreadable by ZGTENV.  Since VMS logical name passing was
	also failing (probably due to insufficient quota on the job table)
	OSGETENV would fail when MKPKG tried to start up, making it impossible
	to relink the system.  This showed up a bug in osgetenv - the zgtenv
	failure would lead to a segmentation violation since osgetenv calls
	itself recursively without checking for a NULL function value.
	Rewrote osgetenv to read the values of IRAF and HOST into static
	storage when first called, printing an error message if the zgtenv
	call fails.  (6/12)

vms/hlib/mkiraf.com
	Since IRAF can now accept \$, modified mkiraf to escape $ in device
	names in the login.cl.  (6/12)

vms/hlib/irafuser.com
	For testing purposes, modified the irafuser.com to define our local
	IRAFDISK with the $ in the name.  This $ CANNOT be escaped since the
	logical name is also used directly at the VMS level.  It does not
	need to be escaped for the high level code since all high level
	references resolve into references to IRAFDISK itself, not its value.
	The $ in IRAFTMP, however, must be escaped since IRAF fetches the
	value of this variable, but it is not used by the VMS level code.
	This inconsistency is bound to cause problems but I do not have time
	to resolve it just now.  (6/12)


[Snapshot of system sent to ST]
----------------------------------

	NOTE regarding $-in-osdir problem:  ideally, one should just be able
	to include $ in OS directory names defined in the environment without
	having to worry about it.  There appear to be several possible ways
	to achieve this:

	    [1] Make the user or system manager escape the $, e.g., in
		irafuser.com, login.cl, and when SET defs are entered
		interactively.  This is the current solution.

	    [2] Escape the $ when the entry is made in the environment table.
		This is unacceptable because the env. is a general purpose
		facility and is not used just for filenames.

	    [3] During VFN translation when an ldir is substituted, call zfxdir
		to check if the substitution string is an osdir.  This is bad
		because of the runtime expense in recursive logical directory
		expansion.

	    [4] Add a new function ENVGFN to the environment package, and use
		this in filename translation instead of ENVGETS.  The first
		time an ldir is fetched, envgfn would check it the value is
		an osdir and set a flag one way or the other.  Thereafter,
		the expense and semantics are the same as for envgets.

	Scheme 4 appears to be the best, since there is no efficiency penalty
	and no dangerous modifications to the FIO code are required.  Some
	modifications to the ENV package are necessary; these should be done
	when the RESET function is added.  Since the environment facilities
	are critical to the functioning of the system, there is not sufficient
	time before the next release to test such ENV modifications, hence
	these revisions will have to be postponed to the next version of the
	system.

unix/boot/mkpkg/pkg.c
	In parse_modname(), added a break after the call to parse_fname,
	and modified the call to parse_fname to receive the entire pathname.
	(6/12)

unix/boot/bootlib/oschdir.c
	Modified to accept rooted directory references as well as subdirectory
	references.  (6/12)

unix/boot/bootlib/osgetenv.c
	The system directory SYS was somehow missing from the list of builtin
	logical directory names.  (6/12)

unix/boot/mkpkg/pkg.c
unix/boot/mkpkg/main.c
unix/boot/mkpkg/mkpkg.h
	Modified mkpkg slightly (mostly in push_context and pop_context) to
	remove the restriction that mkpkg modules in the call tree have to
	reside physically in subdirectories.  Hence, calls such as the
	following are now permitted:

		$call update@pkg$cl/mkpkg

	A call such as this will return to the caller's context in the usual
	way.  This feature has not been extensively tested since the system
	mkpkg tree matches the directory tree, but basic tests were run
	without any problems.  (6/12)

[Released VMS/IRAF V2.3 as the standard system on the NOAO 8600 on 6/13]
-------------------------

vms/hlib/install.com
vms/hlib/installr.com
	Changed the ".e" extension to ".exe" for VMS.  (6/13)

vms/hlib/zzsetenv.def
vms/hlib/sdas.cl +
	Added a stubbed out sdas.cl to print "not yet available" rather than
	abort because it cannot find the file.  (6/13)

vms/boot/bootlib/oschdir.c
vms/boot/bootlib/osgetenv.c
	Installed the new versions from unix/iraf.  (6/13)

vms/boot/mkpkg/mkpkg.h
vms/boot/mkpkg/main.c
vms/boot/mkpkg/pkg.c
	Installed the new versions from unix/iraf.  (6/13)

vms/boot/mkpkg/mkpkg
	Set up a new mkpkg driver file to separate the relink and install
	operations.  Also includes a "mkpkg debug" entry.  (6/13)

sys/fio/vfntrans.x
	In vfn_decode, added code to escape any $ in the OS filename being
	decoded.  This allows host filenames containing $ to be read from
	a directory and passed back to the system successfully.  (6/13)

vms/iraf - XC compiler [NOTE]
	Just logging a note on the VMS version of XC.  This version of XC
	preprocesses and then compiles each .x file in the argument list
	and then moves on to the next file.  The UNIX XC, on the other hand,
	converts all the x. to .f and then calls the Fortran compiler to
	compile all the .f.  I don't know why the same thing is not done for
	VMS; the VMS Fortran compiler is much faster when called to compile
	several files at once.  This would have a much more significant impact
	on performance than the business of making XC callable as a subroutine.
	(6/13)

sys/imio/iki/ikiaccess.x
sys/imio/iki/ikidelete.x
	Added code to check for the null image (dev$null).  This was the
	source of the "Cannot open image (dev$null)" bin in RFITS.  (6/13)

vms/os/zfinfo.c
	When called to get info on a directory with a name ending in ], would
	fail if there was a ".;N" file in the named directory.  This was
	because the sys$search would find the .; file which is the filename
	you get if you sys$parse a [] directory name (this probably has
	something to do with why these files get created in the first place).
	Added code to skip the sys$search if sys$parse returns zero length
	root and extn fields.  (6/13)

vms/os/zopdir.c
	In ZGFDIR, modified to return the filename ".;" rather than the null
	string, when a .;N file is encountered in a directory.  A `dir all+'
	is still required to actually see the file.  (6/13)

dev/cacheg.dat		[UNIX]
dev/cachet.dat
	Updated the cache files on unix.  Evidently these were only updated on
	VMS earlier.  (6/13)

vms/hlib/irafuser.com
	The \$ in IRAFTMP caused a problem after all, since the damn thing is
	used in a VMS pathname in mkiraf.com.  As a temporary workaround,
	added a logical IRAFTEMP which is just the same thing without the 
	escape.  (6/13)

sys/fio/fioclean.x
	The "stddev = ..." statement was being executed before the FP==NULL
	test, causing a segmentation violation on the SUN (but not on the vaxes
	for some reason).  Moved it to after the test, to just before it is
	used.  (6/14)

sys/fio/fntgfn.x
	In fntrfnb(), added a check for an index < 1 as well as > nfiles.
	(6/14)

sys/clio/clcmdw.x +
	Added a synchronous version of CLCMD.  (6/14)

pkg/system/page.x
pkg/system/page.par
pkg/system/doc/page.hlp
	Extensively rewrote the PAGE task to improve the interactive aspect of
	the user interface.  The program is now keystroke driven in raw mode
	and the old cl boolean parameter "more" is gone.  Type space bar or
	"f" to go to the next page, return to display the next line, N or P
	to go to the next or previous file in the list, ? for help, e to edit
	the current file, q or ctrl/c to quit, etc.  (6/14)

pkg/system/help/houtput.x
pkg/system/help/nomore.x -
pkg/system/help.par
	Added keystroke driven page control similar to that used in PAGE to
	the HELP program.  (6/15)

pkg/cl/builtin.c
	In the clclear() function, added a call to c_fseti to disable RAW
	mode, just in case one of the new raw mode tasks bombs out leaving
	the terminal in raw mode.  (6/15)

unix/hlib/newsfile
vms/hlib/newsfile
	Made an entry noting the revisions to directory, page, and help.
	(6/15)

sys/osb/miireadi.x
sys/osb/miireads.x
	Added an "nints = EOF" at the top; this variable was not getting
	initialized when EOF was read on the input file, causing the function
	to fail to return EOF.  (6/17)

sys/gio/sgikern/*
	The SGI kernel has been extended to support raster devices.  The kernel
	will now generate either SGK metacode output or bitmaps.  All that
	the user need add to interface either type of device is a graphcap
	entry and a host program to process the metacode file or bitmap to
	the device.  On some systems host facilities will already be provided
	for writing bitmap files to raster devices (e.g., UNIX).  This kernel
	provides an attractive alternative to the NCAR/MCVAX kludge for
	interfacing new devices.  (6/17)

pkg/plot/plot.cl
pkg/plot/sgikern.par +
pkg/plot/sgidecode.par +
pkg/plot/plot.hd
pkg/plot/plot.men
pkg/plot/doc/sgikern.hlp +
pkg/plot/doc/sgidecode.hlp +
	Installed the new tasks SGIKERN and SGIDECODE in the plot package.
	(6/17)

sys/gio/mkpkg
	Added an entry in the update: section for @sgikern.  (6/17)

sys/gio/sgikern/sgk.h
sys/gio/sgikern/sgk.x
pkg/plot/doc/sgikern.hlp
	Changed the value of the opcode for the draw line instruction to 4,
	so that the metacode opcodes will form a simple sequence 1-4.  No need
	for different classes of opcodes in this kernel.  (6/18)

sys/gio/sgikern/sgk.x
	Added support for a new graphcap flag DB.  If present in the graphcap
	this causes the SGI kernel to print debugging messages at runtime.
	(6/18)

dev/graphcap
	Finished up the entries for the NOAO/UNIX versatec devices and tested
	the new kernel both as a task and as a pseudofile i/o subkernel.
	The principle disadvantage of the SGI kernel is that it does the
	rasterization on the fly rather than as a queued batch job, hence
	operations like the cursor mode :.snap take longer, e.g., 10 seconds.
	The actual rasterization process is actually about five times more
	efficient than the NCAR/UNIX software, but to the user it will appear
	somewhat slower when writing to a raster device.  When writing to an
	intelligent device (e.g., QMS or IMAGEN) the delay should not be
	noticeable.  (6/18)

sys/gio/sgikern/sgk.x
	Performed the obvious optimizations, i.e.,

	    [1] Substituted a call to ACLRI to clear the frame buffer for
		the do-loop used formerly.  This function is optimized in
		assembler on the VAX using the movc3 instruction (should
		have had sense to use this in the first place).

	    [2] In the vector drawing primitive, added optimal code for the
		special cases of vectorizing horizontal and vertical vectors,
		e.g., for the plot box and ticks.

	This did not take long and the running time for my test plot decreased
	from 7.5 to 5.1 cpu seconds.  Currently, 2.8 seconds are spent clearing
	the frame buffer and writing it out, compared to 2.1 seconds to do the
	actual vectorization (the clear and write operations must process the
	entire raster), so probably there is little further room for
	improvement.  (6/18)

SGI device/host interface status	[DISCUSSION]
	An SGI VMS/Fortran translator for the calcomp has been written.
	No host task had to be written for UNIX for the versatec since lpr
	will take bitmaps directly; the dispose command merely disposes of the
	bitmap to lpr.  An SGI translator for the versatec on VMS is being
	worked on - it looks like it will be only a couple pages of code,
	one merely has to change the record structure of the bitmap file and
	copy it to the device.  A translator for the Imagen will be ready
	soon; this should also be a simple little program, the main problem
	being trying to make sense of the "impress" language.  We are looking
	for someone to write a QMS translator, since this appears to be a
	popular device.

pkg/language/doc/logging.hlp +
	Added this mislaid manual page to the language package help directory.
	(6/21)

-------------------------------------
Revs notice printed in newsletter.
System work stopped for several weeks due to vacation.

pkg/plot/*
	Installed a new version of the PLOT package.  Most of the changes were
	cosmetic, e.g., changes to parameter names in old tasks to make them
	conform to GIO nomenclature.  There were also a few bug fixes.  (7/14)

sys/imio/imsetr.x
	When called to set NBUFS (the number of input buffers) will now free
	any existing buffers before changing the size of the buffer pool.
	This makes it possible to change the number of input buffers after
	doing i/o to an image; the FIXPIX program was doing this, causing an
	apparent memory corruption problem leading to a panic abort.  Note
	that a bad pointer will result if an input routine is called before
	the call to IMSET since the buffer will have been returned.  The output
	buffer, if any, is not affected by a change in NBUFS.  (7/15)

sys/imio/iki/oif/oifdelete.x
sys/imio/iki/oif/oifrename.x
	Added a check for IM_PIXFILE(im)==EOS (no pixel file) so that these
	operators will not attempt to rename or delete the pixel file if there
	isn't one, i.e., the image was created but never written into.  (7/15)

pkg/cl/unop.c
	In a couple of sscanf() calls, changed the %d and %f to %ld and %lf,
	since the output variables are type long and double.  (7/15)

sys/gio/cursor/grcread.x
sys/gio/cursor/grcwrite.x
sys/gio/cursor/giotr.x
	The :.write command would formerly write the binary WCS structure at
	the beginning of the output metacode file, followed by the frame
	buffer, and the :.read would expect the same structure when reading
	a file.  This was bad because the resultant metacode files were not
	in the standard GKI metafile format, hence problems would result when
	:.write files were input to other programs, or when standard metafiles
	were read by :.read.  Also, the whole business was no longer necessary
	since the SETWCS instruction is now included in the metacode in the
	frame buffer.  Removed the write/read WCS code from grcread/grcwrite,
	and added a case to GIOTR to reset the WCS when the SETWCS instruction
	is encountered in the frame being redrawn.  (7/15)

sys/libc/isatty.c
	This LIBC interface routine was the source of the bug causing <ctrl/z>
	or bye to logout of the cl, rather than printing the "use `logout' to
	log out of the CL" message - end of file must always cause logout if
	the CL command input is not the terminal.  The recent introduction of
	the new VOS virtual terminal driver ZFIOTT was causing the isatty()
	test to fail, since isatty() was using the driver associated with the
	stream to determine if the stream was connected to a terminal.
	Modified isatty() to recognize either ZFIOTY or ZFIOTT as a terminal
	driver.  (7/15)

 vms/hlib/libc/knames.h
 vms/hlib/libc/knames.no_
unix/hlib/libc/knames.h
unix/hlib/libc/knames.no_
	Added an entry for ZGETTT to these files.  Put the define in knames
	rather than xnames since it is a kernel driver, even though it resides
	in the VOS rather than the kernel.  (7/15)

pkg/cl/binop.c
	The STRIDX function would not work properly when there was more than
	one character in the first argument string (had to invert the nested
	loop).  (7/15)

lib/gio.h
sys/etc/oscmd.x
sys/gio/sgikern/sgk.x
sys/gio/cursor/prpsio.x
sys/gio/cursor/proscmd.x
sys/gio/cursor/gtrdiscon.x
	The SGI kernel relys upon the use of the ZOSCMD facility to permit
	use of a host or foreign task to dispose of the metacode or raster
	file to a host plotter device.  This was a problem on VMS since the
	VMS version os ZOSCMD cannot be called from a subprocess; only the
	root (CL) process can spawn a sub-DCL.

	To get around this problem OSCMD now determines whether the calling
	process is a connected subprocess, and if so, sends the OS command to
	the parent process via CLOUT, as a command line of the form "!oscmd".
	The PRPSIO and GTR_DISCONNECT routines (which handle the pseudofile
	XMIT/XFER requests) were modified to intercept OS escapes and process
	them directly.  Synchronization is achieved by returning the ZOSCMD
	exit status via IPC to the OSCMD procedure in the subprocess.
	If necessary the command will be passed all the way back up a
	multilevel process tree to the root process before submission to the
	host system.  Note that these semantics are available only in the
	VOS routine OSCMD; the kernel routine ZOSCMD will always try to send
	a command directly to the host system.  (7/16)

sys/gio/glabax/glbencode.x
	This routine trims insignficant trailing zeros and decimal points from
	tick labels to produce a more concise label.  This led to a bug in
	exponential format, as a label such as 1.0E10 would be trimmed to
	"1.0E1".  (7/16)

sys/imio/imt.x
	The image template code will automatically escape any image notation
	metacharacters present in the filename returned from the FNT package.
	This was causing the @listfile type of image template to fail since
	the image templace code thought the [...] sections in the image
	listfile were part of the filename, and would escape them, causing
	IMIO to interpret them as part of the filename rather than section,
	and hence fail to find the image.  This was fixed by turning off
	all image template translation of the strings returned from a listfile,
	hence any escapes needed must be explicitly included in the listfile
	elements.  (7/16)

-------------------------------------------
VMS/IRAF system updated from lyra. (7/16)

vms/os/net/zfioks.c
	Changed the "Password:" prompt to "Password (user@node):" so that the
	user will know which login and node the password is being requested
	for when spawning a kernel server on a remote node.  (7/17)

pkg/system/page.x
	Fixed a bug that would cause the last line in the file to be repeated
	when a continuation keystroke is erroneously entered at the end of file.
	Modified page to quit without a prompt when displaying a single file
	small enough to fit all on one screen.  Smartened up the ":line N"
	syntax to permit omission of the space, and added a [+/-]N syntax for
	relative offsets.  Finally gave in to the temptation and added
	backwards movement in files (but not in pipes yet), e.g., `u' (up) is
	the opposite of `d' (down), `k' goes up a line while `j' goes down,
	and so on.  (7/17)

pkg/system/lineoff.x +
	Added a new package LNO (line offset package) in the SYSTEM directory
	for keeping track of the file offsets of a subset of the lines in a
	text file.  This is used by the PAGE program but is a general purpose
	package which can be copied and reused in other similar programs.

		  lp = lno_open (maxlines)
		      lno_close (lp)
		       lno_save (lp, line, loffset, ltag)
	     OK|ERR = lno_fetch (lp, line, loffset, ltag)

	The package does not actually know anything about text files - its'
	function is to associate a pair of long integer tag values (the file
	offset and some other value) with each of a set of up to maxlines
	integer keys (the line numbers).  (7/17)

pkg/cl/*
	The current PAGE program cannot be used in the keystroke drive mode
	when reading from a pipe, since the only way a subprocess can read
	from the terminal in raw mode in by reading from an unredirected STDIN
	in raw mode.  After some study it appears that the best solution to
	this problem is to add a new parameter type to the CL which reads from
	the terminal in raw mode to satisfy a query.  This avoids the use of
	STDIN, eliminates the need to mess with raw mode in simple keystroke
	driven programs, eliminates the need to worry about UCASEIN mode in
	every keystroke driven program, makes keystroke driven interaction
	possible in CL scripts, and so on.

	Accordingly, a new abstract datatype UKEY has been added to the CL.
	UKEY is identical to GCUR except in the way the query is performed
	and in the format of the returned value string.  Also in analogy to
	GCUR, a new list-structured parameter `ukey' has been added to the
	CL global parameter set.  Referencing the `cl.ukey' parameter (or any
	parameter of type UKEY) in an expression will cause a raw mode
	keyboard read, e.g.,

		= ukey
	or
		while (fscan (cl.ukey, key, strval) != EOF)
		    ...

	A UKEY type parameter returns a "struct" value (i.e., a string) with
	the format

		key [strval]

	where the `strval' is the null string unless the key is :, i.e.,
	a colon escape as in cursor mode.  A new CLIO procedure CLGKEY will
	be added to CLIO in analogy to CLGCUR for use in keystroke driven
	loops in applications programs.  (7/18)

sys/clio/clgkey.x +
	Added the CLGKEY function to CLIO.  The function of CLGKEY is to
	perform a raw mode read of a keystroke from the keyboard on the
	user terminal.  Single keystrokes are not echoed and the cursor is
	not moved.  The key ":" causes the cursor to move to the beginning
	of the current line, the ": " prompt to be issued, and the `strval'
	to be read.  KEY is returned an integer value.  EOF is returned if
	end of file is detected on the input list, or if the key <ctrl/z>
	or <ctrl/d> is typed.  Interrupts are disabled during a raw mode
	keystroke read, hence interrupt <ctrl/c> is returned as \003.

		nitems|EOF = clgkey (param, key, strval, maxch)

	CLGKEY is equivalent to CLGCUR except that the coordinate information
	is omitted.  CLGKEY flushes any buffered STDOUT or STDERR output before
	reading from the terminal.  The CL parameter may be local to the
	calling task and of type "*ukey" to permit redirection of keyboard
	input to a list file.  (7/19)

pkg/system/page.x
	Modifed PAGE to use the new CLGKEY facilities so that the keystroke
	driven interface is available in pipes as well as on disk files.
	Added a pattern searching capability, accessed via the colon escape
	":/<pattern>" rather than with a simple / as one might expect
	(because the clgkey interface only supports string arguments for
	colon escapes).

	PAGE is now fairly complete except for backwards movements in pipes,
	which would require buffering of the input data, and except for
	upscrolling, which is currently not implemented (backwards motions
	are implemented by repainting the full screen).  The revisions to PAGE
	have already consumed so much time that I suppose I should have just
	scrapped the original program and written a new, fully featured one
	from scratch.  (7/19)

pkg/system/help.x
	Modifed to use CLGKEY.  (7/19)

pkg/system/doc/page.hlp
	Updated this manual page.  (7/19)

unix/os/zfiotx.c
	Changed the ioctl TIOCSETP to TIOCSETN to avoid discarding pending
	terminal input when switching to "raw" mode (`cooked' in unix).
	This makes type ahead possible in programs like PAGE and HELP which
	are constantly switching between the raw and normal terminal modes.
	It may also make cursor reads safer, since it might be possible for
	a terminal to begin transmitting the cursor value sequence before
	the program switches to raw mode, causing part of the return value
	to be lost.  (7/19)

--------------
Upgraded vms/iraf (7/19).

sys/tty/ttyputl.x
	The optimized code was breaking long lines and writing them out in
	chunks the width of the terminal screen, but was not adding a newline
	at the end of each output line, hence text was being lost on terminals
	not set to wraparound in hardware.  (7/20)

pkg/system/count.x
	The line count would be off when counting a file containing lines
	longer than SZ_LINE.  Modified to bump the line counter only when
	newline is seen.  In general, however, IRAF cannot be expected to
	work correctly on text files containing very long lines.  (7/20)

local/tasks/README
	The old README file in this directory was copied from PROTO and was
	useless.  Replaced it by a new README file explaining what the LOCAL
	package is, and outlining the steps to be taken to install a new
	task.  (7/20)

unix/boot/mkpkg/char.c
 vms/boot/mkpkg/char.c
	In k_fgets(), return NULL rather than `ch' if a read error occurs.
	(7/20)

pkg/cl/modes.c
	In proc_params(), if called for a procedure with a null argument
	list, will now initialize to hidden the mode of all parameters for
	which the mode was not explicitly set when declared.  Formerly,
	such parameters would end up with a default mode of auto.  (7/20)

sys/imio/iki/stf/stfrgpb.x
sys/imio/iki/stf/stfwgpb.x
	Added support for a boolean/logical data type.  (7/20)

sys/imio/iki/stf/stfopen.x
	For the moment, modified to always reblock the old header in a
	NEW_COPY operation, else an VMS/RMS file write error may occur
	when updating the header.  This should probably be done at update
	time instead.  (7/20)

pkg/system/page.x
	Fixed PAGE to run noninteractively if its STDOUT has been redirected.
	Unfortunately, this redirection test fails when PAGE is called from
	another task such as NEWS, and the output of the calling task has
	been redirected.  No easy solution to this at present.  (7/20)

sys/imio/iki/stf/stfwgpb.x
	Was not blank filling character variables when updating the group
	parameter block.  (7/20)

--------------------
vms/iraf updated (7/20)

vms/boot/spp/xc.c
	In mktemp(), added a `static' to the declaration for the char buffer
	in which the output filename goes.  (7/21)

doc/suniraf.hlp
doc/unixiraf.hlp
doc/vmsiraf.hlp [MISSING?]
	Moved the installation guides to the doc directory so that they won't
	get lost (but where is the VMS one?).  (7/21)

doc/ports/*
	Moved all the old notes files from the LOCAL directory in VMS/IRAF to
	the doc/ports archive.  Deleted some other old files in LOCAL.  (7/21)

sys/fio/ungetline.x
	Fixed typo: `fiodes (fd)' -> `fiodes[fd]'.  (7/21)

sys/fio/fcanpb.x +
sys/fio/*
	Added a new FIO internal procedure fcanpb(fd), called to cancel out
	any pushback and return the file i/o pointers to their normal state.
	Added calls to this procedure in various places throughout FIO.
	The new routine is a no-op if there is no pushback, so this should be
	relatively risk free.  This was found by the new PAGE program, which
	is one of the few programs to use the FIO pushback facilities.  (7/21)

vms/os/qio.c
	This bug showed up in MTIO, which was not seeing the end-of-tape mark,
	causing the tape to run off the end of the reel, or worse, the
	program to appear to work while actually writing nothing at the end
	of the tape.  The AST routine was returning a count of zero when
	end-of-tape was encountered, causing _zflush() to return a zero in
	the same circumstance, when this was really an error condition.
	Modified so that _zflush() returns XERR when an end-of-file status
	is returned in a write operation.  (7/21)

sys/mtio/mtrdlock.x
	If the lock file does not exist or cannot be read from some reason,
	a new lock file will now be written and the position will be returned
	as undefined, causing MTOPEN to rewind the drive.  The new MTIO will
	do i/o to the drive even if the lock file does not exist, but would
	abort at close time since the lock file must exist to be updated.
	Creating a new lock file at open time should permit i/o even if the
	drive has not been allocated within IRAF.  (7/21)

sys/imio/imaccess.x
	This new function (currently unused) was calling iki_access() with
	the wrong number of arguments.  (7/22)

imfit/fit1d.x
imfit/t_lineclean.x
imutil/imdelete.x
	The above tasks were all incorrectly using the FIO access() function
	to test for the existence of images.  Replaced by a call to the
	imaccess() function.  (7/22)

MTIO - discussion
	A number of changes were made to fix some problems/complaints received
	in past months regarding MTIO.  There was a bug where the user would
	allocate/mount the tape in VMS, get into IRAF, run a program which
	would successfully do i/o to the drive (this would work) and then
	when it was all done, an "cannot close file" error would occur.
	This would happen because the kernel level MTIO routine called to
	udpate the tape position needs the old lock file to update the tape
	position in the lock file.  The fact that the drive was allocated
	outside of IRAF is not really a problem because the new allocation
	software in the CL knows if a device is allocated/mounted, regardless
	of whether this was done in IRAF or the host system.

	MTIO was modified in such a way that it should no longer matter
	whether the user allocates the drive in IRAF or before running the CL
	(I'm not sure what happens if an OS escape is used; did not test that).
	If there is no lock file because the drive was allocated/mounted at
	the host level, MTIO will simply write a new lock file which records
	the tape position as undefined.  The following changes were made to
	implement this scheme.

mtio/mtalloc.x
	Changed to record the initial tape position as file 0 (position
	undefined) rather than file 1, since we do not really know how
	the tape is positioned at allocate time.  Setting the tape position
	to 0 in the lock file is harmless; the effect is to require MTOPEN
	to rewind the tape to get to a known position at open time.  This
	change will be visible to the user who runs `devstatus' after
	allocating the tape drive.  (7/22)

mtio/mtrewind.x
mtio/mtstatus.x
	If called when there is no "lock" (save-position) file, will now
	write one indicating that the position is undefined, rather than
	abort.  In the case of mtrewind, it is then immediately updated
	to indicate that the tape is at file 1.  (7/22)

unix/hlib/login.cl
 vms/hlib/login.cl
	After the call to TYPE to type the message of the day, added a call
	to DELETE to delete any old "mt?.lok" files in UPARM.  This is
	essential, as otherwise MTIO might use an old lock file for a new
	tape and erroneously position to the wrong file.  The delete operation
	is performed at login time rather than logout time because [1] doing
	it at logout is not safe, as the CL or host may crash and never go
	through logout, [2] login takes so long the extra time will not be
	noticed, [3] the call to DELETE occurs immediately after the call to
	TYPE to type the message of the day and immediately after connecting
	the subprocess, hence everything will be paged in and it should go
	fast.  It would have been nicer to do this in hlib$clpackage.cl,
	but that is not possible since UPARM is not yet defined when that
	file is read.  (7/22)

sys/mtio/mtdevall.x +
sys/mtio/mtopen.x
sys/mtio/mtrewind.x
	Added a new internal routine mt_devallocated() to MTIO.  This is called
	by MTOPEN and MTREWIND to ensure that the drive has been physically
	allocated before proceeding further.  This is necessary because the
	presence of the "lock" file can no longer be used to test if the device
	has been allocated.  If the device has not been allocated a message
	is printed to that effect, rather than proceeding further and printing
	a misleading i/o error etc. message.  (7/22)

unix/hlib/stripper
unix/hlib/stripall
 vms/hlib/stripper
 vms/hlib/stripall
	Will no longer delete the .hd files or the .key.  A number of other
	protected extensions were dropped and replaced by the single
	extension .dat.  (7/22)

----------------------------------------------------
Snapshot of new V2.3 system sent to CTIO.

sys/etc/xalloc.x
	In xdeallocate(), the MTIO deallocate command was being called after
	the device was deallocated at the host level.  This was backwards
	because the MTIO routine may rewind the device, hence must be called
	before the device is physically deallocated (dismounted).  (7/23)

sys/mtio/mtrdlock.x
	When called with no lock file present, mt_allocate() was being called
	with the drive name minus the "mt" prefix, e.g., device "b" rather
	than "mtb".  (7/23)

----------------------------------------------------
Snapshot of new V2.3 system sent to STScI.

sys/imio/imsetr.x
	The variable `ibdes' is used to test if an input buffer descriptor
	had been allocated before NBUFS was changed, as a new one must be
	allocated in that case after the change.  The bug was that the old
	one was being freed by an `mfree (ibdes, ...)' which zeros `ibdes',
	causing the test to fail.  Replaced the ibdes by IM_IBDES in the
	call to mfree.  This bug would cause the FIXPIX task to fail,
	since this wierd task likes to change the value of NBUFS after
	doing i/o on the image (technically illegal but I am trying to
	make it more user proof).  (7/23)

sys/imio/iki/iki.h
sys/imio/iki/ikiparse.x
sys/imio/iki/stf/*.*;*
	It turns out that the ST folks have reserved an entire large class
	of filename extensions for their images, rather than a finite set.
	The legal header extensions are ".??h" and the matching pixel file
	extensions are the same with a "d" as the last character.  Modified
	the iki_parse() routine and various routines in the STF package to
	implement this scheme.  Since IKI checks for an OIF (.imh) image type
	first, it will recognize OIF images even though the OIF extension
	is a legal STF extension.

	Only the changes to the iki_parse() routine affect OIF format images,
	and the iki_parse() routine has been tested as a unit, hence bugs may
	have been introduced into the STF interface, but the changes do not
	require retesting of the IRAF image operators.  (7/23-24)

dev/devices [VMS/IRAF]
	Added an entry for `mtg' (MSC0:), the TS11 recently added to the DRACO
	cluster.  (7/24)

dev/graphcap
vms/gdev/sgidev/*
vms/hlib/irafuser.com
	Several system revisions were made over the past week or so to install
	the SGI translators.  I have waited until now to document this so that
	testing of the new interface could be completed.

	An SGI translator is a host system program which disposes of an SGI
	metacode or bitmap raster file to a specific device.  The programs
	may be as host specific as desired; for VMS, we have written a couple
	template programs for the versatec (bitmap interface) and the calcomp
	(metacode interface) which are VMS Fortran with all the extensions
	and even a little assembler in places if necessary.  Similar programs
	can be written at user sites with little or no knowledge of IRAF
	internals.  The translator programs are only a few pages of Fortran,
	most of which can be reused for new devices.

	The source for these programs resides in vms$gdev/sgidev.
	The mkpkg.com and mkpkg in this directory compile and link the
	translators and install them in hlib$.  A graphcap entry must be
	added to dev$graphcap and a VMS foreign task declaration must be
	added to irafuser.com, then the device is fully interfaced and
	available for use with all IRAF graphics software.  (7/24)

vms/os/zopcpr.c
	In prinit(), called to get the quotas of the parent process when the
	first subprocess is spawned, the value of the parent's WSEXTENT was
	being assigned into the wrong slot of the `quotas' array, causing
	this feature to fail.  Fixed this bug and added additional entries
	for WSDEFAULT and WSQUOTA, so that the subprocess will inherit
	all these nondeductable quotas from the parent.  The system default
	working set of 200 is hopeless for IRAF processes; on a busy system,
	large memory batch jobs, for example, will quickly gobble up the
	pages of an idle x_system.e, causing little system tasks (like DIR)
	to take a minute or so to run each time.  It seems better to let
	the user/system manager control the working set parameters for the
	entire process tree (on a per-user basis depending upon what they
	need) rather than only for the CL process.  (7/24)

vms/os/zoscmd.c
	Added a badly needed multiple-command capability to the VMS ZOSCMD
	kernel procedure.  The command separator character chosen was the
	DCL comment character !, which is not likely to be useful in the
	context of OS escapes.  For example,

		cl> !show time !show users

	would issue the two commands "show time " and "show users" in that
	order.  This may eliminate the need to use a DCL .com file in some
	applications, possibly simplifying and condensing table driven
	interfaces, and making things somewhat more efficient.  The feature
	should be useful in foreign task definitions, the editor interfaces,
	the graphcap entries for SGI devices, and other places where OS
	commands are used.  The revision was made to the VMS kernel procedure
	rather than to etc$oscmd.x for reasons of efficiency, to avoid the
	blank line output to the terminal after every command by the VMS
	ZOSCMD, and to permit selection of a metacharacter suitable for the
	host system.  (7/24)

vms/hlib/irafuser.com
vms/hlib/mkiraf.com
	Deleted the temporary workaround logical IRAFTEMP, replacing it by
	IMDIRDISK and TEMPDISK.  There are now three system logicals which
	must be set up in IRAFUSER.COM, e.g.:

	    IRAFDISK   USR$0:		! Disk IRAF resides on
	    TEMPDISK   SCR$2:		! Runtime (scratch) files go here
	    IMDIRDISK  SCR$1:		! User image subdirectories go here

	IRAFTMP is now defined in a site independent way in terms of these
	logicals, like IRAFHOST, IRAFHLIB, and so on:

	    IRAFTMP    TEMPDISK:[IRAF]	! scratch files

	This should help to eliminate any confusion about when and when not
	to escape $ characters, since this is no longer necessary for anything
	in IRAFUSER.COM.  The MKIRAF script will automatically escape the $
	when generating the user login.cl file.  MKIRAF now creates the default
	user image storage (IMDIR) directory as IMDIRDISK:[USER] rather than as
	IMDIRDISK:[IRAF.USER], since this appears to be closer to the way
	things are usually done in VMS.

	TEMPDISK and IMDIRDISK are no longer the same as IRAF uses tmp$ (on
	TEMPDISK) for runtime scratch files that can be deleted on a daily
	basis if desired, whereas the image pixel files may need to be kept
	around longer.  Files created by IRAF in tmp$ are normally deleted
	immediately by IRAF unless a program is aborted, in which case the
	host system is expected to clean things up.  That is why a public
	device is preferred for TEMPDISK.

	Sites which do not permit public directories or devices will have to
	make IRAFTMP point to a user directory.  This can be done in many ways,
	e.g., by defining IRAFTMP in the user's LOGIN.COM file.  IMDIR is only
	used by the runtime IRAF system, hence need only be defined in the
	user's login.cl, where it can be set to any of a number of values,
	e.g., `uparm$', `home$imdir/', `HDR$', or `HDR$pixels/'.  If the user
	has their own private IRAFTMP it will probably not be the same as the
	value in the installed version of <iraf.h>, but this may not be a
	problem as the latter may not be accessed except by the IRAF login
	when doing heavy duty operations with the HSI, e.g., sysgens.  (7/24)

vms/os/zopcpr.c [discussion]
	The system paging activity seems much improved following yesterday's
	change to ZOPCPR (to pass the parent's working set parameters on to
	the child).  Formerly, the child would inherit the system default
	WSQUOTA of 200 and a WSEXTENT of 1024 (due to the bug).  A busy
	process would fault up to 1024 and then rapidly drop back to 200,
	causing virtually the entire process to have to be paged back in
	every time a task was run in the process.  Since other VMS processes
	would often have much larger quotas, the performance of the IRAF
	processes would seem poor by comparison.  Things should be improved
	somewhat now, with the next major improvement to come if and when
	shareable libraries are introduced.  (7/25)

dev/graphcap
	In the entry for the 4014, added a | and a comment after the `tek4014'
	on the header line so that the device name `tek4014' would be usable
	externally.  (7/25)

vms/os/net/zfioks.c
	Replaced the recently introduced (mistakenly) call to sprintf() by an
	equivalent series of calls to strcpy() and strcat(), to avoid use of
	the DEC C runtime library.  (7/25)

pkg/cl/modes.c
pkg/cl/gquery.c
	Deleted the `%newmode' feature, used to change the mode of a parameter
	in response to a query.  This feature has not proven useful (it is
	inadvisable to change the mode of a parameter in any case) and has
	lately become a problem since % is now used as the string edit
	metacharacter in image templates.  Responding to a query for an image
	template with a perfectly legal template, e.g., `%im%im_%...' would
	cause an obscure `bad mode spec' error message.  If anyone ever wants
	to change the mode of a parameter they can still do so by an explicit
	assignment into the .p_mode field of the parameter.  (7/25)

-----------------------------------------------
Partial updates sent to CTIO, STScI  (7/28 am)

doc/vmsiraf.hlp +
	Found a copy of the VMS installation guide in a scratch directory on
	another computer.  Dusted it off and put it in the DOC library.  (7/28)

sys/gio/sgikern/sgk.x
sys/gio/sgikern/sgk.com
sys/gio/sgikern/sgipl.x
sys/gio/sgikern/ltype.dat +
sys/gio/sgikern/mkpkg
	Added software generation of polyline linetypes (dotted, dashed, etc.)
	to the SGI kernel.  Added a new SGI graphcap parameter NB, specifying
	the number of bits per byte for packing the output raster data.  Also
	added more documentation in the file describing the meaning of all the
	parameters used to control the generation of bitmaps.  (7/28)

sys/etc/xalloc.x
	The ZDVOWN kernel primitive was being passed the device list string
	from the dev$devices file when the host device name was intended.
	This would work fine on VMS since the device list on that system
	contains only one device name, but on UNIX there are many /dev entries
	for each physical drive hence it would fail.  (7/29)

sys/osb/bitfields.c
sys/osb/zzdebug.x
	The portable versions of BITPAK and BITUPK in bitfields.c were overly
	general, allowing bitfields to be read and written in a bit array of
	arbitrary length.  Since the assembler versions are currently limited
	to operations upon integer scalars, the bit-array generality was not
	needed and I replaced bitfields.c by a simpler and more efficient
	version which only deals with a single longword at a time.  Brought
	the zzdebug.x up to date as well.  (7/30)

pkg/xtools/icfit/doc
noao/onedspec/identify/icfit/doc
noao/onedspec/identify/uparmbkgXXX
	Deleted these garbage files.  The DOC files were regular binary files
	that were once UNIX directory files.  (7/30)

sys/imio/imsetr.x
	Yet another imset(IM_NBUFS,.. bug.  Must reset IM_NGET(im) to zero
	when the number of buffers is changed.  (7/30)

iraf/local/notes.st		[UNIX]
iraf/local/suninstall.hlp	[UNIX]
	Deleted these files as there are already copies in doc$.  (7/30)

iraf/local/login.com		[VMS]
vms/hlib/mkpkg.inc		[VMS]
	Sometime back, I removed the LNK$LIBRARY reference to the C runtime
	library from the IRAF LOGIN.COM file.  This was done in case C
	library references creep into the kernel, to cause the linker to
	flag such references.  One result is that the CALCOMP kernel no
	longer links under mkpkg on VMS.  This is easy to get around on
	those rare occasions when this host system dependent executable
	needs to be relinked, until I have time to figure out the best way
	to reference sys$library:libcrtl.olb directly via mkpkg.  For now,
	turned off the USE_CALCOMP switch in the mkpkg.inc so that remote
	sites do not get the error messages when relinking the system.  (7/30)

------------------------------------------------------------------------
Cut and mailed distribution tapes for the six VMS/IRAF V2.3 early test sites.
Make UNIX source only archive tape and started SUN/IRAF upgrade.  (7/31)

vms/hlib/irafuser.com
	Changed the definition of the IRAFTMP logical from TEMPDISK:[IRAF] to
	TEMPDISK:[IRAFTMP], and changed the name of the corresponding public
	directory on our system as well.  This was purely a name change to
	avoid having multiple [IRAF] directories on different disks used for
	different purposes.  Of course, the system installer can change the
	name to anything they want if desired, since knowledge of the actual
	directory is confined to IRAFUSER.COM (and <iraf.h>).  (7/31)

unix/boot/rtar/doc
unix/boot/rtar/doc/std.ms
	Deleted this garbage test directory and the file therein.  (7/31)

pkg/dataio/fits/spool
noao/onedspec/doc/tmp
noao/onedspec/log.plotx
noao/twodspec/multispec/spool
noao/twodspec/multispec/make.log
noao/twodspec/longslit/doc/tmp
noao/twodspec/longslit/transform/spool
noao/twodspec/longslit/spool
noao/mtlocal/camera/header
	Deleted the above junk files.  (8/4)

unix/boot/rmfiles/rmfiles.c
unix/boot/rmfiles/rmfiles.hlp
	Made two modifications to the RMFILES utility: [1] the root of the
	directory to be pruned need no longer be an immediate subdirectory,
	and [2] the program file can contain lines of the form

		-file filename

	to delete individual files that do not fit into any particular class.
	This will make it possible to build stripper files that prune even
	more off the tree.  (8/4)

unix/hlib/stripper
unix/hlib/stripall
vms/hlib/stripper
vms/hlib/stripall
	Examined a list of the files left after running the original stripper
	scripts, and added entries (using the new RMFILES capabilities) to
	strip more files here and there.  In particular, did away with a lot
	more stuff in the HOST directories, and all the manual pages dealing
	with subroutines rather than CL callable tasks.  (8/4)

sys/gio/cursor/gtrgflush.x
	I may have found the old STDGRAPH/STDPLOT/STDGRAPH segmentation
	violation bug, which we have not been able to reproduce in recent
	times.  It showed up on the sun.  The GTR code caches the descriptor
	for a stream, saving the FD of stream in a variable TR_STREAM to
	indicate what is in the cache.  The low level GFLUSH routine would
	initialize a stream, but was not setting TR_STREAM to null if the
	stream being initialized was the one in the cache.  Calling GTR_INIT
	to cache the descriptor for another stream would result in the code
	trying to move the old descriptor from the cache to the dynamically
	allocated descriptor, which was deallocated by the GFLUSH, zeroing
	the pointer and causing the segmentation violation.  (8/5)

sys/gio/cursor/prpsio.x
	If an unsolicited command is received from a graphics subkernel (when
	an XMIT or XFER is expected) the command is printed on STDERR with
	a call to putline, followed by the `unsolicited command input' error
	message.  The bug was that the FIO buffer is passed to PUTLINE as
	is, and at this level in the system the string is not EOS delimited,
	causing garbage to be printed after the data string.  Modified to add
	the EOS before calling putline.  This bug would only be seen when a
	subkernel aborts for some reason.  (8/5)

sys/gio/cursor/prpsio.x
	The same problem (no EOS) as above, except this time in the string
	passed to OSCMD.  (8/5)

sys/gio/nsppkern/gktopenws.x
sys/gio/sgikern/sgiopenws.x
	When opening the first device after process spawn, the STARTFRAME
	field of the GKT/SGI descriptor was being accessed before the descriptor
	was allocated and initialized, leading to a zero-pointer bug.  (8/5)

sys/gio/sgikern/sgk.x
sys/gio/sgikern/sgk.com
	Added two new bitmap formatting options to the SGI kernel, BS and WS,
	for swapping every 2 (BS) or 4 (WS) bytes of the bitmap at output
	time.  (8/6)

dev/graphcap
	Added a `dver' entry, and the `vtri' entry from VMS/IRAF.  Tuned up
	the versatec plotting window parameters to provide a unity aspect
	ratio.  (8/6)

sys/gio/sgikern/sgk.x
sys/gio/sgikern/sgk.com
	Added yet another new SGI bitmap formatting option, NF.  The NF (new
	file) option, if set, causes the individual frames of a multiframe
	set to be written into separate files named $F.[1-MF], i.e., $F.1,
	$F.2, ..., $F.MF.  This option is also supported for metacode output.
	It makes it possible to use LPR to dispose of the raster output
	directly without a translator (on UNIX).  This is very efficient
	since no reformatting is required and the LPR job is queued.  (8/6)

	Also discovered and fixed a bug in the SGK kernel.  If XO was nonzero,
	the x scale factor was not being computed correctly, causing the plot
	to be truncated at the right.  (8/6)

sys/etc/main.x
	The iraf main would not accept redirection on STDPLOT.  Added it to a
	case statement.  (8/7)

pkg/cl/builtin.c
pkg/cl/edcap.c
pkg/cl/eparam.h
pkg/cl/globals.c
	Fixed a bug in the editor interface that would cause it to fail when
	attempting to edit more than one file at a time.  Also, string storage
	in the command list was limited to 10 and 12 characters with no overflow
	checking when the file is read in; added #defines to parameterize
	these (rather small) numbers, and modified the initialization code to
	truncate long strings rather than run off the end of the array.

	Also changed the way EDITOR_CMD (the command to be sent to the host
	system to invoke the editor) is implemented internally.  The string
	is no longer stored in the command list, since the string storage there
	is limited to only 10 characters, and EDITOR_CMD is not an editor
	command anyway.  The actual command string can now contain whitespace
	provided it is quoted, can be up to SZ_LINE chars long, and most
	importantly, may contain a %s somewhere in the string to be replaced
	by the filelist.  If no %s is present then " %s" is added at the
	end, making it all compatible with the old edcap files.

	In combination with the multiple commands per os-escape feature
	recently added, this makes it possible for the command sequence sent
	to the host system to consist of several commands with the file list
	embedded in there somewhere.  This makes it possible to eliminate
	a .COM and two wasteful process spawns from the VI editor interface
	on VMS.  (8/7)

vms/hlib/irafuser.com
vms/hlib/irafvi.com
dev/vi.ed			[VMS]
	Redid the VI interface on VMS to eliminate the use of the IRAFVI.COM
	script and the calls to STTY therein.  VI is now called with the
	following OS escape:

	    "set term/pasthru/passall!vi %s!set term/nopasthru/nopassall"

	where the %s is replaced by the list of files to be edited.  This
	speeds things up considerably and eliminates the dependence on the
	STTY task.  (8/7)

vms/boot/rmfiles.c
vms/boot/rmfiles.hlp
	Merged the new version of the RMFILES bootstrap utility into the
	VMS HSI.  The link failed the first time since the C runtime library
	was not defined as a LNK$LIBRARY: need to add defines for this to the
	bootstrap .COM files, or maybe make the user type it in.  (8/7)

----------------------------------------------------
Updated VMS/IRAF (8/7)

vms/hlib/irafuser.com
vms/hlib/sgiqueue.com +
dev/graphcap
	Modified the VMS SGI interface to submit the translation jobs to the
	`fast' queue.  This eliminated the SGI definitions in IRAFUSER.COM.
	The single command script SGIQUEUE is used for all SGI devices.  (8/8)

sys/fmtio/patmatch.x
	The match at end of line metacharacter $ will now work at EOS as well
	as at newline.  (8/8)

sys/gio/stdgraph/stgrcur.x
	Fixed the bug that was probably causing the cursor read failure where
	successive cursor reads return garbage keys.  The delimiter pattern
	(CR for the tektronix) was being matched anywhere in the returned
	cursor value string.  If a character were lost somehow, e.g., due to
	insufficient delay after sending a command to a slow terminal, then
	the cursor read routine would read 6 characters, find the CR in there
	somewhere, and accept the garbage cursor value.  The left over
	characters would cause the next cursor read to fail, and so on.
	Modified the cursor read routine to match the delimiter (CD) only
	at the END of the accumulated cursor value string, if the number of
	chars in a cursor value (CN) is positive.  More precisely, if CN > 0,
	the cursor value will be accepted if len(valstr) >= CN and the pattern
	CD//$ matches valstr.  (8/8)

	Fixed a second bug: the routine is designed to restart the cursor if
	a cursor value still has not been matched after 15 characters have
	been accumulated.  Instead, it was decoding the 15 character garbage
	value and returning (usually harmless, as the program would beep and
	the cursor would be restarted).  Modified to discard the input and
	restart the cursor read without returning.  (8/8)

	(USER NOTE - if you lose the cursor for some reason, type any key  )
	(except [RETURN] until the cursor comes back.                      )

dev/graphcap
dev/cacheg.dat (rebuilt)
	The above bug was discovered due to the lack of soft delays (null
	padding) in the graphcap entry for the VT640.  The symptom was that
	the cursor value was coming back minus the first character.  What
	was happening was that graphics was being deactivated, a couple
	of lines of text output were written, and then graphics was immediately
	reactivated and a cursor read issued.  It was taking the terminal a
	while to draw all the text, and this was still going on when the
	graphics add-on board was reactivated, causing the cursor read to
	terminate early.  The above fix to the read cursor routine ensures
	recovery, but to avoid the cursor read failure I added a 150 msec delay
	to the GE (reactivate workstation or graphics enable) graphcap entry
	for the VT640 and several other terminals.  (8/8)

dev/README
dev/vdmfile.gki
dev/vdmplot.gki
	Replaced dev$mc by a file dev$vdm.gki containing a slightly different
	selection of plots.  Rewrote the README file for the directory as it
	was completely out of date - it now contains some useful information
	about the files in the directory.  (8/8)

sys/gio/cursor/gtrinit.x
	If a very large plot is processed, the cursor mode frame buffer will
	overflow and data will be discarded.  An environment variable is
	available to the user to increase the maximum size of the frame
	buffer should this be a problem.  Changed the name from the rather
	verbose and non specific `maxlenframebuf' to `cmbuflen' (goes with
	`cminit').  Name change should be no problem as I don't think anyone
	knew about this parameter.  (8/8)

pkg/cl/history.c
	At long last, brought the argument substitution feature of the history
	mechanism up to date, i.e., modified it to work on whitespace rather
	than comma delimited argument lists.  Also added the ability to specify
	arguments by number (^[0-9]).  The possible argument symbols and their
	meanings are therefore now:

		^^	first argument of last command
		^$	last argument of last command
		^*	all arguments of last command
		^0	taskname of last command
		^N	argument N of last command (1 <= N <= 9)

	This conventional CSH-like history mechanism, simple as it is, is often
	much more effective than the history editor and it is a pity that more
	people do not know how to use it.  (8/9)

vms/boot/*/mkpkg.com
vms/boot/spp/*/mkpkg.com
	Have not tried a full bootstrap of the VMS/HSI for a while, so thought
	I had better make sure it still works before V2.3 goes out.  Made the
	following changes first:

	[1] To all MKPKG.COM and MKPKG files which call the linker, added a
	    DEFINE/NOLOG LNK$LIBRARY entry to cause the linker to search the
	    C runtime library, required by the current version of the VMS/HSI
	    (but not by the runtime system).  This was necessary because the
	    original define statement was recently removed from the IRAF
	    LOGIN.COM file to prevent references to the C rtl from accidentally
	    creeping into the runtime system.
	
	[2] In all HSI linker calls, added the switch /NOSYSSHR.  This
	    causes the system object modules referenced by the HSI
	    executables to be copied into the new executable, rather than
	    using an indirect reference to the system shareable library.
	    The effect is to make each executable about 40 Kb larger,
	    but rumour has it that these executables will run on older
	    versions of VMS without relinking.  If true, this makes the
	    entire IRAF system runnable on old versions of VMS, since the
	    runtime system can be relinked with MKPKG provided the HSI is
	    runnable.

	[3] In the RPP mkpkg.com, fixed a bug in the IF (...) THEN GOTO LINK
	    which would cause the library to always be rebuilt.

	Ran MKPKG on boot/bootlib and boot/mkpkg to make the .MLB files,
	purged all and lib/compress-ed the new libraries in HLIB.  (8/9)

------------------------------------------
VMS/IRAF updated from lyra.
Sysgen performed (also served to test rebuilt HSI).  (8/9)

doc/*.doc
	Deleted; can be regenerated from the .hlp.  (8/11)

doc/cluser.tex
doc/cluser/*
	Installed the manuscript for the V2.3 CL User's Guide.  Deleted the
	entire cluser subdirectory, only the TEX file is needed.  (8/11)

osb/mkpkg
lib/libvops.a
osb/miiread[csi].x -
osb/miiwrite[csi].x -
etc/mkpkg
etc/miiread[csi].x +
etc/miiwrite[csi].x +
	The miiread and miiwrite procedures use FIO and hence cannot be in the
	VOPS library (OSB), else a linker unresolved reference will occur.
	In any case, they are portable and do not need to be in OSB, so moved
	them to ETC.  The potentially machine dependent MII primitives remain
	in OSB.  (8/11)

sys/gio/stdgraph/t_showcap.x
	Fixed an argument type mismatch: `call pargc (char (intval))' does
	not coerce the argument to type char due to limitations in the
	preprocessor.  The solution was to eliminate the call to CHAR, and
	replace the PARGC by a PARGI.  (8/12)

pkg/system/directory.x
	Fixed a portability bug, discovered on AOS/IRAF.  The dir_putci()
	routine, which has a boolean argument, was being called with an integer
	argument in one case.  Changed the argument type to integer.  (8/12)

dev/graphcap
vms/gdev/mkpkg
vms/gdev/mkpkg.com
vms/gdev/sgi2vptx.f +
vms/hlib/sgiqueue.com
	Installed the SGI translator for the Printronix on VMS.  (8/12)

vms/gdev/iism75/m75put.x
vms/gdev/iism75/zrdm75.x
	The M70 has an 10 bit DAC driving the guns, whereas the M75 only has
	an 8 bit DAC.  Modified these routines to scale the 10 bit M70 OFM
	values to and from 8 bits for the M75.  (8/12)

pkg/images/tv/display/iisofm.x
	Modified to set the full 1024 elements of the lookup table; formerly
	it was setting only the first 256 elements.  (8/12)

unix/os/mkpkg.csh
	In checking out IMFORT in the new system, the link failed due to the
	undefined external irafmn_.  This turned out to be be due to the
	presence of zmain.o in libos.a.  The zmain.o module contains a C
	main(), which was being selected in preference to the Fortran main().
	This occurred because zmain.c got installed in the library during
	the bootstrap by mkpkg.csh.  Modified the OS mkpkg.csh bootstrap so
	that this module is not inserted into the library.  (8/13)

sys/imio/iki/oif/oifdelete.x
	If the image header file is not protected, the delete would fail
	because the file protection could not be removed.  Modified to proceed
	to delete the file if it is not protected.  (8/13)

sys/imio/imfort/*
	Brought IMFORT up to date for the new IMIO.  New images are created
	with the extension .imh.  The extension is optional when referencing
	an image.  Pixel files are always created in the same directory as
	the header file (for IMFORT), so the HDR$ form of the pixfile name
	is stored in the image headers.  The IMFORT created images are not
	file protected, unlike the IMIO images, since IMFORT users may be
	working outside of the IRAF environment.  (8/13)

dev/pix.imh
	Changed the pixel file name in the image header from dev$pix.imh to
	HDR$pix.imh, since that is how the new system does this sort of thing
	(and I could not read the image from IMFORT).  (8/13)

local/noao			[VMS/IRAF]
local/noao/gmr27
	Created a new directory [LOCAL.NOAO] on VMS/IRAF and put the Grinnell
	display interface code there.  (8/13)

-----------------
Updated VMS/IRAF; rebooted VMS/IRAF; sysgen.  (8/13)

pkg/images/iminfo/imheader.x
	The size of the user area was being computed incorrectly, leading to
	STROPEN being called on a string of length zero.  Since stropen
	returns EOF at EOS, I merely changed it to call stropen with the
	length of the string as ARB.  This was the source of the problems
	with IMFORT generated images on VMS/IRAF, as these images have an
	empty user area (which is completely legal).  (8/14)

sys/fio/stropen.x
	Changed the argument string dimension from `maxch' to ARB to avoid
	a possible runtime array dimension error in VMS/IRAF.  (8/14)

============================================================================
Version 2.3 of IRAF frozen; began distribution (8/14 pm).
============================================================================

unix/boot/mkpkg/tok.c
	In getcmd(), there was still one case where $ was being recognized as
	a special character even though it occurred inside a token.  This was
	causing the OSB mkpkg file to fail in a call to $generic.  The argument
	list for $generic had a `\$$' embedded in a filename which was supposed
	to map to `\$'.  This is correct for mkpkg, because with very few
	exceptions, the only special metacharacter in mkpkg is $, and it is
	escaped by doubling (as in make).  Backslash is just another character
	in mkpkg scripts.  (8/15)

pkg/plot/doc/sgikern.hlp
	[TODO]
