extcaller.m

来自「toolbox of BVQX, This is the access betw」· M 代码 · 共 75 行

M
75
字号
function fromwhere = extcaller(varargin)
% extcaller  - from where was a call issued
%
% FORMAT:       callername = extcaller
%
% See also DBSTACK

% Version:  v0.5c
% Build:    6120415
% Date:     Dec-04 2006, 3:15 PM CET
% Author:   Jochen Weber, Brain Innovation, B.V., Maastricht, NL
% URL/Info: http://wiki.brainvoyager.com/BVQXtools

% persistent versioning information
persistent ec_mlv;
if isempty(ec_mlv)
    ec_mlv = version;
    if ec_mlv(1) > '6'
        ec_mlv = 'file';
    else
        ec_mlv = 'name';
    end
end

% how to get stack info
switch (ec_mlv), case {'file'}
    pathstack = dbstack('-completenames');
case {'name'}
    pathstack = dbstack;
otherwise
    error( ...
        'BVQXtools:MemoryCorruption', ...
        'Interal variable glitch.' ...
    );
end

% set default caller name
fromwhere = 'CONSOLE_OR_GUI';
if length(pathstack) < 3
    return;
end

% input argument handling
if nargin < 1
    func = lower(pathstack(2).(ec_mlv));

elseif ischar(varargin{1})
    func = lower(varargin{1});

elseif isnumeric(varargin{1}) && ...
   ~isempty(varargin{1}) && ...
   ~isnan(varargin{1}(1))
    func = lower(pathstack(2).(ec_mlv));
    if varargin{1}(1) == 1
        func = fileparts(func);
    end

else
    error( ...
        'BVQXtools:BadArgument', ...
        'Unsupported input argument.' ...
    );
end

% try to find matching caller
for dbsi = 3:length(pathstack)
    if isempty(strfind(lower(pathstack(dbsi).(ec_mlv)), func))
        break;
    end
end
if dbsi < length(pathstack) || ...
    isempty(strfind(lower(pathstack(dbsi).(ec_mlv)), func))
    fromwhere = pathstack(dbsi).(ec_mlv);
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?