1893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/*---------------------------------------------------------------------------
2893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
3893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   wpng - simple PNG-writing program                             writepng.h
4893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
5893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project  ---------------------------------------------------------------------------
6893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
7893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      Copyright (c) 1998-2007 Greg Roelofs.  All rights reserved.
8893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
9893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      This software is provided "as is," without warranty of any kind,
10893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      express or implied.  In no event shall the author or contributors
11893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      be held liable for any damages arising in any way from the use of
12893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      this software.
13893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
14893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      The contents of this file are DUAL-LICENSED.  You may modify and/or
15893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      redistribute this software according to the terms of one of the
16893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      following two licenses (at your option):
17893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
18893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
19893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      LICENSE 1 ("BSD-like with advertising clause"):
20893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
21893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      Permission is granted to anyone to use this software for any purpose,
22893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      including commercial applications, and to alter it and redistribute
23893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      it freely, subject to the following restrictions:
24893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
25893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      1. Redistributions of source code must retain the above copyright
26893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         notice, disclaimer, and this list of conditions.
27893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      2. Redistributions in binary form must reproduce the above copyright
28893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         notice, disclaimer, and this list of conditions in the documenta-
29893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         tion and/or other materials provided with the distribution.
30893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      3. All advertising materials mentioning features or use of this
31893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         software must display the following acknowledgment:
32893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
33893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project            This product includes software developed by Greg Roelofs
34893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project            and contributors for the book, "PNG: The Definitive Guide,"
35893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project            published by O'Reilly and Associates.
36893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
37893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
38893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      LICENSE 2 (GNU GPL v2 or later):
39893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
40893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      This program is free software; you can redistribute it and/or modify
41893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      it under the terms of the GNU General Public License as published by
42893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      the Free Software Foundation; either version 2 of the License, or
43893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      (at your option) any later version.
44893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
45893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      This program is distributed in the hope that it will be useful,
46893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      but WITHOUT ANY WARRANTY; without even the implied warranty of
47893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
48893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      GNU General Public License for more details.
49893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
50893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      You should have received a copy of the GNU General Public License
51893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      along with this program; if not, write to the Free Software Foundation,
52893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
53893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
54893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project  ---------------------------------------------------------------------------*/
55893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
56893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#ifndef TRUE
57893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#  define TRUE 1
58893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#  define FALSE 0
59893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
60893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
61893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#ifndef MAX
62893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#  define MAX(a,b)  ((a) > (b)? (a) : (b))
63893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#  define MIN(a,b)  ((a) < (b)? (a) : (b))
64893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
65893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
66893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#ifdef DEBUG
67893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#  define Trace(x)  {fprintf x ; fflush(stderr); fflush(stdout);}
68893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#else
69893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#  define Trace(x)  ;
70893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
71893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
72893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define TEXT_TITLE    0x01
73893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define TEXT_AUTHOR   0x02
74893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define TEXT_DESC     0x04
75893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define TEXT_COPY     0x08
76893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define TEXT_EMAIL    0x10
77893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define TEXT_URL      0x20
78893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
79893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define TEXT_TITLE_OFFSET        0
80893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define TEXT_AUTHOR_OFFSET      72
81893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define TEXT_COPY_OFFSET     (2*72)
82893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define TEXT_EMAIL_OFFSET    (3*72)
83893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define TEXT_URL_OFFSET      (4*72)
84893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define TEXT_DESC_OFFSET     (5*72)
85893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
86893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projecttypedef unsigned char   uch;
87893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projecttypedef unsigned short  ush;
88893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projecttypedef unsigned long   ulg;
89893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
90893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projecttypedef struct _mainprog_info {
91893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    double gamma;
92893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    long width;
93893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    long height;
94893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    time_t modtime;
95893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    FILE *infile;
96893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    FILE *outfile;
97893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    void *png_ptr;
98893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    void *info_ptr;
99893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    uch *image_data;
100893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    uch **row_pointers;
101893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    char *title;
102893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    char *author;
103893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    char *desc;
104893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    char *copyright;
105893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    char *email;
106893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    char *url;
107893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    int filter;    /* command-line-filter flag, not PNG row filter! */
108893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    int pnmtype;
109893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    int sample_depth;
110893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    int interlaced;
111893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    int have_bg;
112893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    int have_time;
113893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    int have_text;
114893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    jmp_buf jmpbuf;
115893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    uch bg_red;
116893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    uch bg_green;
117893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project    uch bg_blue;
118893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} mainprog_info;
119893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
120893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
121893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* prototypes for public functions in writepng.c */
122893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
123893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid writepng_version_info(void);
124893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
125893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectint writepng_init(mainprog_info *mainprog_ptr);
126893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
127893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectint writepng_encode_image(mainprog_info *mainprog_ptr);
128893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
129893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectint writepng_encode_row(mainprog_info *mainprog_ptr);
130893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
131893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectint writepng_encode_finish(mainprog_info *mainprog_ptr);
132893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
133893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid writepng_cleanup(mainprog_info *mainprog_ptr);
134