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
|
// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
// Copyright (C) ???? - INRIA - Scilab
//
// This file must be used under the terms of the CeCILL.
// This source file is licensed as described in the file COPYING, which
// you should have received as part of this distribution. The terms
// are also available at
// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
function [s,errmsg] = mtlb_sprintf(fmt,varargin)
[lhs,rhs]=argn()
count=0
//count % in fmt
nfmt=size(strindex(fmt,'%'),'*')
//number of format arguments
nv=size(varargin)
if nv==1 then
a=varargin(1)
na=size(a,'*')
mult=max(na/nfmt,1)
s='';
for k=1:mult,loc=a(1+(k-1)*nfmt:1+k*nfmt-1);
l=list()
for j=1:size(loc,'*'); l(j)=loc(j);end
s=s+msprintf(fmt,l(:));
end
elseif nv==0 then
s=msprintf(fmt)
else
sz=[]
for k=1:nv
sz=[sz size(varargin(k),1)]
end
if and(sz==1) then
mult=max(nv/nfmt,1)
fmt=strcat(fmt(ones(1,mult))) // duplicate format
s=msprintf(fmt,varargin(:))
else
error(msprintf(gettext("%s: This particular case is not implemented.\n"), "mtlb_printf"))
end
end
K=strindex(s,'\n')
if K<>[] then
w=s
s=[]
//if K(1)<>1 then K=[-1 K],end
K=[-1 K]
for k=2:size(K,'*')
s=[s;part(w,K(k-1)+2:K(k)-1)]
end
if K($)<>length(w)-1 then
s=[s;part(w,K($)+2:length(w))]
end
end
endfunction
|