summaryrefslogtreecommitdiffstats
path: root/extra/source/xv/xv-3.10a.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extra/source/xv/xv-3.10a.patch')
-rw-r--r--extra/source/xv/xv-3.10a.patch2745
1 files changed, 2745 insertions, 0 deletions
diff --git a/extra/source/xv/xv-3.10a.patch b/extra/source/xv/xv-3.10a.patch
new file mode 100644
index 000000000..0bf8210f2
--- /dev/null
+++ b/extra/source/xv/xv-3.10a.patch
@@ -0,0 +1,2745 @@
+Installation Instructions:
+
+This patch will update XV 3.10 to 3.10a.
+
+Copy this file into the top-level XV source directory, and apply it using:
+ patch -p0 <xv-3.10a.patch
+
+Then do a 'make clean', followed by a 'make' (or 'make install').
+
+Note: if you don't have a copy of the 'patch' utility, you can get one
+ via anonymous ftp on ftp.cis.upenn.edu, in pub/xv. Of course,
+ once you're there, it may be easier to just pick up the latest copy
+ of the XV distribution, rather than try to patch your existing copy,
+ but hey, that's up to you...
+
+
+
+diff -c -r ../xv-3.10/CHANGELOG ./CHANGELOG
+*** ../xv-3.10/CHANGELOG Thu Dec 22 14:18:39 1994
+--- ./CHANGELOG Mon Jan 23 18:21:55 1995
+***************
+*** 1,12 ****
+ Revision History
+ ----------------
+
+! Make_xv.com in vms directory wouldn't build xvxpm.c or xvfits.c (and thus, XV!)
+! (Rick Dyson (dyson@sunfish.Physics.UIowa.Edu))
+
+
+! XV 3.10 Public Release 12/21/94
+! -------------------------
+ Bug Fix: Greyscale downsampling bug in JPEG code fixed.
+ (Tom Lane (tgl@sss.pgh.pa.us))
+
+--- 1,84 ----
+ Revision History
+ ----------------
+
+! XV 3.10a bug-fix release 12/29/94
+! ----------------------------------
+! Bug Fix: Problems loading JPEG files in 8-bit mode on some systems.
+! (Rick Richardson (rick@digibd.com))
+! (Chad R. Larson (chad@anasazi.com))
+
++ Bug Fix: Added '-pkludge' command line option and 'popupKludge' boolean
++ resource. If true, selects the 'old-style' pop-up window positioning
++ code. The various popup windows should appear with the Ok button
++ (or whatever) centered around the cursor. If the windows routinely
++ pop up slightly off-center from the cursor, try turning this on.
+
+! Bug Fix: '3' and 'Q' characters in the Text Annotation character set were
+! boogered up... (Sidik Isani (si@acpub.duke.edu))
+!
+! Bug Fix: '-iconic' option wasn't working.
+! (David Pesetsky (iedsp@agt.gmeds.com))
+!
+! Bug Fix: Didn't properly read greyscale RLE files.
+! (Robert Cunningham (rkc@xn.ll.mit.edu))
+!
+! Bug Fix: 'AutoCrop' on 24-bit images could produce 0x0 images. A problem!
+! (Leon Shaner (leon@mtu.edu))
+!
+! Bug Fix: GIF reader would blow up if there were multiple comments.
+! (Markus Gyger (mgyger@itr.ch))
+!
+! Bug Fix: Behavior under virtual window managers may be improved.
+! (steveg@pa.dec.com)
+!
+! Enhancement: Text in 'temperature gauge' (during slow operations) is now
+! XOR'd on, so it isn't obscured by the filled area of the gauge.
+! (Jerry Whelan (jerryw@bnl.gov))
+!
+! Enhancement: man page for vdcomp written
+! (James Ralston Crawford (qralston+@pitt.edu))
+!
+! Enhancement: PCX code can now read 24-bit PCX files.
+! (Dave Cohrs (cohrs@legato.com))
+!
+! Portability: Patch for Linux (David Hankins (dhankins@oz.net))
+!
+! Portability: Patches for ISC 4.0 Interactive/SunSoft Unix
+! (Jack Bailey (jjb@jagware.bcc.com))
+!
+! Portability: Compiler noise (from Sun's Professional C compiler) cleaned up.
+! (John Fritz (jfritz@bpo-ess.ceco.com))
+!
+! Portability: Many nits picked by Pyramid compiler
+! (Chad R. Larson (chad@anasazi.com))
+!
+! Portability: Some malloc's in xvfits.c needed casting.
+! (Bill Silvert (sysop@biome.bio.ns.ca))
+!
+! Portability: Further VMS problems solved.
+! (Rick Dyson (dyson@sunfish.physics.uiowa.edu))
+!
+! Portability: select() on HP-UX 9.x expects (int *) instead of (fd_set *)
+! (Richard Allen (ra@os.is))
+!
+! Portability: Removed 'const' from second parameter in decl. for decode_run()
+! in tif_fax3.c. (Glenn Spargo (gspargo@ctron.com))
+!
+! Portability: Added 'fcntl.h' to xv.h, as some systems may not have O_RDONLY
+! declared elsewhere. (Mitchell Blank (blankm@cae.wisc.edu))
+!
+! Portability: Font selection strings in xv.c didn't have enough '*'s in them.
+! Would fail on some X servers.
+! (Rick Richardson (rick@digibd.com))
+!
+! Second XV 3.10 Public Release 12/22/94
+! ----------------------------------------
+! Bug Fix: Make_xv.com in vms directory wouldn't build xvxpm.c or xvfits.c
+! (and thus, XV!) (Rick Dyson (dyson@sunfish.Physics.UIowa.Edu))
+!
+!
+! Initial XV 3.10 Public Release 12/21/94
+! ----------------------------------------
+ Bug Fix: Greyscale downsampling bug in JPEG code fixed.
+ (Tom Lane (tgl@sss.pgh.pa.us))
+
+diff -c -r ../xv-3.10/Imakefile ./Imakefile
+*** ../xv-3.10/Imakefile Thu Dec 22 14:12:21 1994
+--- ./Imakefile Fri Jan 13 15:24:01 1995
+***************
+*** 264,269 ****
+--- 264,270 ----
+ InstallManPageLong(docs/bggen,$(MANDIR),bggen)
+ InstallManPageLong(docs/xcmap,$(MANDIR),xcmap)
+ InstallManPageLong(docs/xvp2p,$(MANDIR),xvpictoppm)
++ InstallManPageLong(docs/vdcomp,$(MANDIR),vdcomp)
+
+ tar:
+ tar cf xv.tar Makefile* Imakefile *.c *.h bits docs \
+
+diff -c -r ../xv-3.10/Makefile ./Makefile
+*** ../xv-3.10/Makefile Thu Jan 19 13:40:09 1995
+--- ./Makefile Mon Jan 23 15:20:54 1995
+***************
+*** 92,99 ****
+--- 92,110 ----
+ #MCHN= -Dhpux -D_HPUX_SOURCE
+ # To use old HP compilers (HPUX 7.0 or so), you may need
+ #MCHN= -Dhpux -D_HPUX_SOURCE +Ns4000
++ #
++ # also, if you're using HP's compiler, add '-Aa' to whichever of those
++ # two lines you're using, to turn on ANSI C mode. Or so I'm told.
++ #
++ # note: You may need to add '-I/usr/include/X11R5' (or R6, or whatever)
++ # to whichever of those lines you used, as HP tends to store their X11
++ # include files in a non-standard place...
+
+
++ ### for LINUX, uncomment the following line
++ #MCHN = -DLINUX
++
++
+ # For SCO 1.1 (UNIX 3.2v2) machines, uncomment the following:
+ #MCHN = -Dsco -DPOSIX
+ #
+***************
+*** 111,120 ****
+ #
+ #MCHN = -q extensions=pcc_c -D__UMAXV__ -L/usr2/usr/lib/X11 -DSVR4
+
+! # For Interactive Unix System machines
+! # you'll want to modify add the following options to the end of the
+! # LIBS definition (below) (or so I'm told)
+! # -lnsl_s -linet -lgen
+
+
+ #----------'Roll Your Own' Options----------
+--- 122,129 ----
+ #
+ #MCHN = -q extensions=pcc_c -D__UMAXV__ -L/usr2/usr/lib/X11 -DSVR4
+
+! # For Interactive/SunSoft Unix ISC 4.0 (whatever *that* is!)
+! #MCHN = -DSVR4 -DBSDTYPES
+
+
+ #----------'Roll Your Own' Options----------
+***************
+*** 233,238 ****
+--- 242,248 ----
+ cp docs/bggen.man $(MANDIR)/bggen.$(MANSUF)
+ cp docs/xcmap.man $(MANDIR)/xcmap.$(MANSUF)
+ cp docs/xvp2p.man $(MANDIR)/xvpictoppm.$(MANSUF)
++ cp docs/vdcomp.man $(MANDIR)/vdcomp.$(MANSUF)
+ cp docs/xvdocs.ps* $(LIBDIR)
+
+ tar:
+
+diff -c -r ../xv-3.10/Makefile.std ./Makefile.std
+*** ../xv-3.10/Makefile.std Thu Dec 22 14:12:21 1994
+--- ./Makefile.std Mon Jan 23 20:06:26 1995
+***************
+*** 92,99 ****
+--- 92,110 ----
+ #MCHN= -Dhpux -D_HPUX_SOURCE
+ # To use old HP compilers (HPUX 7.0 or so), you may need
+ #MCHN= -Dhpux -D_HPUX_SOURCE +Ns4000
++ #
++ # also, if you're using HP's compiler, add '-Aa' to whichever of those
++ # two lines you're using, to turn on ANSI C mode. Or so I'm told.
++ #
++ # note: You may need to add '-I/usr/include/X11R5' (or R6, or whatever)
++ # to whichever of those lines you used, as HP tends to store their X11
++ # include files in a non-standard place...
+
+
++ ### for LINUX, uncomment the following line
++ #MCHN = -DLINUX
++
++
+ # For SCO 1.1 (UNIX 3.2v2) machines, uncomment the following:
+ #MCHN = -Dsco -DPOSIX
+ #
+***************
+*** 111,120 ****
+ #
+ #MCHN = -q extensions=pcc_c -D__UMAXV__ -L/usr2/usr/lib/X11 -DSVR4
+
+! # For Interactive Unix System machines
+! # you'll want to modify add the following options to the end of the
+! # LIBS definition (below) (or so I'm told)
+! # -lnsl_s -linet -lgen
+
+
+ #----------'Roll Your Own' Options----------
+--- 122,129 ----
+ #
+ #MCHN = -q extensions=pcc_c -D__UMAXV__ -L/usr2/usr/lib/X11 -DSVR4
+
+! # For Interactive/SunSoft Unix ISC 4.0 (whatever *that* is!)
+! #MCHN = -DSVR4 -DBSDTYPES
+
+
+ #----------'Roll Your Own' Options----------
+***************
+*** 233,238 ****
+--- 242,248 ----
+ cp docs/bggen.man $(MANDIR)/bggen.$(MANSUF)
+ cp docs/xcmap.man $(MANDIR)/xcmap.$(MANSUF)
+ cp docs/xvp2p.man $(MANDIR)/xvpictoppm.$(MANSUF)
++ cp docs/vdcomp.man $(MANDIR)/vdcomp.$(MANSUF)
+ cp docs/xvdocs.ps* $(LIBDIR)
+
+ tar:
+
+diff -c -r ../xv-3.10/xcmap.c ./xcmap.c
+*** ../xv-3.10/xcmap.c Thu Dec 22 14:12:20 1994
+--- ./xcmap.c Tue Jan 03 16:14:52 1995
+***************
+*** 102,108 ****
+ continue;
+ }
+
+! strind = index(argv[i], ':'); /* old-style display */
+ if(strind != NULL) {
+ display = argv[i];
+ continue;
+--- 102,108 ----
+ continue;
+ }
+
+! strind = (char *) index(argv[i], ':'); /* old-style display */
+ if(strind != NULL) {
+ display = argv[i];
+ continue;
+
+diff -c -r ../xv-3.10/xv.c ./xv.c
+*** ../xv-3.10/xv.c Thu Dec 22 14:12:15 1994
+--- ./xv.c Thu Jan 19 13:08:43 1995
+***************
+*** 25,33 ****
+
+
+ /* program needs one of the following fonts. Trys them in ascending order */
+! #define FONT1 "-*-lucida-medium-r-*-*-12-*"
+! #define FONT2 "-*-helvetica-medium-r-*-*-12-*"
+! #define FONT3 "-*-helvetica-medium-r-*-*-11-*"
+ #define FONT4 "6x13"
+ #define FONT5 "fixed"
+
+--- 25,33 ----
+
+
+ /* program needs one of the following fonts. Trys them in ascending order */
+! #define FONT1 "-*-lucida-medium-r-*-*-12-*-*-*-*-*-*-*"
+! #define FONT2 "-*-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
+! #define FONT3 "-*-helvetica-medium-r-*-*-11-*-*-*-*-*-*-*"
+ #define FONT4 "6x13"
+ #define FONT5 "fixed"
+
+***************
+*** 218,224 ****
+ fgstr = "#000000"; bgstr = "#B2C0DC";
+ histr = "#C6D5E2"; lostr = "#8B99B5";
+
+! cmd = rindex(argv[0],'/');
+ if (!cmd) cmd = argv[0]; else cmd++;
+
+ tmpstr = (char *) getenv("TMPDIR");
+--- 218,224 ----
+ fgstr = "#000000"; bgstr = "#B2C0DC";
+ histr = "#C6D5E2"; lostr = "#8B99B5";
+
+! cmd = (char *) rindex(argv[0],'/');
+ if (!cmd) cmd = argv[0]; else cmd++;
+
+ tmpstr = (char *) getenv("TMPDIR");
+***************
+*** 261,267 ****
+ xorMasks[6] = 0xc4c4c4c5;
+ xorMasks[7] = 0xffffffff;
+
+! kludge_offx = kludge_offy = 0;
+
+ conv24 = CONV24_SLOW; /* use 'slow' algorithm by default */
+
+--- 261,267 ----
+ xorMasks[6] = 0xc4c4c4c5;
+ xorMasks[7] = 0xffffffff;
+
+! kludge_offx = kludge_offy = winCtrPosKludge = 0;
+
+ conv24 = CONV24_SLOW; /* use 'slow' algorithm by default */
+
+***************
+*** 1107,1112 ****
+--- 1107,1113 ----
+ if (rd_flag("nostat")) nostat = def_int;
+ if (rd_flag("ownCmap")) owncmap = def_int;
+ if (rd_flag("perfect")) perfect = def_int;
++ if (rd_flag("popupKludge")) winCtrPosKludge = def_int;
+ if (rd_str ("print")) strncpy(printCmd, def_str,
+ (size_t) PRINTCMDLEN);
+ if (rd_flag("pscompress")) pscomp = def_int;
+***************
+*** 1361,1366 ****
+--- 1362,1368 ----
+ else if (!argcmp(argv[i],"-nostat", 4,1,&nostat)); /* nostat */
+ else if (!argcmp(argv[i],"-owncmap", 2,1,&owncmap)); /* own cmap */
+ else if (!argcmp(argv[i],"-perfect", 3,1,&perfect)); /* -perfect */
++ else if (!argcmp(argv[i],"-pkludge", 3,1,&winCtrPosKludge));
+ else if (!argcmp(argv[i],"-poll", 3,1,&polling)); /* chk mod? */
+
+ else if (!argcmp(argv[i],"-preset",3,0,&pm)) /* preset */
+***************
+*** 1615,1620 ****
+--- 1617,1623 ----
+ printoption("[-/+nostat]");
+ printoption("[-/+owncmap]");
+ printoption("[-/+perfect]");
++ printoption("[-/+pkludge]");
+ printoption("[-/+poll]");
+ printoption("[-preset #]");
+ printoption("[-quick24]");
+***************
+*** 1683,1689 ****
+
+ int i;
+
+! if (strlen(a1) < minlen || strlen(a2) < minlen) return 1;
+ if (strlen(a1) > strlen(a2)) return 1;
+
+ if (strncmp(a1+1, a2+1, strlen(a1)-1)) return 1;
+--- 1686,1693 ----
+
+ int i;
+
+! if ((strlen(a1) < (size_t) minlen) || (strlen(a2) < (size_t) minlen))
+! return 1;
+ if (strlen(a1) > strlen(a2)) return 1;
+
+ if (strncmp(a1+1, a2+1, strlen(a1)-1)) return 1;
+***************
+*** 1860,1866 ****
+
+
+ /* chop off trailing ".Z", ".z", or ".gz" from displayed basefname, if any */
+! if (strlen(basefname)>2 && strcmp(basefname+strlen(basefname)-2,".Z")==0)
+ basefname[strlen(basefname)-2]='\0';
+ else {
+ #ifdef GUNZIP
+--- 1864,1871 ----
+
+
+ /* chop off trailing ".Z", ".z", or ".gz" from displayed basefname, if any */
+! if (strlen(basefname) > (size_t) 2 &&
+! strcmp(basefname+strlen(basefname)-2,".Z")==0)
+ basefname[strlen(basefname)-2]='\0';
+ else {
+ #ifdef GUNZIP
+***************
+*** 2698,2705 ****
+ to what it was. necessary because uncompress doesn't handle files
+ that don't end with '.Z' */
+
+! if (strlen(name)>=2 && strcmp(name + strlen(name)-2,".Z")!=0 &&
+! strcmp(name + strlen(name)-2,".z")!=0) {
+ strcpy(namez, name);
+ strcat(namez,".Z");
+
+--- 2703,2711 ----
+ to what it was. necessary because uncompress doesn't handle files
+ that don't end with '.Z' */
+
+! if (strlen(name) >= (size_t) 2 &&
+! strcmp(name + strlen(name)-2,".Z")!=0 &&
+! strcmp(name + strlen(name)-2,".z")!=0) {
+ strcpy(namez, name);
+ strcat(namez,".Z");
+
+***************
+*** 2890,2896 ****
+ char fullcmd[512], tmpname[64], str[512];
+ int i;
+
+! if (!cmd || strlen(cmd)<2) return 1;
+
+ sprintf(tmpname,"%s/xvXXXXXX", tmpdir);
+ mktemp(tmpname);
+--- 2896,2902 ----
+ char fullcmd[512], tmpname[64], str[512];
+ int i;
+
+! if (!cmd || (strlen(cmd) < (size_t) 2)) return 1;
+
+ sprintf(tmpname,"%s/xvXXXXXX", tmpdir);
+ mktemp(tmpname);
+***************
+*** 3270,3276 ****
+
+ xwmh.icon_pixmap = iconPix;
+ xwmh.icon_mask = iconmask;
+! xwmh.flags |= ( IconPixmapHint | IconMaskHint) ;
+
+
+ if (startIconic && firstTime) {
+--- 3276,3282 ----
+
+ xwmh.icon_pixmap = iconPix;
+ xwmh.icon_mask = iconmask;
+! xwmh.flags |= (IconPixmapHint | IconMaskHint);
+
+
+ if (startIconic && firstTime) {
+***************
+*** 3787,3793 ****
+--- 3793,3802 ----
+ | EnterWindowMask | LeaveWindowMask );
+
+ StoreDeleteWindowProp(mainW);
++ XFlush(theDisp);
+ XMapWindow(theDisp,mainW);
++ XFlush(theDisp);
++ if (startIconic) sleep(2); /* give it time to get the window up...*/
+ }
+ }
+
+diff -c -r ../xv-3.10/xv.h ./xv.h
+*** ../xv-3.10/xv.h Thu Dec 22 14:12:15 1994
+--- ./xv.h Mon Jan 23 15:22:23 1995
+***************
+*** 8,15 ****
+ #include "config.h"
+
+
+! #define REVDATE "Version 3.10 Rev: 12/16/94"
+! #define VERSTR "3.10"
+
+ /*
+ * uncomment the following, and modify for your site, but only if you've
+--- 8,15 ----
+ #include "config.h"
+
+
+! #define REVDATE "Version 3.10a Rev: 12/29/94"
+! #define VERSTR "3.10a"
+
+ /*
+ * uncomment the following, and modify for your site, but only if you've
+***************
+*** 62,67 ****
+--- 62,74 ----
+ #endif
+
+
++ #ifdef LINUX
++ # ifndef _LINUX_LIMITS_H
++ # include <linux/limits.h>
++ # endif
++ #endif
++
++
+ #include <X11/Xos.h> /* need type declarations immediately */
+
+ /*********************************************************/
+***************
+*** 198,203 ****
+--- 205,217 ----
+ # include <limits.h>
+ # endif
+
++ /*** for select() call ***/
++ # ifdef __hpux
++ # define XV_FDTYPE (int *)
++ # else
++ # define XV_FDTYPE (fd_set *)
++ # endif
++
+ #endif /* NEEDSTIME */
+
+
+***************
+*** 214,219 ****
+--- 228,237 ----
+ # include <dirent.h>
+ # endif
+
++ # if defined(SVR4) || defined(SYSV)
++ # include <fcntl.h>
++ # endif
++
+ # include <sys/param.h>
+ # include <sys/stat.h>
+
+***************
+*** 961,966 ****
+--- 979,985 ----
+ WHERE int ch_offx,ch_offy; /* ChngAttr ofst for reparented windows */
+ WHERE int kludge_offx, /* WM kludges for SetWindowPos routine */
+ kludge_offy;
++ WHERE int winCtrPosKludge; /* kludge for popup positioning... */
+
+ WHERE int ignoreConfigs; /* an evil kludge... */
+
+diff -c -r ../xv-3.10/xv24to8.c ./xv24to8.c
+*** ../xv-3.10/xv24to8.c Thu Dec 22 14:12:15 1994
+--- ./xv24to8.c Fri Jan 13 14:49:21 1995
+***************
+*** 374,382 ****
+
+ #define PPM_DEPTH(newp,p,oldmaxval,newmaxval) \
+ PPM_ASSIGN( (newp), \
+! (int) PPM_GETR(p) * (newmaxval) / ((int)oldmaxval), \
+! (int) PPM_GETG(p) * (newmaxval) / ((int)oldmaxval), \
+! (int) PPM_GETB(p) * (newmaxval) / ((int)oldmaxval) )
+
+
+ /* Luminance macro. */
+--- 374,382 ----
+
+ #define PPM_DEPTH(newp,p,oldmaxval,newmaxval) \
+ PPM_ASSIGN( (newp), \
+! ((int) PPM_GETR(p)) * ((int)newmaxval) / ((int)oldmaxval), \
+! ((int) PPM_GETG(p)) * ((int)newmaxval) / ((int)oldmaxval), \
+! ((int) PPM_GETB(p)) * ((int)newmaxval) / ((int)oldmaxval) )
+
+
+ /* Luminance macro. */
+
+diff -c -r ../xv-3.10/xvbrowse.c ./xvbrowse.c
+*** ../xv-3.10/xvbrowse.c Thu Dec 22 14:12:20 1994
+--- ./xvbrowse.c Thu Jan 19 12:49:17 1995
+***************
+*** 20,26 ****
+ #define NEEDSDIR
+ #include "xv.h"
+
+! #ifdef VMS
+ typedef unsigned int mode_t; /* file mode bits */
+ #endif
+
+--- 20,26 ----
+ #define NEEDSDIR
+ #include "xv.h"
+
+! #if defined(VMS) || defined(isc)
+ typedef unsigned int mode_t; /* file mode bits */
+ #endif
+
+***************
+*** 2579,2585 ****
+ int rv;
+
+ /* temporarily excise trailing '/' char from br->path */
+! if (strlen(br->path)>2 && br->path[strlen(br->path)-1] == '/')
+ br->path[strlen(br->path)-1] = '\0';
+
+ rv = chdir(br->path);
+--- 2579,2585 ----
+ int rv;
+
+ /* temporarily excise trailing '/' char from br->path */
+! if ((strlen(br->path) > (size_t) 2) && br->path[strlen(br->path)-1] == '/')
+ br->path[strlen(br->path)-1] = '\0';
+
+ rv = chdir(br->path);
+***************
+*** 3544,3550 ****
+ case RFT_PBM: if (xv_strstr(pinfo.fullInfo, "raw")) strcat(str,"Raw ");
+ else strcat(str,"Ascii ");
+
+! for (i=0; i<3 && strlen(pinfo.fullInfo)>3; i++) {
+ str1[0] = pinfo.fullInfo[i]; str1[1] = '\0';
+ strcat(str, str1);
+ }
+--- 3544,3550 ----
+ case RFT_PBM: if (xv_strstr(pinfo.fullInfo, "raw")) strcat(str,"Raw ");
+ else strcat(str,"Ascii ");
+
+! for (i=0; i<3 && (strlen(pinfo.fullInfo)>(size_t)3); i++){
+ str1[0] = pinfo.fullInfo[i]; str1[1] = '\0';
+ strcat(str, str1);
+ }
+***************
+*** 4521,4527 ****
+
+ /* try to delete a thumbnail file, as well. ignore errors */
+ strcpy(buf1, name); /* tmp1 = leading path of name */
+! tmp = rindex(buf1, '/');
+ if (!tmp) strcpy(buf1,".");
+ else *tmp = '\0';
+
+--- 4521,4527 ----
+
+ /* try to delete a thumbnail file, as well. ignore errors */
+ strcpy(buf1, name); /* tmp1 = leading path of name */
+! tmp = (char *) rindex(buf1, '/');
+ if (!tmp) strcpy(buf1,".");
+ else *tmp = '\0';
+
+diff -c -r ../xv-3.10/xvbutt.c ./xvbutt.c
+*** ../xv-3.10/xvbutt.c Thu Dec 22 14:12:16 1994
+--- ./xvbutt.c Tue Jan 03 16:19:51 1995
+***************
+*** 961,967 ****
+
+ /* truncate at TAB, if any */
+ strcpy(stbuf, str);
+! if ((str = index(stbuf, '\t')) != NULL) *str = '\0';
+ str = stbuf;
+
+ x1 = CENTERX(mfinfo, x + w/2, str);
+--- 961,967 ----
+
+ /* truncate at TAB, if any */
+ strcpy(stbuf, str);
+! if ((str = (char *) index(stbuf, '\t')) != NULL) *str = '\0';
+ str = stbuf;
+
+ x1 = CENTERX(mfinfo, x + w/2, str);
+***************
+*** 1073,1079 ****
+ char *sp, str[256];
+
+ strcpy(str, mb->list[i]);
+! sp = index(str, '\t');
+ j = StringWidth(sp+1);
+ if (j>mtabwide) mtabwide = j;
+
+--- 1073,1079 ----
+ char *sp, str[256];
+
+ strcpy(str, mb->list[i]);
+! sp = (char *) index(str, '\t');
+ j = StringWidth(sp+1);
+ if (j>mtabwide) mtabwide = j;
+
+***************
+*** 1139,1145 ****
+ for (i=0; i<mb->nlist; i++) {
+ char txtstr[256], *tabstr;
+ strcpy(txtstr, mb->list[i]);
+! if ((tabstr = index(txtstr, '\t'))) {
+ *tabstr = '\0'; tabstr++;
+ }
+
+--- 1139,1145 ----
+ for (i=0; i<mb->nlist; i++) {
+ char txtstr[256], *tabstr;
+ strcpy(txtstr, mb->list[i]);
+! if ((tabstr = (char *) index(txtstr, '\t'))) {
+ *tabstr = '\0'; tabstr++;
+ }
+
+diff -c -r ../xv-3.10/xvcolor.c ./xvcolor.c
+*** ../xv-3.10/xvcolor.c Thu Dec 22 14:12:17 1994
+--- ./xvcolor.c Fri Jan 06 14:29:23 1995
+***************
+*** 616,622 ****
+ *foo = "No r/w cells available. Using r/o color.";
+
+ tmp = GetISTR(ISTR_WARNING);
+! if (strlen(tmp)>0) sprintf(tstr, "%s %s", tmp, foo);
+ else sprintf(tstr, "%s", foo);
+ SetISTR(ISTR_WARNING,tstr);
+
+--- 616,622 ----
+ *foo = "No r/w cells available. Using r/o color.";
+
+ tmp = GetISTR(ISTR_WARNING);
+! if (strlen(tmp) > (size_t) 0) sprintf(tstr, "%s %s", tmp, foo);
+ else sprintf(tstr, "%s", foo);
+ SetISTR(ISTR_WARNING,tstr);
+
+***************
+*** 790,799 ****
+ }
+
+
+! void xvFreeColors(dp, cm,pixels, npixels, planes)
+ Display *dp;
+ Colormap cm;
+! unsigned long pixels[];
+ int npixels;
+ unsigned long planes;
+ {
+--- 790,799 ----
+ }
+
+
+! void xvFreeColors(dp, cm, pixels, npixels, planes)
+ Display *dp;
+ Colormap cm;
+! unsigned long *pixels;
+ int npixels;
+ unsigned long planes;
+ {
+
+diff -c -r ../xv-3.10/xvcut.c ./xvcut.c
+*** ../xv-3.10/xvcut.c Thu Dec 22 14:12:21 1994
+--- ./xvcut.c Fri Jan 13 14:55:48 1995
+***************
+*** 760,766 ****
+ len |= ((int) data[2])<<16;
+ len |= ((int) data[3])<<24;
+
+! XFree(data);
+
+ /* read the rest of the data (len bytes) */
+ i = XGetWindowProperty(theDisp, rootW, clipAtom, 1L,
+--- 760,766 ----
+ len |= ((int) data[2])<<16;
+ len |= ((int) data[3])<<24;
+
+! XFree((void *) data);
+
+ /* read the rest of the data (len bytes) */
+ i = XGetWindowProperty(theDisp, rootW, clipAtom, 1L,
+***************
+*** 774,780 ****
+
+ data1 = (byte *) malloc((size_t) len);
+ if (!data1) {
+! XFree(data);
+ ErrPopUp("Insufficient memory to retrieve clipboard!", "\nShucks!");
+ return (byte *) NULL;
+ }
+--- 774,780 ----
+
+ data1 = (byte *) malloc((size_t) len);
+ if (!data1) {
+! XFree((void *) data);
+ ErrPopUp("Insufficient memory to retrieve clipboard!", "\nShucks!");
+ return (byte *) NULL;
+ }
+***************
+*** 785,791 ****
+ data1[3] = (len>>24) & 0xff;
+ xvbcopy((char *) data, (char *) data1+4, (size_t) len-4);
+
+! XFree(data);
+ return data1;
+ }
+ }
+--- 785,791 ----
+ data1[3] = (len>>24) & 0xff;
+ xvbcopy((char *) data, (char *) data1+4, (size_t) len-4);
+
+! XFree((void *) data);
+ return data1;
+ }
+ }
+
+diff -c -r ../xv-3.10/xvdial.c ./xvdial.c
+*** ../xv-3.10/xvdial.c Thu Dec 22 14:12:17 1994
+--- ./xvdial.c Tue Jan 03 16:20:31 1995
+***************
+*** 358,364 ****
+
+ if (dp->units) strcat(foo,dp->units);
+ foo1[0] = '\0';
+! if (strlen(foo)<i) {
+ for (i = i - strlen(foo); i>0; i--) strcat(foo1," ");
+ }
+ strcat(foo1, foo);
+--- 358,364 ----
+
+ if (dp->units) strcat(foo,dp->units);
+ foo1[0] = '\0';
+! if (strlen(foo) < (size_t) i) {
+ for (i = i - strlen(foo); i>0; i--) strcat(foo1," ");
+ }
+ strcat(foo1, foo);
+
+diff -c -r ../xv-3.10/xvdir.c ./xvdir.c
+*** ../xv-3.10/xvdir.c Thu Dec 22 14:12:16 1994
+--- ./xvdir.c Tue Jan 03 16:21:39 1995
+***************
+*** 650,656 ****
+ changedDir = strcmp(path, oldpath);
+ strcpy(oldpath, path);
+
+! if (strlen(path)>1 && path[strlen(path)-1] != '/')
+ strcat(path,"/"); /* tack on a trailing '/' to make path consistent */
+
+ /* path will be something like: "/u3/bradley/src/weiner/whatever/" */
+--- 650,656 ----
+ changedDir = strcmp(path, oldpath);
+ strcpy(oldpath, path);
+
+! if ((strlen(path) > (size_t) 1) && path[strlen(path)-1] != '/')
+ strcat(path,"/"); /* tack on a trailing '/' to make path consistent */
+
+ /* path will be something like: "/u3/bradley/src/weiner/whatever/" */
+***************
+*** 851,857 ****
+ xvbcopy(&filename[curPos], &filename[curPos-1], (size_t) (len-curPos+1));
+ curPos--;
+
+! if (strlen(filename)>0) scrollToFileName();
+ }
+
+ else if (c=='\025') { /* ^U: clear entire line */
+--- 851,857 ----
+ xvbcopy(&filename[curPos], &filename[curPos-1], (size_t) (len-curPos+1));
+ curPos--;
+
+! if (strlen(filename) > (size_t) 0) scrollToFileName();
+ }
+
+ else if (c=='\025') { /* ^U: clear entire line */
+***************
+*** 1023,1029 ****
+ XDrawLine(theDisp, dnamW, theGC, 2,0,2,LINEHIGH+5);
+ }
+
+! if (enPos<strlen(filename)) { /* draw a "there's more over here" doowah */
+ XDrawLine(theDisp, dnamW, theGC, DNAMWIDE+5,0,DNAMWIDE+5,LINEHIGH+5);
+ XDrawLine(theDisp, dnamW, theGC, DNAMWIDE+4,0,DNAMWIDE+4,LINEHIGH+5);
+ XDrawLine(theDisp, dnamW, theGC, DNAMWIDE+3,0,DNAMWIDE+3,LINEHIGH+5);
+--- 1023,1030 ----
+ XDrawLine(theDisp, dnamW, theGC, 2,0,2,LINEHIGH+5);
+ }
+
+! if ((size_t) enPos < strlen(filename)) {
+! /* draw a "there's more over here" doowah */
+ XDrawLine(theDisp, dnamW, theGC, DNAMWIDE+5,0,DNAMWIDE+5,LINEHIGH+5);
+ XDrawLine(theDisp, dnamW, theGC, DNAMWIDE+4,0,DNAMWIDE+4,LINEHIGH+5);
+ XDrawLine(theDisp, dnamW, theGC, DNAMWIDE+3,0,DNAMWIDE+3,LINEHIGH+5);
+***************
+*** 1538,1544 ****
+ if (*fname != '~') return 0; /* doesn't start with a tilde, don't expand */
+
+ /* look for the first '/' after the tilde */
+! sp = index(fname,'/');
+ if (sp == 0) { /* no '/' after the tilde */
+ sp = fname+strlen(fname); /* sp = end of string */
+ }
+--- 1539,1545 ----
+ if (*fname != '~') return 0; /* doesn't start with a tilde, don't expand */
+
+ /* look for the first '/' after the tilde */
+! sp = (char *) index(fname,'/');
+ if (sp == 0) { /* no '/' after the tilde */
+ sp = fname+strlen(fname); /* sp = end of string */
+ }
+
+diff -c -r ../xv-3.10/xvevent.c ./xvevent.c
+*** ../xv-3.10/xvevent.c Thu Dec 22 14:12:17 1994
+--- ./xvevent.c Mon Jan 23 18:20:24 1995
+***************
+*** 1407,1413 ****
+ okay = 0;
+ do {
+ i = GetStrPopUp(txt, labels, 2, buf, 64, "0123456789", 1);
+! if (!i && strlen(buf)>0) { /* hit 'Ok', had a string entered */
+ /* check for page in range */
+ j = atoi(buf);
+ if (j>=1 && j<=numPages) {
+--- 1407,1414 ----
+ okay = 0;
+ do {
+ i = GetStrPopUp(txt, labels, 2, buf, 64, "0123456789", 1);
+! if (!i && strlen(buf) > (size_t) 0) {
+! /* hit 'Ok', had a string entered */
+ /* check for page in range */
+ j = atoi(buf);
+ if (j>=1 && j<=numPages) {
+***************
+*** 2030,2035 ****
+--- 2031,2037 ----
+ xwc.height = xwa->height;
+
+
++ #ifdef BAD_IDEA
+ /* if there is a virtual window manager running, then we should translate
+ the coordinates that are in terms of 'real' screen into coordinates
+ that are in terms of the 'virtual' root window
+***************
+*** 2043,2049 ****
+ xwc.x,xwc.y,x1,y1);
+ xwc.x = x1; xwc.y = y1;
+ }
+!
+
+
+ if (DEBUG) {
+--- 2045,2051 ----
+ xwc.x,xwc.y,x1,y1);
+ xwc.x = x1; xwc.y = y1;
+ }
+! #endif
+
+
+ if (DEBUG) {
+
+diff -c -r ../xv-3.10/xvfits.c ./xvfits.c
+*** ../xv-3.10/xvfits.c Thu Dec 22 14:12:21 1994
+--- ./xvfits.c Wed Dec 28 02:43:29 1994
+***************
+*** 69,75 ****
+ char basename[64];
+
+ if (fits_block == NULL) {
+! fits_block = malloc((size_t) BLOCKSIZE);
+ if (!fits_block) FatalError("Insufficient memory for FITS block buffer");
+ }
+
+--- 69,75 ----
+ char basename[64];
+
+ if (fits_block == NULL) {
+! fits_block = (char *) malloc((size_t) BLOCKSIZE);
+ if (!fits_block) FatalError("Insufficient memory for FITS block buffer");
+ }
+
+***************
+*** 170,176 ****
+ byte rgb[256];
+
+ if (!fits_block) {
+! fits_block = malloc((size_t) BLOCKSIZE);
+ if (!fits_block) FatalError("Insufficient memory for FITS block buffer");
+ }
+
+--- 170,176 ----
+ byte rgb[256];
+
+ if (!fits_block) {
+! fits_block = (char *) malloc((size_t) BLOCKSIZE);
+ if (!fits_block) FatalError("Insufficient memory for FITS block buffer");
+ }
+
+***************
+*** 498,504 ****
+ j++; /* make j length of comment */
+ if (j > 0) { /* skip blank comment cards */
+ if (fs->comment == NULL) {
+! fs->comment = malloc((size_t) commsize);
+ if (fs->comment == NULL)
+ FatalError("Insufficient memory for comment buffer");
+ }
+--- 498,504 ----
+ j++; /* make j length of comment */
+ if (j > 0) { /* skip blank comment cards */
+ if (fs->comment == NULL) {
+! fs->comment = (char *) malloc((size_t) commsize);
+ if (fs->comment == NULL)
+ FatalError("Insufficient memory for comment buffer");
+ }
+
+diff -c -r ../xv-3.10/xvgam.c ./xvgam.c
+*** ../xv-3.10/xvgam.c Thu Dec 22 14:12:15 1994
+--- ./xvgam.c Fri Jan 13 14:51:14 1995
+***************
+*** 1838,1844 ****
+ gMap[i] = gcmap[i];
+ bMap[i] = bcmap[i];
+ if (!ncols)
+! cols[i] = (rMap[i] + gMap[i] + bMap[i] >= 128*3) ? white : black;
+ }
+ }
+ }
+--- 1838,1845 ----
+ gMap[i] = gcmap[i];
+ bMap[i] = bcmap[i];
+ if (!ncols)
+! cols[i] = (((int)rMap[i]) + ((int)gMap[i]) + ((int)bMap[i]) >= 128*3)
+! ? white : black;
+ }
+ }
+ }
+***************
+*** 1903,1909 ****
+ bMap[col] = bGraf.func[bv];
+
+ if (!ncols)
+! cols[col] = (rMap[col] + gMap[col] + bMap[col] >= 128*3) ? white : black;
+
+ if (DEBUG>1) fprintf(stderr," -> %d,%d,%d\n",rMap[col],gMap[col],bMap[col]);
+ }
+--- 1904,1912 ----
+ bMap[col] = bGraf.func[bv];
+
+ if (!ncols)
+! cols[col] =
+! (((int)rMap[col]) + ((int)gMap[col]) + ((int)bMap[col]) >= 128*3)
+! ? white : black;
+
+ if (DEBUG>1) fprintf(stderr," -> %d,%d,%d\n",rMap[col],gMap[col],bMap[col]);
+ }
+
+diff -c -r ../xv-3.10/xvgif.c ./xvgif.c
+*** ../xv-3.10/xvgif.c Thu Dec 22 14:12:15 1994
+--- ./xvgif.c Tue Jan 10 14:54:41 1995
+***************
+*** 254,260 ****
+
+
+ if (cmtlen>0) { /* build into one un-blocked comment */
+! cmt = (byte *) malloc((size_t) cmtlen);
+ if (!cmt) gifWarning("couldn't malloc space for comments\n");
+ else {
+ sp = cmt;
+--- 254,260 ----
+
+
+ if (cmtlen>0) { /* build into one un-blocked comment */
+! cmt = (byte *) malloc((size_t) (cmtlen + 1));
+ if (!cmt) gifWarning("couldn't malloc space for comments\n");
+ else {
+ sp = cmt;
+***************
+*** 262,270 ****
+ sbsize = (*ptr1++);
+ for (j=0; j<sbsize; j++, sp++, ptr1++) *sp = *ptr1;
+ } while (sbsize);
+
+ if (pinfo->comment) { /* have to strcat onto old comments */
+! cmt1 = (byte *) malloc(strlen(pinfo->comment) + cmtlen);
+ if (!cmt1) {
+ gifWarning("couldn't malloc space for comments\n");
+ free(cmt);
+--- 262,271 ----
+ sbsize = (*ptr1++);
+ for (j=0; j<sbsize; j++, sp++, ptr1++) *sp = *ptr1;
+ } while (sbsize);
++ *sp = '\0';
+
+ if (pinfo->comment) { /* have to strcat onto old comments */
+! cmt1 = (byte *) malloc(strlen(pinfo->comment) + cmtlen + 2);
+ if (!cmt1) {
+ gifWarning("couldn't malloc space for comments\n");
+ free(cmt);
+***************
+*** 271,276 ****
+--- 272,278 ----
+ }
+ else {
+ strcpy((char *) cmt1, (char *) pinfo->comment);
++ strcat((char *) cmt1, (char *) "\n");
+ strcat((char *) cmt1, (char *) cmt);
+ free(pinfo->comment);
+ free(cmt);
+
+diff -c -r ../xv-3.10/xvgifwr.c ./xvgifwr.c
+*** ../xv-3.10/xvgifwr.c Thu Dec 22 14:12:16 1994
+--- ./xvgifwr.c Tue Jan 03 16:22:21 1995
+***************
+*** 141,147 ****
+ fprintf(stderr,"WrGIF: pic=%lx, w,h=%dx%d, numcols=%d, Bits%d,Cmap=%d\n",
+ (u_long) pic8, w,h,numcols,BitsPerPixel,ColorMapSize);
+
+! if (comment && strlen(comment)>0)
+ fwrite("GIF89a", (size_t) 1, (size_t) 6, fp); /* the GIF magic number */
+ else
+ fwrite("GIF87a", (size_t) 1, (size_t) 6, fp); /* the GIF magic number */
+--- 141,147 ----
+ fprintf(stderr,"WrGIF: pic=%lx, w,h=%dx%d, numcols=%d, Bits%d,Cmap=%d\n",
+ (u_long) pic8, w,h,numcols,BitsPerPixel,ColorMapSize);
+
+! if (comment && strlen(comment) > (size_t) 0)
+ fwrite("GIF89a", (size_t) 1, (size_t) 6, fp); /* the GIF magic number */
+ else
+ fwrite("GIF87a", (size_t) 1, (size_t) 6, fp); /* the GIF magic number */
+***************
+*** 175,181 ****
+ }
+ }
+
+! if (comment && strlen(comment)>0) { /* write comment blocks */
+ char *sp;
+ int i, blen;
+
+--- 175,181 ----
+ }
+ }
+
+! if (comment && strlen(comment) > (size_t) 0) { /* write comment blocks */
+ char *sp;
+ int i, blen;
+
+diff -c -r ../xv-3.10/xviff.c ./xviff.c
+*** ../xv-3.10/xviff.c Thu Dec 22 14:12:20 1994
+--- ./xviff.c Fri Jan 13 14:54:54 1995
+***************
+*** 463,469 ****
+
+ if (codeByte < 0x80) {
+ codeByte++;
+! if ((slen > codeByte) && (dlen >= codeByte)) {
+ slen -= codeByte + 1;
+ dlen -= codeByte;
+ while (codeByte > 0) {
+--- 463,469 ----
+
+ if (codeByte < 0x80) {
+ codeByte++;
+! if ((slen > (long) codeByte) && (dlen >= (long) codeByte)) {
+ slen -= codeByte + 1;
+ dlen -= codeByte;
+ while (codeByte > 0) {
+***************
+*** 476,482 ****
+
+ else if (codeByte > 0x80) {
+ codeByte = 0x81 - (codeByte & 0x7f);
+! if ((slen > 0) && (dlen >= codeByte)) {
+ dataByte = *sptr++;
+ slen -= 2;
+ dlen -= codeByte;
+--- 476,482 ----
+
+ else if (codeByte > 0x80) {
+ codeByte = 0x81 - (codeByte & 0x7f);
+! if ((slen > (long) 0) && (dlen >= (long) codeByte)) {
+ dataByte = *sptr++;
+ slen -= 2;
+ dlen -= codeByte;
+
+diff -c -r ../xv-3.10/xvimage.c ./xvimage.c
+*** ../xv-3.10/xvimage.c Thu Dec 22 14:12:17 1994
+--- ./xvimage.c Fri Jan 13 19:11:36 1995
+***************
+*** 675,680 ****
+--- 675,682 ----
+ # define inabsrange(a,n) ( (a) < n && (a) > -n )
+
+
++ if (cHIGH<3 || cWIDE<3) return 0;
++
+ ctop = cbot = cleft = cright = 0;
+
+ if (picType != PIC24) FatalError("doAutoCrop24 called when pic!=PIC24");
+***************
+*** 780,787 ****
+
+ /* do the actual cropping */
+ if (cleft || ctop || cbot || cright) {
+ DoCrop(cXOFF+cleft, cYOFF+ctop,
+! cWIDE-(cleft+cright), cHIGH-(ctop+cbot));
+ return 1;
+ }
+
+--- 782,792 ----
+
+ /* do the actual cropping */
+ if (cleft || ctop || cbot || cright) {
++ if (cWIDE - (cleft + cright) < 1 ||
++ cHIGH - (ctop + cbot ) < 1) return 0; /* sanity check */
++
+ DoCrop(cXOFF+cleft, cYOFF+ctop,
+! cWIDE-(cleft+cright), cHIGH-(ctop+cbot));
+ return 1;
+ }
+
+***************
+*** 859,865 ****
+ eWIDE = (int) (cWIDE * expw);
+ eHIGH = (int) (cHIGH * exph);
+
+! if (eWIDE > maxWIDE || h > maxHIGH) { /* make 'normal' size */
+ if (cWIDE>maxWIDE || cHIGH>maxHIGH) {
+ double r,wr,hr;
+ wr = ((double) cWIDE) / maxWIDE;
+--- 864,870 ----
+ eWIDE = (int) (cWIDE * expw);
+ eHIGH = (int) (cHIGH * exph);
+
+! if (eWIDE>maxWIDE || eHIGH>maxHIGH) { /* make 'normal' size */
+ if (cWIDE>maxWIDE || cHIGH>maxHIGH) {
+ double r,wr,hr;
+ wr = ((double) cWIDE) / maxWIDE;
+***************
+*** 873,878 ****
+--- 878,886 ----
+ }
+
+
++ if (eWIDE<1) eWIDE = 1;
++ if (eHIGH<1) eHIGH = 1;
++
+ SetCursors(-1);
+ }
+
+***************
+*** 2823,2831 ****
+ }
+
+ if (omode == PAD_ORGB) {
+! rval = (r * fg) / 100 + (p24[0] * bg) / 100;
+! gval = (g * fg) / 100 + (p24[1] * bg) / 100;
+! bval = (b * fg) / 100 + (p24[2] * bg) / 100;
+ }
+ else { /* one of the HSV modes */
+ double fh,fs,fv,fw, bh,bs,bv,bw, h,s,v;
+--- 2831,2839 ----
+ }
+
+ if (omode == PAD_ORGB) {
+! rval = (r * fg) / 100 + ((int) p24[0] * bg) / 100;
+! gval = (g * fg) / 100 + ((int) p24[1] * bg) / 100;
+! bval = (b * fg) / 100 + ((int) p24[2] * bg) / 100;
+ }
+ else { /* one of the HSV modes */
+ double fh,fs,fv,fw, bh,bs,bv,bw, h,s,v;
+
+diff -c -r ../xv-3.10/xvjpeg.c ./xvjpeg.c
+*** ../xv-3.10/xvjpeg.c Thu Dec 22 14:12:16 1994
+--- ./xvjpeg.c Thu Jan 05 03:17:13 1995
+***************
+*** 612,620 ****
+ }
+
+
+- jpeg_finish_decompress(&cinfo);
+
+-
+ /* return 'PICINFO' structure to XV */
+
+ pinfo->pic = pic;
+--- 612,618 ----
+***************
+*** 646,655 ****
+
+ pinfo->comment = comment;
+
+ jpeg_destroy_decompress(&cinfo);
+ fclose(fp);
+
+! comment = NULL;
+ return 1;
+ }
+
+--- 644,654 ----
+
+ pinfo->comment = comment;
+
++ jpeg_finish_decompress(&cinfo);
+ jpeg_destroy_decompress(&cinfo);
+ fclose(fp);
+
+! comment = (char *) NULL;
+ return 1;
+ }
+
+***************
+*** 806,812 ****
+ If none, add 2. If one, add 1. If two or more, add none. */
+
+ sp = comment + strlen(comment);
+! for (i=0; i<3 && i<strlen(comment); i++) {
+ sp--;
+ if (*sp != '\n') break;
+ }
+--- 805,811 ----
+ If none, add 2. If one, add 1. If two or more, add none. */
+
+ sp = comment + strlen(comment);
+! for (i=0; i<3 && ((size_t) i < strlen(comment)); i++) {
+ sp--;
+ if (*sp != '\n') break;
+ }
+
+diff -c -r ../xv-3.10/xvmisc.c ./xvmisc.c
+*** ../xv-3.10/xvmisc.c Thu Dec 22 14:12:15 1994
+--- ./xvmisc.c Fri Jan 13 18:41:34 1995
+***************
+*** 729,735 ****
+ 'simple' name ('weenie.gif'). Note that it does not make a copy of
+ the name, so don't be modifying it... */
+
+! basname = rindex(fname, '/');
+ if (!basname) basname = fname;
+ else basname++;
+
+--- 729,735 ----
+ 'simple' name ('weenie.gif'). Note that it does not make a copy of
+ the name, so don't be modifying it... */
+
+! basname = (char *) rindex(fname, '/');
+ if (!basname) basname = fname;
+ else basname++;
+
+***************
+*** 770,802 ****
+ XSetForeground(theDisp, theGC, fg);
+ XFillRectangle(theDisp,win,theGC, x+3, y+3, (u_int) barwide, (u_int) h-5);
+
+! if (barwide < maxwide) {
+! if (numchars) {
+ XSetForeground(theDisp, theGC, bg);
+ XFillRectangle(theDisp, win, theGC, x+3+barwide, y+3,
+ (u_int) (maxwide-barwide), (u_int) (h-5));
+-
+- XSetForeground(theDisp, theGC, fg);
+- XDrawString(theDisp, win, theGC, CENTERX(mfinfo, (x+w/2), str),
+- CENTERY(mfinfo, (y+h/2)), str, numchars);
+ }
+- else {
+- XDrawLine(theDisp,win,theGC,x+3+barwide, y+h/2 + 0, x+w-3, y+h/2 + 0);
+-
+- XSetForeground(theDisp, theGC, lo);
+- XDrawLine(theDisp,win,theGC,x+3+barwide, y+h/2 + 1, x+w-3, y+h/2 + 1);
+
+! XSetForeground(theDisp, theGC, hi);
+! XDrawLine(theDisp,win,theGC,x+3+barwide, y+h/2 + 2, x+w-3, y+h/2 + 2);
+!
+! XSetForeground(theDisp, theGC, bg);
+! XFillRectangle(theDisp, win, theGC, x+3+barwide, y+3,
+! (u_int) (maxwide-barwide), (u_int) (h/2 - 3));
+!
+! XFillRectangle(theDisp, win, theGC, x+3+barwide, y+h/2 + 3,
+! (u_int) (maxwide-barwide),(u_int)((h-3) - (h/2+3)) + 1);
+! }
+ }
+ }
+
+ else {
+--- 770,808 ----
+ XSetForeground(theDisp, theGC, fg);
+ XFillRectangle(theDisp,win,theGC, x+3, y+3, (u_int) barwide, (u_int) h-5);
+
+! if (numchars) { /* do string */
+! if (barwide < maxwide) {
+ XSetForeground(theDisp, theGC, bg);
+ XFillRectangle(theDisp, win, theGC, x+3+barwide, y+3,
+ (u_int) (maxwide-barwide), (u_int) (h-5));
+ }
+
+! XSetFunction(theDisp, theGC, GXinvert);
+! XSetPlaneMask(theDisp, theGC, fg ^ bg);
+!
+! XDrawString(theDisp, win, theGC, CENTERX(mfinfo, (x+w/2), str),
+! CENTERY(mfinfo, (y+h/2)), str, numchars);
+!
+! XSetFunction(theDisp, theGC, GXcopy);
+! XSetPlaneMask(theDisp, theGC, AllPlanes);
+ }
++
++ else if (barwide < maxwide) {
++ XDrawLine(theDisp,win,theGC,x+3+barwide, y+h/2 + 0, x+w-3, y+h/2 + 0);
++
++ XSetForeground(theDisp, theGC, lo);
++ XDrawLine(theDisp,win,theGC,x+3+barwide, y+h/2 + 1, x+w-3, y+h/2 + 1);
++
++ XSetForeground(theDisp, theGC, hi);
++ XDrawLine(theDisp,win,theGC,x+3+barwide, y+h/2 + 2, x+w-3, y+h/2 + 2);
++
++ XSetForeground(theDisp, theGC, bg);
++ XFillRectangle(theDisp, win, theGC, x+3+barwide, y+3,
++ (u_int) (maxwide-barwide), (u_int) (h/2 - 3));
++
++ XFillRectangle(theDisp, win, theGC, x+3+barwide, y+h/2 + 3,
++ (u_int) (maxwide-barwide),(u_int)((h-3) - (h/2+3)) + 1);
++ }
+ }
+
+ else {
+***************
+*** 806,832 ****
+ XSetForeground(theDisp, theGC, fg);
+ XFillRectangle(theDisp,win,theGC, x+1, y+1, (u_int) barwide, (u_int) h-1);
+
+! if (barwide < maxwide) {
+! if (numchars) {
+ XSetForeground(theDisp, theGC, bg);
+ XFillRectangle(theDisp, win, theGC, x+1+barwide, y+1,
+ (u_int) (maxwide-barwide), (u_int) (h-1));
+-
+- XSetForeground(theDisp, theGC, fg);
+- XDrawString(theDisp, win, theGC, CENTERX(mfinfo, (x+w/2), str),
+- CENTERY(mfinfo, (y+h/2)), str, numchars);
+ }
+! else {
+! XDrawLine(theDisp, win, theGC, x+1+barwide, y+h/2, x+w-1, y+h/2);
+!
+! XSetForeground(theDisp, theGC, bg);
+! XFillRectangle(theDisp, win, theGC, x+1+barwide, y+1,
+! (u_int) (maxwide-barwide), (u_int) (h/2 - 1));
+!
+! XFillRectangle(theDisp, win, theGC, x+1+barwide, y+h/2 + 1,
+! (u_int)(maxwide-barwide),(u_int)(((h-1) - (h/2+1))+1));
+! }
+ }
+ }
+
+ XFlush(theDisp);
+--- 812,844 ----
+ XSetForeground(theDisp, theGC, fg);
+ XFillRectangle(theDisp,win,theGC, x+1, y+1, (u_int) barwide, (u_int) h-1);
+
+! if (numchars) {
+! if (barwide < maxwide) {
+ XSetForeground(theDisp, theGC, bg);
+ XFillRectangle(theDisp, win, theGC, x+1+barwide, y+1,
+ (u_int) (maxwide-barwide), (u_int) (h-1));
+ }
+!
+! XSetFunction(theDisp, theGC, GXinvert);
+! XSetPlaneMask(theDisp, theGC, fg ^ bg);
+!
+! XDrawString(theDisp, win, theGC, CENTERX(mfinfo, (x+w/2), str),
+! CENTERY(mfinfo, (y+h/2)), str, numchars);
+!
+! XSetFunction(theDisp, theGC, GXcopy);
+! XSetPlaneMask(theDisp, theGC, AllPlanes);
+ }
++
++ else if (barwide < maxwide) {
++ XDrawLine(theDisp, win, theGC, x+1+barwide, y+h/2, x+w-1, y+h/2);
++
++ XSetForeground(theDisp, theGC, bg);
++ XFillRectangle(theDisp, win, theGC, x+1+barwide, y+1,
++ (u_int) (maxwide-barwide), (u_int) (h/2 - 1));
++
++ XFillRectangle(theDisp, win, theGC, x+1+barwide, y+h/2 + 1,
++ (u_int)(maxwide-barwide),(u_int)(((h-1) - (h/2+1))+1));
++ }
+ }
+
+ XFlush(theDisp);
+***************
+*** 1117,1124 ****
+
+ time.tv_sec = usec / 1000000L;
+ time.tv_usec = usec % 1000000L;
+! select(0, (fd_set *) NULL, (fd_set *) NULL, (fd_set *) NULL, &time);
+ }
+ #endif /* VMS */
+ }
+
+--- 1129,1137 ----
+
+ time.tv_sec = usec / 1000000L;
+ time.tv_usec = usec % 1000000L;
+! select(0, XV_FDTYPE NULL, XV_FDTYPE NULL, XV_FDTYPE NULL, &time);
+ }
+ #endif /* VMS */
+ }
++
+
+diff -c -r ../xv-3.10/xvpbm.c ./xvpbm.c
+*** ../xv-3.10/xvpbm.c Thu Dec 22 14:12:16 1994
+--- ./xvpbm.c Tue Jan 03 16:23:44 1995
+***************
+*** 353,359 ****
+ *sp++ = '\n';
+ *sp = '\0';
+
+! if (strlen(cmt) > 0) { /* add to pinfo->comment */
+ if (!pinfo->comment) {
+ pinfo->comment = (char *) malloc(strlen(cmt)+1);
+ if (!pinfo->comment) FatalError("malloc failure in xvpbm.c getint");
+--- 353,359 ----
+ *sp++ = '\n';
+ *sp = '\0';
+
+! if (strlen(cmt) > (size_t) 0) { /* add to pinfo->comment */
+ if (!pinfo->comment) {
+ pinfo->comment = (char *) malloc(strlen(cmt)+1);
+ if (!pinfo->comment) FatalError("malloc failure in xvpbm.c getint");
+***************
+*** 438,444 ****
+ *sp++ = '\n';
+ *sp = '\0';
+
+! if (strlen(cmt) > 0) { /* add to pinfo->comment */
+ if (!pinfo->comment) {
+ pinfo->comment = (char *) malloc(strlen(cmt)+1);
+ if (!pinfo->comment) FatalError("malloc failure in xvpbm.c getint");
+--- 438,444 ----
+ *sp++ = '\n';
+ *sp = '\0';
+
+! if (strlen(cmt) > (size_t) 0) { /* add to pinfo->comment */
+ if (!pinfo->comment) {
+ pinfo->comment = (char *) malloc(strlen(cmt)+1);
+ if (!pinfo->comment) FatalError("malloc failure in xvpbm.c getint");
+
+diff -c -r ../xv-3.10/xvpcx.c ./xvpcx.c
+*** ../xv-3.10/xvpcx.c Thu Dec 22 14:12:20 1994
+--- ./xvpcx.c Tue Jan 10 18:06:37 1995
+***************
+*** 36,44 ****
+ #define PCX_MAPSTART 0x0c /* Start of appended colormap */
+
+
+! static int pcxLoadImage PARM((char *, FILE *, byte *, byte *, int, int));
+! static void pcxLoadRaster PARM((FILE *, byte *, int, byte *, int, int));
+! static int pcxError PARM((char *, char *));
+
+
+
+--- 36,45 ----
+ #define PCX_MAPSTART 0x0c /* Start of appended colormap */
+
+
+! static int pcxLoadImage8 PARM((char *, FILE *, PICINFO *, byte *));
+! static int pcxLoadImage24 PARM((char *, FILE *, PICINFO *, byte *));
+! static void pcxLoadRaster PARM((FILE *, byte *, int, byte *, int, int));
+! static int pcxError PARM((char *, char *));
+
+
+
+***************
+*** 52,58 ****
+ long filesize;
+ char *bname, *errstr;
+ byte hdr[128], *image;
+! int i, colors, gray;
+
+ pinfo->type = PIC8;
+ pinfo->pic = (byte *) NULL;
+--- 53,59 ----
+ long filesize;
+ char *bname, *errstr;
+ byte hdr[128], *image;
+! int i, colors, gray, fullcolor;
+
+ pinfo->type = PIC8;
+ pinfo->pic = (byte *) NULL;
+***************
+*** 92,97 ****
+--- 93,99 ----
+ pinfo->w++; pinfo->h++;
+
+ colors = 1 << (hdr[PCX_BPP] * hdr[PCX_PLANES]);
++ fullcolor = (hdr[PCX_BPP] == 8 && hdr[PCX_PLANES] == 3);
+
+ if (DEBUG) {
+ fprintf(stderr,"PCX: %dx%d image, version=%d, encoding=%d\n",
+***************
+*** 102,108 ****
+ colors);
+ }
+
+! if (colors>256) {
+ fclose(fp);
+ return pcxError(bname,"No more than 256 colors allowed in PCX file.");
+ }
+--- 104,110 ----
+ colors);
+ }
+
+! if (colors>256 && !fullcolor) {
+ fclose(fp);
+ return pcxError(bname,"No more than 256 colors allowed in PCX file.");
+ }
+***************
+*** 112,134 ****
+ return pcxError(bname,"Unsupported PCX encoding format.");
+ }
+
+! /* note: overallocation to make life easier... */
+! image = (byte *) malloc((size_t) (pinfo->h + 1) * pinfo->w + 16);
+! if (!image) FatalError("Can't alloc 'image' in LoadPCX()");
+!
+! xvbzero((char *) image, (size_t) ((pinfo->h+1) * pinfo->w + 16));
+!
+! if (!pcxLoadImage(bname, fp, image, hdr, pinfo->w, pinfo->h)) {
+! free(image);
+! fclose(fp);
+! return 0;
+ }
+
+
+ if (ferror(fp) | feof(fp)) /* just a warning */
+ pcxError(bname, "PCX file appears to be truncated.");
+
+! if (colors>16) { /* handle trailing colormap */
+ while (1) {
+ i=getc(fp);
+ if (i==PCX_MAPSTART || i==EOF) break;
+--- 114,138 ----
+ return pcxError(bname,"Unsupported PCX encoding format.");
+ }
+
+! /* load the image, the image function fills in pinfo->pic */
+! if (!fullcolor) {
+! if (!pcxLoadImage8(bname, fp, pinfo, hdr)) {
+! fclose(fp);
+! return 0;
+! }
+ }
++ else {
++ if (!pcxLoadImage24(bname, fp, pinfo, hdr)) {
++ fclose(fp);
++ return 0;
++ }
++ }
+
+
+ if (ferror(fp) | feof(fp)) /* just a warning */
+ pcxError(bname, "PCX file appears to be truncated.");
+
+! if (colors>16 && !fullcolor) { /* handle trailing colormap */
+ while (1) {
+ i=getc(fp);
+ if (i==PCX_MAPSTART || i==EOF) break;
+***************
+*** 171,185 ****
+ /* finally, convert into XV internal format */
+
+
+! pinfo->pic = image;
+! pinfo->type = PIC8;
+ pinfo->frmType = -1; /* no default format to save in */
+
+ /* check for grayscaleitude */
+! for (i=0; i<colors; i++) {
+! if ((pinfo->r[i] != pinfo->g[i]) || (pinfo->r[i] != pinfo->b[i])) break;
+ }
+- gray = (i==colors) ? 1 : 0;
+
+
+ if (colors > 2 || (colors==2 && !gray)) { /* grayscale or PseudoColor */
+--- 175,191 ----
+ /* finally, convert into XV internal format */
+
+
+! pinfo->type = fullcolor ? PIC24 : PIC8;
+ pinfo->frmType = -1; /* no default format to save in */
+
+ /* check for grayscaleitude */
+! gray = 0;
+! if (!fullcolor) {
+! for (i=0; i<colors; i++) {
+! if ((pinfo->r[i] != pinfo->g[i]) || (pinfo->r[i] != pinfo->b[i])) break;
+! }
+! gray = (i==colors) ? 1 : 0;
+ }
+
+
+ if (colors > 2 || (colors==2 && !gray)) { /* grayscale or PseudoColor */
+***************
+*** 205,227 ****
+
+
+ /*****************************/
+! static int pcxLoadImage(fname, fp, image, hdr, w, h)
+! char *fname;
+! FILE *fp;
+! byte *image, *hdr;
+! int w, h;
+ {
+ switch (hdr[PCX_BPP]) {
+! case 1: pcxLoadRaster(fp, image, 1, hdr, w, h); break;
+! case 8: pcxLoadRaster(fp, image, 8, hdr, w, h); break;
+ default:
+ pcxError(fname, "Unsupported # of bits per plane.");
+ return (0);
+ }
+
+ return 1;
+ }
+
+
+
+
+--- 211,317 ----
+
+
+ /*****************************/
+! static int pcxLoadImage8(fname, fp, pinfo, hdr)
+! char *fname;
+! FILE *fp;
+! PICINFO *pinfo;
+! byte *hdr;
+ {
++ /* load an image with at most 8 bits per pixel */
++
++ byte *image;
++
++ /* note: overallocation to make life easier... */
++ image = (byte *) malloc((size_t) (pinfo->h + 1) * pinfo->w + 16);
++ if (!image) FatalError("Can't alloc 'image' in pcxLoadImage8()");
++
++ xvbzero((char *) image, (size_t) ((pinfo->h+1) * pinfo->w + 16));
++
+ switch (hdr[PCX_BPP]) {
+! case 1: pcxLoadRaster(fp, image, 1, hdr, pinfo->w, pinfo->h); break;
+! case 8: pcxLoadRaster(fp, image, 8, hdr, pinfo->w, pinfo->h); break;
+ default:
+ pcxError(fname, "Unsupported # of bits per plane.");
++ free(image);
+ return (0);
+ }
+
++ pinfo->pic = image;
+ return 1;
+ }
+
++
++ /*****************************/
++ static int pcxLoadImage24(fname, fp, pinfo, hdr)
++ char *fname;
++ FILE *fp;
++ PICINFO *pinfo;
++ byte *hdr;
++ {
++ byte *pix, *pic24, scale[256];
++ int c, i, j, w, h, maxv, cnt, planes, bperlin, nbytes;
++
++ w = pinfo->w; h = pinfo->h;
++
++ planes = (int) hdr[PCX_PLANES];
++ bperlin = hdr[PCX_BPRL] + ((int) hdr[PCX_BPRH]<<8);
++
++ /* allocate 24-bit image */
++ pic24 = (byte *) malloc((size_t) w*h*planes);
++ if (!pic24) FatalError("couldn't malloc 'pic24'");
++
++ xvbzero((char *) pic24, (size_t) w*h*planes);
++
++ maxv = 0;
++ pix = pinfo->pic = pic24;
++ i = 0; /* planes, in this while loop */
++ j = 0; /* bytes per line, in this while loop */
++ nbytes = bperlin*h*planes;
++
++ while (nbytes > 0 && (c = getc(fp)) != EOF) {
++ if ((c & 0xC0) == 0xC0) { /* have a rep. count */
++ cnt = c & 0x3F;
++ c = getc(fp);
++ if (c == EOF) { getc(fp); break; }
++ }
++ else cnt = 1;
++
++ if (c > maxv) maxv = c;
++
++ while (cnt-- > 0) {
++ if (j < w) {
++ *pix = c;
++ pix += planes;
++ }
++ j++;
++ nbytes--;
++ if (j == bperlin) {
++ j = 0;
++ if (++i < planes) {
++ pix -= (w*planes)-1; /* next plane on this line */
++ }
++ else {
++ pix -= (planes-1); /* start of next line, first plane */
++ i = 0;
++ }
++ }
++ }
++ }
++
++
++ /* scale all RGB to range 0-255, if they aren't */
++
++ if (maxv<255) {
++ for (i=0; i<=maxv; i++) scale[i] = (i * 255) / maxv;
++
++ for (i=0, pix=pic24; i<h; i++) {
++ if ((i&0x3f)==0) WaitCursor();
++ for (j=0; j<w*planes; j++, pix++) *pix = scale[*pix];
++ }
++ }
++
++ return 1;
++ }
+
+
+
+diff -c -r ../xv-3.10/xvpds.c ./xvpds.c
+*** ../xv-3.10/xvpds.c Thu Dec 22 14:12:17 1994
+--- ./xvpds.c Tue Jan 03 16:25:52 1995
+***************
+*** 513,519 ****
+ } else if ((sscanf(scanbuff," EXPOSURE_DURATION = %s", exposure) == 1)
+ || (sscanf(scanbuff," INSTRUMENT_EXPOSURE_DURATION = %s",
+ exposure) == 1)) {
+! tmptmp = index(scanbuff,'=');
+ tmptmp++;
+ while((*tmptmp) == ' ')
+ tmptmp++;
+--- 513,519 ----
+ } else if ((sscanf(scanbuff," EXPOSURE_DURATION = %s", exposure) == 1)
+ || (sscanf(scanbuff," INSTRUMENT_EXPOSURE_DURATION = %s",
+ exposure) == 1)) {
+! tmptmp = (char *) index(scanbuff,'=');
+ tmptmp++;
+ while((*tmptmp) == ' ')
+ tmptmp++;
+***************
+*** 521,527 ****
+ lastwasinote=FALSE; continue;
+
+ } else if (sscanf(scanbuff, "NOTE = %s", inote) == 1) {
+! tmptmp = index(scanbuff,'='); tmptmp++;
+ while (((*tmptmp) == ' ') || ((*tmptmp) == '"')) tmptmp++;
+ strcpy(inote,tmptmp);
+ strcat(inote," ");
+--- 521,527 ----
+ lastwasinote=FALSE; continue;
+
+ } else if (sscanf(scanbuff, "NOTE = %s", inote) == 1) {
+! tmptmp = (char *) index(scanbuff,'='); tmptmp++;
+ while (((*tmptmp) == ' ') || ((*tmptmp) == '"')) tmptmp++;
+ strcpy(inote,tmptmp);
+ strcat(inote," ");
+***************
+*** 884,892 ****
+
+ /* check whether histogram file exists */
+ #ifdef VMS
+! c = rindex(strcpy(name, (c = rindex(fname, ':')) ? c+1 : fname), ']');
+ #else
+! c = rindex(strcpy(name, fname), '/');
+ #endif /* VMS */
+ (void)strcpy(c ? c+1 : name, "hist.tab");
+
+--- 884,894 ----
+
+ /* check whether histogram file exists */
+ #ifdef VMS
+! c = (char *) rindex(strcpy(name,
+! (c = (char *) rindex(fname, ':')) ? c+1 : fname),
+! ']');
+ #else
+! c = (char *) rindex(strcpy(name, fname), '/');
+ #endif /* VMS */
+ (void)strcpy(c ? c+1 : name, "hist.tab");
+
+***************
+*** 979,987 ****
+ int i, n, r, g, b;
+
+ #ifdef VMS
+! c = rindex(strcpy(name, (c = rindex(fname, ':')) ? c+1 : fname), ']');
+ #else
+! c = rindex(strcpy(name, fname), '/');
+ #endif /* VMS */
+ (void)strcpy(c ? c+1 : name, "palette.tab");
+
+--- 981,991 ----
+ int i, n, r, g, b;
+
+ #ifdef VMS
+! c = (char *) rindex(strcpy(name,
+! (c = (char *) rindex(fname, ':')) ? c+1 : fname),
+! ']');
+ #else
+! c = (char *) rindex(strcpy(name, fname), '/');
+ #endif /* VMS */
+ (void)strcpy(c ? c+1 : name, "palette.tab");
+
+diff -c -r ../xv-3.10/xvpictoppm.c ./xvpictoppm.c
+*** ../xv-3.10/xvpictoppm.c Thu Dec 22 14:12:24 1994
+--- ./xvpictoppm.c Fri Jan 13 14:57:14 1995
+***************
+*** 124,132 ****
+
+ /* convert icon from 332 to 24-bit image */
+ for (i=0, ip=icon8, pp=pic24; i<w*h; i++, ip++, pp+=3) {
+! pp[0] = (((*ip >> 5) & 0x07) * 255) / 7;
+! pp[1] = (((*ip >> 2) & 0x07) * 255) / 7;
+! pp[2] = (((*ip >> 0) & 0x03) * 255) / 3;
+ }
+
+ free(icon8);
+--- 124,132 ----
+
+ /* convert icon from 332 to 24-bit image */
+ for (i=0, ip=icon8, pp=pic24; i<w*h; i++, ip++, pp+=3) {
+! pp[0] = ( ((int) ((*ip >> 5) & 0x07)) * 255) / 7;
+! pp[1] = ( ((int) ((*ip >> 2) & 0x07)) * 255) / 7;
+! pp[2] = ( ((int) ((*ip >> 0) & 0x03)) * 255) / 3;
+ }
+
+ free(icon8);
+
+diff -c -r ../xv-3.10/xvpopup.c ./xvpopup.c
+*** ../xv-3.10/xvpopup.c Thu Dec 22 14:12:16 1994
+--- ./xvpopup.c Thu Jan 19 13:09:31 1995
+***************
+*** 150,161 ****
+ if (wy + h > dispHIGH) wy = dispHIGH - h;
+ }
+
+! /* wx -= (p_offx + ch_offx);
+! wy -= (p_offy + ch_offy); */
+
+- wx -= (ch_offx);
+- wy -= (ch_offy);
+-
+ if (!XGetNormalHints(theDisp, win, &hints)) hints.flags = 0;
+ hints.width = hints.min_width = hints.max_width = w;
+ hints.height = hints.min_height = hints.max_height = h;
+--- 150,165 ----
+ if (wy + h > dispHIGH) wy = dispHIGH - h;
+ }
+
+!
+! if (winCtrPosKludge) {
+! wx -= (p_offx + ch_offx);
+! wy -= (p_offy + ch_offy);
+! }
+! else {
+! wx -= (ch_offx);
+! wy -= (ch_offy);
+! }
+
+ if (!XGetNormalHints(theDisp, win, &hints)) hints.flags = 0;
+ hints.width = hints.min_width = hints.max_width = w;
+ hints.height = hints.min_height = hints.max_height = h;
+***************
+*** 249,255 ****
+
+ if (poptyp == ISGRAB) {
+ BTSetActive(&bts[0], (int) strlen(gsBuf));
+! BTSetActive(&bts[1], (strlen(gsBuf)>0 && atoi(gsBuf)>0));
+ }
+ else if (poptyp == ISPAD) {
+ BTSetActive(&bts[0], (int) strlen(gsBuf));
+--- 253,259 ----
+
+ if (poptyp == ISGRAB) {
+ BTSetActive(&bts[0], (int) strlen(gsBuf));
+! BTSetActive(&bts[1], (strlen(gsBuf)>(size_t)0 && atoi(gsBuf)>(size_t)0));
+ }
+ else if (poptyp == ISPAD) {
+ BTSetActive(&bts[0], (int) strlen(gsBuf));
+***************
+*** 350,356 ****
+ gsx = 10 + icon_width + 20;
+ gsy = 10+(PUHIGH-30-BUTTH-gsh)/2;
+
+! if (strlen(txt) > 60)
+ gsy = PUHIGH - 10 - BUTTH - 10 - gsh - 20;
+
+ gsw = PUWIDE - gsx - 10;
+--- 354,360 ----
+ gsx = 10 + icon_width + 20;
+ gsy = 10+(PUHIGH-30-BUTTH-gsh)/2;
+
+! if (strlen(txt) > (size_t) 60)
+ gsy = PUHIGH - 10 - BUTTH - 10 - gsh - 20;
+
+ gsw = PUWIDE - gsx - 10;
+***************
+*** 558,564 ****
+ strncpy(nams[*lenp], vals[*lenp], (size_t) 31);
+ }
+
+! if (strlen(nams[*lenp]) > 20) { /* fix long names */
+ char *sp = nams[*lenp] + 18;
+ *sp++ = '.'; *sp++ = '.'; *sp++ = '.'; *sp++ = '\0';
+ }
+--- 562,568 ----
+ strncpy(nams[*lenp], vals[*lenp], (size_t) 31);
+ }
+
+! if (strlen(nams[*lenp]) > (size_t) 20) { /* fix long names */
+ char *sp = nams[*lenp] + 18;
+ *sp++ = '.'; *sp++ = '.'; *sp++ = '.'; *sp++ = '\0';
+ }
+***************
+*** 1154,1166 ****
+ /* if we have a string of any sort, turn on the default '\n' button
+ (if there is one) */
+ for (i=0; i<nbts && accel[i]!='\n'; i++);
+! if (i<nbts) BTSetActive(&bts[i], strlen(gsBuf)>0);
+ }
+ else if (popUp == ISGRAB) {
+ /* need a string of length 1 to enable Grab (bts[0]), and a string
+ with an atoi() of at least '1' to enable AutoGrab (bts[1]) */
+! BTSetActive(&bts[0], strlen(gsBuf)>0);
+! BTSetActive(&bts[1], (strlen(gsBuf)>0 && atoi(gsBuf)>0));
+ }
+
+ return(0);
+--- 1158,1170 ----
+ /* if we have a string of any sort, turn on the default '\n' button
+ (if there is one) */
+ for (i=0; i<nbts && accel[i]!='\n'; i++);
+! if (i<nbts) BTSetActive(&bts[i], (strlen(gsBuf) > (size_t) 0));
+ }
+ else if (popUp == ISGRAB) {
+ /* need a string of length 1 to enable Grab (bts[0]), and a string
+ with an atoi() of at least '1' to enable AutoGrab (bts[1]) */
+! BTSetActive(&bts[0], (strlen(gsBuf) > (size_t) 0));
+! BTSetActive(&bts[1], (strlen(gsBuf)>(size_t)0 && atoi(gsBuf)>(size_t)0));
+ }
+
+ return(0);
+***************
+*** 1219,1225 ****
+ XDrawLine(theDisp, popW, theGC, gsx+3, gsy+1, gsx+3, gsy + gsh-1);
+ }
+
+! if (gsEnPos<strlen(gsBuf)) { /* draw a "there's more over here" doowah */
+ XDrawLine(theDisp, popW, theGC, gsx+gsw-3, gsy+1, gsx+gsw-3, gsy+gsh-1);
+ XDrawLine(theDisp, popW, theGC, gsx+gsw-2, gsy+1, gsx+gsw-2, gsy+gsh-1);
+ XDrawLine(theDisp, popW, theGC, gsx+gsw-1, gsy+1, gsx+gsw-1, gsy+gsh-1);
+--- 1223,1230 ----
+ XDrawLine(theDisp, popW, theGC, gsx+3, gsy+1, gsx+3, gsy + gsh-1);
+ }
+
+! if ((size_t) gsEnPos < strlen(gsBuf)) {
+! /* draw a "there's more over here" doowah */
+ XDrawLine(theDisp, popW, theGC, gsx+gsw-3, gsy+1, gsx+gsw-3, gsy+gsh-1);
+ XDrawLine(theDisp, popW, theGC, gsx+gsw-2, gsy+1, gsx+gsw-2, gsy+gsh-1);
+ XDrawLine(theDisp, popW, theGC, gsx+gsw-1, gsy+1, gsx+gsw-1, gsy+gsh-1);
+
+diff -c -r ../xv-3.10/xvrle.c ./xvrle.c
+*** ../xv-3.10/xvrle.c Thu Dec 22 14:12:22 1994
+--- ./xvrle.c Thu Jan 19 12:27:47 1995
+***************
+*** 257,263 ****
+
+ if (ncolors == 1) { /* grayscale or PseudoColor */
+ pinfo->type = PIC8;
+! if (ncmap == 1) {
+ pinfo->colType = F_GREYSCALE;
+ sprintf(pinfo->fullInfo, "Greyscale RLE. (%ld bytes)", filesize);
+ for (i=0; i<256; i++)
+--- 257,263 ----
+
+ if (ncolors == 1) { /* grayscale or PseudoColor */
+ pinfo->type = PIC8;
+! if (ncmap == 0 || ncmap == 1) { /* grey, or grey with gamma curve */
+ pinfo->colType = F_GREYSCALE;
+ sprintf(pinfo->fullInfo, "Greyscale RLE. (%ld bytes)", filesize);
+ for (i=0; i<256; i++)
+
+diff -c -r ../xv-3.10/xvtext.c ./xvtext.c
+*** ../xv-3.10/xvtext.c Thu Dec 22 14:12:20 1994
+--- ./xvtext.c Fri Jan 13 18:46:28 1995
+***************
+*** 1220,1226 ****
+ LC("the xv distribution. Do *not* send mail unless absolutely necessary");
+ LC("(ie, you don't have ftp capability).");
+ LC("");
+! LC("Note: The documentation ('xvdocs.ps') may be installed in '/usr/local'.");
+ LC("");
+ LC("If you're viewing this information via the 'About XV' command, and");
+ LC("you'd like to print it out, a copy of this info can be found in the ");
+--- 1220,1226 ----
+ LC("the xv distribution. Do *not* send mail unless absolutely necessary");
+ LC("(ie, you don't have ftp capability).");
+ LC("");
+! LC("Note: The docs (xvdocs.ps) may be installed in '/usr/local/lib'.");
+ LC("");
+ LC("If you're viewing this information via the 'About XV' command, and");
+ LC("you'd like to print it out, a copy of this info can be found in the ");
+
+diff -c -r ../xv-3.10/xvtiff.c ./xvtiff.c
+*** ../xv-3.10/xvtiff.c Thu Dec 22 14:12:20 1994
+--- ./xvtiff.c Fri Jan 13 14:53:34 1995
+***************
+*** 120,126 ****
+ desc = (char *) NULL;
+
+ TIFFGetField(tif, TIFFTAG_IMAGEDESCRIPTION, &desc);
+! if (desc && strlen(desc)>0) {
+ /* kludge: tiff library seems to return bizarre comments */
+ if (strlen(desc)==4 && strcmp(desc, "\367\377\353\370")==0) {}
+ else {
+--- 120,126 ----
+ desc = (char *) NULL;
+
+ TIFFGetField(tif, TIFFTAG_IMAGEDESCRIPTION, &desc);
+! if (desc && strlen(desc) > (size_t) 0) {
+ /* kludge: tiff library seems to return bizarre comments */
+ if (strlen(desc)==4 && strcmp(desc, "\367\377\353\370")==0) {}
+ else {
+***************
+*** 1381,1388 ****
+ }
+ }
+
+! /* #define Code2V(c, RB, RW, CR) ((((c)-(int)RB)*(float)CR)/(float)(RW-RB)) */
+! #define Code2V(c, RB, RW, CR) ((((c)-RB)*(float)CR)/(float)(RW-RB))
+
+ #define CLAMP(f,min,max) \
+ (int)((f)+.5 < (min) ? (min) : (f)+.5 > (max) ? (max) : (f)+.5)
+--- 1381,1387 ----
+ }
+ }
+
+! #define Code2V(c, RB, RW, CR) ((((c)-(int)RB)*(float)CR)/(float)(RW-RB))
+
+ #define CLAMP(f,min,max) \
+ (int)((f)+.5 < (min) ? (min) : (f)+.5 > (max) ? (max) : (f)+.5)
+
+diff -c -r ../xv-3.10/xvtiffwr.c ./xvtiffwr.c
+*** ../xv-3.10/xvtiffwr.c Thu Dec 22 14:12:20 1994
+--- ./xvtiffwr.c Tue Jan 03 16:28:13 1995
+***************
+*** 70,76 ****
+ TIFFSetField(tif, TIFFTAG_IMAGELENGTH, h);
+ TIFFSetField(tif, TIFFTAG_COMPRESSION, comp);
+
+! if (comment && strlen(comment)>0) {
+ TIFFSetField(tif, TIFFTAG_IMAGEDESCRIPTION, comment);
+ }
+
+--- 70,76 ----
+ TIFFSetField(tif, TIFFTAG_IMAGELENGTH, h);
+ TIFFSetField(tif, TIFFTAG_COMPRESSION, comp);
+
+! if (comment && strlen(comment) > (size_t) 0) {
+ TIFFSetField(tif, TIFFTAG_IMAGEDESCRIPTION, comment);
+ }
+
+diff -c -r ../xv-3.10/bits/font5x9.h ./bits/font5x9.h
+*** ../xv-3.10/bits/font5x9.h Thu Dec 22 14:12:58 1994
+--- ./bits/font5x9.h Tue Jan 03 15:18:06 1995
+***************
+*** 21,27 ****
+ {0x0e, 0x11, 0x19, 0x15, 0x13, 0x11, 0x0e, 0x00, 0x00}, /* 0 */
+ {0x04, 0x06, 0x05, 0x04, 0x04, 0x04, 0x1f, 0x00, 0x00}, /* 1 */
+ {0x0e, 0x11, 0x10, 0x0c, 0x02, 0x01, 0x1f, 0x00, 0x00}, /* 2 */
+! {0x0e, 0x11, 0x10, 0x0c, 0x02, 0x01, 0x1f, 0x00, 0x00}, /* 3 */
+ {0x09, 0x09, 0x09, 0x1f, 0x08, 0x08, 0x08, 0x00, 0x00}, /* 4 */
+ {0x1f, 0x01, 0x01, 0x0f, 0x10, 0x10, 0x0f, 0x00, 0x00}, /* 5 */
+ {0x0e, 0x01, 0x01, 0x0f, 0x11, 0x11, 0x0e, 0x00, 0x00}, /* 6 */
+--- 21,27 ----
+ {0x0e, 0x11, 0x19, 0x15, 0x13, 0x11, 0x0e, 0x00, 0x00}, /* 0 */
+ {0x04, 0x06, 0x05, 0x04, 0x04, 0x04, 0x1f, 0x00, 0x00}, /* 1 */
+ {0x0e, 0x11, 0x10, 0x0c, 0x02, 0x01, 0x1f, 0x00, 0x00}, /* 2 */
+! {0x0f, 0x10, 0x10, 0x0e, 0x10, 0x10, 0x0f, 0x00, 0x00}, /* 3 */
+ {0x09, 0x09, 0x09, 0x1f, 0x08, 0x08, 0x08, 0x00, 0x00}, /* 4 */
+ {0x1f, 0x01, 0x01, 0x0f, 0x10, 0x10, 0x0f, 0x00, 0x00}, /* 5 */
+ {0x0e, 0x01, 0x01, 0x0f, 0x11, 0x11, 0x0e, 0x00, 0x00}, /* 6 */
+***************
+*** 51,57 ****
+ {0x11, 0x13, 0x13, 0x15, 0x19, 0x19, 0x11, 0x00, 0x00}, /* N */
+ {0x0e, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00, 0x00}, /* O */
+ {0x0f, 0x11, 0x11, 0x0f, 0x01, 0x01, 0x01, 0x00, 0x00}, /* P */
+! {0x0f, 0x11, 0x11, 0x0f, 0x01, 0x01, 0x01, 0x00, 0x00}, /* Q */
+ {0x0f, 0x11, 0x11, 0x0f, 0x05, 0x09, 0x11, 0x00, 0x00}, /* R */
+ {0x0e, 0x11, 0x01, 0x0e, 0x10, 0x11, 0x0e, 0x00, 0x00}, /* S */
+ {0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00}, /* T */
+--- 51,57 ----
+ {0x11, 0x13, 0x13, 0x15, 0x19, 0x19, 0x11, 0x00, 0x00}, /* N */
+ {0x0e, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00, 0x00}, /* O */
+ {0x0f, 0x11, 0x11, 0x0f, 0x01, 0x01, 0x01, 0x00, 0x00}, /* P */
+! {0x0e, 0x11, 0x11, 0x11, 0x11, 0x15, 0x0e, 0x18, 0x00}, /* Q */
+ {0x0f, 0x11, 0x11, 0x0f, 0x05, 0x09, 0x11, 0x00, 0x00}, /* R */
+ {0x0e, 0x11, 0x01, 0x0e, 0x10, 0x11, 0x0e, 0x00, 0x00}, /* S */
+ {0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00}, /* T */
+
+diff -c -r ../xv-3.10/bits/xv_rev ./bits/xv_rev
+*** ../xv-3.10/bits/xv_rev Thu Dec 22 14:12:54 1994
+--- ./bits/xv_rev Fri Jan 13 17:37:10 1995
+***************
+*** 11,29 ****
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+! 0x00, 0x00, 0xa0, 0x03, 0x00, 0x04, 0x10, 0x00, 0x00, 0x20, 0x3c, 0x10,
+! 0xe1, 0x41, 0x3c, 0x10, 0x01, 0x00, 0x20, 0x60, 0x04, 0x00, 0x04, 0x10,
+! 0x00, 0x00, 0x30, 0x42, 0x90, 0x11, 0x42, 0x42, 0x18, 0x01, 0x00, 0xa0,
+! 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x41, 0x48, 0x09, 0x20,
+ 0x41, 0x14, 0x01, 0xc7, 0x7b, 0xe0, 0x80, 0x09, 0xc5, 0x13, 0x27, 0x13,
+! 0x20, 0x20, 0x08, 0x89, 0x23, 0x71, 0x14, 0x81, 0x28, 0x23, 0x60, 0x60,
+! 0x8a, 0x24, 0x93, 0xe8, 0x12, 0x20, 0x10, 0x04, 0x65, 0x14, 0x4e, 0x12,
+! 0x01, 0xae, 0x24, 0xa0, 0xe0, 0x51, 0xa4, 0x54, 0x28, 0x02, 0x20, 0x0c,
+! 0x04, 0x15, 0x14, 0x40, 0x79, 0x81, 0x49, 0x24, 0x21, 0x11, 0x50, 0x44,
+! 0x54, 0x28, 0x02, 0x20, 0x02, 0x04, 0x09, 0x92, 0xa0, 0x16, 0x5d, 0x0c,
+! 0xa2, 0x20, 0x16, 0x23, 0x04, 0x52, 0x24, 0x12, 0x20, 0x41, 0x02, 0x09,
+! 0x89, 0x11, 0x10, 0x83, 0xeb, 0x61, 0x20, 0xe8, 0x20, 0xe4, 0x91, 0x23,
+! 0x12, 0x20, 0x7f, 0x02, 0xf1, 0x08, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+--- 11,29 ----
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+! 0x00, 0x00, 0xa0, 0x03, 0x00, 0x04, 0x10, 0x00, 0x00, 0x84, 0x07, 0xf1,
+! 0xe0, 0x41, 0x3c, 0x10, 0x01, 0x00, 0x20, 0x60, 0x04, 0x00, 0x04, 0x10,
+! 0x00, 0x00, 0x46, 0x08, 0x09, 0x11, 0x42, 0x42, 0x18, 0x01, 0x00, 0xa0,
+! 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x88, 0x04, 0x09, 0x22,
+ 0x41, 0x14, 0x01, 0xc7, 0x7b, 0xe0, 0x80, 0x09, 0xc5, 0x13, 0x27, 0x13,
+! 0x04, 0x84, 0x80, 0x88, 0x23, 0x71, 0x14, 0x81, 0x28, 0x23, 0x60, 0x60,
+! 0x8a, 0x24, 0x93, 0xe8, 0x12, 0x04, 0x42, 0x40, 0x70, 0x12, 0x4e, 0x12,
+! 0x01, 0xae, 0x24, 0xa0, 0xe0, 0x51, 0xa4, 0x54, 0x28, 0x02, 0x84, 0x41,
+! 0x30, 0x00, 0x12, 0x40, 0x79, 0x81, 0x49, 0x24, 0x21, 0x11, 0x50, 0x44,
+! 0x54, 0x28, 0x02, 0x44, 0x40, 0x08, 0x04, 0x91, 0xa0, 0x16, 0x5d, 0x0c,
+! 0xa2, 0x20, 0x16, 0x23, 0x04, 0x52, 0x24, 0x12, 0x24, 0x28, 0x04, 0x8d,
+! 0x88, 0x11, 0x10, 0x83, 0xeb, 0x61, 0x20, 0xe8, 0x20, 0xe4, 0x91, 0x23,
+! 0x12, 0xe4, 0x2f, 0xfc, 0x71, 0x08, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+diff -c -r ../xv-3.10/bits/xv_ver ./bits/xv_ver
+*** ../xv-3.10/bits/xv_ver Thu Dec 22 14:12:58 1994
+--- ./bits/xv_ver Fri Jan 13 17:34:48 1995
+***************
+*** 6,20 ****
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00,
+! 0x00, 0x08, 0x00, 0x80, 0x1f, 0x04, 0x07, 0x00, 0x82, 0x00, 0x00, 0x08,
+! 0x00, 0x80, 0x08, 0x86, 0x08, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
+! 0x04, 0x45, 0x10, 0x00, 0x24, 0x98, 0xe4, 0x89, 0x23, 0x03, 0x1c, 0x24,
+! 0x10, 0x00, 0x24, 0xa6, 0x97, 0x49, 0xe4, 0x02, 0x23, 0x24, 0x10, 0x00,
+! 0x14, 0x9e, 0x50, 0x2a, 0x24, 0x02, 0x20, 0x24, 0x10, 0x00, 0x18, 0x81,
+! 0x20, 0x2a, 0x24, 0x42, 0x20, 0x24, 0x08, 0x00, 0x08, 0xb1, 0x00, 0x29,
+! 0x22, 0x42, 0x98, 0x24, 0x06, 0x00, 0x08, 0x8e, 0xf0, 0xc8, 0x21, 0x82,
+! 0x87, 0xc4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+--- 6,20 ----
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00,
+! 0x00, 0x02, 0x00, 0xe0, 0x07, 0xc1, 0x01, 0x00, 0x41, 0x00, 0x00, 0x02,
+! 0x00, 0x20, 0x82, 0x21, 0x02, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
+! 0x41, 0x11, 0x04, 0x00, 0x12, 0x26, 0x79, 0xe2, 0xc8, 0x00, 0x07, 0x09,
+! 0xc4, 0x01, 0x92, 0xe9, 0x65, 0x12, 0xb9, 0xc0, 0x08, 0x09, 0x24, 0x02,
+! 0x8a, 0x27, 0x94, 0x0a, 0x89, 0x00, 0x08, 0x09, 0x84, 0x03, 0x4c, 0x20,
+! 0x88, 0x0a, 0x89, 0x10, 0x08, 0x09, 0x62, 0x02, 0x44, 0x2c, 0x40, 0x8a,
+! 0x88, 0x10, 0x26, 0x89, 0x11, 0x03, 0x84, 0x23, 0x3c, 0x72, 0x88, 0xe0,
+! 0x21, 0x71, 0xe0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+diff -c -r ../xv-3.10/tiff/tif_fax3.c ./tiff/tif_fax3.c
+*** ../xv-3.10/tiff/tif_fax3.c Thu Dec 22 14:12:41 1994
+--- ./tiff/tif_fax3.c Fri Dec 23 17:39:28 1994
+***************
+*** 370,376 ****
+ * Decode a code and return the associated run length.
+ */
+ static int32
+! decode_run(TIFF* tif, const u_short fsm[][256])
+ {
+ Fax3DecodeState *sp = (Fax3DecodeState *)tif->tif_data;
+ int state = sp->b.bit;
+--- 370,376 ----
+ * Decode a code and return the associated run length.
+ */
+ static int32
+! decode_run(TIFF* tif, /*const*/ u_short fsm[][256])
+ {
+ Fax3DecodeState *sp = (Fax3DecodeState *)tif->tif_data;
+ int state = sp->b.bit;
+
+diff -c -r ../xv-3.10/tiff/tiffcomp.h ./tiff/tiffcomp.h
+*** ../xv-3.10/tiff/tiffcomp.h Thu Dec 22 14:12:42 1994
+--- ./tiff/tiffcomp.h Thu Jan 19 12:47:56 1995
+***************
+*** 67,72 ****
+--- 67,76 ----
+ #endif
+ #endif
+
++ #ifdef isc
++ #define BSDTYPES
++ #endif
++
+ /*
+ * Workarounds for BSD lseek definitions.
+ */
+
+diff -c -r ../xv-3.10/vms/Makefile.mms ./vms/Makefile.mms
+*** ../xv-3.10/vms/Makefile.mms Thu Dec 22 14:12:37 1994
+--- ./vms/Makefile.mms Sun Dec 25 03:21:22 1994
+***************
+*** 11,30 ****
+ # 15-APR-1993 for v3.00 (DEC C changes)
+ # 25-MAY-1993 merged ALPHA.MMS and MAKEFILE.MMS
+ # 27-APR-1994 for v3.01
+! # 6-DEC-1994 for v3.10
+ #
+ # Modeled after the original Unix Makefile for xv
+ # Most of the Unix comments have been left intact to help debug any
+ # problems.
+
+- #********
+- #
+- # REQUIRED USER EDIT POINT!!!!!!!!!!!
+- # You must put in the correct place where the root of this XV
+- # directory is located
+- #
+- #********
+- XVDIR = [XV-3_10]
+
+ # BE SURE TO SET THIS TO YOUR SITE'S DESTINATION DIRECTORY...!!!
+ BINDIR = Sys$Disk:[]
+--- 11,22 ----
+ # 15-APR-1993 for v3.00 (DEC C changes)
+ # 25-MAY-1993 merged ALPHA.MMS and MAKEFILE.MMS
+ # 27-APR-1994 for v3.01
+! # 23-DEC-1994 for v3.10
+ #
+ # Modeled after the original Unix Makefile for xv
+ # Most of the Unix comments have been left intact to help debug any
+ # problems.
+
+
+ # BE SURE TO SET THIS TO YOUR SITE'S DESTINATION DIRECTORY...!!!
+ BINDIR = Sys$Disk:[]
+***************
+*** 57,64 ****
+ # VMS MMS USERS!!!
+ #
+ # if you don't use the JPEG package as supplied with XV, you
+! # will need fill in the complete directory specifications for
+! # BOTH JPEGDIR and XVDIR!!
+ #
+ JPEG = ,HAVE_JPEG
+ JPEGDIR = [.JPEG]
+--- 49,55 ----
+ # VMS MMS USERS!!!
+ #
+ # if you don't use the JPEG package as supplied with XV, you
+! # will need fill in the complete directory specifications for JPEGDIR.
+ #
+ JPEG = ,HAVE_JPEG
+ JPEGDIR = [.JPEG]
+***************
+*** 72,79 ****
+ # Also, comment out the LIBTIFF dependancy at the end of this Makefile
+ #
+ # if you don't use the TIFF package as supplied with XV, you
+! # will need to fill in the complete directory specifications for
+! # BOTH TIFFDIR and XVDIR!!
+ #
+ TIFF = ,HAVE_TIFF
+ TIFFDIR = [.TIFF]
+--- 63,69 ----
+ # Also, comment out the LIBTIFF dependancy at the end of this Makefile
+ #
+ # if you don't use the TIFF package as supplied with XV, you
+! # will need to fill in the complete directory specifications for TIFFDIR.
+ #
+ TIFF = ,HAVE_TIFF
+ TIFFDIR = [.TIFF]
+***************
+*** 135,145 ****
+ @- Define /NoLog Sys DECC$Library_Include
+ .else
+ .ifdef DECC
+! × @- Define /NoLog Sys DECC$Library_Include
+ .else
+ @- Define /NoLog Sys Sys$Library
+ .endif
+ @- Define /NoLog X11 DECW$Include
+ .endif
+
+ all : $(BITS) $(OPTS) lib xv bggen decompress xcmap xvpictoppm help
+--- 125,136 ----
+ @- Define /NoLog Sys DECC$Library_Include
+ .else
+ .ifdef DECC
+! @- Define /NoLog Sys DECC$Library_Include
+ .else
+ @- Define /NoLog Sys Sys$Library
+ .endif
+ @- Define /NoLog X11 DECW$Include
++ @- XVDIR = F$Environment ("Default")
+ .endif
+
+ all : $(BITS) $(OPTS) lib xv bggen decompress xcmap xvpictoppm help
+***************
+*** 181,204 ****
+ $(JPEGLIB) :
+ Set Default $(JPEGDIR)
+ .ifdef ALPHA
+! $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.$(MMS) /Macro = "ALPHA = 1" LIBJPEG.OLB
+ .else
+! $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.$(MMS) LIBJPEG.OLB
+ .endif
+! Set Default $(XVDIR)
+
+ $(TIFFLIB) :
+ Set Default $(TIFFDIR)
+ .ifdef ALPHA
+! $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.$(MMS) /Macro = "ALPHA = 1" LIBTIFF.OLB
+ .else
+ .ifdef DECC
+! $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.$(MMS) /Macro = "ALPHA = 1" LIBTIFF.OLB
+ .else
+! $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.$(MMS) LIBTIFF.OLB
+ .endif
+ .endif
+! Set Default $(XVDIR)
+
+ $(XVLIB) : $(OBJS)
+ If "''F$Search ("$(XVLIB)")'" .eqs. "" Then Library /Create $(XVLIB)
+--- 172,195 ----
+ $(JPEGLIB) :
+ Set Default $(JPEGDIR)
+ .ifdef ALPHA
+! $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS /Macro = "ALPHA = 1" LIBJPEG.OLB
+ .else
+! $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS LIBJPEG.OLB
+ .endif
+! Set Default 'XVDIR'
+
+ $(TIFFLIB) :
+ Set Default $(TIFFDIR)
+ .ifdef ALPHA
+! $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS /Macro = "ALPHA = 1" LIBTIFF.OLB
+ .else
+ .ifdef DECC
+! $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS /Macro = "ALPHA = 1" LIBTIFF.OLB
+ .else
+! $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS LIBTIFF.OLB
+ .endif
+ .endif
+! Set Default 'XVDIR'
+
+ $(XVLIB) : $(OBJS)
+ If "''F$Search ("$(XVLIB)")'" .eqs. "" Then Library /Create $(XVLIB)
+***************
+*** 273,280 ****
+ - Delete /NoConfirm /NoLog *.obj;*,*.exe;*,*.log;*,*.olb;*,*.hlb;*
+ - Purge /NoConfirm /NoLog
+ Set Default [.JPEG]
+! $(MMS) /Description = MAKEFILE.$(MMS) clean
+ - Delete /NoConfirm /NoLog *.olb;*
+ Set Default [-.TIFF]
+! $(MMS) /Description = MAKEFILE.$(MMS) clean
+ Set Default [-]
+--- 264,271 ----
+ - Delete /NoConfirm /NoLog *.obj;*,*.exe;*,*.log;*,*.olb;*,*.hlb;*
+ - Purge /NoConfirm /NoLog
+ Set Default [.JPEG]
+! $(MMS) /Description = MAKEFILE.MMS clean
+ - Delete /NoConfirm /NoLog *.olb;*
+ Set Default [-.TIFF]
+! $(MMS) /Description = MAKEFILE.MMS clean
+ Set Default [-]
+
+diff -c -r ../xv-3.10/vms/README.vms ./vms/README.vms
+*** ../xv-3.10/vms/README.vms Thu Dec 22 14:12:37 1994
+--- ./vms/README.vms Sun Dec 25 03:21:22 1994
+***************
+*** 1,9 ****
+! 6-Dec-1994
+
+! First, read the release notes for the Unix version of XV as well
+! as these. You can ignore the Unix specific comments, but there are
+! references to the config.h file for local configurations and general
+! use of the program that are relevant to VMS users as well.
+
+ Release notes for building XV (v3.10) on a VMS platform. This
+ includes the newer ALPHA/VMS machines. As in the previous release,
+--- 1,10 ----
+! 23-DEC-1994
+
+! First, read the various INSTALL and README files for the Unix
+! version of XV as well as these. You can ignore the Unix specific
+! comments, but there are references to the config.h file for local
+! configurations and general use of the program that are relevant to
+! VMS users as well.
+
+ Release notes for building XV (v3.10) on a VMS platform. This
+ includes the newer ALPHA/VMS machines. As in the previous release,
+***************
+*** 24,42 ****
+
+ SETUP.COM
+ A simple command procedure to setup the final compiled XV
+! package of programs. It can be executed by itself or used with
+! many of the commonly available SETUP packages (i.e., the
+! FERMILAB version). If it is kept in the same directory as the
+! binaries, it will be able to get the necessary symbols setup
+! anywhere the directory structure is located WITHOUT the need to
+! edit the command procedure. Move them all around together and
+! you will be OK.
+
+ MAKEFILE.MMS (in the top level directory)
+! This is a MMS description file for the VMS MMS utility. YOU
+! SHOULD EDIT THE FILE FIRST TO MAKE SURE THE CUSTOMIZING FEATURES
+! ARE APPROPRIATE FOR YOUR SYSTEM. For users without MMS you will
+! need to use MAKE_XV.COM instead.
+
+ Installation Instructions:
+
+--- 25,48 ----
+
+ SETUP.COM
+ A simple command procedure to setup the final compiled XV
+! package of programs. It helps the aux programs of XV be found
+! by DCL foreign symbols. If you don't want to use the names I
+! have chosen for them, you should be able to alter the CONFIG.H
+! file to point to the names you want to use instead. This has
+! not been tested by me, so let me know if you try this. It
+! should work! :) It can be executed by itself or used with many
+! of the commonly available SETUP packages (i.e., the FERMILAB
+! version). If it is kept in the same directory as the binaries,
+! it will be able to get the necessary symbols setup anywhere the
+! directory structure is located WITHOUT the need to edit the
+! command procedure. Move them all around together and you will
+! be OK.
+
+ MAKEFILE.MMS (in the top level directory)
+! This is a description file for the VMS MMS (or the PD MMK)
+! utility. YOU SHOULD BROWSE THE FILE FIRST TO MAKE SURE THE
+! CUSTOMIZING FEATURES ARE APPROPRIATE FOR YOUR SYSTEM. For users
+! without MMS (MMK) you will need to use MAKE_XV.COM instead.
+
+ Installation Instructions:
+
+***************
+*** 100,114 ****
+ to resolve first!!! Note specifically the references to JPEG
+ and TIFF. This is also true for the MAKEFILE.MMS in the JPEG
+ sub-directory and the MAKEFILE.MMS file in the TIFF
+! sub-directory. Also check the top-level directory name at the
+! top of the MMS file. You have to put in your local choice of
+! name. (I was lazy in not trying to autodetect it, sorry.)
+!
+
+! EXCEPT for the destination of the binaries, root of the
+! directory tree, and X11 Window interface, I *think* it should
+! work for everyone without any modifications. (famous last
+! words...)
+
+ When you are satisfied that everything is correct for your
+ site, just type
+--- 106,116 ----
+ to resolve first!!! Note specifically the references to JPEG
+ and TIFF. This is also true for the MAKEFILE.MMS in the JPEG
+ sub-directory and the MAKEFILE.MMS file in the TIFF
+! sub-directory.
+
+! EXCEPT for the destination of the binaries, and X11 Window
+! interface, I *think* it should work for everyone without any
+! modifications. (famous last words...)
+
+ When you are satisfied that everything is correct for your
+ site, just type
+
+diff -c -r ../xv-3.10/vms/tiff.patches ./vms/tiff.patches
+*** ../xv-3.10/vms/tiff.patches Thu Dec 22 14:12:38 1994
+--- ./vms/tiff.patches Thu Jan 19 12:47:14 1995
+***************
+*** 5,10 ****
+--- 5,11 ----
+ In tiff/Makefile.hpux, you need to add -D_HPUX_SOURCE to CFLAGS.
+ Otherwise libtiff won't build under gcc or strict-ANSI cc.
+
++ In tiff/tiffcomp.h, add '#ifdef isc ... #define BSDTYPES ... #endif'
+
+ Index: tiff/Makefile.mms
+ *** /dev/null Wed Dec 14 08:22:27 1994
+
+
+*** /dev/null Mon Jan 23 20:08:17 1995
+--- BUGS Thu Jan 19 13:10:07 1995
+***************
+*** 0 ****
+--- 1,21 ----
++ DOCS:
++ File docs/xvdoc.ps has an error in the banner for page 2. The page title is
++ "Section 2: The Image Window" when it should be "Section 1: Overview".
++
++ Add mention of '-pkludge' and 'popupKludge'
++
++ Hall of Fame: Lester Ingber should be 'ingber@alumni.caltech.edu'
++
++
++ From: James Ralston Crawford (qralston+@pitt.edu)
++ When deleting files in 'xv controls' window, it should also delete
++ thumbnail file, if any
++
++
++ From: Mitchell Blank Jr <blankm@cae.wisc.edu>
++ (try an use schnauzer in /usr/feh/foo, where feh is rwx--x--x. Need to
++ set a var each time chdir is successfully called (make xv_chdir).
++ Then in xv_getwd, if getcwd() fails, try stat()'ing the var.
++ If it exists, assume we're there, and return the var. Otherwise, fall back
++ to other directories...
++
+
+*** /dev/null Mon Jan 23 20:08:17 1995
+--- docs/vdcomp.man Fri Jan 13 15:18:47 1995
+***************
+*** 0 ****
+--- 1,82 ----
++ .\"
++ .\" $Id: vdcomp.man,v 1.2 1995/01/12 23:35:28 qralston Exp $
++ .\"
++ .\" $Log: vdcomp.man,v $
++ .\" Revision 1.2 1995/01/12 23:35:28 qralston
++ .\" Created from the information in the comments in vdcomp.c.
++ .\" James Ralston Crawford <qralston+@pitt.edu>
++ .\"
++ .TH vdcomp 1
++ .SH Name
++ \fIvdcomp\fP - decompress a compressed PDS image
++ .SH Synopsis
++ \fIvdcomp\fP [ infile ] [ outfile ] [ format-code ]
++ .SH Description
++ The \fIvdcomp\fP program reads a variable length compressed PDS image
++ and outputs a fixed length uncompressed image file in PDS format with
++ labels, image histogram, engineering table, line header table and an
++ image with PDS, FITS, VICAR or no labels.
++ .PP
++ If used on a non-byte-swapped machine the image histogram is
++ un-swapped.
++ .SH Options
++ \fIVdcomp\fP will prompt for any options that are not supplied on the
++ command-line.
++ .PP
++ \fIinfile\fP
++ .br
++ .RS
++ The name of compressed image file.
++ .RE
++ .PP
++ \fIoutfile\fP
++ .br
++ .RS
++ The name of uncompressed image file.
++ .RE
++ .PP
++ \fIformat-code\fP
++ .br
++ .RS
++ Select from the following list:
++ .br
++ .RS
++ \fI1\fP - SFDU/PDS format [default]
++ .br
++ \fI2\fP - FITS format
++ .br
++ \fI3\fP - VICAR format
++ .br
++ \fI4\fP - unlabelled binary array
++ .RE
++ .RE
++ .SH Limitations
++ This program has been tested on a VAX 780 (VMS 4.6), SUN Workstation
++ (UNIX 4.2, release 3.4), an IBM PC (MICROSOFT 5.1 compiler) and
++ Macintosh IIx using Lightspeed C version 3.0. When converting to
++ other systems, check for portability conflicts.
++ .SH Credits
++ This program uses Kris Becker's subroutine DECOMP.C (which is included
++ in this program in a shortened version).
++ .SH History
++ bradley@cis.upenn.edu 06-23-94 ansi-fied program
++ .PP
++ datri@convex.com, 11-15-91 added recognition of - as stdout for output
++ filename; disabled various messages; directed messages to stderr;
++ added exit status
++ .PP
++ DEC89 Modified program to handle both Voyager and Viking images.
++ .PP
++ OCT89 Converted Voyager decompression program to handle Viking
++ compressed images. Changed obuf to 'unsigned' to simplify computation
++ of checksum.
++ .PP
++ AUG89 Added code to get command line arguments for filenames and
++ output format; routines to free memory used by the Huffman tree);
++ fixed the SFDU label output length; and modified the I/O routines so
++ that the open for Host type 2 uses binary I/O.
++ .PP
++ JUN89 Fixed READVAR, to get length on 16-bit unswapped hosts.
++ .PP
++ JUL88 C driver to decompress standard Voyager Compressed images by
++ Mike Martin 1989/12/02.
+
+*** /dev/null Mon Jan 23 20:23:48 1995
+--- docs/xv.ann Tue Jan 03 13:58:15 1995
+***************
+*** 0 ****
+--- 1,38 ----
++ They said it couldn't be done. They said it never *would* be done.
++ They smiled knowingly to themselves as each predicted release date
++ inevitably passed by, unmarked by the emergence of a new version...
++
++ Well, who asked them! And who do they think they are, anyhow!?!
++
++ Announcing the Exciting New Release of XV, Version 3.10!
++
++ Finally, all the stuff you've been waiting for: image cut & paste, pixel
++ editing, text annotation (of a sort), nifty new algorithms, new image formats
++ (Targa, XPM, FITS, XWD, IFF), improved schnauzing capabilities, a spiffy
++ new 'pad' command, and whatnot. Plenty of whatnot.
++
++ Of course, we're particularly proud of our Exclusive 3-D Fish Technology.
++
++ At the moment, you can get this decidedly 'fine' piece of software via
++ anonymous ftp on the following sites:
++
++ Hostname Directory
++ -------- ---------
++ ftp.cis.upenn.edu: pub/xv
++ ftp.upenn.edu: data/bradley
++ ftp.duke.edu: pub/archive/xv
++ gatekeeper.dec.com: pub/graphics/xv
++
++ The file is called 'xv-3.10.tar.gz' (or 'xv-3.10.tar.Z' if you don't have
++ the 'gunzip' program).
++
++ BTW, if any of you fine folks can get these files put up on one of the major
++ ftp sites (wustl, gatekeeper, etc.) please do so, and let me know!
++
++ Enjoy!
++
++ John Bradley
++
++ -------------------------
++ Note: These tar files (xv-3.10.tar.Z and xv-3.10.tar.gz) have been replaced
++ as of 12/22/94, as the initial ones wouldn't build correctly on VMS.