eidors_msg

PURPOSE ^

EIDORS_MSG: eidors progress and status messages

SYNOPSIS ^

function log_level= eidors_msg( message, varargin )

DESCRIPTION ^

EIDORS_MSG: eidors progress and status messages

 USAGE: eidors_msg('mission accomplished; time to relax', 1)
   prints 'EIDORS:[ mission accomplished; time to relax ]'
       if log_level <=1
   less important messages have higher levels

 other parameters will be sent to print; example
 eidors_msg('did %d of %s at %f', 2, 'stuff', sqrt(2), 1)
   prints 'EIDORS:[ did 2 of stuff at 1.414214 ]'

 if the message starts with '@@@' then the character
   is replaced with the calling function name

 USAGE: eidors_msg( 'log_level', 1)
   sets the loglevel to 1
 USAGE: eidors_msg( 'log_level')
   return the current log_level

 meanings of levels
   0 => keep quiet (no messages should be level=0)
   1 => important messages
   2 => most messages
   3 => detailed information

 Messages at log_level are displayed

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function log_level= eidors_msg( message, varargin )
0002 %EIDORS_MSG: eidors progress and status messages
0003 %
0004 % USAGE: eidors_msg('mission accomplished; time to relax', 1)
0005 %   prints 'EIDORS:[ mission accomplished; time to relax ]'
0006 %       if log_level <=1
0007 %   less important messages have higher levels
0008 %
0009 % other parameters will be sent to print; example
0010 % eidors_msg('did %d of %s at %f', 2, 'stuff', sqrt(2), 1)
0011 %   prints 'EIDORS:[ did 2 of stuff at 1.414214 ]'
0012 %
0013 % if the message starts with '@@@' then the character
0014 %   is replaced with the calling function name
0015 %
0016 % USAGE: eidors_msg( 'log_level', 1)
0017 %   sets the loglevel to 1
0018 % USAGE: eidors_msg( 'log_level')
0019 %   return the current log_level
0020 %
0021 % meanings of levels
0022 %   0 => keep quiet (no messages should be level=0)
0023 %   1 => important messages
0024 %   2 => most messages
0025 %   3 => detailed information
0026 %
0027 % Messages at log_level are displayed
0028 
0029 % (C) 2005 Andy Adler. License: GPL version 2 or version 3
0030 % $Id: eidors_msg.m 3361 2012-07-01 21:53:37Z bgrychtol $
0031 
0032 if isstr(message) && strcmp(message,'UNIT_TEST'); do_unit_test; return; end
0033 
0034 global eidors_objects
0035 
0036 if nargin==1
0037    args= {};
0038    level= 2;
0039 else
0040    level= varargin{ nargin-1 };
0041    args= varargin( 1:nargin-2 );
0042 end
0043 
0044 [log_level] = get_levels;
0045 
0046 for i= 1:length(args)
0047    if isa( args{i}, 'function_handle')
0048       args{i} = func2str(args{i});
0049    end
0050 end
0051 
0052 % It makes sense to print to stderr (fid=2), but matlab>7 prints this in red
0053 ver= eidors_obj('interpreter_version');
0054 if ver.ver>=7; fid= 1;
0055 else ;         fid= 2; end
0056 
0057 
0058 %try, lms= eidors_objects.last_message_size;
0059 %  if lms>0; fprintf(fid,'%c', 8*ones(lms,1)); end
0060 %end
0061 
0062 % deal with variables
0063 if ~ischar(message)
0064    var = inputname(1);
0065    message = [var ' = ' num2str(message)];
0066 end
0067 
0068 
0069 % Need to do twice to interpret text in message
0070 % message= sprintf(message, args{:} );
0071 if length(message)>1 % single characters are just for progress
0072    if length(message)>=3 && strcmp(message(1:3),'@@@');
0073       if length(message)==3; msg_extra = '';
0074       else                   msg_extra = [':', message(4:end)];
0075       end
0076       dbs = dbstack;
0077       message = sprintf('%s/%s%s', dbs(2).file, ...
0078             dbs(2).name, msg_extra);
0079    end
0080    string= [sprintf('%c',' ' * ones(1,level-1)), ...
0081             'EIDORS:[',message,']\n'];
0082        
0083 elseif strcmp( message, 'log_level');
0084    log_level= eidors_objects.log_level;
0085 else
0086    string= message;
0087 end
0088 
0089 if strcmp(message,'log_level')
0090    eidors_objects.log_level= level;
0091 elseif level <= log_level
0092    fprintf(fid, string, args{:});
0093    if exist('OCTAVE_VERSION'); fflush(fid); end
0094    eidors_objects.last_message_size= 0;
0095 end
0096 
0097 
0098 function [log_level] = get_levels;
0099    global eidors_objects
0100    try
0101       log_level= eidors_objects.log_level;
0102    catch
0103       log_level= 2; % default;
0104       eidors_objects.log_level= log_level;
0105    end
0106 
0107 function do_unit_test
0108    ll= eidors_msg('log_level');
0109    eidors_msg('log_level',5);
0110    eidors_msg('l1',1); eidors_msg('l2',2); eidors_msg('l3',3); eidors_msg('l4',4);
0111 
0112    eidors_msg('log_level',1);
0113    eidors_msg('l1',1); eidors_msg('l2',2); eidors_msg('l3',3); eidors_msg('l4',4);
0114 
0115 
0116    eidors_msg('@@@',1);
0117    eidors_msg('@@@ a message',1);
0118    eidors_msg('a @@@ message',1);
0119    extra_caller;
0120 
0121    eidors_msg('log_level',ll);
0122 
0123 function extra_caller
0124    eidors_msg('@@@ a message from extra_caller',1);
0125

Generated on Wed 29-May-2013 17:11:47 by m2html © 2005