--- a
+++ b/functions/adminfunc/eegh.m
@@ -0,0 +1,148 @@
+% EEGH - history function.           
+%
+% Usage:
+%   >> eegh( arg );
+%   >> eegh( arg1, arg2 );
+%
+% Inputs:
+%   - With no argument, it return the command history.
+%   - arg is a string:   with a string argument it pulls the command 
+%                        onto the stack.
+%   - arg is a number>0: execute the element in the stack at the 
+%                        required position.
+%   - arg is a number<0: unstack the required number of elements
+%   - arg is 0         : clear stack
+%   - arg1 is 'find' and arg2 is a string, try to find the closest command
+%     in the stack containing the string
+%   - arg1 is a string and arg2 is a structure, also add the history to
+%     the structure in filed 'history'.
+%
+% Global variables used:
+%   LASTCOM   - last command
+%   ALLCOM    - all the commands   
+%
+% Author: Arnaud Delorme, SCCN/INC/UCSD, 2001
+%
+% See also:
+%  EEGLAB (a graphical interface for eeg plotting, space frequency
+%  decomposition, ICA, ... under Matlab for which this command
+%  was designed).
+
+% Copyright (C) 2001 Arnaud Delorme, SCCN/INC/UCSD, 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.
+
+% To increase/decrease the maximum depth of the stack, edit the eeg_consts file
+ 
+function str = eegh( command, str )
+
+mode = 1; % mode = 1, full print, mode = 0, truncated print
+
+global ALLCOM;
+
+%if nargin == 2
+%    fprintf('2: %s\n', command);
+%elseif nargin == 1
+%    fprintf('1: %s\n', command);
+%end
+
+if nargin < 1
+	if isempty(ALLCOM)
+		fprintf('No history\n');
+	else	
+        for index = 1:length(ALLCOM)
+            if mode == 0, txt = ALLCOM{ index }; fprintf('%d: ', index);
+            else          txt = ALLCOM{ length(ALLCOM)-index+1 };
+            end
+            if (length(txt) > 72) && (mode == 0)
+                fprintf('%s...\n', txt(1:70) );
+            else
+                fprintf('%s\n', txt );
+            end
+        end
+    end
+    if nargout > 0
+        str = strvcat(ALLCOM);
+    end
+elseif nargin == 1
+	if isempty( command )
+		return;
+	end
+	if ischar( command ) || ( exist('isstring', 'builtin') && isstring( command ) )
+        command = char(command);
+        if ~isempty(ALLCOM) && isequal(ALLCOM{1}, command), return; end
+		if isempty(ALLCOM)
+			ALLCOM = { command };
+		else	
+			ALLCOM = { command ALLCOM{:}};
+        end
+        global LASTCOM;
+		LASTCOM  = command;
+	else	
+		if command == 0
+			ALLCOM = [];
+		else if command < 0
+				ALLCOM = ALLCOM( -command+1:end ); % unstack elements
+			else
+				txt = ALLCOM{command};
+				if length(txt) > 72
+					fprintf('%s...\n', txt(1:70) );
+				else
+					fprintf('%s\n', txt );
+                end			
+				evalin( 'base', ALLCOM{command} ); % execute element
+				eegh( ALLCOM{command} );    % add to history
+			end
+        end
+    end
+else % nargin == 2
+    if ~isstruct(str)
+        if strcmp(command, 'find')
+            for index = 1:length(ALLCOM)
+                if ~isempty(findstr(ALLCOM{index}, str))
+                    str = ALLCOM{index};  
+                    return;
+                end
+            end
+            str = [];
+        end
+    else
+        % warning also some code present in eeg_store and pop_newset
+        if ~isempty(ALLCOM) && isequal(ALLCOM{1}, command), return; end
+        eegh(command); % add to history
+        if ~isempty(command)
+            if length(str) == 1
+                str = eeg_hist(str, command);
+            else
+                for i = 1:length(str)
+                    str(i) = eeg_hist(str(i), [ '% multiple datasets command: ' command ]);
+                end
+            end
+        end
+    end
+end
+
+