home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / x / volume10 / xv / patch3 < prev    next >
Internet Message Format  |  1990-12-09  |  15KB

  1. Path: uunet!zaphod.mps.ohio-state.edu!julius.cs.uiuc.edu!apple!sun-barr!newstop!exodus!appserv!grip.cis.upenn.edu
  2. From: bradley@grip.cis.upenn.edu (John Bradley)
  3. Newsgroups: comp.sources.x
  4. Subject: v10i089: xv - display and manipulate images, Patch3, Part01/01
  5. Message-ID: <332@appserv.Eng.Sun.COM>
  6. Date: 1 Dec 90 08:21:21 GMT
  7. References: <csx-10i089:xv@uunet.UU.NET>
  8. Sender: news@exodus.Eng.Sun.COM
  9. Lines: 511
  10. Approved: argv@sun.com
  11.  
  12. Submitted-by: bradley@grip.cis.upenn.edu (John Bradley)
  13. Posting-number: Volume 10, Issue 89
  14. Archive-name: xv/patch3
  15. Patch-To: xv: Volume 10, Issue 79-88
  16.  
  17. The following takes XV from patchlevel 2 to patchlevel 3.  Apply with 
  18. 'patch -p <patch3'.  
  19.  
  20. Please reread the README file after applying this patch.
  21.  
  22. Changes since patchlevel 2:
  23. ---------------------------
  24. Changed 'CCOPTIONS' to 'DEFINES' in Imakefile
  25.  
  26. Fixes for use with virtual root window managers (ie, tvtwm)
  27.     (only cares about virtual root when using '-root' option,
  28.      negative geometry's correctly handled.)
  29.             (Andreas Stolcke   (stolcke@ICSI.Berkeley.EDU))
  30.  
  31. Modifications for Sequent machines (no 'mem*() routines)
  32.             (Daniel Pommert    (daniel@ux1.cso.uiuc.edu))
  33.  
  34. Modifications to avoid bug in certain optimizers, most notably the default
  35. optimization (-O) in Sun's C compiler.  (Incorrectly handles lines of the
  36. sort "*p = array[*p]")
  37.  
  38. Modification to get around 'when I shift my arrow keys (to adjust the
  39. cropping rectangle), my keyboard generates numbers instead' problem
  40.             (Mark Horstman     (mh2620@sarek.sbc.com)
  41.  
  42. Modification to allow 'xsetroot' and 'xloadimage' to cleanup any
  43. xv-displayed images in the root window, and vice-versa.
  44.         (suggestion from Richard Bingle    (bingle@cs.purdue.edu))
  45. --------------------------
  46.  
  47. John Bradley  -  GRASP Lab  -  University of Pennsylvania
  48.  
  49. --------------------(cut here)---------------------
  50. *** ../xv.dist2/Imakefile    Mon Nov 26 18:47:35 1990
  51. --- ./Imakefile    Thu Nov 29 14:27:51 1990
  52. ***************
  53. *** 26,31 ****
  54. --- 26,35 ----
  55.    */
  56.   /* BROKECOLS = -DBROKEFREECOLS */
  57.   
  58. + /* If your machine doesn't have the 'strchr', 'memset' and 'memcpy'
  59. +  * functions, but does have 'bcopy', uncomment the following line:
  60. +  */
  61. + /* USEMEM= -DNEED_MEMROUTINES */
  62.   
  63.   /* IF YOUR MACHINE DOESN'T HAVE 'vprintf()' OR 'vsprintf()'
  64.    *
  65. ***************
  66. *** 77,83 ****
  67.   SYS_LIBRARIES=        $(XLIB) -lm
  68.   #endif
  69.   
  70. ! CCOPTIONS= $(UNIX) $(NEED_DIRENT) $(BROKECOLS) $(VPRINTF) $(TIMERS) $(ATT)
  71.   
  72.   SYS_LIBRARIES=    -lX11 -lm
  73.   
  74. --- 81,88 ----
  75.   SYS_LIBRARIES=        $(XLIB) -lm
  76.   #endif
  77.   
  78. ! DEFINES= $(DEFINES) $(UNIX) $(NEED_DIRENT) $(BROKECOLS) \
  79. !      $(VPRINTF) $(TIMERS) $(ATT) $(USEMEM)
  80.   
  81.   SYS_LIBRARIES=    -lX11 -lm
  82.   
  83.  
  84. *** ../xv.dist2/Makefile    Mon Nov 26 19:34:33 1990
  85. --- ./Makefile    Thu Nov 29 13:07:07 1990
  86. ***************
  87. *** 31,36 ****
  88. --- 31,40 ----
  89.   #
  90.   #BROKECOLS = -DBROKEFREECOLS
  91.   
  92. + # If your machine doesn't have the 'strchr', 'memset' and 'memcpy' functions,
  93. + # but does have 'bcopy', uncomment the following line:
  94. + #
  95. + #USEMEM = -DNEED_MEMROUTINES
  96.   
  97.   # IF YOUR MACHINE DOESN'T HAVE 'vprintf()' OR 'vsprintf()'
  98.   #
  99. ***************
  100. *** 87,94 ****
  101.   #
  102.   
  103.   
  104. ! CFLAGS = -O2 $(NEED_DIRENT) $(BROKECOLS) $(VPRINTF) $(TIMERS) $(ATT) $(SCO) \
  105. !     $(UNIX)
  106.   
  107.   LIBS = -lX11 -lm
  108.   
  109. --- 91,98 ----
  110.   #
  111.   
  112.   
  113. ! CFLAGS = -O $(NEED_DIRENT) $(BROKECOLS) $(VPRINTF) $(TIMERS) $(ATT) $(SCO) \
  114. !     $(UNIX) $(USEMEM)
  115.   
  116.   LIBS = -lX11 -lm
  117.   
  118.  
  119.  
  120. *** ../xv.dist2/Makefile.std    Mon Nov 26 18:47:54 1990
  121. --- ./Makefile.std    Thu Nov 29 13:06:53 1990
  122. ***************
  123. *** 31,36 ****
  124. --- 31,40 ----
  125.   #
  126.   #BROKECOLS = -DBROKEFREECOLS
  127.   
  128. + # If your machine doesn't have the 'strchr', 'memset' and 'memcpy' functions,
  129. + # but does have 'bcopy', uncomment the following line:
  130. + #
  131. + #USEMEM = -DNEED_MEMROUTINES
  132.   
  133.   # IF YOUR MACHINE DOESN'T HAVE 'vprintf()' OR 'vsprintf()'
  134.   #
  135. ***************
  136. *** 88,94 ****
  137.   
  138.   
  139.   CFLAGS = -O $(NEED_DIRENT) $(BROKECOLS) $(VPRINTF) $(TIMERS) $(ATT) $(SCO) \
  140. !     $(UNIX)
  141.   
  142.   LIBS = -lX11 -lm
  143.   
  144. --- 92,98 ----
  145.   
  146.   
  147.   CFLAGS = -O $(NEED_DIRENT) $(BROKECOLS) $(VPRINTF) $(TIMERS) $(ATT) $(SCO) \
  148. !     $(UNIX) $(USEMEM)
  149.   
  150.   LIBS = -lX11 -lm
  151.   
  152.  
  153. *** ../xv.dist2/PATCHLEVEL    Mon Nov 26 18:55:42 1990
  154. --- ./PATCHLEVEL    Thu Nov 29 13:48:36 1990
  155. ***************
  156. *** 1,4 ****
  157. ! Current patchlevel:  2
  158.   
  159.   Rev: 10/9/90    (patchlevel 0  -  initial release)
  160.   
  161. --- 1,4 ----
  162. ! Current patchlevel:  3
  163.   
  164.   Rev: 10/9/90    (patchlevel 0  -  initial release)
  165.   
  166. ***************
  167. *** 33,39 ****
  168.   
  169.   fixed problem with using '-max' and '-fixed' at same time
  170.               (Greg Spencer   greg@longs.lance.colostate.edu)
  171.   modification to work with Virtual Root Windows (ala swm and tvtwm)
  172.               (Bill Kucharski  kucharsk@solbourne.com)
  173.   
  174. --- 33,38 ----
  175. ***************
  176. *** 56,58 ****
  177. --- 55,84 ----
  178.   AutoCrop command added:  (Crops out solid borders.)
  179.   
  180.   Potential support for 32-bit displays.  (Hasn't been tested.  Don't have one.)
  181. + Rev: 11/29/90  (patchlevel 3)
  182. + -----------------------------
  183. + Changed 'CCOPTIONS' to 'DEFINES' in Imakefile
  184. + Fixes for use with virtual root window managers (ie, tvtwm)
  185. +     (only cares about virtual root when using '-root' option,
  186. +      negative geometry's correctly handled.)
  187. +             (Andreas Stolcke   (stolcke@ICSI.Berkeley.EDU))
  188. + Modifications for Sequent machines (no 'mem*() routines)
  189. +             (Daniel Pommert    (daniel@ux1.cso.uiuc.edu))
  190. + Modifications to avoid bug in certain optimizers, most notably the default
  191. + optimization (-O) in Sun's C compiler.  (Incorrectly handles lines of the
  192. + sort "*p = array[*p]")
  193. + Modification to get around 'when I shift my arrow keys (to adjust the
  194. + cropping rectangle), my keyboard generates numbers instead' problem
  195. +             (Mark Horstman     (mh2620@sarek.sbc.com)
  196. + Modification to allow 'xsetroot' and 'xloadimage' to cleanup any
  197. + xv-displayed images in the root window, and vice-versa.
  198. +             (Richard Bingle    (bingle@cs.purdue.edu))
  199.  
  200.  
  201.  
  202. *** ../xv.dist2/README    Mon Nov 26 18:47:45 1990
  203. --- ./README    Thu Nov 29 13:46:00 1990
  204. ***************
  205. *** 13,18 ****
  206. --- 13,24 ----
  207.   Otherwise, check the Imakefile, and make the program however you normally 
  208.   would.  Be sure to 'make depend' before building the program.
  209.   
  210. + NOTE:  If you like the program and decide to use it, *please* send me a short
  211. + email message to that effect.  Be sure to mention the full name of your
  212. + organization.  When our sponsors ask us 'what have you been doing', it would
  213. + be most handy to be able to come up with a nice long list of organizations
  214. + that are using code developed in the GRASP Lab.  Brownie points, as it were.
  215.   Caveats
  216.   -------
  217.   
  218.  
  219.  
  220. *** ../xv.dist2/vprintf.c    Mon Nov 26 18:48:11 1990
  221. --- ./vprintf.c    Thu Nov 29 12:57:53 1990
  222. ***************
  223. *** 1,7 ****
  224. - #ifdef NEED_VPRINTF
  225.   #include <stdio.h>
  226.   
  227.   /* Portable vsprintf  by Robert A. Larson <blarson@skat.usc.edu> */
  228.   /* Portable vfprintf  by Robert A. Larson <blarson@skat.usc.edu> */
  229.   
  230. --- 1,6 ----
  231.   #include <stdio.h>
  232.   
  233. + #ifdef NEED_VPRINTF
  234.   /* Portable vsprintf  by Robert A. Larson <blarson@skat.usc.edu> */
  235.   /* Portable vfprintf  by Robert A. Larson <blarson@skat.usc.edu> */
  236.   
  237. ***************
  238. *** 304,306 ****
  239. --- 303,346 ----
  240.   }
  241.   
  242.   #endif
  243. + #ifdef NEED_MEMROUTINES
  244. + #include <sys/types.h>
  245. + char *strchr(s1,c)
  246. + char *s1;
  247. + int c;
  248. + {
  249. +     char *p;
  250. +     p=s1;
  251. +     while(*p)
  252. +        if(*(p++) == c)
  253. +            return p-1;
  254. +     return NULL;
  255. + }
  256. + void *memset(s,c,n)
  257. + char *s;
  258. + int c;
  259. + size_t n;
  260. + {
  261. +     char *p;
  262. +     for (p=s; n--;)
  263. +        *(p++) = c;
  264. +     return;
  265. + }
  266. + #endif  /* NEED_MEMROUTINES */
  267.  
  268.  
  269.  
  270. *** ../xv.dist2/xv.c    Mon Nov 26 19:35:12 1990
  271. --- ./xv.c    Thu Nov 29 13:44:53 1990
  272. ***************
  273. *** 445,473 ****
  274.     dispDEEP  = DisplayPlanes(theDisp,theScreen);
  275.   
  276.   
  277. !   /* go look for a virtual root */
  278. !   __SWM_VROOT = XInternAtom(theDisp, "__SWM_VROOT", False);
  279. !   XQueryTree(theDisp, rootW, &rootReturn, &parentReturn, &children,
  280. !          &numChildren);
  281. !   for (i = 0; i < numChildren; i++) {
  282. !     Atom actual_type;
  283. !     int actual_format;
  284. !     unsigned long nitems, bytesafter;
  285. !     Window *newRoot = NULL;
  286. !     XWindowAttributes xwa;
  287. !     if (XGetWindowProperty (theDisp, children[i], __SWM_VROOT, 0, 1,
  288.             False, XA_WINDOW, &actual_type, &actual_format, &nitems,
  289.         &bytesafter, (unsigned char **) &newRoot) == Success && newRoot) {
  290. !       rootW = *newRoot;
  291. !       XGetWindowAttributes(theDisp, rootW, &xwa);
  292. !       dispWIDE = xwa.width;  dispHIGH = xwa.height;
  293. !       dispDEEP = xwa.depth;
  294. !       break;
  295.       }
  296. -   }
  297.   
  298.     /* have enough info to do a '-clear' now */
  299. -   if (clrroot || useroot) {
  300.       KillOldRootInfo();
  301.       XSetWindowBackgroundPixmap(theDisp, rootW, None);
  302.       XClearWindow(theDisp, rootW);
  303. --- 445,473 ----
  304.     dispDEEP  = DisplayPlanes(theDisp,theScreen);
  305.   
  306.   
  307. !   if (clrroot || useroot) {
  308. !     /* go look for a virtual root */
  309. !     __SWM_VROOT = XInternAtom(theDisp, "__SWM_VROOT", False);
  310. !     XQueryTree(theDisp, rootW, &rootReturn, &parentReturn, &children,
  311. !            &numChildren);
  312. !     for (i = 0; i < numChildren; i++) {
  313. !       Atom actual_type;
  314. !       int actual_format;
  315. !       unsigned long nitems, bytesafter;
  316. !       Window *newRoot = NULL;
  317. !       XWindowAttributes xwa;
  318. !       if (XGetWindowProperty (theDisp, children[i], __SWM_VROOT, 0, 1,
  319.             False, XA_WINDOW, &actual_type, &actual_format, &nitems,
  320.         &bytesafter, (unsigned char **) &newRoot) == Success && newRoot) {
  321. !     rootW = *newRoot;
  322. !     XGetWindowAttributes(theDisp, rootW, &xwa);
  323. !     dispWIDE = xwa.width;  dispHIGH = xwa.height;
  324. !     dispDEEP = xwa.depth;
  325. !     break;
  326. !       }
  327.       }
  328.   
  329.     /* have enough info to do a '-clear' now */
  330.       KillOldRootInfo();
  331.       XSetWindowBackgroundPixmap(theDisp, rootW, None);
  332.       XClearWindow(theDisp, rootW);
  333. ***************
  334. *** 1306,1315 ****
  335.       stlen = XLookupString(key_event,buf,128,&ks,&status);
  336.   
  337.       /* do non-character processing (arrow-keys, that is) */
  338. !     if      (ks==XK_Left)  CropKey(-1, 0, key_event->state & ShiftMask);
  339. !     else if (ks==XK_Right) CropKey( 1, 0, key_event->state & ShiftMask);
  340. !     else if (ks==XK_Up)    CropKey( 0,-1, key_event->state & ShiftMask);
  341. !     else if (ks==XK_Down)  CropKey( 0, 1, key_event->state & ShiftMask);
  342.   
  343.       if (!stlen) break;
  344.   
  345. --- 1306,1319 ----
  346.       stlen = XLookupString(key_event,buf,128,&ks,&status);
  347.   
  348.       /* do non-character processing (arrow-keys, that is) */
  349. !     if      (ks==XK_Left  || ks==XK_KP_4)  
  350. !       { stlen = 0;  CropKey(-1, 0, key_event->state & ShiftMask); }
  351. !     else if (ks==XK_Right || ks==XK_KP_6) 
  352. !       { stlen = 0;  CropKey( 1, 0, key_event->state & ShiftMask); }
  353. !     else if (ks==XK_Up    || ks==XK_KP_8)
  354. !       { stlen = 0;  CropKey( 0,-1, key_event->state & ShiftMask); }
  355. !     else if (ks==XK_Down  || ks==XK_KP_2)
  356. !       { stlen = 0;  CropKey( 0, 1, key_event->state & ShiftMask); }
  357.   
  358.       if (!stlen) break;
  359.   
  360. ***************
  361. *** 2147,2154 ****
  362.     riPix = XCreatePixmap(theDisp, rootW, 1, 1, 1);
  363.     if (!riPix) return;   /* unable to save.  thankfully, unlikely to happen */
  364.   
  365. !   prop = XInternAtom(theDisp, "_XV_PIXMAP", False);
  366. !   if (!prop) FatalError("couldn't create _XV_PIXMAP atom");
  367.   
  368.     XChangeProperty(theDisp, rootW, prop, XA_PIXMAP, 32, PropModeReplace,
  369.             (unsigned char *) &riPix, 1);
  370. --- 2151,2158 ----
  371.     riPix = XCreatePixmap(theDisp, rootW, 1, 1, 1);
  372.     if (!riPix) return;   /* unable to save.  thankfully, unlikely to happen */
  373.   
  374. !   prop = XInternAtom(theDisp, "_XSETROOT_ID", False);
  375. !   if (!prop) FatalError("couldn't create _XSETROOT_ID atom");
  376.   
  377.     XChangeProperty(theDisp, rootW, prop, XA_PIXMAP, 32, PropModeReplace,
  378.             (unsigned char *) &riPix, 1);
  379. ***************
  380. *** 2160,2166 ****
  381.   /***********************************/
  382.   static void KillOldRootInfo()
  383.   {
  384. !   /* get the pixmap ID from the _XV_PIXMAP property, and kill it */
  385.   
  386.     Atom           prop, type;
  387.     int            format;
  388. --- 2164,2170 ----
  389.   /***********************************/
  390.   static void KillOldRootInfo()
  391.   {
  392. !   /* get the pixmap ID from the _XSETROOT_ID property, and kill it */
  393.   
  394.     Atom           prop, type;
  395.     int            format;
  396. ***************
  397. *** 2167,2173 ****
  398.     unsigned long  length, after;
  399.     unsigned char *data;
  400.   
  401. !   prop = XInternAtom(theDisp, "_XV_PIXMAP", True);
  402.     if (!prop) return;    /* no old pixmap to kill */
  403.   
  404.     if (XGetWindowProperty(theDisp, rootW, prop, 0L, 1L, True, AnyPropertyType,
  405. --- 2171,2177 ----
  406.     unsigned long  length, after;
  407.     unsigned char *data;
  408.   
  409. !   prop = XInternAtom(theDisp, "_XSETROOT_ID", True);
  410.     if (!prop) return;    /* no old pixmap to kill */
  411.   
  412.     if (XGetWindowProperty(theDisp, rootW, prop, 0L, 1L, True, AnyPropertyType,
  413.  
  414.  
  415.  
  416. *** ../xv.dist2/xv.h    Mon Nov 26 19:16:26 1990
  417. --- ./xv.h    Thu Nov 29 13:45:35 1990
  418. ***************
  419. *** 16,22 ****
  420.    * This software is provided "as is" without any express or implied warranty.
  421.    */
  422.   
  423. ! #define REVDATE   "Rev: 11/26/90  (Patchlevel 2)"
  424.   
  425.   #ifdef SVR4             /* SysV release 4 uses dirent */
  426.   #ifndef sgi             /* but Silicon Graphics doesn't */
  427. --- 16,22 ----
  428.    * This software is provided "as is" without any express or implied warranty.
  429.    */
  430.   
  431. ! #define REVDATE   "Rev: 11/29/90  (Patchlevel 3)"
  432.   
  433.   #ifdef SVR4             /* SysV release 4 uses dirent */
  434.   #ifndef sgi             /* but Silicon Graphics doesn't */
  435. ***************
  436. *** 45,50 ****
  437. --- 45,55 ----
  438.   #else
  439.   #include <malloc.h>
  440.   #endif
  441. + #endif
  442. + #if defined(NEED_MEMROUTINES)
  443. + #define memcpy(d,s,l) bcopy(s,d,l)
  444.   #endif
  445.   
  446.   
  447. *** ../xv.dist2/xvmisc.c    Mon Nov 26 19:12:52 1990
  448. --- ./xvmisc.c    Thu Nov 29 13:53:22 1990
  449. ***************
  450. *** 76,83 ****
  451.   
  452.     hints.flags |= USSize;
  453.   
  454. !   if (i&XValue && i&XNegative) x = dispWIDE - w - abs(x);
  455. !   if (i&YValue && i&YNegative) y = dispHIGH - h - abs(y);
  456.   
  457.     hints.x = x;                  hints.y = y;
  458.     hints.width = w;              hints.height = h;
  459. --- 76,85 ----
  460.   
  461.     hints.flags |= USSize;
  462.   
  463. !   if (i&XValue && i&XNegative)
  464. !     x = DisplayWidth(theDisp,theScreen) - w - abs(x);
  465. !   if (i&YValue && i&YNegative)
  466. !     y = DisplayHeight(theDisp,theScreen) - h - abs(y);
  467.   
  468.     hints.x = x;                  hints.y = y;
  469.     hints.width = w;              hints.height = h;
  470. ***************
  471. *** 297,303 ****
  472.     for (i=0; i<numcols; i++) trans[ c1[i].oldindex ] = i;
  473.     
  474.     /* modify 'pic' to reflect the new colormap */
  475. !   for (i=pWIDE*pHIGH, p=pic; i; i--, p++) *p = trans[*p];
  476.     
  477.     /* and copy the new colormap into *the* colormap */
  478.     for (i=0; i<numcols; i++) {
  479. --- 299,305 ----
  480.     for (i=0; i<numcols; i++) trans[ c1[i].oldindex ] = i;
  481.     
  482.     /* modify 'pic' to reflect the new colormap */
  483. !   for (i=pWIDE*pHIGH, p=pic; i; i--, p++) { j = trans[*p];  *p = j; }
  484.     
  485.     /* and copy the new colormap into *the* colormap */
  486.     for (i=0; i<numcols; i++) {
  487.  
  488. dan
  489. ----------------------------------------------------
  490. O'Reilly && Associates   argv@sun.com / argv@ora.com
  491. Opinions expressed reflect those of the author only.
  492. --
  493. dan
  494. ----------------------------------------------------
  495. O'Reilly && Associates   argv@sun.com / argv@ora.com
  496. Opinions expressed reflect those of the author only.
  497.