function write_abg(system_name,bonds,connections);
###############################################################
## Version control history
###############################################################
## $Id$
## $Log$
## Revision 1.4 1998/08/26 12:45:38 peterg
## Just prefix ports (comps can't start with numeral)
## Prefix with mttp
##
## Revision 1.3 1998/08/26 12:31:07 peterg
## numerical names prefixed by mtt
##
## Revision 1.2 1998/08/26 11:59:20 peterg
## Don't use strrep to remove[]
##
## Revision 1.1 1998/08/25 06:22:02 peterg
## Initial revision
##
###############################################################
fid=fopen([system_name,"_abg.m"], "w");
[N,M]=size(connections);
Sformat = " %s.subsystems.%s.%s = \"%s\";\n";
PSformat = " %s.ports.%s.%s = \"%s\";\n";
Iformat = " %s.subsystems.%s.%s = %i;\n";
PIformat = " %s.ports.%s.%s = %i;\n";
Cformat = " %s.subsystems.%s.connections = [";
PCformat = " %s.ports.%s.connections = [";
Bformat = " %s.bonds = [\n";
fprintf(fid,"function [%s] = %s_abg\n", system_name, system_name);
fprintf(fid,"# This function is the acausal bond graph representation of %s\n",system_name);
fprintf(fid,"# Generated by MTT on %s",ctime(time));
fprintf(fid,"# The file is in Octave format\n");
fprintf(fid,"\n# Subsystems and Ports\n");
i_port=0; SubsystemList = ""; PortList ="";
for i=1:N
eval(["[comp_type, name, cr, arg, repetitions] = ", system_name, "_cmp(i);"]);
if index(name,"[")==0 # Not a port
SubsystemList = [SubsystemList; name];
fprintf(fid,"\n# Component %s\n", name);
fprintf(fid,Sformat,system_name,name,"type",comp_type);
fprintf(fid,Sformat,system_name,name,"cr",cr);
fprintf(fid,Sformat,system_name,name,"arg",arg);
fprintf(fid,Iformat,system_name,name,"repetitions",repetitions);
c = nozeros(connections(i,:));# Connections to this component
m = length(c); # Number of connections
fprintf(fid,Cformat,system_name,name);
for j=1:m
fprintf(fid,"%i ", c(j));
endfor;
fprintf(fid,"];\n");
else
name=name(2:length(name)-1); # Strip []
ch=name(1); # First char of name
if (ch>="0")&&(ch<="9") # Its a numeral
name=["mttp",name]; # prefix by mttp
endif;
PortList = [PortList; name];
fprintf(fid,"\n# Port %s\n", name);
fprintf(fid,PIformat,system_name,name,"index",++i_port);
fprintf(fid,PSformat,system_name,name,"type",comp_type);
fprintf(fid,PSformat,system_name,name,"cr",cr);
fprintf(fid,PSformat,system_name,name,"arg",arg);
fprintf(fid,PIformat,system_name,name,"repetitions",repetitions);
c = nozeros(connections(i,:));# Connections to this component
m = length(c); # Number of connections
fprintf(fid,PCformat,system_name,name);
for j=1:m
fprintf(fid,"%i ", c(j));
endfor;
fprintf(fid,"];\n");
endif;
endfor;
[N,M]=size(PortList);
if N>0 # Put name in list
fprintf(fid,"\n# Ordered list of Port names\n");
for i=1:N
fprintf(fid," %s.portlist(%i,:) = \"%s\";\n", system_name, i, PortList(i,:));
endfor;
endif;
[N,M]=size(SubsystemList);
if N>0 # Put name in list
fprintf(fid,"\n# Ordered list of subsystem names\n");
for i=1:N
fprintf(fid," %s.subsystemlist(%i,:) = \"%s\";\n", system_name, i, SubsystemList(i,:));
endfor;
endif;
fprintf(fid,"\n# Bonds \n");
[N,M]=size(bonds); # Bonds
fprintf(fid,Bformat,system_name);
for i=1:N
fprintf(fid," ");
for j=1:M
fprintf(fid,"%i ", bonds(i,j));
endfor;
fprintf(fid,"\n");
endfor;
fprintf(fid," ];\n");
fprintf(fid,"\n# Aliases \n");
fprintf(fid,"# A double underscore __ represents a comma \n");
eval(["alias = ", system_name, "_alias;"]);
if is_struct(alias)
for [val,key] = alias
fprintf(fid,"%s.alias.%s = \"%s\";\n", system_name,key,val);
endfor
endif
fclose(fid);