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