Date: Tuesday, November 22, 2016 @ 17:47:40
  Author: anthraxx
Revision: 196554

archrelease: copy trunk to community-staging-i686, community-staging-x86_64

Added:
  xv/repos/community-staging-i686/
  xv/repos/community-staging-i686/PKGBUILD
    (from rev 196553, xv/trunk/PKGBUILD)
  xv/repos/community-staging-i686/license.txt
    (from rev 196553, xv/trunk/license.txt)
  xv/repos/community-staging-i686/xv-3.10a-libpng15.patch
    (from rev 196553, xv/trunk/xv-3.10a-libpng15.patch)
  xv/repos/community-staging-x86_64/
  xv/repos/community-staging-x86_64/PKGBUILD
    (from rev 196553, xv/trunk/PKGBUILD)
  xv/repos/community-staging-x86_64/license.txt
    (from rev 196553, xv/trunk/license.txt)
  xv/repos/community-staging-x86_64/xv-3.10a-libpng15.patch
    (from rev 196553, xv/trunk/xv-3.10a-libpng15.patch)

--------------------------------------------------+
 community-staging-i686/PKGBUILD                  |   46 +
 community-staging-i686/license.txt               |  139 +++++
 community-staging-i686/xv-3.10a-libpng15.patch   |  520 +++++++++++++++++++++
 community-staging-x86_64/PKGBUILD                |   46 +
 community-staging-x86_64/license.txt             |  139 +++++
 community-staging-x86_64/xv-3.10a-libpng15.patch |  520 +++++++++++++++++++++
 6 files changed, 1410 insertions(+)

Copied: xv/repos/community-staging-i686/PKGBUILD (from rev 196553, 
xv/trunk/PKGBUILD)
===================================================================
--- community-staging-i686/PKGBUILD                             (rev 0)
+++ community-staging-i686/PKGBUILD     2016-11-22 17:47:40 UTC (rev 196554)
@@ -0,0 +1,46 @@
+# $Id$
+# Maintainer: Eric Bélanger <e...@archlinux.org>
+
+pkgname=xv
+pkgver=3.10a
+pkgrel=22
+pkgdesc="A nice image viewer"
+arch=('i686' 'x86_64')
+url="http://www.trilon.com/xv/";
+license=('custom')
+depends=('libpng' 'libx11' 'libtiff' 'jasper')
+makedepends=('libxt')
+options=('!emptydirs')
+source=(ftp://ftp.trilon.com/pub/xv/${pkgname}-${pkgver}.tar.gz \
+        
http://downloads.sourceforge.net/sourceforge/png-mng/xv-3.10a-jumbo-patches-20070520.tar.gz
 \
+        
http://www.sonic.net/~roelofs/code/xv-3.10a-enhancements.20070520-20081216.diff 
\
+        license.txt xv-3.10a-libpng15.patch)
+sha1sums=('092f8eb100f16d6b91c88b126c2b2b998eb09b99'
+          'd00308c1687d9d803d26ef40c73d19a0f593c626'
+          '40bfb0889b820e0f9d3bd7d771144ec3458acc66'
+          '4561344e8f2c30eee9c55b14a14f062d89d6e7b7'
+          '3d19aa0c6ecc8b554081906babe0b4f9a6946da3')
+
+prepare() {
+  tar -cJf xv-${pkgver}-source.tar.xz xv-${pkgver}
+  cd ${pkgname}-${pkgver}
+  patch -p1 -i "${srcdir}/xv-3.10a-jumbo-fix-enh-patch-20070520.txt"
+  patch -p1 -i "${srcdir}/xv-3.10a-enhancements.20070520-20081216.diff"
+  patch -p0 -i "${srcdir}/xv-3.10a-libpng15.patch"
+}
+
+build() {
+  cd ${pkgname}-${pkgver}
+  make JP2KLIB=-ljasper
+}
+
+package() {
+  cd ${pkgname}-${pkgver}
+  install -d "${pkgdir}"/usr/{bin,lib,share/man/man1}
+  make DESTDIR="${pkgdir}" PREFIX=/usr install
+  install -D -m644 "${srcdir}/license.txt" 
"${pkgdir}/usr/share/licenses/${pkgname}/license.txt"
+
+# installing source tarball (to comply with license)
+  install -D -m644 "${srcdir}/xv-${pkgver}-source.tar.xz" 
"${pkgdir}/usr/share/doc/xv/xv-${pkgver}-source.tar.xz"
+  ln -s "/usr/share/licenses/${pkgname}/license.txt" 
"${pkgdir}/usr/share/doc/xv/license.txt"
+}

Copied: xv/repos/community-staging-i686/license.txt (from rev 196553, 
xv/trunk/license.txt)
===================================================================
--- community-staging-i686/license.txt                          (rev 0)
+++ community-staging-i686/license.txt  2016-11-22 17:47:40 UTC (rev 196554)
@@ -0,0 +1,139 @@
+XV Licensing Information
+------------------------
+XV IS SHAREWARE FOR PERSONAL USE ONLY.  
+
+You may use XV for your own amusement, and if you find it nifty,
+useful, generally cool, or of some value to you, your registration fee
+would be greatly appreciated.  $25 is the standard registration fee,
+though of course, larger amounts are quite welcome.  Folks who donate
+$40 or more can receive a printed, bound copy of the XV manual for no
+extra charge.  If you want one, just ask.  BE SURE TO SPECIFY THE
+VERSION OF XV THAT YOU ARE USING!
+
+COMMERCIAL, GOVERNMENT, AND INSTITUTIONAL USERS MUST REGISTER THEIR
+COPIES OF XV.
+
+This does *not* mean that you are required to register XV just because
+you play with it on the workstation in your office.  This falls under
+the heading of 'personal use'.  If you are a sysadmin, you can put XV
+up in a public directory for your users amusement.  Again, 'personal
+use', albeit plural.
+
+On the other hand, if you use XV in the course of doing your work,
+whatever your 'work' may happen to be, you *must* register your
+copy of XV.  (Note:  If you are a student, and you use XV to do 
+classwork or research, you should get your professor/teacher/advisor
+to purchase an appropriate number of copies.)
+
+XV licenses are $25 each.  You should purchase one license per
+workstation, or one per XV user, whichever is the smaller number.  XV
+is *not* sold on a 'number of concurrent users' basis.  If XV was some
+$1000 program, yes, that would be a reasonable request, but at $25,
+it's not.  Also, given that XV is completely unlocked, there is no way
+to enforce any 'number of concurrent users' limits, so it isn't sold
+that way.
+
+Printed and bound copies of the 100-odd page XV manual are available
+for $15 each.  Note that manuals are *only* sold with, at minimum, an
+equal number of licenses.  (e.g.  if you purchase 5 licenses, you can
+also purchase *up to* 5 copies of the manual)
+
+The source code to the program can be had (as a compressed 'tar' file
+split over a couple 3.5" MS-DOS formatted floppies) for $15, for those
+who don't have ftp capabilities.
+
+Orders outside the US and Canada must add an additional $5 per manual
+ordered to cover the additional shipping charges.
+
+Checks, money orders, and purchase orders are accepted.  Credit cards
+are not.  All forms of payment must be payable in US Funds.  Checks
+must be payable through a US bank (or a US branch of a non-US bank).
+Purchase orders for less than $50, while still accepted, are not
+encouraged. 
+
+All payments should be payable to 'John Bradley', and mailed to:
+        John Bradley
+        1053 Floyd Terrace
+        Bryn Mawr, PA  19010
+        USA
+
+
+Site Licenses
+-------------
+If you are planning to purchase 10 or more licenses, site licenses are
+available, at a substantial discount.  Site licenses let you run XV on
+any and all computing equipment at the site, for any purpose
+whatsoever.  The site license covers the current version of XV, and
+any versions released within one year of the licensing date.  You are
+also allowed to duplicate and distribute an unlimited number of copies
+of the XV manual, but only for use within the site.  Covered versions
+of the software may be run in perpetuity.
+
+Also, it should be noted that a 'site' can be defined as anything
+you'd like.  It can be a physical location (a room, building,
+location, etc.), an organizational grouping (a workgroup, department,
+division, etc.) or any other logical grouping ("the seventeen
+technical writers scattered about our company", etc.).
+
+The site license cost will be based on your estimate of the number of
+XV users or workstations at your site, whichever is the smaller
+number.
+
+If you are interested in obtaining a site license, please contact the
+author via electronic mail or FAX (see below for details).  Send
+information regarding your site (the name or definition of the 'site',
+a physical address, a fax number, and an estimate of the number of
+users or workstations), and we'll get a site license out to you for
+your examination.
+
+
+Copyright Notice
+----------------
+XV is Copyright 1989, 1994 by John Bradley
+
+Permission to copy and distribute XV in its entirety, for
+non-commercial purposes, is hereby granted without fee, provided that
+this license information and copyright notice appear in all copies.
+
+If you redistribute XV, the *entire* contents of this distribution
+must be distributed, including the README, and INSTALL files, the
+sources, and the complete contents of the 'docs' directory.
+
+Note that distributing XV 'bundled' in with any product is considered
+to be a 'commercial purpose'.
+
+Also note that any copies of XV that are distributed MUST be built
+and/or configured to be in their 'unregistered copy' mode, so that it
+is made obvious to the user that XV is shareware, and that they should
+consider registering, or at least reading this information.
+
+The software may be modified for your own purposes, but modified
+versions may not be distributed without prior consent of the author.
+
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the author be held liable for any damages
+arising from the use of this software.
+
+If you would like to do something with XV that this copyright
+prohibits (such as distributing it with a commercial product, using
+portions of the source in some other program, distributing registered
+copies, etc.), please contact the author (preferably via email).
+Arrangements can probably be worked out.
+
+
+The author may be contacted via:
+    US Mail:  John Bradley
+              1053 Floyd Terrace
+              Bryn Mawr, PA  19010
+
+    FAX:     (610) 520-2042
+
+Electronic Mail regarding XV should be sent to one of these three addresses:
+     x...@devo.dccs.upenn.edu               - general XV questions
+     xv...@devo.dccs.upenn.edu            - all XV licensing questions
+     xvt...@devo.dccs.upenn.edu           - bug reports, technical questions
+
+Please do *not* send electronic mail directly to the author, as he
+gets more than enough as it is.
+
+

Copied: xv/repos/community-staging-i686/xv-3.10a-libpng15.patch (from rev 
196553, xv/trunk/xv-3.10a-libpng15.patch)
===================================================================
--- community-staging-i686/xv-3.10a-libpng15.patch                              
(rev 0)
+++ community-staging-i686/xv-3.10a-libpng15.patch      2016-11-22 17:47:40 UTC 
(rev 196554)
@@ -0,0 +1,520 @@
+--- xvinfo.c
++++ xvinfo.c
+@@ -26,7 +26,7 @@
+ #define INFOHIGH 270
+ 
+ /* max length of an Info String */
+-#define ISTRLEN 80
++#define ISTRLEN 256
+ 
+ /* baseline of top line of text */
+ #define TOPBASE (36 + penn_height/2 + 4 + 8 + ASCENT)
+--- xvpng.c
++++ xvpng.c
+@@ -31,6 +31,7 @@
+ 
+ #ifdef HAVE_PNG
+ 
++#include "zlib.h"
+ #include "png.h"
+ 
+ /*** Stuff for PNG Dialog box ***/
+@@ -41,7 +42,9 @@
+ #define COMPRESSION   6     /* default zlib compression level, not max
+                                (Z_BEST_COMPRESSION) */
+ 
+-#define HAVE_tRNS  (info_ptr->valid & PNG_INFO_tRNS)
++/* old
++#define HAVE_tRNS  (info_ptr->valid & PNG_INFO_tRNS) */
++#define HAVE_tRNS  png_get_valid(png_ptr,info_ptr,PNG_INFO_tRNS)
+ 
+ #define DWIDE    86
+ #define DHIGH    104
+@@ -444,6 +447,10 @@
+   byte       *p, *png_line;
+   char        software[256];
+   char       *savecmnt;
++  /* for storing values until all are accumulated, so that the image header 
can be set in full */
++  int         
_bit_depth,_color_type,_interlace_type,_compression_type,_filter_type;
++  png_uint_32 _width,_height;
++  png_time    _mod_time;
+ 
+   if ((png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL,
+        png_xv_error, png_xv_warning)) == NULL) {
+@@ -458,7 +465,7 @@
+     FatalError(software);
+   }
+ 
+-  if (setjmp(png_ptr->jmpbuf)) {
++  if (setjmp(png_jmpbuf(png_ptr))) {
+     png_destroy_write_struct(&png_ptr, &info_ptr);
+     return -1;
+   }
+@@ -489,8 +496,8 @@
+     png_set_filter(png_ptr, 0, filter);
+   }
+ 
+-  info_ptr->width = w;
+-  info_ptr->height = h;
++  _width = w;
++  _height = h;
+   if (w <= 0 || h <= 0) {
+     SetISTR(ISTR_WARNING, "%s:  image dimensions out of range (%dx%d)",
+       fbasename, w, h);
+@@ -498,7 +505,7 @@
+     return -1;
+   }
+ 
+-  info_ptr->interlace_type = interCB.val ? 1 : 0;
++  _interlace_type = interCB.val ? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE;
+ 
+   linesize = 0;   /* quiet a compiler warning */
+ 
+@@ -542,40 +549,44 @@
+         png_destroy_write_struct(&png_ptr, &info_ptr);
+         return -1;
+       }
+-      info_ptr->color_type = PNG_COLOR_TYPE_RGB;
+-      info_ptr->bit_depth = 8;
++      _color_type = PNG_COLOR_TYPE_RGB;
++      _bit_depth = 8;
+     } else /* ptype == PIC8 */ {
+       linesize = w;
+-      info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
++      _color_type = PNG_COLOR_TYPE_PALETTE;
+       if (numuniqcols <= 2)
+-        info_ptr->bit_depth = 1;
++        _bit_depth = 1;
+       else
+       if (numuniqcols <= 4)
+-        info_ptr->bit_depth = 2;
++        _bit_depth = 2;
+       else
+       if (numuniqcols <= 16)
+-        info_ptr->bit_depth = 4;
++        _bit_depth = 4;
+       else
+-        info_ptr->bit_depth = 8;
++        _bit_depth = 8;
+ 
+       for (i = 0; i < numuniqcols; i++) {
+         palette[i].red   = r1[i];
+         palette[i].green = g1[i];
+         palette[i].blue  = b1[i];
+       }
+-      info_ptr->num_palette = numuniqcols;
+-      info_ptr->palette = palette;
++/* cannot find a setter for this, unsure if it is necessary anymore...
+       info_ptr->valid |= PNG_INFO_PLTE;
++*/
++      /* set the header just in case it's needed */
++      png_set_IHDR(png_ptr,info_ptr,_width,_height,_bit_depth,_color_type,
++        _interlace_type,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
++      png_set_PLTE(png_ptr,info_ptr,palette,numuniqcols);
+     }
+   }
+ 
+   else if (colorType == F_GREYSCALE || colorType == F_BWDITHER) {
+-    info_ptr->color_type = PNG_COLOR_TYPE_GRAY;
++    _color_type = PNG_COLOR_TYPE_GRAY;
+     if (colorType == F_BWDITHER) {
+       /* shouldn't happen */
+       if (ptype == PIC24) FatalError("PIC24 and B/W Stipple in WritePNG()");
+ 
+-      info_ptr->bit_depth = 1;
++      _bit_depth = 1;
+       if (MONO(r1[0], g1[0], b1[0]) > MONO(r1[1], g1[1], b1[1])) {
+         remap[0] = 1;
+         remap[1] = 0;
+@@ -595,7 +606,7 @@
+           png_destroy_write_struct(&png_ptr, &info_ptr);
+           return -1;
+         }
+-        info_ptr->bit_depth = 8;
++        _bit_depth = 8;
+       }
+       else /* ptype == PIC8 */ {
+         int low_precision;
+@@ -617,7 +628,7 @@
+         for (; i < 256; i++)
+           remap[i]=0;  /* shouldn't be necessary, but... */
+ 
+-        info_ptr->bit_depth = 8;
++        _bit_depth = 8;
+ 
+         /* Note that this fails most of the time because of gamma */
+            /* (and that would be a bug:  GRR FIXME) */
+@@ -636,7 +647,7 @@
+           for (i = 0; i < numuniqcols; i++) {
+             remap[i] &= 0xf;
+           }
+-          info_ptr->bit_depth = 4;
++          _bit_depth = 4;
+ 
+           /* try to adjust to 2-bit precision grayscale */
+ 
+@@ -652,7 +663,7 @@
+           for (i = 0; i < numuniqcols; i++) {
+             remap[i] &= 3;
+           }
+-          info_ptr->bit_depth = 2;
++          _bit_depth = 2;
+ 
+           /* try to adjust to 1-bit precision grayscale */
+ 
+@@ -668,7 +679,7 @@
+           for (i = 0; i < numuniqcols; i++) {
+             remap[i] &= 1;
+           }
+-          info_ptr->bit_depth = 1;
++          _bit_depth = 1;
+         }
+       }
+     }
+@@ -677,6 +688,9 @@
+   else
+     png_error(png_ptr, "Unknown colorstyle in WritePNG");
+ 
++  png_set_IHDR(png_ptr,info_ptr,_width,_height,_bit_depth,_color_type,
++    _interlace_type,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
++
+   if ((text = (png_textp)malloc(sizeof(png_text)))) {
+     sprintf(software, "XV %s", REVDATE);
+ 
+@@ -685,20 +699,22 @@
+     text->text = software;
+     text->text_length = strlen(text->text);
+ 
+-    info_ptr->max_text = 1;
+-    info_ptr->num_text = 1;
+-    info_ptr->text = text;
++/* max_text seems to be internal only now, do not set
++    info_ptr->max_text = 1; */
++    png_set_text(png_ptr,info_ptr,text,1);
+   }
+ 
+   Display_Gamma = gDial.val;  /* Save the current gamma for loading */
+ 
+ // GRR FIXME:  add .Xdefaults option to omit writing gamma (size, cumulative 
errors when editing)--alternatively, modify save box to include "omit" checkbox
+-  info_ptr->gamma = 1.0/gDial.val;
+-  info_ptr->valid |= PNG_INFO_gAMA;
++  png_set_gAMA(png_ptr,info_ptr,1.0/gDial.val);
++/* doesn't seem to be a way to set valid directly anymore, unnecessary 
maybe.. 
++  info_ptr->valid |= PNG_INFO_gAMA; */
+ 
++/* might need to be png_write_info_before_PLTE() ... */
+   png_write_info(png_ptr, info_ptr);
+ 
+-  if (info_ptr->bit_depth < 8)
++  if (_bit_depth < 8)
+     png_set_packing(png_ptr);
+ 
+   pass=png_set_interlace_handling(png_ptr);
+@@ -711,13 +727,13 @@
+     int j;
+     p = pic;
+     for (j = 0; j < h; ++j) {
+-      if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY) {
++      if (_color_type == PNG_COLOR_TYPE_GRAY) {
+         int k;
+         for (k = 0; k < w; ++k)
+           png_line[k] = ptype==PIC24 ? MONO(p[k*3], p[k*3+1], p[k*3+2]) :
+                                        remap[pc2nc[p[k]]];
+         png_write_row(png_ptr, png_line);
+-      } else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) {
++      } else if (_color_type == PNG_COLOR_TYPE_PALETTE) {
+         int k;
+         for (k = 0; k < w; ++k)
+           png_line[k] = pc2nc[p[k]];
+@@ -739,28 +755,31 @@
+         (savecmnt = (char *)malloc((strlen(picComments) + 1)*sizeof(char)))) {
+       png_textp tp;
+       char *comment, *key;
++      int nt;
++      int mt;
+ 
+       strcpy(savecmnt, picComments);
+       key = savecmnt;
++      png_get_text(png_ptr,info_ptr,&tp,&mt); /* to get 'max_text' */
+       tp = text;
+-      info_ptr->num_text = 0;
++      nt = 0;      
+ 
+       comment = strchr(key, ':');
+ 
+       do  {
+         /* Allocate a larger structure for comments if necessary */
+-        if (info_ptr->num_text >= info_ptr->max_text)
++        if (nt >= mt)
+         {
+           if ((tp =
+-              realloc(text, (info_ptr->num_text + 2)*sizeof(png_text))) == 
NULL)
++              realloc(text, (nt + 2)*sizeof(png_text))) == NULL)
+           {
+             break;
+           }
+           else
+           {
+             text = tp;
+-            tp = &text[info_ptr->num_text];
+-            info_ptr->max_text += 2;
++            tp = &text[nt];
++            mt += 2;
+           }
+         }
+ 
+@@ -810,7 +829,7 @@
+             }
+ 
+             tp->compression = tp->text_length > 640 ? 0 : -1;
+-            info_ptr->num_text++;
++            nt++;
+             tp++;
+           }
+         }
+@@ -834,27 +853,29 @@
+           tp->text = key;
+           tp->text_length = q - key;
+           tp->compression = tp->text_length > 750 ? 0 : -1;
+-          info_ptr->num_text++;
++          nt++;
+           key = NULL;
+         }
+       } while (key && *key);
++      png_set_text(png_ptr,info_ptr,text,nt);
+     }
+     else {
+-      info_ptr->num_text = 0;
++      png_set_text(png_ptr,info_ptr,text,0);
+     }
+   }
+-  info_ptr->text = text;
+ 
+-  png_convert_from_time_t(&(info_ptr->mod_time), time(NULL));
+-  info_ptr->valid |= PNG_INFO_tIME;
++  png_convert_from_time_t(&_mod_time, time(NULL));
++  png_set_tIME(png_ptr,info_ptr,&_mod_time);
++/* dunno how to set validity
++  info_ptr->valid |= PNG_INFO_tIME; */
+ 
+   png_write_end(png_ptr, info_ptr);
+   fflush(fp);   /* just in case we core-dump before finishing... */
+ 
+   if (text) {
+     free(text);
+-    /* must do this or png_destroy_write_struct() 0.97+ will free text again: 
*/
+-    info_ptr->text = (png_textp)NULL;
++    /* must do this or png_destroy_write_struct() 0.97+ will free text again: 
++    info_ptr->text = (png_textp)NULL; */
+     if (savecmnt)
+     {
+       free(savecmnt);
+@@ -886,6 +907,14 @@
+   int pass;
+   int gray_to_rgb;
+   size_t commentsize;
++  /* temp storage vars for libpng15 migration */
++  int         
_bit_depth,_color_type,_interlace_type,_compression_type,_filter_type,_num_text,_num_palette;
++  png_uint_32 _width,_height;
++  png_timep   _mod_time;
++  double      _gamma;
++  png_textp   _text;
++  png_colorp  _palette;
++  png_color_16p _background;
+ 
+   fbasename = BaseName(fname);
+ 
+@@ -921,7 +950,7 @@
+     FatalError("malloc failure in LoadPNG");
+   }
+ 
+-  if (setjmp(png_ptr->jmpbuf)) {
++  if (setjmp(png_jmpbuf(png_ptr))) {
+     fclose(fp);
+     png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
+     if (!read_anything) {
+@@ -945,8 +974,10 @@
+ #endif
+   png_read_info(png_ptr, info_ptr);
+ 
+-  pinfo->w = pinfo->normw = info_ptr->width;
+-  pinfo->h = pinfo->normh = info_ptr->height;
++  
png_get_IHDR(png_ptr,info_ptr,&_width,&_height,&_bit_depth,&_color_type,&_interlace_type,NULL,NULL);
++
++  pinfo->w = pinfo->normw = _width;
++  pinfo->h = pinfo->normh = _height;
+   if (pinfo->w <= 0 || pinfo->h <= 0) {
+     SetISTR(ISTR_WARNING, "%s:  image dimensions out of range (%dx%d)",
+       fbasename, pinfo->w, pinfo->h);
+@@ -957,9 +988,9 @@
+   pinfo->frmType = F_PNG;
+ 
+   sprintf(pinfo->fullInfo, "PNG, %d bit ",
+-          info_ptr->bit_depth * info_ptr->channels);
++          _bit_depth * png_get_channels(png_ptr,info_ptr));
+ 
+-  switch(info_ptr->color_type) {
++  switch(_color_type) {
+     case PNG_COLOR_TYPE_PALETTE:
+       strcat(pinfo->fullInfo, "palette color");
+       break;
+@@ -983,15 +1014,17 @@
+ 
+   sprintf(pinfo->fullInfo + strlen(pinfo->fullInfo),
+         ", %sinterlaced. (%d bytes)",
+-        info_ptr->interlace_type ? "" : "non-", filesize);
++        _interlace_type ? "" : "non-", filesize);
+ 
+-  sprintf(pinfo->shrtInfo, "%lux%lu PNG", info_ptr->width, info_ptr->height);
++  sprintf(pinfo->shrtInfo, "%lux%lu PNG", _width, _height);
+ 
+-  if (info_ptr->bit_depth < 8)
++  if (_bit_depth < 8)
+       png_set_packing(png_ptr);
+ 
+-  if (info_ptr->valid & PNG_INFO_gAMA)
+-    png_set_gamma(png_ptr, Display_Gamma, info_ptr->gamma);
++  if (png_get_valid(png_ptr,info_ptr,PNG_INFO_gAMA)) {
++    png_get_gAMA(png_ptr,info_ptr,&_gamma);
++    png_set_gamma(png_ptr, Display_Gamma, _gamma);
++  }
+ /*
+  *else
+  *  png_set_gamma(png_ptr, Display_Gamma, 0.45);
+@@ -1000,7 +1033,7 @@
+   gray_to_rgb = 0;   /* quiet a compiler warning */
+ 
+   if (have_imagebg) {
+-    if (info_ptr->bit_depth == 16) {
++    if (_bit_depth == 16) {
+       my_background.red   = imagebgR;
+       my_background.green = imagebgG;
+       my_background.blue  = imagebgB;
+@@ -1013,8 +1046,8 @@
+     }
+     png_set_background(png_ptr, &my_background, PNG_BACKGROUND_GAMMA_SCREEN,
+                        0, Display_Gamma);
+-    if ((info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
+-         (info_ptr->color_type == PNG_COLOR_TYPE_GRAY && HAVE_tRNS)) &&
++    if ((_color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
++         (_color_type == PNG_COLOR_TYPE_GRAY && HAVE_tRNS)) &&
+         (imagebgR != imagebgG || imagebgR != imagebgB))  /* i.e., colored bg 
*/
+     {
+       png_set_gray_to_rgb(png_ptr);
+@@ -1022,8 +1055,9 @@
+       gray_to_rgb = 1;
+     }
+   } else {
+-    if (info_ptr->valid & PNG_INFO_bKGD) {
+-      png_set_background(png_ptr, &info_ptr->background,
++    if (png_get_valid(png_ptr,info_ptr,PNG_INFO_bKGD)) {
++      png_get_bKGD(png_ptr,info_ptr,&_background);
++      png_set_background(png_ptr, _background,
+                          PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
+     } else {
+       my_background.red = my_background.green = my_background.blue =
+@@ -1033,13 +1067,13 @@
+     }
+   }
+ 
+-  if (info_ptr->bit_depth == 16)
++  if (_bit_depth == 16)
+     png_set_strip_16(png_ptr);
+ 
+-  if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY ||
+-      info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
++  if (_color_type == PNG_COLOR_TYPE_GRAY ||
++      _color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
+   {
+-    if (info_ptr->bit_depth == 1)
++    if (_bit_depth == 1)
+       pinfo->colType = F_BWDITHER;
+     else
+       pinfo->colType = F_GREYSCALE;
+@@ -1049,9 +1083,11 @@
+   pass=png_set_interlace_handling(png_ptr);
+ 
+   png_read_update_info(png_ptr, info_ptr);
++  /* get HIDR again just in case the info_ptr changed */
++  
png_get_IHDR(png_ptr,info_ptr,&_width,&_height,&_bit_depth,&_color_type,&_interlace_type,NULL,NULL);
+ 
+-  if (info_ptr->color_type == PNG_COLOR_TYPE_RGB ||
+-     info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA || gray_to_rgb)
++  if (_color_type == PNG_COLOR_TYPE_RGB ||
++     _color_type == PNG_COLOR_TYPE_RGB_ALPHA || gray_to_rgb)
+   {
+     linesize = 3 * pinfo->w;
+     if (linesize/3 < pinfo->w) {   /* know pinfo->w > 0 (see above) */
+@@ -1065,16 +1101,17 @@
+   } else {
+     linesize = pinfo->w;
+     pinfo->type = PIC8;
+-    if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY ||
+-       info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
++    if (_color_type == PNG_COLOR_TYPE_GRAY ||
++       _color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
+       for (i = 0; i < 256; i++)
+         pinfo->r[i] = pinfo->g[i] = pinfo->b[i] = i;
+     } else {
+       pinfo->colType = F_FULLCOLOR;
+-      for (i = 0; i < info_ptr->num_palette; i++) {
+-        pinfo->r[i] = info_ptr->palette[i].red;
+-        pinfo->g[i] = info_ptr->palette[i].green;
+-        pinfo->b[i] = info_ptr->palette[i].blue;
++      png_get_PLTE(png_ptr,info_ptr,&_palette,&_num_palette);
++      for (i = 0; i < _num_palette; i++) {
++        pinfo->r[i] = _palette[i].red;
++        pinfo->g[i] = _palette[i].green;
++        pinfo->b[i] = _palette[i].blue;
+       }
+     }
+   }
+@@ -1092,7 +1129,7 @@
+     png_error(png_ptr, "can't allocate space for PNG image");
+   }
+ 
+-  png_start_read_image(png_ptr);
++  /*png_start_read_image(png_ptr); -- causes a warning and seems to be 
unnecessary */
+ 
+   for (i = 0; i < pass; i++) {
+     byte *p = pinfo->pic;
+@@ -1106,22 +1143,23 @@
+ 
+   png_read_end(png_ptr, info_ptr);
+ 
+-  if (info_ptr->num_text > 0) {
++  png_get_text(png_ptr,info_ptr,&_text,&_num_text);
++  if (_num_text > 0) {
+     commentsize = 1;
+ 
+-    for (i = 0; i < info_ptr->num_text; i++)
+-      commentsize += strlen(info_ptr->text[i].key) + 1 +
+-                     info_ptr->text[i].text_length + 2;
++    for (i = 0; i < _num_text; i++)
++      commentsize += strlen(_text[i].key) + 1 +
++                     _text[i].text_length + 2;
+ 
+     if ((pinfo->comment = malloc(commentsize)) == NULL) {
+       png_warning(png_ptr,"can't allocate comment string");
+     }
+     else {
+       pinfo->comment[0] = '\0';
+-      for (i = 0; i < info_ptr->num_text; i++) {
+-        strcat(pinfo->comment, info_ptr->text[i].key);
++      for (i = 0; i < _num_text; i++) {
++        strcat(pinfo->comment, _text[i].key);
+         strcat(pinfo->comment, "::");
+-        strcat(pinfo->comment, info_ptr->text[i].text);
++        strcat(pinfo->comment, _text[i].text);
+         strcat(pinfo->comment, "\n");
+       }
+     }
+@@ -1143,7 +1181,7 @@
+ {
+   SetISTR(ISTR_WARNING,"%s:  libpng error: %s", fbasename, message);
+ 
+-  longjmp(png_ptr->jmpbuf, 1);
++  longjmp(png_jmpbuf(png_ptr), 1);
+ }
+ 
+ 

Copied: xv/repos/community-staging-x86_64/PKGBUILD (from rev 196553, 
xv/trunk/PKGBUILD)
===================================================================
--- community-staging-x86_64/PKGBUILD                           (rev 0)
+++ community-staging-x86_64/PKGBUILD   2016-11-22 17:47:40 UTC (rev 196554)
@@ -0,0 +1,46 @@
+# $Id$
+# Maintainer: Eric Bélanger <e...@archlinux.org>
+
+pkgname=xv
+pkgver=3.10a
+pkgrel=22
+pkgdesc="A nice image viewer"
+arch=('i686' 'x86_64')
+url="http://www.trilon.com/xv/";
+license=('custom')
+depends=('libpng' 'libx11' 'libtiff' 'jasper')
+makedepends=('libxt')
+options=('!emptydirs')
+source=(ftp://ftp.trilon.com/pub/xv/${pkgname}-${pkgver}.tar.gz \
+        
http://downloads.sourceforge.net/sourceforge/png-mng/xv-3.10a-jumbo-patches-20070520.tar.gz
 \
+        
http://www.sonic.net/~roelofs/code/xv-3.10a-enhancements.20070520-20081216.diff 
\
+        license.txt xv-3.10a-libpng15.patch)
+sha1sums=('092f8eb100f16d6b91c88b126c2b2b998eb09b99'
+          'd00308c1687d9d803d26ef40c73d19a0f593c626'
+          '40bfb0889b820e0f9d3bd7d771144ec3458acc66'
+          '4561344e8f2c30eee9c55b14a14f062d89d6e7b7'
+          '3d19aa0c6ecc8b554081906babe0b4f9a6946da3')
+
+prepare() {
+  tar -cJf xv-${pkgver}-source.tar.xz xv-${pkgver}
+  cd ${pkgname}-${pkgver}
+  patch -p1 -i "${srcdir}/xv-3.10a-jumbo-fix-enh-patch-20070520.txt"
+  patch -p1 -i "${srcdir}/xv-3.10a-enhancements.20070520-20081216.diff"
+  patch -p0 -i "${srcdir}/xv-3.10a-libpng15.patch"
+}
+
+build() {
+  cd ${pkgname}-${pkgver}
+  make JP2KLIB=-ljasper
+}
+
+package() {
+  cd ${pkgname}-${pkgver}
+  install -d "${pkgdir}"/usr/{bin,lib,share/man/man1}
+  make DESTDIR="${pkgdir}" PREFIX=/usr install
+  install -D -m644 "${srcdir}/license.txt" 
"${pkgdir}/usr/share/licenses/${pkgname}/license.txt"
+
+# installing source tarball (to comply with license)
+  install -D -m644 "${srcdir}/xv-${pkgver}-source.tar.xz" 
"${pkgdir}/usr/share/doc/xv/xv-${pkgver}-source.tar.xz"
+  ln -s "/usr/share/licenses/${pkgname}/license.txt" 
"${pkgdir}/usr/share/doc/xv/license.txt"
+}

Copied: xv/repos/community-staging-x86_64/license.txt (from rev 196553, 
xv/trunk/license.txt)
===================================================================
--- community-staging-x86_64/license.txt                                (rev 0)
+++ community-staging-x86_64/license.txt        2016-11-22 17:47:40 UTC (rev 
196554)
@@ -0,0 +1,139 @@
+XV Licensing Information
+------------------------
+XV IS SHAREWARE FOR PERSONAL USE ONLY.  
+
+You may use XV for your own amusement, and if you find it nifty,
+useful, generally cool, or of some value to you, your registration fee
+would be greatly appreciated.  $25 is the standard registration fee,
+though of course, larger amounts are quite welcome.  Folks who donate
+$40 or more can receive a printed, bound copy of the XV manual for no
+extra charge.  If you want one, just ask.  BE SURE TO SPECIFY THE
+VERSION OF XV THAT YOU ARE USING!
+
+COMMERCIAL, GOVERNMENT, AND INSTITUTIONAL USERS MUST REGISTER THEIR
+COPIES OF XV.
+
+This does *not* mean that you are required to register XV just because
+you play with it on the workstation in your office.  This falls under
+the heading of 'personal use'.  If you are a sysadmin, you can put XV
+up in a public directory for your users amusement.  Again, 'personal
+use', albeit plural.
+
+On the other hand, if you use XV in the course of doing your work,
+whatever your 'work' may happen to be, you *must* register your
+copy of XV.  (Note:  If you are a student, and you use XV to do 
+classwork or research, you should get your professor/teacher/advisor
+to purchase an appropriate number of copies.)
+
+XV licenses are $25 each.  You should purchase one license per
+workstation, or one per XV user, whichever is the smaller number.  XV
+is *not* sold on a 'number of concurrent users' basis.  If XV was some
+$1000 program, yes, that would be a reasonable request, but at $25,
+it's not.  Also, given that XV is completely unlocked, there is no way
+to enforce any 'number of concurrent users' limits, so it isn't sold
+that way.
+
+Printed and bound copies of the 100-odd page XV manual are available
+for $15 each.  Note that manuals are *only* sold with, at minimum, an
+equal number of licenses.  (e.g.  if you purchase 5 licenses, you can
+also purchase *up to* 5 copies of the manual)
+
+The source code to the program can be had (as a compressed 'tar' file
+split over a couple 3.5" MS-DOS formatted floppies) for $15, for those
+who don't have ftp capabilities.
+
+Orders outside the US and Canada must add an additional $5 per manual
+ordered to cover the additional shipping charges.
+
+Checks, money orders, and purchase orders are accepted.  Credit cards
+are not.  All forms of payment must be payable in US Funds.  Checks
+must be payable through a US bank (or a US branch of a non-US bank).
+Purchase orders for less than $50, while still accepted, are not
+encouraged. 
+
+All payments should be payable to 'John Bradley', and mailed to:
+        John Bradley
+        1053 Floyd Terrace
+        Bryn Mawr, PA  19010
+        USA
+
+
+Site Licenses
+-------------
+If you are planning to purchase 10 or more licenses, site licenses are
+available, at a substantial discount.  Site licenses let you run XV on
+any and all computing equipment at the site, for any purpose
+whatsoever.  The site license covers the current version of XV, and
+any versions released within one year of the licensing date.  You are
+also allowed to duplicate and distribute an unlimited number of copies
+of the XV manual, but only for use within the site.  Covered versions
+of the software may be run in perpetuity.
+
+Also, it should be noted that a 'site' can be defined as anything
+you'd like.  It can be a physical location (a room, building,
+location, etc.), an organizational grouping (a workgroup, department,
+division, etc.) or any other logical grouping ("the seventeen
+technical writers scattered about our company", etc.).
+
+The site license cost will be based on your estimate of the number of
+XV users or workstations at your site, whichever is the smaller
+number.
+
+If you are interested in obtaining a site license, please contact the
+author via electronic mail or FAX (see below for details).  Send
+information regarding your site (the name or definition of the 'site',
+a physical address, a fax number, and an estimate of the number of
+users or workstations), and we'll get a site license out to you for
+your examination.
+
+
+Copyright Notice
+----------------
+XV is Copyright 1989, 1994 by John Bradley
+
+Permission to copy and distribute XV in its entirety, for
+non-commercial purposes, is hereby granted without fee, provided that
+this license information and copyright notice appear in all copies.
+
+If you redistribute XV, the *entire* contents of this distribution
+must be distributed, including the README, and INSTALL files, the
+sources, and the complete contents of the 'docs' directory.
+
+Note that distributing XV 'bundled' in with any product is considered
+to be a 'commercial purpose'.
+
+Also note that any copies of XV that are distributed MUST be built
+and/or configured to be in their 'unregistered copy' mode, so that it
+is made obvious to the user that XV is shareware, and that they should
+consider registering, or at least reading this information.
+
+The software may be modified for your own purposes, but modified
+versions may not be distributed without prior consent of the author.
+
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the author be held liable for any damages
+arising from the use of this software.
+
+If you would like to do something with XV that this copyright
+prohibits (such as distributing it with a commercial product, using
+portions of the source in some other program, distributing registered
+copies, etc.), please contact the author (preferably via email).
+Arrangements can probably be worked out.
+
+
+The author may be contacted via:
+    US Mail:  John Bradley
+              1053 Floyd Terrace
+              Bryn Mawr, PA  19010
+
+    FAX:     (610) 520-2042
+
+Electronic Mail regarding XV should be sent to one of these three addresses:
+     x...@devo.dccs.upenn.edu               - general XV questions
+     xv...@devo.dccs.upenn.edu            - all XV licensing questions
+     xvt...@devo.dccs.upenn.edu           - bug reports, technical questions
+
+Please do *not* send electronic mail directly to the author, as he
+gets more than enough as it is.
+
+

Copied: xv/repos/community-staging-x86_64/xv-3.10a-libpng15.patch (from rev 
196553, xv/trunk/xv-3.10a-libpng15.patch)
===================================================================
--- community-staging-x86_64/xv-3.10a-libpng15.patch                            
(rev 0)
+++ community-staging-x86_64/xv-3.10a-libpng15.patch    2016-11-22 17:47:40 UTC 
(rev 196554)
@@ -0,0 +1,520 @@
+--- xvinfo.c
++++ xvinfo.c
+@@ -26,7 +26,7 @@
+ #define INFOHIGH 270
+ 
+ /* max length of an Info String */
+-#define ISTRLEN 80
++#define ISTRLEN 256
+ 
+ /* baseline of top line of text */
+ #define TOPBASE (36 + penn_height/2 + 4 + 8 + ASCENT)
+--- xvpng.c
++++ xvpng.c
+@@ -31,6 +31,7 @@
+ 
+ #ifdef HAVE_PNG
+ 
++#include "zlib.h"
+ #include "png.h"
+ 
+ /*** Stuff for PNG Dialog box ***/
+@@ -41,7 +42,9 @@
+ #define COMPRESSION   6     /* default zlib compression level, not max
+                                (Z_BEST_COMPRESSION) */
+ 
+-#define HAVE_tRNS  (info_ptr->valid & PNG_INFO_tRNS)
++/* old
++#define HAVE_tRNS  (info_ptr->valid & PNG_INFO_tRNS) */
++#define HAVE_tRNS  png_get_valid(png_ptr,info_ptr,PNG_INFO_tRNS)
+ 
+ #define DWIDE    86
+ #define DHIGH    104
+@@ -444,6 +447,10 @@
+   byte       *p, *png_line;
+   char        software[256];
+   char       *savecmnt;
++  /* for storing values until all are accumulated, so that the image header 
can be set in full */
++  int         
_bit_depth,_color_type,_interlace_type,_compression_type,_filter_type;
++  png_uint_32 _width,_height;
++  png_time    _mod_time;
+ 
+   if ((png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL,
+        png_xv_error, png_xv_warning)) == NULL) {
+@@ -458,7 +465,7 @@
+     FatalError(software);
+   }
+ 
+-  if (setjmp(png_ptr->jmpbuf)) {
++  if (setjmp(png_jmpbuf(png_ptr))) {
+     png_destroy_write_struct(&png_ptr, &info_ptr);
+     return -1;
+   }
+@@ -489,8 +496,8 @@
+     png_set_filter(png_ptr, 0, filter);
+   }
+ 
+-  info_ptr->width = w;
+-  info_ptr->height = h;
++  _width = w;
++  _height = h;
+   if (w <= 0 || h <= 0) {
+     SetISTR(ISTR_WARNING, "%s:  image dimensions out of range (%dx%d)",
+       fbasename, w, h);
+@@ -498,7 +505,7 @@
+     return -1;
+   }
+ 
+-  info_ptr->interlace_type = interCB.val ? 1 : 0;
++  _interlace_type = interCB.val ? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE;
+ 
+   linesize = 0;   /* quiet a compiler warning */
+ 
+@@ -542,40 +549,44 @@
+         png_destroy_write_struct(&png_ptr, &info_ptr);
+         return -1;
+       }
+-      info_ptr->color_type = PNG_COLOR_TYPE_RGB;
+-      info_ptr->bit_depth = 8;
++      _color_type = PNG_COLOR_TYPE_RGB;
++      _bit_depth = 8;
+     } else /* ptype == PIC8 */ {
+       linesize = w;
+-      info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
++      _color_type = PNG_COLOR_TYPE_PALETTE;
+       if (numuniqcols <= 2)
+-        info_ptr->bit_depth = 1;
++        _bit_depth = 1;
+       else
+       if (numuniqcols <= 4)
+-        info_ptr->bit_depth = 2;
++        _bit_depth = 2;
+       else
+       if (numuniqcols <= 16)
+-        info_ptr->bit_depth = 4;
++        _bit_depth = 4;
+       else
+-        info_ptr->bit_depth = 8;
++        _bit_depth = 8;
+ 
+       for (i = 0; i < numuniqcols; i++) {
+         palette[i].red   = r1[i];
+         palette[i].green = g1[i];
+         palette[i].blue  = b1[i];
+       }
+-      info_ptr->num_palette = numuniqcols;
+-      info_ptr->palette = palette;
++/* cannot find a setter for this, unsure if it is necessary anymore...
+       info_ptr->valid |= PNG_INFO_PLTE;
++*/
++      /* set the header just in case it's needed */
++      png_set_IHDR(png_ptr,info_ptr,_width,_height,_bit_depth,_color_type,
++        _interlace_type,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
++      png_set_PLTE(png_ptr,info_ptr,palette,numuniqcols);
+     }
+   }
+ 
+   else if (colorType == F_GREYSCALE || colorType == F_BWDITHER) {
+-    info_ptr->color_type = PNG_COLOR_TYPE_GRAY;
++    _color_type = PNG_COLOR_TYPE_GRAY;
+     if (colorType == F_BWDITHER) {
+       /* shouldn't happen */
+       if (ptype == PIC24) FatalError("PIC24 and B/W Stipple in WritePNG()");
+ 
+-      info_ptr->bit_depth = 1;
++      _bit_depth = 1;
+       if (MONO(r1[0], g1[0], b1[0]) > MONO(r1[1], g1[1], b1[1])) {
+         remap[0] = 1;
+         remap[1] = 0;
+@@ -595,7 +606,7 @@
+           png_destroy_write_struct(&png_ptr, &info_ptr);
+           return -1;
+         }
+-        info_ptr->bit_depth = 8;
++        _bit_depth = 8;
+       }
+       else /* ptype == PIC8 */ {
+         int low_precision;
+@@ -617,7 +628,7 @@
+         for (; i < 256; i++)
+           remap[i]=0;  /* shouldn't be necessary, but... */
+ 
+-        info_ptr->bit_depth = 8;
++        _bit_depth = 8;
+ 
+         /* Note that this fails most of the time because of gamma */
+            /* (and that would be a bug:  GRR FIXME) */
+@@ -636,7 +647,7 @@
+           for (i = 0; i < numuniqcols; i++) {
+             remap[i] &= 0xf;
+           }
+-          info_ptr->bit_depth = 4;
++          _bit_depth = 4;
+ 
+           /* try to adjust to 2-bit precision grayscale */
+ 
+@@ -652,7 +663,7 @@
+           for (i = 0; i < numuniqcols; i++) {
+             remap[i] &= 3;
+           }
+-          info_ptr->bit_depth = 2;
++          _bit_depth = 2;
+ 
+           /* try to adjust to 1-bit precision grayscale */
+ 
+@@ -668,7 +679,7 @@
+           for (i = 0; i < numuniqcols; i++) {
+             remap[i] &= 1;
+           }
+-          info_ptr->bit_depth = 1;
++          _bit_depth = 1;
+         }
+       }
+     }
+@@ -677,6 +688,9 @@
+   else
+     png_error(png_ptr, "Unknown colorstyle in WritePNG");
+ 
++  png_set_IHDR(png_ptr,info_ptr,_width,_height,_bit_depth,_color_type,
++    _interlace_type,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
++
+   if ((text = (png_textp)malloc(sizeof(png_text)))) {
+     sprintf(software, "XV %s", REVDATE);
+ 
+@@ -685,20 +699,22 @@
+     text->text = software;
+     text->text_length = strlen(text->text);
+ 
+-    info_ptr->max_text = 1;
+-    info_ptr->num_text = 1;
+-    info_ptr->text = text;
++/* max_text seems to be internal only now, do not set
++    info_ptr->max_text = 1; */
++    png_set_text(png_ptr,info_ptr,text,1);
+   }
+ 
+   Display_Gamma = gDial.val;  /* Save the current gamma for loading */
+ 
+ // GRR FIXME:  add .Xdefaults option to omit writing gamma (size, cumulative 
errors when editing)--alternatively, modify save box to include "omit" checkbox
+-  info_ptr->gamma = 1.0/gDial.val;
+-  info_ptr->valid |= PNG_INFO_gAMA;
++  png_set_gAMA(png_ptr,info_ptr,1.0/gDial.val);
++/* doesn't seem to be a way to set valid directly anymore, unnecessary 
maybe.. 
++  info_ptr->valid |= PNG_INFO_gAMA; */
+ 
++/* might need to be png_write_info_before_PLTE() ... */
+   png_write_info(png_ptr, info_ptr);
+ 
+-  if (info_ptr->bit_depth < 8)
++  if (_bit_depth < 8)
+     png_set_packing(png_ptr);
+ 
+   pass=png_set_interlace_handling(png_ptr);
+@@ -711,13 +727,13 @@
+     int j;
+     p = pic;
+     for (j = 0; j < h; ++j) {
+-      if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY) {
++      if (_color_type == PNG_COLOR_TYPE_GRAY) {
+         int k;
+         for (k = 0; k < w; ++k)
+           png_line[k] = ptype==PIC24 ? MONO(p[k*3], p[k*3+1], p[k*3+2]) :
+                                        remap[pc2nc[p[k]]];
+         png_write_row(png_ptr, png_line);
+-      } else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) {
++      } else if (_color_type == PNG_COLOR_TYPE_PALETTE) {
+         int k;
+         for (k = 0; k < w; ++k)
+           png_line[k] = pc2nc[p[k]];
+@@ -739,28 +755,31 @@
+         (savecmnt = (char *)malloc((strlen(picComments) + 1)*sizeof(char)))) {
+       png_textp tp;
+       char *comment, *key;
++      int nt;
++      int mt;
+ 
+       strcpy(savecmnt, picComments);
+       key = savecmnt;
++      png_get_text(png_ptr,info_ptr,&tp,&mt); /* to get 'max_text' */
+       tp = text;
+-      info_ptr->num_text = 0;
++      nt = 0;      
+ 
+       comment = strchr(key, ':');
+ 
+       do  {
+         /* Allocate a larger structure for comments if necessary */
+-        if (info_ptr->num_text >= info_ptr->max_text)
++        if (nt >= mt)
+         {
+           if ((tp =
+-              realloc(text, (info_ptr->num_text + 2)*sizeof(png_text))) == 
NULL)
++              realloc(text, (nt + 2)*sizeof(png_text))) == NULL)
+           {
+             break;
+           }
+           else
+           {
+             text = tp;
+-            tp = &text[info_ptr->num_text];
+-            info_ptr->max_text += 2;
++            tp = &text[nt];
++            mt += 2;
+           }
+         }
+ 
+@@ -810,7 +829,7 @@
+             }
+ 
+             tp->compression = tp->text_length > 640 ? 0 : -1;
+-            info_ptr->num_text++;
++            nt++;
+             tp++;
+           }
+         }
+@@ -834,27 +853,29 @@
+           tp->text = key;
+           tp->text_length = q - key;
+           tp->compression = tp->text_length > 750 ? 0 : -1;
+-          info_ptr->num_text++;
++          nt++;
+           key = NULL;
+         }
+       } while (key && *key);
++      png_set_text(png_ptr,info_ptr,text,nt);
+     }
+     else {
+-      info_ptr->num_text = 0;
++      png_set_text(png_ptr,info_ptr,text,0);
+     }
+   }
+-  info_ptr->text = text;
+ 
+-  png_convert_from_time_t(&(info_ptr->mod_time), time(NULL));
+-  info_ptr->valid |= PNG_INFO_tIME;
++  png_convert_from_time_t(&_mod_time, time(NULL));
++  png_set_tIME(png_ptr,info_ptr,&_mod_time);
++/* dunno how to set validity
++  info_ptr->valid |= PNG_INFO_tIME; */
+ 
+   png_write_end(png_ptr, info_ptr);
+   fflush(fp);   /* just in case we core-dump before finishing... */
+ 
+   if (text) {
+     free(text);
+-    /* must do this or png_destroy_write_struct() 0.97+ will free text again: 
*/
+-    info_ptr->text = (png_textp)NULL;
++    /* must do this or png_destroy_write_struct() 0.97+ will free text again: 
++    info_ptr->text = (png_textp)NULL; */
+     if (savecmnt)
+     {
+       free(savecmnt);
+@@ -886,6 +907,14 @@
+   int pass;
+   int gray_to_rgb;
+   size_t commentsize;
++  /* temp storage vars for libpng15 migration */
++  int         
_bit_depth,_color_type,_interlace_type,_compression_type,_filter_type,_num_text,_num_palette;
++  png_uint_32 _width,_height;
++  png_timep   _mod_time;
++  double      _gamma;
++  png_textp   _text;
++  png_colorp  _palette;
++  png_color_16p _background;
+ 
+   fbasename = BaseName(fname);
+ 
+@@ -921,7 +950,7 @@
+     FatalError("malloc failure in LoadPNG");
+   }
+ 
+-  if (setjmp(png_ptr->jmpbuf)) {
++  if (setjmp(png_jmpbuf(png_ptr))) {
+     fclose(fp);
+     png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
+     if (!read_anything) {
+@@ -945,8 +974,10 @@
+ #endif
+   png_read_info(png_ptr, info_ptr);
+ 
+-  pinfo->w = pinfo->normw = info_ptr->width;
+-  pinfo->h = pinfo->normh = info_ptr->height;
++  
png_get_IHDR(png_ptr,info_ptr,&_width,&_height,&_bit_depth,&_color_type,&_interlace_type,NULL,NULL);
++
++  pinfo->w = pinfo->normw = _width;
++  pinfo->h = pinfo->normh = _height;
+   if (pinfo->w <= 0 || pinfo->h <= 0) {
+     SetISTR(ISTR_WARNING, "%s:  image dimensions out of range (%dx%d)",
+       fbasename, pinfo->w, pinfo->h);
+@@ -957,9 +988,9 @@
+   pinfo->frmType = F_PNG;
+ 
+   sprintf(pinfo->fullInfo, "PNG, %d bit ",
+-          info_ptr->bit_depth * info_ptr->channels);
++          _bit_depth * png_get_channels(png_ptr,info_ptr));
+ 
+-  switch(info_ptr->color_type) {
++  switch(_color_type) {
+     case PNG_COLOR_TYPE_PALETTE:
+       strcat(pinfo->fullInfo, "palette color");
+       break;
+@@ -983,15 +1014,17 @@
+ 
+   sprintf(pinfo->fullInfo + strlen(pinfo->fullInfo),
+         ", %sinterlaced. (%d bytes)",
+-        info_ptr->interlace_type ? "" : "non-", filesize);
++        _interlace_type ? "" : "non-", filesize);
+ 
+-  sprintf(pinfo->shrtInfo, "%lux%lu PNG", info_ptr->width, info_ptr->height);
++  sprintf(pinfo->shrtInfo, "%lux%lu PNG", _width, _height);
+ 
+-  if (info_ptr->bit_depth < 8)
++  if (_bit_depth < 8)
+       png_set_packing(png_ptr);
+ 
+-  if (info_ptr->valid & PNG_INFO_gAMA)
+-    png_set_gamma(png_ptr, Display_Gamma, info_ptr->gamma);
++  if (png_get_valid(png_ptr,info_ptr,PNG_INFO_gAMA)) {
++    png_get_gAMA(png_ptr,info_ptr,&_gamma);
++    png_set_gamma(png_ptr, Display_Gamma, _gamma);
++  }
+ /*
+  *else
+  *  png_set_gamma(png_ptr, Display_Gamma, 0.45);
+@@ -1000,7 +1033,7 @@
+   gray_to_rgb = 0;   /* quiet a compiler warning */
+ 
+   if (have_imagebg) {
+-    if (info_ptr->bit_depth == 16) {
++    if (_bit_depth == 16) {
+       my_background.red   = imagebgR;
+       my_background.green = imagebgG;
+       my_background.blue  = imagebgB;
+@@ -1013,8 +1046,8 @@
+     }
+     png_set_background(png_ptr, &my_background, PNG_BACKGROUND_GAMMA_SCREEN,
+                        0, Display_Gamma);
+-    if ((info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
+-         (info_ptr->color_type == PNG_COLOR_TYPE_GRAY && HAVE_tRNS)) &&
++    if ((_color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
++         (_color_type == PNG_COLOR_TYPE_GRAY && HAVE_tRNS)) &&
+         (imagebgR != imagebgG || imagebgR != imagebgB))  /* i.e., colored bg 
*/
+     {
+       png_set_gray_to_rgb(png_ptr);
+@@ -1022,8 +1055,9 @@
+       gray_to_rgb = 1;
+     }
+   } else {
+-    if (info_ptr->valid & PNG_INFO_bKGD) {
+-      png_set_background(png_ptr, &info_ptr->background,
++    if (png_get_valid(png_ptr,info_ptr,PNG_INFO_bKGD)) {
++      png_get_bKGD(png_ptr,info_ptr,&_background);
++      png_set_background(png_ptr, _background,
+                          PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
+     } else {
+       my_background.red = my_background.green = my_background.blue =
+@@ -1033,13 +1067,13 @@
+     }
+   }
+ 
+-  if (info_ptr->bit_depth == 16)
++  if (_bit_depth == 16)
+     png_set_strip_16(png_ptr);
+ 
+-  if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY ||
+-      info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
++  if (_color_type == PNG_COLOR_TYPE_GRAY ||
++      _color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
+   {
+-    if (info_ptr->bit_depth == 1)
++    if (_bit_depth == 1)
+       pinfo->colType = F_BWDITHER;
+     else
+       pinfo->colType = F_GREYSCALE;
+@@ -1049,9 +1083,11 @@
+   pass=png_set_interlace_handling(png_ptr);
+ 
+   png_read_update_info(png_ptr, info_ptr);
++  /* get HIDR again just in case the info_ptr changed */
++  
png_get_IHDR(png_ptr,info_ptr,&_width,&_height,&_bit_depth,&_color_type,&_interlace_type,NULL,NULL);
+ 
+-  if (info_ptr->color_type == PNG_COLOR_TYPE_RGB ||
+-     info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA || gray_to_rgb)
++  if (_color_type == PNG_COLOR_TYPE_RGB ||
++     _color_type == PNG_COLOR_TYPE_RGB_ALPHA || gray_to_rgb)
+   {
+     linesize = 3 * pinfo->w;
+     if (linesize/3 < pinfo->w) {   /* know pinfo->w > 0 (see above) */
+@@ -1065,16 +1101,17 @@
+   } else {
+     linesize = pinfo->w;
+     pinfo->type = PIC8;
+-    if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY ||
+-       info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
++    if (_color_type == PNG_COLOR_TYPE_GRAY ||
++       _color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
+       for (i = 0; i < 256; i++)
+         pinfo->r[i] = pinfo->g[i] = pinfo->b[i] = i;
+     } else {
+       pinfo->colType = F_FULLCOLOR;
+-      for (i = 0; i < info_ptr->num_palette; i++) {
+-        pinfo->r[i] = info_ptr->palette[i].red;
+-        pinfo->g[i] = info_ptr->palette[i].green;
+-        pinfo->b[i] = info_ptr->palette[i].blue;
++      png_get_PLTE(png_ptr,info_ptr,&_palette,&_num_palette);
++      for (i = 0; i < _num_palette; i++) {
++        pinfo->r[i] = _palette[i].red;
++        pinfo->g[i] = _palette[i].green;
++        pinfo->b[i] = _palette[i].blue;
+       }
+     }
+   }
+@@ -1092,7 +1129,7 @@
+     png_error(png_ptr, "can't allocate space for PNG image");
+   }
+ 
+-  png_start_read_image(png_ptr);
++  /*png_start_read_image(png_ptr); -- causes a warning and seems to be 
unnecessary */
+ 
+   for (i = 0; i < pass; i++) {
+     byte *p = pinfo->pic;
+@@ -1106,22 +1143,23 @@
+ 
+   png_read_end(png_ptr, info_ptr);
+ 
+-  if (info_ptr->num_text > 0) {
++  png_get_text(png_ptr,info_ptr,&_text,&_num_text);
++  if (_num_text > 0) {
+     commentsize = 1;
+ 
+-    for (i = 0; i < info_ptr->num_text; i++)
+-      commentsize += strlen(info_ptr->text[i].key) + 1 +
+-                     info_ptr->text[i].text_length + 2;
++    for (i = 0; i < _num_text; i++)
++      commentsize += strlen(_text[i].key) + 1 +
++                     _text[i].text_length + 2;
+ 
+     if ((pinfo->comment = malloc(commentsize)) == NULL) {
+       png_warning(png_ptr,"can't allocate comment string");
+     }
+     else {
+       pinfo->comment[0] = '\0';
+-      for (i = 0; i < info_ptr->num_text; i++) {
+-        strcat(pinfo->comment, info_ptr->text[i].key);
++      for (i = 0; i < _num_text; i++) {
++        strcat(pinfo->comment, _text[i].key);
+         strcat(pinfo->comment, "::");
+-        strcat(pinfo->comment, info_ptr->text[i].text);
++        strcat(pinfo->comment, _text[i].text);
+         strcat(pinfo->comment, "\n");
+       }
+     }
+@@ -1143,7 +1181,7 @@
+ {
+   SetISTR(ISTR_WARNING,"%s:  libpng error: %s", fbasename, message);
+ 
+-  longjmp(png_ptr->jmpbuf, 1);
++  longjmp(png_jmpbuf(png_ptr), 1);
+ }
+ 
+ 

Reply via email to