function args_out = subs_arg(args,Args, ...
    default,full_name,comp_type,comp_name,fileID)
% subs_arg - substitutes arguments into args from Args
% FS defaults to `;'.
% 
%     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%     %%%%% Model Transformation Tools %%%%%
%     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
% Matlab function  subs_arg.m
% args_out = subs_arg(args,Args,default,comp_type,comp_name,infofile)
% Copyright (c) P.J. Gawthrop, 1996.


% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% $Id$
% %% $Log$
% %% Revision 1.7  2001/07/03 22:59:10  gawthrop
% %% Fixed problems with argument passing for CRs
% %%
% %% Revision 1.6  1998/07/27 09:53:44  peterg
% %% No change
% %%
% %% Revision 1.5  1998/07/21 16:43:26  peterg
% %% Now writes to an explicit fileID - otherwise we may run out of IDs.
% %%
% %% Revision 1.4  1996/12/10 16:04:11  peterg
% %% Changed file handling on mtt_info.
% %%
% %% Revision 1.3  1996/12/07  18:19:39  peterg
% %% Replaces null argument by a default and tells user.
% %%
% %% Revision 1.2  1996/12/04 21:47:41  peterg
% %% Skips main loop when arg is null.
% %%
% %% Revision 1.1  1996/12/04 21:46:52  peterg
% %% Initial revision
% %%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Symbolic argument sign
S = '$';

args_out = '';
if strcmp(args,'')==0
  L = length(args);
  args_count = 1;
  num_count=0;
  while args_count <= L
    ch = str2ch(args,args_count);
    if ch~=S % copy character
      args_out = [args_out, ch];
      args_count = args_count+1;
    else % find argument number
      args_count = args_count+1;
 	
      ch = str2ch(args,args_count);    
      ## Modification for $p1 $a1 etc
      if !((ch>='0') & (ch<='9')) # It's not numerical - so loose it
	args_count = args_count+1;
	ch = str2ch(args,args_count);    
      endif

     i=0;
      while (ch>='0') & (ch<='9')
	i = 10*i + abs(ch)-abs('0');
	if args_count==L
	  args_count = args_count+1;
	  break
	end;
	args_count = args_count+1;
	ch = str2ch(args,args_count);
      end;
      arg_out = args2arg(Args,i);


      % Test for empty argument -- replace by default and tell user
      message = 'Argument %1.0f of component %s(%s) of system %s is undefined - \n replacing by %s';
      if strcmp(arg_out,'')
	info = sprintf(message, ...
	    i, comp_name, comp_type, full_name, default);
	arg_out = default;
      else
	info = sprintf("Replacing $%i \t by %s for component %s (%s) ...
	within %s", i, arg_out, comp_name, comp_type, full_name);
      end;
      mtt_info(info,fileID);
      args_out = [args_out, arg_out];
    end;
  end;
end;
