Switch to side-by-side view

--- a
+++ b/functions/adminfunc/plugin_status.m
@@ -0,0 +1,92 @@
+% PLUGIN_STATUS- Given the name of a plugin(or part of it), returns 
+%                  the status (e.g. [0]not installed, [1]installed)                                                               
+%  Inputs:
+%         pluginname   - {string} Name (or part of it) of plugin of interest
+%
+% Optional inputs:
+%        exactmatch  - [0,1] Force the function to look for an exact match of
+%                       the name provided in the input 'pluginname' 
+%                       {default: 0 = not exact match enforced}
+%  Outputs:
+%        
+%        status         - [Vector 1xnumber of plugins]. 0 = Not installed,
+%                         1 = Installed
+%       pluginnameout   - Name of the plugins in 'status'.
+%       pluginstruct    - If the plugin(s) in 'pluginname' is installed, the function
+%                         provide here a cell (one cell per plugin in 'status') array 
+%                         of structures with the following fields:
+%                         {plugin, version, foldername, funcname, status} 
+% 
+% Author: Ramon Martinez-Cancino SCCN, 2018
+%         
+% Copyright (C) 2018  Ramon Martinez-Cancino,INC, SCCN
+%
+% 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[status, pluginnameout, pluginstruct] = plugin_status(pluginname, varargin)
+status = []; pluginstruct = []; pluginnameout = [];
+
+try
+    options = varargin;
+    if ~isempty( varargin )
+        for i = 1:2:numel(options)
+            g.(options{i}) = options{i+1};
+        end
+    else
+        g = [];
+    end
+catch
+    disp('plugin_status() error: calling convention {''key'', value, ... } error'); return;
+end
+
+try g.exactmatch;   catch, g.exactmatch  = 0;  end % Enforces exact match with the name provided
+
+% Look in the plugin list for the plugin name provided
+global PLUGINLIST
+if ~isempty(PLUGINLIST)
+    if g.exactmatch
+        hitindx = find(strcmp(pluginname,{PLUGINLIST.plugin}));
+        pluginnameout = pluginname;
+    else
+        hitindx = find(~cellfun(@isempty,strfind(lower({PLUGINLIST.plugin}),lower(pluginname))));
+    end
+    
+    if isempty(hitindx)
+        status = 0;
+        return;
+    else
+        pluginstatus = {PLUGINLIST(hitindx).status};
+        for i =1:length(pluginstatus)
+            if strcmp(pluginstatus{i}, 'ok')
+                status(i) = 1;
+            else
+                status(i) = 0;
+            end
+        end
+        pluginnameout = {PLUGINLIST(hitindx).plugin};
+        pluginstruct = PLUGINLIST(hitindx);
+    end
+end