#!/bin/csh
# a f2c-script adapted for scilab interfaces 
# must be in a routines/subdir to make it work 
# some work remains to be done in the 
# generated C-file 
# Copyright Enpc
# Jean-Philippe Chancelier 
#-------------------------------------------------
set name=$1:r
sed -e "s+..\/stack.h+../f2c/bin/f2c-stack.h+g"  \
    -e "s/^[ ]*iadr(l)=l+l-1/c     iadr(l)=l+l-1/g" \
    -e "s/^[ ]*sadr(l)=/c     sadr(l)=/g" \
    -e "s/^[ ]*if(\.not\.checkrhs\([a-zA-Z0-9, +-\*\._() &]*\))[ ]*return/C CheckRhs\1/g" \
    -e "s/^[ ]*if(\.not\.checklhs\([a-zA-Z0-9, +-\*\._() &]*\))[ ]*return/C CheckLhs\1/g" \
    -e "s/if(\.not\.createvar\([a-zA-Z0-9,\' +-\*\._() &]*\))[ ]*return/call CreateVarH\1/g" \
    -e "s/if(\.not\.createcvar\([a-zA-Z0-9,\' +-\*\._() &]*\))[ ]*return/call CreateCVarH\1/g" \
    -e "s/if(\.not\.getrhsvar\([a-zA-Z0-9,\' +-\*\._() &]*\))[ ]*return/call GetRhsVarH\1/g" \
    -e "s/if(\.not\.getrhscvar\([a-zA-Z0-9,\' +-\*\._() &]*\))[ ]*return/call GetRhsCVarH\1/g" \
    -e "s/^[ ]*cadr(l)=/c     cadr(l)=/g" $name.f >! $name-n.f 
echo "First step"
../../bin/f2c -A -P  $name-n.f
sed -e "s/9963/csiz/g" \
    -e "s/994096/bsiz/g" \
    -e "s/991200/isizt/g" \
    -e "s/99256/psiz/g" \
    -e "s/996/nsiz/g" \
    -e "s/9916384/lsiz/g" \
    -e "s/8884/four/g" \
    -e "s/7772/vsiz/g" \
    -e "s/66620/maxdb/g" \
    -e "s/666100/maxbpt/g" \
    -e "s/555600/intersiz/g" \
    -e "s/bsizL/bsiz/g" \
    -e "s/com_1.rhs/Rhs/g" \
    -e "s/com_1.fin/Fin/g" \
    -e "s/com_1.lhs/Lhs/g" \
    -e "s/vstk_1.bot/Bot/g" \
    -e "s/vstk_1.top/Top/g" \
    -e 's+/\* CheckRhs(fname,\([a-zA-Z0-9, +-\*\._() &]*\)[ ]*\*/+CheckRhs(\1;+g' \
    -e 's+/\* CheckLhs(fname,\([a-zA-Z0-9, +-\*\._() &]*\)[ ]*\*/+CheckLhs(\1;+g' \
    -e 's/createvarh_\([a-zA-Z0-9,\" +-\*\._() &]*\), 1L);/CreateVar\1);/g' \
    -e 's/createcvarh_\([a-zA-Z0-9,\" +-\*\._() &]*\), 1L);/CreateCVar\1);/g' \
    -e 's/getrhsvarh_\([a-zA-Z0-9,\" +-\*\._() &]*\), 1L);/GetRhsVar\1);/g' \
    -e 's/getrhscvarh_\([a-zA-Z0-9,\" +-\*\._() &]*\), 1L);/GetRhsCVar\1);/g' \
    -e 's/sstk\[\([a-zA-Z0-9 +-\*\._() &]*\)\]/*sstk(\1 +1)/g' \
    -e 's/vstk_1.lstk\[\([a-zA-Z0-9 +-\*\._() &]*\)\]/*lstk(\1 +1)/g' \
    -e 's/recu_1.pstk\[\([a-zA-Z0-9 +-\*\._() &]*\)\]/*pstk(\1 +1)/g' \
    -e 's/vstk_1.infstk\[\([a-zA-Z0-9 +-\*\._() &]*\)\]/*infstk(\1 +1)/g' \
    -e 's/stack_1.stk\[\([a-zA-Z0-9 +-\*\._() &]*\)\]/*stk(\1 +1)/g' \
    -e 's/istk\[\([a-zA-Z0-9 +-\*\._() &]*\)\]/*istk(\1 +1)/g' \
    -e 's/cstk\[\([a-zA-Z0-9 +-\*\._() &]*\)\]/*cstk(\1 +1)/g' \
    -e 's/zstk\[\([a-zA-Z0-9 +-\*\._() &]*\)\]/*zstk(\1 +1)/g' \
    -e 's/\*zstk(\([a-zA-Z0-9 +-\._() &]*\))\.r/(*zstk(\1)).r/g' \
    -e 's/\*zstk(\([a-zA-Z0-9 +-\._() &]*\))\.i/(*zstk(\1)).i/g' \
    -e "s/sadr_(&/sadr(/g" \
    -e "s/iadr_(&/iadr(/g" \
    -e "s/cadr_(&/cadr(*/g" \
    -e "s/sadr_(/sadr(*/g" \
    -e "s/iadr_(/iadr(*/g" \
    -e "s/cadr_(/cadr(*/g" \
    -e "s/doublereal/double/g" \
    -e "s/real/float/g" \
    -e "s/logical/int/g" \
    -e "s/min/Min/g" \
    -e "s/max/Max/g" \
    -e "s/iop_1.err/Err/g" \
    -e "s/ici__1/ici1/g" \
    -e "s/\([a-zA-Z_0-9]*\)__/\1x/g" \
    -e "s/\([a-zA-Z_0-9]*\)_1\./C2F(\1)./g" \
    -e "s/\([a-zA-Z_0-9]*\)_(/C2F(\1)(/g" \
    -e "s/cstk + (\([a-zA-Z_0-9]*\) - 1)/cstk(\1)/g" \
    -e "s/- 1 +1)/)/g" \
    -e "s/&\*//g" \
    -e "s/ftnlen/unsigned long/g" \
$name-n.c | egrep -v "#define|#undef|^    extern |include"  >! $name-n1.c
sed -e "s/CreateVar(&cx/CreateVar(/g" \
    -e "s/CreateVar(&/CreateVar(/g" \
    -e "s/CreateCVar(&cx/CreateCVar(/g" \
    -e "s/CreateCVar(&/CreateCVar(/g" \
    -e "s/GetRhsVar(&cx/GetRhsVar(/g" \
    -e "s/GetRhsVar(&/GetRhsVar(/g" \
    -e "s/GetRhsCVar(&cx/GetRhsCVar(/g" \
    -e "s/GetRhsCVar(&/GetRhsCVar(/g" \
    -e 's/C2F(intersci).lhsvar\[\([a-zA-Z0-9 +-\*\._() &]*\)\]/LhsVar(\1+1)/g' \
    -e 's/\*stk[ ]*(C2F[ ]*(vstk).leps[ ]*)/Leps_sci/g' \
    -e 's/(0+1)/(1)/g' \
    -e 's/(1+1)/(2)/g' \
    -e 's/(2+1)/(3)/g' \
    -e 's/(3+1)/(4)/g' \
    -e 's/(4+1)/(5)/g' \
    -e 's/(5+1)/(6)/g' \
    -e 's/(6+1)/(7)/g' \
    -e 's/(7+1)/(8)/g' \
    -e 's/(8+1)/(9)/g' \
    -e 's/(9+1)/(10)/g' \
    -e 's/C2F(error)(&cx/Error(/g' \
    -e 's/C2F(error)(&/Error(/g' \
    -e 's+/\* Subroutine \*/++g' \
    -e 's+/\* System generated locals \*/++g' \
    -e 's+/\* Local variables \*/++g' \
 $name-n1.c >! $name-n2.c
# we add include file 
echo '#include "'$name.h'"' >! $name-n.T
# we remove the declaration for commons 
# gawk '/\/\* Table of constant values \*\//,/poo/' $name-n2.c >! $name-n3.c
gawk '/} intersci_;/,/poo/' $name-n2.c >! $name-n3.c
cat ../f2c/bin/f2c-script.head $name-n.T $name-n3.c | sed -e "s/} intersci_;//g"  >! $name.c 
sed -e "s/\([a-zA-Z_0-9]*\)_(/C2F(\1)  _PARAMS((/g" \
    -e "s/doublereal/double/g" \
    -e "s/ftnlen/unsigned long/g" \
    -e "s/logical/int/g" \
    -e "s/);/));/g" \
$name-n.P >! $name.h
\rm -f $name-n*





