#!/usr/bin/perl
#Find blocks in a file with

use strict;
use FileHandle;
use IO::File;

#Global for simplicity
my $prev=-1;
my $filename;
my $blocksize;
my $jpegcount=0;

sub found
{
  my ($blocknum)=@_;
  print "# ".$blocknum."\n";

  if ($prev>=0)
  {
    printf("dd if=\"%s\" of=\"%05d.jpg\" bs=%d skip=%d count=%d\n",$filename,$jpegcount,$blocksize,$prev,$blocknum-$prev);
  }

  $jpegcount++;
  $prev=$blocknum;
}

sub main
{
  ($filename,$blocksize)=@ARGV;
  $blocksize=int($blocksize);
  if ($blocksize<100) {$blocksize=512;}

  my $fh = new FileHandle;
  $fh=new IO::File;
  $fh->open($filename,"r") or die "Could not open file\n";

  print "#!/bin/sh\n\n";

  my $blocknum=0;
  while(1)
  {
    my $buf;
    $fh->read($buf,$blocksize) or last;

    if ($buf =~ /Exif/)
    {
      found($blocknum);
    }

    $blocknum++;
  }
  found($blocknum);

  $fh->close();
}

main;
