#!/bin/sh
#
# "fspace"	K. J. Turner	15/12/94
#
# This shell script takes one or more FrameMaker MIF (Maker Interchange
# Format) documents and replaces them with new versions having their line
# spacing changed:
#
#  -s number	e.g. 1.0 for single (default), 2.0 for double 
#
# The transformation is reversible, e.g. setting a spacing of 1.25 and later
# 0.8 returns the document to its original spacing. The spacing is adjusted by
# calculating a new leading as follows:
#
#  (font_size + old_leading) * scale_factor - font_size
#
# The result code is 0 if there are no errors, otherwise 1.

extframe=".framemif"
prog=`basename $0`
code=0
spacing="1"
files=""
tmpfile="/tmp/$prog$$"

if [ $# -eq 0 ]
  then
    echo "usage: $prog [-s spacing] file[$extframe] ..."
    code=1
  else
    while [ $# -gt 0 ]
      do
        case $1 in
	  -s)
	    spacing=$2; shift 2;;
	  -s*)
	    spacing="`expr $1 : '-s\(.*\)'`"; shift;;
	  -*)
	    echo "$prog: illegal option $1"
	    exit 1;;
	  *)
	    files="$files $1"; shift;;
        esac
      done
    
    for file in $files
      do
	name="`expr Z$file : Z'\(.*\)\'$extframe`"
	if [ "$name" = "" ]
	  then name=$file; infile="$name$extframe"
	  else infile=$file
	fi
	if [ -f $infile -a -r $infile ]
	  then
	      gawk '
	        BEGIN {
		  spacing = '$spacing';
		  if (spacing <= 0.0) {
		    print "'$prog': spacing must be positive" > "/dev/stderr"
		    exit 1;
		  }
		}
		/<FSize / {
		  fsize = $2;
		}
		/<PgfLeading / {
		  printf ("  %s %3.1f %s\n", $1,
		    (fsize + $2) * spacing - fsize, $3);
		  next;
		}
		{print;}
	      ' $infile > $tmpfile
	      mv $tmpfile $infile
	  else
	    echo "$prog: cannot read \"$infile\""
	    code=1
	fi
      done
fi

exit $code
