check input arguments mopen, mclose, ...
[scilab.git] / scilab / modules / fileio / sci_gateway / c / sci_mseek.c
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2006 - INRIA - Allan CORNET
4 * Copyright (C) 2009 - DIGITEO - Allan CORNET
5 * ...
6
7 * This file must be used under the terms of the CeCILL.
8 * This source file is licensed as described in the file COPYING, which
9 * you should have received as part of this distribution.  The terms
10 * are also available at    
11 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
12 *
13 */
14 /*--------------------------------------------------------------------------*/
15 #include "stack-c.h"
16 #include "gw_fileio.h"
17 #include "mseek.h"
18 #include "MALLOC.h"
19 #include "localization.h"
20 #include "Scierror.h"
21 /*--------------------------------------------------------------------------*/
22 #define ALL_FILES_DESCRIPTOR -1
23 /*--------------------------------------------------------------------------*/
24 int sci_mseek(char *fname,unsigned long fname_len)
25 {
26         int m1 = 0, n1 = 0, l1 = 0;
27         int m2 = 0, n2 = 0, l2 = 0;
28         int m3 = 0, n3 = 0, l3 = 0;
29         int err = 0;
30         int fd = ALL_FILES_DESCRIPTOR;
31         char *flag = NULL;
32
33         Nbvars=0;
34         CheckRhs(1,3);
35         CheckLhs(1,1);
36
37         if (GetType(1) == sci_matrix)
38         {
39                 GetRhsVar(1,MATRIX_OF_INTEGER_DATATYPE,&m1,&n1,&l1);
40                 if (m1*n1 != 1)
41                 {
42                         Scierror(999, _("%s: Wrong size for input argument #%d: A integer expected.\n"), fname,1);
43                         return 0;
44                 }
45         }
46         else
47         {
48                 Scierror(999, _("%s: Wrong type for input argument #%d: A integer expected.\n"), fname,1);
49                 return 0;
50         }
51
52         if ( Rhs >= 2)
53         {
54                 if (GetType(2) == sci_matrix)
55                 {
56                         GetRhsVar(2,MATRIX_OF_INTEGER_DATATYPE,&m2,&n2,&l2);
57                         if (m2*n2 == 1)
58                         {
59                                 fd = *istk(l2);
60                         }
61                         else
62                         {
63                                 Scierror(999, _("%s: Wrong size for input argument #%d: A integer expected.\n"), fname,2);
64                         }
65                 }
66                 else
67                 {
68                         Scierror(999, _("%s: Wrong type for input argument #%d: A integer expected.\n"), fname,2);
69                         return 0;
70                 }
71         }
72
73         if ( Rhs >= 3)
74         {
75                 GetRhsVar(3,STRING_DATATYPE,&m3,&n3,&l3);
76                 flag = cstk(l3);
77         }
78         else
79         {
80                 flag = "set";
81         }
82
83         C2F(mseek)(&fd,istk(l1),flag,&err);
84
85         if (err >  0)
86         {
87                 Error(10000);
88                 return 0;
89         }
90
91         LhsVar(1) = 0;
92         PutLhsVar();
93
94         return 0;
95 }
96 /*--------------------------------------------------------------------------*/