function eqn =  equation(comp_type, name,cr,args,outbond,outcause,outport, ...
                         inbonds,incauses,inports)
  ## eqn is a string containing the equation
  ## 
  ## 
  ##     ###################################### 
  ##     ##### Model Transformation Tools #####
  ##     ######################################
  ## 
  ## Matlab function equations.m
  ## eqn =  equation(name,cr,args,outbond,outcause,outport, ...
  ##                              inbonds,incauses,inports)


  ## ############################################################### ## Version
  ## control history
  ## ############################################################### ## $Id:
  ## equation.m,v 1.6 2000/12/27 16:06:00 peterg Exp $ ## $Log:
  ## equation.m,v $ ## Revision 1.6  2000/12/27 16:06:00  peterg ## ***
  ## empty log message *** ## ## Revision 1.5  1996/12/05  11:26:51
  ## peterg ## Null strings now detected with strcmp not length. ## ##
  ## Revision 1.4  1996/09/12 16:42:01  peter ## Default now out side
  ## this function - need to be none for each ## component. ## ##
  ## Revision 1.3  1996/09/12 12:03:58  peter ## Added some error
  ## checking. ## If no constitutive relationship, only add diagonal
  ## elementts to ## default unity output. ## ## Revision 1.2
  ## 1996/09/10 11:29:47  peter ## Removed causality & port info when no
  ## constitutive relationship. ## ## Revision 1.1  1996/09/10 11:11:11peter
  ## ## Initial revision ##
  ## ###############################################################


  ## Find the number of inports
  nports = length(inbonds);

  ## Check some arguments
  if length(incauses) ~= nports
    error("equation.m: incauses inconsistent with inbonds");
  endif


  if length(inports) ~= nports
    error("equation.m: inports inconsistent with inbonds");
  endif


  ## Set up LHS
  LHS = varname(name, outbond, outcause);

  ## Set up various strings to get correct syntax if some strings are empty
  if strcmp(cr,"")
    cause_name = "";
    port_name = "";
    lp = "";
    rp = "";
    c_comma = "";
  else
    cause_name = cause2name(outcause);
    port_name = sprintf("%i", outport');
    lp = sprintf("(%s, ", comp_type); 
    rp = ")";
    c_comma = ",";
  end

  if strcmp(args,"")
    a_comma = "";
  else
    a_comma = ",";
  endif


  ## Set up first line of RHS
  RHS1 = sprintf("%s%s%s%s%s%s%s%s", ...
		 cr, lp, args, a_comma, cause_name, c_comma, port_name, c_comma);


  ## Set up rest of RHS - the input variables, causality and ports.
  RHS2 = "";
  for i=1:nports
    RHS2 = sprintf("%s\t%s", ...
		   RHS2, varname(name, inbonds(i), incauses(i)));
    
    if strcmp(cr,"")==0 # add the causality & port info
      RHS2 = sprintf("%s,%s,%i", ...
		     RHS2, cause2name(incauses(i)), inports(i));
      
    endif
    
    if (i<nports) # Add a comma
      RHS2 = sprintf("%s,",RHS2);
    else
      RHS2 = sprintf("%s",RHS2);

    endif

  endfor
  
  
  
  ## Set up equation
  eqn = sprintf("%s := %s%s%s;\n", LHS, RHS1, RHS2, rp);

endfunction
