#!/bin/csh -f

set my_name = `basename $0`

set dst_dir = "slides"
set src_list = ""
set prefix = "slide"
set update_p = 0
set slide_request = ""
set targ_width = 1024
set targ_height = 768

set temp1 = `mktemp`
set temp2 = `mktemp`
set temp3 = `mktemp`

while ( "$#argv" != "0" )
  set first = `printf "%s\n" "$argv[1]" | cut -c1`

  if ( "$first" == "-" ) then
    set second = `printf "%s\n" "$argv[1]" | cut -c2`

    switch ( "$second" )
      case 'h':

        echo "usage: $my_name [ options ] [ file1.ps [ file2.ps [ ... ] ] ]"
        echo "options:"
        echo "  -h              this help"
        echo "  -d dest-dir     set the destination directory"
        echo "  -p prefix       set the output image prefix"
        echo "  -u              update mode (doesn't delete old output)"
        echo "  -s slide        generate only the specified slide"
	echo "  -x WxH          specify the dimensions of the output images,"
	echo "                   in pixels"

        exit
      breaksw
      case 'd':
        shift
        set dst_dir = "$argv[1]"
      breaksw
      case 'p':
        shift
        set prefix = "$argv[1]"
      breaksw
      case 'u':
        set update_p = 1
      breaksw
      case 's':
        shift
        set slide_request = "$argv[1]"
      breaksw
      case 'x':
        shift
	set dim = `echo "$argv[1]" | awk -v FS=x '{printf("%d %d\n",$1,$2);}'`
        @ targ_width = $dim[1]
	@ targ_height = $dim[2]
      breaksw
      default:
        echo "$my_name"": unknown option '$argv[1]'; use -h for help"
      breaksw
    endsw
  else
    if ( "$src_list" == "" ) then
      set src_list = "$argv[1]"
    else
      set src_list = ( $src_list "$argv[1]" )
    endif
  endif

  shift
end

if ( "$src_list" == "" ) then
  echo "$my_name"": no slides passed; use -h for help"
  exit
endif

mkdir -p "$dst_dir"

if ( "$update_p" == "0" ) then
  rm -rf "$dst_dir"/"$prefix"-*.png >& /dev/null
endif

@ seq = 1
@ slide_request_num = "$slide_request"

foreach src ( $src_list )
  echo "working on '$src'..."

  rm -f sc*.ppm >& /dev/null

  echo -n "  building raw ppm files... "

  if ( "$slide_request" == "" ) then
    set gs_options = "-dStartingSlideNumber=""$seq"
  else
    set gs_options = ( "-dStartingSlideNumber=""$seq" "-dSlideRequest=""$slide_request_num" )
  endif

  gs -sDEVICE=ppmraw -sOutputFile=sc%03d.ppm -g3400x2800 -r400x400 -q -dNOPAUSE -dPARANOIDSAFER -dBATCH $gs_options $src > $temp3
  echo "done."

  # okay the slides that were just processed are in $temp3. if we're
  # in single slide mode, zero or one .ppm files was created.

  if ( -f sc001.ppm ) then
    foreach img ( sc*.ppm )
      if ( "$slide_request" == "" ) then
        set seq_str = `printf "%03d" $seq`
      else
        set seq_str = `printf "%03d" $slide_request_num`
      endif
      set dst = "$prefix"-"$seq_str".png

      echo -n "  building $dst... "
      (pamcut -left 75 -right -75 -top 160 -bottom -140 $img > $temp1 )      >& /dev/null
      (pnmscale -width "$targ_width" -height "$targ_height" $temp1 > $temp2) >& /dev/null
      (pnmtopng $temp2 > "$dst_dir/$dst")                                    >& /dev/null
      echo "done."

      @ seq = $seq + 1
    end
  endif

  @ seq = `tail -1 $temp3` + 1

  echo "done."
end

rm -f sc*.ppm >& /dev/null
rm -rf $temp1 $temp1 $temp3
