void print_kyocera_offset_makervalue(FILE *inptr,unsigned short byteorder, struct ifd_entry *entry_ptr,unsigned long fileoffset_base, struct image_summary *summary_entry,char *parent_name,char *prefix, int indent,int make,int model,int at_offset) { int noteversion = 0; noteversion = getnoteversion(); if(entry_ptr) { switch(noteversion) { case 1: kyocera1_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent, make,model,at_offset); break; default: print_generic_offset_makervalue(inptr,byteorder,entry_ptr,fileoffset_base, parent_name,prefix,indent, make,model,at_offset); break; } } }
/* cameras. */ void print_agfa_offset_makervalue(FILE *inptr,unsigned short byteorder, struct ifd_entry *entry_ptr,unsigned long fileoffset_base, struct image_summary *summary_entry,char *parent_name,char*prefix, int indent,int make,int model,int at_offset) { int noteversion; noteversion = getnoteversion(); if(entry_ptr) { switch(noteversion) { case 1: agfa1_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent, make,model,at_offset); agfa1_interpret_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base); break; default: /* Insufficent information about other models to do */ /* anything but generic. */ print_generic_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,parent_name,prefix,indent, make,model,at_offset); break; } } }
void kyocera1_offset_makervalue(FILE *inptr,unsigned short byteorder, struct ifd_entry *entry_ptr,unsigned long fileoffset_base, struct image_summary *summary_entry,char *parent_name,char *prefix, int indent,int make,int model,int at_offset) { unsigned long value_offset,count; char *nameoftag; char *fulldirname = NULL; int chpr = 0; if(entry_ptr) { nameoftag = maker_tagname(entry_ptr->tag,make,model); fulldirname = splice(parent_name,".",nameoftag); value_offset = fileoffset_base + entry_ptr->value; count = entry_ptr->count; switch(entry_ptr->tag) { case 0x0e00: /* PrintIM (Epson Print Image matching) */ if(!at_offset && (PRINT_VALUE)) { if(!(PRINT_OFFSET)) { chpr += printf("@%lu:%lu",value_offset,count); chpr = newline(chpr); } } process_pim(inptr,byteorder,entry_ptr->value,fileoffset_base, count,nameoftag,parent_name,prefix,indent); break; default: print_generic_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,fulldirname,prefix, indent,make,model,at_offset); break; } if(fulldirname) free(fulldirname); } setcharsprinted(chpr); }
void agfa1_offset_makervalue(FILE *inptr,unsigned short byteorder, struct ifd_entry *entry_ptr,unsigned long fileoffset_base, struct image_summary *summary_entry,char *parent_name,char*prefix, int indent,int make,int model,int at_offset) { unsigned long max_offset = 0; unsigned long value_offset; unsigned long dumplength,count; unsigned short marker; char *nameoftag; char *fulldirname = NULL; int status = 0; int chpr = 0; if(entry_ptr) { nameoftag = maker_tagname(entry_ptr->tag,make,model); fulldirname = splice(parent_name,".",nameoftag); value_offset = fileoffset_base + entry_ptr->value; count = entry_ptr->count; switch(entry_ptr->tag) { case 0x0209: /* CameraId */ if(at_offset && (PRINT_VALUE_AT_OFFSET)) { print_tag_address(ENTRY,value_offset,indent,prefix); print_makertagid(entry_ptr,23," = ",make,model); } if((PRINT_VALUE)) print_ascii(inptr,entry_ptr->count,value_offset); break; case 0x0100: /* Jpeg Thumbnail */ if(at_offset && (PRINT_SECTION)) { print_tag_address(VALUE_AT_OFFSET,value_offset,indent,prefix); chpr += printf("# Start of JPEG Thumbnail from MakerNote"); chpr += printf(" length %ld",count); } else if(!at_offset && (PRINT_VALUE)) { if(!(PRINT_OFFSET)) chpr += printf("@%lu",value_offset); else chpr = printf("length %lu",count); } if((PRINT_SECTION) || (PRINT_SEGMENT)) chpr = newline(chpr); marker = read_ushort(inptr,TIFF_MOTOROLA,value_offset); max_offset = process_jpeg_segments(inptr,value_offset,marker, count,summary_entry,fulldirname, prefix,indent+SMALLINDENT); if(at_offset) { if((PRINT_SECTION)) { if((status = jpeg_status(0) == JPEG_EARLY_EOI)) chpr = newline(chpr); jpeg_status(status); print_tag_address(VALUE_AT_OFFSET,value_offset + count - 1, indent,"-"); chpr += printf("# End of JPEG Thumbnail from MakerNote"); if((PRINT_ENTRY) && !(PRINT_VALUE)) chpr = newline(chpr); } } print_jpeg_status(); if(marker && summary_entry) { /* The new one is on the end of the chain */ if((summary_entry = last_summary_entry(summary_entry))) { summary_entry->filesubformat |= FILESUBFMT_MNOTE; summary_entry->datatype = MAKER_IFD; summary_entry->subfiletype = THUMBNAIL_TYPE; } } /* make certain we're at the end */ clearerr(inptr); fseek(inptr,value_offset + count,SEEK_SET); break; case 0x0f00: /* Data */ if(at_offset && (PRINT_ENTRY)) { print_tag_address(ENTRY,value_offset,indent,prefix); print_makertagid(entry_ptr,MAKERTAGWIDTH," : ",make,model); chpr += printf(" length %-9lu", count); if(Max_undefined == 0) { if(chpr) printred(" (not dumped, use -U)"); } else { if((Max_undefined == DUMPALL) || (Max_undefined > count)) dumplength = count; else dumplength = Max_undefined; chpr = newline(chpr); hexdump(inptr,value_offset,count,dumplength,12, indent,SUBINDENT); chpr = newline(1); } } else if(!at_offset && (PRINT_VALUE)) { if(!(PRINT_OFFSET)) chpr += printf("@%lu:%lu",value_offset,entry_ptr->count); else chpr = printf("length %lu", entry_ptr->count); if(!(PRINT_VALUE_AT_OFFSET)) chpr += printf(" # UNDEFINED"); } /* make certain we're at the end */ fseek(inptr,value_offset + count,SEEK_SET); break; default: print_generic_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,fulldirname,prefix,indent, make,model,at_offset); break; } if(fulldirname) free(fulldirname); } setcharsprinted(chpr); }
void asahi2_offset_makervalue(FILE *inptr,unsigned short byteorder, struct ifd_entry *entry_ptr,unsigned long fileoffset_base, struct image_summary *summary_entry,char *parent_name, char *prefix,int indent,int make,int model,int at_offset) { static unsigned long jpegthumbnaillength = 0UL; unsigned long value_offset,max_offset; unsigned short marker; unsigned long count; char *nameoftag; char *fulldirname = CNULL; int status = 0; int chpr = 0; if(inptr && entry_ptr) { nameoftag = maker_tagname(entry_ptr->tag,make,model); fulldirname = splice(parent_name,".",nameoftag); value_offset = fileoffset_base + entry_ptr->value; count = entry_ptr->count; switch(entry_ptr->tag) { case 0x0003: /* JpegThumbnailLength */ /* Just record it */ jpegthumbnaillength = entry_ptr->value; break; case 0x0004: /* JpegThumbnailOffset */ if(jpegthumbnaillength) { count = jpegthumbnaillength; jpegthumbnaillength = 0; } if(at_offset && (PRINT_SECTION)) { print_tag_address(VALUE_AT_OFFSET,value_offset,indent,prefix); chpr += printf("# Start of JPEG Thumbnail from MakerNote"); chpr += printf(" length %ld",count); } else if(!at_offset && (PRINT_VALUE)) { if(!(PRINT_OFFSET)) chpr += printf("@%lu:%lu",value_offset,count); else chpr = printf("length %lu",count); } if((PRINT_SECTION) || (PRINT_SEGMENT)) chpr = newline(chpr); marker = read_ushort(inptr,TIFF_MOTOROLA,value_offset); max_offset = process_jpeg_segments(inptr,value_offset,marker, count,summary_entry,fulldirname, prefix,indent+SMALLINDENT); if(at_offset) { if((PRINT_SECTION)) { if((status = jpeg_status(0) == JPEG_EARLY_EOI)) chpr = newline(chpr); jpeg_status(status); print_tag_address(VALUE_AT_OFFSET,value_offset + count - 1, indent,"-"); chpr += printf("# End of JPEG Thumbnail from MakerNote"); if((PRINT_ENTRY) && !(PRINT_VALUE)) chpr = newline(chpr); } } print_jpeg_status(); if(marker && summary_entry) { /* The new one is on the end of the chain */ if((summary_entry = last_summary_entry(summary_entry))) { summary_entry->filesubformat |= FILESUBFMT_MNOTE; summary_entry->datatype = MAKER_IFD; summary_entry->subfiletype = THUMBNAIL_TYPE; } } /* make certain we're at the end */ clearerr(inptr); fseek(inptr,value_offset + count,SEEK_SET); break; case 0x0e00: /* PrintIM (Epson Print Image matching) */ if(!at_offset && (PRINT_VALUE)) { if(!(PRINT_OFFSET)) chpr += printf("@%lu",value_offset); } process_pim(inptr,byteorder,entry_ptr->value,fileoffset_base, count,nameoftag,parent_name,prefix,indent); break; default: print_generic_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base, fulldirname,prefix,indent, make,model,at_offset); break; } } setcharsprinted(chpr); }
unsigned long print_offset_makervalue(FILE *inptr,unsigned short byteorder, struct ifd_entry *entry_ptr,unsigned long fileoffset_base, struct image_summary *summary_entry,char *parent_name,char*prefix, int indent,int make,int model,int at_offset) { unsigned long endoffset = 0L; if(inptr && entry_ptr) { if((value_type_size(entry_ptr->value_type) * entry_ptr->count) <= 4UL) endoffset = 0; else endoffset = fileoffset_base + entry_ptr->value + (value_type_size(entry_ptr->value_type) * entry_ptr->count); switch(make) { case MAKER_AGFA: print_agfa_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent,make, model,at_offset); break; case MAKER_ASAHI: /* Pentax */ case MAKER_PENTAX: /* Pentax */ print_asahi_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent,make, model,at_offset); break; case MAKER_CANON: print_canon_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent,make, model,at_offset); break; case MAKER_CASIO: print_casio_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent,make, model,at_offset); break; case MAKER_EPSON: print_epson_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent,make, model,at_offset); break; case MAKER_FUJIFILM: print_fujifilm_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent, make,model,at_offset); break; case MAKER_HP: print_generic_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,parent_name,prefix,indent, make,model,at_offset); break; case MAKER_KODAK: print_generic_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,parent_name,prefix,indent, make,model,at_offset); break; case MAKER_KYOCERA: print_kyocera_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent, make,model,at_offset); break; case MAKER_KONICA: print_konica_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent, make,model,at_offset); break; case MAKER_LEICA: print_leica_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent, make,model,at_offset); break; case MAKER_MINOLTA: print_minolta_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent,make, model,at_offset); break; case MAKER_NIKON: print_nikon_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent,make, model,at_offset); break; case MAKER_OLYMPUS: print_olympus_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent,make, model,at_offset); break; case MAKER_PANASONIC: print_panasonic_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent, make,model,at_offset); break; case MAKER_RICOH: print_generic_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,parent_name,prefix,indent, make,model,at_offset); break; case MAKER_SANYO: print_sanyo_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent,make, model,at_offset); break; case MAKER_SIGMA: print_sigma_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent, make,model,at_offset); break; case MAKER_SONY: print_sony_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent, make,model,at_offset); break; case MAKER_TOSHIBA: print_toshiba_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,summary_entry, parent_name,prefix,indent, make,model,at_offset); break; case MAKER_TRAVELER: print_generic_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,parent_name,prefix,indent, make,model,at_offset); break; default: print_generic_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,parent_name,prefix,indent, make,model,at_offset); break; } } else { printred(" invalid call to print_offset_makervalue "); if(inptr == (FILE *)0) printred(" no input file pointer "); if(entry_ptr == (struct ifd_entry *)0) printred(" null entry pointer"); } if(ferror(inptr) || feof(inptr)) clearerr(inptr); (void)newline(0); if(ftell(inptr) > endoffset) endoffset = ftell(inptr); return(endoffset); }