Messages standardization
[scilab.git] / scilab / modules / compatibility_functions / macros / mtlb_fprintf.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2002-2004 - INRIA - Vincent COUVERT 
3 // Copyright (C) ???? - INRIA - Serge STEER
4 // 
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at    
9 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10
11 function count = mtlb_fprintf(varargin)
12 // Emulation function for fprintf() Matlab function
13
14 [lhs,rhs]=argn()
15
16 count=0
17 // No fid given: mtlb_fprintf(fmt,...)
18 // Output is the screen
19
20 if size(varargin)==1 & type(varargin(1))==10 then
21 mprintf("%s \n",varargin(1))
22 count=length(varargin(1))
23 elseif type(varargin(1))==10 then
24   fmt=varargin(1)
25   nfmt=size(strindex(fmt,"%"),"*")
26   nv=size(varargin)-1
27   if nv==1 then
28     a=varargin(2)
29     na=size(a,"*")
30     
31     // If more values than formats
32     mult=max(na/nfmt,1)
33     fmt=strcat(fmt(ones(1,mult))) // duplicate format
34     
35     l=list()
36     A=a
37     for k=1:size(a,"*")
38       l($+1)=A(k)
39     end
40     mprintf(fmt,l(:))
41     count=size(a,"*")
42   elseif nv==0 then
43     error(msprintf(gettext("%s: %s is not implemented.\n"),"mtlb_fprintf","mprintf("+fmt+")"));
44   else
45     sz=[]
46     for k=1:nv
47       sz=[sz size(varargin(k+1),1)]
48     end
49     // Size of args is verified because Scilab mprintf function
50     // does not work if args have more than one row
51     if and(sz==1) then // All args have only one row
52       mult=max(nv/nfmt,1)
53       fmt=strcat(fmt(ones(1,mult))) // duplicate format 
54       mprintf(fmt,varargin(2:$))
55       count=size(sz,"*")
56     else
57       error(msprintf(gettext("%s: %s Scilab function does not work with more than one row variables.\n"),"mtlb_fprintf","mprintf"))
58     end
59   end  
60 // mtlb_fprintf(fid,fmt,...)
61 else 
62   fid=varargin(1)
63   fmt=varargin(2)
64   
65   // count % in fmt
66   nfmt=size(strindex(fmt,"%"),"*")
67   nv=size(varargin)-2
68   if nv==1 then
69     a=varargin(3)
70     na=size(a,"*")
71     
72     mult=max(na/nfmt,1)
73     
74     fmt=strcat(fmt(ones(1,mult))) // duplicate format
75     
76     l=list()
77     for k=1:size(a,"*")
78       l(k)=a(k)
79     end
80     if or(fid==[1 2]) then
81       mprintf(fmt,l(:))
82       count=size(a,"*")
83     else
84       mfprintf(fid,fmt,l(:))
85       count=size(a,"*")
86     end
87   elseif nv==0 & nfmt==0 & type(varargin(2))==10
88     mfprintf(fid,"%s",varargin(2))
89     count=length(varargin(2))
90   elseif nv==0 then
91     if or(fid==[1 2]) then
92       error(msprintf(gettext("%s: %s is not implemented.\n"),"mtlb_fprintf", "mprintf(format)"))
93     else
94       error(msprintf(gettext("%s: %s is not implemented.\n"),"mtlb_fprintf","mfprintf(fid,format)"))
95     end 
96   else
97     sz=[]
98     for k=1:nv
99       sz=[sz size(varargin(k+2),1)]
100     end
101     if and(sz==1) then
102       mult=max(nv/nfmt,1)
103       fmt=strcat(fmt(ones(1,mult))) // duplicate format 
104       
105       if or(fid==[1 2]) then
106         mprintf(fmt,varargin(3:$))
107         count=size(sz,"*")
108       else
109         mfprintf(fid,fmt,varargin(3:$))
110         count=size(sz,"*")
111       end
112     else
113       if or(fid==[1 2]) then
114         error(msprintf(gettext("%s: %s Scilab function does not work with more than one row variables.\n"),"mtlb_fprintf", "mprintf"))
115       else
116         mfprintfMat(fid,varargin(3:$),fmt)
117         for k=1:nv
118           count=count+size(varargin(k+2),"*")
119         end
120       end 
121     end
122   end
123 end
124 endfunction