nerd Här ser du hela källkoden till C++ programmet exif. Det är nog lättare att se om du laddar hem det och tittar i en texteditor.

/*
Copyright 2006 - 2007, Ingemar Ceicer <programmering '@' ceicer.org>.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.

*/

/* Syntax 1: exif filnamn
   Syntax 2: exif filnman --good
   Print 1: YYYY:MM:DD HH:MM:SS
   Print 2: YYYY-MM-DD_HH-MM-SS
*/

#include <fstream>
using namespace std;

void visa_help(char *c);
void format_good(char *c);
void finn(char *hela, char *hittat);
bool s(char c);
bool sa(char c);
bool sb(char c);

int main(int argc, char *argv[])
{
bool formatera=false;

  /* Kontrollera anropet. */
  if( argc < 1 || argc > 3 )
    {
        visa_help(argv[0]);
        return 1;


    }
    else
    {

      if ( ( argc == 3) && (strcmp(argv[2],"--good") != 0 ) )
      {
          visa_help(argv[0]);
          return 1;
      }

      if ( ( argc == 3) && (strcmp(argv[2],"--good") == 0 ) )
      {
          formatera=true;
      }

    }

  char in;
  char hela[1024]={};
  char hittat[19]={};
  ifstream lasfil;


  /* Öppna filen. */
  char *filnamn=argv[1];
  lasfil.open(filnamn,ios::binary);
  if (! lasfil.good() )
    {
      fprintf(stderr, "Fel vid öppning av filen '%s'.\n", filnamn);
      return 1;
    }

   for ( int i=0;i<1024;i++ )
	{
		lasfil.read((char*) &in,1);
		hela[i] = in;
	}

finn(hela,hittat);
if (strcmp(hittat,"") == 0)
{
	 fprintf(stderr, "Ingen EXIF data hittades\n");
	 return 0;
}

		if (formatera)
			format_good(hittat);

		printf(hittat);

  return 0;
}
void finn(char *h, char *hittat)
{
	for (int i=0; i<1025; i++)
	{
		if ( s(h[i]) && s(h[i+1]) && s(h[i+2]) && s(h[i+3]) &&
                    s(h[i+5]) && sa(h[i+4])
                    && s(h[i+5]) && s(h[i+6]) && sa(h[i+7])
                    && s(h[i+8]) && s(h[i+9]) && sb(h[i+10])
                  && s(h[i+11]) && s(h[i+12]) && sa(h[i+13]
                  && s(h[i+14]) && s(h[i+15]) && sa(h[i+16])
                  && s(h[i+17]) && s(h[i+18]) )
		{
			for (int k=0; k<20; k++,i++)
				hittat[k]=h[i];
			return;
		}
	}
}

bool s(char c)
{
	if (c >= '0' && c <= '9')
		return true;
	return false;
}
bool sa(char c)
{
	if (c == ':')
		return true;
	return false;
}
bool sb(char c)
{
	if (c == ' ')
		return true;
	return false;
}
void visa_help(char *c)
{
        fprintf(stderr, "\nAnvändning: %s <filnamn>\n",c);
        fprintf(stderr, "Utskriftsformat: YYYY:MM:DD HH:MM:SS\n");
        fprintf(stderr, "Användning: %s <filnamn> --good\n",c);
        fprintf(stderr, "Utskriftsformat: YYYY-MM-DD_HH-MM-SS\n");
}
void format_good(char *c)
{
	c[4]='-';
	c[7]='-';
	c[10]='_';
	c[13]='-';
	c[16]='-';
}