From 40e5a5811c6ffce9b0974e93cdd927cbcf60c157 Mon Sep 17 00:00:00 2001 From: Joe Hunkeler Date: Tue, 11 Aug 2015 16:51:37 -0400 Subject: Repatch (from linux) of OSX IRAF --- doc/notes.v25 | 6367 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 6367 insertions(+) create mode 100644 doc/notes.v25 (limited to 'doc/notes.v25') diff --git a/doc/notes.v25 b/doc/notes.v25 new file mode 100644 index 00000000..dd9ba6c1 --- /dev/null +++ b/doc/notes.v25 @@ -0,0 +1,6367 @@ +============================================================================ +Version 2.3 of IRAF frozen; began distribution (8/14 pm). +Begin Version 2.4. +============================================================================ + +unix/boot/mkpkg/tok.c +vms/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) + +unix/boot/mkpkg/pkg.c +vms/boot/mkpkg/pkg.c + In parse_modname(), modified to map \$ or \/ (the possible vfn + directory delimiter characters) into $ and /, rather than leaving + the backslash in the filename. This did not cause a bug, but I + noticed it while fixing above bug, and it did not look right. (8/15) + +lib/*.h +lib/clpopn.h - + Deleted the file , which I don't think is used anywhere + anymore. Made minor edits to the headers of the global include files + to eliminate the blank first lines in some of the older files, and add + the filename in caps to the file header comment, so that they all look + the same. Of course, this will cause much of the system to be + recompiled, but it is time for a sysgen of the master system in any + case. (8/15) + +------------------ +Full bootstrap and sysgen (from the sources) of UNIX/IRAF and VMS/IRAF; set up +version 2.4 of the system. SUN/IRAF updated to V2.3. (8/15-16) + +local/mkpkg + [VMS] + Added a mkpkg file to the LOCAL directory on VMS, so that a sysgen + will find its way into the local/tasks directory. (8/16) + +dev/graphcap + Deleted the `co' and `li' entries from the SGI graphcap entry for the + versatec; don't see why these would be needed for this device. (8/17) + +unix/os/zfiomt.c + In zzrfmt(), the read packet size of 32 would cause read() to return + ERR on the Sun when reading a large record, whereas it would return + 32 on the VAX. Changed the 32 to 32768 to ensure that it is larger + than the maximum record size on the tape. This is a pretty big buffer + to put on the hardware stack, but it should be safe. (8/19) + +-------------------------- +No system modifications during the period 20 August through 5 September. +(At DAO doing the port of IRAF to the Alliant vector superminicomputer). + +pkg/plot/doc/sgikern.hlp + Updated the manual page for the `sgikern' task. (9/6) + +sys/osb/f77upk.f + Added stripping of the blank fill at the right to the F77UPK primitive. + The F77PAK primitive already blank pads at the right, so F77UPK ought + to remove the padding. Use CHRUPK if this is not desired. (9/6) + +pkg/utilities/split.x + + Added a new task SPLIT to the utilities package. SPLIT is used to + break large, unmanageable files up into smaller files. (9/6) + +pkg/plot/mkpkg +pkg/utilities/mkpkg + I am not happy with either the ..x.e or ..1.e suffixes currently in + use to flag temporary package local executables before installation. + The former does not stand out enough, and the latter does not suggest + its purpose. Changed the above packages to use an "xx_" prefix instead. + The "xx_" prefix means "test (experimental) executable". (9/6) + +doc/ports/alliant_86.doc + Installed the notes file from the Alliant port. There was some + problem with the backup/tar file I made on the Alliant, hence it was + not easy to get the notes file off the tape. I had to use the new + SPLIT task to split the 24 Mb archive into 49 512000 byte segments, + and eventually determined that the notes file was at line 11115 of + segment 39! The problems with the tape are almost certainly not with + the tape itself, since I did a backup/compare at DAO, and backup did + not report any problems when the tape was read. + + I think the most likely culprit is the FTP software, which had to be + used to move the archive to the VMS VAX, since the DAO Alliant did not + have a tape drive. FTP (binary mode) insisted on making a file with + an undefined VMS record type; this would cause RTAR to crash the VAX + if I tried to look at the file on the VMS VAX at DAO. The 24 Mb archive + file has one enormous section of about 3.5 Mb which is all zeroes, + causing tar (or rtar) to get a premature end-of-tar indication (two + zeroed file blocks). I tried the exact same operation (with a smaller + test file) using our Eunice FTP and everything worked fine. The DAO + TELNET also gave problems; it would hang up if fed too much data too + fast, and would occasionally crash with a stack trace. Based on these + experiences, I would certainly have to recommend the Wollongong + networking software over the other vendor. (9/6) + +--------------- +Begin merge of fixes from Alliant/IRAF port. + +unix/hlib/i1mach.f +unix/hlib/r1mach.f + Commented out calls to ULIBER. (9/7) + +unix/mc68000/zsvjmp.FX + + Added the zsvjmp/zdojmp code for the Alliant. (9/7) + +unix/os/zgtime.c +unix/os/gmttolst.c +unix/boot/bootlib/ostime.c + Changed all references to the 4.2BSD include to . + There is also a file on our system and on the Sun, but the + form appears to be the standard. (9/7) + +unix/os/zxwhen.c + The hardware exception list in this code is very hardware dependent + and often needs to be changed for a new UNIX host, so I replaced the + code by a version which is set up to make it easy to add a machine + dependent list of hardware exceptions. The default exceptions are + those for the VAX. Also replaced the symbol `vector' by `vvector' + as on the Alliant, since the latter serves our purposes just as well. + (9/7) + +unix/os/zfiomt.c + To zzrfmt_() (skip record forward), added a comments section noting + the portability aspects of the routine, which has failed on three + machines thus far (due to differences in the device drivers or C + compilers). Changed the size of the auto buffer from 32768 to 29184, + since the former cause a compile time error on the Alliant. This + means that the largest tape block size UNIX/IRAF can handle is + something close to but less than the 15 bit unsigned limit (32768). + For example, 28800, i.e., FITS blocked to 10, is acceptable. (9/7) + +unix/boot/spp/rpp/ratlibf/dsfree.f + On line 20, the hollerith string contained a tab where a space was + intended. (9/7) + +unix/boot/mkpkg +unix/boot/bootlib/mkpkg.csh + Figured out a way to replace the CSH script mkpkg.csh in bootlib + by a equivalent series of SH commands, one per line, so that the + "sh -x mkpkg.csh" construct used throughout the rest of the unix + bootstrap can be used in this case too. Besides being more consistent, + this is safer, because the bootstrap no longer depends upon execute + permission on the bootlib mkpkg.csh file. (9/7) + +sys/gio/gki/gkigca.x + The min() intrinsic function was being called with operands of mixed + type, i.e., int and short. Also, a Mems[] reference was missing the + `gki' pointer. (9/7) + +sys/vops/lz/mkpkg + Added $checkout etc. directives to the file header. (9/7) + +unix/boot/generic/tok.l +unix/boot/generic/generic.c + Made two fixes in the generic preprocessor: [1] changed the declaration + of the external `xtype_string' in tok.l from (char *) to (char []). + The former would work on most machines, but is not correct, and not + portable; [2] modified so that "0$f" will be expanded for type complex + to (0.0,0.0) rather than (0,0). The latter assumes that the Fortran + compiler can handle the implied type coercion, which is not true for + all compilers. (9/7) + +sys/vops/ak/a*x.x +sys/vops/lz/a*x.x + Deleted the following files so that their complex versions will be + regenerated by the new generic preprocessor in the next sysgen: + + ak/abeqki.x, ak/abgeki.x, ak/abgtki.x, ak/ableki.x, ak/abltki.x, + ak/abneki.x, ak/aclri.x, ak/adoti.x, ak/advzi.x, lz/allni.x, + lz/alogi.x, lz/arcpi.x, lz/arczi.x, lz/assqi.x, lz/asumi.x + (9/7) + +pkg/system/help/t_lroff.x + Added an extern declaration for `getline'. (9/7) + +pkg/cl/task.h + Eliminated the (unsigned) type coercion from the next_task macro. + This should not be necessary, since (char *) is already an unsigned + quantity. I checked the macro currently in use on AOS and it appears + that the unsigned coercion was causing problems on that machine too, + and that the present macro will probably work. (9/7) + +unix/hlib/mkpkg.inc +sys/vops/mkpkg + Added a new variable XVFLAGS to the global mkpkg include; these are + the compile flags for VOPS and any other vector processing packages. + Added a reference to the VOPS mkpkg to pick up the flags. (9/7) + +sys/gio/gki/gkiopen.x +sys/gio/gki/gkititle.x + The pointer `gki' was also omitted in Mems[] references in these + routines. (9/7) + +sys/fio/osfnlock.x + Changed the procedure osfn_initlock() from an integer function to + a subroutine. (9/7) + +sys/vops/amap.gx + Broke the min/max expression into two statements to fix a mixed + type problem for case short. (9/7) + +sys/osb/mkpkg +sys/osb/achtb.gc +sys/osb/achtu.gc +sys/osb/achtzb.gc +sys/osb/achtzu.gc + Modified the above files to treat type complex properly, and restored + type complex to the call to generic in the mkpkg. Also deleted some + old acht*.c files that were being referenced in the mkpkg and installed + in the library, but which were not being regenerated from .gc generic + sources. (9/7) + +sys/ki/irafks.x + Changed the procedure kserver() from an integer function to a + subroutine. (9/7) + +pkg/images/imdebug/mkimage.x + Changed the procedure immake() from an pointer function to a + subroutine. (9/7) + +pkg/images/tv/display/iiswnd.x + Contained constructs such as `max (0, lut[i])', where `lut' is a short + integer array. This caused a min/max type mismatch error. Also, a + statement had a nonfunctional C like ; at the end. (9/7) + +pkg/images/tv/cv/iism70/iishisto.x + Same problem, short integer variable `offset'. (9/7) + +pkg/images/tv/cv/iism70/iisrange.x + Lots of problems mixing int and short in calls to AND, OR. (9/7) + +pkg/images/tv/cv/iism70/zsnap.x + This module caused the fortran compiler to core dump with an internal + error; it was trying to resolve mixed int/short operands in expressions + and couldn't handle this code, evidently. (I feel much the same way + trying to read it.) + + Deleted `int min(), max()' intrinsic function declarations. Added an + itemp temporary to fix a couple min/max statements which mixed int + and short operands. (9/7) + +pkg/images/tv/cv/iism70/iishisto.x + Lots and lots of compile time problems with short variables. (9/7) + +unix/hlib/libc/kernel.h + Changed HZ from a float constant to an int constant. (9/7) + +unix/os/zgtime.c +sys/etc/sysptime.x + Rewrote the system timer code to use only integer arithmetic; there + is no good reason for low level system code to have any dependence + on floating point. (9/7) + +-------------- +(end merge of Alliant/IRAF mods and bug fixes) +(did a bootstrap and sysgen) + +sys/imio/iki/oif/oifopen.x + The oif_open procedure was setting IM_HDRFILE, but then reading the + image header from disk into the imhdr structure, overwriting the + new header file name. This would cause an invalid pixel file name + to be generated when accessing an image that used HDR$ in the + pixel file name field, but which had been moved to a new directory + or node. Modified oif_open to set IM_HDRFILE after reading in the + header from disk. (9/8) + +sys/gio/stdgraph/stgopen.x + In the call to stg_openws to open the workstation at kernel open time, + changed the mode from NEW_FILE to APPEND to avoid the screen clear + that would otherwise occur. (9/10) + +dev/termcap + Changed the entries for the noao versatec devices to use LPR rather + than VPR and /dev/vp0. (9/11) + + +LYRA UPGRADED TO 4.3BSD UNIX +Begin port of UNIX/IRAF to 4.3BSD (on aquila, 9/11/86) +------------------------------------------------------------------- + +installed new system (stripped to source only) at /tmp2/u on aquila +set .login, .cshrc up for new root +set /usr/include/iraf.h to point to new system +old command links in /local/bin left pointing to /iraf + +unix/hlib/libc/iraf.h + Changed root to /tmp2/u/. + Commented out the `#define BSD42' and added `#define BSD43'. (9/11) + +---------------------- +(begin bootstrap) + + Several files failed to compile in the kernel. + +unix/hlib/libc/kernel.h + Added a `#ifdef BSD43' section to the header of kernel.h. First entry + is a `#define _NFILE 64' for 4.3BSD. Max number of open files increased + from 20 to 64, yeah! (9/11) + +unix/os/zfiopr.c + Changed the name of the variable `sigmask', used in zfiopr.c to save + the old signal mask, to `sigmask_save'. The name `sigmask' is now a + defined macro in . (9/11) + +unix/boot/spp/rpp/ratlibc/initst.c + Changed the _NFILE to a `10'. The RPP never has many files open at + any one time, this should be fine. (9/11) + +--------------------- +(bootstrap completed; begin sysgen) + +unix/hlib/iraf.h +unix/hlib/mach.h +unix/hlib/libc/spp.h + The Fortran compiler would refuse to compile modules containing INDEFS + or INDEFL, which were set to -2**15 and -2**31 for the VAX, as + indicated in the VAX Architecture manual. A fatal `integer overflow + in constant expression' would result. This is a bug in the compiler, + but the the modules would not compile, so changed the values of these + constants in the above files to one less in both cases. Probably the + number is being accumulated as a positive number and the sign applied + later, hence the integer overflow (since 2**31 - 1 is the largest long + on a vax). (9/11) + +sys/gio/nspp/sysint/errprt77.f + Moved SAVE statements on lines 374 and 410 to before the DATA + statements. (9/12) + +pkg/dataio/fits/fits.h + This file contains as explict integer contstants the values of FITS + `blank' pixels, -2**15 and -2**31. These cause integer overflow on + 4.3BSD since they are the same values as the IRAF indefinites. Also, + these values should not occur in supposedly machine independent code. + A 2/4 byte rather than numeric comparison should be used to test for + FITS magic values instead. For the moment, I changed the values + slightly to enable compilation - this does not solve the problem. (9/12) + +pkg/images/filters/med_sort.x + In the second procedure, local variable `i' not used. Also, the + underscore should be removed from the filename. (9/12) + +noao/mtlocal/idsmtn/read_varian.x + This file contained a number of cases of very large explicit integer + constants that would cause integer overflow at compile time in the + 4.3BSD compiler. The values were not arbitrary hence could not easily + be changed, so for the moment just deinstalled the idsmtn directory + so that the remainder of MTLOCAL could be linked. (9/12) + +sys/imfort/* + +sys/imio/imfort/* - + Installed an all new IMFORT in sys, and deleted the old version in + imio. The new IMFORT is much more comprehensive than the original, + and includes more image i/o routines, access to image header parameters, + and access to and decoding of command line arguments. (9/12) + +unix/boot/spp/xc.c +unix/boot/spp/xc.hlp + I want to use XC to compile and link host Fortran programs that use + IMFORT, so added a switch `-h' to link host programs, i.e., to link + without the IRAF main (a command line module must contain a main + routine), and without searching the IRAF libraries unless explicitly + referenced on the command line. Also added a reference to the Fortran + library -I77 to XC, required to link host Fortran programs. Library + references (-llib) would cause a link even if -c was given on the + command line; now will not link if -c flag is given, regardless of + any other flags that might be present. + + This switch was formerly called -Np in the UNIX XC, and was absent in + the VMS XC, and the old `-h' would cause a nonstandard SPP header + definitions file to be used. Changed the old `-h' (which is very + rarely used) to `-Nh'. + + xc -hO prog.f ... -limfort -lsys -lvops -los + + The above command line suffices to compile and the host Fortran program + PROG.F and link it with the IMFORT and other IRAF libraries. This can + be defined as a foreign task `fc' or whatever in the USER package to + minimize typing. (9/12) + +pkg/cl/builtin.c + Modified the code used to construct the host command line for a foreign + task to support optional argument substitution. The sequences $1, $2, + etc. (up to $9) refer to the individual arguments on the IRAF foreign + task command line, $* refers to the entire argument list, and $0 is + replaced by the IRAF taskname. A sequence $(N) or $(*) causes each + input argument to be treated as a virtual filename and mapped into its + host system equivalent for insertion into the host command line. + + For example, this permits foreign task definitions such as the + following, used to define a new task FC to compile and link host + Fortran programs which use the IMFORT interface: + + task $fc = "$xc -hO $* -limfort -lsys -lvops -los" + + The facility should also be useful whenever an IRAF foreign task causes + more than one host command to be executed, e.g., in combination with + the ! os escape command delimiter in VMS (or ; in UNIX). An argument + or the argument list may be referenced any number of times in the + command template. Whitespace is not added before or after the argument + reference, hence sequences such as `$1.o -o $1.e' will work. + + For backwards compatibilty the argument list is simply appended to the + command template if no $arg sequences are encountered. The new + facility is not completely backwards compatible, however, because any + $ in the command template must now be escaped to be included in the + final host command. (9/13) + +---------------------------------- +(system moved back to lyra which now runs 4.3BSD) +(files modified on lyra version of IRAF in past two days merged into 4.3BSD +(version of the system) + +sys/mkpkg +sys/imfort/* + +sys/imio/imfort/* - +sys/imio/mkpkg + The new IMFORT package contains more than just image access routines, + hence was installed in sys rather than imio. Deleted the old package + in imio and modified the mkpkg files to reference the new package. + (9/14) + +sys/etc/erract.x +sys/etc/xerfmt.x +sys/etc/xerpue.x + + Examination of the symbol tables of host Fortran programs using IMFORT + showed that a lot of things were being linked in that should not be, + i.e., much of IPC and KI. I have also noticed this before with the + HSI programs, but did not bother to track it down. The problem proved + to be in the xer_putline routine in erract.x, and in xer_fmterrmsg in + xerfmt.x, both in ETC. I removed the xer_putline routine from erract.x + and rewrote it to access the file driver connected to STDERR remotely + through the FIO device table. This avoids a link time reference to + the IPC file driver and the KI (which ordinary IRAF subprocesses must + use for error recovery since they can run on a remote node). + In xerfmt, I merely removed the `include ' reference - this + requires that lib$syserrmsg be available on the local node, which + seems like a safe bet if an iraf kernel server is available. With + this change Fortran/IMFORT programs can be as small as 60Kb on UNIX, + and they should be even smaller on VMS with the Fortran shared library. + (9/16) + +unix/os/zfiotx.c + The uio_bwrite() procedure was written explicitly for the 4.2BSD stdio + system to provide greater textfile i/o efficiency for block transfers. + Without checking into it carefully, it appeared that this code (which + has intimate knowledge of the 4.2BSD stdio internals) was not working + on 4.2BSD. I was expecting that that would be the case when 4.3 came + along, and anyhow the 4.3 version of fwrite() has been optimized to + use block transfers, so I changed the code to use fwrite and deleted + the old code. 4.2BSD is history now anyhow. (9/17) + +unix/boot/spp/xc.c + Now accepts -f as the equivalent of -F; HSI tasks should not be case + dependent for portability reasons. Added a switch -x which maps into + the debug switch for the host system. These changes make the most + commonly used switches the same for both the UNIX and VMS versions + of XC. (9/19) + +lib/names + + Added a file lib$names, containing a sorted list of all the external + Fortran callable library names in the libraries libimfort.a, libex.a, + libsys.a, libvops.a, and libos.a. MATCH can be used to ask all sorts + of interesting questions about this database. In particular, the + user/programmer can check to see if a name is already used by the + system to avoid library conflicts with external names in their own + programs. (9/20) + +-------------------------- +Updated VMS/IRAF: all files modified in the past 35 days. + Complete new versions of the following directories installed: + sys/imfort + sys/gio/ncarutil + noao/imred/dtoi + noao/mtlocal/idsmtn + noao/onedspec/identify + noao/twodspec/apextract + +Also merged all recent UNIX/IRAF HSI changes into the VMS/IRAF HSI. + These included bug fixes in generic and spp, addition of the -h + flag to XC, addition of a set for imfort to zzsetenv.def, + bug fixes in the [ir]1mach.f files in hlib, addition of a + define for FC to the default hlib$login.cl, and addition of + XVFLAGS to hlib$mkpkg.inc. (9/21) + +vms/boot/spp/xc.c + Added an alias -m for the -M (make link map) flag. + Changed the default to optimize and added a flag -q to turn + optimization off. Hence, the -O is no longer needed. (9/22) + +vms/hlib/mkpkg.inc +vms/hlib/login.cl + Changed the "-cO" to "-c". (9/22) + +unix/boot/spp/xc.c + Changed the default to optimize, and added the `-q' flag to turn + optimization off. (9/22) + +unix/hlib/mkpkg.inc +unix/hlib/login.cl + Changed the "-cO" to "-c". (9/22) + +vms/boot/bootlib/dcl.c + This routine uses SHOW STATUS to get the status back from a command + sent to DCL. The output from the command followed by SHOW STATUS is + scanned, and when the output from SHOW STATUS is seen, that output + line is filtered out and used to set the exit status to be returned + to the HSI code. The problem is that a very explicit string compare + was being used to match the output of SHOW STATUS, and the output + string changed in 4.4 VMS. The old format was + + " $STATUS = %Xdddddddd" (VMS 4.3) + + this changed to + + " $STATUS == %Xdddddddd" (VMS 4.4) + + This would cause the status to be missed, and one of the above messages + would appear mixed in with the output of the program for every command + sent to DCL. I modified dcl.c to be a little more forgiving of + changes to the exact format of this string. (9/22) + +sys/imio/iki/oif/oifmkpfn.x + The / was being included in the subdirectory name, causing ZFSUBD + to fail on VMS, although it would work on UNIX. (9/22) + +dev/pix.imh [VMS] + Changed the pathname for the pixel file to HDR$pix.pix. The previous + value, dev$pix.pix, was set manually with HEDIT and is illegal since + it is a virtual filename, and low level programs like IMFORT programs + cannot handle that. (9/22) + +vms/hlib/init.dbg [VMS] + Had to change the window assignments because the old values were + inappropriate for the V4.4 version of the debugger - DEC just can't + leave the thing alone! (9/22) + +sys/ki/mkpkg +sys/ki/kilnode.x + + Added a new function to KI (used by vfntrans, see below). + + yes/no = ki_localnode (nodename) + + The function is used to test if the named node is an alias for the + local node. (9/28) + +sys/fio/vfntrans.x + Made a fix for the following problem. Start with a logical directory + such as + + set dd = node!usr0:[user.imdir] + + File references will then be of the form "dd$pathname", rather than + "node!ldir$pathname". We do not discover that the file is on a + remote node until the logical directory has been expanded. The fix + was to convert "dd$pathname" into "node!dd$pathname" during logical + directory expansion, i.e., as soon as the reference to the remote + node is detected, the translation is discarded and the whole thing + turned into a remote file reference. The process repeats on the + remote node, but when the logical directory is expanded on the + remote node the node name is an alias for the "local" node, and + filename translation completes normally, resolving into a server-local + file reference. (9/28) + + TODO: will have the same problem for non-filename resources. + +sys/ki/kgfdir.x + Filename mapping and unmapping has to take place on the node on which + the resource physically resides. The problem here is filename + unmapping; when a directory is read, the kernel server on the remote + node unmaps the filenames into IRAF names, return IRAF filenames to + the server code on the client node. These filenames were being + passed up into the VOS, which would immediately "unmap" them again, + causing constructs such as .e, .o, etc. to be mapped to .\e, .\o, + and so on. This is necessarily so since the VOS must unmap host + filenames returned by the kernel (or the KI). The fix was to map + the filenames for the local host in the client, i.e., the remote + kernel server maps the remote host filenames into IRAF names, sends + the IRAF names to the client, the client maps them into local host + name, returns these to the VOS, and the VOS unmaps them using the + translation tables for the local host. (9/28) + +sys/imio/iki/oif/oifmkpfn.x + Added an `include ' reference since the file references KFSUBD. + (9/28) + +vms/os/net/zfioks.c + When connecting to a remote node, the "Password (...): " prompt could + be printed on the terminal before pseudofile output was flushed via + IPC and the CL, since both processes would be talking directly to the + terminal. This lack of synchronization could confuse the user, so + added a 50 millisecond delay before prompting for the password to + allow the i/o streams to empty. (9/28) + +sys/fmtio/patmatch.x + There were two cases where a procedure had a char argument but was + being called with an integer character constant. (10/2) + +sys/gio/sgikern/mkpkg +sys/gio/sgikern/sgk.h +sys/gio/sgikern/sgiinit.x +sys/gio/sgikern/sgipcell.x + Added support for cell array output to the SGI kernel. The kernel + takes 8 bits in and renders it into a 1 bit display for the output + plotter device. The algorithm is suitable for both raster devices + and metafile devices. (10/4) + +pkg/proto/imsqr.x + +pkg/proto/imfunction.x +pkg/proto/doc/imfunction.hlp + Added support for the SQRT function to the IMFUNCTION task. (10/4) + +sys/gio/stdgraph/stgpcell.x + Added support for cell array output to the STDGRAPH kernel. (10/6) + +lib/gio.h +sys/gio/gstatr.x +sys/gio/gsetr.x + In , the GP_ASPECT field, which is the desired aspect ratio + for the GLABAX viewport and not the physical device aspect ratio, + was defined as in integer field. Changed to a Memr reference. + In gsetr, the field was being assigned into with an integer value, + rather than the floating point value. (10/5) + +dev/vdm.gki + [UNIX,VMS] + Restored the standard test metacode file, which was accidentally + deleted at some point on the lyra version of the system. On VMS, + the file was present but had the wrong VMS file type, hence was + unreadable. Restored the file on both the UNIX and VMS versions + of the system. (10/6) + +sys/ki/kignode.x + Will now skip leading whitespace at the beginning of the resource name. + Whitespace or any other nonalphanumeric characters encountered while + extracting the node name prefix will cause node name extraction to + terminate, causing the system to treat the resource as present on the + local node. (Hence, "abc!..." is a reference to resource `...' on node + `abc', while "abc !..." is a reference to resource `abc !...' on the + local node). (10/6) + +sys/ki/mkpkg +sys/ki/koscmd.x + +sys/ki/irafks.x +unix/hlib/knet.h +unix/hlib/libc/knames.h +unix/hlib/libc/knames.no_ + Added support for ZOSCMD to the kernel interface. If the host command + string is prefixed by a node prefix (e.g., "node!...") the command + will be passed to the host command interpreter on the remote node. + The remote kernel server spools the output of the command in a text + file, returning the name of the spool file to the KI on the local + node. The KI (KOSCMD) then copies the spooled output to either the + stdout_file named in the KOSCMD argument list, or the terminal if + no file was named. + + This feature was added to provide network support for the SGI kernel, + but of course it makes remote execution of a command possible wherever + an OS escape occurs. The syntax can be a bit confusing, but there is + no alternative. For example: + + cl> !node!w + + will execute the command `w' on node `node', whereas + + cl> !node !w + or + cl> !node\!w + + will execute the command `node !w' or `node!w' on the local node. + On a UNIX node, if the first character to ZOSCMD is a !, /bin/sh + will be used to execute the command, hence + + cl> !node!!w + + will execute the `w' command on the remote node with the Bourne shell. + Just in case you aren't totally confused by now, on a VMS node, + a leading ! is used to fire up a new DCL and is also the multi-command + delimiter, so it is possible to create such atrocities as + + cl> !vmsnode!!show time!show users + + Since both UNIX and VMS nodes do something fairly harmless if the + first character in the OS command is a !, one can type "!!oscmd" to + force a command to be executed on the local node without stripping + of the node prefix, unintentionally or otherwise. + + Note that this feature may also be used to execute foreign tasks + on remote nodes, by including the node prefix in the foreign task + declaration. This allows the output of the remote command to be + redirected elsewhere by the local CL, although the process is not + very efficient due to the use of several temporary spool files. (10/6) + +sys/etc/xerpue.x + Fixed a bug discovered when testing the above mentioned feature. + In xer_putline(), the char count being sent to ZPUTTX or ZPUTTY + was being multiplied by SZB_CHAR, causing extra junk to be printed + at the end of the output data string. This routine is also called + to print error messages during error recovery, and the bug could + produce erroneous output when a task is run standalone, e.g., when + the CL is run. When a task is run as a subprocess the output is + not a text device, so the bug would not matter. (10/6) + +sys/ki/irafks.x +sys/ki/kiopenks.x + The KI support for ZOSCMD requires creation of a temporary file on + the remote server node to spool the oscmd output. SGI also wants + to write into TMP on the remote node. It turns out that the kernel + server, being an IRAF process, will automatically call ZGTENV to + read the local values of the HOST, IRAF, and TMP environment + variables from (or the logical name table, or wherever) + provided they are not already defined in the environment table. + I modified the code which transmits the client's environment list + to the server to exclude the local definitions for HOST, IRAF, and + TMP, so that the server will use the values for the server node + instead. I also deleted the SETROOT code, formerly used to reset + the value of IRAF after transmitting the environment list, because + it is no longer needed. (10/7) + +sys/gio/sgikern/sgk.x + Modified to recognize a node prefix in the device name ("node!device") + and include the node prefix in the spoolfile and dispose strings, + causing the plot file to be written and disposed of on a remote + node. (10/7) + +lib/syserrmsg + Changed the "No entry in termcap database file..." error message so + that it is suitable for both termcap and graphcap devices. (10/7) + +sys/etc/xgdevlist.x + This facility is used to fetch the entry for a device from the DEVICES + table, given the logical name of the device. The procedure was doing + only a counted string compare, hence it would return the first device + entry for which the device name given was a prefix. For example, "mt" + would match the first magtape device in the table, no matter what it + was. Modified to match only whitespace delimited device names. (10/8) + +----------------------------------------- +VMS/IRAF updated from lyra. (10/8) + +vms/os/tranlog.c + Broke up _createlog into the three procedures _createlog, _createjoblog, + and _mklognam. These allow the caller to specify which table the + logical name is to be added to. (10/9) + +vms/os/net/zfioks.c +vms/os/net/kutil.c + Added a process tree global password cacheing mechanism to the get + password code. Once the password for a given node and login is + entered by the user (due to a ? in the .irafhosts file) it is + encrypted and saved in the user's memory space in a place that can + be accessed by all processes in the process tree. Subsequent network + accesses to the same node by other processes in the same process + tree used the cached entry and hence the user is not repeatedly + queried for the same bit of information. (10/9) + +pkg/plot/doc/sgikern.hlp +sys/gio/sgikern/sgk.x + The DD string for an SGI device may contain the sequence $F, which + is replaced by the plot file name at open time. I added a more + general macro replacement facility $(CC). If this is encountered + in the DD string, the string value of the graphcap capability CC + is substituted. For example "-w $(xr)" would map to "-w 1024" if + capability `xr' were defined as ":xr#1024:". (10/10) + +unix/boot/rmbin/rmbin.c + The -o flag, used to specify the extensions of the files to be + selected (deleted), was not working properly. Despite the threatening + name, sequences like `rmbin -n -o .cl dir dir' are useful for finding + all files with a certain extension in a directory tree (this is not + for everyone). (10/11) + +pkg/... +noao/... +unix/hlib/clpackage.cl + To all the package-tasknames in TASK statements in package script + tasks, added the extension ".pkg", e.g., "task tv.pkg = tv$tv.cl". + This is not used in the current CL, but was required for testing + the new CL which is currently under development. (10/11) + +unix/os/ufstat.c - +unix/os/*.c + Removed the fstat cache. This is inherently unreliable and such + cacheing should be done at the applications level, if at all. (10/13) + +noao/noao.par + + Added a parameter file for the noao package; discovered it was missing + while testing new CL pset code. Evidently the old CL didn't care if + it couldn't find the pfile. (10/13) + +sys/gio/sgikern/sgk.x + The sgk_vector() procedure was not recognizing the special case of + a vector of zero extent (dx=dy=0), i.e., a point, as occurs when + plotting a polymarker. Added a third case on the if-else to handle + this. (10/15) + +hlib/*.cl +pkg/.../*.cl +noao/.../*.cl + As part of an experiment with a feature in the new CL, added comments + of the form #{ to the header area of all compute mode scripts. In the + new CL, this sequence asserts compute mode on the stream (regardless + of the value of `lexmodes') until a matching #} is seen to clear + compute mode. This allows us to make command mode the default on + all command input streams, without having to suffer the trauma of + rewriting all our old CL scripts as procedure scripts. Note that the + #{ and #} are special only if they occur at the beginning of a line. + (10/15) + +pkg/cl/* + Installed the new version of the CL. The primary changes in this + version are the addition of `pset' tasks and parameters, the addition + of colon commands to eparam (to read and write psets to from files, + edit a new pset, run the associated task, etc.), a new cl option + `showtype', default =no, to cause a type suffix character to be added + to special tasks to indicate their type, and the extension of command + mode to all input streams as the default (formerly, all script input + was in compute mode). (10/19) + +sys/clio/clopset.x +sys/clio/clcpset.x +sys/clio/cl[gp]set.x +sys/clio/cl[gp]set[bcsilrdx].x +sys/clio/clpsetnm.x +sys/clio/clpset.h + Added support for named parameter sets to CLIO. The `clpset' + procedures are equivalent to the clget/clput procedures, but they + take care of the details of concatenating the pset name and parameter + name in references to parameters in named psets. + + ********************************************************************* + This is a major revision to the CL, fully documented in the paper + "CL Parameter Set Extensions", Oct 21, 1986. (doc$pset.ms). (10/19) + ********************************************************************* + +unix/hlib/motd +unix/hlib/zzsetenv.def +pkg/cl/cl.par + Incremented the system version number to 2.5. V2.4 was just released + on draco, and the new CL is a sufficiently major change to warrant a + new version of the system. I am going to continue to add to the + V2.4 notes file, however, until the AOS/IRAF bug fixes have been + merged in and the UNIX/IRAF system settles down while I work on the + SUN/IRAF system. (10/19) + +unix/hlib/mkiraf.csh + Initialization of the uparm directory is now an option. (10/20) + +dev/hosts [node lyra, UNIX/IRAF] + Removed the `plot' alias for carina - set up back when we switched + to 4.3BSD due to problems with lpr. We should be able to do our + ncar plot processing on lyra now. (10/22) + +sys/imfort/db/imastr.x + This procedure had not yet been modified to be consistent with the + other db/imadd procedures, i.e., the datatype arg was a domain + string rather than a type code, and there was no comment string. + This would cause the imfort procedure imaddc to create a new + field with an invalid datatype. (10/24) + +------------------------------- +Begin merge of AOS/IRAF revisions from AOS/IRAF port. + +unix/hlib/libc/knames.no_ - +unix/hlib/libc/xnames.no_ - +unix/hlib/libc/libc.h +unix/hlib/libc/iraf.h + Deleted the #ifdef F77_NO_ stuff in libc.h and iraf.h, and deleted the + no-underscore versions of the knames.h and xnames.h files. There is + too much variation in the machine dependence of the Fortran external + names to be represented by this scheme. It is simpler and safer to + just have the UNIX version of the external names in the UNIX kernel, + and modify that for each new system. (10/27) + +unix/hlib/libc/knames.h + Removed duplicate define for ACHTUU. (10/27) + +unix/os/zfiopl.c +unix/os/zfiolp.c + Added a (char *) cast to the second argument to strncpy(). (10/27) + +unix/os/zopdir.c + There was a bug which was causing the trailing / to be included in + the directory name passed to opendir(). This is harmless on unix + but might cause problems on some systems. (10/27) + +unix/os/zmaloc.c +unix/hlib/libc/kernel.h + Deleted the ZMEMCK memory allocator debug code, and the associated + #ifdef flag in kernel.h. The 4.3BSD memory allocator is completely + new hence the old debug code will no longer work. The new 4.3 BSD + memory allocator, by the way, looks to be a lot more sophisticated + and efficient than the old one. (10/27) + +unix/os/zpanic.c + Added [] to the declaration of osfn_bkgfile. (10/27) + +unix/os/zxwhen.c + Two occurrences of ZWHEN in the comments were changed to ZXWHEN. (10/27) + +sys/imio/imaccess.x + Modified to deal with sections and cluster indices. (Not AOS related + revision). (10/28) + +unix/os/zfioty.c + Sometime back, when the VOS terminal driver was added, a new file + TTOPEN.X was added to sys$etc. This file contains a routine TTOPEN + which can be used to open a terminal directly as a device. The + special device name "dev$tty" denotes the user terminal. This feature + was evidently never fully implemented; I added a few lines of code + in the UNIX terminal driver (ZOPNTY) to recognize dev$tty and open + the device /dev/tty when the special device name is seen. Note that + the device name dev$tty is not filename mapped since FIO does not + map the names of special devices, and the name is therefore passed + on without modification from the user program to the kernel. + + The TTOPEN function has not yet been used in IRAF, but it will be + needed at some point for programs like screen editors that need + efficient raw i/o to a terminal. On machines where this type of + direct access cannot be implemented IPC to the CL can be used + instead, at a considerable loss in efficiency for very interactive + applications. The TTOPEN facility should NOT be used in ordinary + applications software. (10/29) + +sys/fio/zfiott.x + This file is the VOS terminal driver. Modified the i/o logging code + to record ^ as \^ so that the actual character is not confused with + the ^[ type notation used to render control characters, and to record + spaces a \40 rather than as an (invisible) space. Hereafter, any + whitespace in the log file was put there only to improve readability, + and is not data. (10/29) + +pkg/cl/mkpkg + Modified the `relink' entry as follows: + + relink: + + link: + $set LIBS = "..." + $link cl.o ... + ; + + The `link' symbol is thus an entry point into the `relink' subprogram, + used when one does not want to check if all the object files are up + to date (that is what does). This note is partially to + document this little used mkpkg construct. See also the mkpkg in + imfort$tasks for another unusual but occasionally useful construct. + (10/29) + +sys/tty/ttyputl.x + The ttyputline() procedure would break lines (add a newline) that were + exactly 80 chars long, terminated by an EOS but no newline. This was + the bug causing EPARAM to scroll on AOS/IRAF, not anything in the + eparam code itself. (10/29) + +sys/etc/pagefiles.x + +sys/etc/lineoff.x + +pkg/system/page.x +pkg/system/lineoff.x - + The PAGE task was repackaged as a library subroutine and installed in + the ETC package so that the interactive file paging capability will + be available to applications programs. + + pagefiles (files) + pagefile (fname, prompt) + gpagefiles (files, device,prompt,firstpage,clearscreen,mapcc) + + The procedure `pagefiles' pages through the files in a file template, + `pagefile' pages a single file and allows the end-of-page prompt to + be something other than the filename, and `gpagefiles' is the fully + generalized routine. The global `ukey' cl parameter is used for + keyboard input, transparently to the calling program (but it can be + redefined with a local task parameter if desired). (10/30) + +sys/etc/pagefiles.x + Smartened up the pager to deal properly with very long lines, i.e., + lines of text that require several terminal lines to display, as in + mkpkg output. (10/30) + +sys/fmtio/ctocc.x + Modified to always output octal control codes as 3 digit octal numbers, + e.g., \040 rather than \40. This is necessary for the inverse + operation, as the escape sequence may be embedded in a string + immediately followed by a printable digit, e.g. "\04089". (10/30) + +unix/hlib/libc/xnames.h + Added entries for TTSETS and TTSTATS, used to set/stat string valued + terminal driver parameters. Also added an entry for STTYCO, the + main entry point for the new VOS STTY routine (see below). (10/31) + +sys/clio/clopen.x +sys/clio/clcmd.x + I turned off the FLUSHNL (flush at newline) bit for the CLOUT stream, + to allow parameter-set requests to be batched to speed up tasks that + set the values of a lot of parameters at runtime. It was necessary + to add an explicit flush to CLCMD since the flush is no longer implied. + This appeared to be the only place where a flush would need to be + added. (10/31) + +unix/boot/spp/xpp/lex.sed +unix/boot/spp/xpp/xppcode.c + In xppcode.c, increased the size limits for defined strings and + string constants to 8192 chars for string constants, 4096 chars + for defined strings, and up to 128 defined strings. In lex.sed + added an edit command to increase the size of the yytext token + buffer from 200 to 1024 chars. This limits the maximum length of + a string constant or defined string. (10/31) + +sys/fmtio/pargb.x + Modified to print the %b `yes' and `no' strings in lower case + rather than upper case. (11/2) + +pkg/cl/builtin.c + A recent change to this file, made in support of the new terminal + driver, fixes an old problem with foreign tasks. Formerly, arguments + to foreign tasks of the form "keyword=value" would be translated + as "value" in the generated host command line, since a foreign task + has no pfile. The "keyword=" is now preserved. (11/2) + +lib/syserr.h +lib/syserrmsg +lib/ttset.h [*] +pkg/cl/builtin.c +pkg/cl/login.cl +pkg/cl/mkpkg +pkg/cl/tags +pkg/language/doc/stty.hlp + [*] +pkg/language/language.hd +pkg/language/language.men +pkg/system/doc/stty.hlp - +pkg/system/mkpkg +pkg/system/system.cl +pkg/system/system.hd +pkg/system/system.men +pkg/system/x_system.x +sys/clio/clcmd.x +sys/clio/clopen.x +sys/etc/mkpkg +sys/etc/sttyco.x + [*] +sys/fio/zfiott.com [*] +sys/fio/zfiott.x [*] +sys/gio/cursor/mkpkg +sys/gio/stdgraph/mkpkg +sys/gio/stdgraph/stdgraph.com +sys/gio/stdgraph/stgclose.x +sys/gio/stdgraph/stgopen.x +sys/gio/stdgraph/stgopenws.x +sys/gio/stdgraph/stgrcur.x [*] +sys/libc/cttset.c +sys/libc/mkpkg +unix/hlib/libc/ttset.h [*] = major changes +unix/hlib/libc/xnames.h + The above files were modified in support of the new VOS terminal driver. + The main source files for the driver are etc$sttyco.x, zfiott.x and + zfiott.com in fio$, and lib$ttset.h. The file gio$stdgraph/stgrcur.x + also received a substantial amount of new code; the revisions to the + remaining files were minor. + + To summarize the revisions: the actual source for the driver in + fio$zfiott.* was extensively revised. A new STTY driver task was + added to etc$sttyco. The old STTY task in the system package, a CL + script, was deleted, as was the _stty builtin in cl$builtin.c. + A front end to the VOS STTY was added to the language package + (cl$builtin.c). The new architecture concentrates all knowledge of + the driver functions into the VOS files, with the CL front end + serving merely to concatenate the argument list string and pass + it on to the VOS routine. + + The new VOS terminal driver is fully documented in the manual page + for the STTY task in the language package. Aside from cleaning up + the architecture of the terminal driver interface and making everything + execute faster, the major revisions were to the logging features of + the terminal driver. + + The old `stty logio' function is retained with slight modifications + to eliminate ambiguities in the recorded data, e.g., the characters + ^ and \, if present in the data stream, are logged as \^ and \\, + and spaces are logged as \s (rather than be invisible). + + Two new features, `stty login' and `stty logout' were added to + permit logging of the input and output streams in separate files. + The name of the logfile may now be specified on the command line + as an option. + + A major new feature `stty playback' was added to permit terminal + input to be taken from a logfile. One types `stty login[=file]', + executes an arbitrary sequence of commands, then terminates input + logging. The resultant script may be read back any number of times + with `stty playback'; this is different from an ordinary CL script + because all interactive queries, EPARAM keystrokes, cursor mode + input, etc. is logged as well as command lines. + + The playback feature was added with two goals in mind. First, we + hope that it will be a useful aid for testing software. One can + exhaustively test a package with input logging on, entering any + arbitrary sequence of commands, and then repeat the sequence + automatically at a later date or on a completely different IRAF + host, possibly logging the terminal output and diff-ing it with + the original. The logfile is a printable and editable text file, + hence can be patched manually to reflect minor changes to the + software being tested, if necessary, without having to regenerate + the entire thing. + + The second purpose of the playback feature is for demos and + tutorials. A user at a remote site can playback an stty script + to be led through a detailed tour of any program or package. + The scripts can be annotated with explanatory comments, to be + written directly to the terminal at runtime (such comments are + never seen above the driver). Playback can proceed either in a + fully automatic mode, with a programmable delay after each input + data record, or in a synchronized mode where the user must tap + the space bar to pass each record to the calling program. (11/2) + +sys/etc/sysid.x + Deleted the call to GETUID if "userid" is not found in the + environment. By now, everyone will have a "userid" defined in + their login.cl file. Also, I want this routine to call only + low level functions so that it can be called by other low level + code w/o recursion. (11/2) + +unix/boot/spp/xc.c + Added some code to recognize a new form of a command line switch. + The construct `-/xxx' will cause a `-xxx' to be included in the + command lines of the f77 and cc commands, i.e., `-/' is used to + escape switches to be passed to the host programs. In particular, + this is necessary to pass switches which are words rather than + single characters, e.g., `xc -cf -/f68881 ...'. (11/3) + +math/minpack/ + + Installed the raw sources for an older, non-proprietary version of + the MINPACK package in the math package. There has been no attempt + as yet to review the sources for portability and compile and install + the library. (11/4) + +sys/etc/pagefiles.x + Added a new colon command ":spool ". One positions to the + desired line in the file or stream being displayed and then turns + on spooling to the named file. Thereafter, as each line is displayed + on the screen it is also appended to the spool file. (11/4) + +sys/vops/alut.gx +sys/vops/mkpkg +sys/vops/lz/mkpkg + The ALUT routine was extended to provide lookup tables for datatypes + real and double, using an integer index array as input. (11/5) + +sys/etc/main.x +sys/clio/clcache.x +sys/clio/clio.com +lib/clio.h + Revised the CLIO parameter cache code to automatically search the + psets for a task if no entry is found for the named parameter. + For example, if the parameter is "xxx" and the task is T with + psets A and B, CLIO will look first for "xxx" and then for "T.xxx", + "A.xxx", and "B.xxx". The effect is that the psetname may be + omitted without invalidating the cache, and the parameter search + path used in the CL is used in CLIO as well. (11/6) + +(back to AOS/IRAF merge) + +unix/boot/bootlib/osfn2vfn.c +unix/boot/bootlib/vfn2osfn.c +unix/boot/bootlib/osdir.c + No changes here for the present. It is easier for the moment to + follow the original concept of a different bootlib for each host + than to try to devise a portable one. At some point we do need + to make more of an effort to produce a more generic UNIX/IRAF HSI. + (11/7) + +unix/boot/bootlib/osaccess.c +unix/boot/bootlib/oschdir.c +unix/boot/bootlib/oscmd.c +unix/boot/bootlib/oscrfile.c + Minor changes, mostly adding type casts. (11/7) + +unix/boot/spp/rpp/ratlibc + Changed the remark() argument type to (int *) and deleted the + old interface files which are not used by the preprocessor. (11/7) + +unix/boot/wtar/wtar.c + Deleted u_finfo() declaration. + Cast arg to ZFINFO as (PKCHAR *). (11/7) + +unix/boot/rtar/rtar.c + Once call to cchksum() did not cast the argument as (char *). (11/7) + +unix/boot/mkpkg.csh +unix/boot/spp/* + Added mkpkg.csh files to the SPP source directories. This will force + everything to be recompiled when a bootstrap takes place, eliminating + the problem of foreign binaries being used when + +sys/mkpkg + Modified the entries for libmain.o, which was using the $checkout / + $checkin directives in a way which was inappropriate for an object + module. (11/7) + +sys/gio/elogr.x +sys/gio/elogd.x + Changed some (10.0 ** -x) constructs to the form (10.0 ** (-x)) to + avoid a shortcoming of the AOS/VS Fortran compiler. (11/7) + +sys/gio/aelogr.x + +sys/gio/aelogd.x + +sys/gio/elogr.x +sys/gio/elogd.x + Moved the anti-elog functions out into separate files for a better + UNIX library structure, and to avoid a topological sorting conflict. + (11/7) + +unix/boot/xyacc/mkpkg.csh + + Added a mkpkg.csh file for XYACC; the entire UNIX bootstrap is now + driven via these shell scripts and make is no longer used. (11/8) + +unix/.../mkpkg.csh + Reviewed all the mkpkg.csh files and made the following changes: + [1] eliminated use of environment variables, e.g., $hlib; constructs + like ../../hlib used instead; [2] scripts delete all binaries after + making whatever they make; [3] switches like "-cO" were changed to + "-c -O", which is more portable. These changes were made to favor user + sites, so that the bootstrap works if there is no $hlib, and user + sites rarely do software development in the HSI hence do not need + to have the objects and package libraries left behind. (11/8) + +unix/mkpkg.csh +unix/gdev/mkpkg.csh +sys/mkpkg + GDEV is now handled somewhat differently. During the bootstrap, + the gdev/mkpkg.csh script is run: this calls sgidev/mkpkg.csh to + compile and install the SGI translators. During a sysgen, there + is now an entry in sys$mkpkg which runs the mkpkg in host$gdev to + update the GDEV device drivers in libsys.a. This is kind of a + weird structure, but is less error prone than the old structure + (libsys.a can be deleted and it will be completely reconstructed + by a sysgen). (11/8) + +pkg/cl/main.c + Changed declaration of bkgfile to (PKCHAR *). (11/8) + +sys/libc/eprintf.c +sys/libc/sprintf.c +sys/libc/printf.c +sys/libc/scanf.c + Installed the versions of these files from AOS/IRAF, which were + modified to use to elminate the dependence on how the + compiler compiles argument lists. (11/8) + +sys/libc/mkpkg +sys/libc/cstropen.c + + Added a new function c_stropen() to LIBC. (11/8) + +pkg/cl/clprintf.c +pkg/cl/errs.c + Modified to use . Used AOS/IRAF version of clprintf.c, + but did a merge on errs.c, and set it up to use the new c_stropen + procedure and fdopen() rather than duplicating the low level interface + code for sprintf. (11/8) + +pkg/images/tv/cv/ids/idsinit.x +pkg/images/tv/cv/iism70/iisrd.x +pkg/images/tv/cv/iism70/iiswr.x + Eliminated type declarations for intrinsic function max(). (11/8) + +pkg/images/tv/cv/iism70/iispio.x +pkg/images/tv/display/iispio.x +pkg/images/tv/display/iisio.x + The ands() function was being called with short and integer arguments. + (11/8) + +unix/boot/bootlib/osgetenv.c + Added a (char *) coercion to the call to strncpy. (11/8) + +(boolean expressions) + The AOS/IRAF notes state that the SPP compiler translates expressions + such as (! clgetb(...)) as (clgetb (...) .EQ. .FALSE.). This is not + the case: ! is translated as ".NOT.", which makes sense, since the RPP + always does the easy thing. Nothing changed. (11/8) + +pkg/images/tv/cv/iism70/iiscursor.x +pkg/images/tv/cv/iism70/zclear.x + Lots of problems with and, andi, etc. Not going to fix this garbage + code, which will soon be dumped. (11/8) + +pkg/images/tv/cv/iisers.x + This has a statement "andi (ERASE, 0177777B)". The original statement + used and() and had problems with integer overflow in a compile time + constant expression. The problem resurfaced again on AOS/IRAF due to + andi() being defined onto an AOS intrinsic function in iraf.h. The + workaround solution is to NOT define the type specific functions onto + host intrinsics. ANDI is an ordinary external function; if I wanted an + intrinsic I would have used AND instead. (11/8) + +unix/boot/spp/rpp/rpprat/defs +unix/boot/spp/rpp/rppfor/* + Increased the sizes of a number of buffers in RPP as we have managed + to overflow storage recently, and it is all paged anyway. Regenerated + the Fortran sources in rpp/rppfor. (11/13) + +sys/libc/isatty.c +sys/etc/isatty.x + +unix/hlib/libc/xnames.h + The isatty() routine in LIBC had a builtin assumption about how + external function entry point addresses are passed hence was not + portable. Fixed by doing the test with a new VOS isatty() routine + in ETC, which is called by the LIBC routine. (11/14) + +sys/osb/achtb.gc +sys/osb/achtzb.gc + In these functions the SPP arrays containing packed unsigned bytes + were being declared as unsigned byte, which is not correct for SPP. + Changed the argument declarations to XCHAR and added type coercion + internally to coerce the loop pointers to unsigned byte. (11/14) + +sys/etc/urand.x - +sys/osb/urand.x + +lib/libsys.a [DELETE OBJECT FILE] +sys/osb/mkpkg + Fixed a (evidently harmless) bug in urand and moved the routine from + ETC to OSB since it is based on integer overflow during multiplication + and hence will not work on all machines. Added some $iffiles to the + mkpkg to permit machdep versions in AS. (11/14) + +sys/tty/ttygets.x +sys/fio/zfiott.x +pkg/cl/edcap.c + Changed those routines which interpret control codes represented as + `^X' to compute the binary value of the control code by masking the + lower 5 bits, rather than by subtracting a base value. This allows + a ctrl/c, for example, to be represented as either ^C or ^c. (11/15) + +sys/osb/shift.c + +sys/osb/mkpkg +unix/hlib/libc/knames.h + Added a set of bit shift operators to OSB. In many cases multiplying + or dividing by a power of two will be preferable, but a multiply can + result in integer overflow in which case the left shift operator must + be used instead. Also, for large shifts it is more convenient to shift + by so-many bits than to try to figure out which power of two to use, + so clearly the VOS should have a set of shift operators to go along + with the and/or/not primitives. The shift operators are semantically + equivalent to the << and >> operators of C; they do not perform the + same as the NCAR ishift primitive. (11/15) + +sys/gio/sgikern/sgk.x + Modified to use SHIFTI rather than (2 ** N) to initialize the bit-flip + bit mask array, to avoid the integer overflow which occurs on some + machines (DG) when the arithmetic technique is used. I would expect + that a bitwise instruction should be immune from arithmetic exceptions, + but there is no way to be certain. (11/15) + + NOTE -- The entry for 8/19 in the AOS/IRAF notesfile appears to list + some files which were not mentioned by name earlier in the notesfile. + If a file revision is not explicitly mentioned in the notes file, it + will not be merged into the master system. + +pkg/cl/*.c + Reviewed all the buffers dimensioned SZ_FNAME and increased a number + of them to size SZ_PATHNAME to reduce the chance of a buffer overflow. + (11/15) + +sys/fmtio/parg.x + There were a number of cases in pargg() where the double value was + being coerced to int or long without first checking for INDEF. (11/15) + +sys/memio/realloc.x + Now copies the nelems and dtype arguments into local variables before + reallocating the block of memory, in case the arguments are stored + in the block of memory being reallocated. (11/15) + +sys/etc/maideh.x + Moved the next_handler assignment to before the switch statement, + as it was unreachable due to an implied return in the switch. (11/15) + +sys/fio/zfiott.x + Modified to render nulls (used for null padding to generate delays) + as ^@ rather than \000, to save space in ttyio or ttyout log files. + (11/15) + +sys/gio/cursor/gtrwaitp.x + Was not reactivating the workstation, e.g., after the user would + respond to the "more help" query with a `q'. This could result in + a cursor read without the workstation being reactivated, which would + put the terminal in graphics mode, but then the next deactivate + workstation would be a no-op since the workstation was never + explicitly reactivated, causing text to be output in graphics mode + and lost. (11/15) + +unix/boot/generic/generic.c + In main(), nfiles was not being initialized to zero. (11/15) + +dev/null + Removed file protection from the dev$null dummy file; this is done + with a link in UNIX/IRAF and will be messed up when the directory + is moved to another host os. (11/15) + +lib/lib*.a + Ran `lorder | tsort' on all the libraries. Found two circular + references in libex.a (see below). (11/15) + +sys/gio/gadraw.x +sys/gio/gplcancel.x + +sys/gio/gplreset.x + +sys/gio/gplcache.x + +sys/gio/gplstype.x + + Unpacked all the gpl_ (polyline cache) subroutines in gadraw.x into + separate files to avoid a tsort cycle. (11/15) + +sys/imio/imrename.x +sys/imio/imdelete.x +sys/imio/imcopy.x +sys/imio/imaccess.x +sys/imio/immapz.x + +sys/imio/immap.x +sys/imio/iki/ikiopen.x + [1] Fixed a tsort-cycle bug oif_rename -> immap -> iki_open -> + iki_init -> oif_rename. This was done by removing the call to + iki_init from iki_open, adding a call to iki_init to immap, + and breaking immap up into a user procedure immap and an + internal procedure immapz. Now oif_rename, which is actually + quite a high level procedure, can call immapz without a circular + reference. Added a call to iki_init() to imrename, imdelete, + imcopy, and imaccess, just to be doubly safe, although it is + not necessary. (11/15) + +----------------------- +(end AOS/IRAF merge) + +----------------------- +(begin fixing all bugs and minor feature additions reported/requested in +(the past several months.) + +lib/lib*.a + As an experiment, tried reordering the object modules in the IRAF + libraries in topological order, to see if it would speed up linking. + It did, somewhat, although of course it took forever to reorder the + larger libraries. Results (cd cl; time mkpkg): + + unordered: 56.5 14.8 1:32 1001+112io + ordered: 44.2 11.7 1:09 684+114io + + Guess it was worthwhile. Here is the csh reorder script for Berkeley + UNIX (`reorder libXX.a'): + + ar xo $1 + rm __.SYMDEF + ar cq _lib.a `lorder *.o | tsort` + rm *.o + ranlib _lib.a + mv -f _lib.a $1 + + Did not try linking without a library symbol table. Still need to + optimize the UNIX ld program for maximum linker speed. (11/15) + +sys/etc/pagefiles.x + Modified to print an error message without changing the position + within the file if a pattern search fails, rather than position to + the end of file as previously. Also found and fixed a bug introduced + when the long-line code was added, which was causing the %done to be + computed incorrectly. (11/16) + +/bin/ld + I have been planning for a long time to optimize the UNIX linker, + which is inefficient for large libraries such as IRAF uses. This is + less important in 4.3BSD as the linker had already been optimized + for this latest release of Berkeley UNIX, but I was still able to + speed it up by another 20-30 percent by optimizing the code which + reads the symbol table. With this improvement, the timings for a + CL link are as follows: + + ordered, opt: 33.1 11.4 1:00 671+119io + + This is for a VAX 11/750. For comparison, the time for our 8600 + is 1:34 (clock), i.e., UNIX running on a 750 is faster than the + VMS 8600, once again! (11/16) + +sys/fmtio/evexpr.y +pkg/images/imutil/hedit.x + Fixed a couple of bugs that have been reported in HEDIT. + The principal one was due to real input tokens being returned by + the lexical analyzer in EVEXPR with a real value but an integer + datatype. This would produce what would appear to be garbage + results - a large integer number. Also added some additional type + checking to xev_binop, and modified HEDIT to eliminate whitespace + at either end of the value expression. (11/16) + +sys/etc/main.x + The IRAF main command interpreter now recognizes the argument syntax + `@fname', causing a set of param=value assignments to be read from + the named file. These should be one assignment statement per line, + in the form + + param = value + param = value + ... + + Blank lines and comment lines are ignored. This feature is used to + save typing, e.g., when testing programs which have a lot of parameters. + Multiple @fname arguments may be given, e.g., if the task has multiple + named psets, and they may be mixed with any of the other constructs on + the command line. For example, an explicit assignment may follow an + @fname to change the value of one of the parameters set in the file, + e.g., `plot @_plot title="abc"'. (11/17) + +sys/gio/cursor/rcursor.x + Changed the 'S' key to 'W' (fix wcs), to agree with the documentation + and the list of recognized keystrokes defined in grc.h. (11/17) + +dev/termcap + Added an entry for the SUN console. (11/18) + +sys/fmtio/evexpr.y + The lexical analyzer would accept `=' as an ordinary character within + a string constant, causing boolean expressions such as `param==value' + to be treated as strings, causing a `parameter not found' error message + in HSELECT. (11/21) + +pkg/cl/exec.c +sys/etc/main.x + In another HSELECT bug, command line arguments such as '@"m-flag" ...' + would result in a syntax error from the IRAF main. This was due to + the parameter cacheing code in exec.c, which would quote the value + string of string valued parameters by simply enclosing the string + in double quotes. The defective routine was modified to escape any + double quote characters included in the string as data. The code + in the IRAF main which extracts a string was modified to recognize + such escapes and convert them back into data characters. (11/21) + +pkg/cl/history.c +pkg/cl/eparam.c + EHISTORY had trouble dealing with abbreviations other than `ehi', + as the latter turned out to be wired into the original edit_history_ + directive code. I modified the code so that "ehistory" is + functionally equivalent to `^'. The command `ehistory' is special in + that any abbreviation is accepted, including `e'. Thus, + + ehistory meta + + e ^ # edit last command + e 3 ^3 # edit command number 3 + e xc ^xc # edit last command beg. with `xc' + e ?p ^?mkp # edit last command containing `mkp' + + and so on. (11/21) + +pkg/cl/history.c + In testing EHISTORY, found and fixed another minor bug. If the entire + command were deleted a newline token would be returned to the parser, + causing a syntax error since the history code is assumed to filter out + blank lines in the input. Modified to get another command line if the + command line being edited is deleted. (11/21) + +pkg/cl/param.c +pkg/cl/param.h + Indirection to the package pfile, e.g., ")_.param" would go to the + current package rather than to the package to which the task associated + with the referenced pfile belongs. Fixed this, and also modified the + code to accept ").param" as an alternative to ")_.param": the latter + conveys no more information than the former; both imply a reference + to the package pfile. (11/21) + +sys/imio/oif/oifrename.x + The oif_rename operator would open the image header, change the name + of the pixel file therein, update and close the image header, and + then rename the header and pixel files. If the header or pixel file + rename then failed (e.g., due the disk being full) the header would + be left no longer pointing to the pixel file. Modified to only update + and rename the header file if the pixel file can be successfully + renamed. Even if the header rename then fails, the header will still + be pointing to the pixel file. (11/21) + +lib/fio.h +lib/syserr.h +lib/syserrmsg +sys/fio/filopn.x +sys/fio/finit.x +sys/fio/fgetfd.x +sys/fio/open.x +sys/imio/iki/oif/oifopix.x +sys/imio/iki/oif/oifrename.x +unix/hlib/iraf.h + Modified the OIF image kernel to use the static file driver. This was + done by adding support for the STATIC_FILE file type to FIO, and then + merely changing the file type from BINARY_FILE to STATIC_FILE when + opening a preallocated pixel file in the OIF kernel. The static file + driver is now loaded during FIO initialization and is recognized as a + standard file type, although it is expected to be rarely used. In + UNIX/IRAF the static file driver is currently just mapped onto the + binary file driver, so this change is relatively safe. In VMS/IRAF + there is a separate driver, but currently it is also mapped into RMS + calls like the binary file driver, rather than using mapped sections. + The SUN also uses the binary file driver currently, but this will + change sometime soon. (11/21) + + NOTE -- Did not install the static file driver in the STF kernel; + will hold off on this until it is well tested via the OIF kernel. + +vms/os/zfacss.c +vms/os/zfinfo.c + If a file cannot be opened but it exists and posesses the necessary + permissions, FIO will issue the `waiting for access' message and + wait for the file to become accessible. This situation would occur + mistakenly in VMS/IRAF when trying to open a file template as a file, + e.g., "file*". ZFACSS was calling SYS$PARSE with the template, and + RMS would expand the template, but the subsequent RMS file open on + the template would of course fail. Modifed ZFACSS and ZFINFO to check + for the * character in the input filename, and return NO or ERR if + it is found. Programs which are passed a file template operand but + which are not set up for a template should now respond with + + cannot open file (filename) + + rather than + + waiting for access to file (filename) + + UNIX does not permit templates at the kernel level, so this was not a + problem there. (11/22) + +pkg/cl/builtin.c + The CL checks to see if any devices are still allocated at logout time, + and prints an error message if all previously allocated devices have + not been deallocated. Formerly the CL would rely entirely upon its + internal table of allocated devices to determine if a device was still + allocated. This seemed reasonable since the allocate and deallocate + functions are now CL builtins, but the user could fool the system by + running deallocate in the background, or by deallocating the drive at + the host system level. The code was modified to physically verify that + previously allocated devices are still physically allocated at logout + time, clearing the entry for a device from the internal device table + if that device has since been deallocated by another process. (11/22) + +unix/os/alloc.c + Now checks to see if the effective user id is 0 (root), printing a + message telling the installer what command to enter to fix the problem, + and returning an error code to the calling program. This frequently + happens after a bootstrap when one relinks alloc.e but then forgets to + reset the uid, which is changed to the user uid by the bootstrap. + This should happen less often now in any case, since the alloc.e + executable is now produced as the first step of a bootstrap, allowing + the user to go in and change the uid a few seconds after starting the + bootstrap, before they forget to do so. (11/22) + +unix/os/zalloc.c + In ZDVALL, the status of ZOSCMD, and hence alloc.e, was not being + returned due to multiple indirection on the `status' variable. (11/22) + +sys/etc/xalloc.x +sys/mtio/mtdealloc.x + In xdeallocate() an invalid test of the status value returned by + ZDVOWN was preventing rewinding of tape devices. I also changed the + datatype of the `rewind' arguments from bool to integer, since we + try to avoid the use of boolean outside a function. (11/22) + +sys/imio/iki/ikiparse.x + Occasionally, operations involving 3 digit numeric pseudo-extensions + in the image name would fail, e.g., + + cl> imcopy pix.002[*,100] pix.002 + + The typical symptom was that the .002 would be missing from the output + image name. + + This turned out to be due to a bug in the iki_parse routine, which + decides whether the .002 is part of the image name or an image + filename extension. This was a fairly nasty bug - the pattern for + the string match could not be extracted correctly - I am a little + surprised that we have not had more problems. Part of the reason + it was not more serious was that the field would immediately be + assumed to be part of the root image name unless it were exactly + 3 characters long, i.e., the same length as ".imh". (11/22) + +sys/gio/sgikern/sgk.x + A bug was fixed which was preventing points (zero length vectors) + from being plotted. (11/23) + +pkg/cl/builtin.c + The call to c_ttyodes to open the termcap database for the CLEAR + builtin was not error checking the returned value. (11/23) + +sys/etc/miireadc.x + The second call to read() was reading `nchars' chars when it should + have been reading `pksize' chars, i.e., it would read twice as much + data as it should since the chars are stored externally in bytes. + (11/23) + +pkg/cl/decl.c + Modified do_option() to permit { length = N } in string declarations, + as well as { len = N } as previously. The manual pages use the + full term `length', but this was not being accepted by the actual + CL code. The correct usage is `length' in accord with the `p_length' + used in expressions. (11/23) + +vms/boot/spp/xc.c + Added file existence checks as per 20 August ST mail. (11/23) + +unix/boot/rtar/rtar.c +unix/boot/rtar/rtar.hlp +vms/boot/rtar/rtar.c +vms/boot/rtar/rtar.hlp + Added a new switch `-p pathprefix' to the RTAR program. This is used + to relocated files to a different directory than that specified in the + archive, e.g., when the user has written an archive tape with absolute + pathnames on it, in which case something like this is required to be + able to read the tape at all. For example, if the archive `ldx.arc' + contains the files + + /u2/jones/ldx/_new + /u2/jones/ldx/ld.c + /u2/jones/ldx/ld.o + + then the command + + rtar -p /u2/jones/ -xrtvf ldx.arc + + will create the subdirectory `ldx' and the files + + ldx/_new + ldx/ld.c + ldx/ld.o + + The option should also be useful for extracting deeply nested + subdirectories without creating a path of empty directories leading + to the directory of interest. (11/23) + + +sys/fio/mkpkg +sys/fio/access.x +sys/fio/vfntrans.x +sys/fio/nowhite.x +sys/fio/open.x + There was a report of the following error message from someone at ST: + + OPEN: File does not exist + + Naturally, the complaint was that the file was not named. This message + is generated by FIO, which always includes the filename in the error + message, but the error formatting code (syserrs) will omit the "(fname)" + field if FNAME is the null string, hence the defective filename must + have been the null string. + + To avoid this sort of thing we have to verify input filenames, checking + for the null string. We also need to strip whitespace at either end of + the filename, but we need to do that anyway to check for the null or + blank filenames. To try to address this problem I [1] added the file + nowhite.x, which returns the input string minus any whitespace, and [2] + modified access, open, and vfntrans (fmapfn etc.) to call NOWHITE and + take an error exit if the null string is input. FIO should now detect + the null string filename and ignore any whitespace in a filename, not + only at the beginning but also at the end or anywhere else in the + filename string. (11/23) + + IMPORTANT NOTE -- The filename translation code will no longer permit + null string filenames, a significant semantic difference which may break + some programs. + +sys/imio/iki/stf/stfopen.x + When opening a new image and IM_HDRFILE is the null file (dev$null), + will no longer call fmkcopy to try to create a new header file. (11/23) + +vms/hlib/mkiraf.com + The script will now force the terminal name string entered by the user + to lower case before generating the LOGIN.CL file. (11/23) + +vms/os/str.s + The comments describing the calling sequences for _strpak and _strupk + where missing the third argument, `&maxch'. (11/23) + +vms/os/zfiopr.c + In the call to _strupk in _log_ipc(), the third argument `&nchars' was + missing. (11/23) + +vms/os/zfsubd.c + The case ../ when at the root VMS directory DISK:[000000] was not + working properly, the returned path would be DISK:000000]FILE due to + a pointer problem. (11/23) + +sys/fio/fpathname.x +sys/etc/oscmd.x + Had to add code to deal with the special case of a null string + filename, to avoid the error checking introduced into the filename + translation code above. It is a nusiance to be introducing bugs + into the system with this mod, but I think the benefits of runtime + checking for null filenames will be worth it. (11/23) + +pkg/cl/exec.c + In restor(), added some code to go through each loaded pfile and + lop off any parameters defined above the new topd. This can happen + when a declaration is entered to add a parameter to an existing + loaded pfile. (11/24) + +pkg/plot/plot.cl + Removed the reference to the IMAGES package. The new prow, pcol, + etc. no longer use _imaxes. (11/24) + +sys/gio/stdgraph/stgpl.x +sys/gio/stdgraph/stgpm.x + There was a bug in the stdgraph kernel which would occasionally + prevent line segments from being drawn (or erased). This was due + to the unresolved point clipping code used in these routines. + The last point drawn in one polyline or polymarker was being remembered + and used for clipping when drawing the first point of the next polyline + or polymarker. This would fail when drawing two two-point polylines + where the first points (move to) were different but the second points + (draw to) were the same, or when redrawing a two-point polyline in a + different line style, i.e., to clear the polyline. + + The solution was to clip unresolved points only in the interior of + the polyline or polymarker being drawn; the "last x,y" variables are + cleared before entering the drawing loop. This fixes the cursor + mode bug where several line segments are drawn with the D key, and + then erased interactively with the B or U keys. (11/24) + +unix/boot/mkpkg/tok.c +vms/boot/mkpkg/tok.c + In do_osescape, changed the expression (ch = '(' ? ')' : ch) to + (ch == '(' ? ')' : ch). This bug would cause the OS command to be + extracted with the wrong delimiter character in some cases. (11/24) + +vms/os/vms.h + Changed the value of MAXCPROC (the maximum number of connected + subprocesses) from 4 to 10, to be the same as in the VOS. This + was artificially limiting the maximum number of possible connected + subprocesses on a VMS/IRAF system to 4, and was undoubtedly + responsible for some of the process spawn failures we have seen + in the past, especially when increasing the size of the process + cache, e.g., to run a complex script. It has not been a serious + problem since we normally run with a 3 process process-cache with + space left over for one GIO subkernel. (11/24) + +unix/boot/mkpkg/tok.c +vms/boot/mkpkg/tok.c + Given mkpkg file as follows: + + $call test + $exit + + test: + $ifdef (...) $ifeq () + ... + $end + $set STUFF = "..." + $echo " $(STUFF) " + ; + + If called as `mkpkg', would work. If called as `mkpkg test', prints + error message "macro STUFF not found". + + This was happening becasue the do_end() code (the $end directive) was + a no-op if called from within the main file, i.e., when there was no + context pushed onto the mkpkg context stack by a $call, $update, etc. + A `mkpkg test' is not the same as a $call because it is a simple goto + and no new context is entered. The error message would be printed + because the $set is not executed if found in the false part of a $if + sequence. The $end directive now zeros the if-stack if called from + the main file context, else restores the if-stack to the value it had + when the current context was entered. (11/24) + +vms/os/zgtenv.c + Changed ev_cacheloaded and ev_table to static variables. This was + necessary to permit generation of a shareable image of the SDAS + libraries (which use CLIO). (11/24) + +pkg/cl/opcodes.c +pkg/cl/debug.c +pkg/cl/compile.c +pkg/cl/opcodes.h +pkg/cl/grammar.l +pkg/cl/grammar.y + Added the operator //=, since it is described in the documentation, + is useful, and is required for completeness (although I don't think + there is a **= either). (11/24) + +pkg/bench/bench.hlp + Updated the documented root pathname for the BENCH package, which + is now "pkg$bench/". (11/24) + +sys/gio/glabax/glbsview.x + If there were no ticklabels, axis labels, or plot title, the routine + would use the full device viewport without taking the desired aspect + ratio into account. A viewport with the desired aspect ratio should + now be generated regardless of the values of the other options (unless + the viewport is set explicitly by the user). (11/25) + +lib/gio.h +sys/gio/gplstype.x +sys/gio/gpmark.x +sys/gio/gpl.com +sys/gio/gadraw.x + Polymarkers are currently drawn using the clipping code in gadraw. + This was fine for large markers since these are drawn as a series + of line segments, but for point polymarkers the line segment clipping + code used by GADRAW was inappropriate. This code will add a point + at the boundary of the viewport when clipping a line segment that + crosses the boundary, so that the part of the line which is visible + is drawn. When plotting points, one gets an extra point at the + boundary, however, which is not correct. Added some extra logic to + the clipping code to omit the fancy clipping when drawing pointmode + polymarkers. (11/25) + +sys/gio/cursor/gtrwstran.x + The clipping logic in the cursor mode workstation transformation code + had the same problem with clipping point mode polymarkers as did + gadraw. (11/25) + +pkg/cl/modes.c + The UKEY code was modified to deal with stty playback mode in a way + similar to that provided for the cursor code. In playback mode with + verify enabled, after reading the logged UKEY response, the string + " [key=X]" is printed and a keystroke is read from the terminal in + raw mode, i.e., space to continue, q or ctrl/c to quit, or g to + continue with verify disabled. (11/25) + +pkg/cl/history.c + Whenever a CL prompt is generated, the CL now checks to see if raw + mode is in effect on STDIN and clears it if so. This ensures that + raw mode is cleared following a program abort. (11/25) + +vms/os/net/zfioks.c +vms/os/net/kutil.c +vms/os/tranlog.c + Added a pair of delete logical name primitives to tranlog.c. One of + these is used in ZFIOKS (the network device driver) to delete the cached + logical name if the connection attempt fails, e.g., because the user + entered an invalid password. If this were not done it would be + necessary to logout (or enter a DCL command) to recover from the + invalid password entry. If the connection fails and the password + was entered interactively, the user is given a chance to reenter + the password without leaving the kernel. (11/25) + +[networking and default directories] + This is to clarify a bug report regarding the default directory for + network accesses. In a reference `node!dir' the file `dir' could be + either a subdirectory or a logical directory. Currently, the default + directory of the kernel server on the remote node defaults to the + user's login directory on that node, and is not affected by change + directories on the local node. Hence, if `dir' is a subdirectory of + the user's root directory, the usual search mechanism will reference + the subdirectory rather than any logical directory of the same name. + This did not use to work as expected (hence the bug report), but was + fixed by a modification to the kernel server some time back. (11/25) + +pkg/cl/config.h + Increased the stack and dictionary sizes, i.e., + + stack: 8000 -> 20000 + dict : 30000 -> 40000 + + This is all paged memory on most systems, hence there is little reason + to worry about the static size of the array. (11/25) + +sys/etc/pagefiles.x + Fixed a bug in the ":f fname" file-positioning command, which would + cause it to position to the wrong file in some cases. (11/26) + +sys/fio/zfiott.x + In stty playback mode, the ZFIOTT terminal driver was not dealing with + the case of an EOF on the STDIN stream, when reading from the terminal. + It now returns and EOF indication (nchars=0) to the calling program, + and prints "[EOF]" on the terminal. (11/26) + +unix/boot/spp/xc.hlp +vms/boot/spp/xc.hlp + Updated the XC manual page. Added -d, -v, -m to the list, and modified + to reflect the recent switch to optimization by default. Recall that + the new switch to defeat optimization is -q. The -O switch is still + recognized. The principle reason for making optimization the default + was to avoid the need to use a case sensitive switch. (11/26) + +unix/boot/mkpkg/main.c +vms/boot/mkpkg/main.c + Modified the way the mkpkg argument list is parsed, to be a bit more + permissive on the grouping of single character switches behind a + single `-'. Previously, + + mkpkg -nd -f stdin + + would work, while + + mkpkg -ndf stdin + + would not. Now, both will work, and even combinations like + + mkpkg -dfn stdin + + where it is understood that the embedded -f uses the next token. + Processing will continue following the `stdin' argument. (11/26) + +pkg/utilities/utilities.cl +pkg/system/system.cl +pkg/softools/softools.cl +pkg/plot/plot.cl +pkg/images/images.cl + Deleted the SET declarations for the package logical directories + in all these scripts. These directories are already defined in + hlib$zzsetenv.def, hence redefining them in the package script + tasks is unnecessary, and prevents one from redefining the package + directory before loading the package, to permit use of a private + version of the package. (11/26) + +noao/imred/imred.cl +noao/astutil/astutil.cl + Also deleted the SET declarations from these package script tasks. + The package logical directories are defined when the NOAO package + is loaded. (11/26) + +sys/gio/cursor/mkpkg +sys/gio/cursor/rcursor.x +sys/gio/cursor/gtrgtty.x + + If the HJKL keys were used to attempt to position the cursor on a + terminal that did not support the write cursor (WC) capability, the + software position would be updated as if the cursor had moved, which + of course it wouldn't if the terminal did not support write cursor. + Added a new function gtr_gtty() to return the graphcap descriptor + for a cursor mode stream, and modified the cursor read loop in + rcursor() to use this plus ttygetb() to test if the WC capability + exists before updating the cursor position in software. (11/26) + +sys/tty/ttysubi.x +sys/tty/ttygoto.x + This is the cursor positioning code for terminals. The case %+C was + not being handled correctly in all cases. It would work for printable + characters, but when (X|Y)+C was a control code the formatting code + being used would output it as \NNN. Moved the case `%+' to the code + which handles case `%.', which should fix the problem. Also replaced + the ttyputs() calls in ttygoto() by calls to ttywrite(), in case the + output string contains any embedded nulls. When testing this on a + terminal that uses control code adressing (e.g., 0-23 binary), note + that if a control code is generated which is special to the driver + (e.g., LF) the TTY code will position to a point near the desired + location, and then use character level positioning to move the rest + of the way in. The reserved tty driver chars are defined in file + tty$tty.h. (11/26) + +sys/imfort/imfort.h +sys/imfort/imcrex.x +sys/imfort/imemsg.x +sys/imfort/doc/imcrex.hlp + Added code to verify the `naxis', `axlen[]', and `pixtype' input + arguments to IMCREX (the create image operator). (11/26) + +vms/boot/bootlib/dcl.c +vms/os/zoscmd.c + Added a call to _zerror() to print an informative VMS error message + if the DCL spawn fails or a mailbox create fails. This can happen + easily if the user account has insufficient quota, and without a + specific VMS error message it is almost impossible for the user to + figure out what is going on. (11/26) + +sys/gio/wcstogki.x + Added clipping of the transformed coordinates to the range zero to + GKI_MAXNDC. The input world coordinates could be anything, potentially + causing the transformed GKI coordinates to fall outside of the 16 bit + GKI space, causing integer overflow or truncation errors when the + coordinates are eventually converted to integer. (11/26) + +sys/fio/zfiott.x + Previously, if the user typed `stty playback' while in `stty login' + mode (recording the input keystrokes), playback mode would actually + be started with input logging still in effect. Usually the login + file would still be in a file output buffer and the actual file + would be zero length. Playback would reopen the file and immediately + see EOF, terminating playback mode. The `stty playback' command + would be logged, however, causing a loop when the login file was + later played back. This is what would happen on UNIX; on most other + systems a file open error would result, due to trying to reopen a + file already opened for writing by someone else. + + I decided the loop "feature" makes sense and might actually be useful + for exhaustively testing software or hardware. If one wants to + terminate login mode and enter playback mode that is already possible. + Hence, the terminal driver was modified to log but not execute the + playback command, if entered during `stty login' mode. A message + is printed to warn the user that something out of the ordinary has + occurred. (11/26) + +sys/imfort/imfparse.x + Had the same bug as sys/imio/iki/ikiparse.x, which could cause + non-filename extension dot delimited fields to occasionally be + stripped from the output image name. (11/26) + +sys/imfort/imcrex.x + The image header field IM_HDRFILE was not being set to the header + file pathname before calling imf_gpixfname to generate the pixel + file name. This would cause the pixel file to always be created + in the current directory, which was fine unless the image header + file was created in a directory other than the default. (11/26) + +pkg/system/help/nomore.x - + Deleted this obsolete file, no longer used. (11/27) + +sys/clio/clgkey.x + The maxch argument was not being used, allowing the output string to + be overrun. This would happen when responding to the HELP prompt + with a : command, since the HELP code does not use any colon commands, + and hence calls clgkey() with a very small maxch. (11/27) + +sys/clio/clgcur.x + A check of the clgcur() cursor read routine, from which the clgkey() + code was derived, revealed that maxch checking was not being performed + here, either. This is the original bug, inherited by clgkey, which + was added later. (11/27) + +sys/etc/prupdate.x + Added some parenthesis to a boolean expression to ensure that it will + be evaluated as desired (just insurance, not a bug). (11/27) + +sys/etc/sttyco.x + The new STTY task would set the terminal environment variables in the + CL process, but the new values were not being propagated to child + processes. Added calls to prenvset() to set the environment variables + both in the parent and in all connected child processes. (11/27) + +sys/etc/envreset.x + # new function +sys/etc/environ.x # modified to allocate more storage +sys/etc/environ.h # added one field to list element struct +sys/etc/mkpkg + Added a new function ENVRESET to the environment list package. The + new function is used to update, in place, the value of an environment + variable when one wants to permanently change the value. To keep it + simple and minimize changes to the package this was done by always + allocating at least a minimum amount of storage for the value string + when a new environment variable is defined. Currently, space is + allocated for at least 20 chars; this is more than twice as long as + any of the device names currently used on our development system. + If the new string won't fit ENVRESET will silently call ENVPUTS to + redefine the variable instead. A large amount of storage can be + allocated for a variable by the simple expedient of defining it + initially with a dummy value longer than the largest real value + expected, and then "reseting" the actual value. + +sys/etc/sttyco.x + The STTY terminal driver user interface was modified to use the new + envreset function rather than redefining the device names and + characteristics, since a redefinition is usually not what is desired + in this case. + +sys/etc/envscan.x + The ENVSCAN procedure is used by the IRAF main to initialize the + environment list during process startup, as well as to handle SET + statements received from the parent process during process execution + via IPC, when new SET statements are issued in the CL. The environment + mechanism has long had a defect in that while new SET statements are + propagated to any connected child processes to temporarily redefine + old variables, there was no mechanism for discarding temporary + redefinitions in child processes when a CL context is popped (e.g., + when exiting a package). + + As a first step in fixing this problem, ENVSCAN was modified to use + ENVRESET rather than ENVPUTS. The idea is to have the CL reissue the + SET statements for any uncovered redefinitions to all connected + subprocesses when a CL context is popped. The master environment + list in the CL will maintain all redefinitions (it already does), + while the environment lists in the child processes will keep only + the most recent value of each variable. This scheme seems simpler + and more reliable than complicating the IPC mechanism so that it + can deal with the full semantics of the environment mechanism, i.e., + redefinitions, mark and free, and the new reset function. Another + solution would be to flush the process cache when redefined values + are uncovered, but that is too inefficient. (11/27) + +sys/imfort/imcrex.x + The code used to generate the pixel file name would have had a problem + with multiple . delimited fields. These are permissible on UNIX + systems but not VMS systems (recall that IMFORT, being a low level + interface, can deal only with host filenames, unlike the VOS interaces). + The problem was such that, when creating an image named `pix.001', + the header file would be named `pix.001.imh' but the pixel file + would be named `pix.pix', due to the use of file rather than image + operators to extract the root filename from `pix.001'. The new code + will generate the pixel file name `pix.001.pix'. (11/27) + +sys/etc/environ.x + Modified the calling sequence of the envfree() procedure as follows. + Envfree() is used to discard recently defined or redefined environment + variables following a prior call to envmark() to mark the top of the + environment stack. + + old: nredefs = envfree (marker) + new: nredefs = envfree (marker, userfcn) + + where `userfcn' is the integer zlocpr entry point address of a user + supplied function to be called when a redefinition is uncovered. + If `userfcn' is zero no function will be called. + +sys/etc/prenvfree.x + + Added a new function PRENVFREE to facilitate updating the values + of redefined environment variables uncovered in an envfree() operation + in the specified connected subprocesses. The new function is + equivalent to envfree() except that it updates the environment of + the specified connected suprocesses as well as the current process. + The calling sequence is: nredefs = prenvfree (pid, marker). + +sys/etc/zzdebug.x +sys/libc/cenvmark.c +sys/libc/cenvget.c + These files contained calls to envfree() for which the calling + sequences had to be modified. Also added an entry c_prenvfree() + to the file cenvmark.c, and an entry c_envreset() to cenvget.c. + (11/28) + +unix/hlib/libc/xnames.h + Added entries for PRENVFREE and ENVRESET. (11/28) + +pkg/cl/builtin.c + Added the new builtin task RESET. This is equivalent to SET except + that it will (if possible) update the most recently defined value of + the named environment variable in place, rather than adding a new + definition or redefinition which could later be discarded. The only + exception to this occurs when the new value string is too large to fit + in the space allocated when the original variable was defined, in + which case a new entry is added redefining the old one. In practice + the update should virtually always be in place. If the new value + string is 20 chars or less in length than the update is guaranteed + to be in place (the 20 chars is of course a compile time variable and + can be increased if necessary). Note that STTY automatically uses + RESET to update the environment variables describing the terminal. + A RESET in the CL will automatically be propagated to all child + processes. (11/28) + +pkg/cl/exec.c + The calls to c_envfree() and flprcache() in poptask() (called when a + task terminates) were replaced by a single call to c_prenvfree(). + This discards any redefinitions of environment variables made during + the execution of a task, e.g., a package script task. New definitions + are discarded in the CL but actually still exist in the subprocess + environment tables, but this is harmless and is a hidden detail of + how the environment mechansism is implemented which may safely be + ignored. (11/28) + +unix/hlib/login.cl + Replaced the `set terminal = U_TERM' entry by a call to STTY. This + is necessary to pick up the correct ncols/nlines values from the + termcap entry for the device. The new STTY is very fast provided + the termcap entries for the terminals in common use at a site are + cached with MKTTY. (11/28) + +sys/ki/kiopenks.x +sys/ki/kienvreset.x + +sys/ki/irafks.x + Added a new function KI_ENVRESET, to be used to update environment + variables piecemeal on call the connected kernel servers serving a + given client process. This is done using the ENVINIT network + function, which is also used by ki_openks() to transmit the entire + initial environment set when a server is first connected. To provide + reasonable efficiency for single variable updates, the kernel server + (irafks.x) was modified to eliminate the status return for ENVINIT + when used for single variable updates. This makes it possible to + pipeline a number of ki_envreset() packets without waiting for the + server to process them and respond. A status packet is still used + when the full environment list is transmitted initially, mostly + because if I eliminated it now then old versions of IRAF would + deadlock when trying to talk to >V2.5 kernel servers. + + In the process of making these mods I noticed and fixed the following: + in kiopenks.x, the environment value strings were not being quoted, + which would have caused value strings containing whitespace to be + truncated in the server. + +sys/etc/environ.x +sys/etc/envreset.x + Modified the envputs() and envreset() functions to call ki_envreset() + to update the environment in any connected kernel servers if the + environment list of the client process is modified. + + With these last two changes, the environment list will now be kept up + to date at all times in all the processes in a process tree, including + any kernel server processes on remote nodes in the network. All of + the processes in a process tree (with either an interactive or bkg + CL at the root) share the same environment list, with the exception + of the three variables IRAF, HOST, and TMP, which are defined + independently for each node. (11/28) + +unix/boot/spp/xc.c [XC, FC] + Given the two files `file.e' and `file.f' in the current directory, the + UNIX version of XC (or FC), when called accidentally as `xc file.e', + would delete the file `file.f'! (fortunately, I discovered this and + not some poor user). It turned out that the UNIX Fortran compiler + f77 was the culprit; for some reason it likes to delete .f files when + it sees a .e file in the file list, probably because it thinks the .e + file is an EFL source file. The UNIX XC was modified to produce a + fatal error and abort if a .e file is seen in the file list. (11/28) + +unix/boot/rmbin/rmbin.c +vms/boot/rmbin/rmbin.c + Commands such as + + rmbin -n -o .cl . + + would fail because the directory `.' was being taken to be one of + the . prefixed filename extensions associated with the -o switch. + (11/29) + +pkg/.../*.cl +noao/.../*.cl +unix/hlib/*.cl + To all non-procedure CL scripts that use { } command grouping, + added a #{ at the top of the script to force compute mode. (11/29) + +pkg/cl/lexicon.c + Deleted the bracelevel test, formerly used to switch to compute mode + inside curly braces. Command mode is now in effect everywhere except + in procedures or within parenthesized expressions or argument lists, + unless the #{ construct (or a lex=no assignment) is used to force + compute mode. This should eliminate much of the confusion people have + been experiencing regarding the two lexical modes. (11/29) + +pkg/system/cmdstr.x + Increased the size of the output buffer from 1000 to 4096 and converted + all character arrays from static to stack storage. (11/29) + +sys/etc/sttyco.x + Modified the STTY program to look for the parameter `gd' in the + termcap entry for a terminal when a new terminal type is set. + This parameter, if given, is used to set a new value for the + `stdgraph' environment variable, allowing everything to be set + with a single call to the STTY command. If only the boolean + capability is given, e.g., ":gd:", the stdgraph device name is + assumed to be the same as the termcap device name, otherwise the + stdgraph device name must be given, e.g., ":gd=4012:". If the `gd' + capability is not defined stdgraph is set to "none". + + For example, if we set the terminal as follows: + + cl> stty vt100 + + and then enter the following command, the output shown will be + generated: + + cl> implot dev$pix + ERROR: Terminal does not support vector graphics + + Also added a call to TTYINIT to output the initialization sequence to + the terminal when the terminal name is set. The initialization + sequence, if given, is used to set the terminal to a known state, + e.g., set the font and character size, the type of emulation to be + used, disable reverse video, and so on. (11/29) + +sys/tty/ttyinit.x + Rewrote this ancient code somewhat. The funny filename business is + gone, it now simply opens the file named in the termcap entry, and of + course the filename may be either an IRAF virtual filename or a host + system pathname. The file open is error checked and a warning message + printed if the file cannot be opened, and the file is now copied with + the FCOPYO routine. (11/29) + +sys/gio/cursor/gtropenws.x + When the open workstation command is first issued for a new device + on a stream, this routine now checks for the special device name + "none" and prints a message to the effect that the terminal does + not support vector graphics, no stdimage devices are available, + or whatever. Terminals which do not support vector graphics may + either omit the `gd' capability from the termcap entry for the + device, or set the capability to `:gd=none:'. If no standard image + devices are available at a site, the system manager can set the + value of `stdimage' to `none' in the hlib$zzsetenv.def file, to + give the user an error message which is easier to understand than + at present, if they should try to access the stream. (11/29) + + NOTE: the old termcap entries for graphics terminals should be + modified to add the `gd' parameter to make things easy for the user. + Alternatively, the value of the `stdgraph' environment variable must + be reset after calling STTY to set the terminal type. + +dev/termcap [UNIX/IRAF] + Added the :gd: capability to the entries for the more obvious graphics + terminals. Deleted a sequence from the initialization sequence for + the vt100 and vt220 which was moving the cursor to the lower left + corner for some unexplained reason; all that it does now is disable + the scrolling region, if any is set. Added an initialization sequence + to the entry for the vt640 (vt100+retrographics) which sets vt100 + mode and then resets the scrolling region. (11/29) + +dev/termcap + The vt240/vt220 entries in the termcap file did not load when I + tried to cache them - there was a reference to a nonexistent entry + for the vt200. Deleted the vt200 series entries and replaced them + by the versions in the UNIX /etc/termcap. (11/29) + +dev/cachet.dat + Rebuilt the termcap cache to reflect the changes to the termcap file. + (11/29) + +sys/etc/sttyco.x +dev/termcap + This terminal initialization stuff is just too obnoxious, given the + initialization sequences given in the standard termcap file. + Initialization is no longer performed by default, instead I added + a new option `init' to STTY. The commands + + cl> stty init + or + cl> stty vt100 init # (for example) + + will cause the initialization sequence to be output to the terminal. + Of course this can be indicated in the STTY command line in the + LOGIN.CL file, if desired. Restored the goto to the termcap entries + for the vt100 and vt200 classes of devices. (11/29) + +sys/gio/gopen.x + Added code to check for the special device name "none", and to generate + an error abort if a program attempts to open a graphics kernel on a + stream which is connected to a nongraphics device or no device. (11/29) + +lib/fio.h +sys/fio/fseti.x +sys/gio/cursor/prpsio.x +sys/fio/zfiott.x + Added a RAWON escape sequence to go along with the RAWOFF already + recognized by the IRAF terminal drivers. The length of both sequences + is defined by LEN_RAWCMD, and the first character of the sequence is + guaranteed to be ESC (escape), to permit rapid comparisons. FSETI + was modified to transmit the RAWON sequence when raw mode in enabled, + as well as transmitting the RAWOFF sequence when raw mode is disabled, + which it has always done. The virtual terminal driver ZFIOTT was + modified to recognize the new control sequence. This change was made + to that raw mode can be enabled without having to read from the + terminal, which is not possible if input is not expected. Raw mode + is useful for output only (as when the terminal initialization sequence + is issued) because output processing of tabs and newlines etc. is + supposed to be disabled when raw mode is in effect. (11/29) + +sys/fio/ttyinit.x + Modified to turn raw mode on while transmitting the terminal + initialization string. (11/29) + +unix/hlib/libc/kernel.h +unix/os/zfiotx.c + Modified the UNIX OS terminal driver to recognize the new RAWON + sequence. (11/29) + +vms/os/vms.h +vms/os/zfioty.c + Modified the VMS OS terminal driver to recognize the new RAWON + sequence. The driver now also disables output processing during + rawmode output, i.e., newlines are output as newlines and not + mapped into CRLF. (11/29) + +unix/boot/spp/xpp/xppcode.c + In the function hashtbl(), changed the MAX_KEY to MAX_KEY-1. + This was evidently done on VMS/IRAF some time ago, but the + change was never propagated to the UNIX/IRAF HSI (and evidently + it has never caused any problems). (11/29) + +-------------------------------- +(begin update of VMS/IRAF [IRAFX@USR$1] to V2.5) + +dev/termcap [both UNIX, VMS] + Set up the printers like in the graphcap file, e.g., a system + independent entry `ver' with tc= pointing to uver for UNIX and + vver for VMS, and so on for each device. When new versions of + the file are moved to VMS, one only has to go down a column and + change a few `u's to `v's. (11/29) + +dev +vms/... + Merged in all recent changes into the VMS/IRAF HSI. These were + mostly in hlib and hlib/libc (#{ changes, .pkg extensions, libc/*.h + changes for new tt driver), and in XPP and RPP (larger buffers). + (11/29) + +-------------------------------- +(Did a full bootstrap of VMS/IRAF) +(Deleted the entire contents of the doc,lib,math,noao,pkg,sys directories +(on VMS/IRAf and replaced these by the V2.5 versions from lyra. Started up +(a full sysgen to run overnight. 11/29) + +sys/etc/pagefiles.x + Fixed a problem with files containing formfeeds; would not be able + to advance beyond the formfeed in some cases due to interaction + between seeks and pushback. (11/30) + +sys/tty/tty.h +sys/tty/ttyodes.x +sys/tty/ttyputl.x + The ttyputline() procedure was modified to know how to deal with + terminals that have an automatic right margin (the `am' capability + of termcap). On these terminals when the last character on a line + is written the terminal automatically advances to the next line, + and the newline which normally ends a line must be omitted or the + output will come out double spaced. On terminals without automargins, + the line must be broken and an extra newline output, or the rest of + the line will be lost. (11/30) + +------------------------------- +(VMS/IRAF did not come up on the first attempt...) + +pkg/cl/mkpkg + The object opcodes.o must be explicitly linked on the command line + on VMS, like globals.o (on AOS, only globals.o needs to be referenced + on the command line). Modified the mkpkg file to link both objects + explicitly and to maintain them in the package directory independently + of the package library. (11/30) + +pkg/cl/clprintf.c +pkg/cl/errs.c +sys/libc/printf.c +sys/libc/eprintf.c +sys/libc/sprintf.c +sys/libc/scanf.c + The initial attempt to use in the C files which deal + with variable numbers of arguments was not quite correct. We have + been setting things up as follows (for example): + + eprintf (fmtstr, va_alist) + char *fmtstr; + va_dcl + { + va_list argp; + + The correct usage is the following: + + eprintf (va_alist) + va_dcl + { + va_list argp; + char *fmtstr; + + va_start (argp) + fmtstr = va_arg (argp, char *); + + Specifically, the va_alist must replace the entire argument list, + not just a portion of it. The VMS implementation ignores the + va_alist entirely and instead calls a library subroutine written + in assembler to set argp to point to the first argument, regardless + of where the va_alist appears in the function declaration. To be + fair, it does appear from the UNIX specifications for + that the va_alist should denote the entire argument list. + + In each of the affected files, made the changes noted above, and also + replaced the "#include " by an "#define import_varargs" + so that the HSI will have control over the varargs interface. (11/30) + +unix/hlib/libc/varargs.h + +unix/hlib/libc/iraf.h + Added an include file for varargs.h in hlib/libc. For UNIX, this + just does a "#include " to pick up the UNIX definitions. + (11/30) + +vms/hlib/libc/varargs.h + +vms/hlib/libc/iraf.h + The VMS version of uses a library function to implement + the va_start() macro. I implemented this in macro and it works, but + in studying the two interfaces there seem so reason not to use the + simpler UNIX macros, thereby eliminating the dependence upon the + quirky VMS/C interface. Hence, varargs.h is the UNIX file, i.e., + it is the real thing, it does not do a #include. (11/30) + +pkg/cl/grammar.y +pkg/cl/grammar.h +pkg/cl/lexicon.c + The lexmodes switch had to be taught about procedures. (12/1) + +sys/etc/isatty.x +sys/libc/isatty.c +unix/hlib/libc/xnames.h +vms/hlib/libc/xnames.h + Changed the name of the VOS ISATTY routine to XISATTY. Using the + UNIX name was asking for trouble, and indeed it caused problems on + VMS/IRAF, although in an unexpected way. The VOS name with no + underscore mapped to `isatty', the LIBC and UNIX name. This would + cause infinite recursion in the VMS version of IRAF. (12/1) + +-------------------------------------------------------------------------- +SDAS installation, December 4, S.R., VMS (Draco!irafx, usr$1 only) + +vms/hlib/clpackage.cl + Changed SDAS definition to point to sdasdisk:[sdas.sysiraf]sdas.cl. + (12/4) + +vms/hlib/zzsetenv.def + Added definition for "sdasx". (12/4) + +vms/hlib/clpackage.hd + Added SDAS help file pointers. (12/4) + +mkhelpdb (vms) + Ran softools.mkhelpdb to pick up SDAS stuff. (12/4) + +vms/hlib/mkpkg.inc + Added $include for SDAS macros. (12/4) + +vms/hlib/stripper + Changed "math -all" to "math -allbut .hd" for SDAS inst. (12/4) +---------------------- + +dev/termcap + Merged in entry for the Sun apple laserwriter (printer), and added + host printer entries for the Sun. (12/18) + +sys/fio/zfiott.x + Increased the maximum size of a playback record from 1024 to 4096. + The buffer is dynamically allocated and only used during playback + mode. (12/19) + +sys/memio/begmem.x + Replaced the "text_size" output parameter, formerly returned by + BEGMEM, by a "max_size" parameter. The new parameter gives the + hard limit on the amount of physical memory available to a process + at runtime, taking into account the dynamic working set adjustment + facilities available on many systems. A process which exceeds its + allocated working set but not its hard limit can be expected to + page some or heavily depending upon system load; if the hard limit + is exceeded it will either page heavily or malloc will fail. (12/22) + +unix/os/zawset.c +unix/hlib/libc/kernel.h + Rewrote the ZAWSET code to use the 4.2BSD+ set/getrlimit facilities + rather than the obsolete 4.1BSD vlimit. Increased the default + advisory working set to 500K. There does not appear to be any + reliable way to determine the physical memory size in 4.XBSD UNIX, + so the kernel parameter SZ_MAXWORKSET is used to set an upper + limit on the value of the "max_size" parameter returned by BEGMEM. + (12/22) + +vms/os/zawset.c + Replaced the text_size parameter by max_size (WSEXTENT). (12/22) + +sys/imio/imsetr.x +sys/imio/imunmap.x +sys/imio/imrmbufs.x + +lib/imset.h + Added a new imset option IM_CANCEL, the function of which is to + free up all pixel data buffers previously allocated when i/o was + done on an image. This is occasionally useful when very large + buffers (e.g., large subrasters) are accessed by a program. (12/22) + +pkg/system/help/houtput.x + The HELP program would leave the last line or two on the screen empty + when paging through a manual page (this was especially evident on a + workstation since the window boundary is so clearly defined). + Modified so that each screen is filled. Will also pick up changes + to the number of lines per screen (ttynlines) as soon as the value + of the environment variable is changed, e.g., in an stty call. (12/24) + +pkg/system/help/t_help.x + Now checks the create date on the help database file every time HELP + is run, and re-reads the database if a new database has been created + and installed. This should eliminate the need to flush x_system.e + from the process cache when mkhelpdb is run. (12/24) + +sys/vops/amed.gx + This routine calls ASOK to compute the median of a vector in the + general case of npix>3. Since the ASOK routine partially sorts + the input vector in place, this would result in AMED also sorting + the input vector, which is probably not what the user expects. + Accordingly, AMED was modified to copy the input data vector into + an internal salloc-ed temporary buffer so that it no longer modifies + the input vector. If the slight inefficiency introduced by this + modification is unacceptable the ASOK routine should be called + directly instead. (1/8) + +dev/termcap +dev/graphcap + The entry for the calcomp was modified to give the calcomp a standard + landscape mode aspect ratio like everything else. (1/9) + +dev/termcap +dev/graphcap + Added new entries gterm,gterm40,gterm34,gterm24 for the GTERM virtual + graphics terminal running on a Sun workstation. These are currently + identical to the "sun" entries with the addition of a "gd=gterm" + capability indicating that the terminal supports graphics. (1/10) + +dev/cacheg.dat +dev/cachet.dat + The termcap and graphcap entries for the GTERM Sun virtual graphics + terminal were added to the cache. (1/10) + +sys/gio/stdgraph/mkpkg +sys/gio/stdgraph/stdgraph.com +sys/gio/stdgraph/stgactive.x + +sys/gio/stdgraph/stgctrl.x +sys/gio/stdgraph/stgdeact.x +sys/gio/stdgraph/stgdraw.x +sys/gio/stdgraph/stgmove.x +sys/gio/stdgraph/stgopen.x +sys/gio/stdgraph/stgoutput.x +sys/gio/stdgraph/stgpcell.x +sys/gio/stdgraph/stgpl.x +sys/gio/stdgraph/stgpm.x +sys/gio/stdgraph/stgrcur.x +sys/gio/stdgraph/stgreact.x +sys/gio/stdgraph/stgreset.x +sys/gio/stdgraph/stgtx.x + The stdgraph kernel was modified to eliminate unnecessary deactivate + workstation calls. When writing to an dual frame, either/or terminal + like Sun/GTERM, the deactivate workstation directive may cause the + graphics frame to be turned off and the text frame turned on. If the + next thing that happens is that the graphics is turned back on, this + is a great waste of time and if one of the frames is not retained its + contents are lost. The nature of the modification was to cause the + deactivate workstation call to set a flag. If the next command + received by the kernel is a i/o command the deactivate workstation + control sequence is issued to the terminal and the flag is cleared. + If the next command received is reactivate workstation the flag is + cleared and no other action is taken, i.e., the workstation remains + activated. [This revision was actually made on 3 Jan]. (1/10) + +sys/gio/cursor/giotr.x +sys/gio/cursor/grcclose.x +sys/gio/cursor/grcopen.x +sys/gio/cursor/grcwaitp.x +sys/gio/cursor/grcwcs.x +sys/gio/cursor/gtr.h +sys/gio/cursor/gtrctrl.x +sys/gio/cursor/gtropenws.x + The cursor mode code also had to be modified to eliminate unecessary + close/open deactivate/reactivate workstation commands. A number of + cases were defined which had to be dealt with carefully: cursor + mode may be entered [1] from within an interactive program after the + workstation has already been opened with GOPEN, [2] while the kernel + is connected to the stream but after GCLOSE has been called, [3] while + the stream is in its initial state, i.e., no kernel connected. + Furthermore, a distinction had to be made between kernel control + directives (DEACTIVATEWS etc.) issued at runtime by an interactive + program, and those present in GKI metacode being played back. + + It is difficult to describe the actual revisions precisely here, + but briefly, the list of control directives handled by the pseudofile + i/o controller (gtr_control) was expanded to include CLOSEWS, + DEACTIVATEWS, and REACTIVATEWS, the controller now passes all runtime + control directives directly on to the graphics kernel, and GIOTR was + modified to filter out all control directives except OPENWS. In other + words, control directives such as close or deactivate workstation + present in spooled GKI metacode are ignored when the metacode is + retransmitted to a graphics kernel following a `0' or `:.read'. + The open workstation directive is still recognized when replaying + spooled metacode, and is all that is required to cause a frame advance + or screen clear between successive graphics frames. (1/10) + +sys/gio/gki/gkiclose.x +sys/gio/gki/gkideact.x +sys/gio/gki/gkireact.x + These GKI primitives were modified to send a copy of their GKI + instruction to the PSIOCTRL stream as well as to the output graphics + stream. The PSIOCTRL version is the one which causes some action at + runtime, whereas the data version is included in the output GKI + metacode stream only for the sake of completeness (some program may + wish to make use of it) and for debugging purposes. (1/10) + +sys/gio/stdgraph/t_stdgraph.x + The STDGRAPH kernel (PLOT task) was modified to [1] filter all close + workstation, deactivate workstation, and reactivate workstation + directives out of the input metacode stream, and [2] explicitly add a + close workstation directive before task termination to ensure that the + terminal is left in text mode. (1/10) + +sys/etc/pagefiles.x + The clear_screen option is now used to defeat screen clears only when + sequentially advancing through a file, e.g., with space bar or 'f'. + All backwards motions or seeks cause a screen clear followed by output + of the data. The file or object name in the end-of-page prompt is + no longer changed to EOF at the end of file, rather, the percent done + indicator is changed to -(EOF). This was necessary for it to be + possible to always see what was being paged. (1/14) + +unix/hlib/iraf.h +unix/hlib/SUN_kludge/precomp.csh [SUN/IRAF] + Changed the definition of IS_INDEFX so that it no longers uses a + complex comparison; it now does only a single precision real + comparison of the real part of the complex number, i.e., + + define IS_INDEFX (real($1)==INDEFR) + + The complex comparison would cause the Sun fortran compiler to crash + when used with the hardware floating point options. (The floating point + equality used here and in the other IS_INDEFs has yet to cause any + problems when comparing magic numbers, but will be replaced by an + order comparison in a future version of the system to eliminate the + risk). On the Sun systems, removed the entries for gctod.x and xtoc.x + from the precomp.csh file, since complex comparison is no longer used. + (1/14) + +os/mkpkg +os/net/mkpkg +boot/bootlib/mkpkg +boot/mkpkg/mkpkg +sys/mkpkg (module libmain.o:) + Added a $set XFLAGS = "-c" statement to each of these mkpkg files. + This is needed on systems like the SUN to override any host dependent + compiler options used for the main IRAF system, e.g., floating point + compiler options like -f/68881 etc. The HSI wants to be compiled + without any special options, e.g., it should use only software + floating point (if floating point is used at all), for maximum + portability of the binaries. (1/15) + +unix/boot/spp/xc.c + The f77 command line switch "-cu" was changed to "-c -u". The Sun + f77 does not permit clustering of switches, and hence the -u switch + was not being seen and the Sun XC was not checking for undefined + variables and functions. (1/15) + +unix/os/zfiopr.c +unix/os/zopdpr.c +unix/os/zoscmd.c +unix/os/zmain.c + Modified these routines to use fcntl() to arrange for file descriptors + other than stdin, stdout, and stderr (0-2) to be closed in the child + if the execl succeeds, and deleted the loop over close() in zmain. + This was necessary for the Sun-3 fpa and was necessary before for the + Sun-2 skyfpa; I thought I had merged the changes into the master system + but evidently not. (1/15) + +--------------------- +(The following revisions are from the first installation of SUN/IRAF at the +(KPNO 4-meter telescope on 21 January 1987). + +/usr/lib/suntools + Installed latest version of GTERM in suntools. (1/21) + +dev/graphcap + Changed MF from 8 to 1 for the apple laserwriter. There is no need + to spool plots for this device. Also added the aliases "lw" and "lws" + for the two apple laserwriter entries, since the device name on the + Sun is "lw" rather than the "apple" currently used in IRAF. (1/21) + +sys/gio/cursor/grccmd.x + Modified to do an automatic gflush if MF is <= 1. In the process of + making this modification and testing the new system, discovered [1] + this routine was calling grc_open() as a subroutine, while it is a + function, and [2] the code which calls grc_command assumes that the + stream data structures are left intact by the call. Added a call to + gtr_init() at the end, before exiting, to insure that the latter + assumption is correct. (1/21) + +sys/gio/cursor/gtr.h +sys/gio/cursor/rcursor.x +lib/scr/cursor.key + Added a new key "=" to cursor mode. This is shorthand for the commonly + used function :.snap. A prior call to ":.snap dev" is needed to set + the output device, else the default stdplot device will be used. (1/21) + +sys/gio/cursor/gtrinit.x + There was a bug in this code, when called immediately after a :.gflush + on some other stream. The gflush would invalidate the cache but + gtr_init would find the stream already inited and would not reload + the cache for the new stream. The logic was changed so that it always + reloads the cache for the new stream if it is not already set up for + the correct stream, moving the conditional which used to check for an + invalidated cache to the code which saves the cache in the descriptor + for the formerly cached stream. In other words, the old cache contents + are now saved only if they are valid, and the cache is always set up + correctly for the new stream, which was what was not being done + formerly. (1/21) + +---------------------- +(Begin the final bug-fixing pass for V2.5) + +unix/os/zpanic.c + Modified zpanic to core dump the current process if called when the + debug_sig flag is set. (This revision need not be made in all V2.5 + IRAF versions). (2/4) + +sys/gio/cursor/prpsio.x + Modified to discard graphics control output via stream PSIOCTRL when + the associated graphics stream has been redirected to a file. This + is the fix for the graphics stream redirection bug (>G). What was + happening was that the call by pr_psio to gtr_control would take an + error action when the stream had been redirected and hence the graphics + kernel had never been activated. UNIX stdio (LIBC) converts getc errors + to EOF, and the CL lexical input stream does not check EOF's to see if + they are really i/o errors, hence the CL would see a premature EOF on + the command input stream from the graphics task. The task would be + terminated at the CL level without reading the graphics output and + writing it to the redirection file, hence the file size would be zero. + The next time a task was run in the subprocess (e.g., x_plot.e), the + graphics output from the previous task would be read and passed on to + the graphics kernel connected to the stream of the new task. (2/5) + +pkg/cl/gquery.c + EPARAM could not be used to set the value field (list file name) of a + list structured parameter, due to some muddled code in gquery(), which + was originally derived from query(), but which is not used in the same + way for list structured params (since it is used to assign a new value + to a param, rather than verify the current value). (2/5) + +sys/imio/iki/stf/stfopen.x + Now forces the datatype of a NEW_COPY image to real if a new physical + image is being created. This fixes the bug where + + imcopy dev$pix[*,1] pix.hhh + + would create a type real image with short integer pixels. For some + reason this would work correctly if the section were omitted. (2/5) + +sys/imio/imt.x + Disabled sorting of image template lists. Image templates are often + used to generate both input and output lists from the same database. + The lists must be of the same length and in the same order for this + to work as expected. The problem is that the output list is often + edited with a // or %%, and it is the edited list which is sorted, + hence it is possible for the input and output lists to be sorted + differently if the output list is edited. (2/6) + +sys/fio/filopn.x + After the call to zopen_proc (the device driver open procedure for the + file), added an fp=fiodes[fd] statement to reinitialize the file + pointer, in case it is clobbered by the called procedure. In the case + tested, the LPOPEN device open procedure was clobbering fp in the fio + common, and an open failure was not getting caught. (2/7) + +dev/hosts + For the VMS nodes, changed the kernel server pathnames to the UNIX + syntax, since the REXEC server used in the tcp/ip network interface + uses the unix syntax even on VMS. (2/7) + +sys/ki/irafks.x + Added some new debug conditionals. (2/8) + +vms/os/net/zfioks.c + Replaced the network channel by input and output channels, which can + be the same but do not need to be. (2/8) + +bin/irafks.e [VMS] + I tried various experiments to get the VMS TCP/IP kernel server going, + without success. The main conclusion appears to be that use of the + REXEC daemon is not the way to go for VMS. The process tree to the + actual kernel server is as follows: + + rexecd.exe + csh.exe + irafks.exe + + where rexecd.exe is itself spawned by the INET_SERVERS daemon. This + hardly seems an efficient process structure. Furthermore, the Eunice + REXEC server does not read the user LOGIN.COM file, hence the IRAF + logical names will not be defined and some things will not work. + + Ignoring all that, I was able to execute the kernel server but could + not make the network connection. The irafks.e SYS$INPUT was set to + "_INET28". The system knows about a logical network device _INET0: + (the Eunice tcp/ip device driver), but trying to sys$assign a channel + to _INET28: causes a "no such device" error. Beats me why the process + would be spawned with an invalid SYS$INPUT device. Another bothersome + thing was that the 28 counted up from a smaller number during the first + few trials, then pegged out at 28, suggesting a channel was not being + freed or something within INET_SERVERS or REXECD. RSH from a UNIX host + continued to work, but the SYS$INPUT for tasks spawned via the RSH + daemon was a mailbox rather than the _INET device, so this proves + nothing. I was tempted to try rebooting to see if the 28 was reset to + a smaller number, but was unable to do so. + + It appears to me that the best solution for network access to a VMS + node is to use DECNET, if DECNET software is available from a UNIX + node. Barring that, a special daemon should be written which spawns + the LOGINOUT process to login with the given name and password, start + up a DCL, read the user's LOGIN.COM file, and execute a user specified + command file which runs irafks.e (like the DECNET interface). This + appears to be possible, although the VMS hooks required to make it + work are incompletely documented and are noted in the documentation + as "intended for use by VMS system software". (2/8) + +dev/hosts +dev/uhosts [discussion] +unix/os/zghost.c + Looked into the long node name problem. It was reported that filename + mapping would fail on UNIX systems where gethostname() would return a + host name longer than the builtin KI limit of 9 characters; this is + evidently common on 4.3BSD systems which use a long host name + containing several . delimited fields. + + As our system has short node names, I simulated the problem by faking + the call to gethostname() in zghost.c. I was unable to duplicate the + bug, and in fact it appears that there should be no problem. If a + long node name is returned it will be truncated to 9 characters. + If the system does not use the IRAF networking facilities this should + be harmless. If the system does use networking the KI should still + function correctly, provided the node names in dev$hosts and dev$uhosts + are also truncated to 9 chars. The only requirement is that the system + be internally consistent; the local node names are independent of the + integer internet address, which is what goes out on the network to + actually connect to a remote node. (2/9) + +sys/clio/clpset.h +sys/clio/clpsetnm.x + If the pset name is null, the CLIO pset package will now return just + the param name, rather than ".param". (2/9) + +sys/tty/ttyodes.x + If either the "li" or "co" parameter is missing from the termcap (or + printcap) entry, a default value is assumed (previously the value would + be zero, which could cause programs to misbehave). (2/9) + +sys/gio/gopen.x + Deleted the code for the now obsolete "@stddevice" redirection feature, + e.g., it used to be possible to set stdgraph = "@terminal" to use the + same device name for both the stdgraph and terminal devices. The STTY + task now handles this in a better way, and the @ feature proved to be + difficult to implement consistently throughout the system, hence was + never fully implemented. (2/9) + +pkg/cl/debug.c + Fixed an off-by-one array overrun bug in d_f which could cause a + segmentation violation on systems with large numbers of file + descriptors. (2/9) + +pkg/cl/pfiles.c +pkg/cl/param.c + Fixed a bug in the CL that would cause list files to fail to be closed + at task termination. The list file pointer p_listfp was not being + copied back by pfcopyback(), and hence the list file was not being + closed by restor(). (2/9) + +sys/osb/chrpak.c +sys/osb/chrupk.c +sys/ki/kiencode.x + The base 128 integer encoding scheme employed in this kiencode.x had + a bug that would cause it to lose the signedness of -128 and its + integer multiples. There was also a problem with integer overflow. + The bugs were discovered when networking was brought up under AOS/IRAF, + however, I did not fix them quite the same way. The new AOS/IRAF + code assumed that SPP chars are unsigned values and generated values + in the range 0-255, whereas the SPP language specification defines + SPP chars as signed quantities (since they are usually implemented as + integer*2, which is signed). I kept the negative char values in the + the encoding, and instead changed the chrpak/chrupk primitives in OSB + to explicitly preserve the signedness, since the C specification does + not specify the signedness of chars. The new versions of chrpak/chrupk + map SPP chars into unsigned bytes, using ranges to restore any negative + values in the unpack operation. + + The new routines are upwards compatible with the original encoding + (except for negative numbers, which are not currenty used anyhow hence + should not matter) hence network communications with older versions of + IRAF should not be affected by this change. (2/9) + +unix/os/net/zfioks.c +unix/os/net/kutil.c + Merged in some bug fixes from the AOS/IRAF network interface. Note + that the routines in the UNIX/IRAF os$net are not actually used in + the runtime system, but are provided only as a template to be used + to contruct the network interface for a new system. (2/10) + +sys/imio/immapz.x + Added a runtime check for an environment variable "min_lenuserarea"; + if no such variable is defined the value of MIN_LENUSERAREA in + will be used instead to size the IMIO user area, i.e., the amount of + buffer space available for user header parameters. The new environment + variable may be defined by the user or the site manager (e.g., in + hlib$zzsetenv.def) if images with very large numbers of user params + (or history cards) are to be processed. Note that applications which + simultaneously open many images, e.g., IMSUM, may run out of memory if + the value is set arbitrarily large. (2/10) + +vms/os/zpanic.c + Changed sys$exit error code to SS$_ABORT. This should get rid of the + strange error messages like "SYSTEM-F-UNSAFE, drive unsafe", which we + have occasionally been seeing following panic shutdowns. (2/10) + +sys/vops/amed.gx + Modified the file header comment to agree with the recent addition of + stack allocation to avoid modifying the input vector. (2/10) + +vms/hlib/gripes.cl + Added a NOAO site specific command to cause gripe mail to be forwarded + to the master iraf mail file on lyra. (2/10) + +sys/imfort/imioff.x +sys/imfort/imcrex.x + Changed the name of the imioff procedure to imf_initoffsets, as used + in IMFORT, to avoid a shared library conflict on VMS (IMIO uses a + procedure of the same name). This is just as well but should actually + not be necessary, as IMFORT programs are not supposed to be linking + with libex. (2/10) + +unix/os/zfioty.c + Replaced the string constant "/dev/tty" by the macro TTYNAME. (2/10) + +unix/os/zfiotx.c [discussion] + There was a question about the (*op = XEOS) statements herein writing + beyond the maxch characters specified for the output string. In all + IRAF code, a "maxch" for the output string specifies the maximum number + of characters to be returned, excluding the EOS. For example, if maxch + is 80 and the output string is filled, 80 chars will be returned + followed by an EOS in element 81. The only exception to this is + operators which return raw character data, rather than a string. + Strings are always EOS delimited, but data may consist of exactly so + many chars and no EOS. I thought that ZGETTX, as a low level kernel + routine, returned a data array with no EOS, but evidently this is not + the case. Since it does return an EOS, it MUST be at buf[*maxch] (or + before, if the data array is shorter). It may be that the routine + should be modified to not return any EOS at all, but since everything + seems to be working I am not going to modify anything at present. (2/10) + +unix/bootlib/osfcopy.c + Changed datatype of "buf" to XCHAR, and added (char *) casts in the + calls to read() and write(). (2/10) + +pkg/images/tv/display/t_display.x + In the calculation of the "unitary_greyscale_transformation" flag, + replaced several (abs(x-y) < EPSILON) floating point comparsions by + fp_equalr(x,y) calls. The latter performs the comparison correctly + regardless of the magnitude of the quantities being compared. (2/10) + +sys/tty/ttygets.x + Fixed an argument type mismatch (char,int) in a call to the mod + intrinsic function. (2/10) + +sys/imio/db/impstr.x + Fixed an off-by-one bug in a format statment which would cause the + closing quote of a short string valued keyword to be placed in column + 19 rather than 20, contrary to the FITS standard. (2/10) + +sys/imio/db/idbfind.x +sys/imfort/db/idbfind.x + The keyword search code would formerly match the first keyword for + which the given keyword name was any abbreviation, rather than + requiring that the full name match. Modified to require an exact + match. (2/10) + +pkg/images/imutil/hedit.x + Fixed an uninitialized variable bug in the call to lexnum() which would + cause new numeric parameters to be added as type string rather than as + integer or real parameters. (2/10) + +pkg/cl/globals.c + Set the default editor type to the null string rather than "emacs", + to force the .ed file to be read when the editor is first used. + If this is not done and the default editor is the same as in globals.c, + then changes in the .ed file have no effect. (2/10) + +sys/vops/amap.gx + Fixed point overflows were reported in the short integer version of + this routine, so I modified it to perform the computation internally + in integer for type short arrays. No doubt there will be other VOPS + operators which should do this, too. (2/10) + +sys/imio/db/impstr.x + More problems with updating string parameters in image headers: when + replacing a long string, e.g., '...................', by a short + string, e.g., 'abc', the old value would not always be cleared. + Also, in image headers with variable length records (< 80 chars), + it was possible to overwrite the newline at the end of the record, + clobbering the next record and joining the two. All of these problems + derive from the storage of header paramters internally in ascii. (2/10) + +pkg/cl/pfiles.c + Added a "long filetime()" declaration to the file header. (2/10) + +pkg/proto/imreplace.x - +pkg/proto/mkpkg + Deleted this obsolete file. (2/10) + +pkg/proto/imrep.gx + Was coercing INDEFR to INDEFD, rather than testing for INDEFR and + doing an assignment. (2/10) + +pkg/cl/task.c + The addltask() function was not explicitly returning a pointer to the + new task, although it is supposed to. It was probably working because + the second to the last statement is a call to newltask(), which is + leaving the desired task pointer in the function return value register. + This will (accidentally) work provided the register is not clobbered + before the function returns. (2/10) + +sys/mtio/mtparse.x + Modified to handle a drive syntax like "mta.1600". It would handle + "mta1600" or "mt.a.1600" (a special case of "mt.*.1600"), but could + not handle an unmatched . delimiter as in the first example, and as + in the dev$devices file. Note that the syntax "mta.a.1600" cannot be + used unless it appears that way in the dev$devices file, which will + probably be the case only if the 'a' is some more complex multi- + character device name. (2/10) + +vms/boot/bootlib/osfpathname.c + Now checks for a null string vfn and calls vfn2osfn() only if a nonnull + vfn is given. (2/12) + +dev/graphcap + Added ":kf=x_sgikern.e:tn=sgikern:" fields to the entries for the + logical devices sgimc and sgibi; these work now and never did up until + now. Also changed the MF count from 8 to 1, so that one file is + generated for each output frame. (2/12) + +sys/gio/sgikern/sgk.x + - Increased the bitmap buffer size to 2550 lines by 3300 columns, + sufficient for an 8.5x11 plot at 300 dpi, and larger than all + currently supported bitmap plotter devices. + - Moved the $(XX) substitution code so that it is the first operation + performed on the DD string. This allows parameter substitution to + be performed on the node, device, and spoolfile fields, as well as + the dispose string. + - If the dispose string is null, oscmd() is no longer called. + (2/12) + +sys/ki/kignode.x + This is the procedure used to extract a node name prefix and determine + whether a resource resides on the local node or a remote node. It was + modified to return immediately indicating that the resource is local + if the first character in the resource name is the node delimiter + character, i.e., '!'. This was the source of the bug whereby the !! + were being stripped from OS escape commands such as "cl> !!!oscmd". + (2/12) + +unix/hlib/login.cl [HSI] +vms/hlib/login.cl + Added a statement to the code which builds the "user" package which + will cause commands to be read from a file LOGINUSER.CL, if such exists + in the user's home directory at login time. This makes it possible for + the user have a custom login.cl file without having to edit the login + file every time they do a mkiraf. The file is read in command mode and + must end with a KEEP statement if it contains any declarations. (2/12) + +unix/boot/mkpkg/main.c +vms/boot/mkpkg/main.c + In the default case, in the second call to strcat there was an invalid + argument *ip. (2/12) + +sys/gio/cursor/prpsio.x + This code calls the stdgraph kernel to deactivate the workstation if + a task writes to STDOUT or STDERR while in graphics mode. This was + not taking effect immediately any longer, due to the recent revision + to the stdgraph kernel, whereby transmission of deactivate-ws commands + is delayed until the next graphics command is received, so that no-op + deactivate/reactive ws commands can be eliminated. Added a call to + stg_active() after the call to stg_deactivate() to flush the deactivate + ws command to the terminal, ensuring that error messages and such will + come out in readable form. (2/12) + +pkg/system/help/lroff/center.x + The lroff (help) text formatter was not centering text properly. + Evidently the page width and margin parameters used on our development + system would just happen to cancel out the logical error in the code; + with different parameters, the centering error was obvious. (2/13) + +pkg/system/help/help.par +pkg/system/doc/help.hlp + Changed the default number of lines per page (nlpp) for HELP pages + from 60 to 59. This was the cause of "help | lprint" producing a + blank page every other page. It turns out that the laser printer + (at least ours, an imagen) is 60 lines per page, with an automatic + formfeed after line 60. Help output includes an embedded formfeed, + so you get a blank page if pages are exactly 60 lines long followed + by a formfeed. A recent bug fix in HELP caused it to fill a page, + whereas before it was not completely filling each page, i.e., it was + this bug FIX which caused the blank-page bug. + + NOTE - The value of the help parameter 'nlpp' should be set smaller + than the size of the device page on which the document will be printed. + The HELP task has no way of knowing this, e.g., documents formatted + by help are often spooled in a .doc file and can be printed later on + any device. We will distribute the system with the default value of + 'nlpp' set for the shortest printer page size we know about. + + TODO - This fix is really a bit of a kludge. The real solution is for + lprint to know whether the device auto-formfeeds after so many lines, + so that it can omit the formfeed if the page is filled. The 3 line + page footer built into lprint should also be a device parameter. + I do not want to get into all this now. I plan to move the printer + stuff out of the termcap file into a "printcap" file, with a set of + device parameters defined especially for printer devices; these LPRINT + modifications are best left until the printcap file is set up. (2/13) + +pkg/system/help/t_help.x +pkg/system/help/manout.x + Added a test to eliminate the formfeed preceeding the first page of + manpage output; a formfeed before the first page can cause a blank + page on some printers. Also added a "man_init()" procedure, and a + call to it in the program main, to clean up the manpage internals if + manpage output is interrupted. (2/13) + +sys/gio/stdgraph/stgpm.x + The stdgraph polymarker code was used for the first time in the + non-polypoint mode for the vt240 terminal, which needs to draw points + as , and so on, repeated for each point. + The polymarker code was modified to draw the polymarker as a series + of primitive vector move/draw commands, if the marker start (MS) + sequence is not defined for the device. MS (and ME if needed) should + only be defined for a device if it can draw a multipoint polymarker + following a single control sequence at the beginning. + (2/14) + +sys/gio/cursor/prpsio.x +sys/gio/stdgraph/stgwtty.x + +sys/gio/stdgraph/stgrtty.x + +sys/gio/stdgraph/stgactive.x [IMPORTANT CHANGE TO GIO] +sys/gio/stdgraph/deact.x +sys/gio/stdgraph/onerr.x +sys/gio/gdeact.x + +sys/gio/greact.x + + A number of changes were made to the stdgraph kernel and to the + pseudofile i/o system, as used while the workstation is active (i.e., + in graphics mode). The changes affect only programs which write to + STDOUT or STDERR, or read from STDIN, while doing interactive graphics + to STDGRAPH. All i/o is completely normal if the workstation is not + activated, i.e., if the terminal is not in graphics mode. + + The pseudofile i/o system now completely controls i/o to STDIN, STDOUT, + or STDERR while in graphics mode. Since this type of i/o is now under + the complete control of the i/o system it may be used safely in + applications programs, with more predictable and consistent results. + This revision addresses the major device dependency remaining in the + old graphics terminal interface. + + 1. Device model + + Our logical device model assumes that the terminal has separate + text and graphics planes. Some terminals will display both planes + simultaneously, i.e., as transparent overlays, some will display one + plane or the other but not both simultaneously; some will display both + planes simultaneously as separate windows, and some will have only a + single plane which must be used for both text and graphics. We assume + that there is a "status line" in the graphics plane which is cleared + and prepared for text output by the graphcap GD (graphics disable) + function. Graphics mode is later restored with GE (graphics enable). + The OW (open workstation) function places the terminal into graphics + mode and causes the graphics plane to be displayed (OW will be + equivalent to GE for most terminals). The CW (close workstation) + function restores the terminal to normal text mode, causing the + graphics plane to be turned off and the text plane to be displayed. + + 2. Write to STDOUT, STDERR + + These streams are treated equivalently by the low level i/o system. + A write to either stream while the graphics workstation is activated + will cause one or more lines of text to be written to the "status line" + in the terminal graphics plane. Text lines should be delimited by + newlines in the usual way, but the newline will not be output, i.e., + no carriage-return line-feed will occur. If multiple lines of text + are output they will be written successively to the status line, + with each line overwriting the previous one, and possibly not giving + the user time to read the first N-1 lines of text. + + In the usual case where a single newline delimited line of text is + output, the text is written to the status line minus the newline and + the terminal is restored to graphics mode, i.e., no mode switch takes + place and the terminal is NOT left in text mode following output to + the status line. + + 3. Read from STDIN + + If the text written to STDOUT while in graphics mode is not newline + delimited, e.g., in a prompt string such as "prompt: ", the GE sequence + will not be issued and the terminal will be left in text mode with the + text cursor positioned at the end of the line of text in the status + line. The application may then read the user response string from + STDIN. The i/o system performs the read in raw mode to prevent echoing + of the newline character, which might cause the terminal to scroll. + The read terminates when the user types carriage return, line feed, or + an end of file character. Backspace and delete may be used to delete + single characters, and or may be used to delete the + entire string. The GE sequence is issued when the read terminates, + completing the sequence and leaving the terminal in graphics mode. + + 4. Raw i/o to the status line + + Although the i/o system always reads from the status line in FIO + raw mode, this is transparent to the application, which receives full + lines of text with normal input processing. Actual raw i/o at the + applications level is also supported. Raw mode is initiated by calling + fseti to set F_RAW to YES on STDIN. The first write to the status line + in raw mode clears the status line and outputs some text; additional + text, e.g., single characters, may be output in successive calls, with + output being appended to the status line (in the normal mode, the + status line is erased and overwritten in each call). Raw mode reads + return single characters with no input processing and with no echo. + Writing a newline character to the status line reenables graphics (GE). + Raw mode is cleared with fseti(STDIN,F_RAW,NO). + + 5. Deactivate, reactivate workstation + + Two new commands have been added to GIO, to be used to deactivate + and later reactivate the workstation, following a call to GOPEN. Note + that GOPEN does an open-workstation, which implicitly activates the + workstation, hence it is not necessary to explicitly reactivate the + workstation at GOPEN time. + + gdeactivate (gp, flags) # deactivate workstation + greactivate (gp, flags) # reactivate workstation + + flags (): + + AW_CLEAR # clear tty screen on CW + AW_PAUSE # waitpage prompt on OW + + The deactivate workstation directive, when called for a STDGRAPH device, + causes the CW (close workstation) directive to be issued to the + terminal, leaving the terminal in text mode like GCLOSE, but without + affecting the graphics state. Note that it is the CW directive which + is issued, NOT the GD directive, which is only used to write to the + status line in the graphics plane. Any amount of conventional text i/o + may be performed while the workstation is deactivated, with graphics + i/o resuming following a call to greactivate. The FLAGS argument + should be either zero, or the inclusive-or (arithmetic sum) of some + set of the AW_ flag bits defined in . For example, to clear + the text screen and display a page of text, pausing at the end for + the user to type a key before reentering graphics mode: + + call gdeactivate (gp, AW_CLEAR) + + call greactivate (gp, AW_PAUSE) + + 6. Paging a file in cursor mode + + Help text may be generated either on the fly by a program, using + the g[dr]eactivate calls to control the workstation, or help text may + be paged from a file. A new routine has been added to GIO to make + the latter case very easy: + + gpagefile (gp, fname, prompt) + + This routine pages the named file (which should be in noao$lib/scr, + lib$scr, or some such directory) using the library version of the PAGE + task. The graphics state is not affected by the call. + + 7. Cursor mode help + + The key '?' is no longer treated specially. Existing applications + programs must be modified to use the facilities described in [5-6] + above. Aside from this one change, all the GIO modifications + discussed herein should be upwards compatible. + + Cursor mode itself now uses the file pager to display the cursor mode + keystrokes, hence the text will no longer scroll off the screen. + Note that escapes to the CL do not work while the pager is running + within the context of the CL. + + 8. Cursor reads + + Reading the graphics cursor while the workstation is open no longer + has any effect on the graphics state, i.e., the workstation is not + deactivated. + (2/15) + +sys/gio/stdgraph/*.x + A number of little changes were made to the stdgraph routines in accord + with the revisions mentioned in the previous item. The de/re activate + workstation filtering code, added only a few weeks ago in an early + attempt to fix the confusion over what deactivate workstation means, + was deleted since we now have a precise definition and extra + deactivate/reactivate workstation calls are no longer generated. + The simplified the stdgraph kernel code significantly. (2/15) + +sys/gio/cursor/*.x + A number of litte changes were also made to this code, mostly dealing + with the few deactivate/reactivate workstation calls remaining in the + code. The workstation is no longer deactivated when cursor mode exits + while the workstation is active, i.e., following a gopen; this is of + course the way it should always have been. Since the workstation is + no longer deactivated unless it really needs to be, the automatic + reactivate workstation call was removed from GIOTR. Calls were + eliminated in several other places as well. Once again, things got + somewhat simpler and make more sense now. (2/15) + +gcancel.x +gclear.x +gclose.x +gdeact.x +greact.x + The calls to flush() in the routines were technically incorrect; these + were replaced by calls to gki_flush() in all routines listed except + gclose(), which will have already issued a gki_closews. The flush call + in gclear was deleted as it is not needed, and it can be annoying to + wait a second for something to happen (e.g., the next block of graphics + output to be transmitted) after the screen clears. (2/15) + +sys/clio/clgkey.x +sys/clio/rdukey.x + +pkg/cl/modes.c + Moved the rd_ukey() code out of modes.c and into the VOS, as the SPP + subroutine clio$rdukey.x (this is interesting, by the way, as a direct + comparison of C and SPP). Modified clgkey() to call rdukey() if the + calling process is run standalone. This was done so that pagefiles() + can be called from within the CL. (2/16) + +sys/libc/crdukey.c + +unix/hlib/libc/xnames.h [HSI] + Added an entry c_rdukey() to the VOS C language binding. (2/16) + +sys/gio/cursor/grcpage.x - +sys/gio/cursor/grcwaitp.x - +sys/gio/cursor/gtrwaitp.x + +sys/gio/cursor/rcursor.x +sys/gio/cursor/gtrctrl.x +sys/gio/cursor/crccmd.x + Modified the cursor mode code to use pagefiles() to page the cursor + mode help file. Added support for the deactivate-ws waitpage function + to the PSIO controller. (2/16) + +sys/gio/gpagefile.x + + Added the gpagefile() cursor mode file pager, discussed above. (2/16) + +pkg/system/page.x +sys/etc/pagefiles.x + Changed the name of the "general" file pager from gpagefiles to + xpagefiles, to avoid confusion with the GIO gpagefile() routine. + As far as I know, this relatively new routine has not yet been used + anywhere other than in the system PAGE task, which was modified to + use the new name. (2/16) + +unix/os/zfioty.c + Added a (char *) typecast to the first arg to strcmp. (2/16) + +unix/os/zxwhen.c + Fixed a typo: "if (unix_signal = ..." --> "if (unix_signal == ...). + The effect was to cause any stdout data buffered at the unix level to + be discarded whenever an exception occurs, rather than only when an + interrupt occurs. (2/16) + +lib/gki.h +sys/gio/gki/gkideact.x +sys/gio/gki/gkireact.x +sys/gio/gki/gkiexe.x +sys/gio/gki/gkiprint.x + These files were modified to implement the changes to the gki_[rd]eact* + instructions. (2/16) + +sys/clio/clcmd.x +sys/clio/clcmdw.x + These routines now look for a ! at the beginning of the CL command; + if present, OSCMD is called directly instead of sending the command + to the CL. This allows the routine to be used to send OS escapes + when running a process standalone. If the command must be passed to + the CL, the code now checks to see if the process is a connected + subprocess, and if not (e.g., run standalone), an informative error + message is printed. (2/16) + +sys/etc/pagefiles.x + Now error checks CLCMDW, printing a warning message if an error occurs. + (2/16) + +sys/gio/cursor/rcursor.x +sys/gio/stdgraph/stgrtty.x + Modified these routines so that typing delete or rubout at the start of + a colon prompted sequence which requires text entry (colon command or + "text: " prompt) will cause a silent exit back to cursor mode (without + ringing the bell and/or flashing the screen and punishing the user for + changing their mind). (2/16) + +sys/gio/stdgraph/stgscur.x +sys/gio/stdgraph/stggcur.x +sys/gio/stdgraph/stginit.x +sys/gio/stdgraph/stdgraph.h +sys/gio/doc/gio.hlp + Added a new STDGRAPH device capability UC (update cursor). If this + capability is defined for a device, every time the cursor is read or + written the new position is saved by the kernel, and used to manually + reset the cursor position before the next cursor read. This is + desirable on devices which modify the cursor position as an unwanted + side effect of other, unrelated graphics operations. In general, it + is undesirable for the cursor to move other than under user or program + control. (2/16) + +vms/boot/mkpkg/modlist.c + The hash function was modified so that only the first 20 characters + of an identifer are used to compute the hash value. This was necessary + to prevent integer overflow (resulting in an exception and/or a + negative hash key value depending upon the system) when hashing very + long identifiers. (2/16) + +pkg/cl/gram.c +pkg/cl/eparam.c + Looked into the problem of multiline parameter prompts, which were + causing problems for EPARAM. Actually found two problems: + + [1] For normal terminal output with fputs etc., one should not + write into the rightmost column as on terminals with autowrap + this will cause every other line to be blank. Note that as + long as output is filtered through ttyputline() this is not + a problem, but the low level i/o facilities cannot handle this + device dependence. + + [2] EPARAM could not handle multiline prompts correctly in all + cases. It was working in the case when the prompt occurred + in a parameter in the first screen. The only problem I found + was one of display; it was always possible to edit the param. + + To address these problems, I [1] replaced some (maxcols) by (maxcols-1) + in gram.c (for LPARAM and ?), and [2] in EPARAM, I rewrote the code + which displays multiline prompts, discarding the e_indent_prompt() + function, and rewriting the e_display function to break the prompt + into lines, outputting each separately with e_goto and e_putline, + and truncating each at the right margin. The old code was invalid + for terminals with automargins. (2/16) + +sys/gio/stdgraph/* +sys/gio/cursor/* + In testing the new support for the status line and text/graphics io + in the graphics system, a few bugs were fixed and some tuning was + done. The changes were as follows: + + [1] Gdeactivate will now clear the text screen if the AW_CLEAR bit + is set, even if the workstation has already been deactivated. + + [2] The AW_CLEAR and AW_PAUSE actions are now recognized by both + the gactivate and gdeactivate routines. + + gdeactivate: + + PAUSE: Print "[Hit return to continue]" on status + line and wait for return to be typed before + deactivating the workstation. + CLEAR: Clear the text plane after deactivating the + workstation (disabling graphics). On some + terminals this may also cause the graphics + screen to be cleared; this is determined by + the "cl" capability in the termcap entry. + + greactivate: + + PAUSE: Print the "[space=cmhelp,...]" message on the + text screen and pause until the user types a + key before reactivating the workstation. + CLEAR: Erase the graphics plane after reactivating + the workstation. + + Since these are bit flags, multiple flags may be passed, + as follows: + + call gdeactivate (gp, AW_PAUSE+AW_CLEAR) + + Other flags may be added in the future. + + [3] Setting ":.page-" in cursor mode disables the AW_CLEAR page + in gdeactivate (this has no effect on the gpagefiles() screen + clear). This option is sometimes useful on terminals with + transparent graphics overlays. On these terminals, since the + graphics plane cannot be turned off, both planes are cleared + when either a full page of text or a graph is to be drawn. + Disabling ":.page" in cursor mode defeats the initial screen + clear and the graphics redraw. The text is displayed beneath + the plot, and is erased after the greactivate prompt (AW_PAUSE) + with a series of line clears in the text plane. This option + permits greater speed, but one has to try to read the text + through the graph. A bug in ":.clear" was also fixed; it now + uses the same technique to clear the screen. + + To try out nopage mode, try the following on a terminal with + a transparent graphics overlay like the vt100+retrographics: + + :.page- + :.show + (show text appears underneath plot) + q + (text is erases and cursor comes back) + + Unfortunately, this does not work for ?, :.help, etc., unless + the clear screen entry in the termcap file does not clear the + graphics screen. A special terminal entry can easily be + prepared which does not clear the graphics plane, if desired. + + [4] When writing to stdout|stderr, you can now append to the status + line. The status line is cleared when changing from graphics + mode to status line mode. Since writing a newline causes a + switch from status line mode to graphics mode, lines of text + overwrite each other, but if the newline is omitted you can + append to the status line. + + [5] Graphics output or reading the cursor automatically resets + graphics mode from status line mode, in case one forgets the + trailing \n when writing to the status line. + + Important Notes: + + o When mixing status line graphics output, remember to call + gflush before writing to stdout or stderr, otherwise graphics + output will not be flushed and a synchronization error will + occur. + + o Remember to flush stdout or stderr after writing to the status + line, else you won't get any output until later, and it might + go to the wrong place. + + call gline (gp, x1, y1, x2, y2) + call gflush (gp) + call printf ("status line message\n") + call flush (STDOUT) + call gline (gp, x1, y1, x2, y2) + + A gdeactivate automatically flushes graphics output, and greactivate + automatically flushes stdout and stderr, so explicit flushing is not + necessary when writing to the text plane, but when you write to the + status line you are in graphics mode, so flushing is not automatic. + Reading the cursor with clgcur will also automatically flush any + buffered standard output. (2/17) + +pkg/plot/implot.x + Modified the IMPLOT task to use the new 'gpagefile' facility to page + the .key file, to add \n to some of the status line output, and so on. + (2/17) + +sys/gio/gki/gkifflush.x + + Added a new procedure gki_fflush() to the GKI library package. This + differs from gki_flush() in that its only function is to perform a + FIO flush of the file connected to the named standard graphics stream, + whereas the gki_flush() procedure issues the GKI_FLUSH graphics + instruction to the remote kernel, and then does the file flush. + The new operator is a no-op for an inline kernel. (2/17) + +sys/gio/gcancel.x +sys/gio/cursor/gtrctrl.x + Modified these routines to use gki_fflush() rather than gki_flush(), + since all I want to do is flush a control directive on to the kernel, + rather than flush any grahics output buffered by the kernel. (2/17) + +dev/termcap + Removed the "am" capability (automargins) from the termcap device + entry for the imagen. This would cause lines exactly 80 cols long + to be output without a trailing \n, causing the next line to be + discarded. Not putting the capability in when the device does have + automargins would have caused an extra blank line instead. This bug + only showed up recently due to the recent bug fix in ttyputline(). + (2/17) + +sys/gio/stdgraph/stgrcur.x [** IMPORTANT CHANGE TO GIO **] + Since we have already made so many changes to GIO in V2.5, I decided + to go ahead with another major change to the GIO user interface (for + the better, hopefully). The change is in the cursor read code - the + carriage return key is no longer mapped into EOF, but both the common + EOF chars, and , are. If the application wants to + use return to exit a cursor loop it can still do so, but now it has + the choice. The problem with return as an alias for EOF is that it + is too easy to type by mistake, particularly since return is commonly + used for other purposes, and one extra return can easily cause one to + accidentally exit a routine. (2/17) + +sys/gio/stdgraph/stgrtty.x +sys/gio/stdgraph/stgwtty.x + Added the two functions stg_putline() and stg_getline() to these + routines. These are used to read and write lines of text to the + graphics terminal, whether or not the terminal is in graphics mode. + When the terminal is not in graphics mode, they do normal i/o, + otherwise they read and write the status line. These functions + are for use only within processes which are linked with the STDGRAPH + kernel, i.e., the CL. (2/18) + +sys/libc/stgio.c + +sys/libc/spf.c +unix/hlib/libc/xnames.h [HSI] + Added two small packages to LIBC. The first, STGIO, is just the C + binding for the stg_putline() and stg_getline() routines mentioned + in the last section. The second, SPF, is provided to make STROPEN + style file i/o to a string buffer more convenient to use in a C + program. The VOS provides convenient facilities for this, but some + sort of C interface was needed to provide a similar facility in C, + for use in the CL code. (2/18) + +pkg/cl/modes.c + Modified query() to use the new STGIO facilities to do terminal i/o + to satisfy an interactive query. This provides equivalent + functionality to what we had before for normal queries, and adds + support for CLIO parameter queries to the graphics terminal status + line while in graphics mode. Note that in the case of multiline + parameter prompts, only the last line will be printed, but this + should not be a problem since the programmer knows when they prepare + the parameter file which parameters might be called interactively + during the execution of a graphics program. (2/18) + +sys/libc/fdopen.c + No longer performs file access mode compatibility checking unless the + file is a conventional text or binary file (e.g., not a string file). + (2/18) + +pkg/plot/implot.x +pkg/plot/doc/implot.hlp +lib/scr/implot.key + Modified the IMPLOT task to recognize the 'q' key for a quick exit. + (2/18) + +sys/gio/gqverify.x + + Added a new utility procedure to GIO, for use in interactive cursor + loop programs to verify the quit command via an interactive query. + The procedure prints a query on the status line and the user types + 'q' again to verify the quit, or 'return' to abort the quit and + return to the cursor loop. (2/18) + +Exiting Interactive Cursor Loops (discussion) + The following standards have been defined for dealing with EOF/quit in + interactive cursor loops. + + EOF + End of file is indicated for a cursor list either by an actual + end of file in the case of a true cursor list, or by typing the + , , or interrupt character in an interactive + cursor read. The 'Q' alias for EOF has been deleted. The argument + is that a true EOF on the cursor list is to be taken seriously by + the applications program, and not treated as just another key, + hence it should not be something that one types all the time. + If a program gets EOF back as the value of CLGCUR it should exit + immediately, without any verification queries etc, since it may + well have been run in batch mode with input redirected to a cursor + list file. + + q + The standard interactive cursor loop exit character is 'q'. + All interactive graphics programs should recognize this character + and take some action to exit the cursor loop, e.g.: + + while (clgcur (...) != EOF) + switch (key) { + case 'q': + break + case ... + + The 'q' character is intended to be handled directly by the + application program, rather than mapped into EOF by the system + (like Q was, and CR and the gt_gcur 'q' before that), to + distinguish this case from a hard-EOF and to provide maximum + flexibility in how the program treats a request from the user + to exit. If the user would suffer from an accidental program + exit then the 'q' key action should do something before exiting, + e.g., ask that the user first update the database, ask that CR + be hit to verify the quit, and so on. In general, if it would + take the user more than a minute to recover after an accidental + program exit, one should consider coding some sort of verification + action to be executed before exiting when 'q' is typed (but not + when EOF is seen on the list). + + A new procedure gqverify() has been added to GIO for the simple + case where only verification is desired. Note that "lightweight" + tasks or submenus which can easily be reentered should not bother + even with this, but should just exit. Example: + + case 'q': + if (gqverify() == YES) + break + + As a more complex example, suppose the program is used to edit or + create some database which could be lost or damaged in an accidental + exit, if not updated first. We do not want to update the database + automatically because this would overwrite the former contents of + the database. The program might be set up as follows. + + 'q' program prints error message on status line, e.g., + "No write since last change (:quit! overrides)" + :w[rite] updates the database; q will execute silently + :q[uit]! force a quit w/o an update; discard changes + + This example, as you may have guessed, is from the VI editor, upon + which the colon escapes, EPARAM colon commands, etc., are loosely + modeled. This model should be used in applications programs as + well, where appropriate. (2/18) + +sys/gio/stdgraph/stgrcur.x + Found an obscure bug in the cursor read code while testing. Interrupt + is defined to be just another character in a raw mode read. In a cursor + read, interrupt is one of the keys mapped into EOF, since it is a + type of quit request. What was happening was that when the interrupt + key () was typed on the terminal during a cursor read, the + terminal would treat it as a normal cursor read, returning a 6 char + sequence to the computer. The cursor input loop was terminating + immediately after seeing the interrupt character, without reading the + remaining 5 characters, returning an EOF cursor read to the high + level code. The program would exit, and the CL would then see the + 5 extra characters as the command "0 ,&", which would cause a syntax + error abort. The fix was to exit the interpreter only if a true EOF + is seen on the input stream, otherwise accumulate all 6 chars. The + only problem is, I am not sure why one doesn't also see the extra chars + when the EOF character is typed, but it wouldn't make a lot of sense + to continue reading after seeing EOF on the input stream. (2/18) + +pkg/system/files.x + Just typing "files" with no arguments is supposed to list the files + in the current directory; it was querying for the file template + parameter instead. (2/19) + +sys/fio/fdirname.x + This routine would formerly return the input name unmodified if it + started with the node name prefix of a remote node. This would cause + tasks like DIRECTORY to misbehave if the directory name did not end + with a path delimiter like $, /, or a host delimiter. The routine + was modified to always concatenate a / to the supplied string if the + last character is a normal filename (identifier) character, e.g., a + letter. For example, + + dir node!iraf$bin + + would fail, whereas + + dir node!iraf$bin/ + + would work. FDIRNAME will now add the trailing /, given a name like + "node!iraf$bin" as input. This will work only the remote directory + name is a VFN; a more rigorous solution must wait until there is time + to change the way the kernel interface treats general filename + translation. (2/19) + +unix/os/net/kutil.c + In ku_gpasswd(), ZGETTX was being called to read a single character + into a scalar output variable, with no space reserved for the EOS + delimiter currently associated with the string (array) value returned + by ZGETTX. The code was modified to read each character into an + array, with adequate room for the EOS. (2/19) + +pkg/cl/bkg.c + The command string printed by the JOBS task, the CL task which shows + the status of background jobs, would occasionally print garbage + characters following the last command string. This was due to a + missing EOS in cases when the command string copied by strncpy + completely filled the output buffer. I increased the size of the + allocated string array from SZ_CMD to SZ_CMD+1; since the buffer is + statically allocated and initialized to zero, this should be sufficient + to ensure that the string is EOS delimited, but just to be sure I added + an explicit EOS assignment as well. In general in CL code, all strings + should be dimensioned to whatever+1 (like SPP strings) to avoid this + sort of problem. (2/19) + +unix/hlib/mach.h [HSI] + Added the following new machine constants: + + MAX_EXPONENTR + MAX_EXPONENTD + MAX_DOUBLE + + The related values MAX_EXPONENT and MAX_REAL were already defined. + The new values were added to remove the assumption that the real and + double datatypes have the same number of bits in the exponent, which + is certainly not the case on all machines. More work needs to be done + to define the optimum set of machine constants. (2/19) + +pkg/cl/decl.c +pkg/cl/pfiles.c + Increased the default amount of storage allocated for a string type + parameter from SZ_FNAME to SZ_LINE. The shorter size was causing + truncation of long string values, e.g., file or image templates, + when the value on the operand stack was assigned into the parameter + during initialization of the task argument list. The default amount + of storage allocated for filename type parameters is still SZ_FNAME; + filename parameters are equivalent to string parameters in nearly + all cases, hence these may be used to reserve storage for objects + for which SZ_FNAME is sufficient. This is similar to the situation + in SPP, where SZ_FNAME is used for a lot more than just filenames, + and really means something more like "general operand name". (2/19) + + NOTE - A few tests were made following this change, running compiled + tasks which have template strings dimensioned SZ_LINE or larger + internally. In all cases I was able to enter a template string of + a least two lines of text (which is what SZ_LINE is). On some systems, + one will need to use backslash continuation to enter the long string + on two host lines, and this works too. If longer file lists are + desired, one must use an @file or something similar. A file list + entered with an @file can be arbitrarily large, e.g., I have run tasks + using an @file containing a list of all the files in IRAF (about 7000), + each by their full pathname. + +sys/tty/ttysubi.x + There was a bug which came into play when %. was used with %r. The %r + would swap the [x,y] coordinates upon input, but would not swap the + deltas returned on output by the special character avoidance code. + The routine was modified to swap the deltas before returning, if a %r + was executed while processing the output sequence. (untested) (2/20) + +dev/termcap + Added a device `textw', a wide (132 column by 60 line) version of + the generic textfile device `text'. (2/20) + +pkg/system/help/t_help.x + This code was restricting rmargin (the right margin) to the value of + `ttyncols', preventing wide or right-shifted output on wide printer + devices. The task was modified to use `ttyncols' only if the device + type is `terminal'. (2/20) + +sys/etc/main.x + When using the @parfile syntax to enter task parameters while running + a task standalone, an illegal parameter assignment line would cause + the task to abort with an IRAF main syntax error. Changed this to a + warning message with a copy of the offending line of text. (2/20) + +unix/os/zfiotx.c [UNIX HSI] + Fixed the following obscure bug in the UNIX HSI, which surfaced + because the stg_getline()/stg_readtty() code services STDIN reads + from a subprocess while the workstation is in graphics mode by + reading the terminal raw mode, rather than the usual line oriented + mode. In UNIX, when EOF is seen on a stdio stream, the EOF bit is + set on the stream. This must be cleared, e.g., with clearerr(), + or all subsequent reads will see EOF as well. The terminal driver + was doing this for line mode reads, but was not doing so for raw + mode reads, so a raw mode read following a raw mode read which + returned EOF (because the user typed ) would return a + spurious EOF, causing the reader to terminate prematurely. Fixed + this, and also replaced the line mode code which was clearing the + flags _IOEOF|_IOERR explicitly by name by an equivalent + call to the clearerr() macro, for greater independence of the local + UNIX implementation. (2/20) + +sys/gio/cursor/rcursor.x + The 'E' key in cursor mode is supposed to expand the plot only in X + or Y if the range is negligible in the other axis, i.e., if the cursor + is moved along only one axis when marking the expand rectangle. The + range tolerance used for the test was .001 ndc, which was too small + for some devices. Increased the range to .01 ndc. (2/21) + +pkg/plot/implot.x + Added a similar feature to the 'e' key in IMPLOT. If the range marked + has a negligible Y extent the data is plotted with autoexpansion in Y. + This feature depends upon the ability to set the cursor position in + software via the HL keys; if the terminal does not support this, the + ":x" command may be used instead. (2/21) + +sys/gio/ginit.x - +sys/gio/gfrinit.x + +sys/gio/greset.x + +sys/gio/gframe.x + +sys/gio/gcancel.x +sys/gio/gclear.x +sys/gio/gdeact.x +sys/gio/gopen.x +sys/gio/greact.x +sys/gio/doc/gio.hlp + The GCLEAR routine not only clears the screen (or whatever), it also + resets the internal state of GIO to the GOPEN state. This is desirable + when making plots which are fairly independent of one another, since it + automatically resets the line style, glabax parameters, and so on, + eliminating the possibility that the plot currently being drawn will + be accidentally affected by the parameters used to draw the previous + one. + + In some cases, however, particularly when using GSET calls to set + the glabax options, it is desirable to not reinitialize everything, + as then one must keep a state table independent of GIO and reset the + prior state after a GCLEAR. Two new routines have been added to GIO + to give the application a choice of how they want to do this. + + The GFRAME routine, like GCLEAR, clears the screen, but it does not + reset anything in the internal state of GIO, including even the WCS + (some flags are however set to cause the GIO state to be retransmitted + to the graphics kernel when i/o occurs). An additional routine GRESET + has also been added to selectively reset the internal state of GIO. + The GRESET call is as follows: + + greset (gp, flags) + flags: + GR_RESETALL reset everything + GR_RESETGIO reset only GIO drawing parameters + GR_RESETWCS reset the WCS to wcs=1, all NDC + GR_RESETGLABAX reset the GLABAX parameters + + A GCLEAR is equivalent to a GFRAME followed by a greset(gp,GR_RESETALL). + This revision is upwards compatible and should not require any changes + to existing code. (2/21) + +sys/gio/stdgraph/stgtxset.x + Deleted the "- GT_ROMAN + 1" conversion that was being applied to the + font code, as this is already done when the code is passed to the + encoder for output, and the text drawing code assumes throughout that + the font code is as defined in . (2/21) + +sys/gio/stdgraph/stgplset.x +sys/gio/stdgraph/stgpmset.x + In stg_plset(), the polyline width is passed via GKI as a packed + integer, but was not being unpacked into an int. Fixed this, and + also added a max(1,width) to both stg_plset() and stg_pmset() to + prevent zero linewidths. (2/21) + +sys/gio/cursor/grcaxes.x + Changed the font for the cursor mode 'A' tick labels from roman to + bold, for consistency with the glabax code. (2/21) + +dev/graphcap +dev/cacheg.dat + Added an LW (polyline linewidth) capability for the GTERM entry. (2/21) + +sys/tty/ttyopen.x + If the routine returned with an error exit it was not closing the + termcap/graphcap file, causing a wasted file descriptor. (2/21) + +lib/gio.h +lib/gset.h +sys/gio/gactivate.x + +sys/gio/*.x + The GOPEN procedure now supports a new open mode modifier, AW_DEFER, + which allows activation of the workstation to be deferred until i/o + to the workstation is ready to take place (AW = Activate Workstation). + The workstation may then be activated either explicitly by calling + the new GACTIVATE procedure, or implicitly by calling greactivate, + gclear, or by doing i/o to the workstation. If the AW_DEFER mode is + not indicated the workstation is activated at GOPEN time, i.e., + physically placed into graphics mode, and clearing the graphics plane + if NEW_FILE mode is also specified. This feature is intended for use + in interactive graphics applications and will most likely be ignored + if graphics is redirected to a noninteractive device. An example + illustrating when this might be useful is shown below. + + include + + gp = gopen (device, NEW_FILE+AW_DEFER, STDGRAPH) + + for (;;) { + call greactivate (gp, AW_CLEAR) + + call gdeactivate (gp, AW_PAUSE) + + } + call gclose (gp) + + This is an example of an application which executes alternately in + terminal and graphics mode. Since the application wishes to start + out in terminal mode, activation of the workstation is deferred; + if one were going to start out in graphics mode, there would be no + reason to open the workstation in deferred-activate mode. + The workstation is later explicitly reactivated when a new plot is + to be drawn, and subsequently deactivated to return to terminal mode. + This sequence can be repeated any number of times. + + The same thing can be acomplished somewhat simpler by replacing the + calls to g[rd]eactivate by calls to gopen and gclose and dropping the + outer set of calls, i.e., closing the graphics stream completely off + when not actually in graphics mode. The main reason for using + g[dr]eactivate instead, with or without deferred-activate mode, + is one of efficiency in highly interactive applications, to avoid + the need to repeatedly access the graphcap file, particularly if the + graphcap entry for the user's graphics terminal is not cached. (2/21) + +lib/fio.h +lib/fset.h +sys/fio/areadb.x +sys/fio/awriteb.x +sys/fio/filopn.x +sys/fio/fseti.x +sys/fio/fstati.x +sys/fio/fgetfd.x + Added a new FSET option to FIO called F_CLOSEFD. If this option is + set for a file, the host file descriptor or channel will be closed + whenever the channel is inactive, i.e., the channel will be open + only while an AREAD or AWRITE operation is actually taking place. + This is used when a program must be able to simultaneously access a + larger number of files than can be opened simultaneously at the host + system level, e.g., when one needs to median-sum 100 images and the + host system only provides 20 file descriptors. Note that the maximum + number of open files will still be limited by FIO; the builtin limit is + currently 70, but this will probably be increased to 128 or larger in + the future. Naturally, it is inefficient to have to open and close a + file for every i/o operation, but since it is done at the lowest + possible level without closing the FIO file descriptor or returning + any buffers, the expense is not too bad, particularly if large + transfers are used to minimize file accesses. + + The F_CLOSEFD option is permitted only for existing (not NEW_FILE) + binary files. Special devices are supported, e.g., the static file + driver, but only if there are no significant changes to the file state + when it is closed and later reopened. For example, the F_CLOSEFD + option cannot be used in conjunction with mapped segments and the + static file driver, since the data in the FIO buffer must remain + intact when the file is closed and later reopened at the host system + level, and closing a mapped file would cause the mapped pages (the FIO + buffer itself) to be unmapped. (2/22) + +lib/imio.h +lib/imset.h +sys/imio/imopsf.x +sys/imio/imsetr.x +sys/imio/imstati.x +sys/imio/immapz.x +sys/imio/imsetbuf.x + Added two new IMSET options IM_CLOSEFD and IM_BUFSIZE to IMIO, and + modified the way the IM_ADVICE parameter is treated: + + IM_ADVICE + If the value given is RANDOM, the FIO buffer size will be set to + the size of an image line, rather than passing the RANDOM advice + parameter on to the pixel file, as previously. Otherwise, the + advice parameter is ignored and IM_BUFSIZE (default 64KC=128Kb) + is used as a starting point to set the FIO buffer size. + + IM_BUFSIZE + The recommended FIO buffer size for the pixel file. The value + given is taken as a starting point to compute the actual buffer + size, which will normally be an integral multiple of the size of an + image line (assuming image lines are blocked to fill an integral + number of device blocks). + + IM_CLOSEFD + Setting this on an image descriptor causes IMIO to set F_FCLOSEFD + on the pixel file descriptor when the pixel file is opened. This + may be useful in applications which must simultaneously open a + large number of images, to save host file descriptors. + + In most applications there is no need to fiddle with these parameters. + They are provided primarily for programming image operations which + require either very large amounts of memory, or simultaneous access + to very large numbers of images. (2/22) + +lib/fio.h +lib/fset.h +sys/fio/ffault.x +sys/fio/ffilsz.x +sys/fio/fseti.x +sys/fio/fstati.x + Carefully adjusting the FIO buffer size to an integral number of image + lines does one no good if the first image line in the pixel file is + not aligned to the offset of a file buffer. With the OIF format, for + example, the first image line will begin at some offset like 1025 (due + to the pixel file header record), whereas the first file buffer will + by default begin at file offset 1. It turns out that the file offset + to which the FIO buffers are aligned is pretty arbitrary as far as + FIO is concerned; one need only replace a "1" (in ffault.x) by an + offset variable defined in the file descriptor. The new offset option + is implemented as an FSET option named F_FIRSTBUFOFF, default value 1. + Setting F_FIRSTBUFOFF causes any existing buffers to be destroyed. + Setting the first buffer offset to a value greater than 1 causes the + file data to the left of F_FIRSTBUFOFF to become inaccessible. (2/22) + +sys/imio/imsetbuf.x + Added a call to FSETI to align the first file buffer to the file offset + of the first image line. By the time this is called the image kernel + will already have written the pixel file header (if any), hence the + fact that the first part of the file will be inaccessible is not a + problem - in fact it is probably an advantage. (2/22) + + NOTE - This revision should make IMIO somewhat more efficient in + general. It also fixes a potential file fault thrashing problem that + could occur when BT_NEAREST boundary extension was used on an image, + and the first or last line of the image was not wholly contained in + a file buffer. This behavior has actually been observed with the + ROTATE image operator, when an image happened to be just the right + size. If ROTATE (or any similar geometric operator) has been observed + to be particularly slow, file faulting as decribed here may have been + the cause. (2/22) + +unix/hlib/mkmlist.csh + No longer returns references to in the module list; since + this file is frequently modified and the error codes never change, + it should not be referenced in library module dependency lists. (2/22) + +------------------------------ +(All caught up with current bugmail, minor feature enhancement requests, etc.) +VMS/IRAF HSI updated. +VMS/IRAF (IRAFX) bootstrapped. +VMS/IRAF - all MIP files deleted and replaced via tar from lyra. +VMS/IRAF - started full sysgen. (2/22) + +sys/memio/*.x +sys/memio/kmalloc.x + +sys/memio/krealloc.x + + Extensively revised the MEMIO sources, moving all the procedures out + into separate files. The major functional change was to modfiy MALLOC, + CALLOC, and REALLOC so that they take a normal error action (causing + error restart if not caught in an error handler) instead of causing + a fatal error and process shutdown. The new procedures KMALLOC and + KREALLOC were added for use in low level code where the calls to the + error recovery code in MALLOC and REALLOC would cause reentrancy + problems. (2/22) + +sys/ki/ktzopn.x +sys/ki/kopdir.x +etc/envinit.x +etc/environ.x + These files were modified to use the new KMALLOC and KREALLOC procedures + to avoid reentrancy problems with the error recovery code. (2/22) + +sys/*/*.x +sys/*/*.gx + Added errchk declarations where needed for MALLOC, CALLOC, and REALLOC. + (2/22) + +sys/etc/main.x + Replaced the calls to CLCMD by calls to putline(CLOUT,...), to avoid + the error checking recently put into CLCMD. (2/22) + +--------------------- +VMS/IRAF - full sysgen completed without incident. +Updated VMS/IRAF again from lyra. (2/23 2 pm) +Updated SUN/IRAF (pavo), and started a full sysgen. (2/23) + +unix/hlib/config.h +unix/hlib/libc/libc.h +vms/hlib/config.h +vms/hlib/libc/libc.h + Increased the number of VOS file descriptors from 70 to 128. This + number needs to be 10-20 larger than the maximum number of host file + descriptors (e.g., 64 on 4.3BSD). (2/23) + +sys/gio/cursor/gtr.h +sys/gio/cursor/grcopen.x +sys/gio/cursor/grcclose.x +sys/gio/cursor/gtrctrl.x + Cursor mode is supposed to leave the terminal in the same state it + was in when cursor mode was entered, e.g., when the cursor is read + following a GOPEN, with the terminal in graphics mode, the terminal + is left in graphics mode. This works fine, but there was one case + which was not being dealt with properly - if the cursor was read with + the workstation open but deactivated, i.e., in terminal mode, the + workstation was not being reactivated for the cursor read, nor was it + being restored to deactivated mode. The cursor read would nonetheless + work for the vt640 since the graphcap read-cursor control string forces + the terminal into graphics mode, but since the graphics system did not + explicitly reactivate the terminal it would not deactivate it either, + causing it to be left in a funny mode - deactivated but in graphics + mode. The code was modified to keep track of reactivate/deactivate + calls, with cursor mode automatically reactivating and deactivating + the workstation if necessary, when cursor mode is entered and exited. + (2/24) + +sys/gio/greact.x +sys/gio/cursor/gtrctrl.x + When greactivate is called in AW_DEFER mode before the workstation has + been activated, it automatically does an activate (OPENWS) rather than + a REACTIVATEWS. The problem was that the "flags" argument was being + ignored in this case, thus defeating AW_PAUSE and possibly causing + the graphics plane to be activated before the user has a chance to + read the text. Added some code to handle the pause function in this + special case. + + Also, in this routine and gtrctrl.x, added some IF statements so that + page and waitpage are ignored except for the STDGRAPH stream; one does + want an interactive pause prompt if graphics is sent to a batch plotter + device. We may want to recognize this type of interaction for STDIMAGE + too, but I will wait until later to decide about that. (2/24) + +pkg/cl/eparam.c + There were some problems with EHIST, probably due to the recent bug + fixes for EPARAM (the eparam code is rather convoluted). The cursor + was coming up one line too high; deleting a "- 1" seemed to fix this. + Also added a clear-to-end-of-line in e_display so that short history + commands completely overwrite longer ones when moving up or down in + the history list, and added a newline at the end when ehist exits so + that the command output does not overwrite the command. Some of these + problems were probably in the eariler code, too. (2/24) + +--------------------- +Sun/IRAF, VMS/IRAF systems updated (incremental). (2/24) +Skip made wtar tape for AOS/IRAF. (2/25) + +unix/hlib/zzsetenv.def [SUN/IRAF only] + On the Sun systems pavo and tucana, changed the default devices in + the environment (hlib$zzsetenv.def) to stdplot=printer=lw, + terminal=gterm40, and so on. (2/25) + +unix/os/zfiomt.c + When a tape read fails on UNIX, at least with the driver I used for + testing, evidently the read aborts immediately when the hardware + error occurs, leaving the current record partially read. Since the + VOS assumes that the tape has been positioned to the next record + following the bad record, I had to add a skip record forward to the + ZZRDMT primitive. This causes the routine to work correctly most + of the time, but unfortunately it does not appear to reliably do the + same thing. This needs further investigation. (2/25) + +sys/fio/filbuf.x +sys/fio/fseti.x + Modified the way the F_VALIDATE fseti option is implemented slightly. + This option is used to validate the data in the FIO buffer following + a read error on the input device, e.g., magtape. It was working the + way I had it, but the data for two records would be returned in the + single read following the failed read and buffer validation. The + purpose of the modification was to preserve the record structure of + the tape for those application which count on a FIO read to return + one tape record at a time. The fix was for FSETI to set a flag for + FILBUF to validate the buffer, rather than having FSETI immediately + validate the buffer itself. This was tested and it works fine + provided the kernel succeeds in detecting the bad read and positioning + the tape properly to the next record following the bad one. (2/25) + +sys/fio/zfiott.x +sys/fio/zfiott.com + Modified the playback code in the terminal driver (ZGETTT) to permit + multiple data chars in each input line of text when reading in raw + mode. In playback mode, each input line is saved in an internal + buffer, and characters are returned out of this until it is exhausted + and another line of the log file is read. In the process of testing + this, I also found and fixed a char/int mismatch bug in a call to + cctoc(). (2/26) + +pkg/cl/errs.c + Added code to check during error recovery if the terminal is in raw + mode, and reset it to normal line-buffered mode if so. (2/26) + +sys/gio/gactivate.x +sys/gio/greactivate.x +sys/gio/cursor/gtr.h +sys/gio/cursor/gtrctrl.x +sys/gio/cursor/gtropenws.x + Had to scrap the changes made to greactivate(), etc., on 2/24. The + main revision made at that time was to have greactivate() implement + the AW_PAUSE feature directly, when opening the workstation in + response to a call to greactivate() in AW_DEFER mode. The problem + with this is that the GIO code must be metacode output only, with no + direct interaction with the user terminal. I put the code in with an + IF-test on the stream, disabling interaction if not writing to + STDGRAPH, but of course that is not sufficient. Just goes to show + how easy it is to mess the system up if you don't really know whats + going on (or if you forget). + + Interaction with the user in interactive graphics is permitted only + in the cursor mode code. Recognition of the activate workstation + flags (AW_PAUSE, etc.) in the initial activate workstation implied + in the GKI_OPENWS directive is possible in cursor mode, but would + have required a change to the external format of the GKI_OPENWS + instruction, so I did not do it. The GKI metacode format will + probably suffer some changes in the upcoming GIO imaging extensions + project, but I did not want to change the metacode format at this time. + The AW_PAUSE code was removed from greactivate(), and for the moment + the pause flag will simply be ignored when opening the workstation + in defer mode. A flags argument was added to the GIO gactivate() + function, so that greactivate() can pass the flags argument to OPENWS + via gactivate(), so that the calling sequence of this routine will + not have to be changed when OPENWS is modified to include a flags + field. + + The IF-test on STDGRAPH in gtrctrl.x, used to test if the AW_PAUSE + flags are to be executed or ignored, was replaced by a test on a new + descriptor flag field TR_INTERACTIVE(tr). This is set when the + workstation is opened in gtropenws.x, if the graphics device is the + user terminal. Otherwise, the interactive deactivate/reactivate + workstation flags are ignored. (2/27) + +sys/gio/stdgraph/stgrtty.x + [1] When reading from STDIN with the workstation activated, characters + are read in raw mode. EOF was not being detected since the raw EOF + character is returned as data when in raw mode, and the code was + checking for a FIO EOF, rather than looking at the character itself. + [2] This routine was not performing a graphics disable (GD), hence + a series of reads to the STDIN while in graphics mode, with no + associated writes to STDOUT or STDERR, would execute with the entered + lines text echoing as if they were appended to the previous line. + (2/27) + +vms/gdev/sgidev/mkpkg.com + Modified to move the executables to the HLIB directory, so that this + happens automatically when doing a bootstrap. (2/27) + +sys/fio/fntgfn.x + Found an obscure bug in the filename template code, which has probably + been there since the code was written. The bug would cause an infinite + loop when trying to expand a filename template with FNTGFN (or any of + the routines which call it). The routine which returns the next token + from the template, upon reaching EOS on the template string, was + incorrectly looking at the "last" character in the output string. + Since the output string would be the null string, the "last" character + was one char off the front end of the array, and could contain any + random data. The code was looking for one of the chars $/, and the + bug would be harmless unless one of these characters just happened to + be at that location. (3/4) + +unix/hlib/SUN_kludge/precomp.csh [SUN/IRAF] + Added a compile-no/optimize entry for main.x (the IRAF main). Did not + fully analyze the problem, but an address is being saved in a register + and then the register is clobbered before it is used (while building + up the argument list to a FSETI call). (3/5) + + Analysis, 3/6/87 --- + + This bug fix bothered me, so I went in and analysed it in detail to + see what was really causing the problem. The actual compiler bug + turned out to be in the module pds_apdp8s in the RPDS task in mtlocal. + This is a trivial little procedure, the body of which is so small that + I will include it here for reference: + + for (i=1; i <= npix; i = i + 1) + b[i] = (a[i] / 400b) * 100b + mod (int (a[i]), 400b) + + What is happening is that the compiler is using the register D2 to + evaluate the mod function, but the procedure preamble/postamble is + not saving and restoring the contents of this register (the bug + probably has something to do with the code used to do inline + expansion of the MOD intrinsic function). It turns out that the Sun + procedure calling sequence requires a procedure to save and restore + the contents of registers D2-D7, etc., if they are used in a procedure, + so that a procedure which calls a subprocedure can assume that its + registers are intact when the called procedure returns (this is + common practice on many systems). + + This can lead to some very obscure bugs like the one we have here. + The register D2 is used in the IRAF main; the main calls a task, the + task calls a number of procedures, and so on for hundreds of procedure + calls before returning to the main. If any of those procedures uses + register D2 but does not save and restore it, then the FSETI call in + the main either bombs out with a segmentation violation, or FSETI + causes a fatal panic shutdown due to an illegal file type code. + (Actually, the bug could be masked if any of the intermediate + procedures leading back to the main also use, and hence save and + restore, the register). In a procedure other than the main, the same + bug could occur with completely different results, possibly resulting + in improper execution rather than an obvious program crash. + + Compiling the main without optimization defeats register allocation + in the main and the bug goes away (because the main is no longer using + the register), but this is treating the symptoms and not fixing the + actual bug. Clearly, it is extremely important on machines with + calling sequences like that on the Sun that registers be properly + saved and restored by called procedures (particularly hand written + assembly code procedures), else extremely obscure bugs may result. + +------------------- +(Begin fixing bugs reported since the new V2.5 was ported to Sun,VMS,AOS). + +pkg/cl/exec.c + In oneof(), added a counter so that the "use logout to logout of the + CL" error is only taken a finite number of times. It was still + possible to get into a loop when the CL input was a terminal, but the + user managed to logout of the computer somehow, causing an infinite + sequence of EOF's on the input stream. (3/7) + +sys/gio/cursor/gtrctrl.x + Removed the call to gki_fflush(), which would flush the control + instruction to the graphics kernel. This must not be called from + within gtr_control() since it involves a call to prpsio() (the + pseudofile i/o controller) when writing to a connected subkernel + (e.g., the stdplot device), and gtr_control() is itself called from + prpsio(), resulting in a reentrant call to prpsio and thus immediate + brain damage to the pseudofile i/o system. This was the bug which + was causing graphics tasks run with dev=stdplot to fail. (3/7) + + NOTE - One wonders, if prpsio() reentrancy occurs here, why doesn't + it occur in the other calls to gki_flush() and gki_fflush() in the + cursor mode code. The reason is that when prpsio() is called to read + the next CL command from a subprocess (the user graphics task), a + cursor read takes the form of a CL statement like "=gcur". This is a + CL command, hence prpsio() will exit back to the CL interpreter. + Then when cursor mode is entered and one does something like a snap, + which writes to a subkernel and hence involves a call to prpsio(), + the routine is called afresh. + +sys/gio/mkpkg +sys/gio/gactivate.x + Added a "include ". When opening a graphics stream in APPEND + mode, the routine was checking the file driver of the output stream + to see if it was zardbf, to know whether to get the old WCS from the + CL or from UPARM. The test would fail because without , + zardbf would be the real routine, rather than the KI version kardbf, + used with networking. This was the cause of the bug which would cause + a task to hang up reading from CLIN when opening a metacode file in + APPEND mode. (3/7) + +vms/gdev/sgidev/sgi2vccp.f +vms/gdev/sgidev/sgi2vimp.f +vms/gdev/sgidev/sgi2vptx.f +vms/gdev/sgidev/sgi2vqms.f +vms/gdev/sgidev/sgi2vtri.f +vms/gdev/sgidev/sgi2vver.f +vms/gdev/sgidev/sgitranlib.f [+] +vms/gdev/sgidev/mkpkg.com + Standardized the support routines common to most of the translators + and relocated them in sgitranlib.f; modified mkpkg.com to link with + it. Detabbed and rewrote fortran continuation lines to make shipment + of translators by electronic mail more reliable. Made all translators + that can submit to a VMS queue recognize the special queue name 'none', + to better support nonspooled devices. (3/2 SRo/SH) (3/7) + +sys/fio/fseti.x + In the F_FIRSTBUFFOFF case, added a call to flush() to flush any + buffered file output before calling frmbfs() to return the file buffer. + (3/8) + +sys/imio/db/mkpkg + The module list was missing a reference to for idbfind.x. + The library module was out of date (on lyra) and was not correctly + referencing the IM_UABLOCKED(im) field, causing header parameter + searches to fail. (3/8) + +sys/.../mkpkg + Went through and rebuilt most of the module lists in the VOS, to avoid + more problems of this type. There were some errors, but did not notice + any other serious ones. (3/8) + +pkg/cl/eparam.c + The e_display() function, used by EPARAM to display parameter prompt + strings, had a bug which would cause the first character to be + repeated in all lines after the first when displaying multiline + prompts. I also added a feature which allows a prompt line to take + over the whole terminal line if the first char is \r; otherwise, the + prompt is displayed in the prompt area at the right of the screen. + (3/8) + +pkg/cl/history.c + The #{ ... #} sequences, used to switch to and from command mode on a + stream, were not being recognized in "interactive" command streams, + i.e., for commands typed in interactively from the terminal. (3/8) + +pkg/cl/param.h + Discovered that the parameter type flags (field p_type in the param + structure) were overflowing the allocated storage word (type short) + by one bit. The bit that didn't fit was PT_ARRAY, which explains why + arrays haven't been working recently in the new CL. Changed the + allocation to a full integer and rebuilt the CL. (3/8) + +pkg/cl/grammar.y + Modified the grammar so that compute mode is automatically enabled when + typing a parameter declaration in interactively, e.g., "int woof[3]". + (3/8) + +pkg/plot/implot.x + Modified so that a ":x" or ":y" with no x/y range arguments both + reenables autoscaling and replots the current line or column with + autoscaling, rather than merely reenabling autoscaling, as previously. + (3/8) + +unix/os/net/kutil.c + Fixed a typo: "text[1] -> text[0]". (3/8) + +sys/tty/ttysubi.x + Replaced the last two occurrences of "argnum" by "revstart" in the code + which reverses the deltas; overlooked this when I made the original bug + fix on 2/20. The code has now been tested (by Skip). (3/8) + +sys/clio/clputx.x +sys/clio/clputr.x +sys/clio/clputi.x +sys/clio/clputd.x +sys/clio/clputc.x +sys/clio/clputb.x +sys/clio/clpstr.x +sys/clio/clcache.x + Modified the CLPUT procedures to update the cached value of a parameter + as well as the CL value. If this is not done subsequent CLGET calls + during the execution of the same task will continue to return the + same value. (3/8) + +--------------------- +(End last round of bug fixes - all bugs reported since 2/24 now fixed.) +(VMS/IRAF updated 3/8) +(SUN/IRAF updated 3/8) + +vms/hlib/sgiqueue.com +dev/graphcap + As part of the current effort to standardize the sgi translators, + I changed sgiqueue.com to have a maximum of 4 DCL parameters for + each entry. Devices affected are vver, vtri and vptx. Graphcap + entries for those devices were updated accordingly. (3/10 SH) + +sys/osb/f77pak.f + Was not blank filling the last character in the F77 output string. + (3/10) + +sys/fio/fntgfn.x + There was a problem in the filename template code, when using string + substitution to edit a file list expanded upon a logical directory. + The pattern matching would be always be performed on the filename + ignoring the directory prefix, but the edit would be performed on the + full filename including the directory prefix if any, causing the + edit to be performed so many chars to the left of where it should be. + For example, "lib$*%%_o%.com" should expand to "lib$fio_o.com", + "lib$prc_o.com", etc., but "lib_o$fio.com", "lib_o$prc.com" was being + produced instead, a 4 char left shift of the insertion, since the ldir + prefix is 4 chars long. With no ldir prefix there was no problem, + which is why this has gone unreported until now. (3/10) + +sys/imio/imsetbuf.x + The FIO first buffer offset cannot be set to the offset of the first + image line unless the offset of that line is aligned on a device block + boundary. Added a test to omit the call if the first image line is + not aligned in this way (as in STF images). (3/11) + +dev/graphcap +dev/termcap + Entries were added for the Graphon 140 terminal. Both entries were + originally created by Raymond Talbot of the Aerospace Corp. in L.A., + then later modified by George Kaplan at U.C. Berkeley, Space Sciences + Lab. The entries have now been tested extensively at UCB. Users + should note that they may have to set the GIN terminator to CR in + local setup mode. (3/11 SRo) + +sys/imio/iki/stf/stfopix.x +sys/imio/iki/stf/stfwgpb.x + Back when the STF image kernel was first written, the GEIS format + required that group parameter block header parameters be ordered or + sized to avoid holes in the structure, caused by alignment of double + floating values to quadword addresses (or so I recall). Anyhow, the + STF kernel was written to order the GPB of new images in this way, + but it would assume that the GPB of existing images was already ordered + this way. STF images have recently appeared which do not adhere to + these alignment restrictions for double values, causing the STF kernel + to mess up the GPB when opening an existing image READ_WRITE and + subsequently updating the header. + + For example, + + DATAMIN real + DATAMAX real + CRPIX1 real + CRVAL1 double + + would cause problems, since there are 3, rather than 2 or 4, reals + before the double, causing the double to fail to be aligned to a + quadword offset relative to the start of the GPB. + + I am going to assume that there are no longer any special alignment + restrictions on the GPB fields; maybe there never was and this was a + misunderstanding on my part. The write-GPB code was modified to work + regardless of the field alignment, and the open-pixfile code was + modified to skip the reorder-GPB step when create a new image. + This will also avoid the annoying reordering of the group parameters + for new images, which was being done by the kernel in the past to + enforce the alignment restrictions when the input GPB specification + was not doing so. (3/13) + +unix/gdev/mkpkg +unix/gdev/zfiogd.x +unix/gdev/iism75 + A UNIX version of the IIS model 75 interface (M70 data stream filter) + was installed. This was tested remotely working with the group at + AT&T (Tony Tyson), since we do not have a model 75 here. (3/14 DT/SRo) + +vms/boot/mkpkg/host.c + The $purge function now checks for a missing directory name argument, + and avoids the call to vfn2osfn(), which would produce an error message + if called with the null string. Also, the VMS PURGE is called with the + /LOG switch if mkpkg is executed in debug mode. (3/14) + +dev/termcap +dev/graphcap +dev/cacheg.dat +dev/cachet.dat + Updated the termcap and graphcap files on lyra and draco, and rebuilt + the cache files to capture the updated device entries. (3/14) + +unix/os/zfiomt.c +vms/os/zfiomt.c + Following a long series of tests to determine the best way to recover + from parity errors when reading magtapes, the ZZRDMT primitive was + modified to scrap the attempt to zero out the user buffer and repeat + the read, which would cause the tape to be left at an unpredictable + position. It now simply returns ERR for the first few bad reads, and + then starts doing skip record forwards to attempt to recover if a bad + read causes the driver to enter an infinite loop trying to read the + same record. If a large number of read errors are seen on a tape the + driver eventually just returns EOF on the file. We were still getting + unpredictable results when trying to read tapes with bad records, but + this works in most cases and seems to be the best we can do; the rest + is really the responsibility of the host driver and the hardware + controller. (3/14) + +vms/os/net/zfioks.c + Someone reported that they could not access a remote node over the + network, using a 22 character password on the remote node. God only + knows why anyone would want to have a 22 character password, and I + guess the Berkeley people didn't expect that either, since the problem + turned out to be a 16 char limit imposed by the REXEC daemon. + Allowing for the EOS, the maximum password length when calling into + a remote UNIX node should thus be 15 chars; in actual tests this + failed too, but a 12 char password was ok (maybe a bit longer, I didn't + try). The ZFIOKS (IRAF) limit is 32 chars, and I verified that the + password string was being written out over the network correctly. + + I also modified the ZFIOKS open procedure to only ask for the password + for a remote node twice, if the same string is entered both times. + This prevents the user from being repeatedly asked for the password + for a remote node if the node is physically unreachable for some + reason, e.g., because the machine is down. The disadvantage is that + if the same mistake is made the second time, causing an invalid + password to be entered into the password cache, it will be necessary + to log out of VMS to clear the error. Note that rubouts are permitted + when entering a password, so it should not be difficult to enter a + password without any typing errors. (3/14) + +------------------ +The following changes were made mostly to eliminate library conflicts for the +VMS/IRAF shared libraries, and do not involve any functional changes to the +affected routines. This initial implementation of VMS shared libraries closely +follows that done by Dennis Crabtree last December. + +pkg/cl/scan.c +pkg/cl/opcodes.c + Changed the name clscan() to cl_scan(), to avoid a library conflict + with the CLSCAN procedure in FMTIO. (3/15) + +pkg/cl/gram.c +pkg/cl/edcap.c +pkg/cl/builtin.c +pkg/cl/clprintf.c + Changed all occurrences of 'strsrt' to 'strsort', and all occurrences + of 'strtbl' to 'strtable'. (3/15) + +pkg/system/sort.x + This program contained two internal routines GTEXT and GOPEN which + conflicted with the GIO procedures of the same name. Went through and + cleaned up this ancient code, adding a package prefix to all internal + routines (which solved the name problem), and in general bringing the + code up to modern IRAF standards. (3/15) + +vms/gdev/iism70/mkpkg +vms/gdev/iism70/m70wti.f - + Deleted the M70WTI routine, which was not used anywhere, and which + referenced a lower level routine RBUTN which was not present in the + library, causing an unresolved module reference when building the + shared library. (3/15) + +sys/imio/imdmap.x + This routine had an illegal backwards library reference to the IMDOPEN + procedure (FIO device open procedure for the display device) in the + TV package code. Since the routine bypasses the IMIO interface and + has explicit knowledge of the IMIO internal data structures, it needs + to be part of the IMIO interface and it was not really correct to move + it to a package source directory. I solved the problem by deleting the + old, unused min_lenuserarea argument and replacing it by a reference + to the imdopen() external function, so that the application can pass + this in at runtime. (3/15) + +pkg/images/tv/display/dsmap.x + Modified the call to the IMDMAP procedure in accord with the above + change to the calling sequence. Note that all the other hacked + versions of the display task (grinnell@ctio, iism75@steward/cti, + deanza@stsci) will also need to be modified. (3/15) + +pkg/images/imutil/t_imcopy.x +pkg/images/imutil/imcopy.x +pkg/images/imfit/t_lineclean.x + Added a local package prefix to the internal procedure name 'imcopy', + to avoid a name conflict with the (as yet partially implemented) IMIO + procedure of the same name. (3/15) + +------------------------- +(end of shared library related changes to the VOS and applications) + +unix/boot/rtar/rtar.c +vms/boot/rtar/rtar.c + In the switch/case which processes the argument list flags, case 'f', + added a test for (*argp==NULL) to avoid a segmentation violation in + tape_open in the event of a missing filename argument. (3/15) + +------------------------- +(All systems updated; on draco, deleted all binaries and did a full sysgen +(to ensure that all old objects were removed from the libraries.) (3/15) + +local/login.cl [UNIX/IRAF] + Regenerated the login.cl file for V2.5. (3/16) + +------------------------- +System moved to node GLL1 (microvax/gpx); Ultrix 1.2 port begun. (3/16) + +dev/hosts +dev/uhosts + Brought these files up to date for our local network. (3/17) + +unix/os/zfiotx.c +pkg/cl/errs.c +pkg/cl/history.c + Minor changes were made in these files to improve the ability of the + CL to recover (restore line mode i/o) when an error occurs in a + program which uses raw mode i/o. The OS terminal driver would save + and restore the terminal mode bits when setting raw mode, which is + great, but if raw mode somehow got physically set on the device then + it could never be cleared. Now, when the terminal driver is commanded + to disable raw mode it will do so, regardless of the previous state + of the device. Also, if the terminal driver receives the raw mode off + escape sequence it will clear raw mode even if it was never set at the + driver level. (3/17) + +------------------------- +Initial port of IRAF to Ultrix 1.2 completed without incident. (3/17) + +gio/cursor/rcursor.x + Added calls to gtr_page() and gtr_waitpage() to take the workstation + into and out of terminal mode when executing a :! os escape from + cursor mode. (3/18) + +gio/cursor/grccmd.x +gio/cursor/grcread.x +gio/cursor/grcwrite.x +gio/cursor/grcwarn.x + + There were still situations where messages written by low level code + in the CL process could end up in alpha mode text in the graphics + plane, while processing a :. command in cursor mode, e.g., :.read, + :.write, :.snap, and so on. For example, error messages would come + out in the graphics plane, as would the enter password prompt when + sending graphics output to a remote node for the first time. + + This would happen because when a colon command is read, the GE sequence + is issued when newline is seen, i.e., when the user types carriage + return. This is not a problem for colon commands in applications code + since all pseudofile i/o is processed through the stdgraph kernel, + but the low level code in the CL process can read and write directly + to the terminal. The solution was to echo the colon command on the + status line without the newline terminator. Any subsequent text is + then appended to the text already in the status line. One nice benefit + of this is that when the user types the "=" key to do a snap, the + command ":.snap" is echoed on the status line, providing positive + feedback to the user. I also added some code to intercept error + messages (grcwarn.x) and print them in the status line. (3/18) + +pkg/plot/implot.x + IMPLOT now includes the system banner (etc.sysid) in the plot title. + (3/18) + +vms/os/zfchdr.c + Modified ZFGCWD to return the current directory in lower case, rather + than upper case. This was breaking the new MKPKG special file search + code described below (directory string comparisons were failing due to + a case mismatch). Anyhow, pathnames have long been coming out in + mixed case on VMS (e.g., "[IRAF.SYS.OSB]f77pak.for"), which is + inconsistent and unaesthetic. (3/19) + +unix/boot/mkpkg/char.c +unix/boot/mkpkg/main.c +unix/boot/mkpkg/mkpkg +unix/boot/mkpkg/mkpkg.csh +unix/boot/mkpkg/mkpkg.h +unix/boot/mkpkg/mkpkg.hlp [UNIX,VMS,SUN] +unix/boot/mkpkg/pkg.c +unix/boot/mkpkg/sflist.c +unix/boot/mkpkg/tok.c + Made several enhancements to MKPKG, the major one being the addition + of a new "special file list" capability. Other, minor enhancements + include reorganization of the main to permit multiple subprograms on + the command line, e.g., "mkpkg relink install", and some improvements + to the detection of interrupts. + + The special file list capability makes it possible to flag any source + file in the system for special processing in a host specific fashion, + without making any changes to the portable system. This is done by + declaring all the special files for a given host operating system in + the new file "mkpkg.sf" in HLIB. Examples of files needing special + processing are files which have been optimized in assembler for a + specific host system, and files which need to be compiled in a + nonstandard way to avoid bugs in a host compiler. The special file + list replaces both the "$iffile as$file.s" type constructs in portable + mkpkg files, as well as compiler bug scripts like the "precomp.csh" + file in the "hlib$SUN_kludge" directory in SUN/IRAF. (3/19) + +unix/as/*.s +unix/hlib/mkpkg.inc [UNIX,SUN] +unix/hlib/mkpkg.sf + +vms/as/*.s +vms/hlib/mkpkg.inc [VMS] +vms/hlib/mkpkg.sf + + Added the mkpkg.sf special file list for each system (it is similar but + different for every system), and a $include for it in hlib$mkpkg.inc + so that the special files are defined regardless of who runs mkpkg, + or from what directory. Some changes were also required in the AS + directory, e.g., bitpak.s/bitupk.s were combined as bitfields.s, + to provide a one to one file mapping with bitfields.c in OSB. (3/19) + +sys/osb/mkpkg +sys/libc/mkpkg +sys/gio/nspp/sysint/mkpkg +sys/gio/ncarutil/sysint/mkpkg +sys/vops/lz/mkpkg +sys/vops/ak/mkpkg + These mkpkg files were modified to remove $iffile references to + special source files in AS, since this is now handled by the special + file list capability. (3/19) + +pkg/xtools/mkpkg + Added a "$purge lib$" to get rid of the new version of libxtools on + VMS. (3/19) + +----------------------- +Updated all systems. (3/19) + +bin/s_iraf.e + +vms/hlib/linkiraf.opt + +vms/hlib/irafuser.com [VMS/IRAF SHARED LIBRARIES] +vms/hlib/login.cl +vms/boot/spp/xc.c +vms/hlib/share/* + Modified VMS/IRAF to use shared libraries. For this to work, the + system manager must install the image bin$s_share.e when IRAF is + installed. The use of shared libaries reduced the amount of disk + consumed by the IRAF executables (BIN) from around 30000 blocks (15Mb) + to less than 10000 blocks (5Mb), i.e., slightly more than a factor + of 3; this should be a real boon to our microvax users with small + disks. Memory usage and link time should be correspondingly reduced, + and process startup should be speeded up somewhat, although most of + the time is probably spent on things other than paging. + + The XC task can be used to link images either with the shared library + image (-n) or as a fully resolved image (-z). I set the default to be + to use the shared library, since that is fastest and most efficient, + and is bound to be what people want most of the time. The principle + disadvantage is that symbol table information is not available for the + shared library, hence it is more diffiicult (but still possible) to + wander around in the system libraries with the debugger. To get around + this I added the -z flag to the foreign task definition for MKDEBUG; + it is necessary to run MKIRAF or edit your LOGIN.CL file to pick this + up. If one only wants to debug user code, "xc -x" will use the shared + library, giving a much faster link but no system symbols. + + The code used to generate the shared library is a bit of a kluge at + present. In particular, the shared library must be generated manually; + it is not done automatically in a sysgen. This will be remedied in a + future release. (3/21) + +sys/fmtio/strsrt.x +sys/fmtio/strcmp.x + + Added a new routine strcmp (more efficient than using strncmp with + maxch=ARB), and made minor optimizations to the code of the other + routines. The calling sequence of STRSRT (the string sorter) was + chanaged slightly, after first searching the system for all the + routines that use it; the routine is relatively new and is currently + only used in system code. The new string sorter chooses the pivot + element for the quick sort algorithm differently, to avoid quadratic + behavior when sorting an already sorted array. (3/22) + +sys/fio/fntgfn.x +sys/imio/db/imgnfn.x +sys/imfort/db/imgnfn.x +pkg/system/directory.x + These routines all referenced STRSRT, and had to be modified to agree + with the change to the calling sequence noted above. (3/22) + +sys/fmtio/str*.x +sys/fmtio/gstr*.x +sys/fmtio/zzdebug.x + All of these old routines used for-loops rather than do-loops to march + down the string. Where appropriate, converted these to use do-loops + to trigger the Fortran optimizer. In many of the string comparison + operators (strlt, strge, strncmp, etc.) I was also able to simplify + the logic considerably, making them somewhat faster. STRTBL was + rewritten to use the more efficient putline rather than putc to format + the output table. Since some of the routines were either extensively + revised or completely rewritten, I added a set of test programs to + zzdebug.x and tested all the routines. An old bug was found and fixed + in the process: strmatch was not recognizing EOS for an end of line + match ($). This was added to patmatch() a while back, but evidently + I forgot to add it to strmatch too. (3/22) + +pkg/system/directory.x +pkg/system/doc/directory.hlp + The directory lister was reworked extensively to recognize and execute + specially optimized code for the most common cases. The most important + of the low level routines called by the directory program were also + optimized, as noted above. A new "horizontal" (VMS like) file ordering + format was added as an option to supplement the default "vertical" + format. + + In common cases the directory lister is now about 50% faster than + previously. I also determined that there were a couple of cases where + the old program would perform especially poorly. The first case was + when listing very large directories, since the way the old program was + constructed it would always read the entire file list into memory + before formatting the output table. The new "horizontal" format is + provided as an option to address this case. + + The second case where poor performance could result was when listing + very large directories that are stored by the host system in sort order + (as in VMS). The quick sort algorithm used would exhibit quadratic + behavior when sorting an already sorted list, i.e., the sort time + would grow as the number of files squared if the file list was already + sorted. For small directories (less than 100 files) the effect was + not significant, but when listing very large directories this could + be a major effect. + + The latter problem was solved in two ways: [1] the new non-sorting, + "horizontal" listing option avoids the problem entirely, and [2] the + new STRSRT subroutine avoids the quadratic behavior. With the revised + quick sort algorithm, the expense of sorting typically runs only about + 3% of the total run time. + + The pattern matching code was also optimized. Simple "*.xx" style + filename extension templates are recognized as a special case and a + very fast custom inline pattern matching scheme is used in this case. + + The "horizontal" format option is enabled by setting the directory.sort + parameter to NO (the default is YES, which is faster and nicer in most + cases). If sorting is disabled, the task will print the listing out + line by line as files are physically read from the directory, in much + the same way that the VMS directory lister does. In addition, if the + standard output is not redirected the output will be flushed after + every 1 to 4 lines. + + The only significant optimization remaining to be made would be to + move the directory program into the CL process, but provided that the + system is not paging heavily the performance should be fine with the + current process structure, i.e., the directory listing should appear + in few tenths of a second for modest sized listings, even on an 11/750. + (3/22) + +pkg/system/sort.x +pkg/system/sort.par +pkg/system/doc/sort.hlp + Modified the quick sort code in the SORT program to avoid quadratic + behavior on an already sorted list. (3/22) + +sys/etc/qsort.x +sys/vops/asrt.gx + Put the same fixes into these quick sorters. (3/22) + +------------------- +(All systems updated.) (3/22) + +local/notes.v24 [all systems] + Changed the name of the system notes file to notes.v25. Actually, + it contains the notes for both IRAF revisions 2.4 and 2.5. (3/23) + +unix/*/mkpkg +unix/*/mkpkg.csh +unix/hlib/irafuser.csh + Changed the name of all the 'mkpkg.csh' files, used to bootstrap the + UNIX HSI, to 'mkpkg.sh', since they are SH command files. Added system + definable switches HSI_CF and HSI_FF to all calls to compile or link + HSI C or Fortran code, e.g, "cc -c $HSI_CF file.c". These are defined + as environment variables in hlib$irafuser.csh. An additional variable, + HSI_XF, is also defined and is used as XFLAGS in all the HSI mkpkg + files. This feature makes it possible to control the compilation and + linking of all the HSI programs by changing a single file. + + [SUN/IRAF]: I tried to use this new feature to compile the HSI + bootstrap programs for SUN/IRAF with the -mc68010 option, so that + the HSI could be run on the old Sun-2s, but it turns out that this + does not work because all the Sun system libraries were compiled + for the mc68020. Hence, sites with Sun-2s will need to do a bootstrap, + but that is not a big deal. The Sun HSI uses only software floating + point (if it uses any at all), so most sites will not need to do a + bootstrap, although it may be necessary to do a full sysgen. (3/23) + +unix/rmbin.sh + + Added a new shell script to the UNIX HSI, to be used to strip the + binaries from the HSI if the RMBIN task is not runnable for some + reason, e.g., if the binaries were compiled on an incompatible host, + or if the bootstrap is aborted. (3/23) + +------------------ +The standard VMS/IRAF user system (IRAF) updated to V2.5 on draco. (3/23) +V2.5 is now the standard user system at NOAO. + +pkg/cl/gram.c + Changed the trailing "EOF" output by DPARAM to "# EOF" so that naive + programs will ignore it, but it will still be there to mark the end + of the list. This is really just a workaround though; the IPC + mechanism should provide better support for list and array i/o. (3/24) + +pkg/system/directory.x + Fixed a bug in the special case extension matching code which would + cause it to accept a partial match of the extension string, rather + than requiring a full match. (3/25) + +vms/hlib/login.cl + For VMS/IRAF, added a -z to the FC foreign task definition to prevent + use of the IRAF shared library, which is not needed (the IMFORT + interface is layered directly upon the kernel), and which causes name + conflicts. (3/25) + +sys/fio/fwtacc.x +sys/fio/zzdebug.x + Added code to fwtacc (the "waiting for access to file" code) to check + if the maximum number of physical file descriptors for the process has + been exceeded. If this occurs a file open error will occur, returning + errcode = SYS_FTOOMANYFILES to the caller. (3/25) + +sys/imio/imt.x +sys/fio/fntgfn.x + Modified both the image template and file template packages to permit + the input template string to be any arbitrary size. (3/26) + +unix/hlib/stripper +unix/hlib/stripall + Deleted the reference to the cryomap map data file, since the file no + longer exists. Also modified the stripall script to not delete the .h + files in hlib and hlib$libc. (3/26) + +doc/aosvsiraf.hlp + + Added the installation guide for AOS/IRAF (courtesy of Skip Schaller, + Steward Obs.) to the system docs file. (3/26) + +local/tasks/lnews.cl + +local/tasks/local.cl [VMS/IRAF only] +local/tasks/local.men + Added a new task LNEWS to the LOCAL package on VMS/IRAF. This task + uses the IRAF pager to page the local (NOAO) VMS system news file. + Although this can also be done with !news, the IRAF pager is much + more sophisticated, and it works for non-DEC terminals. (3/26) + +unix/gdev/sgidev/sgi2uapl.c +unix/gdev/sgidev/sgi2uimp.c +unix/gdev/sgidev/sgi2uqms.c + Replaced the #define SWAP_BYTES with code to determine whether + we are running on a byte-swapping machine at runtime. (3/27 SRo) + +------------------------- +Nodes aquila and carina were updated to V2.5. (3/27) +Draco, pavo, tucana, octans updated. (3/28) + +/etc/printcap +/usr/spool/lw + +/local/bin/sgi2uapl + +unix/hlib/sgi2uapl.e + +unix/hlib/sgi2uqms.e + + Installed the Apple laserwriter as an lpr device under UNIX on lyra, + and compiled and installed the appropriate IRAF/SGI translator in + HLIB, with link in /usr/bin. (3/30) + +dev/termcap +dev/graphcap + Added tek 4010 entry, identical to 4012 except that it uses 74 + text columns instead of 75. (3/31 SRo) + +dev/graphcap +dev/termcap + Merged the AOS graphcap and termcap files, contributed by Skip + Schaller, into the lyra graphcap and termcap files. (3/31 SeH) + +pkg/cl/grammar.y + The grammar was not permitting + + switch (xxx) { + case 1: + + ... + + as the newline following the "case 1:" was not allowed for in the + grammar. Modified the grammar to permit the newline. (3/31) + +dev/hosts + Added entries for the three U. of A. nodes, recently added to our + Ethernet (solpl, cti, taurus). (4/1) + +pkg/images/tv/display/iispio.x +pkg/images/tv/display/zsttim.x +pkg/images/tv/cv/iism70/iispio.x + Egad! Found a quite serious bug in the display code which must have + been there quite a while. Probably hasn't shown up because it only + affects display access over the network, and the network was probably + placing enough of a limit on the max transfer size to hide the problem. + The size of the intermediate buffer which is malloc'ed in the IISPIO + code was being calculated improperly. The code was assuming the value + IIS_MAXBUFSIZE to be in units of xchars, whereas it is actually in + units of bytes since it is an FIO parameter. The buffer being + allocated would therefore be too small by a factor of two, causing a + segmentation violation on the Sun. (4/4) + +pkg/images/tv/display/t_display.x + In the call to AMAPS, the z1,z2 etc. arguments, which are supposed to + be of type short, were being passed as short(z1),short(z2), etc. + This ought to work, but coercion to type char or short in SPP argument + lists is not currently supported, and it is easier to just use + temporary variables of type short in the code. (4/4) + +------------------------------- +All systems updated; first version of IMTOOL installed on the Sun systems. +(4/5) + +dev/termcap + Added a missing `=' to the `cl' parameter for the vt640. (4/14 SRo) + +sys/gio/doc/gio.hlp + Updated the GIO documentation; fairly extensive modifications, + accurately describes all recent GIO revisions and fixes many ancient + errors in the documentation. (4/22) + +pkg/language/language.hd +pkg/language/language.men +pkg/language/doc/eparam.hlp +pkg/language/doc/set.hlp +pkg/language/doc/lparam.hlp +pkg/language/doc/dparam.hlp + +pkg/language/doc/edit.hlp +pkg/language/doc/task.hlp +pkg/language/doc/commands.hlp +pkg/language/doc/cursors.hlp + Updated the LANGUAGE package manual pages. (4/23) + +[shared library name collisions] [DISCUSSION] + I did a cross reference of all symbols in the 4 main IRAF libraries + used to build the shared library (sys,ex,vops,os) against all the + other libraries and all the .o and .a files in PKG and NOAO, to + locate any redefinitions of system symbols by applications code. + This was done on UNIX node pavo (using the UNIX tools, of course), + with the following results: + + pkg/cl/cl.o:0000023c T _onenty_ + pkg/images/libpkg.a:shiftlines.o:0000046c T _shifti_ + pkg/images/libpkg.a:shiftlines.o:00000000 T _shifts_ + + These symbols collide with system symbols of the same name; not bad + out of the 5000 or so procedures in the system. The _onenty_ (ONENTRY) + is well understood, and is already allowed for in the shared libraries. + The _shift[is]_ collide with bit shift procedures in OSB, and it + turns out that this problem has already been discovered and fixed in + the master lyra system, so for the moment at least, there are no + name collisions in the system (except possibly between applications + code and the math and tools libraries). (4/23) + +sys/gio/cursor/prpsio.x + Fixed a bug which was causing the OPENWS instruction to be lost when + writing to a GIO subkernel. When the GTRCTRL routine sees OPENWS it + physically connects the kernel and deposits the OPENWS instruction in + the stream spoolfile, but does not flush the metacode to the subkernel + as this would result in a reentrant call to PRPSIO. The bug was that + the PRPSIO routine was unnecessarily cancelling the graphics stream + before calling GIOTR to process input metacode through the workstation + tranformation and depositing the transformed metacode in the stream, + ready to be ready by the subkernel in an XFER request. Logically, it + should only be necessary to cancel the graphics stream once, when the + kernel is connected to a stream, and thereafter only AFTER the reader + has read the data formerly posted to the stream. (4/23) + +sys/imfort/imps3s.x + Fixed a typo; the procedure name was given as 'imps2s', whereas of + course it should have been 'imps3s'. (4/23) + +unix/os/alloc.c + Made a couple of minor changes to the device allocator for system + security reasons. The old program would allow the knowledgeable user + to specify by pathname the files to be allocated. Now only files in + /dev can be allocated, and since /dev is protected the process should + be secure. Furthermore, the old program would allow files to be + allocated to the user regardless of their former permissions, allowing + the user access to raw devices or kernel memory. The new program only + allows device files to be allocated which have world read/write + permissions prior to allocation. (4/23) + +dev/pix.imh +dev/pix.pix + Replaced the old standard test image, dev$pix, by a new picture of M51 + (the whirlpool nebula). The new image is more interesting, and also + has the advantage of being the canonical image size, 512 square (this + was interpolated up from a 508 square CCD frame). The pixel type is + short integer. (4/23) + +sys/imio/imdmap.x + Modified this procedure (used to open a image display as an image file) + to look for a graphcap parameter "z0", used to set the zero point for + the output device pixel range. If the value is not given a zero origin + is assumed. (4/25) + +pkg/images/iminfo/t_imstat.x + Hacked the IMSTAT code to make the inner loop somewhat more efficient, + and to add package prefixes to internal procedure names. (4/25) + +dev/graphcap + Added an entry for the IMTOOL display server. (4/25) + +unix/hlib/irafuser.csh + In the entries HSI_XFLAGS etc., deleted the "-c" flag, as this is + supplied where needed by all the HSI mkpkg.sh files, and it must not + be there unless needed (it can cause an object file to be installed + in the system as an executable, causing myserious runtime problems, + to say the least). (4/25) + +unix/gdev/zfiogd.x [SUN/IRAF] +unix/hlib/mkpkg.sf [SUN/IRAF] +local/sun/iisopn.x [SUN/IRAF] + The current prototype IMTOOL display server on the SUN systems uses + the standard DISPLAY program with very minor changes, in particular, + the file iisopn.x was hacked. To avoid having to modify the portable + part of the system I put the hacked file in local/sun and added the + file to the SUN/IRAF special file list. This is all temporary, + probably the next step will require more significant changes. (4/25) + +dev/termcap [SUN/IRAF] +dev/graphcap [SUN/IRAF] + Updated from Lyra. (4/25) + +---------------------------------- +VMS/IRAF Updated. Full compile of IRAF performed to correct optimizer +problem. (4/25) + +pkg/images/mkpkg [VMS/IRAF, usr$2 only (production system!)] + The mkpkg file had a -x flag in the $link, which someone had obviously + added for debugging and then forgotten to delete. Note that there is + no reason to do such a dangerous thing, since 'mkdebug' is already + available (as a foreign task), and it does the same thing. (4/25) + +vms/hlib/mkpkg.sf [VMS/IRAF] +unix/hlib/mkpkg.sf [VAX UNIX/IRAF] + In the MKPKG special file list, the reference to vops$lz/amov*.x had + to be changed to an explicit series of references amovi.x, amovs.x, + etc., since amov*.x matches the amovk*.x as well. (4/25) + +vms/hlib/mkpkg.inc +vms/hlib/install.com [VMS/IRAF] + Although there is not supposed to be any interaction between the + production iraf system 'IRAF' and 'IRAFX', when the sysgen of IRAFX + completed it turned out that IRAF no longer worked. I eventually + decided that one cannot have more than one version of VMS/IRAF on + the system which uses shared libraries, unless of course they both + use the same identical shared library. Without resorting to reading + the VMS manuals, I think what may be happening is that the shared + library defines a number of global sections which are literally + global. If two different shared libraries define different global + sections with the same names, the one which is actually used at runtime + depends upon the order in which they were installed or something, + hence a completely wrong section may be referenced, causing an + access violation, illegal instruction, or whatever at runtime. + + The solution for the moment is to use the shared libraries only in the + production IRAF system. In IRAFX, I set LFLAGS to "-z" in mkpkg.inc, + causing all the executables to be linked stand alone. I found that + even so much as installing one of the non-shared library linked IRAFX + executables would cause IRAF processes to fail (despite being on + another disk), so at present none of the IRAFX executables are even + installed. (4/26) + +lib/imset.h +sys/imio/imstats.x + + Added a new procedure IMSTATS to IMIO, and a new imstat parameter code + IM_IMAGENAME to . This is used to return the image (section) + name, as passed to IMMAP at image open time. (4/27) + +sys/imfort/doc/imfort.ms + The pathname of the OS library was incorrectly given as "lib$libos.a" + rather than "hlib$libos.a". (4/27) + +local/tasks/mkpkg + Added a '$purge bin$' statement to purge the newly installed x_local.e + executable in bin. (4/27) + +------------------------------- +Archive tapes made for ISI, Masscomp ports. (4/28) + +sys/gio/gtick.gx + Fixed a bug that in a special case (negative axis limits, negative step) + would cause the wrong first tick to be selected. (4/28) + +sys/gio/glabax/glbfind.x + Added protection against INLEFT ever being set to a negative value when + setting up the drawing parmeters for an axis. This should not be + possible, but was happening as a result of the above bug, and would + result in an infinite loop. (4/28) + +------------------------------------------------- +Archive tapes made for SAO Ultrix site (limited disk). (4/29 SRo) + +unix/gdev/sgidev/sgidispatch.c + +unix/gdev/sgidev/mkpkg.sh +unix/hlib/sgi.tab + +dev/graphcap +local/bin/sgidispatch -> hlib$sgidispatch.e + +local/bin/sgi2uimp - +local/bin/sgi2uapl - + Modified the UNIX SGI translator mechanism to require only one link, + sgidispatch, which gets passed the name of the translator from the DD + string in graphcap and locates its pathname from the sgi.tab file. + This simplifies device installation in UNIX and no longer requires + one to remember which systems require which links in /local/bin. + (4/29 SRo) + +----------------------------------- +Updated {IRAFX,IRAF}@draco, tucana. (4/30) + +---------------------------------- +Updated gll1 Ultrix/IRAF (5/1 SRo) + +lib/scr/implot.key + Implot was exhibiting different behaviour on draco from lyra when + requesting task help with `?'; the implot.key file on draco had a + more recent file date and had one fewer screen line (22 rather than + 23, the latter a blank line). Since the user of a 23-line terminal + experiences one less keystroke with a 22-line help page, the lyra + version was edited to match that on draco. (5/8 SRo) + +sys/imfort/imakwd.x + Fixed a typo; the comment string was being unpacked into the keyword + name string, overwriting it, with the actual comment string never + being initialized. (5/15) + +unix/boot/generic/chario.c + +unix/boot/generic/lexyy.c +unix/boot/generic/mkpkg.sh (VMS generic preprocessor bug) +unix/boot/generic/generic.c +unix/boot/generic/lex.sed + The $for ... $endfor construct was not working in the VMS version of + the GENERIC utility due to the old FSEEK bug in the VMS C compiler, + which I ran into back when MKPKG was developed. I ended up developing + a set of routines k_getc, k_fseek, etc., to get around this problem + in MKPKG; the code for these was copied to file chario.c, and the + other files modified to make use of the new routines instead of calling + the C library routines directly. (5/16) + +vms/boot/generic/chario.c + +vms/boot/generic/lexyy.c +vms/boot/generic/mkpkg.com +vms/boot/generic/generic.c + Updated the VMS version of GENERIC. (5/16) + +sys/etc/maideh.x + Changed the default action for an arithmetic exception to a fatal error + (causing task termination), like the other classes of exceptions. + There is no way an arithmetic exception can be caught and handled + in an IFERR reliably anyhow, due to limitations on the semantics of + ZXWHEN imposed by different host systems. An arithmetic exception + occurring within an IFERR could lead to an infinite loop on some + systems. (5/17) + +sys/imio/db/idbgstr.x +sys/imio/db/idbpstr.x +sys/imio/db/imgftype.x + Modified so that the "i_" prefix is optional, to be consistent with + idb_kwlookup(). (5/17) + +sys/imio/db/imgftype.x + Changed the "if (numeric)" at the end to "if (!numeric)". (5/17) + +dev/vi.ed + Made various changes to this file so that either or + can be used to exit from EPARAM when editor=vi. (5/18) + +pkg/cl/eparam.c + Made minor changes, deleting a few redundant fflush() calls (reduced to + only one per output line) to speed things up a trifle. (5/18) + +pkg/bench/bench.hlp + Updated the document, adding/deleting a few paragraphs here and there, + fixing some erroneous pathnames, and so on. Still need to update the + actual benchmarks section. (5/19) + +sys/ki/irafks.x + Fixed several bugs in the (never before used) device allocation and + remote magtape access code. These bugs were found when the KI was + used (at Steward Obs.) to access magtape devices on a Data General + MV/10000 from IRAF programs on a Sun workstation. (5/20) + +unix/os/gmttolst.c + Fixed a bug in the way daylight savings time was calculated. (5/20) + +unix/os/mkpkg +unix/os/net/mkpkg +unix/boot/bootlib/mkpkg +unix/boot/mkpkg/mkpkg + Changed the '$set XFLAGS = "$(HSI_XC)"' definitions in these files to + '$set XFLAGS = "-c $(HSI_XC)"', since the definition of HSI_XC in + hlib$irafuser.csh no longer includes the -c (since it is used to make + executables as well as compile objects). (5/21) + +unix/os/zfacss.c + Modified the heuristic used to discriminate between text and binary + files to increase the amount of file data inspected, and to require + the presence of newline characters in text data for the file to be + considered a text file. This is required to discriminate between + text files and binary files containing text, e.g., card image files + or FITS files. (5/21) + + [The VMS version of this routine does not use the heuristic, since VMS + [makes a distinction between text and binary files at the host system + [level, hence did not have to be modified. + +unix/os/zfioks.c +unix/os/net/zfioks.c +vms/os/net/zfioks.c + Modified the code which parses the .irafhosts file to permit arbitrary + characters (other than just alphanumerics and underscores) in whitespace + delimited tokens, e.g., host names, login names, and passwords. (5/21) + + [Ran a test and verified that node names (and presumably also login + [names and passwords) may contain arbitrary characters such as '-'. + +sys/fmtio/parg.x + Added some errchk declarations to PARGG. (5/21) + +sys/imio/db/idbkwlu.x +sys/imfort/db/idbkwlu.x + This code was permitting abbreviations of the standard keywords; + modified to require a full match. (5/21) + +sys/etc/oscmd.x + This routine was not recognizing dev$null as an output file, causing + foreign tasks executed with their output redirected to the null file + (e.g., "mkpkg >& dev$null") to do a physical file write. To avoid + having to mess with null files at the ZOSCMD level, I set the routine + up to spool the output into a temporary file, deleting the file at + the end to dispose of the output. (5/22) + +sys/gio/stdgraph/stginit.x + Added a check for the capability "tx", used to indicate whether or + not the device implements text generation in hardware. If the + capability is not defined, the kernel will now set software character + generation automatically. (5/22) + +sys/ki/irafks.x + Fixed a typo in the kernel server code for ZFRNAM (the file rename + primitive). The first filename was being used twice, ignoring the + second filename and causing the rename to be a no-op. (5/22) + +unix/boot/mkpkg/host.c + Modified the h_direq() function, used to compare to host directory + pathnames for equality, to ignore everything to the left of the + "iraf/", if both strings contains such a substring. This was necessary + for VMS, and now it turns out to be necessary for UNIX too. The + problem occurs when a UNIX directory name like "/usr" is a symbolic + link to some other directory. Directory pathnames will appear to be + rooted off "/usr" in MKPKG, but the get-cwd primitive will always + return the physical pathname, causing the directory comparison to fail + when it shouldn't. This happens on our Sun systems currently when + a fileserver system accesses the same version of IRAF as the primary + system, e.g., because the physical directory name is "/usr.MC68020" + but appears as "/usr" in all the IRAF files. Replacing the "/usr" in + the IRAF files (.login etc.) did not solve the problem, as the + physical directory name was "/usr" on the diskless node. (5/24) + +unix/boot/mkpkg/pkg.c +unix/boot/mkpkg/tok.c +unix/boot/mkpkg/host.c + If a file was checked out of a remote directory which had the same name + as a file in the local directory, the local file would be deleted and + replaced by the checked out file, and the latter would be deleted when + the update finished. This is appropriate for checking out libraries, + but not for checking out source files on the special file list, as this + could result in the standard source file being deleted if the file was + on the special file list. Modified h_outcheck and h_incheck to add + a "clobber" parameter to h_outcheck noting whether any local copy is + to be clobbered or preserved, with the extension ".cko" being added to + the local file if the file is to be preserved. At checkin time, if the + pointer to the remote directory name is NULL the file is not actually + checked back in, rather the local copy is deleted, renaming the .cko + file, if present, back to its orignal name. (5/25) + +vms/boot/mkpkg/pkg.c +vms/boot/mkpkg/tok.c +vms/boot/mkpkg/host.c + Merged above bug fix into the VMS version of mkpkg. (5/25) + +sys/ki/kzopmt.x + Was calling ki_getchan() to assign a channel slot even if the kernel + open procedure returned ERR, causing the high level open procedure to + fail to see the open failure. (5/25) + +sys/fio/fseti.x + To the F_VALIDATE case, added an assignment into field FNBYTES of the + FIO file descriptor, so that a fstati(fd,F_SBBLK) will return the + validated record size in bytes. (5/25) + +unix/os/zfiomt.c +vms/os/zfiomt.c + For technical reasons (reliable detection of EOT) when positioning to + a file, files are skipped by executing a record skip forward followed + by a file skip forward for each file to be skipped. If a read/parity + error occurred while doing the skip record on the first record of a + file, the driver would formerly abort the file open. Since the record + skip is followed by a file skip it is probably harmless, so the driver + was changed to print a warning message, ignore the error, and proceed + with the file skip. (5/25) + +unix/os/zmaloc.c + Restored the source for the old 4.1BSD memory allocator. This will be + used in place of the host system memory allocator (malloc,free,realloc) + if any of the following are defined (in ): DEBUGMEM, BSD42, + BSD43. It turns out that the memory allocator used in 4.[23]BSD, + while undoubtedly a very fast allocator for applications using zillions + of very small buffers, utilizes storage extremely inefficiently in + applications which use a few possibly very large buffers. + + The old allocator used a circular list allocation scheme which could + be very time (and working set) inefficient for applications with + zillions of small buffers, but which would allocate no more space than + needed and would reclaim, join, and reuse freed buffers efficiently. + The new allocator is time efficient but requires that storage be + allocated internally in units of 2**N bytes, allowing freed buffers + to be reused but not changed in size. This could lead to gross + inefficiencies when allocating large buffers, e.g., the actual space + allocated might be twice as large as what is needed, and once the + space was allocated the no-resize restriction would prevent it being + used again for a large number of small buffers. + + Note that use of a non-standard memory allocator may not be possible + on some UNIX systems, because applications may link with modules in + host libraries which assume the existence of a different (host system) + memory allocator with special properties. Unless there is good reason + to do otherwise, the memory allocator provided should only be used with + 4.[23]BSD systems. (5/26) + +dev/devices [UNIX,VMS] +sys/etc/xgdevlist.x +sys/etc/xalloc.x +sys/mtio/mtio.h +sys/mtio/mtopen.x +sys/mtio/mtosdev.x +sys/mtio/mtrewind.x +sys/mtio/zsttmt.x + Added an optional new parmeter to the entry for a device in the + dev$devices file. The new parameter, if present, specifies the + max transfer size for the device, or the maximum record size for + magtape devices. If the parameter is not present MTIO will indicate + to FIO that there is no max record size, leaving it up to the + application to determine the actual record size to be used. + + Old dev$devices syntax: + + device device_driver_text + + New syntax: + + device [%NNNN] device_driver_text + + e.g., + + mta.1600 %8192 nrmt8 mt0 mt4 ... + + The % notation was used to make the parameter optional, making the + change upwards compatible with the existing device tables. (5/26) + +sys/vops/alui.gx + This vector operator (lookup and interpolate) is not supposed to do + bounds checking, but this sets a subtle trap as the case X = exactly + NPIX will cause a reference one pixel off the right end of the input + array. Even though the out of bounds pixel value is only multiplied + by zero, this can cause an arithmetic error as the garbage pixel can + have any value. To detect and avoid this case, and also speed up the + case where the interpolation points are integral, I added a check to + see if the fractional offset from the leftmost pixel of an interval + is near zero, using the value of the leftmost pixel directly without + interpolation in this case. Note that the routine still does not do + actual bounds checking. (5/26-27) + +unix/as/aluis.s +unix/as/aluir.s +unix/hlib/mkpkg.sf + This change obsoletes the VAX-optimized assembler versions of these + routines. The UNIX f77 compiler is now good enough that we do not + need the hand optimized routines anyhow, so I commented out the entries + for them in the mkpkg.sf file. The assembler sources will be kept + around for a while with [OBSOLETE] comments in the code. These + routines are not optimized in assembler on any other system. (5/27) + +------------------------ +Updated IRAFX, tucana/pavo. (5/26) + +unix/os/zfiomt.c + If the drive is opened with newfile=0, the tape will not be moved. + The VMS/IRAF version of the magtape driver was already set up this + way. (5/27) + +sys/mtio/mtopen.x +sys/mtio/mtrdlock.x +sys/mtio/mtparse.x + If a tape is opened explicitly to file zero, e.g., "mta[0]", MTIO will + now try to open the drive without moving the tape, by ignoring the + information in the .lok file, and by calling the kernel driver with + newfile=0. Since the actual file position is unknown, the tape is + arbitrarily assumed to be at file=1, record=1 following the open. + + NOTE that this feature may not be implemented, or be implementable, + on all systems. The intended use of the feature is to allow recovery + of bad tapes which cannot ordinarily be read by the portable IRAF + readers, by using a host dependent utility to manually position the + drive, which is then opened at file "[0]" and read without being moved. + (5/27) + +sys/mtio/mtopen.x + When writing to a tape, a warning message is now printed if the record + size (FIO buffer size) requested in a MTOPEN call exceeds the maximum + record size (F_MAXBUFSIZE) for the device. Nothing is done on a read + since it is routine to open tape devices with a very large input + buffer, to accomodate arbitrarily large records. Reader programs + which must be able to read or write a certain size record may wish + to check F_MAXBUFSIZE themselves (any time after the MTOPEN). (5/27) + +sys/fio/read.x + READ is not supposed to read more than one record at a time when + reading from a streaming (record structured) device. This would + always work previously because we sized the buffer to be larger + than the largest possible device record. If a max record size + parameter is now defined for the device, however, the FIO buffer + will be set to the size of the max transfer permitted for the + device. This case was not being recognized, causing READ to read + lots of physical device records to satisfy a large logical read + request, if the FIO buffer size happened to be exactly the same as + the device block size. (5/27) + + [All MTIO, dev$devices file revisions were tested, 5/27] + +sys/imio/iki/stf/stfmerge.x + When a new parameter is merged into the GPB of a new copy image, the + STF_PSIZE and STF_SZGROUP fields of the GPB descriptor for the new + image are now updated, along with STF_PCOUNT. This bug was fixed + originally by STScI; the original fix appeared to be using + P_PSIZE(n_pp) before it was being set, so I made the fix slightly + differently, and this should be tested. (5/28) + +sys/imio/iki/stf/stfopix.x + The WCS data structure will not be copied (call stf_copywcs()) if + the pointer o_im (old image, e.g., for a NEW_COPY operation) is null. + (5/28) + +pkg/images/imdebug/mktest.x + Modified the make-test-image program slightly to avoid integer + overflow when creating a short integer test image. (5/28) + +pkg/images/imdebug/mkimage.x + Made a minor change to avoid a possible char/int argument mismatch + problem (no bug ever actually observed). (5/28) + +pkg/cl/builtin.c + Modified the code for Keep to search back down the call stack to find + the earliest task reading command input from the same place as the + task which called Keep, then execute "keep" for every task back to + that point (unless the task calling Keep is reading commands from + stdin). Formerly only the context of the tasking calling Keep would + be preserved. + + With this change, ***** IT IS NOW PERMISSIBLE TO PERMANENTLY LOAD + PACKAGES FROM WITHIN A SCRIPT, E.G., THE LOGIN.CL FILE *****. (5/28) + +unix/hlib/login.cl +vms/hlib/login.cl + A [commented out - 5/29] command to load the NOAO package at login + time was added to the default LOGIN.CL file (NOAO also loads PLOT and + IMAGES). A comment was added to tell users how to list additional + packages to be loaded at login time. It is expected that users will + personalize the set of packages to be loaded at login time, and that + system installers will modify the default LOGIN.CL to load whatever + standard and local packages are in common use at their site. Note + that packages loaded in this way can only be discarded by logging out. + (5/28) + +--------------------------- +Updated IRAFX, tucana+pavo. (5/28) + +unix/os/zfiotx.c + If a process (e.g., the CL) is suspended while the terminal driver is + set for raw mode, the terminal driver will now be restored to normal + mode while the process is suspended. Note that only the state of the + terminal driver is affected, not the state of the terminal itself, + e.g., reverse video highlighting will not be automatically cleared if + in effect when a process is suspended. (5/29) + + [Although this feature will prove useful to expert users, it is + [essential on Berkeley UNIX systems to avoid leaving the terminal + [in raw mode with no echo if the novice user accidentally types the + [suspend process control code. + +lib/fio.h +lib/fset.h +unix/hlib/libc/fset.h +sys/fio/fseti.x +unix/os/zfiotx.c + Added a new terminal driver and FSET option named F_SETREDRAW. + The statement + + call fseti (STDIN, F_SETREDRAW, ch) + + will cause the terminal driver to return 'ch' (integer!) as the + value of any pending GETC when a temporarily suspended process + resumes execution. The intention is that screen oriented applications + programs such as EPARAM, PAGE, etc., will make such a call to enable + transmission of their screen redraw keystroke (ctrl/l, ctrl/r, etc.). + This will be returned to the application if the process is suspended + while awating input in raw mode, causing the screen to be automatically + redrawn when the process resumes execution without the user having to + manually type the redraw character. Programs which make use of this + feature should call FSETI twice, once at the beginning to enable the + automatic redraw, and once at the end with ch=0 to disable the feature, + as other programs may not be prepared to deal with the unexpected + input. (5/29) + +sys/etc/xisatty.x + This routine is called to determine if a text stream is connected to a + terminal rather than a text file. Added logic to return yes (is a tty) + if the file is standard stream, the stream has not been redirected, + and the process is running as a connected subprocess. In this case + the stream is highly likely to be connected to a terminal in the CL + process, and transmission of terminal driver control sequences (like + F_SETREDRAW and F_RAW) is a reasonable thing to do. (5/29) + +sys/etc/pagefiles.x +pkg/system/help/houtput.x + Added calls to set F_SETREDRAW to these routines, which call CLGKEY + to read keystrokes from the terminal in raw mode. The pager can be + suspended and restarted with full recovery; HELP does not (yet) buffer + previously displayed text, so the redraw action is temporarily set + to cause the next page of help text to be displayed. (5/29) + +pkg/cl/edcap.c +pkg/cl/eparam.c + In EDCAP, routines edtinit/edtexit (called upon entry and exit from + a screen routine to initialize the terminal), added calls to + F_SETREDRAW to enable the redraw keystroke defined in the dev$*.ed + file for the user's favorite editor. In EPARAM, deleted countless + calls to e_ctrl to set/clear standout mode, and replaced them by a + few calls to set standout mode only when text needs to be drawn in + standout mode. The original code was leaving the terminal in standout + mode most of the time and only restoring normal mode when drawing + normal text, causing the terminal to be left in standout mode if the + CL was suspended (the new code is also simpler and more efficient). + (5/29) + +---------------------------- +Deleted all machine independent files on IRAFX and tucana and started a full +recompile sysgen on both systems, to get rid of any junk files left by the +incremental updates, and to ensure that everything still compiles. (5/29) + +unix/boot/mkpkg +unix/boot/mkpkg.hlp +unix/boot/scanlib.c +unix/boot/main.c +unix/boot/pkg.c +unix/boot/extern.h + Merged the revisions for the '-u' option (forcibly update library + module dates) into the master version of MKPKG. This option, currently + fully implemented on AOSVS/IRAF, causes the dates of all library + modules looked at during a mkpkg run to be updated to be no older than + the file "hlib$iraf.h", which is assumed to have been "touched" after + system installation to mark the system installation time. This option + is needed on systems like AOS/VS which cannot restore the modify dates + of source files; when the system is installed on such a system, all + files will appear to MKPKG to have been modified at system installation + time. Updating the library module dates to a time shortly after the + system was installed prevents recompilation of the entire system, + without interfering with the ability of MKPKG to detect changes to + files which have been modified since the system was installed, which + should force recompilation. (5/31) + +vms/boot/mkpkg + Updated the machine independent files changed in the above revision. + (5/31) + +sys/ki/ktzsek.x + Modified to mark the internal KI text data cache empty when a seek + occurs on a file, so that the next read will force the buffer to be + refilled at the new file offset. This was the reason why randomly + paging a file over the network was not working properly. (5/31) + +sys/imio/imioff.x + Changed the code which checks the value of 'ndim' to allow opening + images with ndim=0, i.e., a header file with no pixels. (5/31) + +sys/osb/f77upk.f + Changed the "lastch=nchars" to "lastch=0" so that a blank f77 string + would be returned as an SPP null string (the routine is supposed to + trim blank padding at the right). (5/31) + +sys/osb/f77pak.f + This routine was not blank padding to the full length (len(str)) of + the Fortran string, as the F77 standard requires. (5/31) + + [Carefully tested, 6/2] + +unix/boot/generic/generic.c +vms/boot/generic/generic.c + In the code for outstr(), replaced the call to fprintf() by a call to + fputs(). There was no evident reason to use fprintf, and if the string + being output contained any % characters it would be mangled. (5/31) + +vms/os/net/zfioks_obj.dna + + This file is the zfioks.obj (binary object file) of zfioks.c, + configured for DECNET. A precompiled version of the file is provided + so that sites which do not have a C compiler can reconfigure the + IRAF network software for DECNET. (5/31) + +--------------------- +Updated all systems. (5/31) +Deleted the standard production VMS/IRAF system on draco (IRAF), and installed +the "final" V2.5 system (more bug fixes are sure to follow during testing). +(5/31) + +sys/gio/ncarutil/*.f + On the request of UCAR, we added a 12 line copyright banner to the + header of each Fortran source file. (6/1) + +sys/mtio/mtcache.x + Fix a bug which could cause the tape position cache to still be + considered valid following an error abort during a tape operation, + which is supposed to render the tape position undefined. The mt_sync + procedure will now invalidate the entire cache if called during + error recovery. In the process of fixing this I changed the file + number used to indicate an undefined position from 0 to -1. (6/1-2) + +vms/hlib/login.cl + 1. Added a $(1) argument reference to the foreign task definition for + vdir (the interface to the VMS directory lister), to allow use of the + routine with IRAF logical directory pathnames, and to give the user + a more sophisticated example of the foreign task syntax. + 2. Added a new foreign task VFILE (with a $(1) filename reference to + permit use of IRAF virtual filenames) to allow use of the VMS command + DUMP/HEADER to examine in detail the header of VMS files. (6/2) + +vms/* [lyra] + Updated the copy of the VMS HSI maintained on lyra. (6/3) + +sys/imio/db/imaddf.x + In the course of testing the error recovery that occurs when the user + area of the image header overflows, found and fixed a minor bug in + this routine. The max size of the user area was off by one SU hence + the descriptor buffer could be overwritten if overflow of the user + area occurred. Also, the use of F_CANCEL to cancel the string buffer + if overflow occurred seemed questionable and obscure and was removed. + This appeared to have been put in originally because a CLOSE on a + string buffer which had overflowed would cause an error in the STRCLOSE + (see below). (6/3) + +sys/fio/stropen.x + In STRCLOSE, replaced the putci(fd,EOS) by an explicit assignment to + avoid a possible error condition. If a string buffer of length N chars + overflows during a write, the EOS will be written into char N+1, in + accord with the usual SPP stringop semantics. (6/3) + +sys/imio/imunmap.x + This routine contained a section of code to compute the value of + IM_HDRLEN which was redundant with the equivalent section of code + in oif/oifupdhdr.x, and irrelevant in the STF kernel. Since this is + an expensive operation for images with large headers, I removed the + code. (6/3) + +------------------------------------- +Updated all systems. (6/3) +Kitt Peak 4-Meter system updated; full SUN/IRAF system recompiled for -ffpa. + (6/4) + +unix/boot/mkpkg/modlist.c.NU + + Added a copy of the library module list filename/date database file + from ASOVS/IRAF to the UNIX mkpkg, with a NU (not-unix) suffix to + indicate that it is not an active file. Although not used for UNIX, + this code is machine independent and hence it is probably worthwhile + to maintain the source in the master system. (6/5) + +local/Gterm.install [SUN/IRAF] + Added additional user oriented documentation to the installation notes + for the GTERM and IMTOOL Sunview tools. (6/5) + +sys/vops/ak/mkpkg +sys/vops/ak/apow*.x + Deleted a set of APOW files in the AK subdirectory. These were not + supposed to be there, as the real sources are maintained in LZ. (6/7) + +---------------------- +Updated all systems. (6/14) + +unix/gdev/sgidev/sgi2uimp.c [lyra] +vms/gdev/sgidev/sgi2vimp.for [irafx] +vms/hlib/sgiqueue.com [irafx] + Added "prerasterization on" to Impress document header in both + SGI translators, and removed it from IMPRINT command in VMS + (sgiqueue.com). Formerly this was done only in VMS, for the 300dpi + imagen, in IMPRINT. A recent experience at AT&T on a UNIX 11/785 + running a 300dpi Imagen showed that prerasterization is a builtin + function of the Imprint engine, rather than a separate VMS IMPRINT + task option. (6/17 SRo) + +sys/etc/errget.x + Replaced the call to strcpy, used to return the error message string + in the xer common to the caller, by a call to xer_fmterrmsg. + The latter will expand error message encoded as "XXX opstr" into + the more readable format, using the system error message in the + lib$syserrmsg file. I discovered this when testing the cursor mode + ":.snap" with garbage device names; everthing was working correctly, + i.e., the error was being detected and recovered from properly, but + the error message being printed was just a number, similar to what + :.snap prints when it is working correctly, possibly causing the + error to go unnoticed. (6/17) + +unix/hlib/install + + Added an INSTALL script for UNIX/IRAF. Starting with the system read + into an $iraf directory somewhere, and an $iraf account, this completes + the basic installation, modifying pathnames in all the necessary files, + and installing all the necessary symbolic links in UNIX land. It can + also be run anytime after the initial installation to verify that all + is ok. The user must still configure the device tables, default + login.cl, and so on, but the system should run once the tape has been + read in and the INSTALL script run, assuming the binaries are + compatible with the local host (not necessarily true for SUN/IRAF). + (6/17) + + Added a SUN/IRAF version of the script, identical to the UNIX/IRAF + version except for some extra stuff at the end to do the custom + suntools installation. (6/18) + +sys/gio/cursor/grccmd.x +sys/gio/cursor/grcopen.x +sys/gio/cursor/gtropenws.x +sys/gio/cursor/gtrreset.x + 1. In gtropenws.x, rearranged the statements which shut down the old + kernel and open a new one. There was a problem with error recovery + the way the code was originally. The code would partially close down + the old kernel and then abort if an unknown device name were entered + in :.snap. The abort, causing an immediate exit from the routine, + of course, would cause the data structures to indicate that the old + kernel was still connected, when in fact it had been partially shut + down. This was causing a segmentation violation or other error when + a valid snap was entered after a failed snap. + 2. In gtrreset.x, updated the code which closes down the old kernel + to be like the equivalent code in gtropenws.x. In particular, the + graphcap descriptor was not getting closed off in a reset, e.g., when + doing a GFLUSH. This was harmless, but would leave an unused malloc-ed + buffer behind which would never be freed. + 3. In grccmd.x, added a "- done" message to the :.snap code, to + indicate that the snap has completed successfully. + 4. In grcopen.x, fixed a grammatical error in a comment. (6/18) + +lib/syserr.h +lib/syserrmsg +sys/tty/ttyindex.x + Added a system error code/message SYS_TTYINVDES ("invalid or null tty + descriptor") and a check for a null descriptor to the tty_find_cap* + procedure, called by all ttyget* procedures. This will avoid a + segmentation violation in the future if a ttyget routine is called + with a null descriptor. (6/18) + +--------------------------- +Updated tucana, irafx@draco. (6/18) + +unix/hlib/mkiraf.csh + Removed the trailing '/' from the 'set iraf = /iraf/'. This is not + needed and has confused people. (6/19) + +unix/hlib/install + This is to document the use of the INSTALL script, used to install + UNIX/IRAF on a UNIX host. + + The install script is used + + [1] During the initial installation, to automatically modify those + iraf configuration files containing pathnames, and to make all + the necessary links in UNIX land to get IRAF to run. + + [2] After the initial installation, to verify that the system is + still correctly installed. The script will examine all the + files and links to verify that each is correct and still in + place. This may be necessary, for example, after UNIX itself + has been updated, which may cause the IRAF links to be lost. + + The installation procedure for UNIX/IRAF is greatly simplified by the + install script. To install the system from scratch: + + [1] Create an account for user 'iraf', with a root directory such + as /usr/iraf, and a login directory such as /usr/iraf/local + ($iraf = /usr/iraf, $home = /usr/iraf/local). The actual + pathname is arbitrary but should be kept as short as possible + to speed up runtime pathname resolution. + + [2] Login as 'iraf', cd to $iraf, and read in the distribution + tar tape or tapes, e.g., tar -xpf /dev/nrmtXX. + + [3] Cd to $iraf/unix/hlib, become superuser, and type 'install'. + To get a default installation, just hit return to accept the + prompted response to each query. To see what the script will + do without actually doing anything, run 'install -n' once + before running it for real. + + [4] The install script may have modified the .login file, so login + again, and do a 'mkiraf' to initialize the IRAF runtime + environment for user 'iraf', then 'cl' to run IRAF. + + That is all that is necessary for the basic installation of a binary + distribution. It will still be necessary to manually modify the device + tables in hlib and dev, interface any local terminals, printers, + plotters, etc., as described in the installation guide. (6/19) + +gdev/sgidev/sgi2vln03.c + [VMS] +gdev/sgidev/mkpkg.com [VMS] + Added DEC C sgi translator for the ln03+ in Tektronix (extended + addressing) mode. (6/24 SRo) + +vms/gdev/iism70/m70.h +vms/gdev/iism75/m75.h + Changed the value of IIS_MAXBUFSIZE from 16384 to ((32768-512)/2), + i.e., 16384-256. This was necessary to avoid having sign extension + when converting from long to short and back to long from promoting + 16384*2=32768 to a negative number. This would happen when doing i/o + to the IIS on the local node on VMS, since byte packing is not used + and the byte count is 32768 rather than 16384. (6/24) + +sys/gio/ncarutil/sysint/support.f + In subroutines ENCODE and ENCD, the declaration of a dummy array was + changed from character*11 to character*(*). When these subroutines + were called with an argument of fewer than 11 characters, memory was + inadvertently being overwritten. (6/24 SHJ) + +pkg/cl/lists.c + Modified scanlist() to permit comments and blank lines in formatted + lists, e.g., all but simple string or struct type (unformatted) lists. + This permits cursor or filename lists, for example, to have embedded + blank lines or comments without affecting the operation of programs + which read these lists. (6/25) + +unix/hlib/install + 1. Modified to remove any trailing / from the old 'iraf' and 'imdir' + pathnames present in the existing system sources (taken from the + mkiraf.csh file). These strings are used as input to SED pattern + matching, and if the trailing / is included but is not present in + the substitution string, it will be omitted from the output string. + The strategy for trailing slashes in INSTALL is that everything in + INSTALL is done according to UNIX conventions (no trailing slashes), + but if the trailing slashes are present in the files being edited + they are retained. This hides this issue from the user and preserves + the trailing slashes where they are needed in the IRAF system + configuration files. + 2. For the SUN/IRAF version of the INSTALL script, added some code + at the end to check that there are entries for devices 'gterm' and + 'imtool' in the termcap and graphcap files. (6/25) + +pkg/images/tv/display/iisrd.x +pkg/images/tv/display/iiswr.x +pkg/images/tv/cv/iism70/iisrd.x +pkg/images/tv/cv/iism70/iiswr.x + The recent change to the FIO buffer size used in the display code + lead to a problem, as the buffer size chosen did not fit into the + display frame an integral number of times. This was causing a problem + as the last write, at the end of the frame buffer, would overflow + causing garbage to be written to the display. I could have worked + around the problem by simply halving the buffer size to 8192, but the + larger buffer is more efficient and code which runs off the end of the + display is not very robust, so I added clipping to the above routines + instead. (6/27) + +sys/gio/cursor/giotr.x +sys/gio/cursor/gtrctrl.x + Changed the AMOVI calls used in these routines to move the WCS + structure to AMOVS calls. The former code should have been ok since + the array references get turned into byte or word addresses in the + procedure call, but a site reported a portability problem so I + converted all array references and the procedure call to type short. + (6/27) + +sys/tty/ttyputl.x + The formfeed handling code was not breaking lines properly when the + formfeed occurred as the first character in a line and the device had + the 'am' (automargin) capability. An extra newline would be output + followed by the formfeed. When printing a large file containing + several pages of text delimited by formfeeds, this would effectively + add a line of text to each page, potentially causing page overflow + (output of a blank page) on the output device. (6/27) + +---------------------------- +Updated all systems. (6/27) + +dev/termcap +dev/graphcap [VMS/IRAF] + Merged in latest stuff from lyra. (6/27) + +dev/cacheg.dat +dev/cachet.dat + Rebuilt these files to make sure they were up to date. (6/27) + +vms/boot/spp/rpp/ratlibc/readf.c +vms/boot/spp/rpp/ratlibc/writef.c + ---------------------------------------------------------------------- + Deleted all binaries from the VMS directories and did a full bootstrap. + ---------------------------------------------------------------------- + Unfortunately, a new DEC C compiler was installed recently and there + were minor problems. + + 1. In vms/boot/mkpkg, trying to compile XCSUB.C, I got the following + message: + + $ cc/nolist host.c,modlist.c,scanlib.c,xcsub.c + # include fab + %CC-F-LIBLOOKUP, "fab" was not found in any of the specified\ + libraries. + At line number 4 in SYS$COMMON:[SYSLIB]RMS.H;4. + + The problem went away when I compiled the file interactively. + Probably some sort of quota problem, or a bug in the VMS software. + UNRESOLVED. MKPKG came up when I compiled it interactively, so I + will ignore this one for now. + + 2. In vms/boot/spp/rpp/ratlibc, files READF.C, WRITEF.C, got messages + such as (for both fread() and fwrite()): + + $ cc/nolist readf.c + unsigned fread(), count; + %CC-W-CONFLICTDECL, This declaration of "fread" conflicts + with a previous declaration of the same name. + + This was a reasonable warning message; edited the two file to delete + the unnecessary function declarations. + + With these changes I appeared to have a successful bootstrap of all + the latest software. (6/27) + +vms/os/mkpkg.com + ---------------------------------------------------------------------- + Rebuilt the VMS HSI - 'IRAF' system. + ---------------------------------------------------------------------- + To make life even more difficult, I next deleted all the VMS files + in 'IRAF' (USR$2) and moved a copy of the new VMS HSI over from the + 'IRAFX' system. Only the IRAFUSER.COM and MOTD files had to be edited + to install the new copy. + + Next, since LIBOS had been completely rebuilt I attempted to rebuild + the IRAF shared library. This failed with lots of error messages + complaining that _MCSUB was not found. This turned out to be due to + the lack of an entry for MCSUB.C in the MKPKG.COM bootstrap-the-os + file, so I added one and all was well. (6/27) + +--------------- +Standard VMS/IRAF ('IRAF') now up to date. (6/27) + +sys/vops/ahiv.gx + Was computing the minimum rather than the maximum value of the array. + This operator has not been used up until now, obviously. (6/28) + +sys/fmtio/dtoc3.x + This routine would use a 'D' rather than an 'E' for exponential format + when the number being output exceeded single precision. Changed it to + always output an 'E'. (6/29) + +sys/imio/iki/stf/mkpkg +sys/imio/iki/stf/stfordgpb.x - + Deleted this file and its entry in mkpkg, since the routine therein + is no longer used and is not likely to be used ever again. (6/29) + + +sys/imio/iki/stf/stf.h +sys/imio/iki/stf/stfwfits.x +sys/imio/iki/stf/stfreblk.x +sys/imio/iki/stf/stfrdhdr.x +sys/imio/iki/stf/stfordgpb.x +sys/imio/iki/stf/stfopix.x +sys/imio/iki/stf/stfopen.x +sys/imio/iki/stf/stfnewim.x +sys/imio/iki/stf/stfmerge.x + Merged in the new versions of these files, developed by Dave Ball at + STScI. Changes were made to stfmerge.x and stfnewim.x, other than + that the code was kept pretty much as is. + + 1. The principal change was to allow the STF interface to read and + write images in datatypes other than real. In general, the datatype + of the input image is now preserved, whereas before it was being + forced to type real, since the STF image format is used for SDAS, + and the old SDAS software could only be used with type real images. + Since the new SDAS software is being layered upon the VOS this + restriction is no longer needed. + + 2. As far as possible, the order of group parameters is preserved when + making a new copy image. (6/29) + +vms/os/net/kutil.c + A bug in this routine was causing the characters "rA" to be printed on + a new line, after entering the password for a remote node when + establishing a network connection. The values of the variable 'nchars' + was not being set before the final call to ZPUTTY, causing extra + characters to be sent to the terminal. (7/1) + +unix/hlib/install + The INSTALL script how checks for the existence of the executable files + in HLIB (mkiraf.csh, mkmlist.csh, rmbin.e, xc.e, etc.) and verifies + that they have the correct file permissions, in particular, execute + permission for everyone. When restoring files from tape, or copying + files from one computer to another, it is possible to lose the file + permissions. (7/1) + +local/.login + 1. Deleted the 'users', since this command is not available on Ultrix. + 2. Changed the name of the 'page' alias to 'pg', to avoid modifying the + behavior of a standard command, and because the referenced local + command 'less' is not available in standard UNIX. (7/1) + +---------------------------- +All systems updated. (7/1) + +sys/imio/iki/ikiopen.x + When creating a new "clustered" (group) image, this routine has a built + in restriction that the cluster index must be 1, e.g., newim[1/10] to + write to image 1 of a new cluster-image containing 10 images. People + have complained about the restriction to writing to image [1], so I + am looking at the file to see if the restriction can be lifted. + + 1. In the process of looking into this, fixed a typo in a comment. + No functional modifications yet. + + 2. The revision suggested by ST to remove the restriction on writing + image [1], i.e., to delete the "cl_index <= 1" from the two + expressions, does not handle the case where the input and output + image formats are not the same. I think the code can be modified to + remove the restriction, but it is too tricky to do this and test the + software sufficiently for the version 2.5 release, so this change is + postponed to a future release. (7/5) + +dev/termcap + Added entries for `wyse' and `414a'; added `:gd' to go140. (7/6 SRo) + +pkg/bench/bench.hlp +pkg/bench/bench.ms + +pkg/bench/bench_tab.ms + + Installed a heavily revised version of the benchmarks paper, including + comparative benchmarks for nearly all current IRAF host machines. + (7/6) + +unix/gdev/iism75/m75put.x +unix/gdev/iism75/zrdm75.x + These files both contained a "short = short-expr" construct which was + being evaluated at compile time and causing a short integer overflow, + preventing compilation of these files on the SUN (harmless, but + annoying). Replaced by two statements with an intermediate assignment + into an integer temporary to get truncation to a short. (7/6) + +unix/gdev/* [SUN/IRAF only] +os/zxwhen.c +os/net/kutil.c + Did a full diff of the UNIX/IRAF and SUN/IRAF HSI sources to see if + there were any revisions to standard UNIX/IRAF which had not made it + into SUN/IRAF yet. Did find several, although all were harmless. + Fixed these to minimize unnecessary diffs. + 1. Added the iism75 code to gdev. Note that the SUN/IRAF version + of zfiogd.x temporarily includes support for IMTOOL. + 2. Updated the source for the sgi2uimp.c SGI translator, which was + older than the UNIX/IRAF version (prerasterization rev). + 3. In zxwhen.c, fixed a classic C typo, "=" -> "==". + 4. In os/net/kutil.c (which is not active code), changed a C array + reference text[1] -> text[0]. + All other diffs were as they should be. (7/6) + +------------------------------- +Updated all systems (including bug fixes in NOAO). (7/6) +Hopefully, this is the frozen V2.5 release. -- cgit