v10i089: xv - display and manipulate images, Patch3, Part01/01
John Bradley
bradley at grip.cis.upenn.edu
Sat Dec 1 19:21:21 AEST 1990
Submitted-by: bradley at grip.cis.upenn.edu (John Bradley)
Posting-number: Volume 10, Issue 89
Archive-name: xv/patch3
Patch-To: xv: Volume 10, Issue 79-88
The following takes XV from patchlevel 2 to patchlevel 3. Apply with
'patch -p <patch3'.
Please reread the README file after applying this patch.
Changes since patchlevel 2:
---------------------------
Changed 'CCOPTIONS' to 'DEFINES' in Imakefile
Fixes for use with virtual root window managers (ie, tvtwm)
(only cares about virtual root when using '-root' option,
negative geometry's correctly handled.)
(Andreas Stolcke (stolcke at ICSI.Berkeley.EDU))
Modifications for Sequent machines (no 'mem*() routines)
(Daniel Pommert (daniel at ux1.cso.uiuc.edu))
Modifications to avoid bug in certain optimizers, most notably the default
optimization (-O) in Sun's C compiler. (Incorrectly handles lines of the
sort "*p = array[*p]")
Modification to get around 'when I shift my arrow keys (to adjust the
cropping rectangle), my keyboard generates numbers instead' problem
(Mark Horstman (mh2620 at sarek.sbc.com)
Modification to allow 'xsetroot' and 'xloadimage' to cleanup any
xv-displayed images in the root window, and vice-versa.
(suggestion from Richard Bingle (bingle at cs.purdue.edu))
--------------------------
John Bradley - GRASP Lab - University of Pennsylvania
--------------------(cut here)---------------------
*** ../xv.dist2/Imakefile Mon Nov 26 18:47:35 1990
--- ./Imakefile Thu Nov 29 14:27:51 1990
***************
*** 26,31 ****
--- 26,35 ----
*/
/* BROKECOLS = -DBROKEFREECOLS */
+ /* If your machine doesn't have the 'strchr', 'memset' and 'memcpy'
+ * functions, but does have 'bcopy', uncomment the following line:
+ */
+ /* USEMEM= -DNEED_MEMROUTINES */
/* IF YOUR MACHINE DOESN'T HAVE 'vprintf()' OR 'vsprintf()'
*
***************
*** 77,83 ****
SYS_LIBRARIES= $(XLIB) -lm
#endif
! CCOPTIONS= $(UNIX) $(NEED_DIRENT) $(BROKECOLS) $(VPRINTF) $(TIMERS) $(ATT)
SYS_LIBRARIES= -lX11 -lm
--- 81,88 ----
SYS_LIBRARIES= $(XLIB) -lm
#endif
! DEFINES= $(DEFINES) $(UNIX) $(NEED_DIRENT) $(BROKECOLS) \
! $(VPRINTF) $(TIMERS) $(ATT) $(USEMEM)
SYS_LIBRARIES= -lX11 -lm
*** ../xv.dist2/Makefile Mon Nov 26 19:34:33 1990
--- ./Makefile Thu Nov 29 13:07:07 1990
***************
*** 31,36 ****
--- 31,40 ----
#
#BROKECOLS = -DBROKEFREECOLS
+ # If your machine doesn't have the 'strchr', 'memset' and 'memcpy' functions,
+ # but does have 'bcopy', uncomment the following line:
+ #
+ #USEMEM = -DNEED_MEMROUTINES
# IF YOUR MACHINE DOESN'T HAVE 'vprintf()' OR 'vsprintf()'
#
***************
*** 87,94 ****
#
! CFLAGS = -O2 $(NEED_DIRENT) $(BROKECOLS) $(VPRINTF) $(TIMERS) $(ATT) $(SCO) \
! $(UNIX)
LIBS = -lX11 -lm
--- 91,98 ----
#
! CFLAGS = -O $(NEED_DIRENT) $(BROKECOLS) $(VPRINTF) $(TIMERS) $(ATT) $(SCO) \
! $(UNIX) $(USEMEM)
LIBS = -lX11 -lm
*** ../xv.dist2/Makefile.std Mon Nov 26 18:47:54 1990
--- ./Makefile.std Thu Nov 29 13:06:53 1990
***************
*** 31,36 ****
--- 31,40 ----
#
#BROKECOLS = -DBROKEFREECOLS
+ # If your machine doesn't have the 'strchr', 'memset' and 'memcpy' functions,
+ # but does have 'bcopy', uncomment the following line:
+ #
+ #USEMEM = -DNEED_MEMROUTINES
# IF YOUR MACHINE DOESN'T HAVE 'vprintf()' OR 'vsprintf()'
#
***************
*** 88,94 ****
CFLAGS = -O $(NEED_DIRENT) $(BROKECOLS) $(VPRINTF) $(TIMERS) $(ATT) $(SCO) \
! $(UNIX)
LIBS = -lX11 -lm
--- 92,98 ----
CFLAGS = -O $(NEED_DIRENT) $(BROKECOLS) $(VPRINTF) $(TIMERS) $(ATT) $(SCO) \
! $(UNIX) $(USEMEM)
LIBS = -lX11 -lm
*** ../xv.dist2/PATCHLEVEL Mon Nov 26 18:55:42 1990
--- ./PATCHLEVEL Thu Nov 29 13:48:36 1990
***************
*** 1,4 ****
! Current patchlevel: 2
Rev: 10/9/90 (patchlevel 0 - initial release)
--- 1,4 ----
! Current patchlevel: 3
Rev: 10/9/90 (patchlevel 0 - initial release)
***************
*** 33,39 ****
fixed problem with using '-max' and '-fixed' at same time
(Greg Spencer greg at longs.lance.colostate.edu)
-
modification to work with Virtual Root Windows (ala swm and tvtwm)
(Bill Kucharski kucharsk at solbourne.com)
--- 33,38 ----
***************
*** 56,58 ****
--- 55,84 ----
AutoCrop command added: (Crops out solid borders.)
Potential support for 32-bit displays. (Hasn't been tested. Don't have one.)
+
+
+ Rev: 11/29/90 (patchlevel 3)
+ -----------------------------
+
+ Changed 'CCOPTIONS' to 'DEFINES' in Imakefile
+
+ Fixes for use with virtual root window managers (ie, tvtwm)
+ (only cares about virtual root when using '-root' option,
+ negative geometry's correctly handled.)
+ (Andreas Stolcke (stolcke at ICSI.Berkeley.EDU))
+
+ Modifications for Sequent machines (no 'mem*() routines)
+ (Daniel Pommert (daniel at ux1.cso.uiuc.edu))
+
+ Modifications to avoid bug in certain optimizers, most notably the default
+ optimization (-O) in Sun's C compiler. (Incorrectly handles lines of the
+ sort "*p = array[*p]")
+
+ Modification to get around 'when I shift my arrow keys (to adjust the
+ cropping rectangle), my keyboard generates numbers instead' problem
+ (Mark Horstman (mh2620 at sarek.sbc.com)
+
+ Modification to allow 'xsetroot' and 'xloadimage' to cleanup any
+ xv-displayed images in the root window, and vice-versa.
+ (Richard Bingle (bingle at cs.purdue.edu))
+
*** ../xv.dist2/README Mon Nov 26 18:47:45 1990
--- ./README Thu Nov 29 13:46:00 1990
***************
*** 13,18 ****
--- 13,24 ----
Otherwise, check the Imakefile, and make the program however you normally
would. Be sure to 'make depend' before building the program.
+ NOTE: If you like the program and decide to use it, *please* send me a short
+ email message to that effect. Be sure to mention the full name of your
+ organization. When our sponsors ask us 'what have you been doing', it would
+ be most handy to be able to come up with a nice long list of organizations
+ that are using code developed in the GRASP Lab. Brownie points, as it were.
+
Caveats
-------
*** ../xv.dist2/vprintf.c Mon Nov 26 18:48:11 1990
--- ./vprintf.c Thu Nov 29 12:57:53 1990
***************
*** 1,7 ****
- #ifdef NEED_VPRINTF
-
#include <stdio.h>
/* Portable vsprintf by Robert A. Larson <blarson at skat.usc.edu> */
/* Portable vfprintf by Robert A. Larson <blarson at skat.usc.edu> */
--- 1,6 ----
#include <stdio.h>
+ #ifdef NEED_VPRINTF
/* Portable vsprintf by Robert A. Larson <blarson at skat.usc.edu> */
/* Portable vfprintf by Robert A. Larson <blarson at skat.usc.edu> */
***************
*** 304,306 ****
--- 303,346 ----
}
#endif
+
+
+
+
+
+
+
+ #ifdef NEED_MEMROUTINES
+
+ #include <sys/types.h>
+
+ char *strchr(s1,c)
+ char *s1;
+ int c;
+ {
+ char *p;
+
+ p=s1;
+ while(*p)
+ if(*(p++) == c)
+ return p-1;
+
+ return NULL;
+ }
+
+
+ void *memset(s,c,n)
+ char *s;
+ int c;
+ size_t n;
+ {
+ char *p;
+
+ for (p=s; n--;)
+ *(p++) = c;
+
+ return;
+ }
+
+ #endif /* NEED_MEMROUTINES */
+
*** ../xv.dist2/xv.c Mon Nov 26 19:35:12 1990
--- ./xv.c Thu Nov 29 13:44:53 1990
***************
*** 445,473 ****
dispDEEP = DisplayPlanes(theDisp,theScreen);
! /* go look for a virtual root */
! __SWM_VROOT = XInternAtom(theDisp, "__SWM_VROOT", False);
! XQueryTree(theDisp, rootW, &rootReturn, &parentReturn, &children,
! &numChildren);
! for (i = 0; i < numChildren; i++) {
! Atom actual_type;
! int actual_format;
! unsigned long nitems, bytesafter;
! Window *newRoot = NULL;
! XWindowAttributes xwa;
! if (XGetWindowProperty (theDisp, children[i], __SWM_VROOT, 0, 1,
False, XA_WINDOW, &actual_type, &actual_format, &nitems,
&bytesafter, (unsigned char **) &newRoot) == Success && newRoot) {
! rootW = *newRoot;
! XGetWindowAttributes(theDisp, rootW, &xwa);
! dispWIDE = xwa.width; dispHIGH = xwa.height;
! dispDEEP = xwa.depth;
! break;
}
- }
/* have enough info to do a '-clear' now */
- if (clrroot || useroot) {
KillOldRootInfo();
XSetWindowBackgroundPixmap(theDisp, rootW, None);
XClearWindow(theDisp, rootW);
--- 445,473 ----
dispDEEP = DisplayPlanes(theDisp,theScreen);
! if (clrroot || useroot) {
! /* go look for a virtual root */
! __SWM_VROOT = XInternAtom(theDisp, "__SWM_VROOT", False);
! XQueryTree(theDisp, rootW, &rootReturn, &parentReturn, &children,
! &numChildren);
! for (i = 0; i < numChildren; i++) {
! Atom actual_type;
! int actual_format;
! unsigned long nitems, bytesafter;
! Window *newRoot = NULL;
! XWindowAttributes xwa;
! if (XGetWindowProperty (theDisp, children[i], __SWM_VROOT, 0, 1,
False, XA_WINDOW, &actual_type, &actual_format, &nitems,
&bytesafter, (unsigned char **) &newRoot) == Success && newRoot) {
! rootW = *newRoot;
! XGetWindowAttributes(theDisp, rootW, &xwa);
! dispWIDE = xwa.width; dispHIGH = xwa.height;
! dispDEEP = xwa.depth;
! break;
! }
}
/* have enough info to do a '-clear' now */
KillOldRootInfo();
XSetWindowBackgroundPixmap(theDisp, rootW, None);
XClearWindow(theDisp, rootW);
***************
*** 1306,1315 ****
stlen = XLookupString(key_event,buf,128,&ks,&status);
/* do non-character processing (arrow-keys, that is) */
! if (ks==XK_Left) CropKey(-1, 0, key_event->state & ShiftMask);
! else if (ks==XK_Right) CropKey( 1, 0, key_event->state & ShiftMask);
! else if (ks==XK_Up) CropKey( 0,-1, key_event->state & ShiftMask);
! else if (ks==XK_Down) CropKey( 0, 1, key_event->state & ShiftMask);
if (!stlen) break;
--- 1306,1319 ----
stlen = XLookupString(key_event,buf,128,&ks,&status);
/* do non-character processing (arrow-keys, that is) */
! if (ks==XK_Left || ks==XK_KP_4)
! { stlen = 0; CropKey(-1, 0, key_event->state & ShiftMask); }
! else if (ks==XK_Right || ks==XK_KP_6)
! { stlen = 0; CropKey( 1, 0, key_event->state & ShiftMask); }
! else if (ks==XK_Up || ks==XK_KP_8)
! { stlen = 0; CropKey( 0,-1, key_event->state & ShiftMask); }
! else if (ks==XK_Down || ks==XK_KP_2)
! { stlen = 0; CropKey( 0, 1, key_event->state & ShiftMask); }
if (!stlen) break;
***************
*** 2147,2154 ****
riPix = XCreatePixmap(theDisp, rootW, 1, 1, 1);
if (!riPix) return; /* unable to save. thankfully, unlikely to happen */
! prop = XInternAtom(theDisp, "_XV_PIXMAP", False);
! if (!prop) FatalError("couldn't create _XV_PIXMAP atom");
XChangeProperty(theDisp, rootW, prop, XA_PIXMAP, 32, PropModeReplace,
(unsigned char *) &riPix, 1);
--- 2151,2158 ----
riPix = XCreatePixmap(theDisp, rootW, 1, 1, 1);
if (!riPix) return; /* unable to save. thankfully, unlikely to happen */
! prop = XInternAtom(theDisp, "_XSETROOT_ID", False);
! if (!prop) FatalError("couldn't create _XSETROOT_ID atom");
XChangeProperty(theDisp, rootW, prop, XA_PIXMAP, 32, PropModeReplace,
(unsigned char *) &riPix, 1);
***************
*** 2160,2166 ****
/***********************************/
static void KillOldRootInfo()
{
! /* get the pixmap ID from the _XV_PIXMAP property, and kill it */
Atom prop, type;
int format;
--- 2164,2170 ----
/***********************************/
static void KillOldRootInfo()
{
! /* get the pixmap ID from the _XSETROOT_ID property, and kill it */
Atom prop, type;
int format;
***************
*** 2167,2173 ****
unsigned long length, after;
unsigned char *data;
! prop = XInternAtom(theDisp, "_XV_PIXMAP", True);
if (!prop) return; /* no old pixmap to kill */
if (XGetWindowProperty(theDisp, rootW, prop, 0L, 1L, True, AnyPropertyType,
--- 2171,2177 ----
unsigned long length, after;
unsigned char *data;
! prop = XInternAtom(theDisp, "_XSETROOT_ID", True);
if (!prop) return; /* no old pixmap to kill */
if (XGetWindowProperty(theDisp, rootW, prop, 0L, 1L, True, AnyPropertyType,
*** ../xv.dist2/xv.h Mon Nov 26 19:16:26 1990
--- ./xv.h Thu Nov 29 13:45:35 1990
***************
*** 16,22 ****
* This software is provided "as is" without any express or implied warranty.
*/
! #define REVDATE "Rev: 11/26/90 (Patchlevel 2)"
#ifdef SVR4 /* SysV release 4 uses dirent */
#ifndef sgi /* but Silicon Graphics doesn't */
--- 16,22 ----
* This software is provided "as is" without any express or implied warranty.
*/
! #define REVDATE "Rev: 11/29/90 (Patchlevel 3)"
#ifdef SVR4 /* SysV release 4 uses dirent */
#ifndef sgi /* but Silicon Graphics doesn't */
***************
*** 45,50 ****
--- 45,55 ----
#else
#include <malloc.h>
#endif
+ #endif
+
+
+ #if defined(NEED_MEMROUTINES)
+ #define memcpy(d,s,l) bcopy(s,d,l)
#endif
*** ../xv.dist2/xvmisc.c Mon Nov 26 19:12:52 1990
--- ./xvmisc.c Thu Nov 29 13:53:22 1990
***************
*** 76,83 ****
hints.flags |= USSize;
! if (i&XValue && i&XNegative) x = dispWIDE - w - abs(x);
! if (i&YValue && i&YNegative) y = dispHIGH - h - abs(y);
hints.x = x; hints.y = y;
hints.width = w; hints.height = h;
--- 76,85 ----
hints.flags |= USSize;
! if (i&XValue && i&XNegative)
! x = DisplayWidth(theDisp,theScreen) - w - abs(x);
! if (i&YValue && i&YNegative)
! y = DisplayHeight(theDisp,theScreen) - h - abs(y);
hints.x = x; hints.y = y;
hints.width = w; hints.height = h;
***************
*** 297,303 ****
for (i=0; i<numcols; i++) trans[ c1[i].oldindex ] = i;
/* modify 'pic' to reflect the new colormap */
! for (i=pWIDE*pHIGH, p=pic; i; i--, p++) *p = trans[*p];
/* and copy the new colormap into *the* colormap */
for (i=0; i<numcols; i++) {
--- 299,305 ----
for (i=0; i<numcols; i++) trans[ c1[i].oldindex ] = i;
/* modify 'pic' to reflect the new colormap */
! for (i=pWIDE*pHIGH, p=pic; i; i--, p++) { j = trans[*p]; *p = j; }
/* and copy the new colormap into *the* colormap */
for (i=0; i<numcols; i++) {
dan
----------------------------------------------------
O'Reilly && Associates argv at sun.com / argv at ora.com
Opinions expressed reflect those of the author only.
--
dan
----------------------------------------------------
O'Reilly && Associates argv at sun.com / argv at ora.com
Opinions expressed reflect those of the author only.
More information about the Comp.sources.x
mailing list