c825009dd9ee03afd9a647274b3dc0ee5a364fac
[scilab.git] / scilab / modules / compatibility_functions / macros / mtlb_fread.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2002-2004 - INRIA - Vincent COUVERT
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.1-en.txt
9
10 function [a, count]=mtlb_fread(fid,sz,prec)
11     // Emulation function for fread() Matlab function
12
13     prectbl=["c"  "char"    "char"
14     "?"  "schar"   "signed char"
15     "s"  "short"   "short"
16     "l"  "int"     "int"
17     "l"  "long"    "long"
18     "f"  "float"   "float"
19     "d"  "double"  "double"
20     "uc" "uchar"   "unsigned char"
21     "us" "ushort"  "unsigned short"
22     "ul" "uint"    "unsigned int"
23     "ul" "ulong"   "unsigned long"
24     "c"  "char"    "char*1"
25     "f"  "float32" "real*4"
26     "d"  "float64" "real*8"
27     "c"  "int8"    "integer*1"
28     "s"  "int16"   "integer*2"
29     "l"  "int32"   "integer*4"
30     "?"  ""        "integer*8"
31     "?"  "intN"    ""
32     "?"  "uintN"   ""         ]
33
34     [lhs,rhs]=argn(0)
35     select rhs
36     case 1 then
37         sz=%inf
38         prec="uchar"
39     case 2 then
40         prec="uchar"
41     end
42     [l,k]=find(prec==prectbl)
43     if l==[] then
44         error(msprintf(gettext("%s: The format ''%s'' is unknown.\n"), "mtlb_fread", prec))
45     end
46     Prec=prectbl(l,1)
47     if Prec=="?" then
48         error(msprintf(gettext("%s: The format ''%s'' is not yet handled.\n"), "mtlb_fread", prec))
49     end
50     if isinf(sz) then
51         a=[]
52         while %t
53             x=mget(1,Prec,fid)
54             if meof(fid)<>0 then
55                 mclearerr(fid)
56                 break
57             end
58             a=[a;x]
59         end
60         count=size(a,1)
61     else
62         a=mget(prod(sz),Prec,fid)
63
64         if meof(fid)<>0 then
65             mclearerr(fid)
66             error(msprintf(gettext("%s: End of file reached before all matrix is read.\n"), "mtlb_fread"))
67         end
68         if size(sz,"*")==1 then
69             a=a(:)
70         else
71             a=matrix(a,sz(1),sz(2))
72         end
73         count=size(a,"*")
74     end
75
76 endfunction