archiveList complete with gateways, primitives, test and help
[scilab.git] / scilab / modules / fileio / sci_gateway / c / sci_archive_list.c
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2015 - Kartik Gupta
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.1-en.txt
10 *
11 */
12 /*--------------------------------------------------------------------------*/
13 #include <stdlib.h>
14 #include <string.h>
15 #include "gw_fileio.h"
16 #include "api_scilab.h"
17 #include "MALLOC.h"
18 #include "Scierror.h"
19 #include "localization.h"
20 #include "PATH_MAX.h"
21 #include "archive_list.h"
22 #include "freeArrayOfString.h"
23 #include "expandPathVariable.h"
24 #ifdef _MSC_VER
25 #include "strdup_windows.h"
26 #endif
27 /*--------------------------------------------------------------------------*/
28 int sci_archive_list(char *fname, unsigned long fname_len)
29 {
30     SciErr sciErr;
31     int *piAddressVarOne = NULL;
32     char **pStVarOne = NULL;
33     int mOne = 0, nOne = 0;
34     int mnOne = 0;
35
36     char **fileList = NULL;
37     int i = 0;
38     char *pathextended;
39     int rows, cols, error;
40
41     Rhs = Max(Rhs, 0);
42     CheckRhs(1, 1);
43     CheckLhs(0, 1);
44     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
45     if (sciErr.iErr)
46     {
47         printError(&sciErr, 0);
48         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
49         return 0;
50     }
51
52     if (!isStringType(pvApiCtx, piAddressVarOne))
53     {
54         if (isEmptyMatrix(pvApiCtx, piAddressVarOne))
55         {
56             createEmptyMatrix(pvApiCtx, Rhs + 1);
57             LhsVar(1) = Rhs + 1;
58             PutLhsVar()
59         }
60         else
61         {
62             Scierror(999, _("%s: Wrong type for input argument #%d: String expected.\n"), fname, 1);
63         }
64         return 0;
65     }
66     if (getAllocatedMatrixOfString(pvApiCtx, piAddressVarOne, &mOne, &nOne, &pStVarOne) != 0)
67     {
68         freeAllocatedMatrixOfString(mOne, nOne, pStVarOne);
69         Scierror(999, _("%s: No more memory.\n"), fname);
70         return 0;
71     }
72     cols = 1;
73     fileList = NULL;
74     pathextended = expandPathVariable(pStVarOne[0]);
75     fileList = (char**)(archive_list(pathextended,&rows,&error));
76     freeAllocatedMatrixOfString(mOne, nOne, pStVarOne);
77     if(error == 1)
78     {
79         Scierror(999, _("%s: Sorry the archive could not be opened\n"), fname);
80         return 0;
81     }
82     else if(error == 2)
83     {
84             Scierror(999, _("%s: Sorry the archive could not be closed.\n"), fname);
85             return 0;
86     }
87     CreateVarFromPtr(Rhs + 1, MATRIX_OF_STRING_DATATYPE, &rows, &cols, fileList);
88     LhsVar(1) = Rhs + 1;
89
90     PutLhsVar();
91     return 0;
92 }
93 /*--------------------------------------------------------------------------*/
94
95