aboutsummaryrefslogtreecommitdiff
path: root/doc/notes.v23
diff options
context:
space:
mode:
Diffstat (limited to 'doc/notes.v23')
-rw-r--r--doc/notes.v234955
1 files changed, 4955 insertions, 0 deletions
diff --git a/doc/notes.v23 b/doc/notes.v23
new file mode 100644
index 00000000..cfc63af4
--- /dev/null
+++ b/doc/notes.v23
@@ -0,0 +1,4955 @@
+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]