diff --git a/harbour/ChangeLog.txt b/harbour/ChangeLog.txt index dc6812fa0f..c178e9e91b 100644 --- a/harbour/ChangeLog.txt +++ b/harbour/ChangeLog.txt @@ -10,6 +10,54 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2013-02-02 19:53 UTC+0100 Viktor Szakats (harbour syenar.net) + * utils/hbmk2/hbmk2.*.po + * utils/hbmk2/hbmk2.prg + * further clarification around -comp/-plat help texts + + * README.txt + ! typos + + * contrib/hbnf/setlastk.c + ! map to HB_KEYSETLAST() instead of deprecated synonym + + * contrib/hbct/charlihb.c + * contrib/hbct/charophb.c + * contrib/hbct/ctwfunc.c + * contrib/hbct/disk.c + * contrib/hbct/screen1.c + + HB_EXTENSION tags for Harbour extensions + + * contrib/hbct/screen2.c + + TODOs for missing unicode support + + * contrib/hbct/tests/csetarge.prg + + NOTE why CTOD( "" ) must be used here + + * tests/dates3.prg + * website/samples/dates3.prg.html + * use HB_STOD() instead of CTOD( "" ) + ! typos + + * tests/transtst.prg + * use HB_STOD() instead of STOD() + + * contrib/hbtinymt/3rd/tinymt/tinymt.hbp + * contrib/hbtinymt/3rd/tinymt/* + * src/3rd/jpeg/Makefile + * src/3rd/jpeg/* + * src/3rd/png/Makefile + * src/3rd/png/* + * updated using 3rdpatch to + jpeg 9, libpng 1.5.14, tinymt 1.0.2 + + * contrib/hbct/cterror.ch + * contrib/hbct/video.c + * contrib/hbnf/popadder.prg + * contrib/hbnf/xbox.prg + * bin/harbour.ucf + * formatting + 2013-02-01 15:43 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * harbour/src/rtl/run.c * restored dummy if() to pacify "unused result" warning - some compilers @@ -76,7 +124,7 @@ * comment made bit more precise * src/codepage/cpua866.c - + comment added about the different from standard + + comment added about the differences from standard Ukrainian collation 2013-01-31 22:41 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) @@ -175,8 +223,7 @@ According to this page, these two chars are part of the Ukrainian alphabet: https://en.wikipedia.org/wiki/Ukrainian_language#Alphabet - [INCOMPATIBLE] - If you use "UA866" CP for indexing, make sure to reindex + [REVERTED] ; TOFIX: RUISO: This has 4 extra character pairs compared to all diff --git a/harbour/README.txt b/harbour/README.txt index 19df9fdbc9..0943d78049 100644 --- a/harbour/README.txt +++ b/harbour/README.txt @@ -715,7 +715,8 @@ TABLE OF CONTENT - HB_USER_AFLAGS User linker options for libraries - HB_USER_DFLAGS User linker options for dynamic libraries - (* Only set these if autodetection doesn't suite your purpose:) + Set these only if autodetection doesn't suit your purpose: + - HB_PLATFORM Override platform autodetection - HB_COMPILER Override C compiler autodetection See this section for possible values: diff --git a/harbour/bin/harbour.ucf b/harbour/bin/harbour.ucf index 241d06a41c..5d56d73212 100644 --- a/harbour/bin/harbour.ucf +++ b/harbour/bin/harbour.ucf @@ -3,7 +3,7 @@ # # --------------------------------------------------------------- -# uncrustify config file for Harbour Project C/C++ sources. +# uncrustify config file for Harbour C sources. # http://uncrustify.sourceforge.net/ # # Viktor Szakats (harbour syenar.net) diff --git a/harbour/contrib/hbct/charlihb.c b/harbour/contrib/hbct/charlihb.c index 9d8a415dff..751d43dd15 100644 --- a/harbour/contrib/hbct/charlihb.c +++ b/harbour/contrib/hbct/charlihb.c @@ -56,12 +56,12 @@ #include "ct.h" -HB_FUNC( CHARSLIST ) +HB_FUNC( CHARSLIST ) /* HB_EXTENSION */ { ct_charlist( CT_CHARLIST_CHARSLIST ); } -HB_FUNC( CHARHIST ) +HB_FUNC( CHARHIST ) /* HB_EXTENSION */ { ct_charlist( CT_CHARLIST_CHARHIST ); } diff --git a/harbour/contrib/hbct/charophb.c b/harbour/contrib/hbct/charophb.c index 5afa9d529f..7b1e0e235a 100644 --- a/harbour/contrib/hbct/charophb.c +++ b/harbour/contrib/hbct/charophb.c @@ -59,27 +59,27 @@ #include "ct.h" -HB_FUNC( CHARSUB ) +HB_FUNC( CHARSUB ) /* HB_EXTENSION */ { ct_charop( CT_CHAROP_CHARSUB ); } -HB_FUNC( CHARSHL ) +HB_FUNC( CHARSHL ) /* HB_EXTENSION */ { ct_charop( CT_CHAROP_CHARSHL ); } -HB_FUNC( CHARSHR ) +HB_FUNC( CHARSHR ) /* HB_EXTENSION */ { ct_charop( CT_CHAROP_CHARSHR ); } -HB_FUNC( CHARRLL ) +HB_FUNC( CHARRLL ) /* HB_EXTENSION */ { ct_charop( CT_CHAROP_CHARRLL ); } -HB_FUNC( CHARRLR ) +HB_FUNC( CHARRLR ) /* HB_EXTENSION */ { ct_charop( CT_CHAROP_CHARRLR ); } diff --git a/harbour/contrib/hbct/cterror.ch b/harbour/contrib/hbct/cterror.ch index 7a841271fd..caeac5021f 100644 --- a/harbour/contrib/hbct/cterror.ch +++ b/harbour/contrib/hbct/cterror.ch @@ -57,7 +57,7 @@ #define _CTERROR_CH /* sub code ranges */ -#define CT_ERROR_MATHLIB_RANGEL 100 /* math lib errors */ +#define CT_ERROR_MATHLIB_RANGEL 100 /* math lib errors */ #define CT_ERROR_MATHLIB_RANGEH 199 #define CT_ERROR_GENERAL_RANGEL 1000 /* general functions */ @@ -560,7 +560,7 @@ #define CT_ERROR_ISDBT 7174 /* switch and state functions */ -#define CT_ERROR_CSETALL 7310 /* TODO: change last digit */ +#define CT_ERROR_CSETALL 7310 /* TODO: change last digit */ #define CT_ERROR_CSETCLIP 7320 #define CT_ERROR_CSETDATE 7330 #define CT_ERROR_CSETDECI 7340 @@ -606,7 +606,7 @@ #define CT_ERROR_SETLASTKEY 7740 /* system info functions */ -#define CT_ERROR_BIOSDATE 7810 /* TODO: change last digit */ +#define CT_ERROR_BIOSDATE 7810 /* TODO: change last digit */ #define CT_ERROR_BOOTCOLD 7820 #define CT_ERROR_BOOTWARM 7830 #define CT_ERROR_CPUTYPE 7840 diff --git a/harbour/contrib/hbct/ctwfunc.c b/harbour/contrib/hbct/ctwfunc.c index 78c2bd8ffd..f50c66a181 100644 --- a/harbour/contrib/hbct/ctwfunc.c +++ b/harbour/contrib/hbct/ctwfunc.c @@ -168,17 +168,17 @@ HB_FUNC( WOPEN ) int iColor; /* 6-th (color) and 7-th (lVisible) parameters are Harbour extensions */ - iColor = hb_ctColorParam( 6, -1 ); /* Harbour extension */ + iColor = hb_ctColorParam( 6, -1 ); /* Harbour extension */ /* HB_EXTENSION */ hb_retni( hb_ctwCreateWindow( hb_parni( 1 ), hb_parni( 2 ), hb_parni( 3 ), hb_parni( 4 ), hb_parl( 5 ), iColor, - hb_parldef( 7, 1 ) ) ); + hb_parldef( 7, 1 ) ) ); /* HB_EXTENSION */ } HB_FUNC( WCLOSE ) { /* 1-st parameter (window handle) is Harbour extension */ - hb_retni( hb_ctwCloseWindow( HB_ISNUM( 1 ) ? hb_parni( 1 ) : + hb_retni( hb_ctwCloseWindow( HB_ISNUM( 1 ) ? hb_parni( 1 ) : /* HB_EXTENSION */ hb_ctwCurrentWindow() ) ); } @@ -191,7 +191,7 @@ HB_FUNC( WSELECT ) { /* 2-nd parameter (fBringToTop) is Harbour extension */ hb_retni( HB_ISNUM( 1 ) ? hb_ctwSelectWindow( hb_parni( 1 ), - hb_parldef( 2, 1 ) ) : + hb_parldef( 2, 1 ) ) : /* HB_EXTENSION */ hb_ctwCurrentWindow() ); } @@ -245,7 +245,7 @@ HB_FUNC( WBOX ) szBoxBuf[ 9 ] = '\0'; } - iColor = hb_ctColorParam( 2, -1 ); /* Harbour extension */ + iColor = hb_ctColorParam( 2, -1 ); /* Harbour extension */ /* HB_EXTENSION */ hb_retni( hb_ctwAddWindowBox( hb_ctwCurrentWindow(), szBoxBuf, iColor ) ); } @@ -451,29 +451,25 @@ HB_FUNC_TRANSLATE( _WSTACK, WLIST ) /* Temporary Harbour extensions to test some extended CTW functionality */ -/* Harbour extension */ -HB_FUNC( WHIDE ) +HB_FUNC( WHIDE ) /* HB_EXTENSION */ { hb_ctwVisible( HB_ISNUM( 1 ) ? hb_parni( 1 ) : hb_ctwCurrentWindow(), HB_CTW_HIDDEN ); } -/* Harbour extension */ -HB_FUNC( WSHOW ) +HB_FUNC( WSHOW ) /* HB_EXTENSION */ { hb_ctwVisible( HB_ISNUM( 1 ) ? hb_parni( 1 ) : hb_ctwCurrentWindow(), HB_CTW_VISIBLE ); } -/* Harbour extension */ -HB_FUNC( WSHADOW ) +HB_FUNC( WSHADOW ) /* HB_EXTENSION */ { hb_retni( hb_ctwSetWindowShadow( hb_ctwCurrentWindow(), hb_parnidef( 1, HB_CTW_SHADOW_UNDEF ) /* nAttr */ ) ); } -/* Harbour extension */ -HB_FUNC( WLEVEL ) +HB_FUNC( WLEVEL ) /* HB_EXTENSION */ { hb_retni( hb_ctwSetWindowLevel( hb_ctwCurrentWindow(), hb_parnidef( 1, HB_CTW_UNDEF ) /* nLevel */ ) ); diff --git a/harbour/contrib/hbct/disk.c b/harbour/contrib/hbct/disk.c index 4d6cfdda87..da14941c10 100644 --- a/harbour/contrib/hbct/disk.c +++ b/harbour/contrib/hbct/disk.c @@ -146,13 +146,13 @@ HB_FUNC( DRIVETYPE ) uiType = 3; /* Hard Drive - Clipper compatible */ break; case DRIVE_CDROM: - uiType = 4; /* CD-Rom Drive - xHarbour extension */ + uiType = 4; /* CD-Rom Drive - xHarbour extension */ /* HB_EXTENSION */ break; case DRIVE_REMOTE: - uiType = 5; /* Network Drive - xHarbour extension */ + uiType = 5; /* Network Drive - xHarbour extension */ /* HB_EXTENSION */ break; default: - uiType = 9; /* Unknown Drive - xHarbour extension */ + uiType = 9; /* Unknown Drive - xHarbour extension */ /* HB_EXTENSION */ break; } hb_retni( uiType ); diff --git a/harbour/contrib/hbct/screen1.c b/harbour/contrib/hbct/screen1.c index 84bbebd680..03363298ff 100644 --- a/harbour/contrib/hbct/screen1.c +++ b/harbour/contrib/hbct/screen1.c @@ -427,7 +427,7 @@ HB_FUNC( COLORWIN ) hb_retc_null(); } -HB_FUNC( SCREENTEXT ) +HB_FUNC( SCREENTEXT ) /* HB_EXTENSION */ { int iTop, iLeft, iBottom, iRight; char * pBuffer, * szText; diff --git a/harbour/contrib/hbct/screen2.c b/harbour/contrib/hbct/screen2.c index a4cdb9ebea..4508694ed1 100644 --- a/harbour/contrib/hbct/screen2.c +++ b/harbour/contrib/hbct/screen2.c @@ -111,7 +111,7 @@ HB_FUNC( SAYDOWN ) hb_retc_null(); } -HB_FUNC( SAYSPREAD ) +HB_FUNC( SAYSPREAD ) /* TODO: Unicode support */ { HB_SIZE nLen = hb_parclen( 1 ); @@ -168,7 +168,7 @@ HB_FUNC( SAYSPREAD ) hb_retc_null(); } -HB_FUNC( SAYMOVEIN ) +HB_FUNC( SAYMOVEIN ) /* TODO: Unicode support */ { int iLen = ( int ) hb_parclen( 1 ); @@ -371,7 +371,7 @@ HB_FUNC( SCREENSTR ) hb_retc_null(); } -HB_FUNC( STRSCREEN ) +HB_FUNC( STRSCREEN ) /* TODO: Unicode support */ { HB_SIZE nLen = hb_parclen( 1 ); diff --git a/harbour/contrib/hbct/tests/csetarge.prg b/harbour/contrib/hbct/tests/csetarge.prg index 620a4efa17..e269436725 100644 --- a/harbour/contrib/hbct/tests/csetarge.prg +++ b/harbour/contrib/hbct/tests/csetarge.prg @@ -265,7 +265,7 @@ FUNCTION myerrhandler( oerr ) CASE nDigit == 5 ?? "Date." - cInput := CToD( "" ) + cInput := CToD( "" ) /* Need to compile with CA-Cl*pper, too */ CASE nDigit == 6 ?? "Block." diff --git a/harbour/contrib/hbct/video.c b/harbour/contrib/hbct/video.c index a00de0f7eb..ae6c71b1fc 100644 --- a/harbour/contrib/hbct/video.c +++ b/harbour/contrib/hbct/video.c @@ -60,15 +60,15 @@ #include "hbapigt.h" #if defined( HB_OS_DOS ) -# if defined( __DJGPP__ ) -# include -# include -# include -# include -# endif -#endif /* HB_OS_DOS */ + #if defined( __DJGPP__ ) + #include + #include + #include + #include + #endif +#endif -# include "ctvideo.ch" +#include "ctvideo.ch" HB_FUNC( CHARPIX ) { @@ -192,9 +192,9 @@ HB_FUNC( SETFONT ) height = len / count; #if defined( __DJGPP__ ) -# ifndef __tb_size -# define __tb_size _go32_info_block.size_of_transfer_buffer -# endif + #ifndef __tb_size + #define __tb_size _go32_info_block.size_of_transfer_buffer + #endif { __dpmi_regs r; diff --git a/harbour/contrib/hbnf/popadder.prg b/harbour/contrib/hbnf/popadder.prg index 42839c473b..8d9671b548 100644 --- a/harbour/contrib/hbnf/popadder.prg +++ b/harbour/contrib/hbnf/popadder.prg @@ -1245,24 +1245,24 @@ STATIC FUNCTION _ftWinTitle( cTheTitle, cTopOrBot ) STATIC FUNCTION _ftInitColors() t_aWinColor := { ; - { "GR+/BG", "GR+/G", "B+/RB", "G+/R" },; - { "R+/N", "W+/RB", "W+/BG", "GR+/B" },; - { "GR+/N", "GR+/N", "GR+/N", "GR+/N" },; - { "B/BG", "BG+/G", "W+/RB", "BG+/R" },; - { "W+/BG", "W+/G", "GR+/RB", "W+/R" },; - { "GR+/B", "GR+/R", "R+/B", "W+/BG" },; - { "N/N", "N/N", "N/N", "N/N" } } + { "GR+/BG", "GR+/G", "B+/RB", "G+/R" }, ; + { "R+/N", "W+/RB", "W+/BG", "GR+/B" }, ; + { "GR+/N", "GR+/N", "GR+/N", "GR+/N" }, ; + { "B/BG", "BG+/G", "W+/RB", "BG+/R" }, ; + { "W+/BG", "W+/G", "GR+/RB", "W+/R" }, ; + { "GR+/B", "GR+/R", "R+/B", "W+/BG" }, ; + { "N/N", "N/N", "N/N", "N/N" } } t_aStdColor := { ; - "BG+*/RB",; - "GR+/R",; - "GR+/N",; - "W/B",; - "GR+/N",; - "GR+/GR",; + "BG+*/RB", ; + "GR+/R", ; + "GR+/N", ; + "W/B", ; + "GR+/N", ; + "GR+/GR", ; { ; - "W+/B", "W/B", "G+/B", "R+/B",; - "GR+/B", "BG+/B", "B+/B", "G+/B" },; + "W+/B", "W/B", "G+/B", "R+/B", ; + "GR+/B", "BG+/B", "B+/B", "G+/B" }, ; "N/N" } RETURN NIL diff --git a/harbour/contrib/hbnf/setlastk.c b/harbour/contrib/hbnf/setlastk.c index 4a8ede1047..3369361635 100644 --- a/harbour/contrib/hbnf/setlastk.c +++ b/harbour/contrib/hbnf/setlastk.c @@ -67,4 +67,4 @@ #include "hbapi.h" -HB_FUNC_TRANSLATE( FT_LASTKEY, HB_SETLASTKEY ) +HB_FUNC_TRANSLATE( FT_LASTKEY, HB_KEYSETLAST ) diff --git a/harbour/contrib/hbnf/xbox.prg b/harbour/contrib/hbnf/xbox.prg index 1664cadb17..9d7b24a5df 100644 --- a/harbour/contrib/hbnf/xbox.prg +++ b/harbour/contrib/hbnf/xbox.prg @@ -33,14 +33,15 @@ but only if _SET_EXACT was set to .F., Harbour accepts them that way regardless of _SET_EXACT setting. [vszakats] */ -FUNCTION ft_XBox( cJustType, ; // "L" -> left, otherwise centered +FUNCTION ft_XBox( ; + cJustType, ; // "L" -> left, otherwise centered cRetWait, ; // "W" -> wait for keypress before continuing - cBorType, ; // "D" -> double, anything else single border - cBorColor, ; // color string for border - cBoxColor, ; // color string for text - nStartRow, ; // upper row of box. 99=center vertically - nStartCol, ; // left edge of box. 99=center horizontally - cLine1, cLine2, cLine3, cLine4, cLine5, cLine6, cLine7, cLine8 ) + cBorType, ; // "D" -> double, anything else single border + cBorColor, ; // color string for border + cBoxColor, ; // color string for text + nStartRow, ; // upper row of box. 99=center vertically + nStartCol, ; // left edge of box. 99=center horizontally + cLine1, cLine2, cLine3, cLine4, cLine5, cLine6, cLine7, cLine8 ) LOCAL nLLen := 0 LOCAL nLCol diff --git a/harbour/contrib/hbtinymt/3rd/tinymt/LICENSE.txt b/harbour/contrib/hbtinymt/3rd/tinymt/LICENSE.txt index af038869bb..2ba0bf4ab3 100644 --- a/harbour/contrib/hbtinymt/3rd/tinymt/LICENSE.txt +++ b/harbour/contrib/hbtinymt/3rd/tinymt/LICENSE.txt @@ -1,5 +1,6 @@ -Copyright (c) 2011 Mutsuo Saito, Makoto Matsumoto, Hiroshima -University and The University of Tokyo. All rights reserved. +Copyright (c) 2011, 2013 Mutsuo Saito, Makoto Matsumoto, +Hiroshima University and The University of Tokyo. +All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/harbour/contrib/hbtinymt/3rd/tinymt/tinymt.dif b/harbour/contrib/hbtinymt/3rd/tinymt/tinymt.dif index 7ce975cb3a..a054a6408e 100644 --- a/harbour/contrib/hbtinymt/3rd/tinymt/tinymt.dif +++ b/harbour/contrib/hbtinymt/3rd/tinymt/tinymt.dif @@ -1,6 +1,6 @@ diff -urN tinymt.orig\tinymt32.c tinymt\tinymt32.c ---- tinymt.orig\tinymt32.c Fri Jun 29 17:16:46 2012 -+++ tinymt\tinymt32.c Fri Jun 29 17:16:46 2012 +--- tinymt.orig\tinymt32.c Sat Feb 02 19:51:25 2013 ++++ tinymt\tinymt32.c Sat Feb 02 19:51:25 2013 @@ -60,17 +60,18 @@ * @param seed a 32-bit unsigned integer used as a seed. */ @@ -23,8 +23,8 @@ diff -urN tinymt.orig\tinymt32.c tinymt\tinymt32.c } } diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h ---- tinymt.orig\tinymt32.h Fri Jun 29 17:16:46 2012 -+++ tinymt\tinymt32.h Fri Jun 29 17:16:46 2012 +--- tinymt.orig\tinymt32.h Sat Feb 02 19:51:25 2013 ++++ tinymt\tinymt32.h Sat Feb 02 19:51:25 2013 @@ -16,8 +16,17 @@ * LICENSE.txt */ @@ -45,7 +45,7 @@ diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h #define TINYMT32_MEXP 127 #define TINYMT32_SH0 1 -@@ -48,12 +57,12 @@ +@@ -52,12 +61,12 @@ * @param random not used * @return always 127 */ @@ -60,7 +60,7 @@ diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h return TINYMT32_MEXP; } #endif -@@ -63,7 +72,7 @@ +@@ -67,7 +76,7 @@ * Users should not call this function directly. * @param random tinymt internal status */ @@ -69,7 +69,7 @@ diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h uint32_t x; uint32_t y; -@@ -87,7 +96,7 @@ +@@ -91,7 +100,7 @@ * @param random tinymt internal status * @return 32-bit unsigned pseudorandom number */ @@ -78,7 +78,7 @@ diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h uint32_t t0, t1; t0 = random->status[3]; #if defined(LINEARITY_CHECK) -@@ -108,7 +117,7 @@ +@@ -112,7 +121,7 @@ * @param random tinymt internal status * @return floating point number r (1.0 <= r < 2.0) */ @@ -87,7 +87,7 @@ diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h uint32_t t0, t1; union { uint32_t u; -@@ -135,7 +144,7 @@ +@@ -139,7 +148,7 @@ * @param random tinymt internal status * @return floating point number r (1.0 < r < 2.0) */ @@ -96,7 +96,7 @@ diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h uint32_t t0, t1; union { uint32_t u; -@@ -161,7 +170,7 @@ +@@ -165,7 +174,7 @@ * @param random tinymt internal status * @return 32-bit unsigned integer r (0 <= r < 2^32) */ @@ -105,7 +105,7 @@ diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h tinymt32_next_state(random); return tinymt32_temper(random); } -@@ -174,7 +183,7 @@ +@@ -178,7 +187,7 @@ * @param random tinymt internal status * @return floating point number r (0.0 <= r < 1.0) */ @@ -114,7 +114,7 @@ diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h tinymt32_next_state(random); return tinymt32_temper(random) * TINYMT32_MUL; } -@@ -185,7 +194,7 @@ +@@ -189,7 +198,7 @@ * @param random tinymt internal status * @return floating point number r (1.0 <= r < 2.0) */ @@ -123,7 +123,7 @@ diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h tinymt32_next_state(random); return tinymt32_temper_conv(random); } -@@ -196,7 +205,7 @@ +@@ -200,7 +209,7 @@ * @param random tinymt internal status * @return floating point number r (0.0 <= r < 1.0) */ @@ -132,7 +132,7 @@ diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h tinymt32_next_state(random); return tinymt32_temper_conv(random) - 1.0f; } -@@ -207,7 +216,7 @@ +@@ -211,7 +220,7 @@ * @param random tinymt internal status * @return floating point number r (0.0 < r <= 1.0) */ @@ -141,7 +141,7 @@ diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h tinymt32_next_state(random); return 1.0f - tinymt32_generate_float(random); } -@@ -218,7 +227,7 @@ +@@ -222,7 +231,7 @@ * @param random tinymt internal status * @return floating point number r (0.0 < r < 0.0) */ @@ -150,7 +150,7 @@ diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h tinymt32_next_state(random); return tinymt32_temper_conv_open(random) - 1.0f; } -@@ -231,7 +240,7 @@ +@@ -235,7 +244,7 @@ * @param random tinymt internal status * @return floating point number r (1.0 < r < 2.0) */ @@ -160,8 +160,8 @@ diff -urN tinymt.orig\tinymt32.h tinymt\tinymt32.h return tinymt32_temper(random) * (1.0 / 4294967296.0); } diff -urN tinymt.orig\tinymt64.c tinymt\tinymt64.c ---- tinymt.orig\tinymt64.c Fri Jun 29 17:16:46 2012 -+++ tinymt\tinymt64.c Fri Jun 29 17:16:46 2012 +--- tinymt.orig\tinymt64.c Sat Feb 02 19:51:25 2013 ++++ tinymt\tinymt64.c Sat Feb 02 19:51:25 2013 @@ -56,9 +56,10 @@ * @param seed a 64-bit unsigned integer used as a seed. */ @@ -175,8 +175,8 @@ diff -urN tinymt.orig\tinymt64.c tinymt\tinymt64.c * (random->status[(i - 1) & 1] ^ (random->status[(i - 1) & 1] >> 62)); diff -urN tinymt.orig\tinymt64.h tinymt\tinymt64.h ---- tinymt.orig\tinymt64.h Fri Jun 29 17:16:46 2012 -+++ tinymt\tinymt64.h Fri Jun 29 17:16:46 2012 +--- tinymt.orig\tinymt64.h Sat Feb 02 19:51:25 2013 ++++ tinymt\tinymt64.h Sat Feb 02 19:51:25 2013 @@ -16,8 +16,23 @@ * LICENSE.txt */ @@ -203,7 +203,7 @@ diff -urN tinymt.orig\tinymt64.h tinymt\tinymt64.h #define TINYMT64_MEXP 127 #define TINYMT64_SH0 12 -@@ -48,12 +63,13 @@ +@@ -52,12 +67,13 @@ * @param random not used * @return always 127 */ @@ -219,7 +219,7 @@ diff -urN tinymt.orig\tinymt64.h tinymt\tinymt64.h return TINYMT64_MEXP; } #endif -@@ -63,7 +79,7 @@ +@@ -67,7 +83,7 @@ * Users should not call this function directly. * @param random tinymt internal status */ @@ -228,7 +228,7 @@ diff -urN tinymt.orig\tinymt64.h tinymt\tinymt64.h uint64_t x; random->status[0] &= TINYMT64_MASK; -@@ -84,7 +100,7 @@ +@@ -88,7 +104,7 @@ * @param random tinymt internal status * @return 64-bit unsigned pseudorandom number */ @@ -237,7 +237,7 @@ diff -urN tinymt.orig\tinymt64.h tinymt\tinymt64.h uint64_t x; #if defined(LINEARITY_CHECK) x = random->status[0] ^ random->status[1]; -@@ -102,7 +118,7 @@ +@@ -106,7 +122,7 @@ * @param random tinymt internal status * @return floating point number r (1.0 <= r < 2.0) */ @@ -246,7 +246,7 @@ diff -urN tinymt.orig\tinymt64.h tinymt\tinymt64.h uint64_t x; union { uint64_t u; -@@ -125,7 +141,7 @@ +@@ -129,7 +145,7 @@ * @param random tinymt internal status * @return floating point number r (1.0 < r < 2.0) */ @@ -255,7 +255,7 @@ diff -urN tinymt.orig\tinymt64.h tinymt\tinymt64.h uint64_t x; union { uint64_t u; -@@ -147,7 +163,7 @@ +@@ -151,7 +167,7 @@ * @param random tinymt internal status * @return 64-bit unsigned integer r (0 <= r < 2^64) */ @@ -264,7 +264,7 @@ diff -urN tinymt.orig\tinymt64.h tinymt\tinymt64.h tinymt64_next_state(random); return tinymt64_temper(random); } -@@ -158,7 +174,7 @@ +@@ -162,7 +178,7 @@ * @param random tinymt internal status * @return floating point number r (0.0 <= r < 1.0) */ @@ -273,7 +273,7 @@ diff -urN tinymt.orig\tinymt64.h tinymt\tinymt64.h tinymt64_next_state(random); return tinymt64_temper(random) * TINYMT64_MUL; } -@@ -169,7 +185,7 @@ +@@ -173,7 +189,7 @@ * @param random tinymt internal status * @return floating point number r (0.0 <= r < 1.0) */ @@ -282,7 +282,7 @@ diff -urN tinymt.orig\tinymt64.h tinymt\tinymt64.h tinymt64_next_state(random); return tinymt64_temper_conv(random) - 1.0; } -@@ -180,7 +196,7 @@ +@@ -184,7 +200,7 @@ * @param random tinymt internal status * @return floating point number r (1.0 <= r < 2.0) */ @@ -291,7 +291,7 @@ diff -urN tinymt.orig\tinymt64.h tinymt\tinymt64.h tinymt64_next_state(random); return tinymt64_temper_conv(random); } -@@ -191,7 +207,7 @@ +@@ -195,7 +211,7 @@ * @param random tinymt internal status * @return floating point number r (0.0 < r <= 1.0) */ @@ -300,7 +300,7 @@ diff -urN tinymt.orig\tinymt64.h tinymt\tinymt64.h tinymt64_next_state(random); return 2.0 - tinymt64_temper_conv(random); } -@@ -202,7 +218,7 @@ +@@ -206,7 +222,7 @@ * @param random tinymt internal status * @return floating point number r (0.0 < r < 1.0) */ diff --git a/harbour/contrib/hbtinymt/3rd/tinymt/tinymt.hbp b/harbour/contrib/hbtinymt/3rd/tinymt/tinymt.hbp index 068d120eb0..553a960073 100644 --- a/harbour/contrib/hbtinymt/3rd/tinymt/tinymt.hbp +++ b/harbour/contrib/hbtinymt/3rd/tinymt/tinymt.hbp @@ -18,8 +18,8 @@ tinymt32.c tinymt64.c # ORIGIN http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/TINYMT/ -# VER 1.0.1 -# URL http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/TINYMT/TinyMT-src-1.0.1.zip +# VER 1.0.2 +# URL http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/TINYMT/TinyMT-src-1.0.2.zip # DIFF tinymt.dif # # MAP LICENSE.txt LICENSE.txt diff --git a/harbour/contrib/hbtinymt/3rd/tinymt/tinymt32.c b/harbour/contrib/hbtinymt/3rd/tinymt/tinymt32.c index 93314d15d0..ddf7cd000e 100644 --- a/harbour/contrib/hbtinymt/3rd/tinymt/tinymt32.c +++ b/harbour/contrib/hbtinymt/3rd/tinymt/tinymt32.c @@ -110,27 +110,33 @@ void tinymt32_init_by_array(tinymt32_t * random, uint32_t init_key[], st[0] = r; count--; for (i = 1, j = 0; (j < count) && (j < key_length); j++) { - r = ini_func1(st[i] ^ st[(i + mid) % size] ^ st[(i + size - 1) % size]); + r = ini_func1(st[i % size] + ^ st[(i + mid) % size] + ^ st[(i + size - 1) % size]); st[(i + mid) % size] += r; r += init_key[j] + i; st[(i + mid + lag) % size] += r; - st[i] = r; + st[i % size] = r; i = (i + 1) % size; } for (; j < count; j++) { - r = ini_func1(st[i] ^ st[(i + mid) % size] ^ st[(i + size - 1) % size]); + r = ini_func1(st[i % size] + ^ st[(i + mid) % size] + ^ st[(i + size - 1) % size]); st[(i + mid) % size] += r; r += i; st[(i + mid + lag) % size] += r; - st[i] = r; + st[i % size] = r; i = (i + 1) % size; } for (j = 0; j < size; j++) { - r = ini_func2(st[i] + st[(i + mid) % size] + st[(i + size - 1) % size]); + r = ini_func2(st[i % size] + + st[(i + mid) % size] + + st[(i + size - 1) % size]); st[(i + mid) % size] ^= r; r -= i; st[(i + mid + lag) % size] ^= r; - st[i] = r; + st[i % size] = r; i = (i + 1) % size; } period_certification(random); diff --git a/harbour/contrib/hbtinymt/3rd/tinymt/tinymt32.h b/harbour/contrib/hbtinymt/3rd/tinymt/tinymt32.h index 89ca793738..a64b7e5422 100644 --- a/harbour/contrib/hbtinymt/3rd/tinymt/tinymt32.h +++ b/harbour/contrib/hbtinymt/3rd/tinymt/tinymt32.h @@ -35,6 +35,10 @@ #define TINYMT32_MASK UINT32_C(0x7fffffff) #define TINYMT32_MUL (1.0f / 4294967296.0f) +#if defined(__cplusplus) +extern "C" { +#endif + /** * tinymt32 internal state vector and parameters */ @@ -244,4 +248,9 @@ _HB_INLINE_ static double tinymt32_generate_32double(tinymt32_t * random) { tinymt32_next_state(random); return tinymt32_temper(random) * (1.0 / 4294967296.0); } + +#if defined(__cplusplus) +} +#endif + #endif diff --git a/harbour/contrib/hbtinymt/3rd/tinymt/tinymt64.h b/harbour/contrib/hbtinymt/3rd/tinymt/tinymt64.h index 00f4e21aae..919416dec4 100644 --- a/harbour/contrib/hbtinymt/3rd/tinymt/tinymt64.h +++ b/harbour/contrib/hbtinymt/3rd/tinymt/tinymt64.h @@ -41,6 +41,10 @@ #define TINYMT64_MASK UINT64_C(0x7fffffffffffffff) #define TINYMT64_MUL (1.0 / 18446744073709551616.0) +#if defined(__cplusplus) +extern "C" { +#endif + /* * tinymt64 internal state vector and parameters */ @@ -223,4 +227,8 @@ _HB_INLINE_ static double tinymt64_generate_doubleOO(tinymt64_t * random) { return tinymt64_temper_conv_open(random) - 1.0; } +#if defined(__cplusplus) +} +#endif + #endif diff --git a/harbour/src/3rd/jpeg/Makefile b/harbour/src/3rd/jpeg/Makefile index 2dabf3491f..34f6d1d086 100644 --- a/harbour/src/3rd/jpeg/Makefile +++ b/harbour/src/3rd/jpeg/Makefile @@ -105,8 +105,8 @@ else endif # ORIGIN http://www.ijg.org/ -# VER 8d -# URL http://www.ijg.org/files/jpegsrc.v8d.tar.gz +# VER 9 +# URL http://www.ijg.org/files/jpegsrc.v9.tar.gz # DIFF jpeg.dif # # MAP README diff --git a/harbour/src/3rd/jpeg/README b/harbour/src/3rd/jpeg/README index 0a23c19590..fc5ca5d458 100644 --- a/harbour/src/3rd/jpeg/README +++ b/harbour/src/3rd/jpeg/README @@ -1,10 +1,10 @@ The Independent JPEG Group's JPEG software ========================================== -README for release 8d of 15-Jan-2012 -==================================== +README for release 9 of 13-Jan-2013 +=================================== -This distribution contains the eighth public release of the Independent JPEG +This distribution contains the ninth public release of the Independent JPEG Group's free JPEG software. You are welcome to redistribute this software and to use it for any purpose, subject to the conditions under LEGAL ISSUES, below. @@ -115,7 +115,7 @@ with respect to this software, its quality, accuracy, merchantability, or fitness for a particular purpose. This software is provided "AS IS", and you, its user, assume the entire risk as to its quality and accuracy. -This software is copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding. +This software is copyright (C) 1991-2013, Thomas G. Lane, Guido Vollbeding. All Rights Reserved except as specified below. Permission is hereby granted to use, copy, modify, and distribute this @@ -146,15 +146,6 @@ commercial products, provided that all warranty or liability claims are assumed by the product vendor. -ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, -sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. -ansi2knr.c is NOT covered by the above copyright and conditions, but instead -by the usual distribution terms of the Free Software Foundation; principally, -that you must include source code if you redistribute it. (See the file -ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part -of any program generated from the IJG code, this does not limit you more than -the foregoing paragraphs do. - The Unix configuration script "configure" was produced with GNU Autoconf. It is copyright by the Free Software Foundation but is freely distributable. The same holds for its supporting scripts (config.guess, config.sub, @@ -222,12 +213,16 @@ Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS 10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of Continuous-tone Still Images, Part 2: Compliance testing" and has document numbers ISO/IEC IS 10918-2, ITU-T T.83. -IJG JPEG 8 introduces an implementation of the JPEG SmartScale extension +IJG JPEG 8 introduced an implementation of the JPEG SmartScale extension which is specified in two documents: A contributed document at ITU and ISO with title "ITU-T JPEG-Plus Proposal for Extending ITU-T T.81 for Advanced Image Coding", April 2006, Geneva, Switzerland. The latest version of this document is Revision 3. And a contributed document ISO/IEC JTC1/SC29/WG1 N 5799 with title "Evolution of JPEG", June/July 2011, Berlin, Germany. +IJG JPEG 9 introduces a reversible color transform for improved lossless +compression which is described in a contributed document ISO/IEC JTC1/SC29/ +WG1 N 6080 with title "JPEG 9 Lossless Coding", June/July 2012, Paris, +France. The JPEG standard does not specify all details of an interchangeable file format. For the omitted details we follow the "JFIF" conventions, revision @@ -257,8 +252,8 @@ ARCHIVE LOCATIONS The "official" archive site for this software is www.ijg.org. The most recent released version can always be found there in directory "files". This particular version will be archived as -http://www.ijg.org/files/jpegsrc.v8d.tar.gz, and in Windows-compatible -"zip" archive format as http://www.ijg.org/files/jpegsr8d.zip. +http://www.ijg.org/files/jpegsrc.v9.tar.gz, and in Windows-compatible +"zip" archive format as http://www.ijg.org/files/jpegsr9.zip. The JPEG FAQ (Frequently Asked Questions) article is a source of some general information about JPEG. @@ -331,20 +326,24 @@ Furthermore, the ISO committee pretends to be "responsible for the popular JPEG" in their public reports which is not true because they don't respond to actual requirements for the maintenance of the original JPEG specification. -There are currently distributions in circulation containing the name -"libjpeg" which claim to be a "derivative" or "fork" of the original -libjpeg, but don't have the features and are incompatible with formats -supported by actual IJG libjpeg distributions. Furthermore, they -violate the license conditions as described under LEGAL ISSUES above. -We have no sympathy for the release of misleading and illegal -distributions derived from obsolete code bases. +There are currently different distributions in circulation containing the +name "libjpeg" which is misleading because they don't have the features and +are incompatible with formats supported by actual IJG libjpeg distributions. +One of those fakes is released by members of the ISO committee and just uses +the name of libjpeg for misdirection of people, similar to the abuse of the +name JPEG as described above, while having nothing in common with actual IJG +libjpeg distributions. +The other one claims to be a "derivative" or "fork" of the original libjpeg +and violates the license conditions as described under LEGAL ISSUES above. +We have no sympathy for the release of misleading and illegal distributions +derived from obsolete code bases. Don't use an obsolete code base! TO DO ===== -Version 8 is the first release of a new generation JPEG standard +Version 9 is the second release of a new generation JPEG standard to overcome the limitations of the original JPEG specification. More features are being prepared for coming releases... diff --git a/harbour/src/3rd/jpeg/jcarith.c b/harbour/src/3rd/jpeg/jcarith.c index 033f67069e..a7f9ff7acc 100644 --- a/harbour/src/3rd/jpeg/jcarith.c +++ b/harbour/src/3rd/jpeg/jcarith.c @@ -1,7 +1,7 @@ /* * jcarith.c * - * Developed 1997-2011 by Guido Vollbeding. + * Developed 1997-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -479,7 +479,8 @@ encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) /* Sections F.1.4.2 & F.1.4.4.2: Encoding of AC coefficients */ /* Establish EOB (end-of-block) index */ - for (ke = cinfo->Se; ke > 0; ke--) + ke = cinfo->Se; + do { /* We must apply the point transform by Al. For AC coefficients this * is an integer division with rounding towards 0. To do this portably * in C, we shift after obtaining the absolute value. @@ -490,13 +491,14 @@ encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) v = -v; if (v >>= cinfo->Al) break; } + } while (--ke); /* Figure F.5: Encode_AC_Coefficients */ - for (k = cinfo->Ss; k <= ke; k++) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); + for (k = cinfo->Ss - 1; k < ke;) { + st = entropy->ac_stats[tbl] + 3 * k; arith_encode(cinfo, st, 0); /* EOB decision */ for (;;) { - if ((v = (*block)[natural_order[k]]) >= 0) { + if ((v = (*block)[natural_order[++k]]) >= 0) { if (v >>= cinfo->Al) { arith_encode(cinfo, st + 1, 1); arith_encode(cinfo, entropy->fixed_bin, 0); @@ -510,7 +512,8 @@ encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) break; } } - arith_encode(cinfo, st + 1, 0); st += 3; k++; + arith_encode(cinfo, st + 1, 0); + st += 3; } st += 2; /* Figure F.8: Encoding the magnitude category of v */ @@ -537,9 +540,9 @@ encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) while (m >>= 1) arith_encode(cinfo, st, (m & v) ? 1 : 0); } - /* Encode EOB decision only if k <= cinfo->Se */ - if (k <= cinfo->Se) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); + /* Encode EOB decision only if k < cinfo->Se */ + if (k < cinfo->Se) { + st = entropy->ac_stats[tbl] + 3 * k; arith_encode(cinfo, st, 1); } @@ -616,7 +619,8 @@ encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) /* Section G.1.3.3: Encoding of AC coefficients */ /* Establish EOB (end-of-block) index */ - for (ke = cinfo->Se; ke > 0; ke--) + ke = cinfo->Se; + do { /* We must apply the point transform by Al. For AC coefficients this * is an integer division with rounding towards 0. To do this portably * in C, we shift after obtaining the absolute value. @@ -627,6 +631,7 @@ encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) v = -v; if (v >>= cinfo->Al) break; } + } while (--ke); /* Establish EOBx (previous stage end-of-block) index */ for (kex = ke; kex > 0; kex--) @@ -638,12 +643,12 @@ encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) } /* Figure G.10: Encode_AC_Coefficients_SA */ - for (k = cinfo->Ss; k <= ke; k++) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); - if (k > kex) + for (k = cinfo->Ss - 1; k < ke;) { + st = entropy->ac_stats[tbl] + 3 * k; + if (k >= kex) arith_encode(cinfo, st, 0); /* EOB decision */ for (;;) { - if ((v = (*block)[natural_order[k]]) >= 0) { + if ((v = (*block)[natural_order[++k]]) >= 0) { if (v >>= cinfo->Al) { if (v >> 1) /* previously nonzero coef */ arith_encode(cinfo, st + 2, (v & 1)); @@ -665,12 +670,13 @@ encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) break; } } - arith_encode(cinfo, st + 1, 0); st += 3; k++; + arith_encode(cinfo, st + 1, 0); + st += 3; } } - /* Encode EOB decision only if k <= cinfo->Se */ - if (k <= cinfo->Se) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); + /* Encode EOB decision only if k < cinfo->Se */ + if (k < cinfo->Se) { + st = entropy->ac_stats[tbl] + 3 * k; arith_encode(cinfo, st, 1); } @@ -922,7 +928,7 @@ jinit_arith_encoder (j_compress_ptr cinfo) entropy = (arith_entropy_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(arith_entropy_encoder)); - cinfo->entropy = (struct jpeg_entropy_encoder *) entropy; + cinfo->entropy = &entropy->pub; entropy->pub.start_pass = start_pass; entropy->pub.finish_pass = finish_pass; diff --git a/harbour/src/3rd/jpeg/jccolor.c b/harbour/src/3rd/jpeg/jccolor.c index 3e2d0e9277..81d74efb6e 100644 --- a/harbour/src/3rd/jpeg/jccolor.c +++ b/harbour/src/3rd/jpeg/jccolor.c @@ -2,7 +2,7 @@ * jccolor.c * * Copyright (C) 1991-1996, Thomas G. Lane. - * Modified 2011 by Guido Vollbeding. + * Modified 2011-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -133,8 +133,8 @@ rgb_ycc_convert (j_compress_ptr cinfo, JDIMENSION output_row, int num_rows) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int r, g, b; register INT32 * ctab = cconvert->rgb_ycc_tab; + register int r, g, b; register JSAMPROW inptr; register JSAMPROW outptr0, outptr1, outptr2; register JDIMENSION col; @@ -150,7 +150,6 @@ rgb_ycc_convert (j_compress_ptr cinfo, r = GETJSAMPLE(inptr[RGB_RED]); g = GETJSAMPLE(inptr[RGB_GREEN]); b = GETJSAMPLE(inptr[RGB_BLUE]); - inptr += RGB_PIXELSIZE; /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations * must be too; we do not need an explicit range-limiting operation. * Hence the value being shifted is never negative, and we don't @@ -168,6 +167,7 @@ rgb_ycc_convert (j_compress_ptr cinfo, outptr2[col] = (JSAMPLE) ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) >> SCALEBITS); + inptr += RGB_PIXELSIZE; } } } @@ -189,8 +189,8 @@ rgb_gray_convert (j_compress_ptr cinfo, JDIMENSION output_row, int num_rows) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int r, g, b; register INT32 * ctab = cconvert->rgb_ycc_tab; + register int r, g, b; register JSAMPROW inptr; register JSAMPROW outptr; register JDIMENSION col; @@ -198,17 +198,16 @@ rgb_gray_convert (j_compress_ptr cinfo, while (--num_rows >= 0) { inptr = *input_buf++; - outptr = output_buf[0][output_row]; - output_row++; + outptr = output_buf[0][output_row++]; for (col = 0; col < num_cols; col++) { r = GETJSAMPLE(inptr[RGB_RED]); g = GETJSAMPLE(inptr[RGB_GREEN]); b = GETJSAMPLE(inptr[RGB_BLUE]); - inptr += RGB_PIXELSIZE; /* Y */ outptr[col] = (JSAMPLE) ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) >> SCALEBITS); + inptr += RGB_PIXELSIZE; } } } @@ -228,8 +227,8 @@ cmyk_ycck_convert (j_compress_ptr cinfo, JDIMENSION output_row, int num_rows) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int r, g, b; register INT32 * ctab = cconvert->rgb_ycc_tab; + register int r, g, b; register JSAMPROW inptr; register JSAMPROW outptr0, outptr1, outptr2, outptr3; register JDIMENSION col; @@ -248,7 +247,6 @@ cmyk_ycck_convert (j_compress_ptr cinfo, b = MAXJSAMPLE - GETJSAMPLE(inptr[2]); /* K passes through as-is */ outptr3[col] = inptr[3]; /* don't need GETJSAMPLE here */ - inptr += 4; /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations * must be too; we do not need an explicit range-limiting operation. * Hence the value being shifted is never negative, and we don't @@ -266,6 +264,46 @@ cmyk_ycck_convert (j_compress_ptr cinfo, outptr2[col] = (JSAMPLE) ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) >> SCALEBITS); + inptr += 4; + } + } +} + + +/* + * Convert some rows of samples to the JPEG colorspace. + * [R,G,B] to [R-G,G,B-G] conversion with modulo calculation + * (forward reversible color transform). + */ + +METHODDEF(void) +rgb_rgb1_convert (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows) +{ + register int r, g, b; + register JSAMPROW inptr; + register JSAMPROW outptr0, outptr1, outptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->image_width; + + while (--num_rows >= 0) { + inptr = *input_buf++; + outptr0 = output_buf[0][output_row]; + outptr1 = output_buf[1][output_row]; + outptr2 = output_buf[2][output_row]; + output_row++; + for (col = 0; col < num_cols; col++) { + r = GETJSAMPLE(inptr[RGB_RED]); + g = GETJSAMPLE(inptr[RGB_GREEN]); + b = GETJSAMPLE(inptr[RGB_BLUE]); + /* Assume that MAXJSAMPLE+1 is a power of 2, so that the MOD + * (modulo) operator is equivalent to the bitmask operator AND. + */ + outptr0[col] = (JSAMPLE) ((r - g + CENTERJSAMPLE) & MAXJSAMPLE); + outptr1[col] = (JSAMPLE) g; + outptr2[col] = (JSAMPLE) ((b - g + CENTERJSAMPLE) & MAXJSAMPLE); + inptr += RGB_PIXELSIZE; } } } @@ -282,16 +320,15 @@ grayscale_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows) { + int instride = cinfo->input_components; register JSAMPROW inptr; register JSAMPROW outptr; register JDIMENSION col; JDIMENSION num_cols = cinfo->image_width; - int instride = cinfo->input_components; while (--num_rows >= 0) { inptr = *input_buf++; - outptr = output_buf[0][output_row]; - output_row++; + outptr = output_buf[0][output_row++]; for (col = 0; col < num_cols; col++) { outptr[col] = inptr[0]; /* don't need GETJSAMPLE() here */ inptr += instride; @@ -344,20 +381,20 @@ null_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows) { + int ci; + register int nc = cinfo->num_components; register JSAMPROW inptr; register JSAMPROW outptr; register JDIMENSION col; - register int ci; - int nc = cinfo->num_components; JDIMENSION num_cols = cinfo->image_width; while (--num_rows >= 0) { /* It seems fastest to make a separate pass for each component. */ for (ci = 0; ci < nc; ci++) { - inptr = *input_buf; + inptr = input_buf[0] + ci; outptr = output_buf[ci][output_row]; for (col = 0; col < num_cols; col++) { - outptr[col] = inptr[ci]; /* don't need GETJSAMPLE() here */ + *outptr++ = *inptr; /* don't need GETJSAMPLE() here */ inptr += nc; } } @@ -390,7 +427,7 @@ jinit_color_converter (j_compress_ptr cinfo) cconvert = (my_cconvert_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_color_converter)); - cinfo->cconvert = (struct jpeg_color_converter *) cconvert; + cinfo->cconvert = &cconvert->pub; /* set start_pass to null method until we find out differently */ cconvert->pub.start_pass = null_method; @@ -423,6 +460,10 @@ jinit_color_converter (j_compress_ptr cinfo) break; } + /* Support color transform only for RGB colorspace */ + if (cinfo->color_transform && cinfo->jpeg_color_space != JCS_RGB) + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + /* Check num_components, set conversion method based on requested space */ switch (cinfo->jpeg_color_space) { case JCS_GRAYSCALE: @@ -441,9 +482,19 @@ jinit_color_converter (j_compress_ptr cinfo) case JCS_RGB: if (cinfo->num_components != 3) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_RGB) - cconvert->pub.color_convert = rgb_convert; - else + if (cinfo->in_color_space == JCS_RGB) { + switch (cinfo->color_transform) { + case JCT_NONE: + cconvert->pub.color_convert = rgb_convert; + break; + case JCT_SUBTRACT_GREEN: + cconvert->pub.color_convert = rgb_rgb1_convert; + break; + default: + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + } + } else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; diff --git a/harbour/src/3rd/jpeg/jcmainct.c b/harbour/src/3rd/jpeg/jcmainct.c index 7de75d1675..39b97902e8 100644 --- a/harbour/src/3rd/jpeg/jcmainct.c +++ b/harbour/src/3rd/jpeg/jcmainct.c @@ -2,6 +2,7 @@ * jcmainct.c * * Copyright (C) 1994-1996, Thomas G. Lane. + * Modified 2003-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -68,32 +69,32 @@ METHODDEF(void) process_data_buffer_main METHODDEF(void) start_pass_main (j_compress_ptr cinfo, J_BUF_MODE pass_mode) { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; /* Do nothing in raw-data mode. */ if (cinfo->raw_data_in) return; - main->cur_iMCU_row = 0; /* initialize counters */ - main->rowgroup_ctr = 0; - main->suspended = FALSE; - main->pass_mode = pass_mode; /* save mode for use by process_data */ + mainp->cur_iMCU_row = 0; /* initialize counters */ + mainp->rowgroup_ctr = 0; + mainp->suspended = FALSE; + mainp->pass_mode = pass_mode; /* save mode for use by process_data */ switch (pass_mode) { case JBUF_PASS_THRU: #ifdef FULL_MAIN_BUFFER_SUPPORTED - if (main->whole_image[0] != NULL) + if (mainp->whole_image[0] != NULL) ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); #endif - main->pub.process_data = process_data_simple_main; + mainp->pub.process_data = process_data_simple_main; break; #ifdef FULL_MAIN_BUFFER_SUPPORTED case JBUF_SAVE_SOURCE: case JBUF_CRANK_DEST: case JBUF_SAVE_AND_PASS: - if (main->whole_image[0] == NULL) + if (mainp->whole_image[0] == NULL) ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - main->pub.process_data = process_data_buffer_main; + mainp->pub.process_data = process_data_buffer_main; break; #endif default: @@ -114,46 +115,46 @@ process_data_simple_main (j_compress_ptr cinfo, JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail) { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; - while (main->cur_iMCU_row < cinfo->total_iMCU_rows) { + while (mainp->cur_iMCU_row < cinfo->total_iMCU_rows) { /* Read input data if we haven't filled the main buffer yet */ - if (main->rowgroup_ctr < (JDIMENSION) cinfo->min_DCT_v_scaled_size) + if (mainp->rowgroup_ctr < (JDIMENSION) cinfo->min_DCT_v_scaled_size) (*cinfo->prep->pre_process_data) (cinfo, input_buf, in_row_ctr, in_rows_avail, - main->buffer, &main->rowgroup_ctr, + mainp->buffer, &mainp->rowgroup_ctr, (JDIMENSION) cinfo->min_DCT_v_scaled_size); /* If we don't have a full iMCU row buffered, return to application for * more data. Note that preprocessor will always pad to fill the iMCU row * at the bottom of the image. */ - if (main->rowgroup_ctr != (JDIMENSION) cinfo->min_DCT_v_scaled_size) + if (mainp->rowgroup_ctr != (JDIMENSION) cinfo->min_DCT_v_scaled_size) return; /* Send the completed row to the compressor */ - if (! (*cinfo->coef->compress_data) (cinfo, main->buffer)) { + if (! (*cinfo->coef->compress_data) (cinfo, mainp->buffer)) { /* If compressor did not consume the whole row, then we must need to * suspend processing and return to the application. In this situation * we pretend we didn't yet consume the last input row; otherwise, if * it happened to be the last row of the image, the application would * think we were done. */ - if (! main->suspended) { + if (! mainp->suspended) { (*in_row_ctr)--; - main->suspended = TRUE; + mainp->suspended = TRUE; } return; } /* We did finish the row. Undo our little suspension hack if a previous * call suspended; then mark the main buffer empty. */ - if (main->suspended) { + if (mainp->suspended) { (*in_row_ctr)++; - main->suspended = FALSE; + mainp->suspended = FALSE; } - main->rowgroup_ctr = 0; - main->cur_iMCU_row++; + mainp->rowgroup_ctr = 0; + mainp->cur_iMCU_row++; } } @@ -170,25 +171,27 @@ process_data_buffer_main (j_compress_ptr cinfo, JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail) { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; int ci; jpeg_component_info *compptr; - boolean writing = (main->pass_mode != JBUF_CRANK_DEST); + boolean writing = (mainp->pass_mode != JBUF_CRANK_DEST); - while (main->cur_iMCU_row < cinfo->total_iMCU_rows) { + while (mainp->cur_iMCU_row < cinfo->total_iMCU_rows) { /* Realign the virtual buffers if at the start of an iMCU row. */ - if (main->rowgroup_ctr == 0) { + if (mainp->rowgroup_ctr == 0) { for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { - main->buffer[ci] = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, main->whole_image[ci], - main->cur_iMCU_row * (compptr->v_samp_factor * DCTSIZE), - (JDIMENSION) (compptr->v_samp_factor * DCTSIZE), writing); + mainp->buffer[ci] = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, mainp->whole_image[ci], mainp->cur_iMCU_row * + ((JDIMENSION) (compptr->v_samp_factor * cinfo->min_DCT_v_scaled_size)), + (JDIMENSION) (compptr->v_samp_factor * cinfo->min_DCT_v_scaled_size), + writing); } /* In a read pass, pretend we just read some source data. */ if (! writing) { - *in_row_ctr += cinfo->max_v_samp_factor * DCTSIZE; - main->rowgroup_ctr = DCTSIZE; + *in_row_ctr += (JDIMENSION) + (cinfo->max_v_samp_factor * cinfo->min_DCT_v_scaled_size); + mainp->rowgroup_ctr = (JDIMENSION) cinfo->min_DCT_v_scaled_size; } } @@ -197,40 +200,40 @@ process_data_buffer_main (j_compress_ptr cinfo, if (writing) { (*cinfo->prep->pre_process_data) (cinfo, input_buf, in_row_ctr, in_rows_avail, - main->buffer, &main->rowgroup_ctr, - (JDIMENSION) DCTSIZE); + mainp->buffer, &mainp->rowgroup_ctr, + (JDIMENSION) cinfo->min_DCT_v_scaled_size); /* Return to application if we need more data to fill the iMCU row. */ - if (main->rowgroup_ctr < DCTSIZE) + if (mainp->rowgroup_ctr < (JDIMENSION) cinfo->min_DCT_v_scaled_size) return; } /* Emit data, unless this is a sink-only pass. */ - if (main->pass_mode != JBUF_SAVE_SOURCE) { - if (! (*cinfo->coef->compress_data) (cinfo, main->buffer)) { + if (mainp->pass_mode != JBUF_SAVE_SOURCE) { + if (! (*cinfo->coef->compress_data) (cinfo, mainp->buffer)) { /* If compressor did not consume the whole row, then we must need to * suspend processing and return to the application. In this situation * we pretend we didn't yet consume the last input row; otherwise, if * it happened to be the last row of the image, the application would * think we were done. */ - if (! main->suspended) { + if (! mainp->suspended) { (*in_row_ctr)--; - main->suspended = TRUE; + mainp->suspended = TRUE; } return; } /* We did finish the row. Undo our little suspension hack if a previous * call suspended; then mark the main buffer empty. */ - if (main->suspended) { + if (mainp->suspended) { (*in_row_ctr)++; - main->suspended = FALSE; + mainp->suspended = FALSE; } } /* If get here, we are done with this iMCU row. Mark buffer empty. */ - main->rowgroup_ctr = 0; - main->cur_iMCU_row++; + mainp->rowgroup_ctr = 0; + mainp->cur_iMCU_row++; } } @@ -244,15 +247,15 @@ process_data_buffer_main (j_compress_ptr cinfo, GLOBAL(void) jinit_c_main_controller (j_compress_ptr cinfo, boolean need_full_buffer) { - my_main_ptr main; + my_main_ptr mainp; int ci; jpeg_component_info *compptr; - main = (my_main_ptr) + mainp = (my_main_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_main_controller)); - cinfo->main = (struct jpeg_c_main_controller *) main; - main->pub.start_pass = start_pass_main; + cinfo->main = &mainp->pub; + mainp->pub.start_pass = start_pass_main; /* We don't need to create a buffer in raw-data mode. */ if (cinfo->raw_data_in) @@ -267,11 +270,12 @@ jinit_c_main_controller (j_compress_ptr cinfo, boolean need_full_buffer) /* Note we pad the bottom to a multiple of the iMCU height */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { - main->whole_image[ci] = (*cinfo->mem->request_virt_sarray) + mainp->whole_image[ci] = (*cinfo->mem->request_virt_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, - compptr->width_in_blocks * compptr->DCT_h_scaled_size, - (JDIMENSION) jround_up((long) compptr->height_in_blocks, - (long) compptr->v_samp_factor) * DCTSIZE, + compptr->width_in_blocks * ((JDIMENSION) compptr->DCT_h_scaled_size), + ((JDIMENSION) jround_up((long) compptr->height_in_blocks, + (long) compptr->v_samp_factor)) * + ((JDIMENSION) cinfo->min_DCT_v_scaled_size), (JDIMENSION) (compptr->v_samp_factor * compptr->DCT_v_scaled_size)); } #else @@ -279,14 +283,14 @@ jinit_c_main_controller (j_compress_ptr cinfo, boolean need_full_buffer) #endif } else { #ifdef FULL_MAIN_BUFFER_SUPPORTED - main->whole_image[0] = NULL; /* flag for no virtual arrays */ + mainp->whole_image[0] = NULL; /* flag for no virtual arrays */ #endif /* Allocate a strip buffer for each component */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { - main->buffer[ci] = (*cinfo->mem->alloc_sarray) + mainp->buffer[ci] = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, - compptr->width_in_blocks * compptr->DCT_h_scaled_size, + compptr->width_in_blocks * ((JDIMENSION) compptr->DCT_h_scaled_size), (JDIMENSION) (compptr->v_samp_factor * compptr->DCT_v_scaled_size)); } } diff --git a/harbour/src/3rd/jpeg/jcmarker.c b/harbour/src/3rd/jpeg/jcmarker.c index 606c19af39..92aa65fe0d 100644 --- a/harbour/src/3rd/jpeg/jcmarker.c +++ b/harbour/src/3rd/jpeg/jcmarker.c @@ -2,7 +2,7 @@ * jcmarker.c * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2003-2010 by Guido Vollbeding. + * Modified 2003-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -19,24 +19,24 @@ typedef enum { /* JPEG marker codes */ M_SOF1 = 0xc1, M_SOF2 = 0xc2, M_SOF3 = 0xc3, - + M_SOF5 = 0xc5, M_SOF6 = 0xc6, M_SOF7 = 0xc7, - + M_JPG = 0xc8, M_SOF9 = 0xc9, M_SOF10 = 0xca, M_SOF11 = 0xcb, - + M_SOF13 = 0xcd, M_SOF14 = 0xce, M_SOF15 = 0xcf, - + M_DHT = 0xc4, - + M_DAC = 0xcc, - + M_RST0 = 0xd0, M_RST1 = 0xd1, M_RST2 = 0xd2, @@ -45,7 +45,7 @@ typedef enum { /* JPEG marker codes */ M_RST5 = 0xd5, M_RST6 = 0xd6, M_RST7 = 0xd7, - + M_SOI = 0xd8, M_EOI = 0xd9, M_SOS = 0xda, @@ -54,7 +54,7 @@ typedef enum { /* JPEG marker codes */ M_DRI = 0xdd, M_DHP = 0xde, M_EXP = 0xdf, - + M_APP0 = 0xe0, M_APP1 = 0xe1, M_APP2 = 0xe2, @@ -71,13 +71,14 @@ typedef enum { /* JPEG marker codes */ M_APP13 = 0xed, M_APP14 = 0xee, M_APP15 = 0xef, - + M_JPG0 = 0xf0, + M_JPG8 = 0xf8, M_JPG13 = 0xfd, M_COM = 0xfe, - + M_TEM = 0x01, - + M_ERROR = 0x100 } JPEG_MARKER; @@ -281,6 +282,37 @@ emit_dri (j_compress_ptr cinfo) } +LOCAL(void) +emit_lse_ict (j_compress_ptr cinfo) +/* Emit an LSE inverse color transform specification marker */ +{ + /* Support only 1 transform */ + if (cinfo->color_transform != JCT_SUBTRACT_GREEN || + cinfo->num_components < 3) + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + + emit_marker(cinfo, M_JPG8); + + emit_2bytes(cinfo, 24); /* fixed length */ + + emit_byte(cinfo, 0x0D); /* ID inverse transform specification */ + emit_2bytes(cinfo, MAXJSAMPLE); /* MAXTRANS */ + emit_byte(cinfo, 3); /* Nt=3 */ + emit_byte(cinfo, cinfo->comp_info[1].component_id); + emit_byte(cinfo, cinfo->comp_info[0].component_id); + emit_byte(cinfo, cinfo->comp_info[2].component_id); + emit_byte(cinfo, 0x80); /* F1: CENTER1=1, NORM1=0 */ + emit_2bytes(cinfo, 0); /* A(1,1)=0 */ + emit_2bytes(cinfo, 0); /* A(1,2)=0 */ + emit_byte(cinfo, 0); /* F2: CENTER2=0, NORM2=0 */ + emit_2bytes(cinfo, 1); /* A(2,1)=1 */ + emit_2bytes(cinfo, 0); /* A(2,2)=0 */ + emit_byte(cinfo, 0); /* F3: CENTER3=0, NORM3=0 */ + emit_2bytes(cinfo, 1); /* A(3,1)=1 */ + emit_2bytes(cinfo, 0); /* A(3,2)=0 */ +} + + LOCAL(void) emit_sof (j_compress_ptr cinfo, JPEG_MARKER code) /* Emit a SOF marker */ @@ -502,7 +534,8 @@ write_file_header (j_compress_ptr cinfo) /* * Write frame header. - * This consists of DQT and SOFn markers, and a conditional pseudo SOS marker. + * This consists of DQT and SOFn markers, + * a conditional LSE marker and a conditional pseudo SOS marker. * Note that we do not emit the SOF until we have emitted the DQT(s). * This avoids compatibility problems with incorrect implementations that * try to error-check the quant table numbers as soon as they see the SOF. @@ -560,6 +593,10 @@ write_frame_header (j_compress_ptr cinfo) emit_sof(cinfo, M_SOF1); /* SOF code for non-baseline Huffman file */ } + /* Check to emit LSE inverse color transform specification marker */ + if (cinfo->color_transform) + emit_lse_ict(cinfo); + /* Check to emit pseudo SOS marker */ if (cinfo->progressive_mode && cinfo->block_size != DCTSIZE) emit_pseudo_sos(cinfo); @@ -668,7 +705,7 @@ jinit_marker_writer (j_compress_ptr cinfo) marker = (my_marker_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_marker_writer)); - cinfo->marker = (struct jpeg_marker_writer *) marker; + cinfo->marker = &marker->pub; /* Initialize method pointers */ marker->pub.write_file_header = write_file_header; marker->pub.write_frame_header = write_frame_header; diff --git a/harbour/src/3rd/jpeg/jcparam.c b/harbour/src/3rd/jpeg/jcparam.c index c5e85dda55..e530c3c4bd 100644 --- a/harbour/src/3rd/jpeg/jcparam.c +++ b/harbour/src/3rd/jpeg/jcparam.c @@ -2,7 +2,7 @@ * jcparam.c * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2003-2008 by Guido Vollbeding. + * Modified 2003-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -150,7 +150,7 @@ jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline) /* Set or change the 'quality' (quantization) setting, using default tables. * This is the standard quality-adjusting entry point for typical user * interfaces; only those who want detailed control over quantization tables - * would use the preceding three routines directly. + * would use the preceding routines directly. */ { /* Convert user 0-100 rating to percentage scaling */ @@ -367,6 +367,9 @@ jpeg_set_defaults (j_compress_ptr cinfo) cinfo->X_density = 1; /* Pixel aspect ratio is square by default */ cinfo->Y_density = 1; + /* No color transform */ + cinfo->color_transform = JCT_NONE; + /* Choose JPEG colorspace based on input space, set defaults accordingly */ jpeg_default_colorspace(cinfo); @@ -448,7 +451,9 @@ jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag RGB */ cinfo->num_components = 3; SET_COMP(0, 0x52 /* 'R' */, 1,1, 0, 0,0); - SET_COMP(1, 0x47 /* 'G' */, 1,1, 0, 0,0); + SET_COMP(1, 0x47 /* 'G' */, 1,1, 0, + cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0, + cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0); SET_COMP(2, 0x42 /* 'B' */, 1,1, 0, 0,0); break; case JCS_YCbCr: diff --git a/harbour/src/3rd/jpeg/jctrans.c b/harbour/src/3rd/jpeg/jctrans.c index f7d7b81491..8813c3eac9 100644 --- a/harbour/src/3rd/jpeg/jctrans.c +++ b/harbour/src/3rd/jpeg/jctrans.c @@ -2,7 +2,7 @@ * jctrans.c * * Copyright (C) 1995-1998, Thomas G. Lane. - * Modified 2000-2011 by Guido Vollbeding. + * Modified 2000-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -85,7 +85,10 @@ jpeg_copy_critical_parameters (j_decompress_ptr srcinfo, jpeg_set_defaults(dstinfo); /* jpeg_set_defaults may choose wrong colorspace, eg YCbCr if input is RGB. * Fix it to get the right header markers for the image colorspace. + * Note: Entropy table assignment in jpeg_set_colorspace depends + * on color_transform. */ + dstinfo->color_transform = srcinfo->color_transform; jpeg_set_colorspace(dstinfo, srcinfo->jpeg_color_space); dstinfo->data_precision = srcinfo->data_precision; dstinfo->CCIR601_sampling = srcinfo->CCIR601_sampling; @@ -130,7 +133,7 @@ jpeg_copy_critical_parameters (j_decompress_ptr srcinfo, ERREXIT1(dstinfo, JERR_MISMATCHED_QUANT_TABLE, tblno); } } - /* Note: we do not copy the source's Huffman table assignments; + /* Note: we do not copy the source's entropy table assignments; * instead we rely on jpeg_set_colorspace to have made a suitable choice. */ } @@ -364,7 +367,7 @@ transencode_coef_controller (j_compress_ptr cinfo, coef = (my_coef_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_coef_controller)); - cinfo->coef = (struct jpeg_c_coef_controller *) coef; + cinfo->coef = &coef->pub; coef->pub.start_pass = start_pass_coef; coef->pub.compress_data = compress_output; diff --git a/harbour/src/3rd/jpeg/jdarith.c b/harbour/src/3rd/jpeg/jdarith.c index 092f8af5fe..6e32d230cd 100644 --- a/harbour/src/3rd/jpeg/jdarith.c +++ b/harbour/src/3rd/jpeg/jdarith.c @@ -1,7 +1,7 @@ /* * jdarith.c * - * Developed 1997-2011 by Guido Vollbeding. + * Developed 1997-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -345,12 +345,15 @@ decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) /* Sections F.2.4.2 & F.1.4.4.2: Decoding of AC coefficients */ /* Figure F.20: Decode_AC_coefficients */ - for (k = cinfo->Ss; k <= cinfo->Se; k++) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); + k = cinfo->Ss - 1; + do { + st = entropy->ac_stats[tbl] + 3 * k; if (arith_decode(cinfo, st)) break; /* EOB flag */ - while (arith_decode(cinfo, st + 1) == 0) { - st += 3; k++; - if (k > cinfo->Se) { + for (;;) { + k++; + if (arith_decode(cinfo, st + 1)) break; + st += 3; + if (k >= cinfo->Se) { WARNMS(cinfo, JWRN_ARITH_BAD_CODE); entropy->ct = -1; /* spectral overflow */ return TRUE; @@ -384,7 +387,7 @@ decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) v += 1; if (sign) v = -v; /* Scale and output coefficient in natural (dezigzagged) order */ (*block)[natural_order[k]] = (JCOEF) (v << cinfo->Al); - } + } while (k < cinfo->Se); return TRUE; } @@ -457,15 +460,18 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) m1 = (-1) << cinfo->Al; /* -1 in the bit position being coded */ /* Establish EOBx (previous stage end-of-block) index */ - for (kex = cinfo->Se; kex > 0; kex--) + kex = cinfo->Se; + do { if ((*block)[natural_order[kex]]) break; + } while (--kex); - for (k = cinfo->Ss; k <= cinfo->Se; k++) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); - if (k > kex) + k = cinfo->Ss - 1; + do { + st = entropy->ac_stats[tbl] + 3 * k; + if (k >= kex) if (arith_decode(cinfo, st)) break; /* EOB flag */ for (;;) { - thiscoef = *block + natural_order[k]; + thiscoef = *block + natural_order[++k]; if (*thiscoef) { /* previously nonzero coef */ if (arith_decode(cinfo, st + 2)) { if (*thiscoef < 0) @@ -482,14 +488,14 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) *thiscoef = p1; break; } - st += 3; k++; - if (k > cinfo->Se) { + st += 3; + if (k >= cinfo->Se) { WARNMS(cinfo, JWRN_ARITH_BAD_CODE); entropy->ct = -1; /* spectral overflow */ return TRUE; } } - } + } while (k < cinfo->Se); return TRUE; } @@ -750,7 +756,7 @@ jinit_arith_decoder (j_decompress_ptr cinfo) entropy = (arith_entropy_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(arith_entropy_decoder)); - cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + cinfo->entropy = &entropy->pub; entropy->pub.start_pass = start_pass; /* Mark tables unallocated */ diff --git a/harbour/src/3rd/jpeg/jdatadst.c b/harbour/src/3rd/jpeg/jdatadst.c index 6981fb73de..5c8681c9e4 100644 --- a/harbour/src/3rd/jpeg/jdatadst.c +++ b/harbour/src/3rd/jpeg/jdatadst.c @@ -226,6 +226,9 @@ jpeg_stdio_dest (j_compress_ptr cinfo, FILE * outfile) * larger memory, so the buffer is available to the application after * finishing compression, and then the application is responsible for * freeing the requested memory. + * Note: An initial buffer supplied by the caller is expected to be + * managed by the application. The library does not free such buffer + * when allocating a larger buffer. */ GLOBAL(void) diff --git a/harbour/src/3rd/jpeg/jdcolor.c b/harbour/src/3rd/jpeg/jdcolor.c index 83e4d069ab..939df757a4 100644 --- a/harbour/src/3rd/jpeg/jdcolor.c +++ b/harbour/src/3rd/jpeg/jdcolor.c @@ -2,7 +2,7 @@ * jdcolor.c * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 2011 by Guido Vollbeding. + * Modified 2011-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -215,8 +215,8 @@ rgb_gray_convert (j_decompress_ptr cinfo, JSAMPARRAY output_buf, int num_rows) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int r, g, b; register INT32 * ctab = cconvert->rgb_y_tab; + register int r, g, b; register JSAMPROW outptr; register JSAMPROW inptr0, inptr1, inptr2; register JDIMENSION col; @@ -241,6 +241,86 @@ rgb_gray_convert (j_decompress_ptr cinfo, } +/* + * [R-G,G,B-G] to [R,G,B] conversion with modulo calculation + * (inverse color transform). + */ + +METHODDEF(void) +rgb1_rgb_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + register int r, g, b; + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + + while (--num_rows >= 0) { + inptr0 = input_buf[0][input_row]; + inptr1 = input_buf[1][input_row]; + inptr2 = input_buf[2][input_row]; + input_row++; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + r = GETJSAMPLE(inptr0[col]); + g = GETJSAMPLE(inptr1[col]); + b = GETJSAMPLE(inptr2[col]); + /* Assume that MAXJSAMPLE+1 is a power of 2, so that the MOD + * (modulo) operator is equivalent to the bitmask operator AND. + */ + outptr[RGB_RED] = (JSAMPLE) ((r + g - CENTERJSAMPLE) & MAXJSAMPLE); + outptr[RGB_GREEN] = (JSAMPLE) g; + outptr[RGB_BLUE] = (JSAMPLE) ((b + g - CENTERJSAMPLE) & MAXJSAMPLE); + outptr += RGB_PIXELSIZE; + } + } +} + + +/* + * [R-G,G,B-G] to grayscale conversion with modulo calculation + * (inverse color transform). + */ + +METHODDEF(void) +rgb1_gray_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register INT32 * ctab = cconvert->rgb_y_tab; + register int r, g, b; + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + + while (--num_rows >= 0) { + inptr0 = input_buf[0][input_row]; + inptr1 = input_buf[1][input_row]; + inptr2 = input_buf[2][input_row]; + input_row++; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + r = GETJSAMPLE(inptr0[col]); + g = GETJSAMPLE(inptr1[col]); + b = GETJSAMPLE(inptr2[col]); + /* Assume that MAXJSAMPLE+1 is a power of 2, so that the MOD + * (modulo) operator is equivalent to the bitmask operator AND. + */ + r = (r + g - CENTERJSAMPLE) & MAXJSAMPLE; + b = (b + g - CENTERJSAMPLE) & MAXJSAMPLE; + /* Y */ + outptr[col] = (JSAMPLE) + ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) + >> SCALEBITS); + } + } +} + + /* * No colorspace change, but conversion from separate-planes * to interleaved representation. @@ -283,19 +363,20 @@ null_convert (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows) { - register JSAMPROW inptr, outptr; - register JDIMENSION count; - register int num_components = cinfo->num_components; - JDIMENSION num_cols = cinfo->output_width; int ci; + register int nc = cinfo->num_components; + register JSAMPROW outptr; + register JSAMPROW inptr; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; while (--num_rows >= 0) { - for (ci = 0; ci < num_components; ci++) { + for (ci = 0; ci < nc; ci++) { inptr = input_buf[ci][input_row]; outptr = output_buf[0] + ci; - for (count = num_cols; count > 0; count--) { + for (col = 0; col < num_cols; col++) { *outptr = *inptr++; /* needn't bother with GETJSAMPLE() here */ - outptr += num_components; + outptr += nc; } } input_row++; @@ -331,7 +412,8 @@ gray_rgb_convert (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows) { - register JSAMPROW inptr, outptr; + register JSAMPROW outptr; + register JSAMPROW inptr; register JDIMENSION col; JDIMENSION num_cols = cinfo->output_width; @@ -422,7 +504,7 @@ jinit_color_deconverter (j_decompress_ptr cinfo) cconvert = (my_cconvert_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_color_deconverter)); - cinfo->cconvert = (struct jpeg_color_deconverter *) cconvert; + cinfo->cconvert = &cconvert->pub; cconvert->pub.start_pass = start_pass_dcolor; /* Make sure num_components agrees with jpeg_color_space */ @@ -450,6 +532,10 @@ jinit_color_deconverter (j_decompress_ptr cinfo) break; } + /* Support color transform only for RGB colorspace */ + if (cinfo->color_transform && cinfo->jpeg_color_space != JCS_RGB) + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + /* Set out_color_components and conversion method based on requested space. * Also clear the component_needed flags for any unused components, * so that earlier pipeline stages can avoid useless computation. @@ -465,7 +551,17 @@ jinit_color_deconverter (j_decompress_ptr cinfo) for (ci = 1; ci < cinfo->num_components; ci++) cinfo->comp_info[ci].component_needed = FALSE; } else if (cinfo->jpeg_color_space == JCS_RGB) { - cconvert->pub.color_convert = rgb_gray_convert; + switch (cinfo->color_transform) { + case JCT_NONE: + cconvert->pub.color_convert = rgb_gray_convert; + break; + case JCT_SUBTRACT_GREEN: + cconvert->pub.color_convert = rgb1_gray_convert; + break; + default: + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + } build_rgb_y_table(cinfo); } else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); @@ -479,7 +575,17 @@ jinit_color_deconverter (j_decompress_ptr cinfo) } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) { cconvert->pub.color_convert = gray_rgb_convert; } else if (cinfo->jpeg_color_space == JCS_RGB) { - cconvert->pub.color_convert = rgb_convert; + switch (cinfo->color_transform) { + case JCT_NONE: + cconvert->pub.color_convert = rgb_convert; + break; + case JCT_SUBTRACT_GREEN: + cconvert->pub.color_convert = rgb1_rgb_convert; + break; + default: + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + } } else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; diff --git a/harbour/src/3rd/jpeg/jdhuff.c b/harbour/src/3rd/jpeg/jdhuff.c index 06f92fe47f..e548e689ba 100644 --- a/harbour/src/3rd/jpeg/jdhuff.c +++ b/harbour/src/3rd/jpeg/jdhuff.c @@ -2,7 +2,7 @@ * jdhuff.c * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 2006-2009 by Guido Vollbeding. + * Modified 2006-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -797,7 +797,7 @@ decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) /* There is always only one block per MCU */ - if (EOBRUN > 0) /* if it's a band of zeroes... */ + if (EOBRUN) /* if it's a band of zeroes... */ EOBRUN--; /* ...process it now (we do nothing) */ else { BITREAD_LOAD_STATE(cinfo,entropy->bitstate); @@ -816,18 +816,17 @@ decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) /* Scale and output coefficient in natural (dezigzagged) order */ (*block)[natural_order[k]] = (JCOEF) (s << Al); } else { - if (r == 15) { /* ZRL */ - k += 15; /* skip 15 zeroes in band */ - } else { /* EOBr, run length is 2^r + appended bits */ - EOBRUN = 1 << r; + if (r != 15) { /* EOBr, run length is 2^r + appended bits */ if (r) { /* EOBr, r > 0 */ + EOBRUN = 1 << r; CHECK_BIT_BUFFER(br_state, r, return FALSE); r = GET_BITS(r); EOBRUN += r; + EOBRUN--; /* this band is processed at this moment */ } - EOBRUN--; /* this band is processed at this moment */ break; /* force end-of-band */ } + k += 15; /* ZRL: skip 15 zeroes in band */ } } @@ -951,7 +950,7 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) k = cinfo->Ss; if (EOBRUN == 0) { - for (; k <= Se; k++) { + do { HUFF_DECODE(s, br_state, tbl, goto undoit, label3); r = s >> 4; s &= 15; @@ -981,7 +980,7 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) */ do { thiscoef = *block + natural_order[k]; - if (*thiscoef != 0) { + if (*thiscoef) { CHECK_BIT_BUFFER(br_state, 1, goto undoit); if (GET_BITS(1)) { if ((*thiscoef & p1) == 0) { /* do nothing if already set it */ @@ -1004,18 +1003,19 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) /* Remember its position in case we have to suspend */ newnz_pos[num_newnz++] = pos; } - } + k++; + } while (k <= Se); } - if (EOBRUN > 0) { + if (EOBRUN) { /* Scan any remaining coefficient positions after the end-of-band * (the last newly nonzero coefficient, if any). Append a correction * bit to each already-nonzero coefficient. A correction bit is 1 * if the absolute value of the coefficient must be increased. */ - for (; k <= Se; k++) { + do { thiscoef = *block + natural_order[k]; - if (*thiscoef != 0) { + if (*thiscoef) { CHECK_BIT_BUFFER(br_state, 1, goto undoit); if (GET_BITS(1)) { if ((*thiscoef & p1) == 0) { /* do nothing if already changed it */ @@ -1026,7 +1026,8 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) } } } - } + k++; + } while (k <= Se); /* Count one block completed in EOB run */ EOBRUN--; } @@ -1043,7 +1044,7 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) undoit: /* Re-zero any output coefficients that we made newly nonzero */ - while (num_newnz > 0) + while (num_newnz) (*block)[newnz_pos[--num_newnz]] = 0; return FALSE; @@ -1514,7 +1515,7 @@ jinit_huff_decoder (j_decompress_ptr cinfo) entropy = (huff_entropy_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(huff_entropy_decoder)); - cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + cinfo->entropy = &entropy->pub; entropy->pub.start_pass = start_pass_huff_decoder; if (cinfo->progressive_mode) { diff --git a/harbour/src/3rd/jpeg/jdmainct.c b/harbour/src/3rd/jpeg/jdmainct.c index 02723ca732..52091fb2be 100644 --- a/harbour/src/3rd/jpeg/jdmainct.c +++ b/harbour/src/3rd/jpeg/jdmainct.c @@ -2,6 +2,7 @@ * jdmainct.c * * Copyright (C) 1994-1996, Thomas G. Lane. + * Modified 2002-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -159,7 +160,7 @@ alloc_funny_pointers (j_decompress_ptr cinfo) * This is done only once, not once per pass. */ { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; int ci, rgroup; int M = cinfo->min_DCT_v_scaled_size; jpeg_component_info *compptr; @@ -168,10 +169,10 @@ alloc_funny_pointers (j_decompress_ptr cinfo) /* Get top-level space for component array pointers. * We alloc both arrays with one call to save a few cycles. */ - main->xbuffer[0] = (JSAMPIMAGE) + mainp->xbuffer[0] = (JSAMPIMAGE) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, cinfo->num_components * 2 * SIZEOF(JSAMPARRAY)); - main->xbuffer[1] = main->xbuffer[0] + cinfo->num_components; + mainp->xbuffer[1] = mainp->xbuffer[0] + cinfo->num_components; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { @@ -184,9 +185,9 @@ alloc_funny_pointers (j_decompress_ptr cinfo) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, 2 * (rgroup * (M + 4)) * SIZEOF(JSAMPROW)); xbuf += rgroup; /* want one row group at negative offsets */ - main->xbuffer[0][ci] = xbuf; + mainp->xbuffer[0][ci] = xbuf; xbuf += rgroup * (M + 4); - main->xbuffer[1][ci] = xbuf; + mainp->xbuffer[1][ci] = xbuf; } } @@ -200,7 +201,7 @@ make_funny_pointers (j_decompress_ptr cinfo) * This will be repeated at the beginning of each pass. */ { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; int ci, i, rgroup; int M = cinfo->min_DCT_v_scaled_size; jpeg_component_info *compptr; @@ -210,10 +211,10 @@ make_funny_pointers (j_decompress_ptr cinfo) ci++, compptr++) { rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / cinfo->min_DCT_v_scaled_size; /* height of a row group of component */ - xbuf0 = main->xbuffer[0][ci]; - xbuf1 = main->xbuffer[1][ci]; + xbuf0 = mainp->xbuffer[0][ci]; + xbuf1 = mainp->xbuffer[1][ci]; /* First copy the workspace pointers as-is */ - buf = main->buffer[ci]; + buf = mainp->buffer[ci]; for (i = 0; i < rgroup * (M + 2); i++) { xbuf0[i] = xbuf1[i] = buf[i]; } @@ -240,7 +241,7 @@ set_wraparound_pointers (j_decompress_ptr cinfo) * This changes the pointer list state from top-of-image to the normal state. */ { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; int ci, i, rgroup; int M = cinfo->min_DCT_v_scaled_size; jpeg_component_info *compptr; @@ -250,8 +251,8 @@ set_wraparound_pointers (j_decompress_ptr cinfo) ci++, compptr++) { rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / cinfo->min_DCT_v_scaled_size; /* height of a row group of component */ - xbuf0 = main->xbuffer[0][ci]; - xbuf1 = main->xbuffer[1][ci]; + xbuf0 = mainp->xbuffer[0][ci]; + xbuf1 = mainp->xbuffer[1][ci]; for (i = 0; i < rgroup; i++) { xbuf0[i - rgroup] = xbuf0[rgroup*(M+1) + i]; xbuf1[i - rgroup] = xbuf1[rgroup*(M+1) + i]; @@ -269,7 +270,7 @@ set_bottom_pointers (j_decompress_ptr cinfo) * Also sets rowgroups_avail to indicate number of nondummy row groups in row. */ { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; int ci, i, rgroup, iMCUheight, rows_left; jpeg_component_info *compptr; JSAMPARRAY xbuf; @@ -286,12 +287,12 @@ set_bottom_pointers (j_decompress_ptr cinfo) * so we need only do it once. */ if (ci == 0) { - main->rowgroups_avail = (JDIMENSION) ((rows_left-1) / rgroup + 1); + mainp->rowgroups_avail = (JDIMENSION) ((rows_left-1) / rgroup + 1); } /* Duplicate the last real sample row rgroup*2 times; this pads out the * last partial rowgroup and ensures at least one full rowgroup of context. */ - xbuf = main->xbuffer[main->whichptr][ci]; + xbuf = mainp->xbuffer[mainp->whichptr][ci]; for (i = 0; i < rgroup * 2; i++) { xbuf[rows_left + i] = xbuf[rows_left-1]; } @@ -306,27 +307,27 @@ set_bottom_pointers (j_decompress_ptr cinfo) METHODDEF(void) start_pass_main (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; switch (pass_mode) { case JBUF_PASS_THRU: if (cinfo->upsample->need_context_rows) { - main->pub.process_data = process_data_context_main; + mainp->pub.process_data = process_data_context_main; make_funny_pointers(cinfo); /* Create the xbuffer[] lists */ - main->whichptr = 0; /* Read first iMCU row into xbuffer[0] */ - main->context_state = CTX_PREPARE_FOR_IMCU; - main->iMCU_row_ctr = 0; + mainp->whichptr = 0; /* Read first iMCU row into xbuffer[0] */ + mainp->context_state = CTX_PREPARE_FOR_IMCU; + mainp->iMCU_row_ctr = 0; } else { /* Simple case with no context needed */ - main->pub.process_data = process_data_simple_main; + mainp->pub.process_data = process_data_simple_main; } - main->buffer_full = FALSE; /* Mark buffer empty */ - main->rowgroup_ctr = 0; + mainp->buffer_full = FALSE; /* Mark buffer empty */ + mainp->rowgroup_ctr = 0; break; #ifdef QUANT_2PASS_SUPPORTED case JBUF_CRANK_DEST: /* For last pass of 2-pass quantization, just crank the postprocessor */ - main->pub.process_data = process_data_crank_post; + mainp->pub.process_data = process_data_crank_post; break; #endif default: @@ -346,14 +347,14 @@ process_data_simple_main (j_decompress_ptr cinfo, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail) { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; JDIMENSION rowgroups_avail; /* Read input data if we haven't filled the main buffer yet */ - if (! main->buffer_full) { - if (! (*cinfo->coef->decompress_data) (cinfo, main->buffer)) + if (! mainp->buffer_full) { + if (! (*cinfo->coef->decompress_data) (cinfo, mainp->buffer)) return; /* suspension forced, can do nothing more */ - main->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ + mainp->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ } /* There are always min_DCT_scaled_size row groups in an iMCU row. */ @@ -364,14 +365,14 @@ process_data_simple_main (j_decompress_ptr cinfo, */ /* Feed the postprocessor */ - (*cinfo->post->post_process_data) (cinfo, main->buffer, - &main->rowgroup_ctr, rowgroups_avail, + (*cinfo->post->post_process_data) (cinfo, mainp->buffer, + &mainp->rowgroup_ctr, rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); /* Has postprocessor consumed all the data yet? If so, mark buffer empty */ - if (main->rowgroup_ctr >= rowgroups_avail) { - main->buffer_full = FALSE; - main->rowgroup_ctr = 0; + if (mainp->rowgroup_ctr >= rowgroups_avail) { + mainp->buffer_full = FALSE; + mainp->rowgroup_ctr = 0; } } @@ -386,15 +387,15 @@ process_data_context_main (j_decompress_ptr cinfo, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail) { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; /* Read input data if we haven't filled the main buffer yet */ - if (! main->buffer_full) { + if (! mainp->buffer_full) { if (! (*cinfo->coef->decompress_data) (cinfo, - main->xbuffer[main->whichptr])) + mainp->xbuffer[mainp->whichptr])) return; /* suspension forced, can do nothing more */ - main->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ - main->iMCU_row_ctr++; /* count rows received */ + mainp->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ + mainp->iMCU_row_ctr++; /* count rows received */ } /* Postprocessor typically will not swallow all the input data it is handed @@ -402,47 +403,47 @@ process_data_context_main (j_decompress_ptr cinfo, * to exit and restart. This switch lets us keep track of how far we got. * Note that each case falls through to the next on successful completion. */ - switch (main->context_state) { + switch (mainp->context_state) { case CTX_POSTPONED_ROW: /* Call postprocessor using previously set pointers for postponed row */ - (*cinfo->post->post_process_data) (cinfo, main->xbuffer[main->whichptr], - &main->rowgroup_ctr, main->rowgroups_avail, + (*cinfo->post->post_process_data) (cinfo, mainp->xbuffer[mainp->whichptr], + &mainp->rowgroup_ctr, mainp->rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); - if (main->rowgroup_ctr < main->rowgroups_avail) + if (mainp->rowgroup_ctr < mainp->rowgroups_avail) return; /* Need to suspend */ - main->context_state = CTX_PREPARE_FOR_IMCU; + mainp->context_state = CTX_PREPARE_FOR_IMCU; if (*out_row_ctr >= out_rows_avail) return; /* Postprocessor exactly filled output buf */ /*FALLTHROUGH*/ case CTX_PREPARE_FOR_IMCU: /* Prepare to process first M-1 row groups of this iMCU row */ - main->rowgroup_ctr = 0; - main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size - 1); + mainp->rowgroup_ctr = 0; + mainp->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size - 1); /* Check for bottom of image: if so, tweak pointers to "duplicate" * the last sample row, and adjust rowgroups_avail to ignore padding rows. */ - if (main->iMCU_row_ctr == cinfo->total_iMCU_rows) + if (mainp->iMCU_row_ctr == cinfo->total_iMCU_rows) set_bottom_pointers(cinfo); - main->context_state = CTX_PROCESS_IMCU; + mainp->context_state = CTX_PROCESS_IMCU; /*FALLTHROUGH*/ case CTX_PROCESS_IMCU: /* Call postprocessor using previously set pointers */ - (*cinfo->post->post_process_data) (cinfo, main->xbuffer[main->whichptr], - &main->rowgroup_ctr, main->rowgroups_avail, + (*cinfo->post->post_process_data) (cinfo, mainp->xbuffer[mainp->whichptr], + &mainp->rowgroup_ctr, mainp->rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); - if (main->rowgroup_ctr < main->rowgroups_avail) + if (mainp->rowgroup_ctr < mainp->rowgroups_avail) return; /* Need to suspend */ /* After the first iMCU, change wraparound pointers to normal state */ - if (main->iMCU_row_ctr == 1) + if (mainp->iMCU_row_ctr == 1) set_wraparound_pointers(cinfo); /* Prepare to load new iMCU row using other xbuffer list */ - main->whichptr ^= 1; /* 0=>1 or 1=>0 */ - main->buffer_full = FALSE; + mainp->whichptr ^= 1; /* 0=>1 or 1=>0 */ + mainp->buffer_full = FALSE; /* Still need to process last row group of this iMCU row, */ /* which is saved at index M+1 of the other xbuffer */ - main->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 1); - main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 2); - main->context_state = CTX_POSTPONED_ROW; + mainp->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 1); + mainp->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 2); + mainp->context_state = CTX_POSTPONED_ROW; } } @@ -475,15 +476,15 @@ process_data_crank_post (j_decompress_ptr cinfo, GLOBAL(void) jinit_d_main_controller (j_decompress_ptr cinfo, boolean need_full_buffer) { - my_main_ptr main; + my_main_ptr mainp; int ci, rgroup, ngroups; jpeg_component_info *compptr; - main = (my_main_ptr) + mainp = (my_main_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_main_controller)); - cinfo->main = (struct jpeg_d_main_controller *) main; - main->pub.start_pass = start_pass_main; + cinfo->main = &mainp->pub; + mainp->pub.start_pass = start_pass_main; if (need_full_buffer) /* shouldn't happen */ ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); @@ -504,9 +505,9 @@ jinit_d_main_controller (j_decompress_ptr cinfo, boolean need_full_buffer) ci++, compptr++) { rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / cinfo->min_DCT_v_scaled_size; /* height of a row group of component */ - main->buffer[ci] = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - compptr->width_in_blocks * compptr->DCT_h_scaled_size, - (JDIMENSION) (rgroup * ngroups)); + mainp->buffer[ci] = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + compptr->width_in_blocks * ((JDIMENSION) compptr->DCT_h_scaled_size), + (JDIMENSION) (rgroup * ngroups)); } } diff --git a/harbour/src/3rd/jpeg/jdmarker.c b/harbour/src/3rd/jpeg/jdmarker.c index f2a9cc4295..ce8b713c52 100644 --- a/harbour/src/3rd/jpeg/jdmarker.c +++ b/harbour/src/3rd/jpeg/jdmarker.c @@ -2,7 +2,7 @@ * jdmarker.c * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2009 by Guido Vollbeding. + * Modified 2009-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -23,24 +23,24 @@ typedef enum { /* JPEG marker codes */ M_SOF1 = 0xc1, M_SOF2 = 0xc2, M_SOF3 = 0xc3, - + M_SOF5 = 0xc5, M_SOF6 = 0xc6, M_SOF7 = 0xc7, - + M_JPG = 0xc8, M_SOF9 = 0xc9, M_SOF10 = 0xca, M_SOF11 = 0xcb, - + M_SOF13 = 0xcd, M_SOF14 = 0xce, M_SOF15 = 0xcf, - + M_DHT = 0xc4, - + M_DAC = 0xcc, - + M_RST0 = 0xd0, M_RST1 = 0xd1, M_RST2 = 0xd2, @@ -49,7 +49,7 @@ typedef enum { /* JPEG marker codes */ M_RST5 = 0xd5, M_RST6 = 0xd6, M_RST7 = 0xd7, - + M_SOI = 0xd8, M_EOI = 0xd9, M_SOS = 0xda, @@ -58,7 +58,7 @@ typedef enum { /* JPEG marker codes */ M_DRI = 0xdd, M_DHP = 0xde, M_EXP = 0xdf, - + M_APP0 = 0xe0, M_APP1 = 0xe1, M_APP2 = 0xe2, @@ -75,13 +75,14 @@ typedef enum { /* JPEG marker codes */ M_APP13 = 0xed, M_APP14 = 0xee, M_APP15 = 0xef, - + M_JPG0 = 0xf0, + M_JPG8 = 0xf8, M_JPG13 = 0xfd, M_COM = 0xfe, - + M_TEM = 0x01, - + M_ERROR = 0x100 } JPEG_MARKER; @@ -217,6 +218,7 @@ get_soi (j_decompress_ptr cinfo) /* Set initial assumptions for colorspace etc */ cinfo->jpeg_color_space = JCS_UNKNOWN; + cinfo->color_transform = JCT_NONE; cinfo->CCIR601_sampling = FALSE; /* Assume non-CCIR sampling??? */ cinfo->saw_JFIF_marker = FALSE; @@ -240,7 +242,7 @@ get_sof (j_decompress_ptr cinfo, boolean is_baseline, boolean is_prog, /* Process a SOFn marker */ { INT32 length; - int c, ci; + int c, ci, i; jpeg_component_info * compptr; INPUT_VARS(cinfo); @@ -278,11 +280,27 @@ get_sof (j_decompress_ptr cinfo, boolean is_baseline, boolean is_prog, cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, cinfo->num_components * SIZEOF(jpeg_component_info)); - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { + + for (ci = 0; ci < cinfo->num_components; ci++) { + INPUT_BYTE(cinfo, c, return FALSE); + /* Check to see whether component id has already been seen */ + /* (in violation of the spec, but unfortunately seen in some */ + /* files). If so, create "fake" component id equal to the */ + /* max id seen so far + 1. */ + for (i = 0, compptr = cinfo->comp_info; i < ci; i++, compptr++) { + if (c == compptr->component_id) { + compptr = cinfo->comp_info; + c = compptr->component_id; + compptr++; + for (i = 1; i < ci; i++, compptr++) { + if (compptr->component_id > c) c = compptr->component_id; + } + c++; + break; + } + } + compptr->component_id = c; compptr->component_index = ci; - INPUT_BYTE(cinfo, compptr->component_id, return FALSE); INPUT_BYTE(cinfo, c, return FALSE); compptr->h_samp_factor = (c >> 4) & 15; compptr->v_samp_factor = (c ) & 15; @@ -305,12 +323,12 @@ get_sos (j_decompress_ptr cinfo) /* Process a SOS marker */ { INT32 length; - int i, ci, n, c, cc; + int c, ci, i, n; jpeg_component_info * compptr; INPUT_VARS(cinfo); if (! cinfo->marker->saw_SOF) - ERREXIT(cinfo, JERR_SOS_NO_SOF); + ERREXITS(cinfo, JERR_SOF_BEFORE, "SOS"); INPUT_2BYTES(cinfo, length, return FALSE); @@ -328,24 +346,38 @@ get_sos (j_decompress_ptr cinfo) /* Collect the component-spec parameters */ for (i = 0; i < n; i++) { - INPUT_BYTE(cinfo, cc, return FALSE); INPUT_BYTE(cinfo, c, return FALSE); - + + /* Detect the case where component id's are not unique, and, if so, */ + /* create a fake component id using the same logic as in get_sof. */ + for (ci = 0; ci < i; ci++) { + if (c == cinfo->cur_comp_info[ci]->component_id) { + c = cinfo->cur_comp_info[0]->component_id; + for (ci = 1; ci < i; ci++) { + compptr = cinfo->cur_comp_info[ci]; + if (compptr->component_id > c) c = compptr->component_id; + } + c++; + break; + } + } + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { - if (cc == compptr->component_id) + if (c == compptr->component_id) goto id_found; } - ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc); + ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, c); id_found: cinfo->cur_comp_info[i] = compptr; + INPUT_BYTE(cinfo, c, return FALSE); compptr->dc_tbl_no = (c >> 4) & 15; compptr->ac_tbl_no = (c ) & 15; - - TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc, + + TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, compptr->component_id, compptr->dc_tbl_no, compptr->ac_tbl_no); } @@ -605,6 +637,68 @@ get_dri (j_decompress_ptr cinfo) } +LOCAL(boolean) +get_lse (j_decompress_ptr cinfo) +/* Process an LSE marker */ +{ + INT32 length; + unsigned int tmp; + int cid; + INPUT_VARS(cinfo); + + if (! cinfo->marker->saw_SOF) + ERREXITS(cinfo, JERR_SOF_BEFORE, "LSE"); + + if (cinfo->num_components < 3) goto bad; + + INPUT_2BYTES(cinfo, length, return FALSE); + + if (length != 24) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_BYTE(cinfo, tmp, return FALSE); + if (tmp != 0x0D) /* ID inverse transform specification */ + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != MAXJSAMPLE) goto bad; /* MAXTRANS */ + INPUT_BYTE(cinfo, tmp, return FALSE); + if (tmp != 3) goto bad; /* Nt=3 */ + INPUT_BYTE(cinfo, cid, return FALSE); + if (cid != cinfo->comp_info[1].component_id) goto bad; + INPUT_BYTE(cinfo, cid, return FALSE); + if (cid != cinfo->comp_info[0].component_id) goto bad; + INPUT_BYTE(cinfo, cid, return FALSE); + if (cid != cinfo->comp_info[2].component_id) goto bad; + INPUT_BYTE(cinfo, tmp, return FALSE); + if (tmp != 0x80) goto bad; /* F1: CENTER1=1, NORM1=0 */ + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != 0) goto bad; /* A(1,1)=0 */ + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != 0) goto bad; /* A(1,2)=0 */ + INPUT_BYTE(cinfo, tmp, return FALSE); + if (tmp != 0) goto bad; /* F2: CENTER2=0, NORM2=0 */ + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != 1) goto bad; /* A(2,1)=1 */ + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != 0) goto bad; /* A(2,2)=0 */ + INPUT_BYTE(cinfo, tmp, return FALSE); + if (tmp != 0) goto bad; /* F3: CENTER3=0, NORM3=0 */ + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != 1) goto bad; /* A(3,1)=1 */ + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != 0) { /* A(3,2)=0 */ + bad: + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + } + + /* OK, valid transform that we can handle. */ + cinfo->color_transform = JCT_SUBTRACT_GREEN; + + INPUT_SYNC(cinfo); + return TRUE; +} + + /* * Routines for processing APPn and COM markers. * These are either saved in memory or discarded, per application request. @@ -1059,32 +1153,37 @@ read_markers (j_decompress_ptr cinfo) return JPEG_SUSPENDED; cinfo->unread_marker = 0; /* processed the marker */ return JPEG_REACHED_SOS; - + case M_EOI: TRACEMS(cinfo, 1, JTRC_EOI); cinfo->unread_marker = 0; /* processed the marker */ return JPEG_REACHED_EOI; - + case M_DAC: if (! get_dac(cinfo)) return JPEG_SUSPENDED; break; - + case M_DHT: if (! get_dht(cinfo)) return JPEG_SUSPENDED; break; - + case M_DQT: if (! get_dqt(cinfo)) return JPEG_SUSPENDED; break; - + case M_DRI: if (! get_dri(cinfo)) return JPEG_SUSPENDED; break; - + + case M_JPG8: + if (! get_lse(cinfo)) + return JPEG_SUSPENDED; + break; + case M_APP0: case M_APP1: case M_APP2: @@ -1105,7 +1204,7 @@ read_markers (j_decompress_ptr cinfo) cinfo->unread_marker - (int) M_APP0]) (cinfo)) return JPEG_SUSPENDED; break; - + case M_COM: if (! (*((my_marker_ptr) cinfo->marker)->process_COM) (cinfo)) return JPEG_SUSPENDED; @@ -1314,7 +1413,7 @@ jinit_marker_reader (j_decompress_ptr cinfo) marker = (my_marker_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, SIZEOF(my_marker_reader)); - cinfo->marker = (struct jpeg_marker_reader *) marker; + cinfo->marker = &marker->pub; /* Initialize public method pointers */ marker->pub.reset_marker_reader = reset_marker_reader; marker->pub.read_markers = read_markers; diff --git a/harbour/src/3rd/jpeg/jerror.c b/harbour/src/3rd/jpeg/jerror.c index 3da7be86a0..8c0b9e0717 100644 --- a/harbour/src/3rd/jpeg/jerror.c +++ b/harbour/src/3rd/jpeg/jerror.c @@ -2,6 +2,7 @@ * jerror.c * * Copyright (C) 1991-1998, Thomas G. Lane. + * Modified 2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -66,7 +67,7 @@ const char * const jpeg_std_message_table[] = { * or jpeg_destroy) at some point. */ -METHODDEF(void) +METHODDEF(noreturn_t) error_exit (j_common_ptr cinfo) { /* Always display the message */ diff --git a/harbour/src/3rd/jpeg/jerror.h b/harbour/src/3rd/jpeg/jerror.h index 1cfb2b19d8..a4b661f716 100644 --- a/harbour/src/3rd/jpeg/jerror.h +++ b/harbour/src/3rd/jpeg/jerror.h @@ -2,7 +2,7 @@ * jerror.h * * Copyright (C) 1994-1997, Thomas G. Lane. - * Modified 1997-2009 by Guido Vollbeding. + * Modified 1997-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -106,11 +106,11 @@ JMESSAGE(JERR_QUANT_COMPONENTS, "Cannot quantize more than %d color components") JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors") JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors") +JMESSAGE(JERR_SOF_BEFORE, "Invalid JPEG file structure: %s before SOF") JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers") JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker") JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x") JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers") -JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF") JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s") JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file") JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file") diff --git a/harbour/src/3rd/jpeg/jmemmgr.c b/harbour/src/3rd/jpeg/jmemmgr.c index f0e83fb950..0a137cdde4 100644 --- a/harbour/src/3rd/jpeg/jmemmgr.c +++ b/harbour/src/3rd/jpeg/jmemmgr.c @@ -2,7 +2,7 @@ * jmemmgr.c * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 2011 by Guido Vollbeding. + * Modified 2011-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -214,7 +214,7 @@ print_mem_stats (j_common_ptr cinfo, int pool_id) #endif /* MEM_STATS */ -LOCAL(void) +LOCAL(noreturn_t) out_of_memory (j_common_ptr cinfo, int which) /* Report an out-of-memory error and stop execution */ /* If we compiled MEM_STATS support, report alloc requests before dying */ diff --git a/harbour/src/3rd/jpeg/jmorecfg.h b/harbour/src/3rd/jpeg/jmorecfg.h index 089345bf48..10cf68d324 100644 --- a/harbour/src/3rd/jpeg/jmorecfg.h +++ b/harbour/src/3rd/jpeg/jmorecfg.h @@ -2,7 +2,7 @@ * jmorecfg.h * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 1997-2011 by Guido Vollbeding. + * Modified 1997-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -219,6 +219,26 @@ typedef unsigned int JDIMENSION; #endif +/* The noreturn type identifier is used to declare functions + * which cannot return. + * Compilers can thus create more optimized code and perform + * better checks for warnings and errors. + * Static analyzer tools can make improved inferences about + * execution paths and are prevented from giving false alerts. + * + * Unfortunately, the proposed specifications of corresponding + * extensions in the Dec 2011 ISO C standard revision (C11), + * GCC, MSVC, etc. are not viable. + * Thus we introduce a user defined type to declare noreturn + * functions at least for clarity. A proper compiler would + * have a suitable noreturn type to match in place of void. + */ + +#ifndef HAVE_NORETURN_T +typedef void noreturn_t; +#endif + + /* Here is the pseudo-keyword for declaring pointers that must be "far" * on 80x86 machines. Most of the specialized coding for 80x86 is handled * by just saying "FAR *" where such a pointer is needed. In a few places @@ -241,15 +261,16 @@ typedef unsigned int JDIMENSION; * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. */ -#ifndef HAVE_BOOLEAN -typedef int boolean; -#endif +#ifdef HAVE_BOOLEAN #ifndef FALSE /* in case these macros already exist */ #define FALSE 0 /* values of boolean */ #endif #ifndef TRUE #define TRUE 1 #endif +#else +typedef enum { FALSE = 0, TRUE = 1 } boolean; +#endif /* diff --git a/harbour/src/3rd/jpeg/jpeg.dif b/harbour/src/3rd/jpeg/jpeg.dif index c27e135faf..e1691595cd 100644 --- a/harbour/src/3rd/jpeg/jpeg.dif +++ b/harbour/src/3rd/jpeg/jpeg.dif @@ -1,6 +1,6 @@ diff -urN jpeg.orig\jmorecfg.h jpeg\jmorecfg.h ---- jpeg.orig\jmorecfg.h Tue Feb 07 22:07:47 2012 -+++ jpeg\jmorecfg.h Tue Feb 07 22:07:48 2012 +--- jpeg.orig\jmorecfg.h Sat Feb 02 19:37:33 2013 ++++ jpeg\jmorecfg.h Sat Feb 02 19:37:33 2013 @@ -138,7 +138,9 @@ #ifdef CHAR_IS_UNSIGNED typedef char UINT8; diff --git a/harbour/src/3rd/jpeg/jpeglib.h b/harbour/src/3rd/jpeg/jpeglib.h index 1327cffa96..0a6dac44c3 100644 --- a/harbour/src/3rd/jpeg/jpeglib.h +++ b/harbour/src/3rd/jpeg/jpeglib.h @@ -2,7 +2,7 @@ * jpeglib.h * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2002-2011 by Guido Vollbeding. + * Modified 2002-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -34,12 +34,12 @@ extern "C" { #endif /* Version IDs for the JPEG library. - * Might be useful for tests like "#if JPEG_LIB_VERSION >= 80". + * Might be useful for tests like "#if JPEG_LIB_VERSION >= 90". */ -#define JPEG_LIB_VERSION 80 /* Compatibility version 8.0 */ -#define JPEG_LIB_VERSION_MAJOR 8 -#define JPEG_LIB_VERSION_MINOR 4 +#define JPEG_LIB_VERSION 90 /* Compatibility version 9.0 */ +#define JPEG_LIB_VERSION_MAJOR 9 +#define JPEG_LIB_VERSION_MINOR 0 /* Various constants determining the sizes of things. @@ -221,6 +221,13 @@ typedef enum { JCS_YCCK /* Y/Cb/Cr/K */ } J_COLOR_SPACE; +/* Supported color transforms. */ + +typedef enum { + JCT_NONE = 0, + JCT_SUBTRACT_GREEN = 1 +} J_COLOR_TRANSFORM; + /* DCT/IDCT algorithm options. */ typedef enum { @@ -369,7 +376,10 @@ struct jpeg_compress_struct { UINT16 X_density; /* Horizontal pixel density */ UINT16 Y_density; /* Vertical pixel density */ boolean write_Adobe_marker; /* should an Adobe marker be written? */ - + + J_COLOR_TRANSFORM color_transform; + /* Color transform identifier, writes LSE marker if nonzero */ + /* State variable: index of next scanline to be written to * jpeg_write_scanlines(). Application may use this to control its * processing loop, e.g., "while (next_scanline < image_height)". @@ -589,6 +599,9 @@ struct jpeg_decompress_struct { boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ UINT8 Adobe_transform; /* Color transform code from Adobe marker */ + J_COLOR_TRANSFORM color_transform; + /* Color transform identifier derived from LSE marker, otherwise zero */ + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ /* Aside from the specific data retained from APPn markers known to the @@ -681,7 +694,7 @@ struct jpeg_decompress_struct { struct jpeg_error_mgr { /* Error exit handler: does not return to caller */ - JMETHOD(void, error_exit, (j_common_ptr cinfo)); + JMETHOD(noreturn_t, error_exit, (j_common_ptr cinfo)); /* Conditionally emit a trace or warning message */ JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); /* Routine that actually outputs a trace or error message */ diff --git a/harbour/src/3rd/jpeg/jversion.h b/harbour/src/3rd/jpeg/jversion.h index 5d4915103e..232085f13b 100644 --- a/harbour/src/3rd/jpeg/jversion.h +++ b/harbour/src/3rd/jpeg/jversion.h @@ -1,7 +1,7 @@ /* * jversion.h * - * Copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding. + * Copyright (C) 1991-2013, Thomas G. Lane, Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -9,6 +9,6 @@ */ -#define JVERSION "8d 15-Jan-2012" +#define JVERSION "9 13-Jan-2013" -#define JCOPYRIGHT "Copyright (C) 2012, Thomas G. Lane, Guido Vollbeding" +#define JCOPYRIGHT "Copyright (C) 2013, Thomas G. Lane, Guido Vollbeding" diff --git a/harbour/src/3rd/jpeg/transupp.c b/harbour/src/3rd/jpeg/transupp.c index 016f383d4f..d0013cce8c 100644 --- a/harbour/src/3rd/jpeg/transupp.c +++ b/harbour/src/3rd/jpeg/transupp.c @@ -1,7 +1,7 @@ /* * transupp.c * - * Copyright (C) 1997-2011, Thomas G. Lane, Guido Vollbeding. + * Copyright (C) 1997-2012, Thomas G. Lane, Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -1076,7 +1076,7 @@ jtransform_request_workspace (j_decompress_ptr srcinfo, if (need_workspace) { coef_arrays = (jvirt_barray_ptr *) (*srcinfo->mem->alloc_small) ((j_common_ptr) srcinfo, JPOOL_IMAGE, - SIZEOF(jvirt_barray_ptr) * info->num_components); + SIZEOF(jvirt_barray_ptr) * info->num_components); width_in_iMCUs = (JDIMENSION) jdiv_round_up((long) info->output_width, (long) info->iMCU_sample_width); diff --git a/harbour/src/3rd/png/LICENSE b/harbour/src/3rd/png/LICENSE index 16a7d9ef3f..8d7ebb6cfb 100644 --- a/harbour/src/3rd/png/LICENSE +++ b/harbour/src/3rd/png/LICENSE @@ -10,7 +10,7 @@ this sentence. This code is released under the libpng license. -libpng versions 1.2.6, August 15, 2004, through 1.5.13, September 27, 2012, are +libpng versions 1.2.6, August 15, 2004, through 1.5.14, January 24, 2013, are Copyright (c) 2004, 2006-2012 Glenn Randers-Pehrson, and are distributed according to the same disclaimer and license as libpng-1.2.5 with the following individual added to the list of Contributing Authors @@ -108,4 +108,4 @@ certification mark of the Open Source Initiative. Glenn Randers-Pehrson glennrp at users.sourceforge.net -September 27, 2012 +January 24, 2013 diff --git a/harbour/src/3rd/png/Makefile b/harbour/src/3rd/png/Makefile index 27cf5d917a..a16be84ceb 100644 --- a/harbour/src/3rd/png/Makefile +++ b/harbour/src/3rd/png/Makefile @@ -69,8 +69,8 @@ else endif # ORIGIN http://www.libpng.org/pub/png/libpng.html -# VER 1.5.13 -# URL http://prdownloads.sourceforge.net/libpng/libpng-1.5.13.tar.gz?download +# VER 1.5.14 +# URL http://prdownloads.sourceforge.net/libpng/libpng-1.5.14.tar.gz?download # DIFF png.dif # # MAP LICENSE diff --git a/harbour/src/3rd/png/png.c b/harbour/src/3rd/png/png.c index 6e42c792b5..2fbcf45995 100644 --- a/harbour/src/3rd/png/png.c +++ b/harbour/src/3rd/png/png.c @@ -1,8 +1,8 @@ /* png.c - location for general purpose libpng functions * - * Last changed in libpng 1.5.11 [June 14, 2012] - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * Last changed in libpng 1.5.14 [January 24, 2013] + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -14,7 +14,7 @@ #include "pngpriv.h" /* Generate a compiler error if there is an old png.h in the search path. */ -typedef png_libpng_version_1_5_13 Your_png_h_is_not_version_1_5_13; +typedef png_libpng_version_1_5_14 Your_png_h_is_not_version_1_5_14; /* Tells libpng that we have already handled the first "num_bytes" bytes * of the PNG file signature. If the PNG data is embedded into another @@ -73,13 +73,16 @@ PNG_FUNCTION(voidpf /* PRIVATE */, png_zalloc,(voidpf png_ptr, uInt items, uInt size),PNG_ALLOCATED) { png_voidp ptr; - png_structp p=(png_structp)png_ptr; - png_uint_32 save_flags=p->flags; + png_structp p; + png_uint_32 save_flags; png_alloc_size_t num_bytes; if (png_ptr == NULL) return (NULL); + p=(png_structp)png_ptr; + save_flags=p->flags; + if (items > PNG_UINT_32_MAX/size) { png_warning (p, "Potential overflow in png_zalloc()"); @@ -655,14 +658,14 @@ png_get_copyright(png_const_structp png_ptr) #else # ifdef __STDC__ return PNG_STRING_NEWLINE \ - "libpng version 1.5.13 - September 27, 2012" PNG_STRING_NEWLINE \ - "Copyright (c) 1998-2012 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \ + "libpng version 1.5.14 - January 24, 2013" PNG_STRING_NEWLINE \ + "Copyright (c) 1998-2013 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \ "Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \ "Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \ PNG_STRING_NEWLINE; # else - return "libpng version 1.5.13 - September 27, 2012\ - Copyright (c) 1998-2012 Glenn Randers-Pehrson\ + return "libpng version 1.5.14 - January 24, 2013\ + Copyright (c) 1998-2013 Glenn Randers-Pehrson\ Copyright (c) 1996-1997 Andreas Dilger\ Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc."; # endif @@ -1458,7 +1461,7 @@ png_check_fp_string(png_const_charp string, png_size_t size) } #endif /* pCAL or sCAL */ -#ifdef PNG_READ_sCAL_SUPPORTED +#ifdef PNG_sCAL_SUPPORTED # ifdef PNG_FLOATING_POINT_SUPPORTED /* Utility used below - a simple accurate power of ten from an integral * exponent. @@ -2044,7 +2047,8 @@ png_muldiv_warn(png_structp png_ptr, png_fixed_point a, png_int_32 times, } #endif -#ifdef PNG_READ_GAMMA_SUPPORTED /* more fixed point functions for gamma */ +#if (defined PNG_READ_GAMMA_SUPPORTED) || (defined PNG_cHRM_SUPPORTED) +/* more fixed point functions for gamma and cHRM (xy/XYZ) suport. */ /* Calculate a reciprocal, return 0 on div-by-zero or overflow. */ png_fixed_point png_reciprocal(png_fixed_point a) @@ -2064,6 +2068,7 @@ png_reciprocal(png_fixed_point a) return 0; /* error/overflow */ } +#ifdef PNG_READ_GAMMA_SUPPORTED /* A local convenience routine. */ static png_fixed_point png_product2(png_fixed_point a, png_fixed_point b) @@ -2085,6 +2090,7 @@ png_product2(png_fixed_point a, png_fixed_point b) return 0; /* overflow */ } +#endif /* READ_GAMMA */ /* The inverse of the above. */ png_fixed_point @@ -2112,7 +2118,7 @@ png_reciprocal2(png_fixed_point a, png_fixed_point b) return 0; /* overflow */ } -#endif /* READ_GAMMA */ +#endif /* READ_GAMMA || cHRM */ #ifdef PNG_CHECK_cHRM_SUPPORTED /* Added at libpng version 1.2.34 (Dec 8, 2008) and 1.4.0 (Jan 2, diff --git a/harbour/src/3rd/png/png.dif b/harbour/src/3rd/png/png.dif index d18d5a7bf8..6d4d32d9e8 100644 --- a/harbour/src/3rd/png/png.dif +++ b/harbour/src/3rd/png/png.dif @@ -1,7 +1,7 @@ diff -urN png.orig\png.h png\png.h ---- png.orig\png.h Sat Sep 29 21:56:24 2012 -+++ png\png.h Sat Sep 29 21:56:24 2012 -@@ -439,7 +439,7 @@ +--- png.orig\png.h Sat Feb 02 19:40:41 2013 ++++ png\png.h Sat Feb 02 19:40:41 2013 +@@ -442,7 +442,7 @@ /* If pnglibconf.h is missing, you can * copy scripts/pnglibconf.h.prebuilt to pnglibconf.h */ @@ -11,8 +11,8 @@ diff -urN png.orig\png.h png\png.h #ifndef PNG_VERSION_INFO_ONLY diff -urN png.orig\pnglconf.h png\pnglconf.h ---- png.orig\pnglconf.h Sat Sep 29 21:56:24 2012 -+++ png\pnglconf.h Sat Sep 29 21:56:24 2012 +--- png.orig\pnglconf.h Sat Feb 02 19:40:41 2013 ++++ png\pnglconf.h Sat Feb 02 19:40:41 2013 @@ -21,7 +21,11 @@ #ifndef PNGLCONF_H #define PNGLCONF_H diff --git a/harbour/src/3rd/png/png.h b/harbour/src/3rd/png/png.h index 29ae630d02..49cb9b6baf 100644 --- a/harbour/src/3rd/png/png.h +++ b/harbour/src/3rd/png/png.h @@ -1,8 +1,8 @@ /* png.h - header file for PNG reference library * - * libpng version 1.5.13 - September 27, 2012 - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * libpng version 1.5.14 - January 24, 2013 + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -11,7 +11,7 @@ * Authors and maintainers: * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger - * libpng versions 0.97, January 1998, through 1.5.13 - September 27, 2012: Glenn + * libpng versions 0.97, January 1998, through 1.5.14 - January 24, 2013: Glenn * See also "Contributing Authors", below. * * Note about libpng version numbers: @@ -181,6 +181,9 @@ * 1.5.13beta01-02 15 10513 15.so.15.13[.0] * 1.5.13rc01 15 10513 15.so.15.13[.0] * 1.5.13 15 10513 15.so.15.13[.0] + * 1.5.14beta01-08 15 10514 15.so.15.14[.0] + * 1.5.14rc01-03 15 10514 15.so.15.14[.0] + * 1.5.14 15 10514 15.so.15.14[.0] * * Henceforth the source version will match the shared-library major * and minor numbers; the shared-library major version number will be @@ -212,8 +215,8 @@ * * This code is released under the libpng license. * - * libpng versions 1.2.6, August 15, 2004, through 1.5.13, September 27, 2012, are - * Copyright (c) 2004, 2006-2012 Glenn Randers-Pehrson, and are + * libpng versions 1.2.6, August 15, 2004, through 1.5.14, January 24, 2013, are + * Copyright (c) 2004, 2006-2013 Glenn Randers-Pehrson, and are * distributed according to the same disclaimer and license as libpng-1.2.5 * with the following individual added to the list of Contributing Authors: * @@ -324,13 +327,13 @@ * Y2K compliance in libpng: * ========================= * - * September 27, 2012 + * January 24, 2013 * * Since the PNG Development group is an ad-hoc body, we can't make * an official declaration. * * This is your unofficial assurance that libpng from version 0.71 and - * upward through 1.5.13 are Y2K compliant. It is my belief that + * upward through 1.5.14 are Y2K compliant. It is my belief that * earlier versions were also Y2K compliant. * * Libpng only has two year fields. One is a 2-byte unsigned integer @@ -389,9 +392,9 @@ */ /* Version information for png.h - this should match the version in png.c */ -#define PNG_LIBPNG_VER_STRING "1.5.13" +#define PNG_LIBPNG_VER_STRING "1.5.14" #define PNG_HEADER_VERSION_STRING \ - " libpng version 1.5.13 - September 27, 2012\n" + " libpng version 1.5.14 - January 24, 2013\n" #define PNG_LIBPNG_VER_SONUM 15 #define PNG_LIBPNG_VER_DLLNUM 15 @@ -399,7 +402,7 @@ /* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ #define PNG_LIBPNG_VER_MAJOR 1 #define PNG_LIBPNG_VER_MINOR 5 -#define PNG_LIBPNG_VER_RELEASE 13 +#define PNG_LIBPNG_VER_RELEASE 14 /* This should match the numeric part of the final component of * PNG_LIBPNG_VER_STRING, omitting any leading zero: @@ -430,7 +433,7 @@ * version 1.0.0 was mis-numbered 100 instead of 10000). From * version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release */ -#define PNG_LIBPNG_VER 10513 /* 1.5.13 */ +#define PNG_LIBPNG_VER 10514 /* 1.5.14 */ /* Library configuration: these options cannot be changed after * the library has been built. @@ -552,7 +555,7 @@ extern "C" { /* This triggers a compiler error in png.c, if png.c and png.h * do not agree upon the version number. */ -typedef char* png_libpng_version_1_5_13; +typedef char* png_libpng_version_1_5_14; /* Three color definitions. The order of the red, green, and blue, (and the * exact size) is not important, although the size of the fields need to diff --git a/harbour/src/3rd/png/pngconf.h b/harbour/src/3rd/png/pngconf.h index a36492817c..f6b38a6a00 100644 --- a/harbour/src/3rd/png/pngconf.h +++ b/harbour/src/3rd/png/pngconf.h @@ -1,9 +1,9 @@ /* pngconf.h - machine configurable file for libpng * - * libpng version 1.5.13 - September 27, 2012 + * libpng version 1.5.14 - January 24, 2013 * - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -177,18 +177,16 @@ * ========================== * This code is used at build time to find PNG_IMPEXP, the API settings * and PNG_EXPORT_TYPE(), it may also set a macro to indicate the DLL - * import processing is possible. On Windows/x86 systems it also sets + * import processing is possible. On Windows systems it also sets * compiler-specific macros to the values required to change the calling * conventions of the various functions. */ -#if ( defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\ - defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) ) &&\ - ( defined(_X86_) || defined(_X64_) || defined(_M_IX86) ||\ - defined(_M_X64) || defined(_M_IA64) ) - /* Windows system (DOS doesn't support DLLs) running on x86/x64. Includes - * builds under Cygwin or MinGW. Also includes Watcom builds but these need - * special treatment because they are not compatible with GCC or Visual C - * because of different calling conventions. +#if defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\ + defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) + /* Windows system (DOS doesn't support DLLs). Includes builds under Cygwin or + * MinGW on any architecture currently supported by Windows. Also includes + * Watcom builds but these need special treatment because they are not + * compatible with GCC or Visual C because of different calling conventions. */ # if PNG_API_RULE == 2 /* If this line results in an error, either because __watcall is not @@ -202,6 +200,9 @@ # if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800)) # define PNGCAPI __cdecl # if PNG_API_RULE == 1 + /* If this line results in an error __stdcall is not understood and + * PNG_API_RULE should not have been set to '1'. + */ # define PNGAPI __stdcall # endif # else @@ -239,7 +240,7 @@ # endif # endif /* compiler */ -#else /* !Windows/x86 */ +#else /* !Windows */ # if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) # define PNGAPI _System # else /* !Windows/x86 && !OS/2 */ diff --git a/harbour/src/3rd/png/pngerror.c b/harbour/src/3rd/png/pngerror.c index e0585a856e..ba39879774 100644 --- a/harbour/src/3rd/png/pngerror.c +++ b/harbour/src/3rd/png/pngerror.c @@ -1,8 +1,8 @@ /* pngerror.c - stub functions for i/o and memory allocation * - * Last changed in libpng 1.5.8 [February 1, 2011] - * Copyright (c) 1998-2011 Glenn Randers-Pehrson + * Last changed in libpng 1.5.14 [January 24, 2013] + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -161,7 +161,7 @@ png_format_number(png_const_charp start, png_charp end, int format, case PNG_NUMBER_FORMAT_02u: /* Expects at least 2 digits. */ mincount = 2; - /* fall through */ + /* FALL THROUGH */ case PNG_NUMBER_FORMAT_u: *--end = digits[number % 10]; @@ -171,7 +171,7 @@ png_format_number(png_const_charp start, png_charp end, int format, case PNG_NUMBER_FORMAT_02x: /* This format expects at least two digits */ mincount = 2; - /* fall through */ + /* FALL THROUGH */ case PNG_NUMBER_FORMAT_x: *--end = digits[number & 0xf]; diff --git a/harbour/src/3rd/png/pngget.c b/harbour/src/3rd/png/pngget.c index 43400cda7e..c9a663f29a 100644 --- a/harbour/src/3rd/png/pngget.c +++ b/harbour/src/3rd/png/pngget.c @@ -1,7 +1,7 @@ /* pngget.c - retrieval of values from info struct * - * Last changed in libpng 1.5.7 [December 15, 2011] + * Last changed in libpng 1.5.14 [January 24, 2013] * Copyright (c) 1998-2011 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) @@ -175,6 +175,9 @@ png_get_pixel_aspect_ratio(png_const_structp png_ptr, png_const_infop info_ptr) return ((float)((float)info_ptr->y_pixels_per_unit /(float)info_ptr->x_pixels_per_unit)); } +#else + PNG_UNUSED(png_ptr) + PNG_UNUSED(info_ptr) #endif return ((float)0.0); @@ -203,6 +206,9 @@ png_get_pixel_aspect_ratio_fixed(png_const_structp png_ptr, (png_int_32)info_ptr->x_pixels_per_unit)) return res; } +#else + PNG_UNUSED(png_ptr) + PNG_UNUSED(info_ptr) #endif return 0; diff --git a/harbour/src/3rd/png/pnginfo.h b/harbour/src/3rd/png/pnginfo.h index a33bfab06d..0e5c977dd9 100644 --- a/harbour/src/3rd/png/pnginfo.h +++ b/harbour/src/3rd/png/pnginfo.h @@ -242,7 +242,7 @@ defined(PNG_READ_BACKGROUND_SUPPORTED) #ifdef PNG_sPLT_SUPPORTED /* Data on sPLT chunks (there may be more than one). */ png_sPLT_tp splt_palettes; - png_uint_32 splt_palettes_num; + int splt_palettes_num; #endif #ifdef PNG_sCAL_SUPPORTED diff --git a/harbour/src/3rd/png/pnglconf.h b/harbour/src/3rd/png/pnglconf.h index f1cd3275ec..2a6776f23e 100644 --- a/harbour/src/3rd/png/pnglconf.h +++ b/harbour/src/3rd/png/pnglconf.h @@ -3,7 +3,7 @@ /* pnglibconf.h - library build configuration */ -/* Libpng 1.5.13 - September 27, 2012 */ +/* Libpng 1.5.14 - January 24, 2013 */ /* Copyright (c) 1998-2012 Glenn Randers-Pehrson */ diff --git a/harbour/src/3rd/png/pngpriv.h b/harbour/src/3rd/png/pngpriv.h index 7394e4a16e..294a464ac6 100644 --- a/harbour/src/3rd/png/pngpriv.h +++ b/harbour/src/3rd/png/pngpriv.h @@ -416,7 +416,7 @@ typedef PNG_CONST png_uint_16p FAR * png_const_uint_16pp; #if PNG_ALIGN_TYPE == PNG_ALIGN_SIZE /* This is used because in some compiler implementations non-aligned * structure members are supported, so the offsetof approach below fails. - * Set PNG_ALIGN_TO_SIZE=0 for compiler combinations where unaligned access + * Set PNG_ALIGN_SIZE=0 for compiler combinations where unaligned access * is good for performance. Do not do this unless you have tested the result * and understand it. */ @@ -823,10 +823,8 @@ PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr)); # ifdef PNG_FLOATING_POINT_SUPPORTED PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma)); # endif -# ifdef PNG_FIXED_POINT_SUPPORTED PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, png_fixed_point file_gamma)); -# endif #endif #ifdef PNG_WRITE_sBIT_SUPPORTED @@ -1491,14 +1489,16 @@ PNG_EXTERN void png_formatted_warning(png_structp png_ptr, /* ASCII to FP interfaces, currently only implemented if sCAL * support is required. */ -#if defined(PNG_READ_sCAL_SUPPORTED) +#ifdef PNG_sCAL_SUPPORTED /* MAX_DIGITS is actually the maximum number of characters in an sCAL * width or height, derived from the precision (number of significant * digits - a build time settable option) and assumpitions about the * maximum ridiculous exponent. */ #define PNG_sCAL_MAX_DIGITS (PNG_sCAL_PRECISION+1/*.*/+1/*E*/+10/*exponent*/) +#endif +#ifdef PNG_sCAL_SUPPORTED #ifdef PNG_FLOATING_POINT_SUPPORTED PNG_EXTERN void png_ascii_from_fp PNGARG((png_structp png_ptr, png_charp ascii, png_size_t size, double fp, unsigned int precision)); @@ -1583,14 +1583,14 @@ PNG_EXTERN void png_ascii_from_fixed PNGARG((png_structp png_ptr, #define PNG_FP_IS_POSITIVE(state) (((state) & PNG_FP_NZ_MASK) == PNG_FP_Z_MASK) #define PNG_FP_IS_NEGATIVE(state) (((state) & PNG_FP_NZ_MASK) == PNG_FP_NZ_MASK) -/* The actual parser. This can be called repeatedly, it updates +/* The actual parser. This can be called repeatedly. It updates * the index into the string and the state variable (which must - * be initialzed to 0). It returns a result code, as above. There + * be initialized to 0). It returns a result code, as above. There * is no point calling the parser any more if it fails to advance to * the end of the string - it is stuck on an invalid character (or * terminated by '\0'). * - * Note that the pointer will consume an E or even an E+ then leave + * Note that the pointer will consume an E or even an E+ and then leave * a 'maybe' state even though a preceding integer.fraction is valid. * The PNG_FP_WAS_VALID flag indicates that a preceding substring was * a valid number. It's possible to recover from this by calling @@ -1629,7 +1629,7 @@ PNG_EXTERN png_fixed_point png_muldiv_warn PNGARG((png_structp png_ptr, png_fixed_point a, png_int_32 multiplied_by, png_int_32 divided_by)); #endif -#ifdef PNG_READ_GAMMA_SUPPORTED +#if (defined PNG_READ_GAMMA_SUPPORTED) || (defined PNG_cHRM_SUPPORTED) /* Calculate a reciprocal - used for gamma values. This returns * 0 if the argument is 0 in order to maintain an undefined value, * there are no warnings. @@ -1664,7 +1664,72 @@ PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr, int bit_depth)); #endif -/* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */ +/* Missing declarations if FIXED_POINT is *not* supported - fixed properly + * in libpng 1.6 + */ +#ifndef PNG_FIXED_POINT_SUPPORTED +#ifdef PNG_cHRM_SUPPORTED +PNG_EXTERN png_uint_32 png_get_cHRM_XYZ_fixed PNGARG( + (png_structp png_ptr, png_const_infop info_ptr, + png_fixed_point *int_red_X, png_fixed_point *int_red_Y, + png_fixed_point *int_red_Z, png_fixed_point *int_green_X, + png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, + png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, + png_fixed_point *int_blue_Z)); +PNG_EXTERN void png_set_cHRM_XYZ_fixed PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y, + png_fixed_point int_red_Z, png_fixed_point int_green_X, + png_fixed_point int_green_Y, png_fixed_point int_green_Z, + png_fixed_point int_blue_X, png_fixed_point int_blue_Y, + png_fixed_point int_blue_Z)); +PNG_EXTERN void png_set_cHRM_fixed PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_white_x, + png_fixed_point int_white_y, png_fixed_point int_red_x, + png_fixed_point int_red_y, png_fixed_point int_green_x, + png_fixed_point int_green_y, png_fixed_point int_blue_x, + png_fixed_point int_blue_y)); +#endif + +#ifdef PNG_gAMA_SUPPORTED +PNG_EXTERN png_uint_32 png_get_gAMA_fixed PNGARG( + (png_const_structp png_ptr, png_const_infop info_ptr, + png_fixed_point *int_file_gamma)); +PNG_EXTERN void png_set_gAMA_fixed PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_file_gamma)); +#endif + +#ifdef PNG_READ_BACKGROUND_SUPPORTED +PNG_EXTERN void png_set_background_fixed PNGARG((png_structp png_ptr, + png_const_color_16p background_color, int background_gamma_code, + int need_expand, png_fixed_point background_gamma)); +#endif + +#ifdef PNG_READ_ALPHA_MODE_SUPPORTED +PNG_EXTERN void png_set_alpha_mode_fixed PNGARG((png_structp png_ptr, + int mode, png_fixed_point output_gamma)); +#endif + +#ifdef PNG_READ_GAMMA_SUPPORTED +PNG_EXTERN void png_set_gamma_fixed PNGARG((png_structp png_ptr, + png_fixed_point screen_gamma, png_fixed_point override_file_gamma)); +#endif + +#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED +PNG_EXTERN void png_set_rgb_to_gray_fixed PNGARG((png_structp png_ptr, + int error_action, png_fixed_point red, png_fixed_point green)); +#endif +#endif /* FIX MISSING !FIXED_POINT DECLARATIONS */ + +#ifdef PNG_FILTER_OPTIMIZATIONS +PNG_EXTERN void PNG_FILTER_OPTIMIZATIONS(png_structp png_ptr, unsigned int bpp); + /* This is the initialization function for hardware specific optimizations, + * one implementation (for ARM NEON machines) is contained in + * arm/filter_neon.c. It need not be defined - the generic code will be used + * if not. + */ +#endif + +/* Maintainer: Put new private prototypes here ^ */ #include "pngdebug.h" diff --git a/harbour/src/3rd/png/pngread.c b/harbour/src/3rd/png/pngread.c index 1d8c6b3346..4296cf1cb6 100644 --- a/harbour/src/3rd/png/pngread.c +++ b/harbour/src/3rd/png/pngread.c @@ -1,7 +1,7 @@ /* pngread.c - read a PNG file * - * Last changed in libpng 1.5.10 [March 8, 2012] + * Last changed in libpng 1.5.14 [January 24, 2013] * Copyright (c) 1998-2012 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) diff --git a/harbour/src/3rd/png/pngrtran.c b/harbour/src/3rd/png/pngrtran.c index 1e31c75205..064d92b7e4 100644 --- a/harbour/src/3rd/png/pngrtran.c +++ b/harbour/src/3rd/png/pngrtran.c @@ -1,8 +1,8 @@ /* pngrtran.c - transforms the data in a row for PNG readers * - * Last changed in libpng 1.5.11 [June 14, 2012] - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * Last changed in libpng 1.5.14 [January 24, 2013] + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -1221,7 +1221,7 @@ png_init_rgb_transformations(png_structp png_ptr) default: case 8: - /* Already 8 bits, fall through */ + /* FALL THROUGH (already 8 bits) */ case 16: /* Already a full 16 bits */ @@ -3920,7 +3920,7 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) *sp = (png_byte)png_ptr->background.gray; else if (a < 0xff) - png_composite(*sp, *sp, a, png_ptr->background_1.gray); + png_composite(*sp, *sp, a, png_ptr->background.gray); } } } @@ -3989,7 +3989,7 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) png_uint_16 g, v; g = (png_uint_16)(((*sp) << 8) + *(sp + 1)); - png_composite_16(v, g, a, png_ptr->background_1.gray); + png_composite_16(v, g, a, png_ptr->background.gray); *sp = (png_byte)((v >> 8) & 0xff); *(sp + 1) = (png_byte)(v & 0xff); } @@ -4746,7 +4746,9 @@ png_do_expand(png_row_infop row_info, png_bytep row, { if (row_info->bit_depth == 8) { - gray = gray & 0xff; + /* NOTE: prior to libpng 1.5.14 this cleared out the top bits of + * 'gray', however if those are set it is an error. + */ sp = row + (png_size_t)row_width - 1; dp = row + (png_size_t)(row_width << 1) - 1; diff --git a/harbour/src/3rd/png/pngrutil.c b/harbour/src/3rd/png/pngrutil.c index 4ef05fe441..5ee452d575 100644 --- a/harbour/src/3rd/png/pngrutil.c +++ b/harbour/src/3rd/png/pngrutil.c @@ -1,8 +1,8 @@ /* pngrutil.c - utilities to read a PNG file * - * Last changed in libpng 1.5.10 [March 8, 2012] - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * Last changed in libpng 1.5.14 [January 24, 2013] + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -2452,7 +2452,7 @@ png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) png_textp text_ptr; png_charp key, lang, text, lang_key; int comp_flag; - int comp_type = 0; + int comp_type; int ret; png_size_t slength, prefix_len, data_len; @@ -2533,15 +2533,24 @@ png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) return; } - else + comp_flag = *lang++; + comp_type = *lang++; + + /* 1.5.14: The spec says "for uncompressed text decoders shall ignore [the + * compression type]". The compression flag shall be 0 (no compression) or + * 1 (compressed with method 0 - deflate.) + */ + if (comp_flag != 0 && comp_flag != 1) { - comp_flag = *lang++; - comp_type = *lang++; + png_warning(png_ptr, "invalid iTXt compression flag"); + png_free(png_ptr, png_ptr->chunkdata); + png_ptr->chunkdata = NULL; + return; } - if (comp_type || (comp_flag && comp_flag != PNG_TEXT_COMPRESSION_zTXt)) + if (comp_flag/*compressed*/ && comp_type != 0) { - png_warning(png_ptr, "Unknown iTXt compression type or method"); + png_warning(png_ptr, "unknown iTXt compression type"); png_free(png_ptr, png_ptr->chunkdata); png_ptr->chunkdata = NULL; return; @@ -2577,7 +2586,7 @@ png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) key=png_ptr->chunkdata; - if (comp_flag) + if (comp_flag/*compressed*/) png_decompress_chunk(png_ptr, comp_type, (size_t)length, prefix_len, &data_len); @@ -2595,7 +2604,8 @@ png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) return; } - text_ptr->compression = (int)comp_flag + 1; + text_ptr->compression = + (comp_flag ? PNG_ITXT_COMPRESSION_zTXt : PNG_ITXT_COMPRESSION_NONE); text_ptr->lang_key = png_ptr->chunkdata + (lang_key - key); text_ptr->lang = png_ptr->chunkdata + (lang - key); text_ptr->itxt_length = data_len; @@ -3660,66 +3670,6 @@ png_read_filter_row_paeth_multibyte_pixel(png_row_infop row_info, png_bytep row, } } -#ifdef PNG_ARM_NEON - -#ifdef __linux__ -#include -#include -#include - -static int png_have_hwcap(unsigned cap) -{ - FILE *f = fopen("/proc/self/auxv", "r"); - Elf32_auxv_t aux; - int have_cap = 0; - - if (!f) - return 0; - - while (fread(&aux, sizeof(aux), 1, f) > 0) - { - if (aux.a_type == AT_HWCAP && - aux.a_un.a_val & cap) - { - have_cap = 1; - break; - } - } - - fclose(f); - - return have_cap; -} -#endif /* __linux__ */ - -static void -png_init_filter_functions_neon(png_structp pp, unsigned int bpp) -{ -#ifdef __linux__ - if (!png_have_hwcap(HWCAP_NEON)) - return; -#endif - - pp->read_filter[PNG_FILTER_VALUE_UP-1] = png_read_filter_row_up_neon; - - if (bpp == 3) - { - pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub3_neon; - pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_neon; - pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = - png_read_filter_row_paeth3_neon; - } - - else if (bpp == 4) - { - pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_neon; - pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_neon; - pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = - png_read_filter_row_paeth4_neon; - } -} -#endif /* PNG_ARM_NEON */ - static void png_init_filter_functions(png_structp pp) { @@ -3735,8 +3685,16 @@ png_init_filter_functions(png_structp pp) pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth_multibyte_pixel; -#ifdef PNG_ARM_NEON - png_init_filter_functions_neon(pp, bpp); +#ifdef PNG_FILTER_OPTIMIZATIONS + /* To use this define PNG_FILTER_OPTIMIZATIONS as the name of a function to + * call to install hardware optimizations for the above functions; simply + * replace whatever elements of the pp->read_filter[] array with a hardware + * specific (or, for that matter, generic) optimization. + * + * To see an example of this examine what configure.ac does when + * --enable-arm-neon is specified on the command line. + */ + PNG_FILTER_OPTIMIZATIONS(pp, bpp); #endif } diff --git a/harbour/src/3rd/png/pngset.c b/harbour/src/3rd/png/pngset.c index 8c07eec3e8..6e9358b289 100644 --- a/harbour/src/3rd/png/pngset.c +++ b/harbour/src/3rd/png/pngset.c @@ -1,8 +1,8 @@ /* pngset.c - storage of image information into info struct * - * Last changed in libpng 1.5.11 [June 14, 2012] - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * Last changed in libpng 1.5.14 [January 24, 2013] + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -690,6 +690,17 @@ png_set_text_2(png_structp png_ptr, png_infop info_ptr, /* Make sure we have enough space in the "text" array in info_struct * to hold all of the incoming text_ptr objects. */ + + if (num_text < 0 || + num_text > INT_MAX - info_ptr->num_text - 8 || + (unsigned int)/*SAFE*/(num_text +/*SAFE*/ + info_ptr->num_text + 8) >= + PNG_SIZE_MAX/png_sizeof(png_text)) + { + png_warning(png_ptr, "too many text chunks"); + return(0); + } + if (info_ptr->num_text + num_text > info_ptr->max_text) { int old_max_text = info_ptr->max_text; @@ -897,6 +908,12 @@ png_set_tRNS(png_structp png_ptr, png_infop info_ptr, if (png_ptr == NULL || info_ptr == NULL) return; + if (num_trans < 0 || num_trans > PNG_MAX_PALETTE_LENGTH) + { + png_warning(png_ptr, "Ignoring invalid num_trans value"); + return; + } + if (trans_alpha != NULL) { /* It may not actually be necessary to set png_ptr->trans_alpha here; @@ -963,9 +980,18 @@ png_set_sPLT(png_structp png_ptr, if (png_ptr == NULL || info_ptr == NULL) return; - np = (png_sPLT_tp)png_malloc_warn(png_ptr, - (info_ptr->splt_palettes_num + nentries) * - (png_size_t)png_sizeof(png_sPLT_t)); + if (nentries < 0 || + nentries > INT_MAX-info_ptr->splt_palettes_num || + (unsigned int)/*SAFE*/(nentries +/*SAFE*/ + info_ptr->splt_palettes_num) >= + PNG_SIZE_MAX/png_sizeof(png_sPLT_t)) + np=NULL; + + else + + np = (png_sPLT_tp)png_malloc_warn(png_ptr, + (info_ptr->splt_palettes_num + nentries) * + (png_size_t)png_sizeof(png_sPLT_t)); if (np == NULL) { @@ -1033,9 +1059,17 @@ png_set_unknown_chunks(png_structp png_ptr, if (png_ptr == NULL || info_ptr == NULL || num_unknowns == 0) return; - np = (png_unknown_chunkp)png_malloc_warn(png_ptr, - (png_size_t)(info_ptr->unknown_chunks_num + num_unknowns) * - png_sizeof(png_unknown_chunk)); + if (num_unknowns < 0 || + num_unknowns > INT_MAX-info_ptr->unknown_chunks_num || + (unsigned int)/*SAFE*/(num_unknowns +/*SAFE*/ + info_ptr->unknown_chunks_num) >= + PNG_SIZE_MAX/png_sizeof(png_unknown_chunk)) + np=NULL; + + else + np = (png_unknown_chunkp)png_malloc_warn(png_ptr, + (png_size_t)(info_ptr->unknown_chunks_num + num_unknowns) * + png_sizeof(png_unknown_chunk)); if (np == NULL) { diff --git a/harbour/src/3rd/png/pngwrite.c b/harbour/src/3rd/png/pngwrite.c index 2a72ad33f4..18f535cd68 100644 --- a/harbour/src/3rd/png/pngwrite.c +++ b/harbour/src/3rd/png/pngwrite.c @@ -1,8 +1,8 @@ /* pngwrite.c - general routines to write a PNG file * - * Last changed in libpng 1.5.11 [June 14, 2012] - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * Last changed in libpng 1.5.14 [January 24, 2013] + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -420,7 +420,6 @@ png_write_end(png_structp png_ptr, png_infop info_ptr) } #ifdef PNG_CONVERT_tIME_SUPPORTED -/* "tm" structure is not supported on WindowsCE */ void PNGAPI png_convert_from_struct_tm(png_timep ptime, PNG_CONST struct tm FAR * ttime) { @@ -1042,6 +1041,7 @@ png_set_filter(png_structp png_ptr, int method, int filters) case 5: case 6: case 7: png_warning(png_ptr, "Unknown row filter for method 0"); + /* FALL THROUGH */ #endif /* PNG_WRITE_FILTER_SUPPORTED */ case PNG_FILTER_VALUE_NONE: png_ptr->do_filter = PNG_FILTER_NONE; break; diff --git a/harbour/src/3rd/png/pngwutil.c b/harbour/src/3rd/png/pngwutil.c index 19b75afa37..604ad32aac 100644 --- a/harbour/src/3rd/png/pngwutil.c +++ b/harbour/src/3rd/png/pngwutil.c @@ -1,8 +1,8 @@ /* pngwutil.c - utilities to write a PNG file * - * Last changed in libpng 1.5.10 [March 8, 2012] - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * Last changed in libpng 1.5.14 [January 24, 2013] + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -460,24 +460,21 @@ png_text_compress(png_structp png_ptr, old_ptr = comp->output_ptr; comp->output_ptr = (png_bytepp)png_malloc(png_ptr, - (png_alloc_size_t) - (comp->max_output_ptr * png_sizeof(png_charpp))); + (comp->max_output_ptr * png_sizeof(png_bytep))); png_memcpy(comp->output_ptr, old_ptr, old_max - * png_sizeof(png_charp)); + * png_sizeof(png_bytep)); png_free(png_ptr, old_ptr); } else comp->output_ptr = (png_bytepp)png_malloc(png_ptr, - (png_alloc_size_t) - (comp->max_output_ptr * png_sizeof(png_charp))); + (comp->max_output_ptr * png_sizeof(png_bytep))); } /* Save the data */ comp->output_ptr[comp->num_output_ptr] = - (png_bytep)png_malloc(png_ptr, - (png_alloc_size_t)png_ptr->zbuf_size); + (png_bytep)png_malloc(png_ptr, png_ptr->zbuf_size); png_memcpy(comp->output_ptr[comp->num_output_ptr], png_ptr->zbuf, png_ptr->zbuf_size); diff --git a/harbour/tests/dates3.prg b/harbour/tests/dates3.prg index e9f24ab059..c0c72bdf90 100644 --- a/harbour/tests/dates3.prg +++ b/harbour/tests/dates3.prg @@ -2,7 +2,7 @@ * $Id$ */ -// Testing Harbour dates management. +// Testing Harbour date management PROCEDURE Main() @@ -35,12 +35,12 @@ PROCEDURE Main() ? dDate, DoW( dDate ) ? - dDate := Date () + dDate := Date() FOR i := 1 TO 7 ? dDate, DoW( dDate ) dDate++ NEXT - ? CToD( "" ), DoW( CToD( "" ) ) + ? hb_SToD(), DoW( hb_SToD() ) RETURN diff --git a/harbour/tests/transtst.prg b/harbour/tests/transtst.prg index 634a339e8b..b56a2603e5 100644 --- a/harbour/tests/transtst.prg +++ b/harbour/tests/transtst.prg @@ -57,7 +57,7 @@ PROC test() ? transtest( -134.24, "@E99,999.99", " -134,24" ) ? ? transtest( -7, "@X 9999", " 7 DB" ) - ? transtest( SToD( "19920509" ), "@E", "09/05/92" ) + ? transtest( hb_SToD( "19920509" ), "@E", "09/05/92" ) ? transtest( Val( "3.10" ), "@X", "3.10" ) ? transtest( 0.80, ".9999", ".8000" ) ? transtest( -0.80, ".9999", ".****" ) @@ -67,7 +67,7 @@ PROC test() ? transtest( 0, "@C 9.99", "0.00" ) stop() #ifdef __HARBOUR__ - dt := SToD( "19871231" ) + dt := hb_SToD( "19871231" ) SET DATE FORMAT TO "MM:DD:YYYY" ? transtest( dt, "@E", "31:12:1987" ) SET DATE FORMAT TO "DD:MM:YYYY" @@ -311,7 +311,7 @@ PROC tofix() #ifndef __HARBOUR__ -FUNCTION SToD( s ) +FUNCTION hb_SToD( s ) LOCAL cDf := Set( _SET_DATEFORMAT, "YYYY/MM/DD" ), dt diff --git a/harbour/utils/hbmk2/hbmk2.es_PE.po b/harbour/utils/hbmk2/hbmk2.es_PE.po index d5ec7ddca5..b8bb9e490e 100644 --- a/harbour/utils/hbmk2/hbmk2.es_PE.po +++ b/harbour/utils/hbmk2/hbmk2.es_PE.po @@ -678,7 +678,7 @@ msgstr "selecciona plataforma destino." #: hbmk2.prg:7942 hbmk2.prg:11633 hbmk2.prg:13102 #, c-format -msgid "use a specific build name" +msgid "specify a build name" msgstr "utilizar un nombre de build especifico" #: hbmk2.prg:7942 hbmk2.prg:11633 hbmk2.prg:13102 @@ -1368,7 +1368,7 @@ msgstr "reconstrucción (en modo incremental)" #: hbmk2.prg:11633 hbmk2.prg:13102 #, c-format -msgid "select target CPU. (EXPERIMENTAL)" +msgid "override default target CPU (default: automatic) (EXPERIMENTAL)" msgstr "selecciona la CPU de destino. (EXPERIMENTAL)" #: hbmk2.prg:11633 hbmk2.prg:13102 diff --git a/harbour/utils/hbmk2/hbmk2.hu_HU.po b/harbour/utils/hbmk2/hbmk2.hu_HU.po index cf275c2153..7429935119 100644 --- a/harbour/utils/hbmk2/hbmk2.hu_HU.po +++ b/harbour/utils/hbmk2/hbmk2.hu_HU.po @@ -495,7 +495,7 @@ msgstr "Normál Harbour fordító kapcsolók is megadhatók." #: hbmk2.prg:7941 hbmk2.prg:11633 hbmk2.prg:13102 #, c-format msgid "override the name of starting function/procedure" -msgstr "adjon meg alternatív kezdő-/belépési függvénynevet" +msgstr "állítson be alternatív kezdő/belépési függvénynevet" #: hbmk2.prg:7959 hbmk2.prg:11650 hbmk2.prg:13120 #, c-format @@ -949,17 +949,17 @@ msgstr "kapcsolókat adja tovább a szerkesztőnek" #: hbmk2.prg:7941 hbmk2.prg:11633 hbmk2.prg:13102 #, c-format -msgid "force/select target platform (default: autodetection)" -msgstr "válassza a megadott cél platformot (alapértelmezés: automatikus)" +msgid "override default target platform (default: automatic)" +msgstr "felülbírálja az alapértelmezett cél platformot (alapértelmezés: automatikus)" #: hbmk2.prg:7941 hbmk2.prg:11633 hbmk2.prg:13102 #, c-format -msgid "force/select C compiler (default: autodetection)\nSpecial value:\n - bld: use original build settings (default on *nix)" -msgstr "használja a megadott C fordítót (alapértelmezés: automatikus)\\nSpeciális érték:\\n - bld: használja a Harbour fordításához használtat (*nix-okon alapértelmezés)" +msgid "override C compiler autodetection\\nSpecial value:\\n - bld: use original build settings (default on *nix)" +msgstr "felülbírálja a C fordító detektálást\\nSpeciális érték:\\n - bld: használja a Harbour fordításához használtat (*nix-okon alapértelmezés)" #: hbmk2.prg:7941 hbmk2.prg:11633 hbmk2.prg:13102 #, c-format -msgid "use a specific build name" +msgid "specify a build name" msgstr "" #: hbmk2.prg:7941 hbmk2.prg:11633 hbmk2.prg:13102 @@ -1364,7 +1364,7 @@ msgstr "" #: hbmk2.prg:11633 hbmk2.prg:13102 #, c-format -msgid "select target CPU. (EXPERIMENTAL)" +msgid "override default target CPU (default: automatic) (EXPERIMENTAL)" msgstr "" #: hbmk2.prg:11633 hbmk2.prg:13102 diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index e00ab0a0a1..7426ce136b 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -14862,10 +14862,10 @@ STATIC PROCEDURE ShowHelp( hbmk, lLong ) { "--hbdirinc" , I_( "output Harbour header directory" ) }, ; { "--hbinfo[=nested]" , I_( "output Harbour build information. Output is in JSON format. The included paths always contain forward slashes. Each JSON block is followed by an 0x0A byte." ) }, ; NIL, ; - { "-plat=" , I_( "force/select target platform (default: autodetection)" ) }, ; - { "-comp=" , I_( "force/select C compiler (default: autodetection)\nSpecial value:\n - bld: use original build settings (default on *nix)" ) }, ; - { "-cpu=" , I_( "select target CPU. (EXPERIMENTAL)" ) }, ; - { "-build=" , I_( "use a specific build name" ) }, ; + { "-plat=" , I_( "override default target platform (default: automatic)" ) }, ; + { "-cpu=" , I_( "override default target CPU (default: automatic) (EXPERIMENTAL)" ) }, ; + { "-comp=" , I_( "override C compiler autodetection\nSpecial value:\n - bld: use original build settings (default on *nix)" ) }, ; + { "-build=" , I_( "specify a build name" ) }, ; { "-lang=" , I_( "override default language. Similar to HB_LANG envvar." ) }, ; { "-width=" , I_( "set output width to characters (0=unlimited)." ) }, ; { "-shl" , I_( "show sub-project level in output lines" ) }, ; diff --git a/harbour/utils/hbmk2/hbmk2.pt_BR.po b/harbour/utils/hbmk2/hbmk2.pt_BR.po index dca1808079..d23c1669e1 100644 --- a/harbour/utils/hbmk2/hbmk2.pt_BR.po +++ b/harbour/utils/hbmk2/hbmk2.pt_BR.po @@ -678,7 +678,7 @@ msgstr "assume uma arquitetura específica." #: hbmk2.prg:7942 hbmk2.prg:11633 hbmk2.prg:13102 #, c-format -msgid "use a specific build name" +msgid "specify a build name" msgstr "utilizar um nome de build especifico" #: hbmk2.prg:7942 hbmk2.prg:11633 hbmk2.prg:13102 @@ -1368,7 +1368,7 @@ msgstr "" #: hbmk2.prg:11633 hbmk2.prg:13102 #, c-format -msgid "select target CPU. (EXPERIMENTAL)" +msgid "override default target CPU (default: automatic) (EXPERIMENTAL)" msgstr "" #: hbmk2.prg:11633 hbmk2.prg:13102 diff --git a/harbour/website/samples/dates3.prg.html b/harbour/website/samples/dates3.prg.html index 5b658c8e66..1438292c7f 100644 --- a/harbour/website/samples/dates3.prg.html +++ b/harbour/website/samples/dates3.prg.html @@ -14,7 +14,7 @@