#! /bin/sh

     ###################################### 
     ##### Model Transformation Tools #####
     ######################################

# Bourne shell script: rbg2abg_m
#
###############################################################
## Version control history
###############################################################
## $Id$
## $Log$
## Revision 1.14  2000/09/14 08:41:35  peterg
## Strip off the additional direction info from rbonds
##
## Revision 1.13  2000/03/16 12:53:26  peterg
## Added copy of the %VAR declarations
## Put in the endfunction statement
##
## Revision 1.12  1998/07/28 19:07:48  peterg
## Writes out N_ports as well as n_ports
##
## Revision 1.11  1998/07/25 16:14:44  peterg
## *** empty log message ***
##
## Revision 1.10  1998/07/08 15:34:56  peterg
## Sorted out error exit status
##
## Revision 1.9  1998/07/08 08:24:26  peterg
## Added -I option -- if set prints out the indormation messages
##
## Revision 1.8  1998/02/19 08:57:02  peterg
## Fixed mtt-info bug -- confused filename with number
##
## Revision 1.7  1997/08/05 08:38:23  peterg
## Added n-ports to the argument list in the comment.
##
## Revision 1.6  1996/12/04 21:52:01  peterg
## Uses filenum and fopen instead of filename.
##
## Revision 1.5  1996/08/25 09:20:32  peter
## General error handling.
##
## Revision 1.4  1996/08/24 17:57:41  peter
## Removed `touch mtt_info.txt'
##
## Revision 1.3  1996/08/24 14:58:56  peter
## Fixed missprint - mtt_err --> mtt_error
##
## Revision 1.2  1996/08/24 14:33:07  peter
## Error handling included.
##
## Revision 1.1  1996/08/05 12:22:16  peter
## Initial revision
##
###############################################################

# Raw bond graph to structured acausal bond graph: mfile format
# The structured BG is described by four matrices:
#   junctions: describes the junctions -
#     Column 1   Index of component (see components)
#     Column 2.. Indices of bonds on junction (see jbonds)
#                  rows may be padded with zeros
#
#   jbonds:    describes the true bonds -
#     Column 1     Index of component (see components)
#     Column 2     Direction
#                    1 away from junction
#                   -1 towards junction
#     Column 3     Causality 
#                     1 stroke at arrow end
#                    -1 stroke at other end
#                     0 no stroke (ie acausal)
#     Columns 4:5  x,y coordinates of non-arrow end (in Fig)
#     Columns 6:7  x,y coordinates of arrow end (in Fig)
#
#   mbonds:    describes the modulation bonds -
#     Column 1     Index of component at non-arrow end
#     Column 2     Index of component at arrow end
#     Columns 4:5  x,y coordinates of non-arrow end (in Fig)
#     Columns 6:7  x,y coordinates of arrow end (in Fig)
#
#   components: describes the comonents -
#     Column 1     Type of component
#                    0  0-junction
#                    1  1-junction
#                    2  R component
#                    3  C component
#                    4  I component
#                    11 TF component
#                    12 GY component
#                    13 A  component
#     Column 2     Flag for explicit junction
#                    4  Explicit component (4 means text type)
#                    0  Implicit component
#     Column 3-14    fig file information (see fig documentation)
#
# P.J.Gawthrop May 1996
# Copyright (c) P.J.Gawthrop, 1996.

while [ -n "`echo $1 | grep '^-'`" ]; do
  case $1 in
	-I )
                info=info;;
	*)
		echo "$1 is an invalid argument - ignoring" ;;
  esac
  shift
done



# Remove the old log file
rm -f rbg2abg_m.log
rm -f $1_abg.m

#Inform user
echo Creating $1_abg.m

# Use matrix manipulation to accomplish the transformation
$MATRIX > rbg2abg_m.log  2>mtt_error.txt << EOF
  name = '$1'
  infofile = fopen('mtt_info.txt', 'w');
  errorfile = fopen('mtt_error.txt', 'w');

  %Convert from the fig version of the bonds to a structured version
  [rbonds,rstrokes,rcomponents,port_coord,port_name,port_list] = $1_rbg;
  [n_ports, junk] = size(port_list);
 
  N_ports = 0;
  for i=1:n_ports		# Count the true number of ports.
    [subport,n_sub] = split_port(port_list(i,:), ',');
    N_ports = N_ports+n_sub;
  end;
 
 
  rbonds = rbonds(:,1:6);  # Strip  the directional information
  [bonds,components,n_vector_bonds] = rbg2abg(name,rbonds,rstrokes,rcomponents,port_coord,port_name,\
                               infofile,errorfile);

  %Write the function m-file for the causal bond graph
  write_abg(name,bonds,components,n_vector_bonds);    

#  filename = '$1_abg.m';
#  filenum = fopen(filename,'w');
#  c = '%';
#  fprintf(filenum, 'function [bonds,components,n_ports,N_ports] = $1_abg\n');
#  fprintf(filenum, '%s [bonds,components,n_ports] = $1_abg\n', c);
#  fprintf(filenum, '%s Acausal bond graph created by MTT on %s\n\n', ...
#                     c, date);
#  mat2mfile(bonds, 'bonds', filenum);
#  mat2mfile(components, 'components', filenum);
#  fprintf(filenum, 'n_ports = %1.0f;\n', n_ports);
#  fprintf(filenum, 'N_ports = %1.0f;\n', N_ports);

EOF

# Append any VAR declarations
if [ -f "$1_lbl.txt" ]; then
  echo "# Explicit variable declarations" >> $1_abg.m
  grep '^[\s]*[%|#][V|P]AR' $1_lbl.txt | tr '%' '#' >> $1_abg.m    
  grep '^[\s]*[%|#]NOT[V|P]AR' $1_lbl.txt | tr '%' '#' >> $1_abg.m    
fi

## Close off the function
echo "endfunction" >> $1_abg.m

## Errors and info
if [ "$info" = "info" ]; then
  cat mtt_info.txt    
fi

if mtt_error mtt_error.txt
then
    exit 0
else
    exit 1
fi






