Messages standardization
[scilab.git] / scilab / modules / compatibility_functions / macros / mtlb_load.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) ???? - INRIA - Scilab
3 // 
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at    
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
9
10 // @OBSOLETE
11
12 function mtlb_load(thefile,opt)
13 //loads matlab 4.x  binary (.mat) or ascii files
14 //
15
16 warnobsolete("loadmatfile", "5.1");
17
18 l_flags=['dl','fl','ll','sl','uls','uc']
19 b_flags=['db','fb','lb','sb','ubs','uc']
20 deff('Error(msg)',['mclose(fd)' ;'error(msg)'])
21 [lhs,rhs]=argn(0)
22 // look for file type
23 if rhs==2 then
24   if convstr(opt)=='-ascii' then
25     bin=%f
26   else
27     error(msprintf(gettext("%s: Unknown option ''%s''.\n"),"mtlb_load",opt));
28   end
29 else
30   k=strindex(thefile,'.')
31   if k==[] then  //no extension given
32     thefile=thefile+'.mat'
33     bin=%t
34   else
35     if part(thefile,k($):length(thefile))=='.mat' then 
36       bin=%t,
37     else
38       bin=%f
39     end
40   end
41 end
42
43 if bin then
44   [fd,err]=mopen(thefile,'rb',0)
45   if err<>0 then error(msprintf(gettext("%s: File ''%s'' cannot be opened for reading.\n"),"mtlb_load",thefile)),end
46
47   vars=list() //list to store loaded variables
48   names=[]  // vector of variables names
49
50
51   while %t 
52     offset=mtell(fd)
53     mopt=mget(1,'uil',fd)
54     if meof(fd)<>0 then break,end
55     if mopt>5000 then
56       mseek(offset,fd)
57       mopt=mget(1,'uib',fd)
58
59       if mopt>5000 then
60         Error(msprintf(gettext("%s: Incorrect file.\n"),"mtlb_load"))
61       end
62     end
63     MOPT=[]
64     for k=1:4
65       r=mopt-10*int(mopt/10);
66       mopt=int((mopt-r)/10);
67       MOPT=[r MOPT];
68     end
69     select MOPT(1)
70     case 0
71       fl='uil'
72       flag=l_flags(MOPT(3)+1)
73     case 1
74       fl='uib'
75       flag=b_flags(MOPT(3)+1)
76     case 2
77       Error(msprintf(gettext("%s: VAX D-float not handled.\n"),"mtlb_load"))
78     case 3
79       Error(msprintf(gettext("%s: VAX G-float not handled.\n"),"mtlb_load"))
80     case 4
81       Error(msprintf(gettext("%s: Cray encoding not handled.\n"),"mtlb_load"))
82     else
83       Error(msprintf(gettext("%s: Unknown binary number format.\n"),"mtlb_load"))
84     end
85     t=mget(4,fl,fd);
86     if meof(fd)<>0 then Error(msprintf(gettext("%s: Incorrect file.\n"),"mtlb_load")),end
87     m=t(1);n=t(2);it=t(3),namelen=t(4)
88     name=mget(namelen,"c",fd);
89     if meof(fd)<>0 then Error(msprintf(gettext("%s: Incorrect file.\n"),"mtlb_load")),end
90     name=ascii(name(1:namelen-1))
91     names=[names name]
92     
93     
94     if MOPT(4)==0 then  // regular matrix
95       v=mget((it+1)*m*n,flag,fd);
96       if meof(fd)<>0 then Error(msprintf(gettext("%s: Incorrect file.\n"),"mtlb_load")),end
97       if it==0 then
98         mat=matrix(v,m,n);
99       elseif it==1
100         mat=matrix(v(1:m*n),m,n)+%i*matrix(v(m*n+1:$),m,n)
101       end
102     elseif MOPT(4)==1 // vector of strings
103       v=mget(m*n,flag,fd);
104       if meof(fd)<>0 then Error(msprintf(gettext("%s: Incorrect file.\n"),"mtlb_load")),end
105       mat=matrix(v(1:m*n),m,n);
106       w=mat;
107       mat=[];
108       for k=1:m
109         mat=[mat;ascii(w(k,:))]
110       end
111     elseif MOPT(4)==2 //sparse matrix
112       //sparse
113       Nnz=m-1;
114       it=n-3;if it<>0&it<>1 then Error(msprintf(gettext("%s: Unknown sparse type.\n"),"mtlb_load")),end
115       ir=mget(Nnz,flag,fd);m=mget(1,"d",fd);
116       jc=mget(Nnz,flag,fd);n=mget(1,"d",fd);
117       v=mget(Nnz,flag,fd);junk=mget(1,"d",fd);
118       if meof(fd)<>0 then Error(msprintf(gettext("%s: Incorrect file.\n"),"mtlb_load")),end
119       if it==1 then
120         //complex
121         v=v+%i*mget(Nnz,flag,fd);
122       end
123       mat=sparse([ir;jc]',v,[m n]);
124     end
125     vars($+1)=mat
126   end
127   mclose(fd);
128   //form execstr instruction to resume variables in the calling environment
129   execstr('['+strcat(names,',')+']=resume(vars(:))')
130 else
131   ke=strindex(thefile,'.')
132   if ke==[] then ke=length(thefile),else ke=ke($)-1,end
133   kp=strindex(thefile,['/','\'])
134   if kp==[] then kp=1,else kp=kp($)+1,end
135   name=part(thefile,kp:ke)
136   mat=evstr(mgetl(thefile))
137   execstr(name+'= resume(mat)')
138 end
139 endfunction