1 /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */
2 /*          EXIFPROBE - TIFF/JPEG/EXIF image file probe               */
3 /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */
4 /* Copyright (C) 2002 by Duane H. Hesser. All rights reserved.        */
5 /*                                                                    */
6 /* See the file LICENSE.EXIFPROBE for terms of use.                   */
7 /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */
8 
9 /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */
10 /* @(#) $Id: extern.h,v 1.33 2005/07/24 21:18:02 alex Exp $" */
11 /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */
12 
13 #ifndef EXTERN_INCLUDED
14 #define EXTERN_INCLUDED
15 
16 extern int optind;
17 extern char *optarg;
18 extern int getopt();
19 
20 extern int Debug;
21 
22 extern char *Progname;
23 extern long Header_offset;
24 extern unsigned long Max_undefined;
25 extern unsigned long Max_makerdump;
26 extern unsigned long Max_appdump;
27 extern unsigned long Max_imgdump;
28 extern unsigned long Print_options;
29 
30 extern unsigned long Start_offset;
31 
32 extern char *Make_name;
33 extern char *Model_name;
34 extern char *Software_name;
35 
36 /* Used when forcing camera make, model, or software (-m, -l, -s)     */
37 extern char *Use_Make_name;
38 extern char *Use_Model_name;
39 extern char *Use_Software_name;
40 
41 extern char *Camera_name_pattern;
42 
43 /* =================== Function prototypes =========================  */
44 extern int process_options(int,char **);
45 extern void env_options();
46 extern void print_byteorder(unsigned short,int);
47 extern void print_magic(unsigned long,int);
48 
49 extern unsigned long process_tiff_ifd(FILE *,unsigned short,unsigned long,
50                                         unsigned long,unsigned long,
51                                         struct image_summary *,char *,
52                                         int,int,int,int);
53 extern unsigned long process_exif_ifd(FILE *,unsigned short,unsigned long,
54                                         unsigned long,unsigned long,
55                                         struct image_summary *,char *,
56                                         int,int);
57 extern unsigned long process_gps_ifd(FILE *,unsigned short,unsigned long,
58                                         unsigned long,unsigned long,
59                                         struct image_summary *,char *,
60                                         int,int);
61 extern unsigned long process_subifd(FILE *,unsigned short,struct ifd_entry *,
62                                         unsigned long,unsigned long,
63                                         struct image_summary *,char *,
64                                         int,int,int,int);
65 extern unsigned long process_makernote(FILE *,unsigned short,struct ifd_entry *,
66                                         unsigned long,unsigned long,
67                                         struct image_summary *,char *,
68                                         int);
69 extern unsigned long process_app0(FILE *,unsigned long,unsigned short,
70                                                 struct image_summary *,
71                                                 char *,int);
72 extern unsigned long process_app1(FILE *,unsigned long,unsigned short,
73                                             struct image_summary *,
74                                             char *,int);
75 extern unsigned long process_app3(FILE *,unsigned long,unsigned short,
76                                             struct image_summary *,
77                                             char *,int);
78 extern unsigned long process_app12(FILE *,unsigned long,unsigned short,
79                                                 struct image_summary *,
80                                                 char *,int);
81 extern unsigned long process_appn(FILE *,unsigned long,unsigned short,
82                                                 struct image_summary *,
83                                                 char *,int);
84 extern unsigned long process_jpeg_segments(FILE *,unsigned long,
85                                             unsigned short,unsigned long,
86                                             struct image_summary *,char *,
87                                             char *,int);
88 extern unsigned long process_pim(FILE *,unsigned short,unsigned long,
89                                         unsigned long, unsigned long,char *,
90                                         char *,char *,int);
91 extern int jpeg_status(int);
92 extern void print_jpeg_status();
93 
94 extern int skip_past_newline(FILE *,unsigned long);
95 extern int skip_to_bracket(FILE *,unsigned long);
96 extern int putword(FILE *,int,unsigned long,int);
97 extern int invalid_ifd_entry(FILE *,unsigned long,unsigned long,int,unsigned short);
98 extern unsigned short valid_tiffhdr(FILE *,unsigned long,int);
99 extern char *check_printable(char *,int);
100 extern char *splice(char *,char *,char *);
101 extern int newline(int);
102 extern void setcharsprinted(int);
103 extern int charsprinted();
104 extern void putcolorchar(unsigned short);
105 
106 extern struct ifd_entry *read_ifd_entry(FILE *,unsigned short,unsigned long);
107 extern unsigned long read_ulong(FILE *,unsigned short,unsigned long);
108 extern unsigned long long read_ulong64(FILE *,unsigned short,unsigned long);
109 extern unsigned long to_ulong(unsigned char *,unsigned short);
110 extern unsigned long long to_ulong64(unsigned char *,unsigned short);
111 extern unsigned short read_ushort(FILE *,unsigned short,unsigned long);
112 extern unsigned short to_ushort(unsigned char *,unsigned short);
113 extern float read_float(FILE *,unsigned short,unsigned long);
114 extern float to_float(unsigned long);
115 extern double read_double(FILE *,unsigned short,unsigned long);
116 extern double to_double(unsigned char *,unsigned short);
117 extern unsigned short read_ubyte(FILE *,unsigned long);
118 extern struct fileheader *read_imageheader(FILE *,unsigned long);
119 
120 extern unsigned char *read_bytes(FILE *,unsigned long,unsigned long);
121 extern char *read_appstring(FILE *,unsigned short,unsigned long);
122 extern char *read_string(FILE *,unsigned long,unsigned long);
123 
124 extern void print_ubytes(FILE *,unsigned long,unsigned long);
125 extern void print_sbytes(FILE *,unsigned long,unsigned long);
126 extern void print_ushort(FILE *,unsigned long,unsigned short,unsigned long);
127 extern void print_sshort(FILE *,unsigned long,unsigned short,unsigned long);
128 extern void print_ulong(FILE *,unsigned long,unsigned short,unsigned long);
129 extern void print_slong(FILE *,unsigned long,unsigned short,unsigned long);
130 extern void print_urational(FILE *,unsigned long,unsigned short,unsigned long);
131 extern void print_srational(FILE *,unsigned long,unsigned short,unsigned long);
132 extern void print_float(FILE *,unsigned long,unsigned short,unsigned long);
133 extern void print_double(FILE *,unsigned long,unsigned short,unsigned long);
134 extern void print_user_comment(FILE *,unsigned long,unsigned long,unsigned short);
135 extern void print_cfapattern(FILE *,unsigned long,unsigned short,unsigned long,
136                                                                 char *,char *);
137 extern void print_version();
138 extern void print_startvalue();
139 extern void print_endvalue();
140 
141 extern int print_filetype(unsigned long,unsigned short);
142 extern unsigned long get_filesize(FILE *inptr);
143 extern int ateof(FILE *);
144 
145 extern void setfilename(char *);
146 extern void print_filename();
147 extern char *find_camera_name(int);
148 extern void clear_memory();
149 extern void usage();
150 
151 extern void print_summary(struct image_summary *);
152 extern int print_image_summary_entry(struct image_summary *,char *);
153 extern int scan_summary(struct image_summary *);
154 extern void print_imageformat(struct image_summary *);
155 extern void print_imagecompression(struct image_summary *);
156 extern void print_tiff_compression(struct image_summary *);
157 extern void print_jpeg_compression(struct image_summary *);
158 extern void print_jp2c_compression(struct image_summary *);
159 extern void print_crw_compression(struct image_summary *);
160 extern void print_raf_compression(struct image_summary *);
161 extern void print_imagesubformat(struct image_summary *);
162 extern void print_imagesubtype(struct image_summary *);
163 extern void print_imagesize(struct image_summary *);
164 extern void print_location(struct image_summary *);
165 extern char *tiff_compression_string(unsigned long);
166 extern struct image_summary *new_summary_entry(struct image_summary *,int,int);
167 extern struct image_summary *last_summary_entry(struct image_summary *);
168 extern struct image_summary *destroy_summary(struct image_summary *);
169 extern int lock_number(struct image_summary *);
170 extern void print_fileformat(struct image_summary *);
171 
172 extern void print_tag_address(unsigned long,unsigned long,int,char *);
173 extern unsigned long print_entry(FILE*,unsigned short,struct ifd_entry *,
174                                     unsigned long,struct image_summary *,
175                                     char *,int,int,int,int);
176 extern int print_ascii(FILE *,unsigned long,unsigned long);
177 extern int print_unicode(FILE *,unsigned long,unsigned long,unsigned short);
178 extern int show_string(char *,int,int);
179 extern int show_string(char *,int,int);
180 extern int print_header(struct fileheader *,unsigned long);
181 extern int print_tiff_header(unsigned short,unsigned short,unsigned long);
182 extern int value_type_size(unsigned short);
183 extern void print_tagid(struct ifd_entry *,int,int);
184 extern void print_taginfo(struct ifd_entry *,char *,int,int,int,int);
185 extern void print_value(struct ifd_entry *,char *);
186 extern unsigned long print_offset_value(FILE *,unsigned short,
187                                         struct ifd_entry *,unsigned long,
188                                         char *,int,int,int);
189 extern unsigned long sum_strip_bytecounts(FILE *,unsigned short,unsigned long,
190                                                 unsigned long,unsigned short);
191 extern void display_end_of_ifd(unsigned long,int,int,int,int,char *,char *);
192 
193 extern int is_offset(struct ifd_entry *);
194 extern int is_a_long_offset(struct ifd_entry *);
195 extern char *value_type_name(unsigned short);
196 
197 extern char *tagname(unsigned short);
198 extern char *interop_tagname(unsigned short);
199 extern char *gps_tagname(unsigned short);
200 extern char *get_type_name(int);
201 
202 extern void putindent(int);
203 extern void extraindent(int);
204 extern void pushcolor(int);
205 extern void popcolor();
206 extern void printred(char *);
207 extern void why(FILE *);
208 extern unsigned long toggle(unsigned long,unsigned long);
209 extern void hexdump(FILE *,unsigned long,unsigned long,unsigned long,
210                                                         int,int,int);
211 
212 /* =============== Routines to interpret values ====================  */
213 extern void interpret_value(struct ifd_entry *,struct image_summary *);
214 extern void interpret_offset_value(FILE *,struct ifd_entry *,unsigned short,
215                                                             unsigned long);
216 
217 /* ================= Private IFDs ====================                */
218 extern unsigned long process_private_ifd(FILE *,unsigned short,unsigned long,
219                                             unsigned long,unsigned long,
220                                             unsigned short,struct image_summary *,
221                                             char *,char *,int,int,int);
222 extern unsigned long print_private_entry(FILE *,unsigned short,struct ifd_entry *,
223                                             unsigned long,unsigned short,
224                                             struct image_summary *,
225                                             char *,char *,int,int,int);
226 extern void print_private_taginfo(struct ifd_entry *,unsigned short,char *,int,int);
227 extern void print_private_tagid(struct ifd_entry *,unsigned short,int,int);
228 extern void interpret_pe_value(struct ifd_entry *,unsigned short,int,char *);
229 extern unsigned long print_offset_pe_value(FILE *,unsigned short,struct ifd_entry *,
230                                             unsigned long,unsigned short,
231                                             struct image_summary *,char *,char*,
232                                             int,int,int,int);
233 extern char *private_tagname(int,unsigned short,unsigned short);
234 extern int private_value_is_offset(int,unsigned short,unsigned short);
235 extern void print_private_offset_value(FILE *,unsigned short,struct ifd_entry *,
236                                         unsigned long,unsigned short,char *,
237                                         char *,int,int,int,int);
238 
239 extern int print_raf_header(FILE *,struct fileheader *,unsigned long);
240 extern unsigned long process_raf(FILE *,unsigned long, struct image_summary *, char *,int);
241 extern void dumpsection(FILE *,unsigned long,unsigned long,int);
242 #endif /* EXTERN_INCLUDED */
243