/*
 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) INRIA - 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
 *
 */

/*-----------------------------------------------------------------------------------*/
#ifndef __DYNAMIC_LINK_H__
#define __DYNAMIC_LINK_H__

#include "dynlib_dynamic_link.h"
#include "BOOL.h"
#include "machine.h"            /* C2F */

#define ENTRYMAX 500

/**
* Initialize tables
*/
DYNAMIC_LINK_IMPEXP void initializeLink(void);

/**
* check that a routine name is a loaded
* if *ilib == -1
*    checks if routinename is a loaded
*    entry point
*    the result is -1 if false
*    or the number in the function table
*
* @param[in] routinename
* @param[in/out] ilib number in the function table (-1 if FALSE)
* @return a BOOL
*/
DYNAMIC_LINK_IMPEXP BOOL c_link(char *routinename, int *ilib);

/**
* OBSOLETE
* if *ilib == -1
*    checks if routinename is a loaded
*    entry point
*    the result is -1 if false
*               or the number in the function table
* @param[in] routinename
* @param[in/out] ilib
*/
DYNAMIC_LINK_IMPEXP void C2F(iislink) (char *routinename, int *ilib);

/**
* returns the ii functions
* @param ii
* @param ptr on functions
*/
DYNAMIC_LINK_IMPEXP void GetDynFunc(int ii, void (**realop) ());

/**
* Search a function in the table
* Search from end to top
* @param
* @param
*/
DYNAMIC_LINK_IMPEXP int SearchInDynLinks(char *op, void (**realop) ());

/**
* Show the linked files
*/
DYNAMIC_LINK_IMPEXP void ShowDynLinks(void);

/**
* unlink all linked files
*/
DYNAMIC_LINK_IMPEXP void unlinkallsharedlib(void);

/**
* Unlink a shared lib
* @param i (number of shared lib)
*/
DYNAMIC_LINK_IMPEXP void unlinksharedlib(int *i);

/**
* load a shared archive and call LoadDynLibrary
* the shared lib handler is stored in a Table
* return value is == -1 if the LoadDynLibrary failed
* @param loaded_file
*/
DYNAMIC_LINK_IMPEXP int Sci_dlopen(char *loaded_file);

/**
* This routine load the entryname ename
* from shared lib ishared
* @return TRUE or FALSE
*/
DYNAMIC_LINK_IMPEXP int Sci_dlsym(char *ename, int ishared, char *strf);

/**
* Delete entry points associated with shared lib ishared
* then delete the shared lib
@param ishared
*/
DYNAMIC_LINK_IMPEXP void Sci_Delsym(int ishared);

/**
* @param sizearray returns size of string array returned
* @return string array with functions names loaded
*/
DYNAMIC_LINK_IMPEXP char **getNamesOfFunctionsInSharedLibraries(int *sizearray);

/**
* call link for scilab
* @param idsharedlibrary
* @param filename (dynamic library name)
* @param subnamesarray (list of functions name in dynamic library)
* @param sizesubnamesarray
* @param fflag
* @param ierr (last error)
* @return id
*/
DYNAMIC_LINK_IMPEXP int scilabLink(int idsharedlibrary, char *filename, char **subnamesarray, int sizesubnamesarray, BOOL fflag, int *ierr);

/**
* get list of all Id of shared lib
* @param size of returned list
* @return list of Id
*/
DYNAMIC_LINK_IMPEXP int *getAllIdSharedLib(int *sizeList);

#endif /* __DYNAMIC_LINK_H__ */
/*-----------------------------------------------------------------------------------*/
