Switch to side-by-side view

--- a
+++ b/functions/adminfunc/eeg_store.m
@@ -0,0 +1,178 @@
+% EEG_STORE - store specified EEG dataset(s) in the ALLEEG variable 
+%               containing all current datasets, after first checking 
+%               dataset consistency using EEG_CHECKSET.
+%
+% Usage: >> [ALLEEG EEG index] = eeg_store(ALLEEG, EEG);
+%        >> [ALLEEG EEG index] = eeg_store(ALLEEG, EEG, index);
+%
+% Inputs:
+%   ALLEEG     - variable containing all current EEGLAB datasets
+%   EEG        - dataset(s) to store - usually the current dataset. 
+%                May also be an array of datasets; these will be 
+%                checked and stored separately in ALLEEG.
+%   index      - (optional), ALLEEG index (or indices) to use to store 
+%                the new dataset(s). If no index is given, EEG_STORE 
+%                uses the lowest empty slot(s) in the ALLEEG array. 
+%                Use index of 0 for just loaded dataset.
+% Outputs:
+%   ALLEEG - array of all current datasets
+%   EEG    - EEG dataset (after syntax checking)
+%   index  - index of the new dataset
+%
+% Note: When 3 arguments are given, after checking the consistency of 
+%       the input dataset structures this function simply performs 
+%        >> ALLEEG(index) = EEG;
+%
+% Typical use:
+%        >> [ALLEEG EEG CURRENTSET] = eeg_store(ALLEEG, EEG);
+%  creates a new dataset in variable ALLEEG.
+%        >> [ALLEEG EEG CURRENTSET] = eeg_store(ALLEEG, EEG, CURRENTSET);
+%  overwrites the current dataset in variable ALLEEG.
+%
+% Author: Arnaud Delorme, CNL / Salk Institute, 2001
+%
+% See also: EEGLAB, EEG_CHECKSET, EEG_RETRIEVE
+
+% Copyright (C) 2001 Arnaud Delorme, Salk Institute, arno@salk.edu
+%
+% This file is part of EEGLAB, see http://www.eeglab.org
+% for the documentation and details.
+%
+% Redistribution and use in source and binary forms, with or without
+% modification, are permitted provided that the following conditions are met:
+%
+% 1. Redistributions of source code must retain the above copyright notice,
+% this list of conditions and the following disclaimer.
+%
+% 2. Redistributions in binary form must reproduce the above copyright notice,
+% this list of conditions and the following disclaimer in the documentation
+% and/or other materials provided with the distribution.
+%
+% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+% THE POSSIBILITY OF SUCH DAMAGE.
+
+% store set
+% ------------------
+function [ALLEEG, EEG, storeSetIndex] = eeg_store(ALLEEG, EEG, storeSetIndex, varargin)
+
+% check parameter consistency
+% ------------------------------
+if nargin >= 3
+    if length(EEG) ~= length(storeSetIndex) && storeSetIndex(1) ~= 0
+        error('Length of input dataset structure must equal the length of the index array');
+    end
+end
+
+% considering multiple datasets
+% -----------------------------
+if length(EEG) > 1
+	TMPEEG = EEG;
+    if nargin >= 3 && storeSetIndex(1) ~= 0
+        for index=1:length(TMPEEG)
+            EEG = TMPEEG(index);
+            tmpsaved      = EEG.saved;
+            if strcmpi(tmpsaved, 'justloaded'), tmpsaved = 'yes'; end
+            [ALLEEG, EEG] = eeg_store(ALLEEG, EEG, storeSetIndex(index), varargin{:});
+            ALLEEG(storeSetIndex(index)).saved = tmpsaved;
+            TMPEEG(index).saved                = tmpsaved;
+        end
+    else
+        for index=1:length(TMPEEG)
+            EEG = TMPEEG(index);
+            tmpsaved      = EEG.saved;
+            if strcmpi(tmpsaved, 'justloaded'), tmpsaved = 'yes'; end
+            [ALLEEG, EEG, storeSetIndex(index)] = eeg_store(ALLEEG, EEG);
+            ALLEEG(storeSetIndex(index)).saved = tmpsaved;
+            TMPEEG(index).saved                = tmpsaved;
+        end
+    end
+    EEG = TMPEEG;
+	return
+end
+
+if nargin < 3
+    % creating new dataset
+    % -> erasing file information
+    % ---------------------------
+    EEG.filename = '';
+    EEG.filepath = '';
+    EEG.datfile  = '';
+end
+
+if isempty(varargin) % no text output and no check (study loading)
+    [ EEG, com ]  = eeg_checkset(EEG);
+else
+    com = '';
+end
+if nargin > 2 
+    if storeSetIndex == 0 || strcmpi(EEG.saved, 'justloaded')
+        EEG.saved = 'yes'; % just loaded
+    else 
+        EEG.saved = 'no';
+    end
+elseif strcmpi(EEG.saved, 'justloaded')
+    EEG.saved = 'yes';        
+else
+    EEG.saved = 'no';        
+end
+EEG = eeg_hist(EEG, com);
+
+% find first free index
+% ---------------------
+findindex = 0;
+if nargin < 3,             findindex = 1;
+elseif storeSetIndex == 0, findindex = 1; 
+end
+
+if findindex
+	i = 1;
+	while (i<10000)
+		try
+			if isempty(ALLEEG(i).data)
+				storeSetIndex = i; i = 10000;
+			end
+			i = i+1;	
+		catch
+			storeSetIndex = i; i = 10000;
+		end
+   end
+   if isempty(varargin) % no text output and no check
+       fprintf('Creating a new ALLEEG dataset %d\n', storeSetIndex);
+   end
+else
+	if isempty(storeSetIndex) || storeSetIndex == 0
+		storeSetIndex = 1;
+	end
+end
+
+if ~isempty( ALLEEG )
+	try
+		ALLEEG(storeSetIndex) = EEG;
+	catch
+		allfields = fieldnames( EEG );
+		for i=1:length( allfields )
+			ALLEEG(storeSetIndex).(allfields{i}) = EEG.(allfields{i});
+        end
+        if ~isfield(EEG, 'datfile') && isfield(ALLEEG, 'datfile')
+            ALLEEG(storeSetIndex).datfile = '';
+        end
+        EEG = ALLEEG(storeSetIndex); % ensure equality between the two
+	end
+else	
+	ALLEEG = EEG;
+	if storeSetIndex ~= 1
+		ALLEEG(storeSetIndex+1) = EEG;
+		ALLEEG(1) = ALLEEG(storeSetIndex); % empty
+ 		ALLEEG(storeSetIndex) = ALLEEG(storeSetIndex+1); 
+ 		ALLEEG = ALLEEG(1:storeSetIndex);
+    end	
+end