diff options
Diffstat (limited to 'office/Ted')
-rw-r--r-- | office/Ted/README | 14 | ||||
-rw-r--r-- | office/Ted/Ted.SlackBuild | 122 | ||||
-rw-r--r-- | office/Ted/Ted.info | 10 | ||||
-rw-r--r-- | office/Ted/doinst.sh | 3 | ||||
-rw-r--r-- | office/Ted/slack-desc | 19 | ||||
-rw-r--r-- | office/Ted/ted-2.21-libpng15.patch | 423 |
6 files changed, 591 insertions, 0 deletions
diff --git a/office/Ted/README b/office/Ted/README new file mode 100644 index 0000000000000..53f2b3916d4d6 --- /dev/null +++ b/office/Ted/README @@ -0,0 +1,14 @@ +Ted is a lightweight Word-processor that uses the RTF-format. It supports +multiple fonts and can print to PostScript printers. Ted is simple to use, +is easily compiled. + +Additional packages with spellcheckers for different languages exist and +can be downloaded from the Ted homepage. + +Ted can be compiled with different toolkits, which defaults to GTK. To +define another toolkit (Choices are GTK, MOTIF and QT), you can specify +this on the commandline: + +TOOLKIT=MOTIF ./Ted.SlackBuild + + diff --git a/office/Ted/Ted.SlackBuild b/office/Ted/Ted.SlackBuild new file mode 100644 index 0000000000000..8941db6600afa --- /dev/null +++ b/office/Ted/Ted.SlackBuild @@ -0,0 +1,122 @@ +#!/bin/sh + +# Slackware build script for Ted +# and edited by Hannes Worst <hannesworst@gmail.com>. +# Copyright by Hannes Worst +#-- +# Last edited: 30-dec-2009 +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Very heavily edited by the SlackBuilds.org project. --michiel + +PRGNAM=Ted +VERSION=${VERSION:-2.21} +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +TOOLKIT=${TOOLKIT:-GTK} +SRCNAM=$(echo $PRGNAM | tr T t) + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xvf $CWD/$SRCNAM-$VERSION.src.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find . \ + \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \; + +# Correct libpng error +patch -p0 < $CWD/ted-2.21-libpng15.patch + +# Let's edit Ted's Makefile, so this allows us to package Ted quite properly without +# actually having to need /usr/local/. +sed -i 's#./configure#./configure --prefix=/usr/share#g' $TMP/$PRGNAM-$VERSION/Makefile + +# Set the right ARCH +sed \ + -e "/^M_MACHINE/s|=.*|=$ARCH|" \ + -e "/^M_ARCH/s|=.*|=$ARCH|" \ + -i tedPackage/configure + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +make +make package.shared DESTDIR=$PKG CONFIGURE_OPTIONS="--with-$TOOLKIT \ + --prefix=/usr/share/$PRGNAM --bindir=/usr/bin \ + --build=$ARCH-slackware-linux" + +mkdir -p $PKG/usr/share +tar -xvf $TMP/$PRGNAM-$VERSION/${SRCNAM}Package/$SRCNAM-$VERSION-linux-$ARCH.tar.gz -C $PKG/usr/share/ +mv $PKG/usr/share/bin $PKG/usr/ + +mkdir -p $PKG/usr/man/man1 +mv $PKG/usr/share/$PRGNAM/{rtf2pdf,rtf2ps,$PRGNAM}.1 $PKG/usr/man/man1 +mv $PKG/usr/share/$PRGNAM/{rtf2pdf,rtf2ps}.sh $PKG/usr/bin/ + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cat $PKG/usr/share/$PRGNAM/$PRGNAM.ad.sample > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.ad.sample +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/usr/share/applications +mv $PKG/usr/share/$PRGNAM/varia/$PRGNAM.desktop $PKG/usr/share/applications/$PRGNAM.desktop +sed -i 's#/local/#/share/#' $PKG/usr/share/applications/$PRGNAM.desktop + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/office/Ted/Ted.info b/office/Ted/Ted.info new file mode 100644 index 0000000000000..e6ea6d3fbeb36 --- /dev/null +++ b/office/Ted/Ted.info @@ -0,0 +1,10 @@ +PRGNAM="Ted" +VERSION="2.21" +HOMEPAGE="http://www.nllgg.nl/Ted/" +DOWNLOAD="ftp://ftp.nluug.nl/pub/editors/ted/ted-2.21.src.tar.gz" +MD5SUM="34ae855938a3b364eb587cca504ba356" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +MAINTAINER="Hannes Worst" +EMAIL="hannesworst@gmail.com" +APPROVED="BP{k},Niels Horn" diff --git a/office/Ted/doinst.sh b/office/Ted/doinst.sh new file mode 100644 index 0000000000000..5fb28930db0b9 --- /dev/null +++ b/office/Ted/doinst.sh @@ -0,0 +1,3 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi diff --git a/office/Ted/slack-desc b/office/Ted/slack-desc new file mode 100644 index 0000000000000..f9d6b3049149a --- /dev/null +++ b/office/Ted/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' +# on the right side marks the last column you can put a character in. You must +# make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +Ted: Ted (a lightweight WYSIWYG wordprocessor) +Ted: +Ted: Ted is a lightweight wordprocessor that emphasizes simplicity, +Ted: but with many features. +Ted: There are additional packages for different languages +Ted: to be found on the hompage. Ted is simple to use and easily compiled. +Ted: It starts up quickly. +Ted: +Ted: Homepage: http:///www.nllgg.nl/Ted/ +Ted: +Ted: diff --git a/office/Ted/ted-2.21-libpng15.patch b/office/Ted/ted-2.21-libpng15.patch new file mode 100644 index 0000000000000..afd30f9a429bc --- /dev/null +++ b/office/Ted/ted-2.21-libpng15.patch @@ -0,0 +1,423 @@ +This patch is from netbsd pkgsrc + +ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/editors/ted/patches/ + +--- bitmap/bmpng.c ++++ bitmap/bmpng.c +@@ -20,23 +20,32 @@ + /* */ + /************************************************************************/ + +-static int bpPngiToBitmap( const png_info * pngi, ++static int bpPngiToBitmap( const png_structp pngp, ++ png_info * pngi, + BitmapDescription * bd ) + { + unsigned int col; ++ png_uint_32 res_x, res_y; ++ int unit_type= 0; + +- bd->bdPixelsWide= pngi->width; +- bd->bdPixelsHigh= pngi->height; ++ bd->bdPixelsWide= png_get_image_width( pngp, pngi ); ++ bd->bdPixelsHigh= png_get_image_height( pngp, pngi ); + bd->bdHasAlpha= 0; + +- switch( pngi->color_type ) ++ switch( png_get_color_type( pngp, pngi ) ) + { + case PNG_COLOR_TYPE_PALETTE: ++ { ++ int num_palette; ++ png_colorp palette; ++ ++ png_get_PLTE( pngp, pngi, &palette, &num_palette ); ++ + bd->bdColorEncoding= BMcoRGB8PALETTE; +- bd->bdColorCount= pngi->num_palette; ++ bd->bdColorCount= num_palette; + bd->bdBitsPerSample= 8; + bd->bdSamplesPerPixel= 3; +- bd->bdBitsPerPixel= pngi->bit_depth; ++ bd->bdBitsPerPixel= png_get_bit_depth( pngp, pngi ); + + bd->bdRGB8Palette= (RGB8Color *) + malloc( bd->bdColorCount* sizeof(RGB8Color) ); +@@ -46,47 +55,51 @@ static int bpPngiToBitmap( const png_inf + + for ( col= 0; col < bd->bdColorCount; col++ ) + { +- bd->bdRGB8Palette[col].rgb8Red= pngi->palette[col].red; +- bd->bdRGB8Palette[col].rgb8Green= pngi->palette[col].green; +- bd->bdRGB8Palette[col].rgb8Blue= pngi->palette[col].blue; ++ bd->bdRGB8Palette[col].rgb8Red= palette[col].red; ++ bd->bdRGB8Palette[col].rgb8Green= palette[col].green; ++ bd->bdRGB8Palette[col].rgb8Blue= palette[col].blue; + bd->bdRGB8Palette[col].rgb8Alpha= 0; + } ++ } + break; + + case PNG_COLOR_TYPE_RGB: + bd->bdColorEncoding= BMcoRGB; +- bd->bdBitsPerSample= pngi->bit_depth; +- bd->bdSamplesPerPixel= pngi->channels; +- bd->bdBitsPerPixel= pngi->pixel_depth; ++ bd->bdBitsPerSample= png_get_bit_depth( pngp, pngi ); ++ bd->bdSamplesPerPixel= png_get_channels( pngp, pngi ); ++ bd->bdBitsPerPixel= bd->bdSamplesPerPixel* bd->bdBitsPerSample; + break; + + case PNG_COLOR_TYPE_GRAY: + bd->bdColorEncoding= BMcoWHITEBLACK; +- bd->bdBitsPerSample= pngi->bit_depth; +- bd->bdSamplesPerPixel= pngi->channels; +- bd->bdBitsPerPixel= pngi->pixel_depth; ++ bd->bdBitsPerSample= png_get_bit_depth( pngp, pngi ); ++ bd->bdSamplesPerPixel= png_get_channels( pngp, pngi ); ++ bd->bdBitsPerPixel= bd->bdSamplesPerPixel* bd->bdBitsPerSample; + break; + + case PNG_COLOR_TYPE_RGB_ALPHA: + bd->bdHasAlpha= 1; + bd->bdColorEncoding= BMcoRGB; +- bd->bdBitsPerSample= pngi->bit_depth; +- bd->bdSamplesPerPixel= pngi->channels; +- bd->bdBitsPerPixel= pngi->pixel_depth; ++ bd->bdBitsPerSample= png_get_bit_depth( pngp, pngi ); ++ bd->bdSamplesPerPixel= png_get_channels( pngp, pngi ); ++ bd->bdBitsPerPixel= bd->bdSamplesPerPixel* bd->bdBitsPerSample; + break; + + case PNG_COLOR_TYPE_GRAY_ALPHA: + bd->bdHasAlpha= 1; +- LDEB(pngi->color_type); return -1; ++ LDEB(png_get_color_type( pngp, pngi )); return -1; + + default: +- LDEB(pngi->color_type); return -1; ++ LDEB(png_get_color_type( pngp, pngi )); return -1; + } + +- bd->bdBytesPerRow= pngi->rowbytes; ++ bd->bdBytesPerRow= png_get_rowbytes( pngp, pngi ); + bd->bdBufferLength= bd->bdBytesPerRow* bd->bdPixelsHigh; + +- switch( pngi->phys_unit_type ) ++ if ( ! png_get_pHYs( pngp, pngi, &res_x, &res_y, &unit_type ) ) ++ { unit_type= PNG_RESOLUTION_UNKNOWN; } ++ ++ switch( unit_type ) + { + case PNG_RESOLUTION_UNKNOWN: + bd->bdUnit= BMunPIXEL; +@@ -96,12 +109,12 @@ static int bpPngiToBitmap( const png_inf + + case PNG_RESOLUTION_METER: + bd->bdUnit= BMunM; +- bd->bdXResolution= pngi->x_pixels_per_unit; +- bd->bdYResolution= pngi->y_pixels_per_unit; ++ bd->bdXResolution= res_x; ++ bd->bdYResolution= res_y; + break; + + default: +- LDEB(pngi->phys_unit_type); ++ LDEB(unit_type); + return -1; + } + +@@ -119,11 +132,11 @@ static int bmPngReadContents( png_info * + unsigned char * buffer; + + numberOfPasses= 1; +- if ( pngi->interlace_type ) ++ if ( png_get_interlace_type( png, pngi ) ) + { numberOfPasses= png_set_interlace_handling( png ); } + +- if ( pngi->color_type == PNG_COLOR_TYPE_RGB && +- pngi->bit_depth == 16 ) ++ if ( png_get_color_type( png, pngi ) == PNG_COLOR_TYPE_RGB && ++ png_get_bit_depth( png, pngi ) == 16 ) + { + const unsigned short one= 1; + const unsigned char * testEndian= (const unsigned char *)&one; +@@ -133,9 +146,6 @@ static int bmPngReadContents( png_info * + } + + png_start_read_image( png ); +- /* +- png_read_update_info( png, pngi ); +- */ + + buffer= (unsigned char *)malloc( bd->bdBufferLength ); + if ( ! buffer ) +@@ -236,9 +246,9 @@ int bmPngReadPng( BitmapDescription * bd + + png_read_info( pngp, pngip ); + +- if ( bpPngiToBitmap( pngip, bd ) ) ++ if ( bpPngiToBitmap( pngp, pngip, bd ) ) + { +- LLLDEB(pngip->color_type,bd->bdColorCount,bd->bdRGB8Palette); ++ LLDEB(bd->bdColorCount,bd->bdRGB8Palette); + png_destroy_read_struct( &pngp, &pngip, (png_infop *)0 ); + return -1; + } +@@ -282,44 +292,43 @@ int bmCanWritePngFile( const BitmapDescr + + static int bpPngiFromBitmap( png_structp png, + png_info * pngi, ++ png_colorp * pPalette, + const BitmapDescription * bd ) + { +- png_info_init( pngi ); +- pngi->width= bd->bdPixelsWide; +- pngi->height= bd->bdPixelsHigh; ++ int bit_depth; ++ int color_type; ++ png_color_8 sig_bit; + + switch( bd->bdUnit ) + { + case BMunM: +- pngi->phys_unit_type= PNG_RESOLUTION_METER; +- pngi->x_pixels_per_unit= bd->bdXResolution; +- pngi->y_pixels_per_unit= bd->bdYResolution; +- pngi->valid |= PNG_INFO_pHYs; ++ png_set_pHYs( png, pngi, ++ bd->bdXResolution, ++ bd->bdYResolution, ++ PNG_RESOLUTION_METER); + break; + + case BMunINCH: +- pngi->phys_unit_type= PNG_RESOLUTION_METER; +- pngi->x_pixels_per_unit= (int)( 39.37* bd->bdXResolution ); +- pngi->y_pixels_per_unit= (int)( 39.37* bd->bdYResolution ); +- pngi->valid |= PNG_INFO_pHYs; ++ png_set_pHYs( png, pngi, ++ (int)( 39.37* bd->bdXResolution ), ++ (int)( 39.37* bd->bdYResolution ), ++ PNG_RESOLUTION_METER); + break; + + case BMunPOINT: +- pngi->phys_unit_type= PNG_RESOLUTION_METER; +- pngi->x_pixels_per_unit= POINTS_PER_M* bd->bdXResolution; +- pngi->y_pixels_per_unit= POINTS_PER_M* bd->bdYResolution; +- pngi->valid |= PNG_INFO_pHYs; ++ png_set_pHYs( png, pngi, ++ POINTS_PER_M* bd->bdXResolution, ++ POINTS_PER_M* bd->bdYResolution, ++ PNG_RESOLUTION_METER); + break; + + case BMunPIXEL: +- pngi->phys_unit_type= PNG_RESOLUTION_UNKNOWN; +- pngi->x_pixels_per_unit= 1; +- pngi->y_pixels_per_unit= 1; ++ png_set_pHYs(png, pngi, 1, 1, PNG_RESOLUTION_UNKNOWN); + break; + + default: + LDEB(bd->bdUnit); +- pngi->phys_unit_type= PNG_RESOLUTION_UNKNOWN; ++ png_set_pHYs(png, pngi, 1, 1, PNG_RESOLUTION_UNKNOWN); + break; + } + +@@ -329,41 +338,48 @@ static int bpPngiFromBitmap( png_structp + + case BMcoBLACKWHITE: + case BMcoWHITEBLACK: +- pngi->bit_depth= bd->bdBitsPerPixel; ++ bit_depth= bd->bdBitsPerPixel; + if ( bd->bdHasAlpha ) +- { pngi->color_type= PNG_COLOR_TYPE_GRAY_ALPHA; } +- else{ pngi->color_type= PNG_COLOR_TYPE_GRAY; } +- pngi->sig_bit.gray= bd->bdBitsPerSample; ++ { color_type= PNG_COLOR_TYPE_GRAY_ALPHA; } ++ else{ color_type= PNG_COLOR_TYPE_GRAY; } ++ sig_bit.gray= bd->bdBitsPerSample; + break; + + case BMcoRGB: +- pngi->bit_depth= bd->bdBitsPerSample; ++ bit_depth= bd->bdBitsPerSample; + if ( bd->bdHasAlpha ) +- { pngi->color_type= PNG_COLOR_TYPE_RGB_ALPHA; } +- else{ pngi->color_type= PNG_COLOR_TYPE_RGB; } +- pngi->sig_bit.red= bd->bdBitsPerSample; +- pngi->sig_bit.green= bd->bdBitsPerSample; +- pngi->sig_bit.blue= bd->bdBitsPerSample; ++ { color_type= PNG_COLOR_TYPE_RGB_ALPHA; } ++ else{ color_type= PNG_COLOR_TYPE_RGB; } ++ sig_bit.red= bd->bdBitsPerSample; ++ sig_bit.green= bd->bdBitsPerSample; ++ sig_bit.blue= bd->bdBitsPerSample; + break; + + case BMcoRGB8PALETTE: +- pngi->bit_depth= bd->bdBitsPerPixel; +- pngi->color_type= PNG_COLOR_TYPE_PALETTE; ++ bit_depth= bd->bdBitsPerPixel; ++ color_type= PNG_COLOR_TYPE_PALETTE; + +- pngi->valid |= PNG_INFO_PLTE; +- pngi->palette= (png_color *)malloc( 256* sizeof( png_color ) ); +- if ( ! pngi->palette ) +- { XDEB(pngi->palette); return -1; } +- pngi->num_palette= bd->bdColorCount; +- pngi->sig_bit.red= bd->bdBitsPerSample; +- pngi->sig_bit.green= bd->bdBitsPerSample; +- pngi->sig_bit.blue= bd->bdBitsPerSample; +- for ( i= 0; i < pngi->num_palette; i++ ) ++ if ( bd->bdColorCount > PNG_MAX_PALETTE_LENGTH ) + { +- pngi->palette[i].red= bd->bdRGB8Palette[i].rgb8Red; +- pngi->palette[i].green= bd->bdRGB8Palette[i].rgb8Green; +- pngi->palette[i].blue= bd->bdRGB8Palette[i].rgb8Blue; ++ LLDEB(bd->bdColorCount,PNG_MAX_PALETTE_LENGTH); ++ return -1; + } ++ ++ *pPalette= (png_color *)malloc( PNG_MAX_PALETTE_LENGTH* ++ sizeof( png_color ) ); ++ if ( ! *pPalette ) ++ { XDEB(*pPalette); return -1; } ++ sig_bit.red= bd->bdBitsPerSample; ++ sig_bit.green= bd->bdBitsPerSample; ++ sig_bit.blue= bd->bdBitsPerSample; ++ for ( i= 0; i < bd->bdColorCount; i++ ) ++ { ++ (*pPalette)[i].red= bd->bdRGB8Palette[i].rgb8Red; ++ (*pPalette)[i].green= bd->bdRGB8Palette[i].rgb8Green; ++ (*pPalette)[i].blue= bd->bdRGB8Palette[i].rgb8Blue; ++ } ++ ++ png_set_PLTE( png, pngi, (*pPalette), bd->bdColorCount ); + break; + + default: +@@ -371,7 +387,13 @@ static int bpPngiFromBitmap( png_structp + return -1; + } + +- pngi->interlace_type= 0; ++ png_set_sBIT( png, pngi, &sig_bit ); ++ png_set_IHDR( png, pngi, ++ bd->bdPixelsWide, bd->bdPixelsHigh, ++ bit_depth, color_type, ++ PNG_INTERLACE_NONE, ++ PNG_COMPRESSION_TYPE_BASE, ++ PNG_FILTER_TYPE_BASE ); + + return 0; + } +@@ -395,8 +417,8 @@ static void bmPngWriteContents( png_stru + } + } + +- if ( pngi->color_type == PNG_COLOR_TYPE_RGB && +- bd->bdBitsPerSample == 16 ) ++ if ( png_get_color_type( png, pngi ) == PNG_COLOR_TYPE_RGB && ++ bd->bdBitsPerSample == 16 ) + { + const unsigned short one= 1; + const unsigned char * testEndian= (const unsigned char *)&one; +@@ -431,9 +453,9 @@ static void bmPngWriteContents( png_stru + from= scratch; + } + +- if ( pngi->color_type == PNG_COLOR_TYPE_RGB && +- bd->bdBitsPerSample == 16 && +- scratch ) ++ if ( png_get_color_type( png, pngi ) == PNG_COLOR_TYPE_RGB && ++ bd->bdBitsPerSample == 16 && ++ scratch ) + { + int col; + const BmUint16 * fr= (const BmUint16 *)from; +@@ -453,10 +475,6 @@ static void bmPngWriteContents( png_stru + + png_write_end( png, pngi ); + +- if ( bd->bdColorEncoding == BMcoRGB8PALETTE && +- pngi->palette ) +- { free( pngi->palette ); } +- + if ( scratch ) + { free( scratch ); } + +@@ -510,50 +528,43 @@ int bmPngWritePng( const BitmapDescript + const unsigned char * buffer, + SimpleOutputStream * sos ) + { ++ int rval= 0; + png_structp pngp= (png_structp)0; + png_infop pngip= (png_infop)0; ++ png_colorp palette= (png_colorp)0; + + pngp = png_create_write_struct( PNG_LIBPNG_VER_STRING, (void *)0, + (png_error_ptr)0, (png_error_ptr)0 ); + if ( ! pngp ) +- { LDEB(1); return -1; } ++ { XDEB(pngp); rval= -1; goto ready; } + + pngip = png_create_info_struct( pngp ); + if ( ! pngip ) +- { +- LDEB(1); +- png_destroy_write_struct( &pngp, (png_infop *)0 ); +- return -1; +- } ++ { XDEB(pngip); rval= -1; goto ready; } ++ ++ /* ++ As the info struct is built by libpng this is not needed: ++ (The call will disappear from libpng in version 1.4) ++ png_info_init( pngi ); ++ */ + + if ( setjmp( png_jmpbuf( pngp ) ) ) +- { +- LDEB(1); +- png_destroy_write_struct( &pngp, &pngip ); +- /* Crashes: +- if ( bd->bdColorEncoding == BMcoRGB8PALETTE && +- pngip->palette ) +- { free( pngip->palette ); } +- */ +- return -1; +- } ++ { LDEB(1); rval= -1; goto ready; } + + png_init_io( pngp, (FILE *)0 ); + png_set_write_fn( pngp, (void *)sos, bmPngWriteBytes, bmPngFlushBytes ); + +- if ( bpPngiFromBitmap( pngp, pngip, bd ) ) +- { +- LDEB(bd->bdColorEncoding); +- png_destroy_write_struct( &pngp, &pngip ); +- return -1; +- } +- +- /* +- png_write_info( pngp, pngip ); +- */ ++ if ( bpPngiFromBitmap( pngp, pngip, &palette, bd ) ) ++ { LDEB(bd->bdColorEncoding); rval= -1; goto ready; } + + bmPngWriteContents( pngp, pngip, buffer, bd ); + ++ ready: ++ ++ if ( palette ) ++ { free( palette ); } ++ + png_destroy_write_struct( &pngp, &pngip ); +- return 0; ++ ++ return rval; + } |