Oct 16th 2001 ivtools-0.9.7 ** last release before 1.0 -- if things are ok with this distribution I will simply roll over the version number ** - fix the pnmtopgm script to do the right thing for PBM files. - better error messages when someone tries to open an idraw format PostScript file that has ColorRast objects in it. These are rasters that are color-printer ready, and do not conform the idraw format. A future version upgrade of this format will include support for these. As an aside, these ColorRast objects cannot be filtered through pstoedit either (pstoedit -f idraw), because they have separate sources for R, G, and B. A future pstoedit back-end for the ivtools drawtool format would be needed to make this work instead, one that relied on the ghostscript mechanism for dumping out rasters to PNG files. - modifies the pstoedit import command lines to always use a temporary file for output with a %d indicator to support multi-page files. - add a StreamObject to AttributeValue/ComValue. This consists of a pointer to a ComFunc to use in getting the next value out of a stream, and local data storage to indicate current position. Sort of a procedural iterator. - add streaming mechanism to comterp, that leverages the ".." iterate and "**" repeat operators. Now arbitrary expressions can be composed where each operator is overdriven (repeatedly executed) by one or more of its arguments. Some examples: s1=0..10 # stream that iterates from 0 to 10 s2=0..10*3 # stream that iterates from 0 to 30 in steps of 3 next(s1) # returns 0 on first call, incremented by 1 each call after next(s2) # returns 0 on first call, incremented by 3 each call after A more complicated example counts to 4 Meg without using megs of memory: s=1..pow(2 22) x=0 while(next(s) x++) An example for computing a ramp step-function for a look-up-table: 0..255-0..255%10 Overdriven streaming operators were first presented here: "Command Language for Developing Real-Time Signal and Image Processing Applications", S. Johnston, R.C. Fitch, SPIE Proceedings on Automated Inspection and High Speed Vision Architectures II, vol. 1004, Nov. 1988. - fix != comparison of symbols. Found this problem when experimenting with the new stream objects. A while loop terminates on either 0 or nil, but a stream terminates with only nil. To differentiate nil from 0 I looked at the return type: s=0..255 while(`type(v=next(s))!=`type(nil) print("%d\n" v)) This didn't work without this change. - adds partial-string (:n) and symbol (:sym) comparison to the rest of the equality operators (!=, >, <, >=, <=). - add :nilchk option to terminate the while loop upon nil (instead of nil and zero). - make the seq operator (;) post-evaluated so that this works: s=0..100;while(v=next(s) print("%d " v) :nilchk) Without post-eval the stream on the left would overdrive the ";", which just didn't work. - more work on new stream and list concepts in comterp. Now ",," is the stream concatenator, and "," remains the list concatenator. stream(lst) converts a list to a stream, and list(strm) will converts a stream to a list (as soon as I debug it). - makes list(strm) work. Now you can convert streams to lists and lists to streams (with stream(lst)). - equate lists to arrays in all the API of ComValue, and make type(strm) return ListType instead of ArrayType. - fix problem with interacting with the KDE X server. Seems all other X servers allow a negative "length" argument, which causes the server to index backwards from a data pointer. This was not documented in the man pages, so the KDE folks "fixed" the problem by changing the code instead of the man page. So I have to fix the code as well. - Now the streams are really flowing. The ",," concatenation operator works for the most part, allowing for the composition of complex streams like this: s=0,,1,,2,,3**3,,4+100 which generates the sequence: 100 101 102 103 103 103 104 nil Probably a few minor issues left to clean up. So far I've discovered: 0,1**2 works partially as expected, generating a {0,1} followed by a {0,1}. But then it generates a {0,nil} repeatedly, never terminating. Hmmmm. - make ",," concat operator lower priority than the "," tuple operator. This means these two examples behave in a similar fashion: s=1,2,,3 # yields {1,2} followed by a 3 s=1,2,3,,4 # yields {1,2,3} followed by a 4 and you can construct 2-d structures in a pleasing way: s=1,2,3,,4,5,6,,7,8,9 # 3x3 grid - ensure streaming doesn't happen on post-evaluated commands. - create a hidden :strmlst argument to the list command, to have a way at looking at the AttributeValueList associated with a stream object. - NetBSD compile fix - fix the AttributeValueList constructor so it does a list copy as it advertises. - evaluate symbols when popping them off the stack to build a stream object. This may not be desirable in the long run, and it really wasn't causing any problem to delay this that I know of. Hmmm... - make the default value of the second "at" argument zero instead of nil, so that if nil is supplied it can be used to return nil (to terminate stream handling). - set up to "stream" over an AttributeList. - ensure ComValue::is_true() returns true for StreamType that exists. - touchups to glyph-based graphics (Graphic31). There were difficult-to-decipher problems in allocate/requisition which clipped graphics by one row or one column. So I just padded things a bit. This is only used in the addtool (custom toolbutton) mechanism of comdraw. - revert to using "r" instead of "r+" in fopen calls for graphics files to be read in. I had added "r+" when gcc-3.0 needed it to allow rewinding. Now gcc-3.0.1 has that fixed, and "r+" got in the way of read-only access (CD-ROMS). - set "." dot operator to 1) create AttributeList's as needed on the fly, and 2) create an emtpy AttributeList when a second argument is not given. For example: a.b.c.d.e.f=100 # this now works, without having to create # all the intermediate AttributeList's x=dot(z) # creates an empty AttributeList z which is # can be accessed through the variable x as well. - go through all the math commands to ensure they return nil given any nil argument. - add a :set argument to the list at() command. Aug 20th 2001 ivtools-0.9.6 - minor adjustments to adapt to gcc-3.0.1. One advantage of upgrading to gcc-3.0.1 is that incremental import of rasters from URL's works again. - introduce all the bitwise operators from C to comterp: &, |, ^, and ~. This change is slightly backward incompatible, in that "^" had been used as a shortcut for the pow command (raise something to a power). Scripts that rely on that single operator will need to be rewritten. Sorry for doing that -- but it is the first incompatible change in I can't remember how long, and something I wanted to get done before version 1.0 (where the syntax and semantics of comterp get "frozen", ready for wider use). - renames the tiftopnm bash script to a less confusing ivtiftopnm (less confusing in that people won't think it is part of netpbm). ivtiftopnm is a wrapper script for tifftopnm, which doesn't accept stdin input directly (because of its need for random access to the tiff file). Jul 25th 2001 ivtools-0.9.5 ** Most of the outstanding problems with gcc-3.0 and libstdc++-v3 have ** been resolved. Only known problem is with incremental importing ** (and display) of rasters from URL's. This is a long-standing ** stable feature of ivtools. Perhaps newer versions of gcc-3.* and ** libstdc++-v3 will fix the problem. - fixes a problem with importing files introduced when migrating away from the use of istream::gets (required for gcc-3.0 and libstdc++ v3). istream::gets would automatically skip the newline delimeter. When using istream::get in libstdc++ v3 I needed to manually skip the newline delimeter. - globally change optimization from -O6 to -O2, which makes gcc-3.0 compile time much more reasonable. - all the necessary changes to support ACE and gcc-3.0 at the same time. The majority of the work is in deferring (or avoiding) an fclose on a fdopen'ed socket, by a) saving a FILE* in some class to be fclose'd later, or b) rewriting without iostreams. Now there should no longer be any dangling FILE*'s to worry about. - adds built-in support for PNG rasters. That means they can be imported and save/restored by pathname (like JPEG and GIF). This requires that pngtopnm be available to be invoked by the ivtools drawing editors. - added test for whether socklen_t is typedef'ed to the configure script. Seems older versions of FreeBSD doen't have this. - fix the test for whether the X11 Shared Memory extensions exists in the server, and whether it can be utilized (which requires co-resident client and server). - add a -c argument (copy instead of move) to every install command for the benefit of the BSD's. - use "r+" for fopen of files to be rewound, otherwise they never get rewound. This is a recently introduced problem. "r+" is supposed to mean opening for reading and writing, but it seems necessary for rewinding as well. Jun 15th 2001 ivtools-0.9.4 - monstrous amount of changes required by forthcoming gcc-3.0. The heavy lifting was mostly due to the absence of filebuf::attach in v3 of libstdc++. Other issues to deal with: templated iostreams, change to meaning of -U (undefine compiler option), can't have static const char initializes in class definition, need class between "friend" and class name, use of , missing ostream::form, missing istream::gets, round needs to be Math::round. Unfortunately, gdb can't debug C++ generated by gcc-3.0 yet, so although things mostly work, I can't resolve problems with the wild iostream hacking I did. My recommendation: stick to gcc-2.95.* for now. - add an :eps and :idraw option to the comdraw export keyboard command. Now you can generate these formats as well as the default drawtool format. - fix export of EPS with color imagery, by correctly reading radio button for output format on export dialog box. Before it only generated the idraw format, which is EPS, but has only graylevel rasters visible to any PostScript interpreter (the color information is in comments). - change the declaration of an argument to getsockname() from unsigned int to socklen_t (in Dispatch/rpcbuf.c). This fixes the problem with portability caused by the fact signedness of a socklen_t is unstandardized. - restore full support for XBM (X bitmap) images to drawtool and its derivatives. idraw was always XBM capable, but drawtool lost support for this a while back. From John Denker (jsd at research.att.com): >Here is a patch that will allow ivtools to correctly output text >objects that contain backslashes. May 18th 2001 ivtools-0.9.3 Keyboard Commands: - add save func to comdraw: error=save([path]) -- save editor document (to pathname) With no argument it saves using the current document name. If none is current the SaveAs dialog box pops up. If the file already exists a warning dialog box pops up. If the current document is unmodified the func returns zero without doing anything. With a pathname argument it always tries to save to the document to that file, returning zero if the save doesn't work (at least it will after a bug is fixed). If the file already exists a warning dialog box pops up. - add export func to comdraw: with ACE: export(compview[,compview[,...compview]] [path] :host host_str :port port_int :socket :string|:str) -- export in drawtool format without ACE: export(compview[,compview[,...compview]] [path] :string|:str) -- export in drawtool format "; - add comdraw funcs to convert between drawing and screen coordinates: dx,dy=stod(sx,sy) -- convert from screen to drawing coordinates sx,sy=dtos(dx,dy) -- convert from drawing to screen coordinates - convert output of help func to a string, so it can be displayed in the keyboard command window on comdraw/graphdraw/flipbook/drawserv. Miscellaneous: - applied diffs by Guenter Geiger to generate ivtools-0.9.2-1 for latest Debian (sid). - attempt to upgrade to ACE 5.1 - put an arbitrary glyph in the lower left of each drawing editor with a keyboard command window. Defaults to text describing the editor and how to get help on keyboard commands. - check that an AttributeValue is_object() or is_command() before returning the void* pointer associated with some C++ object. - change for building on Solaris 2.6. - bug fix in growgroup comdraw func. Apr 5th 2001 ivtools-0.9.2 - set of changes to allow save/restore of graphics files internal to a drawing by the Unix command line used to generate them. For example, if "xwdtopnm temp.xwd" was used to import a raster file (with "from command" checked on the import dialog box), a subsequent save would write this command (and only this command) to the document on disk, and a subsequent restore would re-run the command to regenerate the contents. Should work equally well for rasters, PostScript, and ivtools drawtool files. - remove anytopnm from ivtools, since the enhancements our copy had over pbmplus were incorporated directly into the netpbm variant. The salient feature was the ability for anytopnm to recognize it had a file that was already in a pbmplus format, and pass it through. - remove duplicate IVGlyph/figure.[ch] from MANIFEST - add /usr/local/include/g++-3 and /usr/local/include/g++-2 to paths searched for libstdc++ include files by configure. - add "wget" to the list of download utilities searched for and used by the code that reads URLs. The others are ivdl (from ivtools), curl, and w3c. - changes to support compiling with older versions of libg++ and changes to support relative installation (--enable-install-relative) on FreeBSD. - add "name" and "value" labels to the attribute-list editing dialog box. - save rasters imported from Unix commands by writing out only the command string in an generic by-file drawtool object. For example: ovfile(:popen "djpeg -pnm test.jpg" ) would be output to the saved document if save-by-path was checked on the import box and save-by-path is checked (for the whole document) on the export box. Subsequent opens rerun the command. Jan 10th 2001 ivtools-0.9.1 Correct 0.9 oversights: - restore GPL dual licensing documentation in COPYRIGHT, COPYING, and MANIFEST. - correctly set version number to 0.9.1 December 19th 2000 ivtools-0.9 - fix segfault in new comdraw addtool command when the supplied pathname is non-existent. - allow for using new symbols (those with a nil value) in the various assignment operators of comterp, i.e. x++ or x+=1 work if x was undefined. - make ivtools available under the GPL as well as the original X11 style license. - changes type of third argument to accept() from an unportable (unsigned int*) to a more correct (socklent_t *) (in src/utils/sockets.cc). First done by Guenter Geiger in his Debianization of ivtools-0.8.3 - partial build (up to glyphterp and comterp) on SunOS 4.1.4 with gcc-2.4.5. After that I ran into static initialization (even though using collect2) and multiple-inheritance problems that made it no longer worth it. - patches for building with libace5.0 under Debian 2.3 (woody). - fix up the construction of symbolic links for Unidraw-common done by the configure script. - revises and extends the comterp pause, trace, and step commands.