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]