|  | /*--------------------------------------------------------------------------- | 
|  |  | 
|  | wpng - simple PNG-writing program                             writepng.h | 
|  |  | 
|  | --------------------------------------------------------------------------- | 
|  |  | 
|  | Copyright (c) 1998-2007 Greg Roelofs.  All rights reserved. | 
|  |  | 
|  | This software is provided "as is," without warranty of any kind, | 
|  | express or implied.  In no event shall the author or contributors | 
|  | be held liable for any damages arising in any way from the use of | 
|  | this software. | 
|  |  | 
|  | The contents of this file are DUAL-LICENSED.  You may modify and/or | 
|  | redistribute this software according to the terms of one of the | 
|  | following two licenses (at your option): | 
|  |  | 
|  |  | 
|  | LICENSE 1 ("BSD-like with advertising clause"): | 
|  |  | 
|  | Permission is granted to anyone to use this software for any purpose, | 
|  | including commercial applications, and to alter it and redistribute | 
|  | it freely, subject to the following restrictions: | 
|  |  | 
|  | 1. Redistributions of source code must retain the above copyright | 
|  | notice, disclaimer, and this list of conditions. | 
|  | 2. Redistributions in binary form must reproduce the above copyright | 
|  | notice, disclaimer, and this list of conditions in the documenta- | 
|  | tion and/or other materials provided with the distribution. | 
|  | 3. All advertising materials mentioning features or use of this | 
|  | software must display the following acknowledgment: | 
|  |  | 
|  | This product includes software developed by Greg Roelofs | 
|  | and contributors for the book, "PNG: The Definitive Guide," | 
|  | published by O'Reilly and Associates. | 
|  |  | 
|  |  | 
|  | LICENSE 2 (GNU GPL v2 or later): | 
|  |  | 
|  | This program is free software; you can redistribute it and/or modify | 
|  | it under the terms of the GNU General Public License as published by | 
|  | the Free Software Foundation; either version 2 of the License, or | 
|  | (at your option) any later version. | 
|  |  | 
|  | This program is distributed in the hope that it will be useful, | 
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | GNU General Public License for more details. | 
|  |  | 
|  | You should have received a copy of the GNU General Public License | 
|  | along with this program; if not, write to the Free Software Foundation, | 
|  | Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
|  |  | 
|  | ---------------------------------------------------------------------------*/ | 
|  |  | 
|  | #ifndef TRUE | 
|  | #  define TRUE 1 | 
|  | #  define FALSE 0 | 
|  | #endif | 
|  |  | 
|  | #ifndef MAX | 
|  | #  define MAX(a,b)  ((a) > (b)? (a) : (b)) | 
|  | #  define MIN(a,b)  ((a) < (b)? (a) : (b)) | 
|  | #endif | 
|  |  | 
|  | #ifdef DEBUG | 
|  | #  define Trace(x)  {fprintf x ; fflush(stderr); fflush(stdout);} | 
|  | #else | 
|  | #  define Trace(x)  ; | 
|  | #endif | 
|  |  | 
|  | #define TEXT_TITLE    0x01 | 
|  | #define TEXT_AUTHOR   0x02 | 
|  | #define TEXT_DESC     0x04 | 
|  | #define TEXT_COPY     0x08 | 
|  | #define TEXT_EMAIL    0x10 | 
|  | #define TEXT_URL      0x20 | 
|  |  | 
|  | #define TEXT_TITLE_OFFSET        0 | 
|  | #define TEXT_AUTHOR_OFFSET      72 | 
|  | #define TEXT_COPY_OFFSET     (2*72) | 
|  | #define TEXT_EMAIL_OFFSET    (3*72) | 
|  | #define TEXT_URL_OFFSET      (4*72) | 
|  | #define TEXT_DESC_OFFSET     (5*72) | 
|  |  | 
|  | typedef unsigned char   uch; | 
|  | typedef unsigned short  ush; | 
|  | typedef unsigned long   ulg; | 
|  |  | 
|  | typedef struct _mainprog_info { | 
|  | double gamma; | 
|  | long width; | 
|  | long height; | 
|  | time_t modtime; | 
|  | FILE *infile; | 
|  | FILE *outfile; | 
|  | void *png_ptr; | 
|  | void *info_ptr; | 
|  | uch *image_data; | 
|  | uch **row_pointers; | 
|  | char *title; | 
|  | char *author; | 
|  | char *desc; | 
|  | char *copyright; | 
|  | char *email; | 
|  | char *url; | 
|  | int filter;    /* command-line-filter flag, not PNG row filter! */ | 
|  | int pnmtype; | 
|  | int sample_depth; | 
|  | int interlaced; | 
|  | int have_bg; | 
|  | int have_time; | 
|  | int have_text; | 
|  | jmp_buf jmpbuf; | 
|  | uch bg_red; | 
|  | uch bg_green; | 
|  | uch bg_blue; | 
|  | } mainprog_info; | 
|  |  | 
|  |  | 
|  | /* prototypes for public functions in writepng.c */ | 
|  |  | 
|  | void writepng_version_info(void); | 
|  |  | 
|  | int writepng_init(mainprog_info *mainprog_ptr); | 
|  |  | 
|  | int writepng_encode_image(mainprog_info *mainprog_ptr); | 
|  |  | 
|  | int writepng_encode_row(mainprog_info *mainprog_ptr); | 
|  |  | 
|  | int writepng_encode_finish(mainprog_info *mainprog_ptr); | 
|  |  | 
|  | void writepng_cleanup(mainprog_info *mainprog_ptr); |