ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/resolu.h
Revision: 2.15
Committed: Mon Apr 6 04:00:08 2020 UTC (4 years, 1 month ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R3
Changes since 2.14: +2 -2 lines
Log Message:
Fixed bug where fscnresolu() would over-read string if followed by white space

File Contents

# User Rev Content
1 greg 2.15 /* RCSid $Id: resolu.h,v 2.14 2019/07/19 17:37:56 greg Exp $ */
2 greg 1.1 /*
3     * Definitions for resolution line in image file.
4     *
5 greg 2.10 * Include after <stdio.h>
6 greg 2.3 *
7 greg 1.1 * 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 schorsch 2.5 #ifndef _RAD_RESOLU_H_
17     #define _RAD_RESOLU_H_
18 schorsch 2.8
19 greg 2.3 #ifdef __cplusplus
20     extern "C" {
21     #endif
22    
23 greg 1.1 /* flags for scanline ordering */
24     #define XDECR 1
25     #define YDECR 2
26     #define YMAJOR 4
27    
28     /* standard scanline ordering */
29     #define PIXSTANDARD (YMAJOR|YDECR)
30     #define PIXSTDFMT "-Y %d +X %d\n"
31    
32     /* structure for image dimensions */
33     typedef struct {
34 greg 2.3 int rt; /* orientation (from flags above) */
35 greg 1.1 int xr, yr; /* x and y resolution */
36     } RESOLU;
37    
38     /* macros to get scanline length and number */
39 greg 2.3 #define scanlen(rs) ((rs)->rt & YMAJOR ? (rs)->xr : (rs)->yr)
40     #define numscans(rs) ((rs)->rt & YMAJOR ? (rs)->yr : (rs)->xr)
41 greg 1.1
42     /* resolution string buffer and its size */
43     #define RESOLU_BUFLEN 32
44     extern char resolu_buf[RESOLU_BUFLEN];
45    
46     /* macros for reading/writing resolution struct */
47     #define fputsresolu(rs,fp) fputs(resolu2str(resolu_buf,rs),fp)
48     #define fgetsresolu(rs,fp) str2resolu(rs, \
49     fgets(resolu_buf,RESOLU_BUFLEN,fp))
50    
51     /* reading/writing of standard ordering */
52     #define fprtresolu(sl,ns,fp) fprintf(fp,PIXSTDFMT,ns,sl)
53 greg 2.15 #define fscnresolu(sl,ns,fp) (fgetresolu(sl,ns,fp)==PIXSTANDARD)
54 greg 1.1
55 greg 2.14 /* defined in resolu.c */
56 greg 2.3 extern void fputresolu(int ord, int sl, int ns, FILE *fp);
57     extern int fgetresolu(int *sl, int *ns, FILE *fp);
58     extern char * resolu2str(char *buf, RESOLU *rp);
59     extern int str2resolu(RESOLU *rp, char *buf);
60    
61     #ifdef __cplusplus
62     }
63     #endif
64 schorsch 2.5 #endif /* _RAD_RESOLU_H_ */
65