#!/bin/csh
#set echo

#..... combines multiple '.ps' files into a single file.
#      writes to stdout
#      depends on '%%BoundingBox' information in the 'ps' files

echo "%\!"
###echo "clear"

#....... parse options and files
set LSC=0
set GRID=0
set TXT1="none"
set TXT2="none"
set TXT3="none"
set TXT4="none"
set TOPLABEL="none"
set BOTTOMLABEL="none"
set PSFONT="/Times-Roman"
set PSFONTSIZE="15"
set SSCALE=1.0
set SPREADX=1.0
set SPREADY=1.0
set SSCALE2=1.0
set NX=0
set NY=0
set NF=0
set PS=( )
set TTTY=( )
set XXOFF=0
set YYOFF=0
while ( $#argv > 0 )
  set AR=$1
#  echo "$0 : $AR" > /dev/stderr
  if ( "$AR" == "-v" ) then
    set echo
  else if ( "$AR" == "-landscape" ) then
    set LSC=1
  else if ( "$AR" == "-grid" ) then
    set GRID=1
  else if ( "$AR" == "-NX" ) then
    shift
    set NX=$1
  else if ( "$AR" == "-NY" ) then
    shift
    set NY=$1
  else if ( "$AR" == "-xoffset" ) then
    shift
    set XXOFF=$1
  else if ( "$AR" == "-yoffset" ) then
    shift
    set YYOFF=$1
  else if ( "$AR" == "-scale" ) then
    shift
    set SSCALE=$1
  else if ( "$AR" == "-scale2" ) then
    shift
    set SSCALE2=$1
  else if ( "$AR" == "-spreadx" ) then
    shift
    set SPREADX=$1
  else if ( "$AR" == "-spready" ) then
    shift
    set SPREADY=$1
  else if ( "$AR" == "-toplabel" ) then
    shift
    set TOPLABEL=$1
  else if ( "$AR" == "-bottomlabel" ) then
    shift
    set BOTTOMLABEL=$1
  else if ( "$AR" == "-text1" ) then
    shift
    set TXT1="$1"
  else if ( "$AR" == "-text2" ) then
    shift
    set TXT2="$1"
  else if ( "$AR" == "-text3" ) then
    shift
    set TXT3="$1"
  else if ( "$AR" == "-text4" ) then
    shift
    set TXT4="$1"
  else if ( "$AR" == "-psfont" ) then
    shift
    set PSFONT=$1
  else if ( "$AR" == "-psfontsize" ) then
    shift
    set PSFONTSIZE=$1
  else
    @ NF = $NF + 1
    set PS = ( $PS $1 )
  endif
  shift
end
echo "%  psmarks  nf=$NF"
echo "%  psmarks  toplabel=$TOPLABEL"
echo "%  psmarks  BOTTOMlabel=$BOTTOMLABEL"
foreach PP ( $PS )
  echo "%  psmarks  files= $PP"
end


#....... find minmax of bounding box
set TYPE=1
set XMIN=999999; set XMAX=-999999;
set YMIN=999999; set YMAX=-999999;
foreach KK ( `mloop 1 $NF 1 0 1`  )
  set TT1=`cat $PS[$KK] | awk '{if($1=="%%%psmarksize"){print;}}' `
  set LL1=`echo $TT1 | wc -c`
  if ( $LL1 < 15 ) then
    set TT2=`head -50 $PS[$KK] | grep '%BoundingBox'`
    set LL2=`echo $TT2 | wc -c`
    if ( $LL2 < 15 ) then
      set TT1='%%BoundingBox  0  612  0  796';
    else
      set TT1=`echo $TT2 | awk '{print $1,$2,$4,$3,$5;}'`
      set TYPE=2;
      set TTTY=($TTTY 2)
    endif
  else
    set TTTY=($TTTY 1)
  endif
#  echo $TTTY > /dev/stderr
  echo "%  psmarks $TT1 $TTTY"
  set XX=`echo $TT1 | awk '{print $2}'`
  if ( $XX < $XMIN ) set XMIN=$XX
  if ( $XX > $XMAX ) set XMAX=$XX
  set XX=`echo $TT1 | awk '{print $3}'`
  if ( $XX < $XMIN ) set XMIN=$XX
  if ( $XX > $XMAX ) set XMAX=$XX
  set YY=`echo $TT1 | awk '{print $4}'`
  if ( $YY < $YMIN ) set YMIN=$YY
  if ( $YY > $YMAX ) set YMAX=$YY
  set YY=`echo $TT1 | awk '{print $5}'`
  if ( $YY < $YMIN ) set YMIN=$YY
  if ( $YY > $YMAX ) set YMAX=$YY
end

set XL=`fexp "($XMAX-$XMIN)"`
set YL=`fexp "($YMAX-$YMIN)"`
#echo "$0 xmin,xmax,xl $XMIN $XMAX $XL"  > /dev/stderr
#echo "$0 ymin,ymax,yl $YMIN $YMAX $YL"  > /dev/stderr
if ( $NX == 0 && $LSC == 0 ) then
  set NX=`layout_opt 8.5 11 $XL $YL $NF | awk '{print $1}'`
endif
if ( $NY == 0 && $LSC == 0 ) then
  set NY=`layout_opt 8.5 11 $XL $YL $NF | awk '{print $2}'`
endif
if ( $NX == 0 && $LSC == 1 ) then
  set NX=`layout_opt 11 8.5 $XL $YL $NF | awk '{print $1}'`
endif
if ( $NY == 0 && $LSC == 1 ) then
  set NY=`layout_opt 11 8.5 $XL $YL $NF | awk '{print $2}'`
endif
echo "%  psmarks minmax" $XMIN $XMAX $YMIN $YMAX
if ( $LSC == 0 ) then
  set SC=`fexp "min((612.0/(36.0+$XL*$NX)),(796.0/(36.0+$YL*$NY)))"`
endif
if ( $LSC == 1 ) then
  set SC=`fexp "min((796.0/(36.0+$XL*$NX)),(612.0/(36.0+$YL*$NY)))"`
endif
set SC=`fexp "(${SSCALE}*0.95*$SC)"`
set SCI=`fexp "1.0/$SC"`
set XL=`fexp "$XL*$SC"`
set YL=`fexp "$YL*$SC"`
set SCC=`fexp "($SC*$SSCALE2)"`
set SCCI=`fexp "1.0/$SCC"`
#echo $0 : nx,ny,sc  $NX $NY $SC > /dev/stderr

#.......  loop over input files
if ( $LSC == 0 ) then
  set XXC=306.0; set YYC=396.0
endif
if ( $LSC == 1 ) then
  set XXC=396.0; set YYC=306.0
endif
  if ( $LSC == 1 ) then
    echo "612 0 translate 90 rotate"
  endif
set JF=0
#set XXOFF=`fexp "$XXOFF-$XMIN"`
#set YYOFF=`fexp "$YYOFF-$YMIN"`
#foreach IY (`mloop 1 $NY 1 -1 1`)
foreach IY (`mloop $NY 1 -1 -1 1`)
foreach IX (`mloop 1 $NX 1 -1 1`)
  @ JF = $JF + 1
  if ( $JF <= $NF ) then
  set XX=`echo $IX $NX $XL | awk '{print ($1-1)*$3*'$SPREADX';}'`
  set YY=`echo $IY $NY $YL | awk '{print ($1-1)*$3*'$SPREADY';}'`
  set XX=`echo $XX $SC $XMIN | awk '{print $1-$2*$3;}'`
  set YY=`echo $YY $SC $YMIN | awk '{print $1-$2*$3;}'`
  set XX=`echo $XX $XXC $XL $NX | awk '{print $1+$2-0.5*$3*$4*'$SPREADX';}'`
  set YY=`echo $YY $YYC $YL $NY | awk '{print $1+$2-0.5*$3*$4*'$SPREADY';}'`
  set XX=`echo $XX $XXOFF | awk '{print $1+$2;}'`
  set YY=`echo $YY $YYOFF | awk '{print $1+$2;}'`
  set XXM=`fexp "0.0-$XX"`
  set YYM=`fexp "0.0-$YY"`
  echo "gsave"
#  echo "$XX $YY translate" > /dev/stderr
  echo "$XX $YY translate"
  echo " $SCC $SCC scale"
  echo "%  $JF"
  echo "% " $TTTY[$JF]
  if ( $TTTY[$JF] == 1 ) then
    tail +5 $PS[$JF] | awk '{ if( $1 == "showpage" ){ exit; } print; }'
  endif
  if ( $TTTY[$JF] == 2 ) then
    awk ' BEGIN { isin=0 } { \
      if( $1 == "%%BeginProlog" || $1 == "%%EndComments" || $1 == "%%EndPreview" ) isin=1; \
      if( isin == 1 && $1 != "showpage" ) print; \
    }' $PS[$JF]
  endif
  echo " $SCCI $SCCI scale"
  echo "$XXM $YYM translate"
  echo "grestore"
 endif # JF
end
end 

#.........  grid
if ( $GRID == 1 ) then
  echo "0.5 setlinewidth"
  echo 0 | awk '{for(i=50;i<751;i+=50){ printf "newpath 50 %d moveto 550 %d lineto stroke\n",i,i;}}'
  echo 0 | awk '{for(i=50;i<551;i+=50){ printf "newpath %d 50 moveto %d 750 lineto stroke\n",i,i;}}'
endif

#...... print text on top/bottom

echo "$PSFONT findfont $PSFONTSIZE scalefont setfont"

if ( $TOPLABEL != "none" ) then
  echo "306 740 moveto"
  set TEXT=`echo $TOPLABEL | sed 's/~/ /g'`
  echo "($TEXT) stringwidth pop -2 div 0 rmoveto"
  echo "($TEXT) show"
endif

if ( $BOTTOMLABEL != "none" ) then
  echo "306 50 moveto"
  set TEXT=`echo $BOTTOMLABEL | sed 's/~/ /g'`
  echo "($TEXT) stringwidth pop -2 div 0 rmoveto"
  echo "($TEXT) show"
endif

# echo "$0 txt1: $TXT1" > /dev/stderr

if ( "$TXT1" != "none" ) then
  set XX=`echo $TXT1 | awk -F':' '{print $1;}'`
  set YY=`echo $TXT1 | awk -F':' '{print $2;}'`
  set FN=`echo $TXT1 | awk -F':' '{print $3;}'`
  set FS=`echo $TXT1 | awk -F':' '{print $4;}'`
  set TT=`echo $TXT1 | awk -F':' '{print $5;}' | sed 's/~/ /g'`
  echo "$FN findfont $FS scalefont setfont"
  echo "$XX $YY moveto"
#  centered  echo "($TEXT) stringwidth pop -2 div 0 rmoveto"
  echo "($TT) show"
endif

if ( "$TXT2" != "none" ) then
  set XX=`echo $TXT2 | awk -F':' '{print $1;}'`
  set YY=`echo $TXT2 | awk -F':' '{print $2;}'`
  set FN=`echo $TXT2 | awk -F':' '{print $3;}'`
  set FS=`echo $TXT2 | awk -F':' '{print $4;}'`
  set TT=`echo $TXT2 | awk -F':' '{print $5;}' | sed 's/~/ /g'`
  echo "$FN findfont $FS scalefont setfont"
  echo "$XX $YY moveto"
#  centered  echo "($TEXT) stringwidth pop -2 div 0 rmoveto"
  echo "($TT) show"
endif

if ( "$TXT3" != "none" ) then
  set XX=`echo $TXT3 | awk -F':' '{print $1;}'`
  set YY=`echo $TXT3 | awk -F':' '{print $2;}'`
  set FN=`echo $TXT3 | awk -F':' '{print $3;}'`
  set FS=`echo $TXT3 | awk -F':' '{print $4;}'`
  set TT=`echo $TXT3 | awk -F':' '{print $5;}' | sed 's/~/ /g'`
  echo "$FN findfont $FS scalefont setfont"
  echo "$XX $YY moveto"
#  centered  echo "($TEXT) stringwidth pop -2 div 0 rmoveto"
  echo "($TT) show"
endif

if ( "$TXT4" != "none" ) then
  set XX=`echo $TXT4 | awk -F':' '{print $1;}'`
  set YY=`echo $TXT4 | awk -F':' '{print $2;}'`
  set FN=`echo $TXT4 | awk -F':' '{print $3;}'`
  set FS=`echo $TXT4 | awk -F':' '{print $4;}'`
  set TT=`echo $TXT4 | awk -F':' '{print $5;}' | sed 's/~/ /g'`
  echo "$FN findfont $FS scalefont setfont"
  echo "$XX $YY moveto"
#  centered  echo "($TEXT) stringwidth pop -2 div 0 rmoveto"
  echo "($TT) show"
endif

echo "showpage"
##echo "clear"



