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

Contents 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 - (show annotations) (download)
Thu Oct 20 20:55:17 2011 UTC (13 years, 9 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 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