-
Notifications
You must be signed in to change notification settings - Fork 4
/
uprintf.m
59 lines (52 loc) · 1.06 KB
/
uprintf.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
% fprintf() with update
%
% It prints to the screen, but deletes the previous line first. This is useful
% for long running jobs when you want to print a status, but not cause your
% terminal to scroll.
%
% Usage:
% >> uprintf('hello there');
% >> uprintf('hello %s!\n', 'carl');
% >> uprintf();
% >> uprintf('goodbye');
%
% The empty call to uprintf() tells it to stop deleting until the next command.
function uprintf(fid, varargin)
if exist('fid'),
if isstr(fid),
fmt = fid;
args = varargin;
fid = 1;
else,
if length(varargin) >= 1,
fmt = varargin{1};
end
if length(varargin) >= 2,
args = varargin(2:end);
else,
args = cell(0,0);
end
end
else,
fid = 1;
end
persistent th;
if isempty(th),
th = 0;
end
if ~exist('fmt', 'var'),
if th ~= 0,
th = 0;
fprintf(fid, '\n');
end
return;
end
if th > 0,
fprintf(fid, repmat('\b', 1, th));
end
msg = sprintf(fmt, args{:});
len = length(sprintf(msg));
th = max(len, th);
fprintf(fid, msg);
fprintf(fid, repmat(' ', 1, th-len));
fprintf(fid, repmat('\b', 1, th-len));