#
set CPP=/lib/cpp
set PARS=$BDIR/glassp
set TYPC=$BDIR/csf
set ME=$BDIR/glassme
set UNPARS=$BDIR/glassup
set PROG=stdin_
set SK = $BDIR/sk
if ("$?ECHO" == "0")  set ECHO = true 

# omit problems that can occur when having an alias for rm (eg rm = rm -i)
set RM=/bin/rm

# Some cpp implementations offer a Y flag to change the standard list directory
#   which is better then the I flag to change the search path
set YI=I 

if ("$1" != "")  then 
set PROG=`dirname $1`/`basename $1 .gl`
shift
else 
cat >! $PROG.gl
endif 

foreach i ($PROG $*)
set PROG=`dirname $i`/`basename $i .gl`

$ECHO glass: cpp...
if {($CPP -$YI$IDIR $PROG.gl  $PROG.gl.cpp)}   then 
else 
exit 1
endif

$ECHO glass: parsing...
if {($PARS $PROG.gl.cpp $PROG.gl.p)}     then
else 
$RM $PROG.gl.cpp
exit 2
endif

$RM $PROG.gl.cpp
$ECHO glass: checking types...

if {($TYPC <$PROG.gl.p >! $PROG.gl.typc)} then
$ECHO glass: expand...
else 
$RM $PROG.gl.p $PROG.gl.typc
exit 3
endif

$RM $PROG.gl.p

$ME $PROG.gl.typc $PROG.gl.me
set stat = $status
if ($stat == 1) then
   echo $stat
   echo glass: $PROG : fatal macro expander error
   exit  4
else if ($stat != 0) then
   $UNPARS $PROG.gl.me $PROG.gl.log
   echo glass: $PROG : macro expansion failed
   grep "\*\*\*" $PROG.gl.log
   echo glass: log file written to $PROG.gl.log
   $RM $PROG.gl.typc $PROG.gl.me
   exit  5
endif

$RM $PROG.gl.typc
$ECHO glass: size check...

$SK <$PROG.gl.me >! $PROG.sf 
if ($status == 0 ) then
   $RM $PROG.gl.me
else
   $UNPARS $PROG.gl.me $PROG.gl.log
   echo glass: $PROG : size check failed : see  $PROG.gl.log
   $RM $PROG.gl.me
   $RM $PROG.sf
   exit 6
endif

$ECHO glass: listing...
$UNPARS $PROG.sf $PROG.listing

end
exit 0
