1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
/*
* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
* Copyright (C) 2006 - INRIA - Allan CORNET
* Copyright (C) 2010 - DIGITEO - Allan CORNET
*
* This file must be used under the terms of the CeCILL.
* This source file is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at
* http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
*
*/
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "PATH_MAX.h"
#include "stack-c.h"
#include "libraryinfo.h"
#include "stackinfo.h"
#include "MALLOC.h"
#include "cvstr.h"
#include "expandPathVariable.h"
#ifdef _MSC_VER
#include "strdup_windows.h"
#endif
#include "charEncoding.h"
/*--------------------------------------------------------------------------*/
char *getlibrarypath(char *libraryname)
{
char *path = NULL;
int lw = 0;
int fin = 0;
if (C2F(objptr)(libraryname, &lw, &fin, (unsigned long)strlen(libraryname)))
{
int *header = istk(iadr(*Lstk(fin)));
if ( (header) && (header[0] == sci_lib ) )
{
int lengthpath = 0, job = 0;
lengthpath = header[1];
path = (char *) MALLOC((lengthpath + 1) * sizeof(char));
job = 1; /* convert scilab to ascii */
C2F(cvstr)(&lengthpath, &header[2], path, &job, lengthpath);
path[lengthpath] = '\0';
}
}
return path;
}
/*--------------------------------------------------------------------------*/
char **getlistmacrosfromlibrary(char *libraryname, int *sizearray)
{
char **macroslist = NULL;
char *pathlibrary = getlibrarypath(libraryname);
if (pathlibrary)
{
/* in each library directory , we have a "names" file with list of macros */
#define filenameNAMES "names"
char *expandedpath = expandPathVariable(pathlibrary);
if (expandedpath)
{
char *fullfilename = (char*)MALLOC(sizeof(char) * (strlen(expandedpath) + strlen(filenameNAMES) + 1));
if (fullfilename)
{
char line[PATH_MAX + 1];
FILE * pFile = NULL;
int nbElements = 0;
sprintf(fullfilename, "%s%s", expandedpath, filenameNAMES);
wcfopen (pFile, fullfilename, "rt");
if (pFile)
{
while (fgets (line, sizeof(line), pFile) != NULL)
{
/* remove carriage return */
char *pos = strchr(line, '\n');
if (pos)
{
*pos = 0;
}
pos = strchr(line, '\r');
if (pos)
{
*pos = 0;
}
if (macroslist)
{
macroslist = (char**)REALLOC(macroslist, sizeof(char*) * (nbElements + 1));
}
else
{
macroslist = (char**)MALLOC(sizeof(char*) * (nbElements + 1));
}
macroslist[nbElements] = strdup(line);
nbElements++;
}
fclose(pFile);
*sizearray = nbElements;
}
FREE(fullfilename);
fullfilename = NULL;
}
FREE(expandedpath);
expandedpath = NULL;
}
FREE(pathlibrary);
pathlibrary = NULL;
}
else
{
*sizearray = 0;
}
return macroslist;
}
/*--------------------------------------------------------------------------*/
|