2  * Copyright (C) 1989-95 GROUPE BULL
 
   4  * Permission is hereby granted, free of charge, to any person obtaining a copy
 
   5  * of this software and associated documentation files (the "Software"), to
 
   6  * deal in the Software without restriction, including without limitation the
 
   7  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 
   8  * sell copies of the Software, and to permit persons to whom the Software is
 
   9  * furnished to do so, subject to the following conditions:
 
  11  * The above copyright notice and this permission notice shall be included in
 
  12  * all copies or substantial portions of the Software.
 
  14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
  15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
  16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 
  17  * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 
  18  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 
  19  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
  21  * Except as contained in this notice, the name of GROUPE BULL shall not be
 
  22  * used in advertising or otherwise to promote the sale, use or other dealings
 
  23  * in this Software without prior written authorization from GROUPE BULL.
 
  26 /**************************************************************************\
 
  28 *                       HISTORY of user-visible changes                    *
 
  30 \**************************************************************************/
 
  35         - A new program called cxpm is provided to check on XPM files and help
 
  36           figuring out where the file might be invalid.
 
  37         - The FAQ and README are now in HTML.
 
  40         - A bug in writing pixmaps out on an 32 bit depth visual and MSBFirst
 
  42                 - patch from Uwe Langenkamp <Uwe.Langenkamp@t-online.de>
 
  43         - A severe bug in parsing the pixels section when an unknown character
 
  49         - The XPM library can now be built under Amiga DOS. This entirely comes
 
  50           from: Lorens Younes <d93-hyo@nada.kth.se>
 
  51           See the README.AMIGA file for details.
 
  52         - Changes for MSW: big performance improvement in ParseAndPutPixels(),
 
  53                 fixed creation of the mask in SetColor()
 
  54                 - patch from Jan Wielemaker <jan@swi.psy.uva.nl>
 
  55         - makefiles are provided for VMS
 
  56                 - given by Martin P.J. Zinser m.zinser@gsi.de  
 
  57         - Imakefiles reworked to get smoother builds and fixes from:
 
  58                 - Paul DuBois dubois@primate.wisc.edu
 
  59                 - Larry Schwimmer schwim@cyclone.stanford.edu
 
  60         - thanks to some code rearrangement the library is smaller (the size
 
  61           reduction goes from 4 to 7% depending on the system)
 
  64         - A severe bug (introduced in 3.4i as part of the sprintf
 
  65           optimization) in code writing XPM extensions to a buffer
 
  66           XpmCreateBufferFromImage/Pixmap.
 
  67         - The XpmAttributes definition in xpm.h was declaring nalloc_colors to
 
  73         - The XPM library now allows the application to pass its own color
 
  74           allocation/free functions. For this matter the following was done:
 
  75           The XpmAttributes structure has three new fields alloc_color,
 
  76           free_color, and color_closure. The following new valuemasks were
 
  77           added XpmAllocColorFunc, XpmFreeColorsFunc, XpmColorClosure. And
 
  78           two new types were defined XpmAllocColorFunc and XpmFreeColorsFunc.
 
  79           See documentation for details.
 
  82         - Windows NT support. It should compile and run fine based on the X
 
  83           Consortium X11R6 distribution.
 
  84         - The README file contains information to compile on Solaris with gcc.
 
  85         - Part of the code has been optimized by using the value returned by
 
  86           sprintf instead of calling strlen. Add the flag -DVOID_SPRINTF
 
  87           if on your system sprintf returns void.
 
  88                   - patch from Thomas Ott thommy@rz.fh-augsburg.de
 
  91         - XpmFree is now a real function (simply calling free by default).
 
  94         - The documentation describes the new XpmAttributes fields and their
 
 100         - The XpmAttributes has a new member called 'alloc_close_colors' which
 
 101           lets the caller specify whether close colors should be allocated
 
 102           using XAllocColor or not. This is especially useful when one uses a
 
 103           private colormap full of read/write cells.
 
 104           The xpm.h header file define a new bitmap flag called
 
 105           XpmAllocCloseColors to use along with this new slot.
 
 106                   - Dale Pease peased@bigbird.cso.gtegsc.com
 
 107         - The XpmAttributes has a new member called 'bitmap_format' which lets
 
 108           the caller specify the format of 1 bit depth images (XYBitmap or
 
 109           ZPixmap). The xpm.h header file define a new bitmap flag called
 
 110           XpmBitmapFormat to use along with this new field.
 
 113         - XpmReadFileTo[Image/Pixmap], XpmCreate[Image/Pixmap]FromData,
 
 114           XpmCreateImageFromDataFromBuffer functions do no longer use a
 
 115           temporary XpmImage object, which reduces a lot the amount of memory
 
 116           used. On the other hand it can take a little more time, but given the
 
 117           following figures (based on sxpm) it is a real good trade-off.
 
 119           Reading a 22x22 pixmap with 5 colors no time change is detected
 
 125           Reading a 1279x1023 pixmap with 14 colors (quite extreme case for
 
 126           XPM!) the time goes from:
 
 136           Reading the 22x22 pixmap with 5 colors the memory usage (under
 
 140                   163848 heap (peak use)
 
 145                   159752 heap (peak use)
 
 148           And reading the 1279x1023 pixmap with 14 colors it goes from:
 
 151                  6705160 heap (peak use)
 
 156                  1732616 heap (peak use)
 
 159           This clearly shows that while for small pixmaps there is no real
 
 160           difference on both sides, for large pixmaps this makes a huge
 
 161           difference about the amount of memory used and it is not much
 
 164           Note that you can still get the old behavior using both
 
 165           XpmReadFileToXpmImage and XpmCreate[Image/Pixmap]FromXpmImage instead
 
 166           of XpmReadFileTo[Image/Pixmap]. Once more XPM gives you the choice!
 
 169         - when defined locally the global symbols strcasecmp and strdup are
 
 170           now called xpmstrcasecmp and xpmstrdup to avoid any possible
 
 172         - VMS has a bogus file system which requires a work around in
 
 174                   - patch from Bob.Deen@jpl.nasa.gov
 
 175         - the type of the exactColors attribute has been changed from unsigned
 
 179         - the documentation describes the new XpmAttributes fields
 
 180           alloc_close_colors and bitmap_format.
 
 185         - The XpmAttributes structure has now two new slots: alloc_pixels and
 
 186           nalloc_pixels in order to provide an easy way to free allocated
 
 187           colors. The new bitmask XpmReturnAllocPixels should be used to
 
 188           request this data through the valuemask. Unless you really know why,
 
 189           you should use this instead of XpmReturnPixels, pixels, and npixels.
 
 190         - the XPM1 format parsing has been improved.
 
 191                   - patch from Chuck Thompson <cthomp@cs.uiuc.edu>
 
 192         - compilers defining _STDC_ to something different from 1 are now
 
 193           considered as ANSI compilers.
 
 194         - the README file provides now more info on how to build XPM depending
 
 198         - a bug introduced in 3.4f in the XPM1 format parsing function.
 
 199                   - fix from Chuck Thompson <cthomp@cs.uiuc.edu>
 
 200         - the hashtable was not free when the color parsing failed.
 
 201                   - patch from ackley@cs.unm.edu (David Ackley)
 
 202         - the close color mechanism wasn't used if one of the closeness
 
 203           parameter was null. Now only one needs to be different from 0.
 
 204                     Lorens Younes d93-hyo@nada.kth.se
 
 205         - parsing of long comments failed with a segmentation fault.
 
 208         - the documentation describes the new XpmAttributes fields
 
 209           alloc_pixels and nalloc_pixels and how they are used.
 
 214         - Defines IMAKE_DEFINES in the top Imakefile so one can easily avoid
 
 215           building the shared library.
 
 216         - Add some information about the installation process in the README.
 
 217         - filenames are surrounded with quotes when calling gzip or compress in
 
 218           order to allow spaces within filenames.
 
 219                   - William Parn <parn@fgm.com>
 
 220         - the compilation and the shared library building should be smoother
 
 222                   - patch from Dale Moore <Dale.Moore@CS.cmu.edu>
 
 225         - a segmentation fault occurring in some weird case.
 
 230         - The top Imakefile passes CDEBUGFLAGS and DEFINES to subdirs. Thus
 
 231           only this Imakefile should need to be edited by users.
 
 232         - FAQ includes the answer to the question "How can I get a non
 
 233           rectangular icon using XPM ?"
 
 234         - VMS support updated
 
 235                   - patch from Martin P.J. Zinser m.zinser@gsi.de
 
 238         - XpmCreateImageFromXpmImage() called from XpmReadFileToPixmap() could
 
 239           lead to a segmentation fault since free was called on a memory block
 
 240           size variable instead of the block itself. Note: this bug has been
 
 246         - sxpm now supports a -version option command.
 
 249         - the list of pixels returned in XpmAttributes was wrong when two
 
 250           colors were defined as None in the read XPM
 
 251                   - Lionel.Mallet@sophia.inria.fr
 
 252         - the parser was skipping whitespace reading extensions strings. This
 
 253           has been fixed so extensions lines are now returned exactly as they
 
 255         - some compilation control added for the dec alpha with X11R5 (LONG64)
 
 256                   - patch from Fredrik Lundh <Fredrik_Lundh@ivab.se>
 
 257         - when writing an XPM file, '-' characters are replaced with '_'
 
 258           characters in the array name, in order to get a valid C syntax name.
 
 259         - XYPixmap format images were not correctly handled.
 
 260         - XPM1 file with names using multiple '_' characters are now handled
 
 262                   - todd@erda.rl.af.mil (Todd Gleason)
 
 266     Yes, this is kind of quick. But this is because no code has been modified,
 
 267     this is just a new packaging to make the whole stuff more suitable to the
 
 268     X development team's requests for inclusion in the R6 contrib.
 
 271         - Several filenames were too long to fit without any conflict on DOS
 
 272           and CD-ROM filesystems. They have been renamed.
 
 273         - Imakefiles use XCOMM for comments instead of the # character.
 
 274         - the Postscript documentation file doc/xpm.ps is now distributed as
 
 275           doc/xpm.PS.gz and allows browsing with tools such as ghostview.
 
 276         - Besides, parts of lib/misc.c have been moved to several new files,
 
 277           and some functions of data.c have been moved to other files in
 
 278           order to get a better link profile.
 
 279         - I've also added a FAQ hoping this will prevent people from
 
 280           continuously filling my mailbox with the same questions.
 
 281         - sxpm.c includes <X11/xpm.h> instead of "xpm.h" and BUILDINCTOP is
 
 282           used in Makefiles as expected.
 
 283         - Everything can be done simply using "xmkmf -a" and "make".
 
 288         - XPM can now be built under MS Windows. Yes, this is possible and this
 
 290                 - Hermann Dunkel <hedu@cul-ipn.uni-kiel.de>
 
 291           See the README.MSW file for details.
 
 293         - building the shared library now depends on the SharedLibXpm variable
 
 294           and no longer on the SharedLibX variable which is private to the X
 
 295           Window System project.
 
 296                 - patch from Stephen Gildea <gildea@x.org>
 
 297           Other variables can now be set for the various locations needed.
 
 299         - lib/parse.c does no longer use a 256x256 array in the stack but
 
 302         - The Copyright notice which has been re-written from the X11R6's one
 
 303           should be clearer and is now present in every file.
 
 306         - lib/xpmP.h does no longer define a Boolean type which conflicts with
 
 307           the Intrinsic definition. Instead the type Bool defined in Xlib is
 
 309                 - neumann@watson.ibm.com (Gustaf Neumann)
 
 314         - passing NULL as shapemask_return to XpmReadFileToPixmap and similar
 
 315           functions was leading to a bus error.
 
 316                 - Dean Luick <dean@falcon.natinst.com>
 
 321         This version is not compatible with 3.3. Fortunately most people should
 
 322         only need to recompile.
 
 323         I apology for this but CDE/Motif have put heavy pressure to go that
 
 324         way. The point is that I designed and released Xpm 3.3 in order to let
 
 325         OSF include a clean version of Xpm in Motif 2.0. This new version was
 
 326         not fully compatible with 3.2 but I thought it didn't matter since this
 
 327         was going to be the first version used within Motif. Unfortunately CDE
 
 328         was already using xpm-3.2 internally and requires both source and
 
 329         binary backward compatibility. By the way I must say they didn't drop
 
 330         us a single line to let us know they were using it and thus were
 
 331         expecting stability. All this could have been avoided...
 
 333         However, since I had to go for a not compatible version I took this as
 
 334         an opportunity to modify the lower level API, which was new in 3.3 and
 
 335         which was somewhat clumsy, in order to provide yet a better API.
 
 337         The library has been modified to have both source and binary backward
 
 338         compatibility with xpm-3.2. This implies it is not either source or
 
 339         binary compatible with 3.3. The fields related to the 3.2 XpmInfos
 
 340         mechanism have been put back into the XpmAttributes structure. The new
 
 341         3.3 XpmInfos struct has been renamed as XpmInfo to avoid conflict with
 
 342         the old 3.2 flag which is back too. All the semantic related to the
 
 343         XpmAttributes infos fields is back as well.
 
 345         So this new version provides a high level API which is fully
 
 346         compatible with 3.2 and still provides the 3.3 lower level API
 
 347         (XpmImage) with the XpmInfos struct renamed as XpmInfo. This leads to
 
 348         some redundancy but this was the best I could do to satisfy both
 
 349         CDE/Motif people who needed the backward compatibility and myself (who
 
 350         always tries to provide you with the best ;-).
 
 352         Tests have been successfully performed with pixmap-2.1, pixmap-2.4, and
 
 356         - The colorTable member of the XpmAttributes structure is now an
 
 357           (XpmColor*) in order to be compatible with an XpmImage colorTable.
 
 358           However in order to be backward compatible this field is cast to
 
 359           (XpmColor **), which is equivalent to (char ***), when it is used
 
 360           with the old flags XpmInfos and XpmReturnInfos. To handle the new
 
 361           type the new flags XpmColorTable and XpmReturnColorTable have been
 
 363         - The XpmInfo struct has been extended to avoid having to deal with an
 
 364           XpmAttributes at the lower level. The idea is that all the data
 
 365           stored in an Xpm file can be retrieve through both an XpmImage and
 
 366           an XpmInfo struct. See the documentation for details.
 
 367         - XpmUndefPixel is defined and exported by xpm.h in order to let
 
 368           clients providing their own colorTable when writing out an Xpm file.
 
 369           See the documentation for details.
 
 370         - in sxpm/sxpm.c, set attribute XtNinput to True on toplevel widget.
 
 371           Windows that don't "take" input, never get focus, as mandated by
 
 373                 patch from Henrique Martins <martins@hplhasm.hpl.hp.com>
 
 374         - lib/Imakefile modified to build the shared library under IRIX 5.
 
 375                 patch from simon@lia.di.epfl.ch (Simon Leinen)
 
 378         - a new function and a new define should help client figuring out with
 
 379           which Xpm library version they are working. These are
 
 380           XpmIncludeVersion and XpmLibraryVersion().
 
 385         - XPM1 files are now supported.
 
 386         - a new function is provided to get an error string related to the
 
 388                 - suggested by Detlef Schmier <detlef@mfr.dec.com>
 
 391         - gzip and gunzip are called with the -q option (quiet)
 
 392                 - patch from Chris P. Ross <cross@eng.umd.edu>
 
 393         - the parser is again more flexible about the way the strings are
 
 394           distributed on lines. Actually a single line XPM file can be read.
 
 395         - the documentation should be clearer about shapemask generation and
 
 396           XpmAttributes valuemask.
 
 399         - reading some binary file was leading to a bus error.
 
 400                 - patch from Detlef Schmier <detlef@mfr.dec.com>
 
 401         - the ? character is no longer used when writing an XPM file in order
 
 402           to avoid possible ANSI trigraphs.
 
 407         - a new level interface is provided to allow applications to do either
 
 408           icon editing or data caching.
 
 409           The XpmAttributes has been changed but most applications will just
 
 410           need to be recompiled.
 
 411         - new structures are provided to deal with the new lower level:
 
 412                  XpmImage, XpmColor, XpmInfos.
 
 414         - a separate distribution called xpm-contrib is available. This
 
 415           includes the converters which used to be part of this distribution
 
 417                 two new applications:
 
 418                 * nexpm to draw a pixmap in *any* existing window from
 
 419                          Ralph Betza <gnohmon@ssiny.com>
 
 420                 * xpmview to display a list of Xpm files from
 
 421                          Jean Michel Leon <leon@sophia.inria.fr>
 
 423                 a hacky string to pixmap converter, provided by
 
 424                         Robert H. Forsman Jr.  <thoth@manatee.cis.ufl.edu>
 
 426                 The Xpm editor called pixmap will also be part of this contrib.
 
 427                 This does not mean it is the best pixmap editor one can find
 
 428                 but it is the only one that I know of which tries to handle
 
 429                 all the features of this format.
 
 432         - the code to build XImage data has been optimized by
 
 433                  jules@x.co.uk (Julian Gosnell)
 
 434           the old code is still available when compiling with the
 
 435           -DWITHOUT_SPEEDUPS flag.
 
 437         - closecolor code was not re-entrant
 
 438                  - dbl@visual.com (David B. Lewis)
 
 439         - fix gzip filename (*.gz and no longer *.z).
 
 440                  - Jason Patterson <jasonp@fitmail.fit.qut.edu.au>
 
 441         - sxpm has 2 new options:
 
 442                  -nom to do not display the mask if there is one
 
 443                  -cp <color> <pixel> to override a color value with a given
 
 444                  pixel, i.e. sxpm plaid.xpm -cp red 4
 
 446           also the '-s' adn '-p' options have been renamed to '-sc' and '-sp'.
 
 448         - xpm.h defines XpmFormat, XpmVersion, and XpmRevision numbers.
 
 451         - closecolor minor fix
 
 452                  - Jason Patterson <jasonp@fitmail.fit.qut.edu.au>
 
 457         - much faster close colors
 
 458         - piping from/to compressed files now handles GNU's gzip (.z)  format
 
 459         - added XpmColorKey attribute - ability to specify which visual's
 
 460           colors to use (ie: now it's possible to read in a pixmap in a
 
 461           color visual, but use the colors specified for monochrome).
 
 462         - added -mono, -grey4, -grey and -color options to sxpm to demonstrate
 
 463           the XpmColorKey attribute.
 
 464                 - Jason Patterson <jasonp@fitmail.qut.edu.au>
 
 467         - fixed bug where redefining "None" as a pixel stopped mask generation
 
 468         - minor SVR4 defines for <string.h>
 
 469         - fixed annoying closecolor bug related to read/write color cells
 
 470         - fixed minor bug in color value -> pixel overloading
 
 471         - manual updated to include new red/green/blue closeness attributes
 
 472                 - Jason Patterson <jasonp@fitmail.qut.edu.au>
 
 474         - the top Imakefile was missing the depend target
 
 475         - sxpm/Imakefile fixed so that -L../lib is set before the standard
 
 477                 - Vivek Khera <khera@cs.duke.edu>
 
 479         - lib/xpmP.h now defines bcopy as memcpy for VMS (required by recent
 
 481                 - J. Daniel Smith <dsmith@ann-arbor.applicon.slb.com>
 
 483         - the lib/Imakefile didn't work with X11R4.
 
 489         - the library provides four new functions to deal with Xpm files
 
 490           loaded in memory as single character strings buffers:
 
 492                         XpmCreateImageFromBuffer
 
 493                         XpmCreatePixmapFromBuffer
 
 494                         XpmCreateBufferFromImage
 
 495                         XpmCreateBufferFromPixmap
 
 497         - in addition, as a convenience, two functions are provided to copy a
 
 498           file in a buffer and to write a file from a buffer:
 
 501                         XpmWriteFileFromBuffer
 
 504         - Files are now dispatched in the following sub-directories:
 
 506         - Imakefiles will let you build a shared library as well as the static
 
 507           one (with either X11R4 or X11R5).
 
 508         - The documentation has been ported from LaTeX to FrameMaker and is
 
 509           now included in the distribution in its PostScript form (doc/xpm.ps).
 
 510           Source files are available on request.
 
 511           Also the documentation has been reorganized and includes a table of
 
 512           contents and an index of the functions (the number of functions
 
 513           increasing this became a requisite).
 
 516         - Many warnings have been fixed - patch from Daniel Dardailler 
 
 522         - use XpmMalloc, XpmRealloc, XpmCalloc, and XpmFree which are defines
 
 523         in xpmP.h. This should help people wanting to use their own functions.
 
 526         - Intrinsic.h is no longer included.
 
 527         - bzero is defined as memset on SYSV and SVR4.
 
 528         - some memory initialization bug concerning XpmAttributes.
 
 533         - compile on Solaris 2.0
 
 534                 - patch from Clint Jeffery <cjeffery@cs.arizona.edu>
 
 537         - shape masks are now set correctly for LSBFirst (Decs).
 
 538         - pixmaps are now set correctly for 2 bit displays (Nexts).
 
 539                 - patch from Josef Leherbauer <joe@takeFive.co.at>
 
 540         - isspace was called on getc which fails when EOF is returned.
 
 541                 - Marelli Paolo <marelli@colos3.usr.dsi.unimi.it>
 
 546         - parsing optimized for single and double characters color
 
 547                 - patch originally from Martin Brunecky 
 
 548                                        marbru@build1.auto-trol.com
 
 551         - XpmFreeExtensions was calling free on some argument without checking
 
 553         - strdup was not correctly defined for systems which do not provide
 
 554         it.     - Hans-Peter Lichtin <lich@zellweger.ch>
 
 555         - some bug in XpmCrDataFI.c
 
 556                 - Sven Delmas garfield@avalanche.cs.tu-berlin.de
 
 559         - there is still a bug with the creation of the clipmask on display of
 
 560         depth 2 but I can't find a fix because unfortunately I don't have such
 
 561         a rendering system and nobody gets the time to investigate for me.
 
 566         - Create XpmReadFileToData and XpmWriteFileFromData
 
 567                 - Dan Greening <dgreen@sti.com>
 
 568         - added "close colors" support and ability to redefine color values
 
 569           as pixels at load time, as well as color names
 
 570                 - Jason Patterson <jasonp@fitmail.qut.edu.au>
 
 571         - errors while parsing or allocating colors now revert to other
 
 572           visual defaults, creating pixmap/image as expected, and returning
 
 573           XpmSuccess. The old behavior of XpmColorError being returned and no
 
 574           pixmap/image being created can be retained by setting the
 
 575           exactColors attribute.
 
 576                 - Jason Patterson <jasonp@fitmail.qut.edu.au>
 
 579         - SVR4 defines for including <string.h> instead of <strings.h>
 
 580                 - Jason Patterson <jasonp@fitmail.qut.edu.au>
 
 581         - attributes->extensions and attributes->nextensions fields were not 
 
 582           set correctly when no extensions present in file.
 
 583                 - Simon_Scott Cornish <cornish@ecr.mu.oz.au>
 
 588         - use the mock lisp hashing function instead of the gnu emacs one,
 
 589         it is faster in some cases and never slower (I've not found any case).
 
 592         - function prototypes for ansi compilers.
 
 593         - some memory initialization bugs (purify is just great for this).
 
 594         - empty strings in extensions are now correctly handled.
 
 599         - both format and functions handle extensions data. This allow people
 
 600         to store additional data related to a pixmap. See documentation for
 
 602         - sxpm supports the new option '-c' to use a private colormap. This is
 
 603         useful when displaying pixmaps using a lot of colors.
 
 604         - sxpm supports the new option '-v' (verbose) to get possible
 
 605         extensions print out on standard error.
 
 608         - most of the code has been reworked to be improved and thus almost
 
 609         every function is faster. It takes less than 6 seconds of real time on
 
 610         a sun4 to display, with sxpm, a 487x635 pixmap using 213 colors, while
 
 611         it takes 32 seconds with the old library! It takes 18 seconds to
 
 612         display a 1279x1023 screen dump using 14 colors while xwud takes 10
 
 614         Of course performance improvements are not always that great, they
 
 615         depend on the size and number of colors but I'm sure everybody will
 
 617         I know how to improve it more but this will require changes in the
 
 618         architecture so this is not for now. Some optimizations have been
 
 619         contributed by gregor@kafka.saic.com (gregg hanna) and
 
 620         jnc@csl.biosci.arizona.edu (John N. Calley).
 
 621         - the Imakefile is modified to let you install sxpm - Rainer Klute
 
 622            <klute@irb.informatik.uni-dortmund.de>
 
 623         - xpmP.h declares popen for Sequent platforms - Clinton Jeffery
 
 624            <cjeffery@cs.arizona.edu>
 
 625         - XpmWriteFileFromImage/Pixmap rather than truncating the pixmap name
 
 626         to the first dot changes dots to underscores to get a valid C syntax
 
 631         - there was a bug in the image creation function for some 24 bits
 
 632         displays. It is fixed.
 
 633         - allocated color pixels are now freed when an error occurs -
 
 634            nusser@dec1.wu-wien.ac.at (Stefan Nusser)
 
 637         - the documentation describes the new XpmExtension structure and how
 
 638         to use it with read and write functions.
 
 643         - sxpm now have more standard options (mainly suggested by 
 
 644         Rainer Sinkwitz <sinkwitz@ifi.unizh.ch>):
 
 646         Usage:  sxpm [options...]
 
 649         [-d host:display]            Display to connect to.
 
 650         [-g geom]                    Geometry of window.
 
 651         [-hints]                     Set ResizeInc for window.
 
 652         [-icon filename]             Set pixmap for iconWindow.
 
 653         [-s symbol_name color_name]  Overwrite color defaults.
 
 654         [-p symbol_name pixel_value] Overwrite color defaults.
 
 655         [-plaid]                     Read the included plaid pixmap.
 
 656         [filename]                   Read from file 'filename', and from
 
 657                                      standard input if 'filename' is '-'.
 
 658         [-o filename]                Write to file 'filename', and to standard
 
 659                                      output if 'filename' is '-'.
 
 660         [-nod]                       Don't display in window.
 
 661         [-rgb filename]              Search color names in the rgb text file
 
 664         if no input is specified sxpm reads from standard input.
 
 667         - Xpm functions and Ppm converters now deal with multiword colornames.
 
 668           patches from Rainer Sinkwitz <sinkwitz@ifi.unizh.ch>.
 
 673         Functions name and defines have been modified again (sorry for that)
 
 676              XpmReadPixmapFile    XpmReadFileToPixmap
 
 677              XpmWritePixmapFile   XpmWriteFileFromPixmap
 
 679              XpmPixmapColorError  XpmColorError
 
 680              XpmPixmapSuccess     XpmSuccess
 
 681              XpmPixmapOpenFailed  XpmOpenFailed
 
 682              XpmPixmapFileInvalid XpmFileInvalid
 
 683              XpmPixmapNoMemory    XpmNoMemory
 
 684              XpmPixmapColorFailed XpmColorFailed
 
 686         To update code using Xpm you can use the included shell script called
 
 687         rename with the sed commands files name-3.0b-3.0c and name-3.0c-3.0.
 
 688         Old names still valid though.
 
 691         - four new functions to work with images instead of pixmaps:
 
 694              XpmWriteFileFromImage
 
 695              XpmCreateImageFromData
 
 696              XpmCreateDataFromImage
 
 699         Algorithms to create and scan images and pixmaps are based on the
 
 700         MIT's R5 code, thus they are much cleaner than old ones and should
 
 701         avoid any problem with any visual (yes, I trust MIT folks :-)
 
 704         Imakefile use INCDIR instead of ROOTDIR.
 
 707         - the documentation presents the four new functions.
 
 711         In answer to request of people functions, types and defines names have
 
 712         been changed as follows:
 
 714              XCreatePixmapFromData       XpmCreatePixmapFromData
 
 715              XCreateDataFromPixmap       XpmCreateDataFromPixmap
 
 716              XReadPixmapFile             XpmReadPixmapFile
 
 717              XWritePixmapFile            XpmWritePixmapFile
 
 718              XFreeXpmAttributes          XpmFreeAttributes
 
 720              PixmapColorError            XpmPixmapColorError
 
 721              PixmapSuccess               XpmPixmapSuccess
 
 722              PixmapOpenFailed            XpmPixmapOpenFailed
 
 723              PixmapFileInvalid           XpmPixmapFileInvalid
 
 724              PixmapNoMemory              XpmPixmapNoMemory
 
 725              PixmapColorFailed           XpmPixmapColorFailed
 
 727              ColorSymbol                 XpmColorSymbol
 
 729         Generally speaking every public name begins with 'Xpm' and every
 
 730         private one with 'xpm'. This should avoid any possible conflict.
 
 732         Some files have also be renamed accordingly.
 
 735         - support for VMS and two new options for sxpm: icon and hints (see
 
 736         manual for details) Richard Hess <rhess%pleione%cimshop@uunet.UU.NET>
 
 737         - DEFINES in Imakefile and Makefile.noXtree allows you to set the
 
 740                  ZPIPE for un/compressing piped feature (default is on)
 
 741                  NEED_STRCASECMP for system which doesn't provide one (default
 
 744         - xpmtoppm.c has is own strstr function which is used if NEED_STRSTR
 
 745         is defined when compiling - Hugues.Leroy@irisa.fr (Hugues Leroy).
 
 748         - many bugs have been fixed, especially for ansi compilers -
 
 749                Doyle C. Davidson (doyle@doyled.b23b.ingr.com) and
 
 750                Clifford D. Morrison (cdm%bigdaddy%edsr@uunet.UU.NET)
 
 751         - parser is again a little more improved
 
 755         This is a complete new version with a new API and where files and
 
 756         structures have been renamed. So this should be taken as a new
 
 758         This release should be quickly followed by the 3.0 because I'm planning
 
 759         to send it for X11R5 contrib which ends October 5th.
 
 762         - support for transparent color.
 
 763         - support for hotspot.
 
 764         - a new function: XCreateDataFromPixmap to create an XPM data from a
 
 765         pixmap in order to be able to create a new pixmap from this data using
 
 766         the XCreatePixmapFromData function later on.
 
 767         - a new structure: XpmAttributes which replace the XpmInfo structure
 
 768         and which leads to a much simpler API with less arguments.
 
 769         - arguments such as visual, colormap and depth are optional, default
 
 770         values are taken if omitted.
 
 771         - parsing and allocating color failures don't simply break anymore. If
 
 772         another default color can be found it is used and a PixmapColorError
 
 773         is returned. In case no color can be found then it breaks and returns
 
 775         - for this reason the ErrorStatus codes are redefined as follows:
 
 778                    positive if partial success
 
 782                 #define PixmapColorError    1
 
 783                 #define PixmapSuccess       0
 
 784                 #define PixmapOpenFailed   -1
 
 785                 #define PixmapFileInvalid  -2
 
 786                 #define PixmapNoMemory     -3
 
 787                 #define PixmapColorFailed  -4
 
 789         - sxpm prints out a warning when a requested color could not be parsed
 
 790         or alloc'ed, and an error when none has been found.
 
 791         - sxpm handles pixmap with transparent color. For this purpose the
 
 792         plaid_mask.xpm is added to the distribution.
 
 795         - I've again improved the memory management.
 
 796         - the parser is also improved.
 
 797         - when writing a pixmap to a file the variable name could be
 
 798         "plaid.xpm" which is not valid in C. Now the extension name is cut off
 
 799         to give "plaid" as variable name.
 
 800         - reading multiple words colornames such as "peach puff" where leading
 
 801         to non readable Xpm files. They are now skipped to have only single
 
 802         word colorname. Lionel Mallet (mallet@ipvpel.unipv.it).
 
 803         - parser was triggered by the "/" character inside string.
 
 804         Doyle C. Davidson (doyle@doyled.b23b.ingr.com). This is corrected.
 
 805         - sxpm maps the window only if the option "-nod" is not selected. 
 
 808         - the documentation presents the new API and features.
 
 812         This is an alpha version because it supports the new version of XPM,
 
 813         but the library interface is still the same. Indeed it will change in
 
 814         future release to get rid of obsolete stuff such as the type argument
 
 815         of the XWritePixmapFile function.
 
 817     ******************************* WARNING *********************************
 
 818         The format is not anymore XPM2, it is XPM version 3 which is XPM2
 
 819         limited to the C syntax with the key word "XPM" in place of "XPM2 C".
 
 820         The interface library has not changed yet but the type argument of
 
 821         XWritePixmapFile and the type member of XpmInfo are not used anymore.
 
 822         Meanwhile the library which is now called libXpm.a is backward
 
 823         compatible as XPM2 files can be read. But the XWritePixmapFile
 
 824         function only writes out XPM version 3 files.
 
 825     *************************************************************************
 
 828         - the library doesn't use global variables anymore, thus it should be
 
 830         - sxpm has been rewritten on top of Xt, it can be used to convert
 
 831         files from XPM2 to XPM version 3.
 
 832         - xpm1to2c.perl has been upgraded to the new XPM version and renamed
 
 834         - ppmtoxpm2.c and ppmtoxpm2.1 have been upgraded too and renamed
 
 835         ppmtoxpm.c and ppmtoxpm.1. In addition the xpmtoppm.c and xpmtoppm.1
 
 836         of the pbmplus package have been upgraded too. xpmtoppm can thus
 
 837         convert XPM version 1 and 3 to a portable pixmap. These files should
 
 838         replace the original ones which are part of the pbmplus package. See
 
 839         the ppm.README file for more details.
 
 840         - the library contains RCS variables which allows you to get revision
 
 841         numbers with ident (which is part of the RCS package). The Id number
 
 842         is an internal rcs number for my eyes only. The official one is found
 
 846         - the memory management has been much improved in order to avoid
 
 848         - the XImage building algorithm has been changed to support correctly
 
 849         different visual depths. There is special code to handle depths 1, 4,
 
 850         6, 8, 24, and 32 to build the image and send it in one whack, and
 
 851         other depths are supported by building the image with XPutPixel which
 
 853         - similar algorithms are used to read pixmaps and write them out.
 
 856         - the documentation presents the new XPM format.
 
 861     ******************************* WARNING *********************************
 
 862         Since the last release two structures have been modified and have now
 
 863         bigger sizes, so ANY CODE USING THE libXPM2 NEEDS TO BE RECOMPILED.
 
 864     *************************************************************************
 
 867         - the ColorSymbol struct contains the new member 'pixel' which allow
 
 868         to override default colors by giving a pixel value (in such a case
 
 869         symbol value must be set to NULL),
 
 870         - the XpmInfo struct contains the new member 'rgb_fname' in which one
 
 871         can specify an rgb text file name while writing a pixmap with the 
 
 872         XWritePixmapFile function (otherwise this member should be set to
 
 873         NULL). This way colorname will be searched and written out if found
 
 874         instead of the RGB value,
 
 875         - Imakefile originally provided by stolcke@ICSI.Berkeley.EDU,
 
 876         - the old Makefile is now distributed as Makefile.noXtree and presents
 
 878         - the demo application is renamed sxpm (Show XPM), creates a window of
 
 879         the size of the pixmap if no geometry is specified, prints out
 
 880         messages instead of status when an error occurs, handles the new
 
 881         option -p for overriding colors by giving a pixel value (not really
 
 882         useful but is just here to show this new feature), handles the new
 
 883         option -rgb for specifying an rgb text file, and ends on
 
 884         keypress as buttonpress,
 
 885         - defines for SYSV have been provided by Paul Breslaw
 
 887         - the distribution includes a new directory called converters which
 
 888         contains xpm1to2 and xpm1to2c perl converters and a ppmtoxpm2
 
 889         converter provided by Paul Breslaw who upgraded the original ppmtoxpm
 
 890         written by Mark W. Snitily <mark@zok.uucp>.
 
 893         - this file is created and will give old users a quick reference to
 
 894         changes made from one release to the next one,
 
 895         - documentation is changed to present the new ColorSymbol structure
 
 896         and the way to override colors by giving a pixel value, and to present
 
 897         the new XpmInfo structure and how to use it,
 
 898         - a man page for sxpm is added to the distrib,
 
 899         - the README file talks about sxpm and no more demo, and have
 
 900         reference to the different converters.
 
 905         - XReadPixmapFile reads from stdin if filename is NULL,
 
 906         - XWritePixmapFile writes to stdin if filename is NULL,
 
 907         - the demo application handles the new option -nod for no displaying
 
 908         the pixmap in a window (useful when used as converter).
 
 911         - documentation about the new feature.
 
 916         - from nazgul@alphalpha.com (Kee Hinckley): changes to make the
 
 917         library usable as C++ code, and on Apollo without any warning.
 
 920         - from nazgul@alphalpha.com (Kee Hinckley): the xpm include files was
 
 921         declaring XWritePixmapFile as taking in arg a Pixmap pointer instead
 
 927         - XWritePixmapFile was not closing the file while ending normally.
 
 932         - XReadPixmapFile reads from a piped uncompress if the given filename
 
 933         ends by .Z or if filename.Z exists,
 
 934         - XWritePixmapFile writes to a piped compress if the given filename
 
 938         - demo now deals with window manager.
 
 941         - documentation about compressed files management.
 
 946         - handle monochrome display correctly,
 
 947         - comments can be empty.
 
 952         - when reading some invalid free was dumping core on some machine.
 
 956     First distribution of XPM2.