--- a
+++ b/functions/adminfunc/getkeyval.m
@@ -0,0 +1,146 @@
+% GETKEYVAL - get variable value from a 'key', 'val' sequence string.
+%
+% Usage:
+%   >> val = getkeyval( keyvalstr, varname, mode, defaultval);   
+%     
+% Inputs:            
+%   keyvalstr  - string containing 'key', 'val' arguments
+%   varname    - string for the name of the variable or index
+%                of the value to retrieve (assuming arguments are
+%                separated by comas).
+%   mode       - if the value extracted is an integer array, the
+%                'mode' variable can contain a subset of indexes to return.
+%                If mode is 'present', then either 0 or 1 is returned
+%                depending on whether the variable is present.
+%   defaultval - default value if the variable is not found
+%
+% Outputs:
+%   val  - a value for the variable
+%
+% Note: this function is helpful for finding arguments in string commands
+%       stored in command history.
+%
+% Author: Arnaud Delorme, CNL / Salk Institute, 29 July 2002
+%
+% See also: GETHELPVAR
+
+% Copyright (C) 2002 arno@salk.edu, Arnaud Delorme, CNL / Salk Institute
+%
+% 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.
+
+function txt = getkeyval(lastcom, var, mode, default)
+    % mode can be present for 0 and 1 if the variable is present
+	if nargin < 1
+        help getkeyval;
+        return;
+    end
+    if nargin < 4
+		default = '';
+	end
+	if isempty(lastcom)
+		txt = default; return;
+	end
+	if nargin < 3
+		mode = '';
+	end
+	if ischar(mode) && strcmp(mode, 'present')
+		if ~isempty(findstr(var, lastcom))
+			txt = 1; return;
+		else
+			txt = 0; return;
+		end
+	end
+	if isnumeric(var)
+		comas = findstr(lastcom, ',');
+		if length(comas) >= var
+			txt = lastcom(comas(var-1)+1:comas(var)-1);
+            tmpval = eval( txt );
+            if isempty(tmpval), txt = '';
+            else txt = vararg2str( tmpval );
+            end
+            return;
+            
+% 			txt = deblank(txt(end:-1:1));
+% 			txt = deblank(txt(end:-1:1));
+%             
+% 			if ~isempty(txt) & txt(end) == '}', txt = txt(2:end-1); end
+% 			if ~isempty(txt)
+% 				txt = deblank(txt(end:-1:1));
+% 				txt = deblank(txt(end:-1:1));
+% 			end
+% 			if ~isempty(txt) & txt(end) == ']', txt = txt(2:end-1); end
+% 			if ~isempty(txt)
+% 				txt = deblank(txt(end:-1:1));
+% 				txt = deblank(txt(end:-1:1));
+% 			end
+% 			if ~isempty(txt) & txt(end) == '''', txt = txt(2:end-1); end
+		else
+			txt = default;
+		end
+		%fprintf('%s:%s\n', var, txt);		
+		return;
+	else
+		comas  = findstr(lastcom, ','); % finding all comas
+		comas  = [ comas  findstr(lastcom, ');') ]; % and end of lines
+		varloc = findstr(lastcom, var);
+		if ~isempty(varloc)
+			% finding comas surrounding 'val' var in 'key', 'val' sequence
+			comas = comas(find(comas >varloc(end)));
+			txt = lastcom(comas(1)+1:comas(2)-1); 
+			txt = deblank(txt(end:-1:1));
+			txt = deblank(txt(end:-1:1));
+			if strcmp(mode, 'full')
+				parent = findstr(lastcom, '}');
+				if ~isempty(parent)
+					comas = comas(find(comas >parent(1)));
+					txt = lastcom(comas(1)+1:comas(2)-1);
+				end
+				txt = [ '''' var ''', ' txt ];	
+			elseif isnumeric(mode)
+				txt = str2num(txt);
+				if ~isempty(mode)
+					if length(txt) >= max(mode)
+						if all(isnan(txt(mode))), txt = '';
+						else txt = num2str(txt(mode));
+						end;	
+					elseif length(txt) >= mode(1)
+						if all(isnan(txt(mode(1)))), txt = '';
+						else txt = num2str(txt(mode(1)));
+						end
+					else 
+						txt = default;
+					end
+				else
+                    txt = num2str(txt);
+				end
+            elseif txt(1) == ''''
+                txt = txt(2:end-1); % remove quotes for text
+			end
+		else
+			txt = default;
+		end
+	end
+	%fprintf('%s:%s\n', var, txt);