System Notes File for IRAF Version 2.6. Begun 8 July 1987. ------------------------------------------- doc/notes.v25 + local/notes.v26 + Moved the V2.5 system notes file to the documentation library and started a new one (this file). (7/8) unix/hlib/motd pkg/cl/cl.par Incremented the IRAF version number to 2.6. (7/8) local/bugs.v25 + unix/hlib/buglog.csh + unix/hlib/irafuser.csh unix/hlib/login.cl Set up a system bugs file for V2.5, to be used to record bugs in the frozen V2.5 system as they are discovered. Added a new HSI utility task (UNIX/IRAF only) called 'buglog', used to log new bugs. (7/8) unix/hlib/login.cl Added a new foreign task to the user package called 'nbugs'. This may be used to page the tail of the system bugsfile, to see if any new bugs have been added. The new utility task is only available on UNIX/IRAF and as defined will only work if the nonstandard pager 'less' is installed, as it is on all NOAO systems. (7/9) pkg/bench/bench.hlp Added IMLOAD and IMLOADF measurements to the Sun benchmark entries. (7/10) unix/hlib/buglog.csh Will now send a copy of each bug as it is logged to the iraf mail, as well as appending it to the system bugs file. This ensures that all subscribers to the iraf mail see the bug report promptly. (7/10) doc/vmsiraf.ms + Added a completely new, more comprehensive VMS/IRAF Installation Guide to the docs directory. (7/20) GTERM (Sun/IRAF) Made a number of obscure, mostly minor tuning enhancements to GTERM; these have accumulated over the last couple of months. Most of these are little things that one does not notice if things are working right. 1. Incremented the version number to V1.1 for the first official release of V2.5 SUN/IRAF. 2. Setup/reset now resets the user settable parameters to their command line values, rather than to the builtin defaults. 3. I discovered that due to an oversight, there was no way to set reverse video for the graphics plane on the command line. Added the new switches -[no]rev[erse], e.g., -rev or -norev (the default). 4. One can now add the sequence [task [args]] to the end of the GTERM argument list to directly execute TASK in the window, even if the command follows the -G in the command line. This is different than the already provided [-I command], which executes a shell in the window and passes it the given command. A shell process is eliminated, and exiting the named task causes the window to quit (e.g., if the command is "cl", logging out of the CL terminates the window). A disadvantage (or advantage depending upon how you look at it) is that since there is no csh, there is no job control in the window. 5. The F8 and F9 function keys are now recognized when the mouse is in either the text or graphics window. Hence if one types F8 to get into graphics mode (perhaps by accident), then closes the graphics window, typing F9 in the text window will restore text mode. Previously one had to get the graphics frame back in setup mode in order to type the F9 to restore text mode. Also, typing L7 while in graphics mode (which makes the graphics plane go away) will now automatically restore text mode. Hence if one types F8 by accident while in text mode, typing L7 restores everything, including making the graphics plane go away. 6. Typing F8 to get into graphics mode no longer clears the graphics plane; typing F8 WHILE in graphics mode still clears the graphics plane. Hence, to switch to graphics mode AND clear the screen, one can type F8 twice. Typing F8 once while in text mode merely brings up the graphics plane, providing a handy way to get the graphics plane back without clearing it, without having to call up the setup panel. 7. Fixed a problem with the -Wh (-height) frame arg, used to set the height of the tty window in lines of text. For example, -Wh 40 may be used to start up GTERM with the IRAF standard 40 line window. 8. GTERM now catches the suspend signal (SIGTSTP) and stops itself when this signal is received. Evidently, standard sunview window processes (such as shelltool) do not do this since the window stops responding to mouse and keyboard events, but it is necessary for GTERM to stop itself when so commanded in order to be able to do a (<suspend>,'bg') of a running gterm job in a cshell (e.g., another gterm window running a shell), i.e., to stop the job and put it in the background. Conversely, if SIGTSTP is not caught, typing 'fg' by accident on a background gterm job causes the cshell to hang up, requiring a <ctrl/c> abort to recover (killing whatever the gterm process was running, e.g., a remote login to a computer on the other side of the world). 9. I tested GTERM on a monochrome terminal (3/110 overlay plane). Modified the setup menu so that it says "mono only" when working on a monochrome terminal, instead of indicating that color is an option. Could not get reverse video to work on a monochrome monitor, although it works fine in monochrome mode on a color monitor. Decided to leave it as it is for the moment (black polylines on a white background unless entire screen is inverted). 10. Fixed a minor bug: when specifying frame colors for both the text and graphics frames, the graphics frame colors would clobber the text frame colors before the code would allocate a private colormap segment for the second window. 11. Checked out a report than when printing very long lines, GTERM might be losing characters during the wraparound. The problem was not duplicated and all characters were printed with autowrap as expected, both in the left column on a cleared screen, and on the half-screen column after a vertical screen wraparound. 12. Added a new command line option -T, and a set of related options in the setup panel. The options specify how the terminals responds to graphics commands and data. If -T is specified the graphics plane is disabled, and graphics characters are printed in the text frame as on a non-graphics terminal. Another option allows graphics data to be discarded entirely. These options should be useful when debugging graphics programs, or when working over a noisy line. 13. All gterm specific command line arguments and switch values now permit minimum match abbreviations. 14. Added a new command line argument "-ginterm [ch [ch]]", where the [ch] are the octal values of the GIN mode terminators. Also added support for setting the GIN mode terminators to the setup panel. This is not required for IRAF, but for running foreign graphics programs which require no GIN terminator, or a different value. 15. Reworked the setup panel code somewhat so that selecting one item in the panel causes actions to be performed which affect only that one item. Formerly, the setup event procedure would fetch the value of each setup item and perform some action if the value had changed. This could result in unnecessary actions in some cases. 16. Fixed another suspend-process bug. When running a command like CL or SH which does not do job control in the gterm window without benefit of an intermediate shell, typing the suspend character would cause the process (and terminal) to hang, requiring a kill to recover. Added a new command line option "-ignore" to allow filtering out of the suspend control characters, and also a new frame menu option "continue" which when selected, sends SIGCONT to the process group currently associated with the terminal. This will restart a process which is accidentally stopped by typing the suspend control character. Note that SHELLTOOL also has this problem. (7/23+) local/mail.mai - local/mbox.txt - local/tasks/daophot/image.dst - Deleted these files in VMS/IRAF. (7/27) unix/hlib/stripper unix/hlib/stripall [UNIX,VMS,SUN] vms/hlib/stripper vms/hlib/stripall Revised the stripper scripts for V2.5 IRAF. This reduced the size of the stripped V2.5 VMS/IRAF system from 18.7 to 14.9 Mb (with shared libraries). The main changes were deletion of all files in the following directories: local/noao vms/hlib/share In addition, a dozen or so modest size files, mostly .hlp files used to generate printed manuals, were added to the list of special files to be deleted in the stripper scripts. (7/27) unix/hlib/install local/sun/Makefile [SUN/IRAF] local/suntools -> local/suntools.e Changed the name of the main 'suntools' executable in the IRAF system login directory to 'suntools.e'. This is necessary to prevent execution of this local master copy of the suntools executable, when entering the command 'suntools' when logged in as 'iraf'. This is wasteful of memory, as iraf/local/suntools is run for the root window, but /usr/bin/suntools is used for most everthing else. (7/30) pkg/cl/param.c Fixed a serious bug in the code which searches for parameters where no containing task has been specified, i.e., "param" rather than "task.param", requiring a search of all pfiles in the search path. There were two problems with the old code (lookup_param in param.c): [1] If "param" was an ambiguous abbreviation for two or more of the parameters in one of the pfiles in the search path, the search was being terminated and an illegal value was being returned to the calling routine (paramsrch), causing the error message ERROR: task `' has no param file to be printed, aborting the task. The actual error would be an ambiguous parameter name abbreviation, but even this is incorrect since an exact match might be found in a pfile further on in the search path. This would commonly happen when referencing the CL parameters i,j,k,x,y,z, etc., in complex scripts, since it is easy in a complex script to have two or more parameters whose names begin with one of these characters. [2] If "param" was an unambiguous abbreviation for one of the parameters in a pfile in the search path, that parameter would be referenced, even though the actual parameter name given was the exact name of a parameter in a pfile further on in the search path. In other words, the search routine would stop as soon as it found a parameter for which the given name was an abbreviation. Clearly, if searching for one of the CL global params i,j,k,x,y,z, etc., it is easy for this to occur, causing the script to fail. The bug has been fixed, but the workaround is simply to not use the global CL parameters in scripts. This has always been considered poor practice due to possible coupling problems between nested scripts that access the same global parameters. It is also more efficient to define the parameters as local variables, as the search path is shorter. (7/31) IMTOOL (SUN/IRAF) 1. The hardware color table is now updated twice a second on a timer loop, allowing the displayed image to be viewed normally even while the mouse is not in the display window. 2. Added a rate option to continuous random pseudocolor. Also, this maptype option will now work when the mouse is not in the display window, due to revision 1 above. 3. Added a command line option -maptype for setting pseudocolor options etc. on the command line. (8/4) local/sun/gterm.man + local/sun/imtool.man + local/sun/* I cleaned up these directories, deleting the old ./save directory, adding a README with installation instructions, adding a Makefile, and so on. Also, manual pages were added for both GTERM and IMTOOL. (8/4) unix/gdev/sgidev/sgi2uapl.c 1. Added code to add the tiny timestamp/logo to the corner of each output plot, so that the machine of origin, owner, and time are recorded automatically on each plot when generated. A -t switch was added to disable printing of the logo (the default is to print it). 2. I also optimized the generated Postscript so as to speed up plotting. This turned out to be tricky, as the Postscript interpreter is not all that fast, hence even with the serial interface the laserwriter can easily be cpu bound. For a test vector plot with labelled axes, plot title, and 3 512 point vectors overplotted, the following results were obtained. data size, bytes clock time ---------------- ---------- original code 90578 1:45 4 byte encoding 25877 1:43 7 byte encoding 37956 1:12 The original code was clearly generating a lot more data than it needed to to describe the plot (17 bytes per vector point), which was the motivation for this optimization. At 9600 baud, it should take 1:15 seconds to transmit 90Kb, suggesting that the plotting might be i/o bound. Hence in my first attempt at optimization I used a sophisticated encoding scheme which used only 4+ bytes to encode each vector point to be plotted. This resulted in a very compact representation of the plot, but the running time worked out about the same, indicating that the processing was cpu bound due to the overhead of the Postscript interpreter, and the relatively low speed of the 68000 chip used in the current laserwriter. In my second attempt I streamlined the Postscript code, increasing the encoding to 7 bytes per vector point, with some loss of data compression, but a significant improvement in processing time. The conclusion is that Postscript, due to its very general and flexible interpreter can sometimes be slower than one would like, and there is little that can be done about it. In many cases adding the more expensive parallel interface would not help; the bandwidth of the serial interface is rarely a problem, except perhaps for 1 to 1 bitmap transfers. As faster chips are used in the laserwriters there may come a point where the 4 byte encoding is the fastest. If the Postscript output is to be used to save plots on disk or transmit them via modem to remote computers, the 4 byte encoding may again be preferable. The ideal solution would be if Postscript were to provide direct support for a polyline primitive, rather than relying on the Postscript interpreter to draw polylines. By default, the 7 byte encoding is used since it is faster. The new switch "-4" was added to enable the optional 4 byte encoding (the translator supports both). (8/9) pkg/images/tv/display/t_display.x A new routine ds_setwcs() was added which writes a WCS descriptor file to the directory 'wcsdir' (uparm if not defined) when an image or image section is displayed. The WCS file contains two lines: the first line is some text describing the image (image name and title string), and the second line is a rotation matrix to be applied to screen coordinate to get image coordinates. The rotation matrix undoes the affects of the image section or display mapping transformations. The filename is "wcsdir$<device>_<frame>.wcs", e.g., "uparm$imtool_1.wcs". (8/12) doc/unixiraf.ms + Installed the all new UNIX/IRAF Installation Guide in doc. (8/24) vms/os/zfioty.c Modified the VMS terminal driver to recognize the special device name "dev$tty", passed by the VOS to indicate the user terminal. Checked out the operation of the TTOPEN routine (used to do i/o directly to the terminal). (8/25) unix/boot/mkpkg/host.c The u_fmove function ($move) will now physically copy the file if necessary to move it to a directory on a different device. (8/27) local/tasks/mkpkg local/tasks/peritek - Deleted the @ccdred reference and peritek references from this mkpkg file on Sun/IRAF. (8/27) dev/termcap Added an entry for the unixpc. (8/27) unix/hlib/install Extracted the file lists and moved them to the head of the file as SET statements so that they may more easily be modified for different machines. Added some more files to these lists for the Sun/IRAF version of install. (8/28) unix/hlib/stripper unix/hlib/stripall Modified Sun/IRAF versions to delete the archived object files for each floating point option during a strip operation. (8/28) mkpkg unix/hlib/mkfloat.csh unix/hlib/cl.csh unix/hlib/irafuser.csh unix/hlib/login.cl Added support to Sun/IRAF for multiple binary versions of the system, e.g., to support multiple floating point options with a single copy of the system. There are two reasons for doing this. [1] When multiple nodes must access the same copy of IRAF, the different nodes will often have different floating point hardware. [2] It would be nice to not require user sites to recompile the full system because they have different floating point hardware then we do on our development system. This could have been done (could still be done by user sites if desired) by recompiling the system with -fswitch, but this would result in a significant loss of efficiency in some programs. Our solution instead is to have multiple copies of the runtime system executables. This is transparent to the user, with the best choice being made depending on the floating point hardware available on the machine on which IRAF is being run. Implementation is as follows: iraf$bin.f68881 Binaries for -f68881 option. iraf$bin.ffpa Binaries for -ffpa option. iraf$bin link to either of the above. cl link to hlib$cl.csh, defines IRAFBIN login.cl resets 'bin' to value of IRAFBIN There are two bin directories, BIN.F68881 and BIN.FFPA, compiled -f68881 and -ffpa respectively (the HSI executables are separate and are compiled -fsoft). The old BIN directory is now a symbolic link to one of these two directories. On our systems, bin.f68881 and bin.ffpa are also symbolic links to directories on a separate device, in order to provide more flexibility in allocating such a large amount of storage. The command 'cl' is now a link to the script hlib$cl.csh, rather than a link to bin$cl.e. The script defines an environment variable IRAFBIN giving the path to the bin directory to be used, and then runs the cl.e in that directory. The fpa bin will be used if it exists and if the file /dev/fpa exits, indicating that the local node has an fpa. The revised LOGIN.CL file fetches the value of IRAFBIN defined in cl.csh, and uses it to 'reset' the value of the IRAF logical directory BIN. While it is easy to switch bin directories, it is much harder to maintain two separate copies of all the objects and package libraries. The system has been set up so that it can easily be configured with either f68881 or ffpa objects, but not both at the same time. This is done as follows: cd $iraf mkpkg ffpa (configure for -ffpa objects) mkpkg f68881 (configure for -f68881 objects) mkpkg showfloat (show current float option) MKPKG is used to configure the entire system for either float option. Once this is done, that version of the binaries are updated by the mkpkg. The system is normally configured for f68881 so that software development may take place on any node. Periodically the ffpa objects and executables are updated by the following commands: cd $iraf mkpkg ffpa (configure for -ffpa) mkpkg (update libraries and relink) mkpkg f68881 (restore to -f6881) This updates the ffpa version of the system, and restores the system to f68881 when done. When not in use, all the system and package objects and libraries are stored in the file OBJS.arc in one of the bin.f* directories. IMPORTANT NOTE -- Since bin, bin.f68881, and bin.ffpa are all symbolic links, a tar archive of $iraf no longer includes any executables. The real bin directories (/tmp2/bin.f68881 and /tmp2/bin.ffpa on our system) must be explicitly referenced on the tar command line to be included in the archive. A tar of $iraf is now only about 35 Mb, and the bin directories are about 24 Mb. When configuring the system for a particular site, the bin directories may be located wherever there is space, and either directory may be deleted if it will not be used. Of course it is always possible to delete both and compile the system for -fswitch, etc., if desired. I am considering adding a gprof version of OBJS.arc for profiling purposes, now that we have an easy mechanism for maintaining multiple versions of the system binaries. (8/28) unix/hlib/install Modifed the Sun/IRAF part of the install script to install or update the GTERM and IMTOOL manual pages. (8/30) unix/hlib/zzsetenv.def Added an entry "set stdimcur = text", so that image cursor reads will come to the terminal by default, rather than trying to spawn the stdimage kernel and dieing on a process not found error. (8/31) unix/boot/mkpkg/host.c Thanks to the recent change to a remote bin directory on Sun/IRAF, which causes $move to call u_fcopy, we have found a bug in u_fcopy. The variable "totchars", used to check if the file changes size during the copy, was not being initialized before each copy. (9/1) ---------------------------- Sun/IRAF V2.5 frozen and archived on tape. (9/3) vms/boot/mkpkg/host.c I had to add the /NOCONTIGUOUS qualifier to the COPY command, as COPY would issue a warning message and return an error (warning) status code, when trying to copy an input file which was contiguous and the output file could not be created contiguous. This was happening even though there was no /CONTIGUOUS qualifer on the command line. (9/4) local/sun/gterm.c local/sun/gtermio.c Added a new, experimental feature to GTERM. Selecting "logging on" in the frame menu causes all output from that point on to be logged in a file. Selecting "logging off" disables logging. The log file filename may be set in the setup panel if desired. Any utility such as 'cat' may be used to replay the logfile. "Page mode" may be set in the text window to page the played back output. This feature is useful to spool terminal output for later review, e.g., during a terminal session on a remote or non-UNIX node where i/o redirection is difficult, or to provide a means of spooling the output of interactive programs which do not provide such a facility as a builtin (e.g. a file pager). (9/8) doc/pkg.hlp Deleted some ^N, ^O control codes which were embedded in the text, causing the file to appear to be a binary file. (9/9) sys/clio/clgcur.x CLGCUR will now accept either X-Y-WCS-KEY-SVAL or KEY-SVAL as valid input cursor value strings. In the latter case, X-Y-WCS will be returned as INDEF INDEF 0. It is assumed that if the latter case is used, the coordinate information is to be ignored, e.g., because the function selected by the key does not use the coordinate information. This is convenient when entering interactive commands in cursor mode, e.g., with stdimcur set to "text", (or possibly in cursor lists when the coordinate information would be meaningless for a given key). Note that omission of X-Y-WCS is possible only when the given key is nonnumeric. (9/10) doc/aosvsiraf.hlp Installed a new version of the AOSVS/IRAF Installation Guide. (9/11) sys/gio/stdgraph.com sys/gio/stgres.x sys/gio/mkpkg sys/gio/stgpl.x sys/gio/stgpm.x sys/gio/stgencode.x sys/gio/stdgraph.h sys/gio/stginit.x Someone (Dyer) discovered that the graphics system was noticeably slower than specialized test code when used to plot very long vectors, e.g., 4096 points. Normally the software is faster than the hardware, but for these very long vectors clipping of unresolved points becomes a significant factor, as does all the processing needed to generate all those points. Investigation showed that virtually all of the time was being spent in three routines: gadraw, the main point drawing routine in GIO, and stg_polyline and stg_encode, the principle polyline drawing routines in the stdgraph kernel. The gadraw routine uses the most time, but examination of the code showed that it was already fully optimized, with caching of the WCS, use of integer rather than floating point where possible, and provision of code to optimize the common special cases, e.g., linear WCS, successive points all inbounds with no clipping, and so on. I don't seem much possiblity for improvement here, it just takes a little while to plot all those thousands of points (i.e., 0.68 seconds for all the GIO operations for 4096 points on my 16.7 MHz diskless Sun node with f68881 fpa). There was room for improvement in the polyline drawing code in the stdgraph kernel, however, since most of the time was being spent in a single routine. I [1] added code to the inner loop to handle the special case of Tek-4012 encoding inline, rather than calling the encoder, [2] substituted lookup tables for the tek encoding, rather than computing the 4 bytes each time with divides, mods, adds, etc., [3] substituted integer for floating point in the unresolved point clipping code, and [4] replaced the FOR loop by a DO loop. With these changes, I was able to reduce the running time for drawing 100 4096 point polylines in the stdgraph kernel from 37.9 sec to 18.0 sec on the 16.7 MHz f68881 Sun. The most significant change occurred with optimization [3], since for these long vectors clipping is the major operation, and the f68881 floating point is quite slow compared to 68020 integer operations. In repeating the same tests on the 11/750, my 4096 point test plot took 11 seconds to draw both before and after installing the optimized stdgraph kernel. It appeared that the GIO time was about 2.2 sec per plot, and the stdgraph time about 0.7 sec, indicating that the operation was very much limited by the drawing speed of the terminal. By decreasing the software resolution of the plot in cursor mode, I was easily able to decrease the drawing time to 4 seconds, with only slight degradation of the plot. Hence, it appears that the most significant factor affecting plotting time is actually the point elimination algorithm, which is probably more conservative in the stdgraph kernel than in the specialized test code mentioned above. I conclude that, although a significant inefficiency in the polyline drawing code was discovered and fixed, the graphics system has been i/o limited all along (on conventional graphics terminals), and that the differences in plotting speeds observed earlier were due to differences in the point elimination algorithms, causing one program to plot at a slightly different resolution than the other. (9/12) [Addendum 9/14: In repeating the plotting speed tests mentioned [earlier, we discovered that the real difference was that Dyer's [program was *subsampling* the data by 4, and hence only plotting 1024 [points, whereas all my tests were plotting the full 4096 points. [Repeating the IRAF test with an [*:4] image section eliminated the [problem - and I suspect the IRAF code, despite its generality, is now [more efficient than Dyer's specialized test code.] sys/gio/gactivate.x sys/gio/greactivate.x sys/gio/gdeactivate.x sys/gio/gki/gkigca.x sys/gio/gki/gkifetch.x sys/gio/gki/gkigetwcs.x Added some errchk declarations. (9/14) dev/graphcap lib/syserr.h lib/syserrmsg sys/gio/gopen.x sys/gio/cursor/gtropenws.x 1. In the graphcap file, for device 'iis', deleted the kf and tn capabilities (kf=bin$x_stdimage.e etc.) since there is no GIO kernel yet for this device, and it is therefore incorrect to indicate that there is such a kernel in the graphcap (this causes misleading error messages). 2. Added a new system error message SYS_GNOKF, and modified gopen.x and cursor/gtropenws.x (GIO) to check that a device has a GIO kernel before trying to connect it, printing an informative error message and taking an error exit if no kernel is found. NOTE: All graphics devices accessed via GIO must now have the 'kf' capability in their graphcap entry, specifiying the GIO kernel to be used. Previously, the value of kf would default to 'cl' if no kernel were found, but this has been changed to an error condition. As far as I know, all graphcap entries to date have explicitly specified the kf so this should not cause any problems. (9/15) pkg/cl/exec.c pkg/cl/pfiles.c Fixed a PSET related bug that would occasionally cause segmentation violations in the CL when "executing" a pset task. The segmentation violation was occurring due to an indirect reference (by pfileload() in pfiles.c) to the param file pointer in the task structure, occurring in the code in callnewtask() in exec.c which was in the process of setting that very parameter. (9/20) pkg/cl/binop.c pkg/cl/opcodes.c pkg/cl/unop.c sys/etc/envreset.x doc/ports/notes.sun4 + unix/mc68000/zsvjmp.SPARC + Merged in some changes from the port of IRAF to the Sun-4, the new RISC architecture (sparc) machine. 1. The changes to the three CL files were to avoid use of the VALU macro to fetch the value of an operand, when evaluating boolean operands. The datatype of VALU, due to the union in the operand struct, is double, and evaluation of boolean expressions in double on the sparc cpu was not working (and obviously should be avoided). 2. In envreset.x, the maxch argument to a strcpy was being passed as a short rather than an int, and this was causing a bus error on the sun-4. 3. Saved copies of the notes file from the port, and the zsvjmp.s (10/1) sys/gio/gopen.x The recent addition of code to check for the kf parameter interfered with the gopen action for the special device 'stdvdm'; fixed this. (10/1) sys/gio/doc/gio.hlp sys/gio/stdgraph/stgrcur.x Added a new graphcap device parameter RE. This goes with RC, and if defined for a device, is sent to the terminal after the cursor value has been successfully read. This is necessary on terminals which ignore characters coming back from the computer (e.g., due to echo not being turned off in the terminal driver) while transmitting the cursor position characters during a cursor read. (10/1) sys/clio/clgcur.x The clgcur revision of 10 Sept (about 3 week back) introduced a bug which would cause cursor reads returning negative x values to fail. This has been fixed on lyra and tucana. Our policy of not exporting code from our test systems should have prevented this bug from being propagated to any external sites, or even to our production systems in Tucson. (10/2) local/sun/Makefile local/sun/gtermio.c 1. Discovered and fixed a serious bug in GTERM which would cause the terminal to lock up when trying to do graphics over a modem connection to an external computer (evidently this was the first time this has been tried). In this mode of operation, characters are delivered one at a time; receipt of the GS character alone would cause the input code to get into an infinite loop, exiting immediately each time called, posting a callback to the notifier, which would evidently call the input procedure back BEFORE reading pending input on the pty. 2. Modified the makefile to strip the suntools.e executable in the "make install" rather than when it is made, to make it easier to get at an unstripped version for debugging. (10/3) doc/cluser.tex doc/vmsiraf.ms Corrected the spelling of Fred Romelfanger's name. (10/7) sys/gio/gopen.x Corrected another problem having to do with raw metacode output. This was diagnosed as a stdvdm problem, but wasn't really. A program was opening device "stdvdm", but directing output to a binary file opened by the application, and it was bombing because in this case GIO is not writing to the stdvdm file, but to the user file. The change was to disable checking for the existence of a graphics kernel whenever output is directed to a stream other than STDGRAPH, STDIMAGE, or STDPLOT. If the user is controlling where the metacode goes, it is inappropriate to make such a check, as probably no kernel is being used. (10/22) --------------------------------------- Orion (Sun-4) updated (port actually) from lyra on 24 Oct. This was with the BETA1 release of SunOS for the RISC Sun-4, hence will have to be redone when we get the correct, current operating system software in. Tucana updated from lyra on 26 Oct (both f68881 and ffpa). unix/boot/wtar/wtar.c I wanted to use the -o (omit binary) feature to make a source only update tape given a long list of individual files and directories. This failed due to the restrictions in the unix/iraf HSI on changing directories. I hacked away on WTAR until it could handle this properly, and had to generalize the library routines listed below as well. (10/27) unix/boot/bootlib/oschdir.c The case which folds a subdirectory into the pathname of the current directory was being called incorrectly when passed a directory name of the form "path/subdir". (10/27) unix/boot/bootlib/osfpathname.c The special code in this routine for vfns "." and ".." was checking only for such a prefix, and incorrectly matching filenames such as "./path". (10/27) ----------------------------------- IRAFX (draco) updated from lyra on 27 Oct. sys/gio/gclose.x Added a call to gki_redir(fd,0,0,0) to cancel any redirection of a graphics stream to an inline kernel or subkernel, when the stream is closed. This has never been a problem, but could be required in some circumstances. (11/2) sys/gio/gki/gkiredir.x May now be called with fd < 0 to obtain the redirection information for a stream without changing anything. (11/2) sys/gio/gopen.x Checking for a kernel file in graphcap is now disabled if a graphics stream is opened on an inline kernel or subkernel, in which case no external kernel could possibly be needed. (11/2) pkg/images/tv/cv/load1.x The CVL task was issuing the following sequence of calls: gki_inline_kernel gopen, gclose gopen, gclose Since gclose now resets the default GKI stream type, a second call to gki_inline kernel is necessary before the second call go gopen, to setup GKI for an inline kernel. (11/3) sys/gio/gvmark.x Bug fix: replaced the single "marksize" argument by the "xsize, ysize" specified in the documentation, etc. (11/6) sys/fio/nowhite.x sys/fio/open.x sys/fio/vfntrans.x The NOWHITE procedure, used to eliminate whitespace and newlines from a string operand, was using maxch on the output string as a terminator and ignoring EOS on the input string (most likely harmless, but inefficient). In the process of fixing this it appeared that it would be useful to return the length of the output string as the function value, and the procedure was only used in the two files listed above, so the procedure was converted into a function. (11/6) sys/gio/stdgraph/stgpm.x The STDGRAPH kernel polymarker code would draw the polymarker and then go into an infinite loop, due to a bug in the loop termination test introduced when the optimized polyline drawing code was transferred to the polymarker drawing routine some time back. (11/7) sys/imio/imaccess.x If an image section is specified, imaccess calls immap to see if the image specification is legal as well as test if the image exists, in order to avoid having to deal with the complexity of parsing image sections etc. The problem was that the 'mode' argument to imaccess was being passed to 'immap' directly, and thence on to the file open. Hence, the image header file was being opened with access mode 0, causing an error exit to be taken in FIO (see below). Changed imaccess to open the image with mode READ_ONLY if the access mode specified to the imaccess is 0, otherwise the user specified access mode is used. (11/13) sys/fio/fgetfd.x In the process of fixing the above bug, I found and fixed a serious bug in FIO, which has been there since the code as written! If a file were opened with an illegal mode or type, the FGETFD routine would take an error exit sure enough, but it was not dealling the file descriptor and marking the file slot unused, hence was leaving the file descriptor allocated and half filled in. This would go undetected until the task terminated, normally or otherwise, at which time the file cleanup routine would find the "open" file and try to close it, causing a segmentation violation due to the partially filled in file descriptor. Note that this error would only be seen when attempting to open a file with an illegal mode or type (a bug in the calling program), hence it has probably rarely been seen. (11/13) unix/os/zfiomt.c I had to make a couple of subtle mods to the MTIO driver to workaround peculiarities in the SunOS mtio driver on the Sun-4 (GAMMA release of SunOS). Note that none of these bugs is present on the Sun-3 or any other UNIX system thus far tested. 1. On the Sun-4, it turns out that an MTBSR ioctl (back skip record), if used to backskip over a tape mark, returns ERR, as does MTFSR, with errno=EIO. To workaround this it was necessary to ignore ERR if errno=EIO following a forward or backward skip record. The driver is not technically at fault here, since the BSD mtio documentation does not specify what the driver should do in this case, but all other unix drivers thus far tested permit BSR to backspace over a tape mark. 2. This one was more subtle, so subtle in fact that I cannot be certain I have diagnosed it properly, although everything fits my theory well. For forward record skips, the IRAF magtape driver uses a read into a large dummy record buffer for which space is automatically allocated on the machine stack at function entry, e.g.: (a read rather than FSR is used here to reliably detect tape marks) char buf[29184]; int nb; nb = read (fd, buf, 29184); What would happen is that in the first call to this code following process startup, the read would fail, returning errno=14 (EFAULT, bad address causing fault during execution of system call). What I suspect is happening is that the page fault required to allocate space on the process hardware stack for BUF is occuring during execution of the dma read in the SunOS mtio device driver. Once the stack grows large enough to provide space for BUF, the error goes away. Adding a "buf[0] = 0" statement before the read fixes the problem by causing the stack page fault to occur in the user process before entering the kernel device driver. (3/12) sys/mtio/mtio.h sys/mtio/mtpos.x sys/mtio/mtlocknam.x sys/mtio/mtfile.x sys/mtio/mtparse.x sys/mtio/mtosdev.x sys/etc/xalloc.x sys/etc/xgdevlist.x sys/ki/kzrdmt.x sys/ki/kzwrmt.x sys/ki/kzwtmt.x sys/ki/irafks.x sys/ki/kiextnode.x Revised these files to finish adding support to the VOS for network access to remote magtape devices. Remote devices are accessed merely by prefixing the device name with the node name, e.g., "orion!mta" to access the A tape drive on node "orion". For example, to list the headers on a FITS tape on a remote drive, cl> alloc o!mta cl> rfits o!mta 1-99 make- The dev$devices file on the remote node is used to obtain the device information, hence no network information is required in the device files, and device names need not be unique in a network sense. Performance, as measured by the clock time, ranges from 30-90% of what is achieved using the tape drive on the local node. These revisions also included a couple of bug fixes, e.g., the KI magtape access bug logged sometime back, and a newly discovered missing argument bug in some error recovery code in the device allocation code in etc. (12/5) pkg/dataio/mkpkg pkg/dataio/cardimage/conversion.x pkg/dataio/cardimage/t_rcardimage.x pkg/dataio/cardimage/t_wcardimage.x pkg/dataio/cardimage/tabs.x pkg/dataio/fits/fits_write.x pkg/dataio/fits/t_rfits.x pkg/dataio/fits/t_wfits.x pkg/dataio/imtext/rt_rwpix.x pkg/dataio/mtexamine/t_mtexamine.x pkg/dataio/reblock/reblock_file.x pkg/dataio/reblock/t_reblock.x pkg/dataio/t2d/t_t2d.x 1. Modified all programs in DATAIO to use the MTFILE operator to test if a file is a magtape file. Formerly, these routines were using an explicit strncmp of the "mt" prefix, which is poor information hiding and does not work with network access. 2. The cardimage and reblock programs were writing verbose output to STDOUT but flushing STDERR. (12/5) ---------------------------------------------------- Updated tucana and orion from lyra. (12/5) local/sun/imtool.c local/sun/imtool.man Modified the way the coordinate file name is entered via the setup panel, to make this feature easier to use. The string displayed and entered via the setup panel is now a printf style format specification rather than the actual file name, with the default being "frame.%d" (the %d, if given is replaced by the frame number). There is now visible feedback when the user types return to enter the new string, i.e., the window frame label is updated. (12/6) sys/ki/kilnode.x sys/ki/kifndnode.x [LOGICAL NODE NAMES] sys/ki/kinode.com sys/ki/kignode.x Modified the KI to add support for logical node names that can be defined in the environment. These may be used interchangeably with the node name aliases defined in the dev$hosts; the main advantage is that since the environment is used, the values may be changed on a per user basis. Logical node names (similar to plot! etc.) may be defined in the standard system, with the local node being assumed if the given logical node name is not currently defined. (12/6) unix/gdev/zfiogd.x pkg/images/tv/display/iisopn.x Added support for IMTOOL to the master system on lyra. (12/6) sys/imio/imdmap.x Noticed and fixed a harmless bug in this file. The graphcap descriptor for the image display was being opened but never closed. (12/6) dev/graphcap Added a "node!" prefix to the DD string for device 'imtool'. The logical node name "node" is supposed to refer to the primary node the user is logged in on. With this and the other changes noted above, it is possible to use IMTOOL over a network connection (there may be a byte swapping problem yet on the VAXes). (12/6) --------------------------------------- Updated orion and tucana from lyra, including propagating a bug fix in apextract. (12/7) local/sun/imtool.c Modified to automatically sense whether the input data is byte swapped, to allow generation of the display data stream on remote, possibly architecturally incompatible nodes on the network (e.g., VAXes). Also added code to verify the checksum of each IIS header and print an error message on the console if a bad checksum is seen. Non-byte packed data is now recognized and the difference in the size of the data block allowed for (avoiding a possible data stream synchronization problem), but currently only every other pixel will be displayed if the data is not byte packed. (12/9) dev/hosts Added entries for all the new Sun nodes, and updated the file on most or all unix nodes in the local network (it is getting hard to be sure if one has gotten them all). (12/9) sys/ki.h sys/kigchan.x sys/kighost.x sys/kifchan.x sys/kishownet.x Adding the new nodes to the hosts table caused the internal KI node table to overflow, revealing two bugs in the KI (sufficient to prevent IRAF from running at all!). 1. In kighost.x, the test for a full table was not being performed correctly, allowing an overflow by one error. 2. In ki[gf]chan.x, the value of 'server' was being used to index the node tables when allocating a KI channel descriptor for a resource. Unfortunately, when a resource is local 'server' is set to NULL. This was causing an array to be indexed [0], overwriting the final element of the node table (harmless until the table is full). I fixed these bugs and tested for overflow on an overfull host table, then increased the maximum number of nodes from 20 to 64 (I hate to reserve the table space, but the KI is a major interface). If there are too many hosts the system will simply ignore the extra entries once the internal node table is full. No error message is given, but if the system.netstatus task is run, the warning message HOST NAME TABLE IS FULL will be seen. At some point we need to modify the code to permit a runtime access to the host table (perhaps using the current node table only as a cache), in order to support an arbitrary number of nodes as is necessary in large networks. (12/10) pkg/system/mkpkg pkg/softools/mkpkg noao/mtlocal/mkpkg Modified these mkpkg files to generate an xx_*.e executable, and rename it to x_*.e when installing it in BIN. (12/10) --------------------------------------------- Updated irafx on draco (VMS). (12/11) dev/hosts In the kernel server pathnames for the Sun-3 nodes, changed the "bin" to "bin.f68881" so that a runnable server will be selected regardless of the floating point configuration of the system. (12/12) local/sun/imtool.c vms/gdev/zfiogd.x unix/gdev/zfiogd.x dev/graphcap pkg/images/tv/display/t_display.x pkg/images/tv/display/mkpkg pkg/images/tv/display/findz.x pkg/images/tv/display/iis.com pkg/images/tv/display/iis.h pkg/images/tv/display/iisers.x pkg/images/tv/display/iisopn.x pkg/images/tv/display/iispio.x pkg/images/tv/display/iisrcr.x pkg/images/tv/display/iisrd.x pkg/images/tv/display/iisstt.x pkg/images/tv/display/iiswcr.x pkg/images/tv/display/iiswr.x pkg/images/tv/display/maxmin.x Modified IMTOOL to add support for an 800 square display format option. 1. Added logical devices 'imt512' and 'imt800' to the graphcap and to gdev/zfiogd.x. 2. Modified the DISPLAY program to eliminate all occurrences of 512 or 511 as a constant, dimensioning everthing instead from the graphcap entry for the device (all changes should be backwards compatible for a standard IIS). 3. Modified IMTOOL to add the 800 square option. This may be set in the setup panel, but more commonly it will be set automatically when the user writes to the device imt512 (imtool) or imt800. (12/12) ------------------------------------------ Updated all systems. (12/12) unix/os/zfioks.c There was a bug in the UNIX/IRAF zfioks (kernel server) driver which would cause it to needlessly open a host file descriptor every time it was called to attempt to open a connection to a remote node. This bug has gone undetected until now because once a connection to a remote node has been opened, it tends to remain open for the lifetime of the client process, and a process is not likely to connect to very many nodes. The bug was found on our diskless sun nodes, due to a circumstance which was causing the connect to fail, resulting in a connection attempt (and additional wasted file descriptor) every time a remote file was accessed. This rapidly used up the available file descriptors. What was happening was that a large number of images were read from tape to disk on the server node (tucana). The user then logged in on a diskless node and attempted to access the images. The user did not have a .irafhosts file, hence dev$hostlogin was used, but this old file did not contain any login information for the node in question, hence the connection would always fail. If a resouce cannot be accessed over the network the KI currently tries to access it on the local node (probably not a good idea). In this case this would work, since the images were created on a disk which was shared by the two nodes via NFS. This problem occurs because of the pixel file pathname in the image header. This pathname includes the name of the node on which the pixel file resides, i.e., it is the network pathname of the file, as is needed in the general case if the file is to be accessed from any node. In the case described here the pixel file could be accessed via either IRAF networking or NFS; in the general case only IRAF networking would work. The recommended solution is to either use a .irafhosts file and IRAF networking, or use the imdir=HDR$pix/ option to eliminate the network pathname. (12/19) dev/irafhosts The original contents of this file contained a list of NOAO network nodes with login information for the now defunct login 'ace' on each node. This has been changed to the system and user independent form * : <user> ? meaning for an attempted connection to any node (*), try to login with the user name as used on the local host system (<user>), prompting for the password. I also added comments to the file describing the syntax and usage of the file. (12/19) NOTE -- Since this file is now system independent and will result in a reasonable action for any user on any node, it is no longer necessary for each user to have a .irafhosts file unless they with to specify the password or they wish to use a different login on remote nodes than is used on the local node. unix/os/zfioks.c unix/os/net/zfioks.c vms/os/net/zfioks.c Modified to add support for the "<user>" syntax. This symbol, appearing in the username field of a .irafhosts or dev$hostlogin node entry, is replaced by the current login name of the user on the client node. (12/19) vms/hlib/gripes.cl vms/hlib/gripesfile /u2/sites/sitelog.c [noao only] 1. The site mail logging facility (used internally to the IRAF project) was not logging mail from VMS addressed as To: "IRAF" ... The program was modified to ignore the quotes. 2. Modified the GRIPES facility for VMS to use the "Subject:' text entered by the user as the subject for the VMS mail as well as in the gripe header. Commented out the code which would append the gripe to hlib$gripesfile, since it can be assumed that this file will not be writable on many VMS nodes, and the code is being disposed of via mail anyhow. (12/19) sys/imio/iki/oif/oifrename.x The imio.imrename primitive was not working properly for an OIF type image, when moving the image to a different directory. The header file would be moved but the name of the old pixel file was being generated improperly, causing it to fail to be moved. This would affect not only the IMRENAME task, but any in place image operation where the output image was created in a temporary image in the current directory, then renamed to replace the old image. (12/19) sys/imfort/imps3r.x This routine would appear to function correctly, but when used to output a 3 dimensional section, would replicate the first line of the input section to fill the first output band, then fill the second output band with the second line of the first input band, and so on (the pointer into the input section was being incremented in the outer, rather than inner, loop!). All other IMFORT 3-dim i/o routines were checked as well, but the bug was present only in the one routine. (12/20) pkg/images/tv/display/t_display.x Modified the code which output the WCS file to: 1. Take account of reduced dimension sections such as [5,*,*], defining the WCS relative to the two dimensional section specified in such a case. 2. Fixed a bug (oversight) which would cause the WCS matrix being output to be incorrect if the image were loaded anywhere but at xcen=ycen=0.5. 3. Output greyscale transformation information in addition to the spatial information already output. (12/20) sun/imtool.c [SUN/IRAF] 1. In constant coordinate readout mode, will now print the intensity of the pixel underneath the cursor, in addition to the x,y values already output. The pixel intensity is given in image intensity units if the display transformation was linear, in display pixel units otherwise. 2. The display window can now be resized without affecting cursor readout or control, or the visibility of the WCS coordinate output box. If the displayed image is loaded into the upper left corner of the imtool window, the window may be resized to exactly fit the displayed image regardless of its shape. 3. The gclear function in the setup panel (graphics clear) now works properly. (12/20) -------------------------------------- All systems updated (lyra, tucana, orion, irafx@draco). (12/20) sun/imtool.c [SUN/IRAF] 1. If the cursor is positioned to an area of the display window which has not been loaded with image or colorbar data, the pixel value is output as 0. rather than some miscellaneous fictious value. 2. If the pixel value is being output in raw display units for some reason (e.g., because the WCS file could not be read, or a nonline greyscale transformation was used to load the image), the pixel value is displayed as an integer to flag this condition for the user. 3. Added an option to make the display window background color (the color to which the window is set when the image is cleared) black, with white being the default as before. Settable via either a command line argument or the setup panel. (12/21) dev/hosts dev/termcap dev/graphcap Changed the names of the logical node names "print" and "plot" to "lpnode" and "plnode" (line printer node and plotter node). The node name "plot" was no longer working due to the recent modification of the networking code to permit logical node names to be defined in the environment; "plot" is already defined in the environment as a logical directory. (12/22) sun/imtool.c Decreased the cursor gap from 10 to 6 pixels in response to a user complaint that it was hard to center the cursor precisely on objects due to the gap being too wide. (12/24) sun/screendump.c 1. The output image is now fractionally scaled to fill the page. Formerly an integer scale factor was used in the hopes that this would be faster (it permits simple pixel replication), but there is little speed difference, and having the output always scaled to fill the page is nicer. 2. The screendump code now knows about devices like the 3/110 and 3/60 which have 10 bit frame buffers (8 bit color plus 1 bit overlay plus 1 bit overlay enable mask). Hence, textcopy, graphcopy, and screencopy will now work for all current Sun workstations. (12/24) sun/gterm.c sun/gterm.man sun/imtool.c sun/imtool.man 1. Incremented the GTERM version number to V1.2 and updated the manual page. 2. Added a "pan" capability to IMTOOL. Provided that the display window is smaller than the image, the middle mouse button may be used to mark a position to be moved to the center of the display window. Panning is either instantaneous or via a smooth scroll; the latter is selected by holding the control key down while pressing and releasing the middle mouse button. (12/26) pkg/images/tv/display/sigl2.x pkg/images/tv/cv/sigl2.x Fixed a short/int datatype mismatch bug in a call to adivks. The bug had already been fixed in plot/crtpict/sigl2.x (the only other copy of this routine I know about), but evidently the bug fix had not been propagated to the other routines. (12/28) unix/os/zfiobf.c [SUN/IRAF] Added support for FIFO (named) pipes, as are used by the display server code (gdev$zfiogd.x) on Sun/IRAF. 1. Files opened read only or write only are opened with the O_NDELAY flag, necessary to prevent the client process from blocking until the server makes a connection (which in my case was not until the client requested the connecton, leading to deadlock). 2. A close on a FIFO opened for reading by the client was causing the error EPERM (insufficient permission) to be returned for the close. This was highly inconvenient, so I modified ZCLSBF to ignore this error. Hopefully the file descriptor is actually getting freed; I did not take the time to check. (12/28) sun/gtermio.c sun/gterm.esc sun/gterm.man Added support for the ESC ENQ function to GTERM. This was necessary to get GTERM to work for FORTH graphics. (12/30) sun/gterm.c Looked into a bug reported by Joe Schwarz at CFA. While in cursor mode, the mouse was moved into the gterm text window and the user tried to exit the program (implot) by typing the usual 'q'. This was ignored, but typing 'q'<cr> three times would do the trick, but would leave GTERM in a funny state, requiring a setup-reset to recover. The reason typing 'q'<cr> three times would terminate cursor mode is because this produces a six character sequence ending with CR, which is what a tek cursor sequence is. The reason GTERM got confused was because it thought the cursor read was still in effect, since cursor mode was not exited normally. The suggested fix was to make input equivalent in either window, hence typing 'q' in the text window would terminate the cursor loop and applications program. The problem is that a valid cursor sequence requires an [x,y] position as well as a keystroke, and the cursor position for a cursor read is invalid when the mouse is in the text window. Of course in this case the application does not need the [x,y] to do a quit, but there is no way that the terminal could know that. Nonetheless, GTERM should not get into a funny state, so I fixed the bug by having the text window discard ascii input entered in the text window during a cursor read (rather than passing it on to the application program as it was). (12/30) pkg/images/tv/display/iispio.x In testing the new display code (to be documented here shortly) I found that it was easy to lose datastream synch to the display server (an IIS or IMTOOL), when a user interrupt would arrive while a data transfer was in progress, i.e., due to the user interrupting the display program while loading the display. I had to add calls to intr_disable,intr_enable around the code which does i/o to the display, to ensure that complete data packets are always sent. This makes the display process immune to interrupts, but if an interrupt arrives during a data transmission it may be ignored, making it necessary for the user to type interrupt several times to abort the task. (12/31) TODO: Modify the interrupt disable/enable code to queue interrupts for later delivery, rather than discard interrupts as at present. sys/fio/zfiott.x Made some changes affecting the 'playback' feature of STTY: 1. Fixed a bug that would cause logfile lines containing only control directives but no data, i.e., \{...\} alone on a line, to cause premature EOF on the logfile, terminating playback. 2. There was a bug in the ztt_query code, used to process and execute \{...\} control directives. In effect, the way the code was written embedded playback control directives could not be used while reading text in raw mode. 3. Carriage return as well as space bar may now be used to continue execution following a verify-pause. (1/1-1988) pkg/language/doc/stty.hlp Extensively revised the help page for STTY (the terminal driver), mostly to add a discussion of the playback facilities. (1/1) dev/graphcap local/sun/imtoolrc unix/hlib/install 1. Replaced the IMTOOL device entries in graphcap by a set of a dozen or so logical device entries imt512, imt800, imt1024, imt2048, etc., defining the set of defined frame buffer configurations for the IMTOOL display server (this is site configurable). 2. To local/sun (Sun/IRAF), added the file imtoolrc, which is read at startup time by IMTOOL to get the set of defined frame buffer configurations. This file is intended to be copied into a public library at 'install' time, e.g., /usr/local/lib/imtoolrc. The entries in this file must have corresponding entries in the graphcap. 3. Modified the install script to install the imtoolrc file in /usr/local/lib. (12/26-1/3) sys/imio/imdmap.x Modified to save the value of the graphcap parameter 'cn', the IMTOOL frame buffer configuration number (if defined) in IM_LEN(im,3). This is then picked up by the DISPLAY code and passed on to the display server to specify the frame buffer configuration to be used. (12/26-1/3) unix/gdev/zfiogd.x Deleted the IMT512 and IMT800 logical device entries, and added a capability to parse the display device frame buffer width and height from the DD string. (12/26-1/3) local/sun/imtool.c local/sun/imtool.man pkg/images/tv/display/iis.com pkg/images/tv/display/iisers.x pkg/images/tv/display/t_display.x A new, and hopefully final (for a while) version of the IMTOOL display server has been completed and installed, along with a few corresponding changes to the DISPLAY task. The latter will still work for ordinary IIS displays as well as with IMTOOL. The major revisions were the following. 1. The scheme of a "standard" configuration (512 square) and a "large format" configuration (800 square) has been scrapped and replaced by a more general scheme. There can now be up to 64 different frame buffer configurations defined at any one time, with no restrictions upon the sizes of the frames other than that they be defined when IMTOOL is started up (a SunView restriction also requires that the frame width be even). An "imtoolrc" file, with corresponding entries in the IRAF graphcap, is used to define the possible frame buffer configurations for both IMTOOL and IRAF. These may be modified or extended by a site, and the user may have private, custom copies if desired. The default configuration file is stored in /usr/local/lib/imtoolrc. The contents for our system are as follows at present: # IMTOOL -- Defined frame buffer configurations. Note... # is only a starting point, and may be modified during... # values are preferred. The configuration numbers may... # but must be unique and in the range 1-64. # # Format: configno nframes width height 1 2 512 512 # imt1|imt512 2 2 800 800 # imt2|imt800 3 2 1024 1024 # imt3|imt1024 4 1 1600 1600 # imt4|imt1600 5 1 2048 2048 # imt5|imt2048 6 1 4096 4096 # imt6|imt4096 7 1 4096 1024 # imt7|imt4x1 8 1 1024 4096 # imt8|imt1x4 9 2 1142 880 # imt9|imtfs full screen... 20 2 384 576 # imt20|imtgec GEC CCD detector format 21 1 3040 976 # imt21|imtkpca KPCA detector format The frame size to be used is defined by the client program (the DISPLAY task) at image load time. In the case of IRAF, this is done via the stdimage environment variable, e.g., cl> reset stdimage = imt1600 This is converted into the frame buffer configuration number (via the 'cn' parameter in the graphcap entry) and passed on to IMTOOL via a a few unused bits in the otherwise IIS compatible datastream headers. 2. Multiple frame buffers are now supported by IMTOOL. As far as IMTOOL is concerned there could be any number of frame buffers (subject to memory limitations), but DISPLAY task limitations currently limit us to up to 4 frames; this will be plenty for most applications. 3. The display window is now completely decoupled from the frame buffer size, i.e., the same modest sized window is typically used regardless of the frame buffer size, relying upon pan to access the full frame. 4. A frame blink option has been added. Frame selection for viewing may be done either under program control or with the mouse or keyboard in any of several ways. 5. A "smooth pan" feature has been added. This smoothly pans the image to the new center, insteadof going there in one step. The big step pan is still the most useful, however. 6. The colorbar is now implemented differently, allowing it to always be visible on the screen regardless of the window size or pan offset. The colorbar may be turned off an on via the setup panel if desired. 7. The setup panel and frame menu now contain a number of new items, e.g., register all frames, turn blink on and off, enter a list of frames to be blinked, adjust the size of the display window to fit the full frame, display the next frame in sequence, save the current frame in a Sun rasterfile, load the current frame from a Sun rasterfile, and so on. 8. The setup panel has been made shorter so that it will fit "behind" most display windows. If you use it frequently, it may be most convenient to leave it open all the time, and use the L5 function key to display it (move it to the front) when needed. It can also be repositioned to an otherwise unoccupied area on the screen if desired. 9. Output of the pixel intensity in cursor readout mode was added in an earlier revision. 10. I/O to the server is now bidirectional (image data can be read back as well as written to the server), allowing use of the erase- option in the DISPLAY task to write into subregions of the frame buffer, e.g, for mosaics. Only the last WCS is saved. 11. The manual page has been updated. The parameters for the different frames, e.g., monochrome or pseudocolor, slope and offset of the transfer function, pan offset, WCS, coordinate lists, etc., are independent. When you change frames all the values appropriate for that frame are set. There were many other changes and bug fixes probably not worth noting here. Basically, while the prototype display server is still pretty limited in some ways (full interaction with applications programs is not supported, no graphics and text overlay support), it now does the most basic things fairly well. Probably all of this will change in six months or so when SunOS 4.0 comes out - the NeWS/X in this will probably trash both GTERM and IMTOOL, and when the features in IMTOOL and the X based CFA XIMAGE are merged into the final display server. Read the new manual page for additional details. (written 1/3) ------------------------------------ Updated tucana, orion, irafx@draco from lyra. (1/6) Updated pegasus and octans from tucana. (1/7) sun/screendump.c For Sun rasterfile output, the colortable length was being output as NGREY*3 (256*3) rather than NGREY, due to a confusion about the use of the length parameter in rasterfiles (usage differs in the rasterfile header and in a colormap struct). This is a bug, but the generated rasterfiles would actually be legal rasterfiles, since the colortable length was being recorded correctly - it was just that more than 256 bytes of data were being stored for each colortable. (1/7) sun/imtool.c pkg/images/tv/display/iisers.x 1. In imtool.c, added some protection against being passed a negative or zero config number. 2. In iisers.x (DISPLAY), added a max(0,... to the code which encodes the frame buffer configuration number in the TID field, to avoid passing a config of -1 to the display server, if the 'cn' field is absent from the graphcap entry for the device for some reason. (1/7) sys/etc/symtab/mkpkg sys/etc/symtab/README sys/etc/symtab/stsize.x + sys/etc/symtab/zzdebug.x Added a new routine STSIZE to the symbol table package. The new routine is used to determine the number of chars of file storage required to store the symbol table in its external form, e.g., before a call to STSAVE to save the table in a file. (1/8) local/sun/imtool.c In remark_objects(), modified a test used to test if the next file line begins with a number to permit the first character to be a minus sign, e.g., a negative number. (1/15) sys/osb/shift.c There was an error in the way the shift-negative case was handled. Replaced (a >> bits) by (a >> -bits) in the three routines. (1/27) unix/as/zsvjmp.s unix/os/zdojmp.c + unix/os/mkpkg Currently one of the hardest parts of a UNIX port is writing the ZSVJMP/ZDOJMP routines, since the routines are complex and must be coded in assembler. In an attempt to simplify this task I have rewritten the routines to interface to the standard C library setjmp,longjmp routines. Some assembler code is still required, since setjmp cannot be called as a function, but must instead be called in the context of ZSVJMP by a jump. This appears to work, but more testing is required. At present I am making the change only on tucana (the Sun/3 - MC68020). (1/29) unix/os/zgcmdl.c This routine is called from IMFORT (host level) programs to get the command line as a string. Since the routine is in a support library and does not have ready access to the main, it cannot access ARGC and ARGV directly, but must instead use a heuristic to guess where the arrays are stored, relative to some well know landmark. The technique used to do this was working on the VAX and the Sun-3, but would fail on the Sun-4. A different heuristic was substituted which works in all cases. In this, the well known landmark is 'environ', which points to the environment list array. We assume that ARGC and ARGV are stored immediately before the environment list array. This holds on all the machines currently at hand, but the routine should be regarded as potentially host system dependent. (1/31) unix/hlib/mkpkg.sf.SUN4 Added an entry to the list of files requiring special compilation due to optimizer bugs. In file imfort$imemsg.x, the length of a Fortran character*(*) string is passed as an argument in an input register. The register value has been modified by the time the register is later used to pass the string length on to _i_len (the F77 len intrinsic function), causing an incorrect string length to be computed, resulting in string overflow in a subsequent call to F77PAK. (1/31) local/sun/imtool.c IMTOOL will now print "cannot be used on monochrome displays" and exit, rather than dump core on a segmentation violation during startup. (1/31) unix/boot/wtar/wtar.c [lyra,tucana] vms/boot/wtar/wtar.c The WTAR program was incorrectly writing a short block at the end of the tar file, contrary to the tar format specification. Now it always writes a full block. (2/4) sys/mkpkg In the module libmain.o, changed the $set XFLAGS = "-c" to $set XFLAGS = "-c $(HSI_XC)" since this entry compiles os$zmain.c, which is part of the HSI. (2/4) local/sun/imtoolrc dev/graphcap Added some more entries to the site-specific section of the imtoolrc file (predefined frame buffer configurations). (2/5) # Some site specific formats for NOAO. 20 2 384 576 # imt20|imtgec GEC CCD d... 21 1 3040 976 # imt21|imtkpca KPCA dete... 22 1 1520 128 # imt22|imt2df1 2D-Frutti 23 1 1520 256 # imt23|imt2df2 2D-Frutti 24 1 1520 512 # imt24|imt2df5 2D-Frutti 25 1 1520 960 # imt25|imt2df9 2D-Frutti dev/termcap dev/cachet.dat pkg/cl/builtin.c pkg/system/help/t_help.x sys/libc/cttset.c sys/gio/mkpkg sys/tty/mkpkg sys/tty/ttygsize.x + sys/tty/ttyread.x + sys/etc/mkpkg sys/etc/pagefiles.x sys/etc/sttyco.x sys/etc/xttysize.x + Modifications and extensions were made to STTY and the TTY package to support terminals which can dynamically change size at runtime, e.g., workstation windows. This was done using a status query, i.e., an escape sequence is written to the terminal commanding it to send the screen size, and then the response is read back and decoded. This technique raises the possibility of blocking if a character is lost (easily recovered from by having the user type return), but has the advantage that it works over remote network connections to possibly foreign host machines. 1. The new routine XTTYSIZE was added to ETC, and calls to this routine were added in pagefiles.x and t_help.x. XTTYSIZE recompute the screen size and resets the values of the ttyncols and ttynlines environment variables. If the terminal supports querying of the screen size, the screen size is determined by such a query, otherwise the default values given in the termcap entry for the device are used. This routine is not intended to be called in regular applications code; applications should continue to access the environment variables directory, or use TTYSTATI (which does the same thing). This will still work, since once any system task like PAGE or HELP is called after the screen size changes, the environment variables are updated, and all subsequent tasks which use these variables automatically pick up the new screen size. Note that calling XTTYSIZE globally updates the values of the ttyncols and ttynlines environment variables for the entire process tree. If the procedure is called from within a task executing in a connected subprocess, the task posts a command to the STTY task in the CL which is where the actual querying of the terminal takes place. 2. The new routine TTYGSIZE and the associated routine TTYREAD were added to the TTY package. These are the low level system routines called by XTTYSIZE (when called from the STTY task in the CL) to do the actual i/o to the terminal to determine the screen size. Two new termcap parameters are defined to describe terminals which support this capability. qs Command sequence to be sent to the terminal to query the screen size in characters. wh A string used as input to the pattern matching facilities to determine when the full response to the screen size query has been received, as well as to decode the response. The qs capability is a simple fixed control sequence. The wh string is more complicated, serving both as a pattern and as a decoding format. For example, here is the entry for the GTERM SunView virtual graphics terminal: :qs=\E[18t:wh=\E\[8;%H;%Wt: The %H and %W fields tell where the screen width and height appears in the response sent by the terminal. All other characters appearing in the string must match what is actually sent by the terminal. Note that this string is used as input to the pattern matching code, hence all the usual pattern matching characters are recognized (the %H and %W fields are a special case, and are preprocessed into sequences of the form "%[0-9]*" before patern matching takes place). Any data read from the terminal before the pattern is matched is probably type-ahead, and is pushed back into the input stream minus the matched substring. 3. A new option "resize" was added to the STTY task, i.e., to sttyco.x in ETC. "stty resize" causes the values of ttyncols and ttynlines to be reset; the terminal is queried for the screen size if such queries are supported, otherwise the termcap defaults are used. This feature is not really intended for the user (although it can be used), and was provided mainly for XTTYSIZE. Setting the terminal type with STTY will also cause the screen size to be queried if possible. For example, cl> stty resize show gterm40 ncols=80 nlines=47 will cause the terminal to be queried for the current screen size, update the environment accordingly, with the current settings being displayed as shown. 4. In LIBC and ETC, the calling sequence for the STTYCO procedure was modified to add the arguments "ttin" and "ttout", the file descriptors of the input and output streams to the terminal. Formerly STDIN and STDOUT were assumed. 5. In the termcap, the logical device entries 'gterm24', 'gterm34', 'gterm40', etc., were all converted into aliases for 'gterm'. All are equivalent now, and use of only 'gterm' is recommended. The .ttyswrc function key definitions, used to quickly change the screen size, are retained as they are still useful for quickly resizing the screen, but it is no longer necessary to run STTY after a resize to set the new screen size. A new entry 'gterm-nqs' was added for using GTERM with auto screen size querying disabled. This may be desirable when working over a noisy modem connection, which could prevent the screen size from being determined reliably. sys/gio/gpagefile.x Modified to call gdeactivatews and greactivatews only if the workstation is activated when the routine is called. (2/6) sys/fmtio/parg.x When printing negative integer numbers of type short or char in octal or hex, the number of digits actually printed would correspond to type long, with way more sign extension than is valid for a machine word. Added some special case code to eliminate the extra sign extension, which is only an artifact of the use of GLTOC to encode the number. (2/7) unix/hlib/login.cl vms/hlib/login.cl Modified to print the message set terminal type to U_TERM... immediately before executing stty U_TERM, to warn the user that the terminal type is being set to the indicated type. (2/10) pkg/images/tv/display/t_dcontrol.x Added some code to set the values of iis_[xy]dim and iis_config from the graphcap entry. (2/11) sys/tty/ttygsize.x Disabled the screen size query when STTY login or playback mode is in effect. (2/12) dev/termcap dev/cachet.dat Making the gtermNN (gterm24,gterm34,etc.) simple aliases for 'gterm' was a mistake. When autosizing is disabled the termcap entry determines the default screen size, hence the separate entries are still needed; they have been restored. The gtermXX entries are set up to disable autosizing, hence entry 'gterm' must be specified to make use of the autosize feature. (2/17) pkg/cl/eparam.c sys/libc/cxttysize.c + unix/hlib/libc/xnames.h vms/hlib/libc/xnames.h 1. Added a new routine c_xttysize() to the LIBC package. 2. Modified EPARAM to call c_xttysize to read the screen size, allowing autosizing. (2/17) unix/boot/rtar/rtar.c vms/boot/rtar/rtar.c This code contains a heuristic used to determine whether a file on the tape is a text or binary file, which it must know in order to create the file on disk on systems like VMS. This heuristic was failing for FITS files, which have an ASCII card iamge header which resembles a text file except for the lack of line delimiters. I had to make the same change to the RTAR code as was made to ZFACSS some time ago, for it to recognize this case of a binary file. (2/17) pkg/system/help/t_help.x XTTYSIZE is now called only when paging the output and the output is not redirected, to avoid the terminal query when screen oriented terminal output is not desired (as in a pipe, or in a background job). (2/17) iraf/sys/fmtio/dtoc.x The input format-code argument (fmt) was being used directly in a logical test, rather than the internal lower case version, causing the routine to be partially case sensitive to the floating point format code character (efg etc.). (2/19) unix/os/zfacss.c When called to test the file type, this routine would hang when called on a unix FIFO type file, due to the blocking-open associated with this type of file. The routine stats the file and only looks at it if it is a regular file, but it was unnecessarily opening and closing the file whether or not it needed to read from it. (2/19) --------------------------------- Version 2.6 of Sun/IRAF was frozen and taped. (2/24) sys/fmtio/gstrcat.x Fixed a bug in gstrcat - the string length being returned was one greater than it should be. (2/25) sys/gio/nspp/portlib/flash1.f sys/gio/nspp/portlib/flash2.f sys/gio/nspp/portlib/flash3.f sys/gio/nspp/portlib/flash4.f sys/gio/nspp/portlib/flushb.f sys/gio/nspp/portlib/preout.f sys/gio/nspp/portlib/z8zpii.f sys/gio/nspp/sysint/packum.x sys/gio/nspp/sysint/loc.x sys/gio/nsppkern/writeb.x The NCAR code used a function LOC, evidently a non-standard intrinsic function on the ancient Cyber machine the code was originally developed on. We ported the code by emulating the function, but it turns out that the new Fortran compiler on the Sun-4 has its own LOC intrinsic function which doesn't behave quite the same way, hence the 'stdplot' gio kernel was failing on the Sun-4. I fixed the problem by changing all LOC references to LOCI. (2/28) sys/vops/mkpkg Horrible bug! A user reported that the VOPS routine aiftrx (inverse fourier transform) was not working properly. Careful testing showed that the code was correct, but that the combiled object in the VOPS library did not agree with the code, even though the module dates looked ok! This turned out to be due to a bug in the mkpkg file, which has probably been there since the file was written around 1985. In the $ifolder clause, the actions were "cp file.x ak", which is a UNIX, not MKPKG, command, which MKPKG was evidently ignoring every time it tried to updated the ./AK versions of the files. This was changed to "$copy file.x ak/file.x", and all is well. (3/2) unix/boot/spp/mkxc.csh Renamed to mkxc.sh. (3/9) unix/hlib/libc/kernel.h unix/os/irafpath.c + unix/os/mkpkg unix/os/zalloc.c I added a new utility routine IRAFPATH to the UNIX/IRAF kernel. Given a filename, this routine searches the standard IRAF runtime directories for the file, and returns the absolute system pathname of the file if found. In particular, on hosts like the Sun which can have multiple bin directories for different architectures, the routine will find the (HSI) executable appropriate for the current host. (3/10) unix/boot/spp/xc.c Modified XC to use IRAFPATH to determine the pathnames of the XPP and RPP executables. (3/10) mkpkg unix/mkpkg.sh unix/hlib/install [SUN/IRAF only] unix/hlib/irafuser.csh For Sun/IRAF, modified the HSI to permit multiple copies of the HSI executables. This is necessary to be able to use a single copy of IRAF to support multiple incompatible binaries, e.g., sparc and mc68020. 1. To the 'unix' directory (host$), added subdirectories bin.sparc and bin.mc68020. The second field is what is returned by "mach" on a Sun. The bin directory appropriate for a particular node is called HBIN, and is defined as such in the irafuser.csh file, although HBIN need not be defined to run the system. 2. All the .e files formerly in HLIB are now kept in HBIN. The .csh executable files are still in HLIB, since we can use one copy for both architectures. Runtime selection of the appropriate HBIN is via symbolic links set by INSTALL (see below), or via the IRAFPATH routine. 3. The INSTALL script was extensively modified to support multiple HSI binaries. A Sun-4 server configured for both sparc and mc68020 hosts will have separate /usr.SPARC and /usr.MC68020 directories; these are the "/usr" directories for the two types of machines. IRAF can be installed anywhere, provided it is on a disk partition which can be accessed from all nodes, either directly or via NFS. Each machine type is assumed to have its own local/bin directory, e.g., /usr/local/bin, where /usr is linked to /usr.MACH. Since root can only modify files on the local node, the INSTALL script must be run on the central file server. To install the local (sparc) copy of IRAF, one runs INSTALL in the usual way, e.g., % cd $hlib % install To install the MC68020 version of IRAF on the fileserver, for access by all Sun-3 nodes, % cd $hlib % install -m mc68020 For this to work properly, one must carefully enter the correct pathnames, since the defaults will be for sparc rather than for the mc68020, e.g., iraf root can be made the same for both systems imdir can be made the same for both systems tmp can be made the same for both systems /usr/bin /usr.SPARC/bin or /usr.MC68020/bin /usr/local/bin /usr.SPARC/local/bin or /usr.MC68020/local/bin When run on the Sun-4 host, /usr/bin is the same as /usr.SPARC/bin, and /usr/local/bin (if there is one) is /usr.SPARC/local/bin. For the Sun-4 installation, the script will put links to the host$bin.sparc executables into /usr/bin, and install the suntools executable into /usr/bin. For the Sun-4 (MC68020) installation, the links in /usr.MC68020/local/bin will point to host$bin.mc68020, and the MC68020 suntools executable will go into /usr.MC68020/bin. As before, although all versions of the executables are maintained online and any version of the system may be executed, only one version of the objects and libraries is online at any one time, and the system must be reconfigured before a version of the system can be updated. For example, assume the system is currently configured with the SPARC objects. Typing % cd $iraf % mkpkg f68881 would reconfigure the system for the f68881 binaries. One could then log onto a Sun-3 diskless node and update the f68881 binaries, after which the SPARC binaries could be restored with mkpkg sparc. A boostrap of the HSI will automatically update the binaries in the appropriate HBIN directory. If a single directory is subsequently updated, however, the new executable will be placed in HLIB, and after testing one must manually move the executable to the appropriate HBIN directory. (3/10) unix/sun/Makefile local/sun -> unix/sun 1. The custom suntools sources (formerly local/sun) have been moved to unix/sun. 2. The suntools.e executables are now installed in the host$bin.XX, rather than in LOCAL. (3/10) local/.login FLOAT_OPTION is not used for the Sun-4 (it will cause an error if defined), hence this is now conditionally defined depending upon the machine type. (3/10) local/notes.orion - doc/ports/sun4_sep87.doc Appended the contents of the "notes.orion" file to the record for the Sun-4 port, and deleted the orion notes file, which we won't need anymore. (3/10) dev/hosts Changed the iraf/bin in the entry for orion to iraf/bin.sparc. Updated on all nodes. (3/10) unix/gdev/sgidev/sgidispatch.c unix/gdev/sgidev/mkpkg.sh unix/hlib/sgi.tab - Simplified SGIDISPATCH considerably by using IRAFPATH. The "sgi.tab" file is no longer used; the translators may be anywhere irafpath can find them, but are expected to reside with the other HSI executables. (3/11 SRo) unix/os/zfioks.c I made an attempt to use RCMD and the /etc/hosts.equiv mechanism to implement connections to friendly hosts in the local network without requiring login authentication. Unfortunately, for this to work the process calling RCMD must have uid=root, and it is not possible to set root ownership on the IRAF executables, hence IRAF cannot use the equivalent host mechanism (at least, without some sort of intermediary, which would be too inefficient). (3/12) unix/boot/spp/rpp/rpprat/defs unix/boot/spp/rpp/rppfor/*.f I had a problem with "too many characters pushed back" in a compile, and upon investigation discovered that the pushback limit was set to 100 characters, a very small amount. I increased this and a number of other size limiting parameters affecting macros - the maximum definition size is now 2048, the max pushback is 3192 chars, and the total amount of storage reserved for definitions was increased by 50%. (3/13) unix/os/zfiopl.c unix/os/zfiolp.c The ZOSCMD primitive, used to send commands to the host shell, provides filename arguments which may be used to save any stdout or stderr output in a file. If the filenames are omitted the stdout and stderr are left alone, i.e., left connected to the streams inherited from the parent process. The bug occured in the printer and plotter drivers ZFIOLP and ZFIOPL, when called from a connected subprocess, i.e., a child process of the CL. In the case the standard i/o streams are the IPC channels to the CL, and any output from the shell would be sent to the CL, possibly corrupting the CL IPC prototol. I changed the calls to ZOSCMD in the two drivers (in the dispose spoolfile code) to open /dev/tty for shell output, rather than inheriting the streams from the CL, if the process is a connected subprocess. (3/25) pkg/images/tv/display/t_display.x Modified the DISPLAY program to accept either "wcsdir" or "WCSDIR". (3/28) --------------------------------- Updated all Sun/IRAF systems. (3/25,28) unix/as/zsvjmp.s unix/os/zdojmp.c [VAX only] unix/os/mkpkg Installed the more portable version of ZSVJMP/ZDOJMP, which transform into calls to the UNIX setjmp/longjmp, in the BSD (VAX) UNIX/IRAF HSI. The original code was more compact and faster for the VAX, but the BSD code is often used as a starting point for ports to new machines, and the more portable version is a much simpler technique to code. (3/28) sys/fmtio/ctowrd.x This routine was returning an incorrect function value, the number of non-white characters converted from the standard input. There was also a problem with how quoted strings were handled. (3/31) sys/osb/miipak8.x sys/osb/miipak32.x sys/osb/miipak16.x sys/vops/achtgen/*.x Added entries for TY_POINTER and TY_STRUCT to the TY_INT switch in the case statements (one for each SPP datatype) in these routines. (4/2) sys/etc/symtab/stalloc.x Modified to align to double, rather than int, buffers allocated in the symbol table. (4/2) --------------------------------------- IRAFX updated. (4/3) unix/portkit + unix/mc68000 - Replaced the old MC68000 directory by a new directory PORTKIT, containing updated notes and replacement source files for porting the 4.3 BSD version of UNIX/IRAF to new machines. (4/4) unix/os/irafpath.c unix/boot/bootlib/ossysfile.c unix/boot/spp/xc.c 1. In BOOTLIB, modified os_sysfile() to call irafpath(). 2. In XC, replaced the calls to irafpath() with calls to os_sysfile(), so that all file-searching is done through this one call. 3. Modified irafpath() to add support for searching user defined libraries, in addition to the default action of searching the standard libraries. To make use of this feature the user must define the environment variable IRAFULIB, the value of which consists of a whitespace delimited list of directory pathnames (trailing underscore optional). The purpose of this change is to provide greater flexibility for debugging software developed outside of the standard system, e.g., during testing and before the software has been installed. This allows VOS software which includes <file.h> style include file references to be tested outside the system without having to modify the installed versions of the referenced include files. It is not intended as a means of adding new system libraries to the standard search path. (4/5) pkg/images/imdebug/mkpkg Modified to produce the local executable "xx_imdebug.e" rather than "x_imdebug.e", with the named changed to the latter at install time, as per current standard practice. (4/7) sys/vops/mkpkg sys/vops/tf/mkpkg sys/vops/aveq.gx + Added a new vector,vector->scalar operator, AVEQ, used to compare two vectors for equality, returning a boolean result. (4/11) unix/boot/mkpkg/tok.c vms/boot/mkpkg/tok.c 1. Modified MKPKG so that system file names of the form "<file.h>" can appear in the argument lists of $IF directives. (4/14) 2. Generalized further to include most other macro statements. (4/15) unix/hlib/install unix/sun/imtool.c [SUN/IRAF] unix/sun/mksuntool.csh 1. Modified IMTOOL to use "HOME" rather than "home" as the user login directory. 2. Fixed a bug in mksuntool.csh that would cause it to unnecessarily rebuild the suntools subdirectory. 3. Updated the Sun/IRAF INSTALL script, changing the pathname of the imtoolrc and manual page files from $iraf/local/sun to $iraf/unix/sun, to reflect the recent move of the code to the HSI. (4/16) unix/sun/imtoolrc dev/graphcap Added two new IMTOOL logical devices: imtcryo 512x800 imtgcam 348x800 (4/16) unix/boot/spp/rpp/rpprat/defs unix/boot/spp/rpp/rpprat/declco.r unix/boot/spp/rpp/rppfor/declco.f Modified RPP to conditionally output the IMPLICIT NONE statement (a nonstandard extension to Fortran) in every subroutine or function declaration. The define IMPNONE in the 'defs' file should be uncommented and the Fortran for declco.f generated, to enable this feature. This was added for Convex/IRAF, but should be of general utility since IMPLICIT NONE is a common extension. (4/17) vms/* Updated the VMS/IRAF HSI. Copied to lyra and did a diff/merge, leaving an up to date copy on lyra. About the only thing affected was the RPP sources; everthing else has been kept up to date. (4/17) ---------------------------- Updated IRAFX@draco. (4/17) unix/hlib/mkpkg.sf [VAX-UNIX/IRAF] Commented out the special file list entries for the aadd*, amap*, and awsu* VOPS entries. The hand optimized versions of these routines date back to the early days of BSD UNIX (4.1), when the compiler was not so good, but nowadays the optimizer is good enough so that they are probably not worth maintaining. (4/20) pkg/images/tv/display/dsulut.x pkg/images/tv/display/display.h pkg/images/tv/display/t_display.x Added a capability for a user defined lookup (intensity transformation) table. (Coded by SH). (4/21) sys/gio/stdgraph/stgrtty.x sys/gio/stdgraph/zzdebug.x The routine which reads from the status line was modified to echo \r\n when either \n or \r is typed in by the user to terminate an input line of text. Since writing a newline to the status line erases the line, this will cause the text input up to that point, e.g., a prompt followed by the user's response, to be cleared, giving the user some positive feedback to indicate that the newline was seen. Clearing the line is also consistent with the model of the status line as a one-line terminal screen. This change to the semantics of status line i/o may affect some programs, although it should be harmless. (5/1) --------------------------------- Updated tucana and irafx@draco. (5/1) sys/fio/vfntrans.x Change directory commands such as the following would not work: cl> cd imio.pl/plio This turned out to be due to the filename mapping code, which was losing the .pl when it occurred as part of a subdirectory name followed by a /. The code was changed so that any . delimited fields occuring in a / delimited subdirectory name are considered part of the root subdirectory name, rather than being parsed off and treated as filename extensions. (5/2) sys/mtio/mtalloc.x Fixed a typo in the file header. (5/9) unix/sun/imtoolrc Changed the frame buffer width for the GEC format from 384 to 386. (The actual width is 385 but imtool requires that it be rounded to an even number; a user complained about the missing column). (5/10) unix/os/alloc.c unix/os/getproc.c + unix/os/mkpkg unix/os/mkpkg.sh Fixed a bug which would cause device allocation (magtape) to fail over the network. What would happen is that a remote user using the magtape would not be logged in on the local node, even though they had a kernel server executing with the device allocated. A local user could then reallocate and "steal" the device from the remote user (or vice versa). This was fixed by adding code to alloc.e to test if the given user has any processes executing on the server node for the device. (5/10) unix/os/zmain.c unix/os/zfioks.c 1. In Sun/IRAF, if one submitted a bkg job from a CL running in a terminal window and then subsequently selected "Exit Suntools" in the root Sunview menu to give the parent CL the axe, the bkg CL job would be killed too; this would not happen if one logged out of the foreground CL before exiting suntools. This was probably due to suntools sending SIGTERM to all processes in the same process group as the terminal window. The fix was to modify ZMAIN.C to put a detached process (such as a bkg CL) in its own process group. This fixes the signal problem, and also prevents a detached process from reading from the terminal of the foreground process, e.g., to satisfy a password query (the detached process will now be suspended indefinitely (SIGSTOP) if it attempts such a read). 2. ZFIOKS.C was modified to prevent a detached process from trying to access the foreground process's terminal for a password query. The server connect will fail, causing KI to attempt to access the resource on the local node. This is questionable (it has always been that way), but it works out well if the resource is a file on a shared (NFS) disk, since the result will be a valid file access. (5/16) pkg/softools/mktags.x Someone suggested that we make an alphabetized index of all the procedures in the VOS. I used the MKTAGS task to do just that, but had to increase the size of the internal tables to accomodate such a large number of files and procedures. (The index files are stored in /u2/sites on lyra, and were not installed in the main system). (5/17) pkg/cl/cl.par vms/hlib/motd unix/hlib/motd vms/hlib/zzsetenv.def unix/hlib/zzsetenv.def Incremented the version number to 2.7 - will continue to note system changes here until this version stabilizes. (5/21) -------------------------- Updated tucana and irafx@draco. (5/21) sys/fio/nowhite.x This procedure, used to delete whitespace from filenames, evidently was not working at all, due to a (ch < ' ') test which should have been a (ch <= ' '). (5/25) sys/gio/gascale.x sys/gio/grscale.x These routines were not checking for INDEF when computing the min and max values of the data arrays. (6/2) unix/sun/gterm.c Changed the default "close workstation" action to NO_ACTION. Most people seem to be annoyed when the graphics plan automatically gets obscured at the end of a plot, and would prefer to control the windows manually with the keyboard function keys. (6/2) pkg/lists/rgcursor.x pkg/lists/rimcursor.x These tasks would abort if they could not GOPEN the stdgraph or stdimage stream. This was not necessary, since may still be possible to read either cursor even if a graphics kernel cannot be connected, so I put iferr() conditionals around the gopen's to ignore any errors. (6/2) unix/sun/Makefile unix/sun/imtool.cursor unix/sun/imtool.c unix/sun/mouse.c pkg/images/tv/display/iis.h pkg/images/tv/display/mkpkg pkg/images/tv/display/zzdebug.x pkg/images/tv/display/imdrcuro.x pkg/images/tv/display/imdrcur.x sys/libc/mkpkg sys/libc/cimdrcur.c unix/hlib/libc/xnames.h unix/hlib/zzsetenv.def pkg/cl/mkpkg pkg/cl/modes.c Added a simple interactive image cursor readback mechanism (=IMCUR). For the moment, this bypasses both cursor mode and the whole of GIO, and goes directly to the display server to carry out a logical cursor read. While the interface is limited, it does provide a working =imcur, and it remains device independent (or as much so as the rest of the "display" interface), and uses the network interfaces, allowing cursor readback from a display server on a remote node. 1. Modified IMTOOL to add support for another pseudo-IIS subunit 020, used for logical cursor reads (a logical cursor read knows about the WCS and can return image pixel coords, and can use the keyboard or mouse to trigger the cursor read). When a cursor read is initiated the mouse is grabbed and moved into the IMTOOL window, and the regular 2 Hz "plus" cursor becomes an 8 Hz circular cursor, with the rapid blinking intended to indicate to the user that a cursor read is in progress (there is no other indication). A key or the left mouse button (if aliased to a key) is used to terminate the cursor read, at which time the cursor value is returned to the client program, the regular IMTOOL cursor is restored, and the mouse position is restored to what it was before the cursor read began (usually a different window). Sampling and frame buffer coordinate cursor reads are also supported. 2. To the DISPLAY package I added a new routine IMDRCUR, used to read the logical image cursor of the named device (a lower level routine imdrcuro is used for multiple reads on an open device). Since the new routine needs to be called from the CL for a cursor read, the display package library was exported to lib$libds.a. Note that these new routines are temporary and will go away in the future, but not until the new display interfaces are in place. 3. Added a C binding routine c_imdrcur to LIBC. 4. In the CL, modified the query code in modes.c to call c_imdrcur to satisfy a physical image cursor read. Note that the image cursor (stdimcur) may still be redirected to either stdgraph, the terminal, or a list file. In the future, image cursor reads will be performed in cursor mode, using the (currently nonexistent) stdimage kernel to access the physical device. 5. The default value of the environment variable "stdimcur" was changed from "text" to "stdimage", but only on Sun/IRAF for the moment, since people running IRAF on other systems are likely to be accessing a display device that does not yet have cursor input. reset stdimcur = stdimage To use the new image cursor facilities, make sure that "stdimcur" is set to "stdimage", and then type "=imcur", or run any program which reads the logical image cursor, e.g., lists.rimcursor or apphot.*. (6/2) -------------------------- All development systems updated. (6/2) unix/sun/gterm.c Added a new function key F7 (to go with F8 and F9 which are already used). This key toggles the graphics between fullscreen mode and some other size window. (6/5) unix/sun/imtool.c Added multiple cursor marker types (the marks drawn at the cursor position when a cursor read is terminated). The 'Cursor mark' entry was deleted from the frame menu and replaced by a choice option in the setup panel. The choices are None, Circle (the cursor pixrect), Cross, and Square. The default is Square. Circles are the most visible, Squares are modest and unobtrusive, and Crosses are real small. (6/5) dev/graphcap Added a couple of new device kernel parameters for the image display devices. LC, if present, indicates that the display server supports the new logical cursor operation, described under the IMTOOL revision of 5 June. This parameter was added to all IMTOOL entries in the system graphcap file. A second parameter BS specifies whether the device is byte swapped. (6/7) sys/mkpkg Added an entry for the new library LIBDS. (6/7) pkg/images/tv/display/mkpkg pkg/images/tv/display/iishdr.x pkg/images/tv/display/iisio.x pkg/images/tv/display/iispio.x pkg/images/tv/display/iisrcr.x pkg/images/tv/display/iiswnd.x pkg/images/tv/display/imdrcuro.x pkg/images/tv/display/imdrcur.x pkg/images/tv/display/imdgetwcs.x 1. Modified the DISPLAY read cursor code to add support for cursor reads to the standard IIS device with no LC (logical cursor) operation at the server level. The cursor read sequence is very similar to that for a LC read with IMTOOL, i.e., - Enable cursor blink (the shape does not change in this case). There is currently no prompting other than the blinking cursor. - Enter a loop (raw mode ukey read) waiting for the user to type a key on the *terminal keyboard* to signal the end of the cursor read. If the key is : the : is echoed and a string value may be entered. If the key is ctrl/z or ctrl/d EOF is returned as the cursor value. - When a key is typed to terminate the cursor read, IIS cursor blink is turned off, and a small square mark is draw at the position of the cursor, by overwriting the pixels in the image frame buffer (the graphics overlay is not used). No marker type options are provided for the IIS. The marker is displayed with z=1 pixels, i.e., white with a negative transfer function, or black with a positive transfer function. While in "cursor mode" (not the normal cursor mode, which isn't implemented yet for =imcur) the following keys are special: ctrl/f display next frame (N' = N+1) ctrl/r display prev frame (N' = N-1) ctrl/[dz] EOF The same keys are recognized by IMTOOL, but in the case of IMTOOL they are recognized at all times, whereas for an IIS cursor read they are recognized only while the cursor is blinking. To invoke cursor mode for the IIS, the user merely types "=imcur", or calls some program such as lists.rimcursor which reads the image cursor, after setting STDIMAGE to an IIS device, e.g., reset stdimage = iism70l If the IIS is on a remote node the system will prompt for the login name and password to be used to access the display on that node. Note that the DISPLAY code generates an "IIS compatible" datastream (similar to a "Tektronix compatible" datastream for graphics terminals), hence anyone who is desperate for interactive cursor readback and doesn't want to wait for the full display interfaces could in principle interface a different device. 2. The DISPLAY program and the TV tasks may now be used to drive the IIS display from a Sun terminal. This feature requires special support since the IIS is configured for a VAX, hence the bytes are swapped relative to the Sun. The CV* programs are not currently supported on Sun/IRAF. (6/9) --------------------- All development systems updated. (6/9) pkg/images/tv/display/sigl2.x pkg/images/tv/display/t_display.x pkg/images/tv/display/display.par pkg/images/tv/doc/display.hlp Modified the DISPLAY program to add support for image scaling via pixel replication, to supplement the bilinear interpolation already provided. This was done by adding a new parameter "order", specifying the order of the interpolator. Order 0 gives pixel replication, 1 gives bilinear interpolation. Other changes were made to ensure that the coordinate system of a greatly expanded image is accurate. The coordinate system used is such that the coordinates [i,j] refer to the *center* of the displayed pixel [i,j]. Since the range of the display window goes from 1 to N, only half of each pixel on the edge of the window is displayed, and the extent of the window is N- (expanded) pixels. This is consistent with the IRAF convention, and preserves the information content of the image, but may not be what is expected. (6/13) pkg/images/doc Edited the EXAMPLES section of a number of these manpages to make the formatting more consistent (they still need work). (6/13) --------------------- Updated all UNIX development systems. (6/13) pkg/cl/builtin.c A CHDIR command to a directory with a name such as 123 would't work unless the directory name string was explicitly quoted. CHDIR was modified to accept an argument of any type, coercing the operand to type string before trying to access it. (6/17) --------------------- Updated all development systems. Started a full bootstrap and recompile of IRAF on tucana (need to do this occasionally to catch compile bugs that creep in). (6/17) unix/os/mkpkg.sh Added an "rm alloc.o" before building the library; this object is the main for a task and should not be in libos.a. (6/17) unix/hlib/buglog.csh unix/hlib/mkiraf.csh unix/hlib/mkmlist.csh Added a "#! /bin/csh" to the top of each script. (6/18) --------- All development systems updated. (6/25) All development systems updated. (6/28) All development systems updated. (7/1) unix/os/alloc.c unix/os/zalloc.c The fix recently made to alloc.c to prevent a user on one node of the network from stealing a device already allocated by a user on another node was fine, but this still left the primitives in zalloc.c, called by iraf programs, unable to determine accurately if the allocation status of a device in a network. The VOS would check to see if the device could be allocated, and if it were allocated to a user on a different node than the node serving the device, the VOS (via zalloc.c) would think that the device could be allocated, then when it tried to actually allocate it, the alloc.e would refuse to do so, causing a confusing error message. Fixing this was not trivial, since the test for network device ownership requires reading the system process table, which requires reading /dev/kmem, which can require root priviledge. The solution was to add a new flag -s (stat) to alloc.e, and modify the code in zalloc.c to execute the alloc.e task to check the device status in the one case where it mattered. (7/7) --------- All development systems updated. (7/14) sys/etc/miireadc.x sys/etc/miireadi.x sys/etc/miireads.x These routines could return more than the requested number of data elements in some cases. (7/25) --------- All development systems updated. (7/27) All development systems updated. (7/28) ============================================================================== 31 July 1988 - the TUCANA complex, a Sun-3 server plus iraf software development workstations, replaces the BSD 4.3 VAX 11/750 LYRA as the master IRAF software development machine. ============================================================================== Did a full file inventory on lyra, looking for junk files to be deleted. vms/hlib/share/common.map - vms/hlib/share/makeshare.cl Modified the makeshare script to delete the large "common.map" file after the shared library has been built. (7/31) LYRA No changes after today. Will be archived automatically when the system is taken down for the final time tuesday. (7/31) CARINA Deleted the entire carina version of iraf and replaced it by the full lyra system. Carina now contains the exact same system as lyra except for the devices and motd files. Hereafter, carina will be used to maintain BSD VAX/UNIX IRAF, and will be maintained as a (sporadically updated) irafx development system. (7/31) TUCANA Tucana becomes the new master development system. Deleted doc, lib, math, noao, pkg, and sys and restored from lyra. Most files are now owned by the responsible programmers rather than by iraf, as on lyra. Diff/merge check of dev, local, and unix. Did a full bootstrap. A full recompile of the entire system will follow later today. (7/31) /u2/sites Moved the extra.v25 stuff to /iraf/extra on carina. Moved everything else to /u2/sites on tucana. (7/31) Moved irafmail facility. Moved sitemail facility. Moved aipsmail facility. Moved vms mail facility. Moved buglog facility. Moved emaildb facility. Moved assorted /local tasks. (7/31) -------------------------- Did a full bootstrap and sysgen of both f68881 and ffpa on tucana. (8/1) dev/vi.ed [VMS] The set/terminal command in the host command used to run VI was modified (by Nigel) to get around a problem with VI that was causing the terminal driver to be left in a funny state - flow control was being turned off or something. The symptom was that after running VI, the user would get into a graphics cursor loop, and the raw mode cursor read would read a great deal of garbage characters (ctrl/s's), causing the cursor mode to get repeated bad cursor reads, beeping the terminal for an extended time. (8/3) vms/boot/bootlib/osfdate.x As an experiment, I changed this to use the file modify date rather than the create date to test when a file was last modified. This may cause problems, as we have found in the past that on VMS, the file modify date is often changed even when the file data is not modified. (8/4) pkg/lists/* Deleted the COLUMNS task. (8/11) ---------------------------- Updated IRAFX@draco. (8/13) vms/gdev/sgidev All the VMS/SGI translators have been modified so they require only an input file name. This fixes the problem of two $F filename expansions (input and output files) causing the submit command from the graphcap DD string to be truncated. (8/15 ShJ) dev/graphcap vms/hlib/sgiqueue.com These files were modified to accomodate the change made to the VMS/SGI translators documented above. (8/15 ShJ) unix/sun/Makefile unix/sun/imtool.c unix/hlib/install Modified these files to add support for separate compilation of GTERM and IMTOOL under SunOS 4.0. In the new operating system, which has shared libraries, GTERM and IMTOOL are just regular programs and there is no "custom suntools" executable. The new sun directory sources and install script will automatically sense the OS version and do the right thing on any version of SunOS. (8/28) unix/boot/spp/rpp/rpprat/deftok.r unix/boot/spp/rpp/rpprat/entdkw.r unix/boot/spp/rpp/rpprat/initkw.r unix/boot/spp/rpp/rpprat/swend.r unix/boot/spp/rpp/rpprat/common unix/boot/spp/rpp/rpprat/defs unix/boot/spp/rpp/rppfor/*.f unix/boot/spp/rpp/mkpkg.sh Added (experimental) support for a new SPP compiler directive, PRAGMA. This is used to advise the compiler about succeeding statements to modify the default behavior of the compiler, e.g., to optimize the code is some nonstandard way. The only pragma currently supported is 'pragma switch_no_range_check', which is used to eliminate the range check in a SWITCH statement in cases where the extra efficiency makes it worthwhile and it can be shown that the switch will always be in range. The keyword `pragma' is treated as data if the pragma is not recognized, so that existing code using this keyword as a variable or whatever will not be affected. (9/5) unix/sun/imtoolrc dev/graphcap Modified the 2D-Frutti entries after discussions with Steve Heathcote. The long (dispersion) axis of the 2D-Frutti is y, not x, as the previous entries assumed, and so the x and y dimensions of imt22 through imt25 entries were interchanged. An additional entry for the largest format of the 2D-Frutti was added (imt28). CN# device alias dimensions imt22 imt2df1x1 imt2df1 128 x 1520 imt23 imt2df2x1 imt2df2 256 x 1520 imt24 imt2df5x1 imt2df5 512 x 1520 imt25 imt2df9x1 imt2df9 960 x 1520 imt28 imt2df9x3 976 x 3040 The current set of frame sizes and aliases for the 2D-Frutti are summarized in the figure above. (9/6 ShJ/dct) sys/fio/fstati.x Added an entry for F_BUFPTR, which seems to have been inadvertently omitted. (9/6) unix/hlib/clpackage.cl unix/hlib/zzsetenv.def Changed all references to 'sdas' to 'stsdas'. (9/6) unix/boot/spp/xpp/decl.c unix/boot/spp/xpp/xppcode.c Increased the size of the string buffer used to store procedure declarations text from 2048 to 4096. (9/19) pkg/images/tv/display/dsulut.x pkg/images/tv/display/t_display.x 1. With the user lookup table option, the buffer for the lookup table was being allocated but never freed. 2. Fixed a typo in a call to pargstr made in an error handler - the pointer ztrans was not being dereferenced. (10/4) unix/hlib/d1mach.f Modified to use the IEEE rather than PDP values (presumably we don't have any software which actually uses these double constants yet). (10/14) pkg/images/tv/display/gwindow.h pkg/images/tv/cv/gwindow.h The offset to the W_IMSECT string was being calculated incorrectly, causing the 4th WCS structure to be overwritten. This bug was only recently detected following addition of some code which looks at all the WCS at shutdown time, and which was expecting to find NULLs in the high numbered, unused WCSs. (10/14) ---------------------------- Updated the IRAFX systems (irafx@draco, carina, tucana f68881/ffpa). (10/14) unix/sun/screendump.c Removed the -s flag from the lpr command in the default R_DISPOSE, as this doesn't work any more under SunOS 4.0 (when writing to a remote node and the link cannot be made, lpr is sending mail back to the user, rendering the option effectively unusable). (10/17) lib/nspp.h sys/gio/nspp/sysint/packum.x Delted the SWAP_MCWORDS definition from nspp.h, and modified packum.x to use the standard definition BYTE_SWAP2 in mach.h. (10/18) sys/libc/csalloc.c This file contained a reference to a nonexistent routine STKCMP, intended for order comparision of buffers on the stack. This has never been used and it is not clear why we need such a routine, so I deleted c_stkcmp and the reference to STKCMP. (10/19) ---------------------------- Begin merge of revisions from SunOS 4.0 and RoadRunner (386i) ports into Sun/IRAF. (10/19) unix/hlib/config.h unix/hlib/libc/spp.h Increased LEN_JUMPBUF from 16 to 64, to accomodate the worst case save buffer size. (19/19). unix/hlib/libc/kernel.h Added a definition of PFI (pointer to function returning int). This is used in a number of OS files. (10/19) pkg/cl/main.c Changed the definition of the variable "cldebug" from int cldebug; to int cldebug = 0; to allow initialization with "adb -w cl.e" to enable debugging. Some systems, including SunOS 4.0, don't allocate storage in the executable unless the value of the variable is explicitly initialized. (10/19) unix/as.i386 + unix/bin.i386 + Created these new directories. (10/19) unix/boot/spp/xc.c 1. Hacked XC to use F77 only to compile Fortran source files, and to use CC for everything else. 2. Added /usr/local/bin to the list of directories to be searched for commands like XPP and RPP. 3. Changed the defined names from "xpp.e" and "rpp.e" to "xpp" and "rpp", since this is how they appear in /usr/local/bin. (These changes originated in the 386i port). (10/20) ------------------- Sysgen-ed tucana (f68881,ffpa) and updated draco as well. (10/20) ------------------- During the period 21-27 October, the NOAO Sun systems were down for the upgrade to SunOS 4.0. The Sun/386i port of IRAF was also completed during this period. Some of the following changes were made as a result of these efforts. unix/boot/mkpkg/scanlib.c Had to add #ifdef i386 #define PORTAR 1 #endif at the top of the file to get include <ar.h> to define the appropriate library format. Also, on the 386i, the code which scans the library has to deal with the following peculiarities: o The first "file" in the archive is a dummy entry containing symbol information; the name field is null, hence the code can skip this entry by checking for archive members with null-string names. o The names of the archive members now have a trailing /, e.g., "file.o/", followed by blank padding. Previously only the blank padding was there. I modified the code to accept either / or blank as the name delimiter. I also added some debug code which prints the name and date of each archive member as the library is scanned, if debug > 1. These changes should be portable to other systems. (10/19) SUNBUG - f77 The command "f77 -c -O file.c" produces the following: Assembler: /tmp/optim.01231.5.s aline 1 : Warning: cannot field update- '.file' not on first line This prevents use of f77 to compile C files, at least on the 386i! (It works if the optimizer is not used). Will have to modify XC to use CC instead. (10/19) unix/hlib/mkpkg.inc unix/hlib/mkpkg.sf.I386 + Added code for case FPU = i386 (not really an fpu), plus a special file list for the 386. (10/19) unix/hlib/cl.csh Added a case for the i386, similar to that for sparc. (10/19) --------------------- Sysgen completed with a half a dozen files with errors, but no executables were linked due to a library conflict with the dummy zsvjmp.s I wrote. (10/20) unix/as.i386/zsvjmp.s unix/as.i386/zzdebug.c Wrote a ZSVJMP.S for the 386i (80386), plus a little test program to make sure it works. (10/20) --------------------- Linked x_system.e and it runs on the first attempt!! (10/20) Start another sysgen - ignore files that didn't compile for now, until we see which executables they prevent from being linked. sys/vops/acht.gx On the 386i, statements of the form "b[i] = a[i]", where B was COMPLEX and A was INTEGER*2, revealed a compiler error in the 386i Fortran compiler (the error was a syntax error in the assembler code input to the system assembler). I decided that assigning an integer*2 to a complex in a straight assignment wasn't a very safe thing to do anyhow, so the generic source was changed to generate "b[i] = complex(real(a[i]),0.0)" instead, whenever B is complex and A isn't. (10/20) sys/vops/amod.gx No changes here, just logging the compiler bug. The code is as follows: do 110 i = 1, npix c(i) = mod (a(i), b(i)) where A, B, and C are integer*2. Once again, the compiler is generating incorrect assembler for this case, causing a "syntax error" from the assembler (evidently, because of the rather restrictive instruction set of the 80386). I am not sure there is anything in IRAF that uses this routine anyhow, so we will try to ignore it for now. (10/20) noao/astutil/pdm/pdmstatistics.x pdmstats.x noao/digiphot/apphot/center/apcentercolon.x apcencolon.x noao/digiphot/apphot/center/aprefitcenter.x aprefitcen.x noao/digiphot/apphot/center/apfitcenter.x apfitcen.x noao/proto/t_mkhistogram.x t_mkhgm.x Shortened the names of the above source files. These will not compile on the 386i, which has a limit of 14 characters for the names of modules in object libraries (which are COFF format libraries from Sys V, hence the 14 char limit). (10/21) unix/hlib/mpkg.sf.I386 Turned off the optimizer for conrec.f, srface.f, pwrzi.f. An apparent optimizer bug was causing declaration of an external which would cause an unsatisfied exernal error at link time. (10/21) pkg/images/iminfo/t_imstat.x Replaced some ==INDEF constructs by IS_INDEF, and took the n=n+1 out of the inner loop, since it isn't needed. (10/21) unix/boot/mkpkg/host.c Disabled the ranlib (library rebuild) on the 386, since it uses COFF type libraries, which don't need to be ranlib-ed. (10/21) unix/hlib/mpkg.sf.I386 unix/as/amods.s + Edited the assembler for the VOPS amods routine (to work around the compiler bug mentioned above) and placed the assembler version in AS and added the file to the special file list for the 386i. (10/21) --------------------------------- Restored IRAF on the ORION complex (Sun-4 plus Sun-3 nodes), now running SunOS 4.0. Booted up the system and sysgen-ed the sparc, ffpa, and f68881 binaries. (10/23-25) --------------------------------- Following a period of outage due to hardware problems, the TUCANA complex came back on the air, also under SunOS 4.0. Moved the ffpa and f68881 binaries over from orion, and udpated the few files that had been modified. (10/27) sys/ki/kishownet.x ki_shownet, and hence the task NETSTATUS, now checks for name collisions between node name aliases and the system environment list, and prints a warning message if the same name is found in both name spaces. (10/28) unix/sun/gterm.c Several users pointed out that if enough GTERM windows are opened up, the system will run out of some critical resource and it won't be possible to open any more windows (for some reason this did not happen until we upgraded to SunOS 4.0). This was traced to the system actually running out of /dev/win* entries. According to /etc/pstat -i, GTERM was using 11 entries, whereas SHELLTOOL was using only 2. This is somewhat reasonable since GTERM does provide more windows, but a factor of 5 is too much. It turns out that things like the setup panel and "pause" panel in GTERM were using window descriptors, even when not in use. GTERM was modified to create the windows each time they need to be used, reduing the number of window descriptors used from 11 to 5. (11/2) sys/fio/mkpkg sys/fio/close.x sys/fio/filbuf.x sys/fio/ungetci.x + The hitherto little used pushback feature of FIO has come into use recently, leading to the following bugs being fixed. 1. filbuf.x did not permit pushback on a string or spool file, although it worked for ordinary files. 2. A bug in close.x was causing fcanpb (cancel pushback) to be called with the wrong file descriptor. 3. Added a new routine UNGETCI to complement the already existing routine GETCI. (11/7) sys/memio/salloc.x Found and fixed a horrible bug, while testing the QPOE code on the 386i. The alignment logic in the stack allocation code (SALLOC) had an error which would cause it to work for types up to the size of an int or real, but which would cause misaligned buffers for types double or complex. The MALLOC code was correct, however. (11/8) pkg/cl/builtin.c Added a new builtin "d_m" which prints some information on memory usage, i.e., the dictionary and stack. (This is like the old d_d, except that since it is not built into the gramar with lookahead, the incomplete input '>>>' nonsense is avoided). (11/8) unix/hlib/libc/make.h - Deleted this obsolete file, a make template used back in pre-mkpkg days when makefiles were used to maintain IRAF. (11/10) ----------------------- Snapshot of development system sent to CFA. (11/14) unix/os/irafpath.c Added a #ifdef i386 case so that irafpath() would be able to find bin.i386. (11/14) unix/boot/mkpkg/host.c Added support for IRAFULIB (a user defined private library) to the $checkout and $checkin directives. For example, in $checkout libex.a lib$ if file libex.a is found in IRAFULIB, that version is checked out, rather than the one in the system directory lib$. (11/15) sys/fio/fseti.x sys/fio/fstati.x Added the case F_FILESIZE so that low level systems programs which extend files by direct calls to the kernel routines can update the file size in the FIO file descriptor. (11/17) unix/hlib/mkpkg.sf.S34 Added a special file list for SunOS 3.4, with the SunOS 4.0 files thrown in so that it will work for both systems. (11/18) unix/boot/bootlib/osfiletype.c Added ".fits" and ".mip" as known "source file" extensions, i.e., file types not deleted by rmbin, and movable between machines with wtar -o. These are really binary file types, but they are closer to text in their usage. (.mip is something just invented to denote a machine independent file of some type). (11/18) --------------------------------------- Updated tucana.ffpa(Sun-3/OS4.0), pegasus(Sun-386i/OS4.0), and serpens(Sun-3/OS3.4). (11/17-18) pkg/cl/edcap.c Removed a pointless restriction to 10 characters on the length of the editor name. (11/19) unix/gdev/sgidev/sgidispatch.c Fixed an automatic coredump if called with no arguments. (11/22 SRo) sys/imio/db/idb.h sys/imio/db/idbfind.x sys/imio/db/idbfind.x sys/imio/db/idbdelf.x sys/imio/db/idbaddf.x Modified these routines to automatically truncate the keyword passed in by the caller to 8 characters, in accord with the FITS conventions used to format user keywords. (11/28) ------------------------ Updated orion. (11/28) sys/imfort/db/impstr.x In the call to amovc, added a 1 to the computed offset of the output string; numeric values were being output shift one space to the left of what the FITS format requires. (12/2) pkg/system/directory.x Removed an extra argument from a call to getline(). (12/2) ------------------------ Updated tucana (Sun-3, f68881,ffpa), orion (Sun-4, Sun-3 nodes), serpens (Sun-3 under 3.4, f68881, ffpa), pegasus (386i) and carina (BSD/VAX). (VMS/IRAF update to follow tomorrow). (12/2) vms/boot/bootlib/osfiletype.c Added ".mlb" to the list of known binary file types, and ".fits" and ".mip" to the list of known "source" file types. (12/3) vms/hlib/share/mkpkg vms/hlib/share/irafcom.x 1. Modified irafcom.x to add a ,QUAD to the entry for the MEM psect. 2. Added an entry "mkpkg x_mkshare" to automatically build the mkshare executable, which is needed before the shared library can be built. (12/4) VERSION 2.7 EXPORT