/[MITgcm]/MITgcm_contrib/gael/matlab_class/gcmfaces_misc/gcmfaces_msg.m
ViewVC logotype

Annotation of /MITgcm_contrib/gael/matlab_class/gcmfaces_misc/gcmfaces_msg.m

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (hide annotations) (download)
Thu Oct 20 20:55:17 2011 UTC (13 years, 8 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint65x, checkpoint65r, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, HEAD
- added routine : gcmfaces_msg.m prints a formatted message to screen

1 gforget 1.1 function [msgOut]=gcmfaces_msg(msgIn,headerOut,widthOut);
2     %object: print formatted message to screen
3     %input: msgIn is a char or a cell array of char
4     %optional: headerOut is the header(default: no header if
5     % myenv.verbose<2; calling tree if myenv.verbose>=2)
6     % widthOut is the line width (75 by default)
7     %output: msgOut is a char where line breaks were set
8     % so that all lines have approx. the same width.
9     %note: could also introduce form feeds (page break for print) or
10    
11     %test case:
12     % msgIn={'xxxx \ryy\tzz\n' ['1 ' char(9) '2' char(10) '3' char(11) '4' char(12) '5']}
13     % widthOut=3;
14     % gcmfaces_msg(msgIn,widthOut);
15    
16     gcmfaces_global;
17     if isempty(who('headerOut'))&myenv.verbose<2;
18     headerOut='';
19     elseif isempty(who('headerOut'))&myenv.verbose>=2;
20     %pause before each event
21     if myenv.verbose>=3; fprintf('\n > hit return to continue <\n'); pause; end;
22     %
23     [ST,I]=dbstack;
24     headerOut={'gcmfaces message from '};
25    
26     if isempty(ST);
27     headerOut={headerOut{:} 'main workspace'};
28     else;
29     for ii=length(ST):-1:2;
30     tmp1=[char(45)*ones(1,length(ST)-ii+1)];
31     headerOut={headerOut{:} [tmp1 ST(ii).name ' at line ' num2str(ST(ii).line)]};
32     end;
33     end;
34    
35     m=0; for ii=1:length(headerOut); m=max(m,length(headerOut{ii})); end;
36     tmpOut=45*ones(1,m+2);
37     for ii=1:length(headerOut);
38     n=length(headerOut{ii});
39     tmpOut=[tmpOut char(10) '|' headerOut{ii} 32*ones(1,m-n) '|'];
40     end;
41     tmpOut=[tmpOut char(10) 45*ones(1,m+2) char(10)];
42    
43     headerOut=tmpOut;
44     end;
45    
46     if isempty(who('widthOut')); widthOut=75; end;
47    
48     %step 1: reformat msgIn to one char line, if needed
49     %=======
50    
51     %1.1) make cell array
52     if ischar(msgIn)&size(msgIn,2)>1;
53     nLinesIn=size(msgIn,1); tmpIn={};
54     for ii=1:nLinesIn; tmpIn{ii}=msgIn(ii,:); end;
55     msgIn=tmpIn;
56     end;
57     if iscell(msgIn)&size(msgIn,2)>1; msgIn=msgIn'; end;
58    
59     %2.2) cat to one char line
60     msgIn=strcat(cell2mat(msgIn'));
61    
62     %step 2: deformat text -- rm/replace control characters from caller
63     %=======
64    
65     %2.1) matlab control characters
66     ii=strfind(msgIn,'\n'); for jj=ii; msgIn=[msgIn(1:jj-1) ' ' msgIn(jj+2:end)]; end;
67     ii=strfind(msgIn,'\r'); for jj=ii; msgIn=[msgIn(1:jj-1) ' ' msgIn(jj+2:end)]; end;
68     ii=strfind(msgIn,'\t'); for jj=ii; msgIn=[msgIn(1:jj-1) ' ' msgIn(jj+2:end)]; end;
69     ii=strfind(msgIn,'\b'); for jj=ii; msgIn=[msgIn(1:jj-1) ' ' msgIn(jj+2:end)]; end;
70     ii=strfind(msgIn,'\f'); for jj=ii; msgIn=[msgIn(1:jj-1) ' ' msgIn(jj+2:end)]; end;
71    
72     %2.2) ANSI C control characters
73     tmp1=msgIn; tmp2=double(tmp1);
74     %substitute some with a space
75     jj=find(tmp2>8&tmp2<13); tmp1(jj)=32;
76     %remove the others
77     jj=find(tmp2>=32); tmp1=tmp1(jj);
78     msgIn=char(tmp1);
79    
80     %2.3) double spaces
81     ii=strfind(msgIn,' ');
82     while ~isempty(ii);
83     jj=ii(1);
84     msgIn=[msgIn(1:jj-1) ' ' msgIn(jj+2:end)];
85     ii=strfind(msgIn,' ');
86     end;
87    
88     %step 3: reformat text -- according to to gcmfaces_msg standards
89     %=======
90    
91     ii=strfind(msgIn,' ');
92     if isempty(ii); ii=[ii length(msgIn)+1]; end;
93     if ii(end)~=length(msgIn); ii=[ii length(msgIn)+1]; end;
94     if ii(1)~=1; ii=[0 ii]; end;
95    
96     msgOut=headerOut;
97     nn=0;
98     for jj=1:length(ii)-1;
99     kk=[ii(jj)+1 :ii(jj+1)-1];
100     tmp1=msgIn(kk);
101     if nn+length(tmp1)+1<=widthOut;
102     msgOut=[msgOut tmp1 ' '];
103     nn=nn+length(tmp1)+1;
104     else;
105     msgOut=[msgOut char(10)];
106     nn=0;
107     msgOut=[msgOut ' ' tmp1 ' '];%start new line with two spaces
108     nn=nn+length(tmp1)+1;
109     end;
110     end;
111     msgOut=[msgOut char(10)];
112     nn=0;
113    
114     %step 4: print to screen
115     %=======
116     fprintf(msgOut);
117    

  ViewVC Help
Powered by ViewVC 1.1.22