/* * 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 #include #include #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; } /*--------------------------------------------------------------------------*/