#!/usr/bin/perl

#...... download from lumix camer SD card
#       make thumbnail, exif, and reduced size
#       move origs to jr.sr
#       JR  09/2017

$sd='/Volumes/Untitled/DCIM/';
$pd='pics.lumix';  ssy("mkdir -p $pd");

$t=`find $sd -name "*.JPG" -print`;

foreach $f (split('\n',$t)){
    $d=exifdate($f); $g="${d}-Lumix-TS6_$da.jpg";
        #..... copy/rename
        if(!( -e "$pd/$g")){ ssy("/bin/cp $f $pd/$g"); }
        #..... make sure copy was successful, then delete
        $x='xxx'; if( -e "$pd/$g"){ $x=`diff $f $pd/$g`; }
        if($x eq ''){ ssy("/bin/rm $f"); }  #..... delete from card if copy exists and does not differ
        print " moving:  |$f| |$pd/$g| |$x|\n"; 
}

#..... rename fix  (extra underscore)
#foreach(glob("$pd/*_.jpg")){ $f=$_; s/_\.jpg/.jpg/; ssy("mv $f $_"); }

#..... save all to other computer
ssy("rsync -auv --progress $pd jraeder\@jr.sr.unh.edu:.");

sub exifdate{ local($f)=@_; local($a); $a=`exif $f`; foreach(split('\n',$a)){ 
        if(/Date.+\|(\d{4}:\d\d:\d\d\s+\d\d:\d\d:\d\d)/){$d=$1;$d=~s/:/_/g;$d=~s/\s+/_/g; last;}} return($d); }


#............. collection of simple funcs in perl

sub ssy{ local($c)=@_; print STDERR "ssy:|$c|\n"; system($c); return; }
sub min{ local($a,$b)=@_;local($c); $c=$a; if($b<$a){$c=$b;} return($c); }
sub max{ local($a,$b)=@_;local($c); $c=$a; if($b>$a){$c=$b;} return($c); }
sub abs{ local($a)=@_;local($c); $c=$a; if($a<0){$c=-$a;} return($c); }
sub log10{local($a)=@_;$y10=1.0/(log(10.0));$a=$y10*log(max($a,1.0e-15)); return($a); }
sub log2{local($a)=@_;$y10=1.0/(log(2.0));$a=$y10*log(max($a,1.0e-15)); return($a); }
sub basename{ local($k)=@_; local(@a)=split('\/',$k); return($a[$#a]); }
sub suck{local($f)=@_; local($t,@t);$t=`cat $f`;@t=split('\n',$t); print STDERR "suck: |$f| |$#t|\n"; return(@t); }
sub dumpf{ local($c,$f)=@_; open(DF,">$f"); print DF $c; close(DF); }
sub dumpa{ local($f)=shift(@_); open(FF,">$f");print FF join("\n",@_); close(FF); }
sub mes{ local($x)=@_; print STDERR ">$x<\n"; }
sub err{ local($x)=@_; print STDERR "error $0 message: |$x|\n"; exit; }

sub exfile{ local($me,$ff)=@_; local($i); open(III,"<$me"); open(OOO,">$ff"); local($i)=0;
while(<III>){@a=split(); if($a[0] eq 'ENDFILE'){$i=0}; if($i==1){print OOO "$_";} 
if(($a[0] eq 'BEGINFILE')&&($a[1] eq $ff)){$i=1}; }
close(III); close(OOO); return; }

sub print_table{ local($t,$s)=@_;  local($x,$y,$l,$i,$nc,@cl); for($i=0;$i<100;$i++){$cl[$i]=0; } $nc=0;
foreach $l (split('\n',$t)){ $i=0; foreach $x (split($s,$l)){ 
$y=length($x); if($y>$cl[$i]){$cl[$i]=$y;} $i++; if($i>$nc){$nc=$i;} }}
foreach $l (split('\n',$t)){ $i=0; foreach $x (split($s,$l)){ $y=$cl[$i]; $i++; $f="%-${y}s";
printf $f,$x; print STDERR " ";} print STDERR "\n"; } }

sub hsvrgb { local(*h,*s,*v,*r,*g,*b)=@_; local($i,$hh,$k,$f,$m,$n);
$hh=6.*$h; $i=int($hh); $f=$hh-$i; $m=$v*(1.-$s); $n=$v*(1.-$s*$f); $k=$v*(1.-$s*(1.-$f));
if($i==0){ $r=$v; $g=$k; $b=$m; $hex=sprintf('#%2.2x%2.2x%2.2x',256*$r,256*$g,256*$b);return($hex);}
if($i==1){ $r=$n; $g=$v; $b=$m; $hex=sprintf('#%2.2x%2.2x%2.2x',256*$r,256*$g,256*$b);return($hex);}
if($i==2){ $r=$m; $g=$v; $b=$k; $hex=sprintf('#%2.2x%2.2x%2.2x',256*$r,256*$g,256*$b);return($hex);}
if($i==3){ $r=$m; $g=$n; $b=$v; $hex=sprintf('#%2.2x%2.2x%2.2x',256*$r,256*$g,256*$b);return($hex);}
if($i==4){ $r=$k; $g=$m; $b=$v; $hex=sprintf('#%2.2x%2.2x%2.2x',256*$r,256*$g,256*$b);return($hex);}
           $r=$v; $g=$m; $b=$n; $hex=sprintf('#%2.2x%2.2x%2.2x',256*$r,256*$g,256*$b);return($hex); }

sub waitfor{ local($p,$n,$w)=@_;  #  name  max  wait/sec
local($t,$m); while(1){ $t=`ps auxw`;$m=0; foreach (split('\n',$t)){if(/$p/){$m++;}}
print STDERR "waitfor: $m/$n ... "; if($m<$n){ print STDERR " ..... end\n"; return; }
if( -e "waitfor"){ $x=`cat waitfor`; ($n,$w)=split(' ',$x); if($w<2){$w=2;} print STDERR " new n=$n w=$w ";} 
print STDERR " waiting $w secs\n"; sleep($w); }
}

#..... tile several pdf files into one
sub pdf_join{ ($a,$oo)=@_;  $c="";
   foreach(split(' ',$a)){ ($k,$l)=split('\:',$_);
      ssy("amak.pdf-stamp '($l)' 490 450 Helvetica-Bold 20 tmp$k.pdf");
      ssy("pdfcrop --margins -4 tmp-99.pdf;  /bin/mv tmp-99-crop.pdf tmp2-$k.pdf");
      $c="$c tmp2-$k.pdf"; }
      ssy("pdfjam $c  --nup 2x3 --outfile tmp99.pdf;  pdfcrop tmp99.pdf; /bin/mv tmp99-crop.pdf $oo"); }

#..... simple interface to plot 2d contours from ascii data files
sub make_2dp{ local($fin,$sel,$fmima,$log,$cmap,$lab,$out)=@_;
  $c="amak.2dpl-20160320  fin=$fin sel=$sel col_ix=14 col_iy=15 col_vv=13 col_xx=11 col_yy=12
      xybox=4:16:4:16 fmima=$fmima outlier=none
      cmap=$cmap cbar=yes log=$log  tout=tmp.ps ch=0.55 fnt=Helvetica xax=longitude yax=latitude yaxoff=3.0
      topl=~ topc=$lab topr=~ con=none ytics=none outlier=none
      xymax=0:999999:0:999999 xgrid=none ygrid=none mhdgrid=none points=none ";  $c=~s/\n/ /gs; ssy($c);
      ssy("ps2pdf tmp.ps; pdfcrop --margins -3 tmp.pdf;  /bin/mv -v tmp-crop.pdf  $out.pdf");}

#---------------------------------------------------------------------------------------
#----- time epoch routines      --------------------------------------------------------
#---------------------------------------------------------------------------------------
sub epo2i{
  local($e)=@_;  local($t,$iy,$mo,$id,$ih,$mi,$se,$se1,$se2,$r);
  $t=epo1(2020,1,1,0,0,0); $iy=2020;while($t>=$e){$iy--;$t=epo1($iy,1,1,0,0,0);}
  $t=epo1($iy,13,1,0,0,0); $mo=13;while($t>=$e){$mo--;$t=epo1($iy,$mo,1,0,0,0);}
  $t=epo1($iy,$mo,32,0,0,0);
  $id=32;while($t>=$e){$id--;$t=epo1($iy,$mo,$id,0,0,0);}
  $t=epo1($iy,$mo,$id,0,0,0); $t=$e-$t; $ih=int($t/3600.0);
  $t=$t-(3600*$ih); $mi=int($t/60.0);
  $se=$t-(60*$mi); $se1=int($se); $se=$se-$se1; $se2=int((1000*$se)+0.1);
  $r=sprintf("%4.4d:%2.2d:%2.2d:%2.2d:%2.2d:%2.2d.%3.3d",
  $iy,$mo,$id,$ih,$mi,$se1,$se2); }

sub epo2i_se{
  local($e)=@_;  local($t,$iy,$mo,$id,$ih,$mi,$se,$se1,$se2,$r);
  $t=epo1(2020,1,1,0,0,0); $iy=2020;while($t>=$e){$iy--;$t=epo1($iy,1,1,0,0,0);}
  $t=epo1($iy,13,1,0,0,0); $mo=13;while($t>=$e){$mo--;$t=epo1($iy,$mo,1,0,0,0);}
  $t=epo1($iy,$mo,32,0,0,0);
  $id=32;while($t>=$e){$id--;$t=epo1($iy,$mo,$id,0,0,0);}
  $t=epo1($iy,$mo,$id,0,0,0); $t=$e-$t; $ih=int($t/3600.0);
  $t=$t-(3600*$ih); $mi=int($t/60.0);
  $se=$t-(60*$mi);
  $r=$se; }

sub epo2i_mi{
  local($e)=@_;  local($t,$iy,$mo,$id,$ih,$mi,$se,$se1,$se2,$r);
  $t=epo1(2020,1,1,0,0,0); $iy=2020;while($t>=$e){$iy--;$t=epo1($iy,1,1,0,0,0);}
  $t=epo1($iy,13,1,0,0,0); $mo=13;while($t>=$e){$mo--;$t=epo1($iy,$mo,1,0,0,0);}
  $t=epo1($iy,$mo,32,0,0,0);
  $id=32;while($t>=$e){$id--;$t=epo1($iy,$mo,$id,0,0,0);}
  $t=epo1($iy,$mo,$id,0,0,0); $t=$e-$t; $ih=int($t/3600.0);
  $t=$t-(3600*$ih); $mi=int($t/60.0);
  $r=$mi; }

sub epo2i_ho{
  local($e)=@_;  local($t,$iy,$mo,$id,$ih,$mi,$se,$se1,$se2,$r);
  $t=epo1(2020,1,1,0,0,0); $iy=2020;while($t>=$e){$iy--;$t=epo1($iy,1,1,0,0,0);}
  $t=epo1($iy,13,1,0,0,0); $mo=13;while($t>=$e){$mo--;$t=epo1($iy,$mo,1,0,0,0);}
  $t=epo1($iy,$mo,32,0,0,0);
  $id=32;while($t>=$e){$id--;$t=epo1($iy,$mo,$id,0,0,0);}
  $t=epo1($iy,$mo,$id,0,0,0); $t=$e-$t; $ih=int($t/3600.0);
  $r=$ih; }

sub epo2i_id{
  local($e)=@_;  local($t,$iy,$mo,$id,$ih,$mi,$se,$se1,$se2,$r);
  $t=epo1(2020,1,1,0,0,0); $iy=2020;while($t>=$e){$iy--;$t=epo1($iy,1,1,0,0,0);}
  $t=epo1($iy,13,1,0,0,0); $mo=13;while($t>=$e){$mo--;$t=epo1($iy,$mo,1,0,0,0);}
  $t=epo1($iy,$mo,32,0,0,0);
  $id=32;while($t>=$e){$id--;$t=epo1($iy,$mo,$id,0,0,0);}
  $r=$id; }

sub epo2i_mo{
  local($e)=@_;  local($t,$iy,$mo,$id,$ih,$mi,$se,$se1,$se2,$r);
  $t=epo1(2020,1,1,0,0,0); $iy=2020;while($t>=$e){$iy--;$t=epo1($iy,1,1,0,0,0);}
  $t=epo1($iy,13,1,0,0,0); $mo=13;while($t>=$e){$mo--;$t=epo1($iy,$mo,1,0,0,0);}
  $r=$mo; }

sub epo2i_iy{
  local($e)=@_;  local($t,$iy,$mo,$id,$ih,$mi,$se,$se1,$se2,$r);
  $t=epo1(2020,1,1,0,0,0); $iy=2020;while($t>=$e){$iy--;$t=epo1($iy,1,1,0,0,0);}
  $r=$iy; }

sub epo2{local($e)=@_;
  local($iy,$mo,$id,$ih,$mi,$se)=split(':',$e);
  local($rr); $rr=epo1($iy,$mo,$id,$ih,$mi,$se); }

sub epo1{  #.... algorithm from Nautical Almanach
  local($iy,$mo,$id,$ih,$mi,$se)=@_;
  local($t,$i1,$i2,$i3,$i4,$d1,$rr);
  if($iy<200){$iy+=1900;}
  $i1=367*$iy;
  $i2=int(($mo+9)/12);
  $i2=($i2+$iy)*7;
  $i2=int($i2/4);
  $i3=int((275*$mo)/9);
  $i4=100*$iy+$mo;
  $d1=(1.0); if(($i4-190002.5)<0.0){$d1=(-1.0);}
  $rr = ( $i1 - $i2 + $i3 + $id + 1721013.5 -0.5*$d1 +0.5 )*86400.0;  #  in seconds now
  $rr = $rr + 3600.0*$ih + 60.0*$mi +$se; }

sub epo1t{ local($tt)=@_; local($iy,$mo,$id,$ih,$mi,$se)=split('\:',$tt);
  local($t,$i1,$i2,$i3,$i4,$d1,$rr); if($iy<200){$iy+=1900;}
  $i1=367*$iy; $i2=int(($mo+9)/12); $i2=($i2+$iy)*7; $i2=int($i2/4); $i3=int((275*$mo)/9);
  $i4=100*$iy+$mo; $d1=(1.0); if(($i4-190002.5)<0.0){$d1=(-1.0);}
  $rr = ( $i1 - $i2 + $i3 + $id + 1721013.5 -0.5*$d1 +0.5 )*86400.0;  #  in seconds now 
  $rr = $rr + 3600.0*$ih + 60.0*$mi +$se; }


