===============================================================================
                             JPEGsnoop - README
                               by Calvin Hass
            http://www.impulseadventure.com/photo/jpeg-snoop.html
===============================================================================

JPEGsnoop is a JPEG decoding and analysis utility written for Windows.
It reports all metadata contained within an image in addition to
the unique compression signatures that can be used to identify edited images.

JPEGsnoop is a portable application that does not require installation.


Contents:
1) Files
2) Acknowledgements


-------------------
1) FILES
-------------------

JPEGsnoop is written in Microsoft Visual Studio 2012 Pro (C++) using MFC.

The project is a SDI (Single Document Interface) with Document-View architecture.


Files are arranged as follows:


MFC User Interface
------------------
  JPEGsnoopDoc.*		- SDI Document class.
  JPEGsnoopView.*		- SDI View class (for top split window / textual output)
  JPEGsnoopViewImg.*	- SDI View class (for bottom split window / image output)
  MainFrm.*				- SDI Frame class. Contains status bar, toolbar and
                          code to support the splitter window.

Global Definitions
------------------
  snoop.h				- Global defines and debugging options. Primarily
						  used to denote current release version number.

Application
-----------
  CntrItem.*			- OLE container / RichEdit class
  DbSigs.*				- Compression signature database class
! Dib.*					- DIB (Bitmap) class
  DocLog.*				- Document logging helper routines
  FileTiff.*			- TIFF export routines
  General.*
! HyperlinkStatic.*		- Hyperlink class for dialog box static controls
  ImgDecode.*			- Image Decoder (for Scan segment)
  JfifDecode.*			- JFIF Parser
  JPEGsnoop.*
! Md5.*					- MD5 hash routines, used for compression signature
! Registry.*			- Windows Registry class 
  SnoopConfig.*			- Application configuration class
  stdafx.*				- Windows precompiled headers (auto-created)
! UrlString.*			- URL En/Decoding class
  WindowBuf.*			- File buffer / cache routines

UNUSED:
! CmdLine.*				- Command-line processing
! OperationDlg.*		- Progress dialog with cancel


NOTE: Files marked with "!" denote classes that have reused code from 
      other authors. Please see the acknowledgements section.
      

Supporting Dialog Boxes
-----------------------
  AboutDlg.*			- About dialog. Indicates version number and link to
						  website with updated releases.
  DbManageDlg.*			- Local signature database management dialog. This
						  dialog allows the user to view and delete the compression
						  signatures that have been saved locally.
  DbSubmitDlg.*			- Signature database submit dialog. This dialog provides an
						  opportunity for the user to describe a few characteristics
						  of the image signature that will be sent to the database.
  DecodeDetailDlg.*		- Detailed decode dialog. Asks the user for a starting MCU
						  coordinate and length to begin detailed decoding.
  ExportDlg.*			- Export JPEG dialog. Provides a few options in the JPEG
						  export process.
  ExportTiffDlg.*		- Export TIFF dialog. Provides a few options in the TIFF
						  export process.
  FolderDlg.*			- Generic folder select dialog.
  LookupDlg.*			- Lookup file offset from MCU dialog. User inputs MCU coordinate
						  and lookup returns file offset within scan segment.
  ModelessDlg.*			- Generic modeless dialog.
  NoteDlg.*				- Generic note dialog. This dialog is used to inform the
						  user of runtime messages or warnings.
  OffsetDlg.*			- File offset dialog. Provides the user with the ability to
						  specify a starting file offset for parsing/decoding.
  OperationDlg.*		- Progress dialog for lengthy operations.
  OverlayBufDlg.*		- File overlay dialog. This dialog presents the user with
						  the current hex values at a specific position within the file
						  and provides the user with the ability to overwrite one or
						  more bytes with new hex values.
  SettingsDlg.*			- Configuration settings dialog. Provides all major configuration
						  options to the user. The settings are saved in the registry.
  TermsDlg.*			- Terms and conditions dialog. The dialog presents the user with
						  the EULA and records whether the user accepted it.
  UpdateAvailDlg.*		- Release update available dialog. Informs the user of the
						  existence of a newer version of JPEGsnoop and offers the
						  option of launching a browser window to download the latest
						  version.


Compression Signature Database
------------------------------
  Signatures.inl		- The current built-in compression signatures database.
						  This file is currently generated from a PHP script
						  residing on the ImpulseAdventure.com website that
						  fetches the latest compression signatures from a
						  MySQL database.



-------------------
2) ACKNOWLEDGEMENTS
-------------------

I am very grateful to the following authors whose classes or concepts I have reused in
the development of JPEGsnoop.

  FolderDlg.cpp
  - MSDN Magazine

  Dib.cpp
  - MSDN?

  HyperlinkStatic.cpp
  - http://www.codeguru.com/cpp/controls/staticctrl/article.php/c5801
  - Franz Wong (http://www.codeguru.com/member.php/2259/)

  MD5.cpp
  - By RSA

  Registry.cpp
  - http://www.codeproject.com/KB/system/registryvars.aspx
  - Steve King
  - License: CPOL "Code Project Open License" http://www.codeproject.com/info/cpol10.aspx

  UrlString.cpp
  - Stephane Erhardt
  - http://www.codeguru.com/cpp/cpp/cpp_mfc/comments.php/c4029/?thread=9533

I also would like to give a special mention to Phil Harvey, the author of the
comprehensive ExifTool (http://www.sno.phy.queensu.ca/~phil/exiftool/). His work
in collating and documenting the vast set of EXIF tags has been incredibly helpful.

