============== PATCH 3 CHANGES (SUMMARY) ========================= DATA TRANSPORT MECHANISMS / DISTRIBUTED PROCESSING The major enhancement that was implemented in the Khoros system as of Patch 3 is that of data transport / distributed processing. Patch 3 to Khoros implements a "beta" version of data transport / distributed processing; the capability will be refined, improved and extended in future Khoros releases. The data transport and distributed processing capability may be taken advantage of either from the cantata visual language, or from individual command line executions of Khoros programs. Chapter 1 of the Khoros User's Manual now contains a section explaining the use of data transport and distributed processing. Chapter 1 of the Khoros Programmer's Manual explains how to write programs that will take advantage of the data transport and distributed processing capabilities; the section on vgparms in Chapter 8 of the Khoros Programmer's manual details the large number of new routines that must be used in order to do so. Special thanks to Rob Armstrong, Tait Cyrus, Dave Forslen, Chuck Hanson, Al McPherson, John Salas, and Kurt Zeilenga for their helpful input and feedback on the issues involved in data transport and distributed processing. KRAFTSMAN To support the creation and use of Toolboxes (introduced in Patch 2) for adding programs to the Khoros system, the beta version of the "kraftsman" program is now available. "Kraftsman" partially automates the process of toolbox creation, and decreases the amount of effort neccessary to create a new toolbox. Future releases of Khoros will include more sophisticated versions of the "kraftsman" program. INCREASED SUPPORT FOR NEW ARCHITECTURES: Intel 386/486 running Interactive Unix (thanks to Maurizio Davini) Luna 88K running Mach 2.5 (thanks to Ping-Kang Hsiung & Hideo Noro) DG Aviion running DG/UX 4.3 (thanks to Bob Clark) DOCUMENTATION Because of these changes made for Patch 3, the documentation has been updated in a number of chapters. Please see the section on DOCUMENTATION changes, below, for those sections of the Khoros manual that should be reprinted. ============== PATCH 3 CHANGES (INDIVIDUAL) ==================== Below is a summary of selected individual changes that have taken place since the third patch to Khoros 1.0. ~~~~~~~~~~~~~~~~~~~~~~~~~ VIPL LIBRARY ~~~~~~~~~~~~~~~~~~~~~~~~~ Routine : All routines in input_create2D Fix/Modification : Added trigger files to .panes and .progs --------------------- Routine : read/write routines Fix/Modification : all read/write routines now correctly use kopen() so as to use the new data conversion routines and thus the data transport mechanism. --------------------- Routine : v1bgamut / lv1bgamut() Fix/Modification : Added capability to sort output maps; added missing pointer initialization. --------------------- Routine : vblse Fix/Modification : Showed a memory leak if a large number of iterations were started and the virtual process size was watched; the memory leak was actually in lvfft, where it was fixed. --------------------- Routine : vconvert Fix/Modification : Changed the command line and GUI pane so that the -n and -s flags are optional. --------------------- Routine : vdiv / lvdiv() Fix/Modification : Fixed bogus pointer arithemtic for VFF_TYP_COMPLEX case. --------------------- Routine : vdyth /lvdyth() Fix/Modification : Documentation improved and kfree() added --------------------- Routine : vexpwarp / lvexpwarp() Fix/Modification : This new routine performs warping using the expression parser to obtain the coordinate mappings --------------------- Routine : vextcent Fix/Modification : main driver did return(0) instead of exit(1) --------------------- Routine : vextract Fix/Modification : The -i1 command-line description was incorrect. --------------------- Routine : vfft / lvfft() Fix/Modification : Had several memory leaks which were fixed, also had man pages updated. --------------------- Routine : vgbox / lvgbox() Fix/Modification : M_PI was incorrectly used, instead of the correct XV_PI Changed to use kfmod() instead of fmod(), since not all machines have an fmod(). Fix Provided By : Tait Cyrus --------------------- Routine : vkmeans / lvkmeans() Fix/Modification : Now produces output that is compatible with the spectrum program (interactive classification application). The command line and GUI pane were changed. Also, the library call was changed. vkmeans pane closely reflects vquant's pane. --------------------- Routine : vmapdata / lvmapdata() Fix/Modification : Documentation improved and correct calls to kfree() added. --------------------- Routine : vmatch / lvrmatch() Fix/Modification : lvrmatch() failed to return(1) on success. --------------------- Routine : vpolygon / lvpolygon() Fix/Modification : Removed bogus code in driver, cleaned up use of variables, and included Bruno Orsier's suggestions for drawline(). Fix Provided By : Bruno Orsier --------------------- Routine : vpad Fix/Modification : main driver did return(0) instead of exit(1) --------------------- Routine : vpostscr / lvpostscr() Fix/Modification : When the output of vpostscr is piped to a file, the resulting Postscript often has the %%BoundingBox and %%Pages commands on a single line. This causes an error in some Postscript devices and is ignored by others. Also, it could not print large images of type BIT; fixed to print the images one row at a time. --------------------- Routine : vquant / lvquant() Fix/Modification : Now produces output that is compatible with the spectrum program (interactive classification application). --------------------- Routine : vstereo / lvstereo() Fix/Modification : lvstereo() failed to return(1) on success. Fix Provided By : Tait Cyrus --------------------- Routine : vstats / lvstats() Fix/Modification : The lvstats program gave some incorrect answers when using a masking image for all types; specifically, the variance, std. deviation, and low were incorrect. --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ DSPL LIBRARY ~~~~~~~~~~~~~~~~~~~~~~~~~ Routine : All routines in input_create1D Fix/Modification : Added trigger input files to all *.panes and *.progs --------------------- Routine : dfiltbp Fix/Modification : main driver did return(0) instead of exit(1) --------------------- Routine : dfiltbs Fix/Modification : main driver did return(0) instead of exit(1) --------------------- Routine : dfilthp Fix/Modification : main driver did return(0) instead of exit(1) --------------------- Routine : dfiltlp Fix/Modification : main driver did return(0) instead of exit(1) --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ VUTILS LIBRARY ~~~~~~~~~~~~~~~~~~~~~~~~~ Routine : machtype() Fix/Modification : redesigned the method of defining machine types and created a new structure with more order information. --------------------- Routine : readimage(), writeimage(), and associated routines. Fix/Modification : a re-write of the data transport mechanisms and data conversion routines was done for the following goals: 1) so that it will be easier in the future to port to new architectures 2) so that CRAY port was able to be completed, involving full support for reading/writing all data types and VIFF headers since a conflict in word size was involved 3) greater efficiency --------------------- Routine : freeimage() Fix/Modification : Added zeroing of the header right before freeing the header struct. This protects the programmer against trying to use an already free'd image! --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ NUMERICAL ANALYSIS ~~~~~~~~~~~~~~~~~~~~~~~~~ Routine : most of the numerical analysis routines Fix/Modification : previously freed memory incorrectly --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ VGPARM LIBRARY ~~~~~~~~~~~~~~~~~~~~~~~~~ Routine : getarg_user() Fix/Modification : There was a bug in the gparm prompting mechanism; if a user entered \n it would not correctly read the data, but rather it read the 'n' as an integer which suffered from byte order problems. This means that it worked on the DEC's since the character was stored in the low order of the int, but it would not work correctly for SUN's since the character was stored in the high order of the int. Also, when the "\n" was changed to a real newline, the while loop interpreted this as the end of line and would ignore the rest of the input line. --------------------- Routine : vreplace_string Fix/Modification : There was a bug when a string is sent in to be used for the new string instead of mallocing the new string. --------------------- Routine : vstrstr Fix/Modification : New routine is the Khoros version of strstr(). --------------------- Routine : VStrncpy() Fix/Modification : New routine is the Khoros version of strncpy(), checks for NULL ptrs and mallocs for you. --------------------- Routine : VStrncmp() Fix/Modification : New routine is the Khoros version of strncmp(), checks for NULL ptrs and mallocs for you. --------------------- Routine : VStr3cat() Fix/Modification : New routine cats 3 strings together, checks for NULL ptrs and mallocs for you. --------------------- Routine : VStrlen(), VStrcmp() Fix/Modification : a bug in the NeXt gcc compiler caused ("file" == NULL) to be TRUE. macros had to be redefined to use "!=" to get around this problem. ~~~~~~~~~~~~~~~~~~~~~~~~~ XVFORMS LIBRARY ~~~~~~~~~~~~~~~~~~~~~~~~~ Fix/Modification : When using the Motif Window manager, forms, subforms, browsers, and pop-ups such as errors, warnings, etc. may now be closed with the window manager's menu. Previously, an attempt to use the mwm menu to close these windows would result in an X error, sometimes a crash. --------------------- Fix/Modification : A rare end case allowed the database to grow too big for the space allocated, causing the calling routine to core dump. --------------------- Fix/Modification : The file browser will re-set the scroll bar to the top every time the directory is changed. --------------------- Fix/Modification : When calling xvf_change_input() with a change mode of xvf_optsel_chng, there would be a problem if you passed a value of "1" when the optional box was already on, or if you passed a value of "0" when the optional box was already off. The optional box would then reflect the opposite (incorrect) value; ie, it would look "off" when it was really on and vice versa. --------------------- Fix/Modification : New naming conventions for toplevel widgets used by cantata, so that cantata will now work with journal playback and concert --------------------- Fix/Modification : Unreachable statement at the end of xvf_get_line_type() Fix Provided By : Tait Cyrus ~~~~~~~~~~~~~~~~~~~~~~~~~ XVDISPLAY LIBRARY ~~~~~~~~~~~~~~~~~~~~~~~~~ Routine : xvd_update_image() Problem : If the user passed in the original image to be updated, then xvd_update_image() routine didn't look to see if the currently displayed image was the same as the "new" image. It then freed the original xvdisplay->image. This ended up freeing the original and update image since they were the same, causing no end of grief. Fix Provided By : Mathew Yeates / Mark Young --------------------- Routine : xvd_update_region() Problem : Failed to return(True) on success Fix Provided By : Tait Cyrus --------------------- Routine : xvd_update_pixel() Problem : Failed to return(True) on success Fix Provided By : Tait Cyrus --------------------- Routine : xvd_update_region() Problem : Occasionally, when a pixel was unallocated, it would incorrectly re-allocate the entire image; now, simply allocates the single pixel that it was supposed to. --------------------- Routine : xvd_update_pixel() Problem : Occasionally, when a pixel was unallocated, it would incorrectly re-allocate the entire image;now, simply allocates the single pixel that it was supposed to. --------------------- Problem : There was a display problem where the image being displayed on the DEC 5000 PXG Turbo, 24 bit display, was byte swapping and reversing the pixels, causing problems with displaying 24-bit images. This has been fixed and should work for almost all 24 bit displays. --------------------- Routine : xvd_update_xvdisplay() Problem : was incorrectly freeing the newly updated images rather than the old ones. --------------------- Problem : If you created an Image widget, then deleted it and created a new one, you would get an X protocol error. This was due to a bug in the XImage widget which was using XFreeGC() instead of XtReleaseGC(). The Xt GC caching mechanism would return the deleted GC since it was still resident in its GC cache. This was causing the next Image widget to crash with an X protocol error since it was using a previously deleted GC. --------------------- Problem : If a Pan Box was up and the Image widget was destroyed, the corresponding Pan Box was not deleted. If the user tried to delete it or use it, an X protocol error would result. --------------------- Problem : If, after creating the XImage widget, the image was large enough to require a Pan Box, the programmer could not use SetValues to turn the Pan Box off. The problem was that the XImage widget's SetValue() routine was ignoring this request. --------------------- Problem : Some people found it annoying that the Pan Box would come up before the XImage Widget. Now the Pan Box will only be mapped when the main image window is mapped. --------------------- Routine : xvd_update_XXX() Problem : after calling any of these routines, the image was not updated until after the next call to xvf_run_form(). Normally this is not a problem unles you need to update the image by sections. This can be accomplished by calling xvf_clean_event_list() after the update call. The problem is that xvf_clean_event_list() has the side affect of discarding all unprocessed user events such as ButtonPress, ButtonRelease. The other problem with this routine is that it does not record any of these events when creating a Journal Session, which may cause the routine to incorrectly playback the original session. Because of these side affects, the xvf_clean_event_list() routine has been superceded by the xvf_sync() routine. --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ XVGRAPHICS LIBRARY ~~~~~~~~~~~~~~~~~~~~~~~~~ Routine : compute_contours() Problem : Cray compilier gave an error for the following (l.3117) register Coord *pt0, *pt1, *pt2, *pt3, *contours, box[4]; It correctly stated the it cannot put box[4] into a register. Changed it to: Coord box[4]; register Coord ... --------------------- Routine : X3D_set_X11(), X3D_set_HPGL(), X3D_set_impress(), X3D_set_postscript() Problem : failed to return(TRUE) on success Fix Provided By : Tait Cyrus --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ FILE_FORMATS LIBRARY ~~~~~~~~~~~~~~~~~~~~~~~~~ Routine : all applicable file format routines Fix/Modification : all routines now correctly use kopen() so as to use the new data conversion routines and thus the data transport mechanism. --------------------- Routine : vraw2viff / read_raw() Fix/Modification : Improved performance for simple formats --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ PUBLIC DOMAIN LIBRARIES ~~~~~~~~~~~~~~~~~~~~~~~~~ Routine : DECLAR4 in the public domain TIFF library Fix/Modification : 7th parameter changed to type Double, as float caused a compile error on the DG Aviion Fix Provided By : Bob Clark --------------------- File : machdep.h in the public domain TIFF library Fix/Modification : Added support for the DG Aviion Fix Provided By : Bob Clark --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ ANIMATE ~~~~~~~~~~~~~~~~~~~~~~~~~ Fix/Modification : No longer has the input file (or basename) required. Can be started up without input. --------------------- Fix/Modification : Core dumped when the master form was glyphed. --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ XPRISM2 & XPRISM3 ~~~~~~~~~~~~~~~~~~~~~~~~~ Fix/Modification : Found 2 places where memory that had not been set was being freed, and one place where memory was being over-written. This resulted in a number of bizarre bugs with various and sundry reports, one in particular involving an incorrect postscript output of a bar graph. --------------------- Fix/Modification : Writing PostScript directly to printer in xprism2/3 did not work at on on the HP9000/s300 and s700; therefore, a print command was added to xprism2/3 on the output panes so that users could specify line printer commands other than "lpr". --------------------- Fix/Modification : When inputting a 3d data file with XYZ triplets and then saving it with an answer file, the number of rows was not remembered. --------------------- Fix/Modification : in xprism2, attempting to change the color of the XAXIS or any other box below it would cause the name of the color will be showed in the wrong place. --------------------- Fix/Modification : in xprism3, could not change the color of the ZAXIS numbers. ZAXIS numbers would change to be the same color as YAXIS numbers when the YAXIS numbers were changed. --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ WARPIMAGE ~~~~~~~~~~~~~~~~~~~~~~~~~ Fix/Modification : When called from the cantata main menu, warpimage would not come up, and cantata would segmentation fault on the SUN4 architecture. This was actually a bug in the xvforms library. --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ PREVIEW ~~~~~~~~~~~~~~~~~~~~~~~~~ Fix/Modification : When the UIS file input had an empty [-F, -E] definition, preview would fail with an X Protocol error. --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ EDITIMAGE ~~~~~~~~~~~~~~~~~~~~~~~~~ Fix/Modification : LUT, Pseudo Color, Print Pixels, etc. were not providing their children widgets with unique names; this resulted in an imperfect functionality with journal record/playback. The widgets now have unique names, so that journal record and playback will work properly with editimage. The journal record file found in $KHOROS_HOME/repos/journals/editimage.jp has been re-done. --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ CANTATA ~~~~~~~~~~~~~~~~~~~~~~~~~ Fix/Modification : There was a problem when you typed the name into an input field, then the DAV should always have been TRUE, but cantata cleared those fields, preventing it from scheduling the glyph to be run. --------------------- Fix/Modification : Opening and immediately closing a glyph would sometimes cause it to turn MODIFIED. Happened with any glyph if the ALWAYS SHOW GLYPH attribute was turned on in the workspace. --------------------- Fix/Modification : (Reported by neal@twisto.compaq.com (Gordon Neal)) When a flow digram was used (like example1.Z) in the workspace and the edit command was used to input a new flow, the browser locked up after it merged the old workspace with the new file. This was a Sun3 optimizer bug that was fixed by changing the sun.cf file to recompile using -O2 instead of -O3. --------------------- Fix/Modification : When you tried to run a workspace using the RUN button, the glyph "switch" without the trigger would fail; if you ran the workspace using the glyph's RUN button, it would execute successfully. --------------------- Fix/Modification : When you execute a procedure glyph using the RUN button, it should have executed all the glyphs inside the procedure glyph, but didn't. --------------------- Fix/Modification : When you restored a workspace, the temporary files were not being restored. --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ GHOSTWRITER ~~~~~~~~~~~~~~~~~~~~~~~~~ Fix/Modification : Crashed on the NeXt architecture. ~~~~~~~~~~~~~~~~~~~~~~~~~ COMPOSER ~~~~~~~~~~~~~~~~~~~~~~~~~ Fix/Modification : Crashed on the NeXt architecture. ~~~~~~~~~~~~~~~~~~~~~~~~~ TOOLS ~~~~~~~~~~~~~~~~~~~~~~~~~ Routine : installit Fix/Modification : Incorrectly prompted to enter "-Dpcc" as bootstrapflags for Convexes running ConvexOS 8.1, instead of "-pcc" Fix Provided By : Tait Cyrus (cyrus@cvxcs.convex.com) --------------------- Routine : installit Fix/Modification : Would die when the correct "-pcc" was entered for bootstrapflags of Convexes running ConvexOS 8.1, because the variable was not surrounded by quotes Fix Provided By : Tait Cyrus (cyrus@cvxcs.convex.com) --------------------- Routine : installit Fix/Modification : Added support for the DG Aviion --------------------- Routine : kmakeall, ksrcconf, vmanwhatis Fix/Modification : had problems when used with toolboxes having multiple architectures installed --------------------- Routine : assorted tools, including kinstall Fix/Modification : Changes the set path to be . $KHOROS_HOME/bin $path {defaults paths} such as /bin etc; among other issues, this solves the problem of the EDITOR specified not being found when an editor other than "vi" is used. --------------------- Routine : vman Fix/Modification : Did not check to make sure cat{1,3,n} were read and writeable. Changed vman to check the cat directories. --------------------- Routine : imkmf Fix/Modification : When using imkmf -P, there was sometimes a problem trying to create an Imakefile for a directory. --------------------- Routine : klnfile Fix/Modification : klnfile -P would core dump. --------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ CONFIGURATION FILES ~~~~~~~~~~~~~~~~~~~~~~~~~ What : $KHOROS_HOME/repos/config/imake_conf/df.cf Fix/Modification : added df.cf config file for the Data General Fix Provided By : Bob Clark, Tom Sauer -------------------- What : $KHOROS_HOME/repos/config/imake_conf/sgi.cf Fix/Modification : Added ifdef's to the sgi.cf file for the DefaultCCOptions of OS 3.3.2 (-Wl,-s) and 4.0 (-cckr -Wl,-s). Fixed it so that it installs shell scripts as executable. -------------------- What : $KHOROS_HOME/repos/config/imake_conf/sony.cf Fix/Modification : New configuration file (old one was deleted?) -------------------- What : $KHOROS_HOME/repos/config/imake_conf/i386.cf Fix/Modification : Modified to integrate Intel486 running Interactive Unix Fix Provided By : Maurizio Davini, combined with old i386.cf file -------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ MISCELLANEOUS ~~~~~~~~~~~~~~~~~~~~~~~~~ What : machdefs.h, machtype() Fix/Modification : management of machine type and machine dependancies re-written with the use of MachineDefs structures for increased efficiency, clarity, and easier modification -------------------- What : $KHOROS_HOME/repos/config/imake_conf/Khoros.tmpl Fix/Modification : added support for the Data General Fix Provided By : Bob Clark -------------------- What : $KHOROS_HOME/include/xvparser.h Fix/Modification : Ifdef'd out reference to expm1 and log1p when on the Data General -------------------- What : vdefines.h Fix/Modification : #ifndef LOCK_SH #define LOCK_SH F_LOCK #endif This was done because sysV does not know about shared file locking, "LOCK_SH". So, we define the shared file locking to the regular file locking on the sysV machine. -------------------- What : KHOROS_CONTRIB Fix/Modification : Has been eliminated from the Khoros system. Full migration to the use of toolboxes is expected. -------------------- What : $KHOROS_HOME/src/Imakefile Fix/Modification : Added a new clean statement so that bootstrap is also cleaned when a make clean is done. The tag "bootstrap::" was added so that you can do a "make bootstrap" to just make and install the programs in the bootstrap directory. -------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~ DOCUMENTATION (NOTE: PLEASE RE-PRINT CHAPTERS LISTED BELOW). ~~~~~~~~~~~~~~~~~~~~~~~~~ Chapter : Preface Vol : N/A What : Appendix B was listed as "Changes", while Appendix C was listed as "Imake Symbols and Variables". In fact, Appendix B is "Imake Symbols and Variables" - there is no Appendix C. Acknowledgements have been updated. -------------------- Chapter : Glossary Vol : N/A What : New definitions added. ========= Changes to Volume I, Khoros User's Manual =========== Chapter : Chapter 1 ("Getting Started") What : Explanation of the use of data transport & distributed processing. -------------------- Chapter : Chapter 2 ("Cantata") What : Explanation of the use of data transport & distributed processing. ========= Changes to Volume II, Khoros Programmer's Manual =========== Chapter : Title Pages Vol: Volume II (Khoros Programmer's Manual) What : When Volume II chapter 0 (Table of Contents) was printed, the first title page said (correctly) "Programmer's Manual", but then another title page comes out (page "ii") which said (incorrectly) "User's Manual". -------------------- Chapter: Chapter 1 ("Writing Programs") What: Added description of -c (Cycle selection), -A (AnsInfile) and -Z (AnsOutFile) UIS lines -------------------- Chapter: Chapter 2 ("User Interface Specification") What: Added description of -c (Cycle selection), -A (AnsInfile) and -Z (AnsOutFile) UIS lines -------------------- Chapter: Chapter 7 ("Examples and Troubleshooting") What: Example of program using data transport / dist. processing -------------------- Chapter: Chapter 8 ("Libraries") What: Section on the VGPARM library updated to list all new routines for use with data transport / dist. processing, string manipulation, and other convenience routines -------------------- Chapter: Chapter 9 ("Configuration Management") What: Updated and improved, both in general and with respect to the "kraftsman" program -------------------- Chapter: Chapter 10 ("Installation Guide") What: Updated -------------------- Chapter: Chapter 11 ("Kraftsman") What: New Chapter explaining use of kraftsman --------------------