ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/resolu.h
Revision: 2.3
Committed: Sat Feb 22 02:07:22 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.2: +116 -8 lines
Log Message:
Changes and check-in for 3.5 release
Includes new source files and modifications not recorded for many years
See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release

File Contents

# Content
1 /* RCSid: $Id$ */
2 /*
3 * Definitions for resolution line in image file.
4 *
5 * Include after <stdio.h>, <string.h>, and <time.h>
6 *
7 * True image orientation is defined by an xy coordinate system
8 * whose origin is at the lower left corner of the image, with
9 * x increasing to the right and y increasing in the upward direction.
10 * This true orientation is independent of how the pixels are actually
11 * ordered in the file, which is indicated by the resolution line.
12 * This line is of the form "{+-}{XY} xyres {+-}{YX} yxres\n".
13 * A typical line for a 1024x600 image might be "-Y 600 +X 1024\n",
14 * indicating that the scanlines are in English text order (PIXSTANDARD).
15 */
16
17 /* ====================================================================
18 * The Radiance Software License, Version 1.0
19 *
20 * Copyright (c) 1990 - 2002 The Regents of the University of California,
21 * through Lawrence Berkeley National Laboratory. All rights reserved.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 *
27 * 1. Redistributions of source code must retain the above copyright
28 * notice, this list of conditions and the following disclaimer.
29 *
30 * 2. Redistributions in binary form must reproduce the above copyright
31 * notice, this list of conditions and the following disclaimer in
32 * the documentation and/or other materials provided with the
33 * distribution.
34 *
35 * 3. The end-user documentation included with the redistribution,
36 * if any, must include the following acknowledgment:
37 * "This product includes Radiance software
38 * (http://radsite.lbl.gov/)
39 * developed by the Lawrence Berkeley National Laboratory
40 * (http://www.lbl.gov/)."
41 * Alternately, this acknowledgment may appear in the software itself,
42 * if and wherever such third-party acknowledgments normally appear.
43 *
44 * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
45 * and "The Regents of the University of California" must
46 * not be used to endorse or promote products derived from this
47 * software without prior written permission. For written
48 * permission, please contact [email protected].
49 *
50 * 5. Products derived from this software may not be called "Radiance",
51 * nor may "Radiance" appear in their name, without prior written
52 * permission of Lawrence Berkeley National Laboratory.
53 *
54 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
55 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
56 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
57 * DISCLAIMED. IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
58 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
59 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
60 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
61 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
62 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
63 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
64 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
65 * SUCH DAMAGE.
66 * ====================================================================
67 *
68 * This software consists of voluntary contributions made by many
69 * individuals on behalf of Lawrence Berkeley National Laboratory. For more
70 * information on Lawrence Berkeley National Laboratory, please see
71 * <http://www.lbl.gov/>.
72 */
73
74 #ifdef __cplusplus
75 extern "C" {
76 #endif
77
78 /* flags for scanline ordering */
79 #define XDECR 1
80 #define YDECR 2
81 #define YMAJOR 4
82
83 /* standard scanline ordering */
84 #define PIXSTANDARD (YMAJOR|YDECR)
85 #define PIXSTDFMT "-Y %d +X %d\n"
86
87 /* structure for image dimensions */
88 typedef struct {
89 int rt; /* orientation (from flags above) */
90 int xr, yr; /* x and y resolution */
91 } RESOLU;
92
93 /* macros to get scanline length and number */
94 #define scanlen(rs) ((rs)->rt & YMAJOR ? (rs)->xr : (rs)->yr)
95 #define numscans(rs) ((rs)->rt & YMAJOR ? (rs)->yr : (rs)->xr)
96
97 /* resolution string buffer and its size */
98 #define RESOLU_BUFLEN 32
99 extern char resolu_buf[RESOLU_BUFLEN];
100
101 /* macros for reading/writing resolution struct */
102 #define fputsresolu(rs,fp) fputs(resolu2str(resolu_buf,rs),fp)
103 #define fgetsresolu(rs,fp) str2resolu(rs, \
104 fgets(resolu_buf,RESOLU_BUFLEN,fp))
105
106 /* reading/writing of standard ordering */
107 #define fprtresolu(sl,ns,fp) fprintf(fp,PIXSTDFMT,ns,sl)
108 #define fscnresolu(sl,ns,fp) (fscanf(fp,PIXSTDFMT,ns,sl)==2)
109
110 #ifdef NOPROTO
111 /* defined in resolu.c */
112 extern void fputresolu();
113 extern int fgetresolu();
114 extern char *resolu2str();
115 extern int str2resolu();
116 /* defined in header.c */
117 extern void newheader();
118 extern int isheadid();
119 extern int headidval();
120 extern int dateval();
121 extern int isdate();
122 extern void fputdate();
123 extern void fputnow();
124 extern void printargs();
125 extern int isformat();
126 extern int formatval();
127 extern void fputformat();
128 extern int getheader();
129 extern int globmatch();
130 extern int checkheader();
131
132 #else
133 /* defined in resolu.c */
134 extern void fputresolu(int ord, int sl, int ns, FILE *fp);
135 extern int fgetresolu(int *sl, int *ns, FILE *fp);
136 extern char * resolu2str(char *buf, RESOLU *rp);
137 extern int str2resolu(RESOLU *rp, char *buf);
138 /* defined in header.c */
139 extern void newheader(char *t, FILE *fp);
140 extern int isheadid(char *s);
141 extern int headidval(char *r, char *s);
142 extern int dateval(time_t *t, char *s);
143 extern int isdate(char *s);
144 extern void fputdate(time_t t, FILE *fp);
145 extern void fputnow(FILE *fp);
146 extern void printargs(int ac, char **av, FILE *fp);
147 extern int isformat(char *s);
148 extern int formatval(char *r, char *s);
149 extern void fputformat(char *s, FILE *fp);
150 extern int getheader(FILE *fp, int (*f)(), char *p);
151 extern int globmatch(char *pat, char *str);
152 extern int checkheader(FILE *fin, char *fmt, FILE *fout);
153
154 #endif
155
156 #ifdef __cplusplus
157 }
158 #endif