function [a_fileset, index_list] = addFiles(a_fileset, file_pattern, props)

% addFiles - Adds to existing list of files in set.
%
% Usage:
% [a_fileset, index_list] = addFiles(a_fileset, file_pattern, props)
%
% Description:
%
% Parameters:
%	a_fileset: A params_tests_fileset object.
%	file_pattern: File pattern, or cell array of patterns, matching additional files.
%	props: A structure with any optional properties.
%	  param_row_filename: Update parameters from here. The 'trial' parameter is used
%			to address rows from this file and acquire parameters.
%
% Returns:
%	a_fileset: The augmented fileset object.
%	index_list: The vector of index numbers of the new files added. Can be used
%		to selectively load the new files into a DB using params_test_db.
%		
% See also: params_tests_fileset, params_tests_dataset/params_test_db.
%
% $Id$
%
% Author: Cengiz Gunay <cgunay@emory.edu>, 2006/02/01

% Copyright (c) 2007 Cengiz Gunay <cengique@users.sf.net>.
% This work is licensed under the Academic Free License ("AFL")
% v. 3.0. To view a copy of this license, please look at the COPYING
% file distributed with this software or visit
% http://opensource.org/licenses/afl-3.0.php.

if ~ exist('props', 'var')
  props = struct([]);
end

% First find all filenames matching the pattern

% Multiple patterns in cell array allowed
if iscell(file_pattern)
  num_patterns = length(file_pattern);
  
  % Separate filename components
  [obj.path, name, ext, ver] = fileparts(file_pattern{1});
else
  num_patterns = 1;
  
  % Separate filename components
  [obj.path, name, ext, ver] = fileparts(file_pattern);
end

% Loop over patterns (or do one pattern only)
total_entries = 0;
for pattern_num = 1:num_patterns
  if iscell(file_pattern)
    this_pattern = file_pattern{pattern_num};
  else
    this_pattern = file_pattern;
  end
  
  filestruct = dir(this_pattern);
  entries = size(filestruct, 1);
  [filenames{total_entries + (1:entries)}] = deal(filestruct(:).name);
  total_entries = total_entries + entries;
end

% Add to existing list
existing_list = get(a_fileset, 'list');
num_existing = length(existing_list);
a_fileset = set(a_fileset, 'list', { existing_list{:}, filenames{:}});
index_list = (num_existing + 1):(num_existing + length(filenames));

% Update the parameter values
if isfield(props, 'param_row_filename')
  param_rows = dlmread(props.param_row_filename);
  props.param_rows = param_rows(2:end, 1:param_rows(1, 2)); % strip off excess columns

  a_fileset = set(a_fileset, 'props', mergeStructs(props, get(a_fileset, 'props')));
end
