[fileio] allow mopen and mclose to handle multiple files
[scilab.git] / scilab / modules / integer / macros / mgeti.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2013 - Scilab Enterprises - Cedric Delamarre
3 //
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 function x = mgeti(varargin)
14
15     rhs=argn(2);
16     if rhs == 0 | rhs > 3 then
17         error(msprintf(_("%s: Wrong number of input argument(s): %d to %d expected.\n"), "mgeti", 1, 3));
18     end
19
20     if rhs == 1 then
21         typeToConvert = 4;
22     else
23         type = varargin(2);
24
25         if typeof(type) <> "string" then
26             error(msprintf(_("%s: Wrong type for argument #%d: string expected.\n"), "mgeti", 2));
27         end
28
29         if size(type, '*') <> 1 then
30             error(msprintf(_("%s: Wrong size for argument #%d: A single string expected.\n"), "mgeti", 2));
31         end
32
33         typeToConvert = 0;
34         len = length(type);
35         partPos = 1;
36
37         if len == 0 | len > 3 then
38             error(msprintf(_("%s: Wrong size for argument #%d: A single string of size %d to %d expected.\n"), "mgeti", 2, 1, 3));
39         end
40
41         // unsigne
42         if part(type, partPos) == 'u'
43             typeToConvert = 10;
44             partPos = 2;
45         end
46
47         // type to convert
48         select part(type, partPos)
49         case 'l'
50             typeToConvert = typeToConvert + 8;
51         case 'i'
52             typeToConvert = typeToConvert + 4;
53         case 's'
54             typeToConvert = typeToConvert + 2;
55         case 'c'
56             typeToConvert = typeToConvert + 1;
57         else
58             error(msprintf(_("%s: Incorrect integer type: %s .\n"), "mgeti", part(type, partPos)));
59         end
60     end
61
62     x = iconvert(mget(varargin(:)), typeToConvert);
63 endfunction