home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume9 / xloadimage / patch1 < prev    next >
Encoding:
Internet Message Format  |  1990-10-07  |  46.7 KB

  1. Path: uunet!bu.edu!rpi!julius.cs.uiuc.edu!apple!netcom!amdcad!sun!saber.com!saber.com!jimf
  2. From: saber.com!jimf@saber.com
  3. Newsgroups: comp.sources.x
  4. Subject: v09i064: xloadimage 2.01, Patch1, Part01/01
  5. Message-ID: <143200@sun.Eng.Sun.COM>
  6. Date: 1 Oct 90 05:38:33 GMT
  7. References: <csx-09i064:xloadimage@uunet.UU.NET>
  8. Sender: news@sun.Eng.Sun.COM
  9. Lines: 1459
  10. Approved: argv@sun.com
  11.  
  12. Submitted-by: saber.com!jimf@saber.com
  13. Posting-number: Volume 9, Issue 64
  14. Archive-name: xloadimage/patch1
  15. Patch-To: xloadimage: Volume 9, Issues 48-56
  16.  
  17. Here's the patch I promised you.  It fixes all of the known serious
  18. problems with version 2.00.  It appears that you sent out version 2.00
  19. so please make this available ASAP.
  20.  
  21. Thanks!
  22.  
  23. jim frost
  24. saber software
  25. jimf@saber.com
  26.  
  27. -- cut here --
  28. PATCH TO BRING XLOADIMAGE VERSION 2.00 UP TO VERSION 2.01
  29.  
  30. Following this message is a set of patches which will bring xloadimage
  31. version 2.00 up to version 2.01.  Version 2.01 contains the following
  32. fixes and enhancements:
  33.  
  34. * A fix to smooth.c was made to correct a bug which caused coredumps
  35.   on some images.
  36. * window.c was patched to work around a bug in twm/tvtwm where not
  37.   setting the PMaxSize hint sometimes caused the window manager to
  38.   crash the server.
  39. * The resource class name was changed to Xloadimage to conform with
  40.   naming standards and to work around a problem with twm/tvtwm where
  41.   it would not assign a title bar to xloadimage windows.
  42. * Several problems with System-V compilation were corrected.
  43. * The gcc-1-37 make target was fixed.
  44. * The GIF loader was patched to better identify GIF files and to
  45.   respond better to short GIF files.
  46. * The Utah RLE image loader was patched to work with the updated ZIO
  47.   package.
  48. * A new image format, McIDAS, was added.  This format is often used
  49.   for weather images.
  50.  
  51. Enjoy,
  52.  
  53. jim frost
  54. saber software
  55. jimf@saber.com
  56.  
  57. -- cut here --
  58. diff -c src.2.00/Imakefile src.2.01/Imakefile
  59. *** src.2.00/Imakefile    Sun Sep 30 15:46:24 1990
  60. --- src.2.01/Imakefile    Sun Sep 30 15:01:11 1990
  61. ***************
  62. *** 5,18 ****
  63.   SYS_LIBRARIES   = -lm
  64.              SRCS = bright.c clip.c cmuwmraster.c compress.c dither.c \
  65.             faces.c fbm.c fill.c g3.c gif.c halftone.c hash.c \
  66. !           imagetypes.c mac.c merge.c misc.c new.c options.c \
  67. !           path.c pbm.c reduce.c rle.c rlelib.c root.c \
  68.                     rotate.c send.c smooth.c sunraster.c value.c window.c \
  69.                     xbitmap.c xloadimage.c xpixmap.c xwd.c zio.c zoom.c
  70.              OBJS = bright.o clip.o cmuwmraster.o compress.o dither.o \
  71.             faces.o fbm.o fill.o g3.o gif.o halftone.o hash.o \
  72. !           imagetypes.o mac.o merge.o misc.o new.o options.o \
  73. !           path.o pbm.o reduce.o rle.o rlelib.o root.o \
  74.                     rotate.o send.o smooth.o sunraster.o value.o window.o \
  75.                     xbitmap.o xloadimage.o xpixmap.o xwd.o zio.o zoom.o
  76.   
  77. --- 5,18 ----
  78.   SYS_LIBRARIES   = -lm
  79.              SRCS = bright.c clip.c cmuwmraster.c compress.c dither.c \
  80.             faces.c fbm.c fill.c g3.c gif.c halftone.c hash.c \
  81. !           imagetypes.c mac.c mcidas.c mc_tables.c merge.c misc.c \
  82. !           new.c options.c path.c pbm.c reduce.c rle.c rlelib.c root.c \
  83.                     rotate.c send.c smooth.c sunraster.c value.c window.c \
  84.                     xbitmap.c xloadimage.c xpixmap.c xwd.c zio.c zoom.c
  85.              OBJS = bright.o clip.o cmuwmraster.o compress.o dither.o \
  86.             faces.o fbm.o fill.o g3.o gif.o halftone.o hash.o \
  87. !           imagetypes.o mac.o mcidas.o mc_tables.o merge.o misc.o \
  88. !           new.o options.o path.o pbm.o reduce.o rle.o rlelib.o root.o \
  89.                     rotate.o send.o smooth.o sunraster.o value.o window.o \
  90.                     xbitmap.o xloadimage.o xpixmap.o xwd.o zio.o zoom.o
  91.   
  92. diff -c src.2.00/Makefile src.2.01/Makefile
  93. *** src.2.00/Makefile    Sun Sep 30 15:46:25 1990
  94. --- src.2.01/Makefile    Sun Sep 30 15:00:32 1990
  95. ***************
  96. *** 1,8 ****
  97.   # Makefile for xloadimage.  this replaces the multiple makefiles used in
  98. ! # versions prior to xloadimage 1.07.
  99.   
  100.   SYSPATHFILE=/usr/lib/X11/Xloadimage
  101.   INSTALLDIR=/usr/bin/X11
  102.   STD_CC= cc
  103.   GCC= gcc
  104.   CP= cp
  105. --- 1,14 ----
  106.   # Makefile for xloadimage.  this replaces the multiple makefiles used in
  107. ! # versions prior to xloadimage 2.00.
  108. ! #
  109. ! # WARNING: if you use gcc 1.37, there is an optimizer bug which causes GIF
  110. ! # images to come out black and colormap reduction to fail.  Use gcc-1-37 as
  111. ! # your make target if you have gcc 1.37.
  112.   
  113.   SYSPATHFILE=/usr/lib/X11/Xloadimage
  114.   INSTALLDIR=/usr/bin/X11
  115. + SHELL= /bin/sh
  116. + MAKE= make
  117.   STD_CC= cc
  118.   GCC= gcc
  119.   CP= cp
  120. ***************
  121. *** 11,35 ****
  122.   LIBS= -lX11 -lm
  123.   CFLAGS= -O -DSYSPATHFILE=\"$(SYSPATHFILE)\" $(EXTRAFLAGS)
  124.   GCCFLAGS= -fstrength-reduce -finline-functions
  125. ! GCC137FLAGS= -fforce-mem -fforce-addr -fstrength-reduce -finline-functions -DSYSPATHFILE=\"$(SYSPATHFILE)\"
  126.   
  127. ! MISC= Imakefile Makefile README VMS-CHANGES buildshar.c xloadimage.man \
  128. !       patchlevel pbm.h rle.h sunraster.h xloadimage.h xwd.h
  129.   
  130.   INCS= cmuwmraster.h copyright.h fbm.h g3.h gif.h hash.h image.h imagetypes.h \
  131.         kljcpyrght.h mac.h mit.cpyrght mrmcpyrght.h options.h
  132.   
  133.   SRCS= bright.c clip.c cmuwmraster.c compress.c dither.c faces.c fbm.c \
  134. !       fill.c g3.c gif.c halftone.c hash.c imagetypes.c mac.c merge.c misc.c \
  135. !       new.c options.c path.c pbm.c reduce.c rle.c rlelib.c root.c \
  136. !       rotate.c send.c smooth.c sunraster.c value.c window.c xbitmap.c \
  137. !       xloadimage.c xpixmap.c xwd.c zio.c zoom.c 
  138.   
  139.   OBJS= bright.o clip.o cmuwmraster.o compress.o dither.o faces.o fbm.o \
  140. !       fill.o g3.o gif.o halftone.o hash.o imagetypes.o mac.o merge.o misc.o \
  141. !       new.o options.o path.o pbm.o reduce.o rle.o rlelib.o root.o \
  142. !       rotate.o send.o smooth.o sunraster.o value.o window.o xbitmap.o \
  143. !       xloadimage.o xpixmap.o xwd.o zio.o zoom.o
  144.   
  145.   ALL= $(MISC) $(INCS) $(SRCS)
  146.   
  147. --- 17,41 ----
  148.   LIBS= -lX11 -lm
  149.   CFLAGS= -O -DSYSPATHFILE=\"$(SYSPATHFILE)\" $(EXTRAFLAGS)
  150.   GCCFLAGS= -fstrength-reduce -finline-functions
  151. ! GCC137FLAGS= -fforce-mem -fforce-addr -fstrength-reduce -finline-functions
  152.   
  153. ! MISC= Imakefile Makefile Makefile.std README VMS-CHANGES buildshar.c \
  154. !       xloadimage.man patchlevel pbm.h rle.h sunraster.h xloadimage.h xwd.h
  155.   
  156.   INCS= cmuwmraster.h copyright.h fbm.h g3.h gif.h hash.h image.h imagetypes.h \
  157.         kljcpyrght.h mac.h mit.cpyrght mrmcpyrght.h options.h
  158.   
  159.   SRCS= bright.c clip.c cmuwmraster.c compress.c dither.c faces.c fbm.c \
  160. !       fill.c g3.c gif.c halftone.c hash.c imagetypes.c mac.c mcidas.c \
  161. !       mc_tables.c merge.c misc.c new.c options.c path.c pbm.c reduce.c \
  162. !       rle.c rlelib.c root.c rotate.c send.c smooth.c sunraster.c value.c \
  163. !       window.c xbitmap.c xloadimage.c xpixmap.c xwd.c zio.c zoom.c 
  164.   
  165.   OBJS= bright.o clip.o cmuwmraster.o compress.o dither.o faces.o fbm.o \
  166. !       fill.o g3.o gif.o halftone.o hash.o imagetypes.o mac.o mcidas.o \
  167. !       mc_tables.o merge.o misc.o new.o options.o path.o pbm.o reduce.o \
  168. !       rle.o rlelib.o root.o rotate.o send.o smooth.o sunraster.o value.o \
  169. !       window.o xbitmap.o xloadimage.o xpixmap.o xwd.o zio.o zoom.o
  170.   
  171.   ALL= $(MISC) $(INCS) $(SRCS)
  172.   
  173. ***************
  174. *** 39,51 ****
  175.   std:
  176.       @echo "Building standard distribution.  If this fails, consider trying"
  177.       @echo "'make sysv'."
  178. !     make xloadimage CC=$(STD_CC)
  179.   
  180.   # system-v target.  use this if you have a system-v compliant system.
  181.       
  182.   sysv:
  183.       @echo "Building standard distribution for System-V."
  184. !     make xloadimage CC=$(STD_CC) EXTRAFLAGS=-DSYSV
  185.   
  186.   # gcc target.  use this if you have a gcc that is not version 1.37.  you
  187.   # should add -DSYSV between the quotes in EXTRAFLAGS if your system is
  188. --- 45,57 ----
  189.   std:
  190.       @echo "Building standard distribution.  If this fails, consider trying"
  191.       @echo "'make sysv'."
  192. !     $(MAKE) xloadimage CC=$(STD_CC)
  193.   
  194.   # system-v target.  use this if you have a system-v compliant system.
  195.       
  196.   sysv:
  197.       @echo "Building standard distribution for System-V."
  198. !     $(MAKE) xloadimage CC=$(STD_CC) EXTRAFLAGS=-DSYSV
  199.   
  200.   # gcc target.  use this if you have a gcc that is not version 1.37.  you
  201.   # should add -DSYSV between the quotes in EXTRAFLAGS if your system is
  202. ***************
  203. *** 53,61 ****
  204.   
  205.   gcc:
  206.       @echo "Building distribution with GNU cc."
  207. !     @echo "If something doesn't work, try using 'make gcc-1-37' and then"
  208. !     @echo "'make std' before reporting a bug."
  209. !     make xloadimage CC=$(GCC) EXTRAFLAGS="$(GCCFLAGS)"
  210.   
  211.   # this target is for systems which use gcc 1.37.  there is a compiler bug
  212.   # in gcc 1.37 which causes some xloadimage functions to fail with the
  213. --- 59,73 ----
  214.   
  215.   gcc:
  216.       @echo "Building distribution with GNU cc."
  217. !     @echo "**************************************************************"
  218. !     @echo "If you use gcc 1.37, you should abort and type 'make gcc-1-37'"
  219. !     @echo "instead.  If GIF images always display solid black or if"
  220. !     @echo "color images reduce to only a single color, your version"
  221. !     @echo "of gcc has a bug and you should use the gcc-1-37 target."
  222. !     @echo "If something else doesn't work, try using 'make gcc-1-37' and"
  223. !     @echo "then 'make std' before reporting a bug."
  224. !     @echo "**************************************************************"
  225. !     $(MAKE) xloadimage CC=$(GCC) EXTRAFLAGS="$(GCCFLAGS)"
  226.   
  227.   # this target is for systems which use gcc 1.37.  there is a compiler bug
  228.   # in gcc 1.37 which causes some xloadimage functions to fail with the
  229. ***************
  230. *** 66,89 ****
  231.       @echo "Building distribution with GNU cc using flags for gcc 1.37."
  232.       @echo "If something doesn't work, try using std before reporting"
  233.       @echo "a bug."
  234. !     make xloadimage CC=$(GCC) EXTRAFLAGS="$(GCC137FLAGS)"
  235.   
  236.   sysv-gcc:
  237.       @echo "Building System-V distribution with GNU cc."
  238. !     @echo "If something doesn't work, try using 'make sysv-gcc-1-37' and"
  239. !     @echo "then 'make std' before reporting a bug."
  240. !     make xloadimage CC=$(GCC) EXTRAFLAGS="-DSYSV $(GCCFLAGS)"
  241.   
  242. ! # this target is for systems which use gcc 1.37.  there is a compiler bug
  243. ! # in gcc 1.37 which causes some xloadimage functions to fail with the
  244. ! # standard optimizations.  use this if GIF loading and colormap reduction
  245. ! # product black pictures.
  246.   
  247.   sysv-gcc-1-37:
  248.       @echo "Building System-V distribution with GNU cc using flags for"
  249.       @echo "gcc 1.37.  If something doesn't work, try using std before"
  250.       @echo "reporting a bug."
  251. !     make xloadimage CC=$(GCC) EXTRAFLAGS="-DSYSV $(GCC137FLAGS)"
  252.   
  253.   install: $(SYSPATHFILE)
  254.       $(RM) $(INSTALLDIR)/xloadimage
  255. --- 78,106 ----
  256.       @echo "Building distribution with GNU cc using flags for gcc 1.37."
  257.       @echo "If something doesn't work, try using std before reporting"
  258.       @echo "a bug."
  259. !     $(MAKE) xloadimage CC=$(GCC) EXTRAFLAGS="$(GCC137FLAGS)"
  260.   
  261.   sysv-gcc:
  262.       @echo "Building System-V distribution with GNU cc."
  263. !     @echo "Building distribution with GNU cc."
  264. !     @echo "***********************************************************"
  265. !     @echo "If you use gcc 1.37, you should abort and type"
  266. !     @echo "'make sysv-gcc-1-37' instead.  If GIF images always display"
  267. !     @echo "solid black or if color images reduce to only a single"
  268. !     @echo "color, your version of gcc has a bug and you should use"
  269. !     @echo "the gcc-1-37 target.  If something else doesn't work, try"
  270. !     @echo "using 'make sysv-gcc-1-37' and then 'make std' before"
  271. !     @echo "reporting a bug."
  272. !     @echo "***********************************************************"
  273. !     $(MAKE) xloadimage CC=$(GCC) EXTRAFLAGS="-DSYSV $(GCCFLAGS)"
  274.   
  275. ! # see comment for gcc-1-37 target.
  276.   
  277.   sysv-gcc-1-37:
  278.       @echo "Building System-V distribution with GNU cc using flags for"
  279.       @echo "gcc 1.37.  If something doesn't work, try using std before"
  280.       @echo "reporting a bug."
  281. !     $(MAKE) xloadimage CC=$(GCC) EXTRAFLAGS="-DSYSV $(GCC137FLAGS)"
  282.   
  283.   install: $(SYSPATHFILE)
  284.       $(RM) $(INSTALLDIR)/xloadimage
  285. ***************
  286. *** 121,129 ****
  287.   
  288.   shar: buildshar
  289.       rm -f shar.* doshar
  290.       ./buildshar $(ALL) > doshar
  291.       sh doshar
  292. !     rm doshar
  293.   
  294.   # targets for building tar distributions
  295.   
  296. --- 138,147 ----
  297.   
  298.   shar: buildshar
  299.       rm -f shar.* doshar
  300. +     cp Makefile Makefile.std # backup for imake users
  301.       ./buildshar $(ALL) > doshar
  302.       sh doshar
  303. !     rm doshar Makefile.std
  304.   
  305.   # targets for building tar distributions
  306.   
  307. ***************
  308. *** 133,139 ****
  309. --- 151,159 ----
  310.       compress xloadimage.tar
  311.   
  312.   xloadimage.tar:
  313. +     cp Makefile Makefile.std # backup for imake users
  314.       tar cf xloadimage.tar $(ALL)
  315. +     rm Makefile.std
  316.   
  317.   # these targets are for those of us who have Saber-C
  318.   
  319. diff -c src.2.00/README src.2.01/README
  320. *** src.2.00/README    Sun Sep 30 15:46:26 1990
  321. --- src.2.01/README    Sun Sep 30 15:17:59 1990
  322. ***************
  323. *** 10,15 ****
  324. --- 10,16 ----
  325.       Fuzzy Bitmap (FBM) images
  326.       GIF images
  327.       G3 FAX images
  328. +     McIDAS areafiles
  329.       MacPaint images
  330.       Portable Bitmap (PBM) images
  331.       Sun monochrome rasterfiles
  332. ***************
  333. *** 35,41 ****
  334.   If you are compiling under the X11R4 distribution, the apropriate
  335.   Imakefile is included and you should compile as with any other client.
  336.   I haven't personally tested this, but if it's broken it'll be easy to
  337. ! fix.
  338.   
  339.   If you're compiling on a BSD system or a system that's mostly BSDish,
  340.   use "make std" or just "make".  If you have gcc you should keep
  341. --- 36,43 ----
  342.   If you are compiling under the X11R4 distribution, the apropriate
  343.   Imakefile is included and you should compile as with any other client.
  344.   I haven't personally tested this, but if it's broken it'll be easy to
  345. ! fix.  Since imake trashes the standard Makefile, a backup copy is kept
  346. ! in Makefile.std.
  347.   
  348.   If you're compiling on a BSD system or a system that's mostly BSDish,
  349.   use "make std" or just "make".  If you have gcc you should keep
  350. ***************
  351. *** 121,132 ****
  352.   reporting a bug.
  353.   
  354.   Functions implementing new image types are welcomed; mail them to the
  355. ! same address and I'll do my best to distribute them.  Try do send them
  356. ! as public domain so I can keep the number of differing copyright
  357. ! messages to a minimum -- I'll use my standard message and leave the
  358. ! implementor's name and information in the file for credit.  I wouldn't
  359. ! copyright this stuff at all except that it's a requirement for X11
  360. ! distribution.
  361.   
  362.   THANKS
  363.   
  364. --- 123,134 ----
  365.   reporting a bug.
  366.   
  367.   Functions implementing new image types are welcomed; mail them to the
  368. ! same address and I'll do my best to distribute them.  Please include a
  369. ! small sample image.  Try to send them as public domain so I can keep
  370. ! the number of differing copyright messages to a minimum -- I'll use my
  371. ! standard message and leave the implementor's name and information in
  372. ! the file for credit.  I wouldn't copyright this stuff at all except
  373. ! that it's a requirement for X11 distribution.
  374.   
  375.   THANKS
  376.   
  377. ***************
  378. *** 139,156 ****
  379.   for miscellaneous bug fixes, to Anthony A. Datri (datri@convex.com)
  380.   for adding the class hint, to Mark Moraes (moraes@cs.toronto.edu) for
  381.   the slideshow colormap fix, to Gregg Townsend (gmt@cs.arizona.edu) for
  382. ! a suggested dithering routine, to Brian Frost (B1F5814@RIGEL.TAMU.EDU)
  383. ! for changes for VMS, to Chip Horstman for G3 FAX support, to Deron
  384. ! Dann Johnson (dj@eng.sun.com) for fixing the RetainTemporary bug, to
  385. ! Tom Tatlow (tatlow@dash.enet.dec.com) for image rotation code, to Mark
  386. ! A. Horstman (mhorstm@sarek.sbc.com) for tilde expansion in
  387. ! .xloadimagerc files and virtual-root support in root.c, to Tim Roper
  388. ! (timr@labtam.labtam.oz.au), Graeme Gill (graeme@labtam.oz.au) for
  389. ! gamma correction and Utah RLE image support, Mark Majhor
  390. ! (uunet!sequent!markm) for FBM and MacPaint support, Ian MacPhedran
  391. ! (macphed@dvinci.usask.ca) for PGM and PPM support, Per Fogelstrom
  392. ! (pf@diab.se) for a fix to send.c, and any others whose names I've
  393. ! missed.
  394.   
  395.   HISTORY
  396.   
  397. --- 141,162 ----
  398.   for miscellaneous bug fixes, to Anthony A. Datri (datri@convex.com)
  399.   for adding the class hint, to Mark Moraes (moraes@cs.toronto.edu) for
  400.   the slideshow colormap fix, to Gregg Townsend (gmt@cs.arizona.edu) for
  401. ! a suggested dithering routine and other fixes, to Brian Frost
  402. ! (B1F5814@RIGEL.TAMU.EDU) for changes for VMS, to Chip Horstman for G3
  403. ! FAX support, to Deron Dann Johnson (dj@eng.sun.com) for fixing the
  404. ! RetainTemporary bug, to Tom Tatlow (tatlow@dash.enet.dec.com) for
  405. ! image rotation code, to Mark A. Horstman (mhorstm@sarek.sbc.com) for
  406. ! tilde expansion in .xloadimagerc files and virtual-root support in
  407. ! root.c, to Tim Roper (timr@labtam.labtam.oz.au), Graeme Gill
  408. ! (graeme@labtam.oz.au) for gamma correction and Utah RLE image support,
  409. ! Mark Majhor (uunet!sequent!markm) for FBM and MacPaint support, Ian
  410. ! MacPhedran (macphed@dvinci.usask.ca) for PGM and PPM support, Per
  411. ! Fogelstrom (pf@diab.se) for a fix to send.c, Hans J. Albertsson
  412. ! (hans@Sweden.Sun.COM) for cleaning up GIF aborting, Graham Hudspith
  413. ! (gwh@inmos.com) for a geometry patch, Glenn P. Davis
  414. ! (davis@unidata.ucar.edu) for McIDAS areafile support, Keith S. Pickens
  415. ! (maxwell.nde.swri.edu!ksp) for fixing the RLE loader to work with the
  416. ! updated zio package, and any others whose names I've missed.
  417.   
  418.   HISTORY
  419.   
  420. ***************
  421. *** 199,212 ****
  422.   changes to root.c to make previously allocated resources be freed
  423.   properly, and a completely new dithering routine.
  424.   
  425. ! Patchlevel 07 contained support for MacPaint, FBM, PGM, PPM, CMU, Utah
  426. ! RLE and XWD image formats, gamma equalization, image smoothing, and
  427. ! image rotation.  G3 FAX support was modified to cut down on false
  428. ! positive identifications.  The zio subsystem was modified to cache
  429. ! reads for performance improvements and to allow stdin to be used as an
  430. ! input source.  Several loader functions which did not properly close
  431. ! their files were fixed.  Color slideshows now work.  Icon titles use
  432. ! an abbreviated titlebar title to enhance readability.  The resource
  433. ! class name was changed from XLoadImage to xloadimage to be more
  434. ! predictable.  Several options now propagate to all images following
  435. ! them if the -slideshow option is specified.
  436. --- 205,226 ----
  437.   changes to root.c to make previously allocated resources be freed
  438.   properly, and a completely new dithering routine.
  439.   
  440. ! Version 2, patchlevel 00 contained support for MacPaint, FBM, PGM,
  441. ! PPM, CMU, Utah RLE and XWD image formats, gamma equalization, image
  442. ! smoothing, and image rotation.  G3 FAX support was modified to cut
  443. ! down on false positive identifications.  The zio subsystem was
  444. ! modified to cache reads for performance improvements and to allow
  445. ! stdin to be used as an input source.  Several loader functions which
  446. ! did not properly close their files were fixed.  Color slideshows now
  447. ! work.  Icon titles use an abbreviated titlebar title to enhance
  448. ! readability.  The resource class name was changed from XLoadImage to
  449. ! xloadimage to be more predictable.  Several options now propagate to
  450. ! all images following them if the -slideshow option is specified.
  451. ! Version 2.01 contained several fixes to window.c to work around a bug
  452. ! in twm/tvtwm which could crash servers.  The resource class name was
  453. ! changed (again) to Xloadimage to conform with standard class naming
  454. ! practices.  Several problems with System-V compilation were corrected.
  455. ! The gcc-1-37 make target was fixed to prevent a double-define.  The
  456. ! GIF loader was patched to respond better to short GIF files.  The Utah
  457. ! RLE image loader was patched to work with the updated ZIO package.
  458. diff -c src.2.00/cmuwmraster.c src.2.01/cmuwmraster.c
  459. *** src.2.00/cmuwmraster.c    Sun Sep 30 15:46:41 1990
  460. --- src.2.01/cmuwmraster.c    Sun Sep 30 13:20:25 1990
  461. ***************
  462. *** 72,78 ****
  463.       ZFILE *zf;
  464.       struct cmuwm_header header;
  465.       Image *image;
  466. !     int depth, height, width, row, col, linelen, r;
  467.       byte *lineptr;
  468.   
  469.       if (!(zf= zopen(fullname))) 
  470. --- 72,78 ----
  471.       ZFILE *zf;
  472.       struct cmuwm_header header;
  473.       Image *image;
  474. !     int height, width, row, col, linelen, r;
  475.       byte *lineptr;
  476.   
  477.       if (!(zf= zopen(fullname))) 
  478. ***************
  479. *** 106,112 ****
  480.         {
  481.         fprintf(stderr,"CMU WM raster %s is of depth %d, must be 1",
  482.             name,
  483. !           depth);
  484.         return(NULL);
  485.         }
  486.   
  487. --- 106,112 ----
  488.         {
  489.         fprintf(stderr,"CMU WM raster %s is of depth %d, must be 1",
  490.             name,
  491. !           header.depth);
  492.         return(NULL);
  493.         }
  494.   
  495. diff -c src.2.00/copyright.h src.2.01/copyright.h
  496. *** src.2.00/copyright.h    Sun Sep 30 15:46:34 1990
  497. --- src.2.01/copyright.h    Wed Sep 26 17:17:55 1990
  498. ***************
  499. *** 19,24 ****
  500.    * USE OR PERFORMANCE OF THIS SOFTWARE.
  501.    */
  502.   
  503. ! static char *Copyright= "Copyright 1989 Jim Frost";
  504.   #define _JIM_COPYRIGHT_
  505.   #endif
  506. --- 19,24 ----
  507.    * USE OR PERFORMANCE OF THIS SOFTWARE.
  508.    */
  509.   
  510. ! static char *Copyright= "Copyright 1989, 1990 Jim Frost";
  511.   #define _JIM_COPYRIGHT_
  512.   #endif
  513. diff -c src.2.00/g3.c src.2.01/g3.c
  514. *** src.2.00/g3.c    Sun Sep 30 15:46:45 1990
  515. --- src.2.01/g3.c    Sun Sep 30 15:06:33 1990
  516. ***************
  517. *** 280,286 ****
  518.       int    ret = 0;
  519.   
  520.       for (g3_rawzeros = 0; !g3_rawgetbit(fd) && !g3_eof;);
  521. !     if(g3_rawzeros >=11 || g3_rawzeros <= 15)
  522.           ret = 1;
  523.   
  524.       return(ret);
  525. --- 280,286 ----
  526.       int    ret = 0;
  527.   
  528.       for (g3_rawzeros = 0; !g3_rawgetbit(fd) && !g3_eof;);
  529. !     if(g3_rawzeros >=11 && g3_rawzeros <= 15)
  530.           ret = 1;
  531.   
  532.       return(ret);
  533. diff -c src.2.00/gif.c src.2.01/gif.c
  534. *** src.2.00/gif.c    Sun Sep 30 15:46:47 1990
  535. --- src.2.01/gif.c    Sun Sep 30 14:26:27 1990
  536. ***************
  537. *** 573,579 ****
  538.       for (x= 0; x < gifin_img_width; x++) {
  539.         if (gifin_get_pixel(&pixel) != GIFIN_SUCCESS) {
  540.           printf("%s: Short read within image data\n", fullname);
  541. !         exit(0);
  542.         }
  543.         valToMem(pixel, pixptr, image->pixlen);
  544.         pixptr += image->pixlen;
  545. --- 573,579 ----
  546.       for (x= 0; x < gifin_img_width; x++) {
  547.         if (gifin_get_pixel(&pixel) != GIFIN_SUCCESS) {
  548.           printf("%s: Short read within image data\n", fullname);
  549. !         y = gifin_img_height; x = gifin_img_width;
  550.         }
  551.         valToMem(pixel, pixptr, image->pixlen);
  552.         pixptr += image->pixlen;
  553. ***************
  554. *** 593,599 ****
  555.         for (x= 0; x < gifin_img_width; x++) {
  556.       if (gifin_get_pixel(&pixel) != GIFIN_SUCCESS) {
  557.         printf("%s: Short read within image data\n", fullname);
  558. !       exit(0);
  559.       }
  560.       valToMem(pixel, pixptr, image->pixlen);
  561.       pixptr += image->pixlen;
  562. --- 593,599 ----
  563.         for (x= 0; x < gifin_img_width; x++) {
  564.       if (gifin_get_pixel(&pixel) != GIFIN_SUCCESS) {
  565.         printf("%s: Short read within image data\n", fullname);
  566. !       y = gifin_img_height; x = gifin_img_width;
  567.       }
  568.       valToMem(pixel, pixptr, image->pixlen);
  569.       pixptr += image->pixlen;
  570. diff -c src.2.00/image.h src.2.01/image.h
  571. *** src.2.00/image.h    Sun Sep 30 15:46:36 1990
  572. --- src.2.01/image.h    Sun Sep 30 15:45:16 1990
  573. ***************
  574. *** 16,22 ****
  575.   typedef unsigned char  byte;      /* byte type */
  576.   
  577.   struct cache {
  578. !   unsigned int  len;
  579.     char          buf[BUFSIZ];
  580.     struct cache *next;
  581.   };
  582. --- 16,22 ----
  583.   typedef unsigned char  byte;      /* byte type */
  584.   
  585.   struct cache {
  586. !   int           len;
  587.     char          buf[BUFSIZ];
  588.     struct cache *next;
  589.   };
  590. diff -c src.2.00/imagetypes.h src.2.01/imagetypes.h
  591. *** src.2.00/imagetypes.h    Sun Sep 30 15:46:37 1990
  592. --- src.2.01/imagetypes.h    Sun Sep 30 15:50:20 1990
  593. ***************
  594. *** 19,24 ****
  595. --- 19,25 ----
  596.   Image *fbmLoad();
  597.   Image *macLoad();
  598.   Image *cmuwmLoad();
  599. + Image *mcidasLoad();
  600.   
  601.   int facesIdent();
  602.   int pbmIdent();
  603. ***************
  604. *** 32,37 ****
  605. --- 33,39 ----
  606.   int fbmIdent();
  607.   int macIdent();
  608.   int cmuwmIdent();
  609. + int mcidasIdent();
  610.   
  611.   /* some of these are order-dependent
  612.    */
  613. ***************
  614. *** 44,54 ****
  615.     fbmIdent,       fbmLoad,       "FBM Image",
  616.     sunRasterIdent, sunRasterLoad, "Sun Rasterfile",
  617.     cmuwmIdent,     cmuwmLoad,     "CMU WM Raster",
  618. !   pbmIdent,       pbmLoad,       "Portable Bit Map (PBM)",
  619.     facesIdent,     facesLoad,     "Faces Project",
  620.     gifIdent,       gifLoad,       "GIF Image",
  621.     rleIdent,       rleLoad,       "Utah RLE Image",
  622.     xwdIdent,       xwdLoad,       "X Window Dump",
  623.     macIdent,       macLoad,       "MacPaint Image",
  624.     xpixmapIdent,   xpixmapLoad,   "X Pixmap",
  625.     xbitmapIdent,   xbitmapLoad,   "X Bitmap",
  626. --- 46,57 ----
  627.     fbmIdent,       fbmLoad,       "FBM Image",
  628.     sunRasterIdent, sunRasterLoad, "Sun Rasterfile",
  629.     cmuwmIdent,     cmuwmLoad,     "CMU WM Raster",
  630. !   pbmIdent,       pbmLoad,       "Portable Bit Map (PBM, PGM, PPM)",
  631.     facesIdent,     facesLoad,     "Faces Project",
  632.     gifIdent,       gifLoad,       "GIF Image",
  633.     rleIdent,       rleLoad,       "Utah RLE Image",
  634.     xwdIdent,       xwdLoad,       "X Window Dump",
  635. +   mcidasIdent,    mcidasLoad,    "McIDAS areafile",
  636.     macIdent,       macLoad,       "MacPaint Image",
  637.     xpixmapIdent,   xpixmapLoad,   "X Pixmap",
  638.     xbitmapIdent,   xbitmapLoad,   "X Bitmap",
  639. diff -c src.2.00/merge.c src.2.01/merge.c
  640. *** src.2.00/merge.c    Sun Sep 30 15:46:50 1990
  641. --- src.2.01/merge.c    Sun Sep 30 15:43:43 1990
  642. ***************
  643. *** 271,277 ****
  644.        Image        *src;
  645.        int           atx, aty;
  646.        unsigned int  verbose;
  647. ! { unsigned int clipw, cliph;
  648.     int clipped = 0;
  649.   
  650.     goodImage(dest, "merge");
  651. --- 271,277 ----
  652.        Image        *src;
  653.        int           atx, aty;
  654.        unsigned int  verbose;
  655. ! { int clipw, cliph;
  656.     int clipped = 0;
  657.   
  658.     goodImage(dest, "merge");
  659. diff -c src.2.00/patchlevel src.2.01/patchlevel
  660. *** src.2.00/patchlevel    Sun Sep 30 15:46:28 1990
  661. --- src.2.01/patchlevel    Wed Sep 26 12:19:32 1990
  662. ***************
  663. *** 2,5 ****
  664.    */
  665.   
  666.   #define VERSION    "2"
  667. ! #define PATCHLEVEL "00"
  668. --- 2,5 ----
  669.    */
  670.   
  671.   #define VERSION    "2"
  672. ! #define PATCHLEVEL "01"
  673. diff -c src.2.00/rlelib.c src.2.01/rlelib.c
  674. *** src.2.00/rlelib.c    Sun Sep 30 15:47:03 1990
  675. --- src.2.01/rlelib.c    Sun Sep 30 15:09:24 1990
  676. ***************
  677. *** 19,24 ****
  678. --- 19,25 ----
  679.   #include "rle.h"
  680.   
  681.   #define zeof(zfp) feof((zfp)->stream)
  682. + #define zclearerr(zfp) clearerr((zfp)->stream)
  683.   
  684.   /*
  685.    * This software is copyrighted as noted below.  It may be freely copied,
  686. ***************
  687. *** 897,902 ****
  688. --- 898,904 ----
  689.       register int i;
  690.       char * comment_buf;
  691.   
  692. +     zclearerr(infile);
  693.       BREAD( short, magic, sizeof magic );
  694.       SWAB(magic);
  695.       if ( zeof( infile ) )
  696. diff -c src.2.00/smooth.c src.2.01/smooth.c
  697. *** src.2.00/smooth.c    Sun Sep 30 15:46:59 1990
  698. --- src.2.01/smooth.c    Wed Sep 26 17:18:27 1990
  699. ***************
  700. *** 4,10 ****
  701.    *
  702.    * jim frost 09.20.90
  703.    *
  704. !  * Copyright 1989 Jim Frost.  See included file "copyright.h" for complete
  705.    * copyright information.
  706.    */
  707.   
  708. --- 4,10 ----
  709.    *
  710.    * jim frost 09.20.90
  711.    *
  712. !  * Copyright 1990 Jim Frost.  See included file "copyright.h" for complete
  713.    * copyright information.
  714.    */
  715.   
  716. ***************
  717. *** 65,74 ****
  718.   
  719.     pick= areasize= rgb->used / 2;
  720.     while ((pick > 0) && (pick < rgb->used - 1)) {
  721. -     areasize= (areasize + 1) >> 1;
  722. -     pick += (carray[pick].sum > sum ? -areasize : areasize);
  723.       if ((carray[pick].sum <= sum) && (sum < carray[pick + 1].sum))
  724.         break;
  725.     }
  726.   
  727.     /* look at colors that are a little darker than we are
  728. --- 65,84 ----
  729.   
  730.     pick= areasize= rgb->used / 2;
  731.     while ((pick > 0) && (pick < rgb->used - 1)) {
  732.       if ((carray[pick].sum <= sum) && (sum < carray[pick + 1].sum))
  733.         break;
  734. +     areasize= (areasize + 1) >> 1;
  735. +     if (carray[pick].sum > sum) {
  736. +       if (pick > areasize)
  737. +     pick -= areasize;
  738. +       else
  739. +     pick= 0;
  740. +     }
  741. +     else {
  742. +       pick += areasize;
  743. +       if (pick >= rgb->used)
  744. +     pick= rgb->used - 1;
  745. +     }
  746.     }
  747.   
  748.     /* look at colors that are a little darker than we are
  749. diff -c src.2.00/window.c src.2.01/window.c
  750. *** src.2.00/window.c    Sun Sep 30 15:47:04 1990
  751. --- src.2.01/window.c    Sun Sep 30 14:36:23 1990
  752. ***************
  753. *** 14,22 ****
  754.   #include <X11/cursorfont.h>
  755.   
  756.   #ifdef SYSV
  757. ! #include <strings.h>
  758.   #define index strchr
  759. ! y#define rindex strrchr
  760.   #else
  761.   char *index();
  762.   char *rindex();
  763. --- 14,22 ----
  764.   #include <X11/cursorfont.h>
  765.   
  766.   #ifdef SYSV
  767. ! #include <string.h>
  768.   #define index strchr
  769. ! #define rindex strrchr
  770.   #else
  771.   char *index();
  772.   char *rindex();
  773. ***************
  774. *** 167,173 ****
  775.        unsigned int  verbose;
  776.   { Pixmap               pixmap;
  777.     Colormap             xcmap;
  778. -   static Colormap      tmpxcmap= 0; /* used when in slideshow mode */
  779.     XSetWindowAttributes swa;
  780.     XSizeHints           sh;
  781.     XWMHints             wmh;
  782. --- 167,172 ----
  783. ***************
  784. *** 187,202 ****
  785.       XResizeRequestEvent resize;
  786.     } event;
  787.     unsigned int          winx, winy, winwidth, winheight;
  788. -   char                  def_geom[30];
  789.   
  790.     /* figure out the window size.  unless specifically requested to do so,
  791.      * we will not exceed 90% of display real estate.
  792.      */
  793.   
  794. !   sprintf(def_geom, "%ux%u+0+0", image->width, image->height);
  795. !   XGeometry(disp, scrn, user_geometry, def_geom, 0, 1, 1, 0, 0,
  796. !         &winx, &winy, &winwidth, &winheight);
  797.   
  798.     if (fullscreen) {
  799.       winwidth= DisplayWidth(disp, scrn);
  800.       winheight= DisplayHeight(disp, scrn);
  801. --- 186,207 ----
  802.       XResizeRequestEvent resize;
  803.     } event;
  804.     unsigned int          winx, winy, winwidth, winheight;
  805.   
  806.     /* figure out the window size.  unless specifically requested to do so,
  807.      * we will not exceed 90% of display real estate.
  808.      */
  809.   
  810. !   if (user_geometry == NULL) {
  811. !     winx= winy= winwidth= winheight= 0;
  812. !   }
  813. !   else {
  814. !     char                def_geom[30];
  815.   
  816. +     sprintf(def_geom, "%ux%u+0+0", image->width, image->height);
  817. +     XGeometry(disp, scrn, user_geometry, def_geom, 0, 1, 1, 0, 0,
  818. +           &winx, &winy, &winwidth, &winheight);
  819. +   }
  820.     if (fullscreen) {
  821.       winwidth= DisplayWidth(disp, scrn);
  822.       winheight= DisplayHeight(disp, scrn);
  823. ***************
  824. *** 238,253 ****
  825.                      CWBitGravity | CWCursor | CWColormap |
  826.                      CWEventMask | CWSaveUnder, &swa);
  827.       XSetCommand(disp, ImageWindow, argv, argc);
  828. !     classHint.res_class = "xloadimage";
  829.       classHint.res_name=NULL;
  830.       (void) XSetClassHint(disp,ImageWindow,&classHint);
  831.       paint= 0;
  832.     }
  833. !   else {
  834. !     XResizeWindow(disp, ImageWindow, winwidth, winheight);
  835. !     XChangeWindowAttributes(disp, ImageWindow, CWColormap, &swa);
  836.       paint= 1;
  837. !   }
  838.     XStoreName(disp, ImageWindow, image->title);
  839.     XSetIconName(disp, ImageWindow, iconName(image->title));
  840.   
  841. --- 243,256 ----
  842.                      CWBitGravity | CWCursor | CWColormap |
  843.                      CWEventMask | CWSaveUnder, &swa);
  844.       XSetCommand(disp, ImageWindow, argv, argc);
  845. !     classHint.res_class = "Xloadimage";
  846.       classHint.res_name=NULL;
  847.       (void) XSetClassHint(disp,ImageWindow,&classHint);
  848.       paint= 0;
  849.     }
  850. !   else
  851.       paint= 1;
  852.     XStoreName(disp, ImageWindow, image->title);
  853.     XSetIconName(disp, ImageWindow, iconName(image->title));
  854.   
  855. ***************
  856. *** 265,275 ****
  857.     }
  858.     sh.width_inc= 1;
  859.     sh.height_inc= 1;
  860. !   if (slideshow) {
  861. !       sh.flags= PMinSize | PResizeInc;
  862. !   } else {
  863. !       sh.flags= PMinSize | PMaxSize | PResizeInc;
  864. !   }
  865.     if (lastx || fullscreen)
  866.       sh.flags |= USSize;
  867.     else
  868. --- 268,274 ----
  869.     }
  870.     sh.width_inc= 1;
  871.     sh.height_inc= 1;
  872. !   sh.flags= PMinSize | PMaxSize | PResizeInc;
  873.     if (lastx || fullscreen)
  874.       sh.flags |= USSize;
  875.     else
  876. ***************
  877. *** 294,315 ****
  878.     gc= XCreateGC(disp, ImageWindow, GCFunction | GCForeground, &gcv);
  879.     XMapWindow(disp, ImageWindow);
  880.     placeImage(image->width, image->height, winwidth, winheight, &pixx, &pixy);
  881. !   if (paint)
  882.       blitImage(disp, pixmap, ImageWindow, gc,
  883.             pixx, pixy, image->width, image->height, winwidth, winheight,
  884.             0, 0, winwidth, winheight);
  885.     setCursor(disp, ImageWindow, image->width, image->height,
  886.           winwidth, winheight, &(swa.cursor));
  887.   
  888. -  /* free old image's colormap if necessary.  this is done here to minimize
  889. -   * technicolor when swapping images.
  890. -   */
  891. -   if (slideshow && tmpxcmap) {
  892. -     XFreeColormap(disp, tmpxcmap);
  893. -     tmpxcmap= 0;
  894. -   }
  895.     lastx= lasty= -1;
  896.     for (;;) {
  897.       XNextEvent(disp, &event);
  898. --- 293,309 ----
  899.     gc= XCreateGC(disp, ImageWindow, GCFunction | GCForeground, &gcv);
  900.     XMapWindow(disp, ImageWindow);
  901.     placeImage(image->width, image->height, winwidth, winheight, &pixx, &pixy);
  902. !   if (paint) {
  903.       blitImage(disp, pixmap, ImageWindow, gc,
  904.             pixx, pixy, image->width, image->height, winwidth, winheight,
  905.             0, 0, winwidth, winheight);
  906. +     XResizeWindow(disp, ImageWindow, winwidth, winheight);
  907. +     XChangeWindowAttributes(disp, ImageWindow, CWColormap, &swa);
  908. +   }
  909.     setCursor(disp, ImageWindow, image->width, image->height,
  910.           winwidth, winheight, &(swa.cursor));
  911.   
  912.     lastx= lasty= -1;
  913.     for (;;) {
  914.       XNextEvent(disp, &event);
  915. ***************
  916. *** 329,339 ****
  917.         char ret;
  918.         Cursor cursor;
  919.   
  920. !       XLookupString(&event.key,buf,128,&ks,&status);
  921.         ret= buf[0];
  922.         if (isupper(ret))
  923.       ret= tolower(ret);
  924.         switch (ret) {
  925.         case 'n':
  926.         case 'p':
  927.       cursor= swa.cursor;
  928. --- 323,335 ----
  929.         char ret;
  930.         Cursor cursor;
  931.   
  932. !       if (XLookupString(&event.key,buf,128,&ks,&status) != 1)
  933. !     break;
  934.         ret= buf[0];
  935.         if (isupper(ret))
  936.       ret= tolower(ret);
  937.         switch (ret) {
  938. +       case ' ':
  939.         case 'n':
  940.         case 'p':
  941.       cursor= swa.cursor;
  942. ***************
  943. *** 354,363 ****
  944.        * trying XQueryColor on an unallocated colormap entry so I gave up.
  945.        */
  946.   
  947. -     if (slideshow && xcmap == DefaultColormap(disp, scrn) && (ret != 'q'))
  948. -       tmpxcmap= XCopyColormapAndFree(disp, xcmap);
  949.       if (xcmap != DefaultColormap(disp, scrn))
  950. !           XFreeColormap(disp, xcmap);
  951.       return(ret);
  952.         }
  953.         break;
  954. --- 350,360 ----
  955.        * trying XQueryColor on an unallocated colormap entry so I gave up.
  956.        */
  957.   
  958.       if (xcmap != DefaultColormap(disp, scrn))
  959. !         XFreeColormap(disp, xcmap);
  960. !     else if (slideshow)
  961. !       XFreeColormap(disp, XCopyColormapAndFree(disp, xcmap));
  962.       return(ret);
  963.         }
  964.         break;
  965. diff -c src.2.00/xloadimage.c src.2.01/xloadimage.c
  966. *** src.2.00/xloadimage.c    Sun Sep 30 15:47:05 1990
  967. --- src.2.01/xloadimage.c    Sun Sep 30 14:00:13 1990
  968. ***************
  969. *** 366,371 ****
  970. --- 366,375 ----
  971.   
  972.       case XZOOM:
  973.         if (argv[++a]) {
  974. +     if (atoi(argv[a]) < 0) {
  975. +       printf("Zoom argument must be positive (ignored).\n");
  976. +       continue;
  977. +     }
  978.       images[imagecount].xzoom= atoi(argv[a]);
  979.       if (slideshow)
  980.         slide_xzoom= images[imagecount].xzoom;
  981. ***************
  982. *** 374,379 ****
  983. --- 378,387 ----
  984.   
  985.       case YZOOM:
  986.         if (argv[++a]) {
  987. +     if (atoi(argv[a]) < 0) {
  988. +       printf("Zoom argument must be positive (ignored).\n");
  989. +       continue;
  990. +     }
  991.       images[imagecount].yzoom= atoi(argv[a]);
  992.       if (slideshow)
  993.         slide_yzoom= images[imagecount].yzoom;
  994. ***************
  995. *** 382,387 ****
  996. --- 390,399 ----
  997.   
  998.       case ZOOM:
  999.         if (argv[++a]) {
  1000. +     if (atoi(argv[a]) < 0) {
  1001. +       printf("Zoom argument must be positive (ignored).\n");
  1002. +       continue;
  1003. +     }
  1004.       images[imagecount].xzoom= images[imagecount].yzoom= atoi(argv[a]);
  1005.       if (slideshow)
  1006.         slide_xzoom= slide_yzoom= images[imagecount].xzoom;
  1007. ***************
  1008. *** 425,435 ****
  1009.       exit(1);
  1010.     }
  1011.     Scrn= scrn= DefaultScreen(disp);
  1012. - #if defined(mips) || defined(_IBMR2)
  1013.     XSetIOErrorHandler(ioErrorHandler);
  1014. - #else
  1015. -   XSetIOErrorHandler((XIOErrorHandler)ioErrorHandler);
  1016. - #endif
  1017.   
  1018.     dispimage= NULL;
  1019.   
  1020. --- 437,443 ----
  1021. ***************
  1022. *** 506,512 ****
  1023.         case 'q':  /* user quit */
  1024.       XCloseDisplay(disp);
  1025.       exit(0);
  1026. !     
  1027.         case 'n':  /* next image */
  1028.       break;
  1029.         case 'p':  /* previous image */
  1030. --- 514,520 ----
  1031.         case 'q':  /* user quit */
  1032.       XCloseDisplay(disp);
  1033.       exit(0);
  1034. !       case ' ':
  1035.         case 'n':  /* next image */
  1036.       break;
  1037.         case 'p':  /* previous image */
  1038. diff -c src.2.00/xloadimage.man src.2.01/xloadimage.man
  1039. *** src.2.00/xloadimage.man    Sun Sep 30 15:46:33 1990
  1040. --- src.2.01/xloadimage.man    Sun Sep 30 15:02:32 1990
  1041. ***************
  1042. *** 46,55 ****
  1043.   \fIXsetbg\fR is equivalent to \fIxloadimage -onroot -quiet\fR and
  1044.   \fIxview\fR is equivalent to \fIxloadimage -view -verbose\fR.
  1045.   .SH RESOURCE CLASS
  1046. ! \fIXloadimage\fR uses the resource class name \fIxloadimage\fR for
  1047.   window managers which need this resource set.  This name changed
  1048. ! in version 2.00; some previous versions used the name \fIXLoadImage\fR
  1049. ! which was difficult to predict.
  1050.   .SH GLOBAL OPTIONS
  1051.   The following options affect the global operation of \fIxloadimage\fR.
  1052.   They may be specified anywhere on the command line.
  1053. --- 46,56 ----
  1054.   \fIXsetbg\fR is equivalent to \fIxloadimage -onroot -quiet\fR and
  1055.   \fIxview\fR is equivalent to \fIxloadimage -view -verbose\fR.
  1056.   .SH RESOURCE CLASS
  1057. ! \fIXloadimage\fR uses the resource class name \fIXloadimage\fR for
  1058.   window managers which need this resource set.  This name changed
  1059. ! in version 2.00 and 2.01; some previous versions used the name
  1060. ! \fIXLoadImage\fR (which was difficult to predict) or \fIxloadimage\fR
  1061. ! (which conflicted with class naming conventions).
  1062.   .SH GLOBAL OPTIONS
  1063.   The following options affect the global operation of \fIxloadimage\fR.
  1064.   They may be specified anywhere on the command line.
  1065. ***************
  1066. *** 125,131 ****
  1067.   .TP
  1068.   -view
  1069.   View image(s) in a window.  This is the opposite of \fI-onroot\fR and
  1070. ! the default for \fIxsetbg\fR. 
  1071.   .SH IMAGE OPTIONS
  1072.   The following options may preceed each image.  These options are
  1073.   local to the image they preceed. 
  1074. --- 126,132 ----
  1075.   .TP
  1076.   -view
  1077.   View image(s) in a window.  This is the opposite of \fI-onroot\fR and
  1078. ! the default for \fIxview\fR and \fIxloadimage\fR. 
  1079.   .SH IMAGE OPTIONS
  1080.   The following options may preceed each image.  These options are
  1081.   local to the image they preceed. 
  1082. ***************
  1083. *** 347,352 ****
  1084. --- 348,354 ----
  1085.     Fuzzy Bitmap (FBM) images
  1086.     GIF images
  1087.     G3 FAX images
  1088. +   McIDAS areafiles
  1089.     MacPaint images
  1090.     Portable Bitmap (PBM) images
  1091.     Sun monochrome rasterfiles
  1092. diff -c src.2.00/xwd.c src.2.01/xwd.c
  1093. *** src.2.00/xwd.c    Sun Sep 30 15:47:07 1990
  1094. --- src.2.01/xwd.c    Sun Sep 30 13:17:36 1990
  1095. ***************
  1096. *** 8,14 ****
  1097.    *
  1098.    * jim frost 07.24.90
  1099.    *
  1100. !  * Copyright 1989 Jim Frost.  See included file "copyright.h" for complete
  1101.    * copyright information.
  1102.    */
  1103.   
  1104. --- 8,14 ----
  1105.    *
  1106.    * jim frost 07.24.90
  1107.    *
  1108. !  * Copyright 1990 Jim Frost.  See included file "copyright.h" for complete
  1109.    * copyright information.
  1110.    */
  1111.   
  1112. ***************
  1113. *** 335,340 ****
  1114. --- 335,341 ----
  1115.       depth= header.pixmap_depth;
  1116.   
  1117.     pixmask= 0xffffffff >> (32 - header.pixmap_depth);
  1118. +   pixlen= image->pixlen;
  1119.     if (header.bytes_per_line)
  1120.       dlinelen= header.bytes_per_line;
  1121.     else
  1122. diff -c src.2.00/zio.c src.2.01/zio.c
  1123. *** src.2.00/zio.c    Sun Sep 30 15:47:01 1990
  1124. --- src.2.01/zio.c    Wed Sep 26 17:19:05 1990
  1125. ***************
  1126. *** 6,13 ****
  1127.    *
  1128.    * this was hacked on 09.12.90 to cache reads and to use stdin.
  1129.    *
  1130. !  * Copyright 1989 Jim Frost.  See included file "copyright.h" for complete
  1131. !  * copyright information.
  1132.    */
  1133.   
  1134.   #include "copyright.h"
  1135. --- 6,13 ----
  1136.    *
  1137.    * this was hacked on 09.12.90 to cache reads and to use stdin.
  1138.    *
  1139. !  * Copyright 1989, 1990 Jim Frost.  See included file "copyright.h" for
  1140. !  * complete copyright information.
  1141.    */
  1142.   
  1143.   #include "copyright.h"
  1144. *** /dev/null    Sun Sep 30 15:20:06 1990
  1145. --- src.2.01/mc_tables.c    Sun Sep 30 14:45:35 1990
  1146. ***************
  1147. *** 0 ****
  1148. --- 1,79 ----
  1149. + /* $Id: mc_tables.c,v 1.1 89/10/16 16:27:48 davis Exp $ */
  1150. + /*
  1151. +  *  From McIDAS Reference Manual
  1152. +  *     Introduction - pg 21
  1153. +  *     Table 1, UD-14 9/88,
  1154. +  *
  1155. +  * Given the "SS Code" (word three of the area directory)
  1156. +  *   return a string describing the sensor source.
  1157. +  *
  1158. +  */
  1159. + char *
  1160. + mc_sensor(sscode)
  1161. + int sscode ;
  1162. + {
  1163. +     switch (sscode) {
  1164. +     case 0 : return("Non-Image Derived Data") ;
  1165. +     case 1 : return("Test patterns") ;
  1166. +     case 2 : return("Graphics") ;
  1167. +     case 3 : return("Miscellaneous") ;
  1168. +     case 4 : return("PDUS Meteosat Visible") ;
  1169. +     case 5 : return("PDUS Meteosat Infrared") ;
  1170. +     case 6 : return("PDUS Meteosat Water Vapor") ;
  1171. +     case 7 : return("Radar") ;
  1172. +     case 8 : return("Miscellaneous Aircraft Data (MAMS)") ;
  1173. +     case 12 : return("GMS Visible") ;
  1174. +     case 13 : return("GMS Infrared") ;
  1175. +     case 14 : return("ATS 6 Visible") ;
  1176. +     case 15 : return("ATS 6 Infrared") ;
  1177. +     case 16 : return("SMS-1 Visible") ;
  1178. +     case 17 : return("SMS-1 Infrared") ;
  1179. +     case 18 : return("SMS-2 Visible") ;
  1180. +     case 19 : return("SMS-2 Infrared") ;
  1181. +     case 20 : return("GOES-1 Visible") ;
  1182. +     case 21 : return("GOES-1 Infrared") ;
  1183. +     case 22 : return("GOES-2 Visible") ;
  1184. +     case 23 : return("GOES-2 Infrared") ;
  1185. +     case 24 : return("GOES-3 Visible") ;
  1186. +     case 25 : return("GOES-3 Infrared") ;
  1187. +     case 26 : return("GOES-4 Visible (VAS)") ;
  1188. +     case 27 : return("GOES-4 Infrared and Water Vapor (VAS)") ;
  1189. +     case 28 : return("GOES-5 Visible (VAS)") ;
  1190. +     case 29 : return("GOES-5 Infrared and Water Vapor (VAS)") ;
  1191. +     case 30 : return("GOES-6 Visible") ;
  1192. +     case 31 : return("GOES-6 Infrared") ;
  1193. +     case 32 : return("GOES-Visible, Block 1 Auxiliary Data") ;
  1194. +     case 33 : return("GOES-7 Infrared") ;
  1195. +     case 34 :
  1196. +     case 36 :
  1197. +     case 37 :
  1198. +     case 38 :
  1199. +     case 39 :
  1200. +     case 40 : return("NOAA Series Satellites") ;
  1201. +     case 41 : return("TIROS-N") ;
  1202. +     case 42 : return("NOAA-6") ;
  1203. +     case 43 : return("NOAA-7") ;
  1204. +     case 44 : return("NOAA-8") ;
  1205. +     case 45 : return("NOAA-9") ;
  1206. +     case 46 : return("Venus") ;
  1207. +     case 47 : return("Voyager 1") ;
  1208. +     case 48 : return("Voyager 2") ;
  1209. +     case 50 : return("Hubble St.") ;
  1210. +     case 60 : return("NOAA-10") ;
  1211. +     case 61 : return("NOAA-11") ;
  1212. +     case 70 : return("GOES-I (IMAGER)") ;
  1213. +     case 71 : return("GOES-I (SOUNDER)") ;
  1214. +     case 72 : return("GOES-J (IMAGER)") ;
  1215. +     case 73 : return("GOES-J (SOUNDER)") ;
  1216. +     case 74 : return("GOES-K (IMAGER)") ;
  1217. +     case 75 : return("GOES-K (SOUNDER)") ;
  1218. +     case 76 : return("GOES-L (IMAGER)") ;
  1219. +     case 77 : return("GOES-L (SOUNDER)") ;
  1220. +     case 78 : return("GOES-M (IMAGER)") ;
  1221. +     case 79 : return("GOES-M (SOUNDER)") ;
  1222. +     case 80 : return("ERBE") ;
  1223. +     case 90 : return("RAW METEOSAT") ;
  1224. +     }
  1225. +     return("Unknown") ;
  1226. + }
  1227. *** /dev/null    Sun Sep 30 15:20:06 1990
  1228. --- src.2.01/mcidas.c    Sun Sep 30 14:59:12 1990
  1229. ***************
  1230. *** 0 ****
  1231. --- 1,148 ----
  1232. + /* mcidas.c:
  1233. +  *
  1234. +  * McIDAS areafile support.  contributed by Glenn P. Davis
  1235. +  * (davis@unidata.ucar.edu).
  1236. +  */
  1237. + #include "xloadimage.h"
  1238. + #include "mcidas.h"
  1239. + /*
  1240. +  * convert from little endian to big endian four byte object
  1241. +  */
  1242. + static unsigned long
  1243. + vhtonl(lend)
  1244. + unsigned long lend ;
  1245. + {
  1246. +     unsigned long bend ;
  1247. +     unsigned char *lp, *bp ;
  1248. +     lp = ((unsigned char *)&lend) + 3 ;
  1249. +     bp = (unsigned char *) &bend ;
  1250. +     *bp++ = *lp-- ;
  1251. +     *bp++ = *lp-- ;
  1252. +     *bp++ = *lp-- ;
  1253. +     *bp = *lp ;
  1254. +     return(bend) ;
  1255. + }
  1256. + int mcidasIdent(fullname, name)
  1257. +      char *fullname, *name;
  1258. + { ZFILE          *zf;
  1259. +   struct area_dir dir ;
  1260. +   int             r;
  1261. +   if (! (zf= zopen(fullname))) {
  1262. +     perror("mcidasIdent");
  1263. +     return(0);
  1264. +   }
  1265. +   switch (zread(zf, &dir, sizeof(struct area_dir))) {
  1266. +   case -1:
  1267. +     perror("mcidasIdent");
  1268. +     r= 0;
  1269. +     break;
  1270. +   case sizeof(struct area_dir):
  1271. +     if (dir.type != 4 && dir.type != 67108864) {
  1272. +       r= 0;
  1273. +       break;
  1274. +     }
  1275. +     r= 1;
  1276. +     break;
  1277. +   default:
  1278. +     r= 0;
  1279. +     break;
  1280. +   }
  1281. +   zclose(zf);
  1282. +   return(r);
  1283. + }
  1284. + Image *mcidasLoad(fullname, name, verbose)
  1285. +      char         *fullname, *name;
  1286. +      unsigned int  verbose;
  1287. + { ZFILE          *zf;
  1288. +   struct area_dir  dir;
  1289. +   struct navigation  nav;
  1290. +   Image          *image;
  1291. +   unsigned int    y;
  1292. +   int doswap = 0 ;
  1293. +   if (! (zf= zopen(fullname))) {
  1294. +     perror("mcidasLoad");
  1295. +     return(NULL);
  1296. +   }
  1297. +   switch (zread(zf, &dir, sizeof(struct area_dir))) {
  1298. +   case -1:
  1299. +     perror("mcidasLoad");
  1300. +     zclose(zf);
  1301. +     exit(1);
  1302. +   case sizeof(struct area_dir):
  1303. +     if (dir.type != 4) {
  1304. +       if(dir.type != 67108864) {
  1305. +         zclose(zf);
  1306. +         return(NULL) ;
  1307. +       } else {
  1308. +     doswap = 1 ;
  1309. +       }
  1310. +     }
  1311. +     break;
  1312. +   default:
  1313. +     zclose(zf);
  1314. +     return(NULL);
  1315. +   }
  1316. +   if(doswap) {
  1317. +     unsigned long *begin ; 
  1318. +     unsigned long *ulp ;
  1319. +     begin = (unsigned long *)&dir ;
  1320. +     for(ulp = begin ; ulp < &begin[AREA_COMMENTS] ; ulp++)
  1321. +        *ulp = vhtonl(*ulp) ;
  1322. +      for(ulp = &begin[AREA_CALKEY] ; ulp < &begin[AREA_STYPE] ; ulp++)
  1323. +         *ulp = vhtonl(*ulp) ;
  1324. +    }
  1325. +     if (verbose)
  1326. +     (void)printf("%s %d %d (%d, %d) (%d, %d)\n",
  1327. +         mc_sensor(dir.satid),
  1328. +         dir.idate,
  1329. +         dir.itime,
  1330. +         dir.lcor,
  1331. +         dir.ecor,
  1332. +         dir.lres,
  1333. +         dir.eres) ;
  1334. +   /* skip the nav */
  1335. +   if( zread(zf,&nav, sizeof(struct navigation)) != sizeof(struct navigation)) {
  1336. +       zclose(zf);
  1337. +       return(NULL) ;
  1338. +   }
  1339. +   /* get an image to put the data in
  1340. +    */
  1341. +    image= newRGBImage(dir.esiz,
  1342. +                dir.lsiz,
  1343. +                8 * dir.bands);
  1344. +   /* set up the colormap, linear grey scale
  1345. +    */
  1346. +     for (y= 0; y < 255; y++) {
  1347. +       *(image->rgb.red + y)= 
  1348. +        *(image->rgb.green + y)=
  1349. +         *(image->rgb.blue + y)= y * 257 ;
  1350. +     }
  1351. +     image->rgb.used= 255 ;
  1352. +   zread(zf, image->data, dir.esiz * dir.lsiz) ;
  1353. +   zclose(zf);
  1354. +   image->title= dupString(name);
  1355. +   return(image);
  1356. + }
  1357. *** /dev/null    Sun Sep 30 15:20:06 1990
  1358. --- src.2.01/mcidas.h    Sun Sep 30 15:38:23 1990
  1359. ***************
  1360. *** 0 ****
  1361. --- 1,73 ----
  1362. + /*    $Id: mcidas.h,v 1.1 90/09/28 20:26:36 davis Exp $ */
  1363. + /* Argh, looks like the numbers are in vax byte order */
  1364. + #define TYPELEN        4 /* Short strings used as identifiers */
  1365. + #define COMMENTLEN    32    /* longer strings */
  1366. + /*
  1367. +  * McIdas AREA DIRECTORY, based on documentation dated 5/87 by R. Dengal
  1368. +  */
  1369. + struct area_dir {
  1370. + /*  1 */ unsigned long    status ;
  1371. + /*  2 */ unsigned long    type ;
  1372. + /*  3 */ unsigned long    satid ;
  1373. + /*  4 */ unsigned long    ndate ; /* YYDDD */
  1374. + /*  5 */ unsigned long    ntime ; /* HHMMSS */
  1375. + /*  6 */ unsigned long    lcor ;
  1376. + /*  7 */ unsigned long    ecor ;
  1377. + /*  8 */ unsigned long    zcor ;
  1378. + /*  9 */ unsigned long    lsiz ;
  1379. + /* 10 */ unsigned long    esiz ;
  1380. + /* 11 */ unsigned long    zsiz ;
  1381. + /* 12 */ unsigned long    lres ;
  1382. + /* 13 */ unsigned long    eres ;
  1383. + /* 14 */ unsigned long    bands ;
  1384. + /* 15 */ unsigned long    yzprefix ;
  1385. + /* 16 */ unsigned long    projnum ;
  1386. + /* 17 */ unsigned long    cdate ;
  1387. + /* 18 */ unsigned long    ctime ;
  1388. + /* 19 */ unsigned long    filtmap ;
  1389. + /* 20 */ unsigned long    imageid ;
  1390. + /* 21 */ unsigned long    resvid[4] ;
  1391. + #define AREA_COMMENTS 24
  1392. + /* 25 */ char    comments[COMMENTLEN] ;
  1393. + #define AREA_CALKEY 32
  1394. + /* 33 */ unsigned long    calkey ;
  1395. + /* 34 */ unsigned long    navkey ;
  1396. + /* 35 */ unsigned long    navkey2 ;
  1397. + /* 36 */ unsigned long    lprefix ;
  1398. + /* 37 */ unsigned long    pdl[8] ;
  1399. + /* 45 */ unsigned long    band8 ;
  1400. + /* 46 */ unsigned long idate ;
  1401. + /* 47 */ unsigned long itime ;
  1402. + /* 48 */ unsigned long    startscan ;
  1403. + /* 49 */ unsigned long    doclen ;
  1404. + /* 50 */ unsigned long    callen ;
  1405. + /* 51 */ unsigned long    levlen ;
  1406. + #define AREA_STYPE 51
  1407. + /* 52 */ char    stype[TYPELEN] ;
  1408. + /* 53 */ char    ctype[TYPELEN] ;
  1409. + /* 54 */ unsigned long    reserved[11] ;
  1410. + } ;
  1411. + /*
  1412. +  * McIdas NAVIGATION CODICIL, based on documentation dated 5/87 by D. Santek
  1413. +  *  Only type 'GOES' used here currently
  1414. +  */
  1415. + struct navigation {
  1416. + /*   1 */ char    type[TYPELEN] ;
  1417. + #define NAV_DATA 1
  1418. + /*   2 */ unsigned long iddate ;
  1419. + /*   3 */ unsigned long itime ;
  1420. + /*   4 */ unsigned long fill[37] ; /* expand this later, if needed */
  1421. + #define NAV_RESERVED 40
  1422. + /*  41 */ unsigned long    reserved[80] ;
  1423. + /* 121 */ char    memo[COMMENTLEN] ;
  1424. + } ;
  1425. + struct mc_area {
  1426. +     struct area_dir *dir ;
  1427. +     struct navigation *nav ;
  1428. +     unsigned char *image ;
  1429. +     unsigned char *private ; /* conveninence pointer */
  1430. + } ;
  1431.  
  1432. dan
  1433. ----------------------------------------------------
  1434. O'Reilly && Associates   argv@sun.com / argv@ora.com
  1435. Opinions expressed reflect those of the author only.
  1436.