Thanks Samuel, the problem is that
save('macros/%axesData_i_h.bin', '%axesData_i_h')
will produce a .sod file with a .bin extension. Both formats cannot be
used indifferently for compiled macros of a library : in the following
code (that can be copy/pasted), a library is built, the "fun1" function
is saved in sod format, then the reference to "fun1.bin" is replaced by
"fun1.sod" in the lib file :
path=TMPDIR+'/test/';
mkdir(path)
mputl('function y=fun1(x), y=x, end',path+'fun1.sci');
genlib('test',path)
save(path+'fun1.sod','fun1')
doc=xmlRead(path+'lib');
doc.root.children(1).attributes.file='fun1.sod';
disp(xmlDump(doc))
xmlWrite(doc,path+'lib');
clear
lib(TMPDIR+'/test/')
The following output is obtained:
!<?xml version="1.0" encoding="UTF-8"
standalone="no"?> !
! !
!<scilablib name="test"> !
! !
! <macro name="fun1" file="fun1.sod"
md5="a50d8a8cda2cd6036306e08e61ffcbeb"/> !
! !
!</scilablib> !
Emplacement des fichiers des fonctions : /.
fun1
-->
Unfortunately, calling fun1 crashes scilab...
S.
Le 28/02/2018 à 15:09, Samuel Gougeon a écrit :
Hello Stéphane,
I would try the following:
After genlibing the set of regular .sci files,
* save the clone with
save('macros/%axesData_i_h.bin', "%axesData_i_h")
* add a line in the lib file
<macro name="%axesData_i_h" file="%axesData_i_h.bin"
md5="e833d190e21b93af335a011ea9e76aef"/>
The MD5 hash is of the content of the .sci file, that here does not
exist. It is use by genlib to check whether the .sci must be
recompiled or not. You may try to set any md5 (or the cloned one). As
long as you don't recompile the lib with genlib -- just loading it
with load() or lib() --, this should work.
My 2 cents..
Samuel
Le 28/02/2018 à 14:52, Stéphane Mottelet a écrit :
Hello,
With the new library system, it is no longer possible to clone a
function in a library. This feature is still documented in the help
page of "lib" but is not working anymore since saving a user-defined
scilab function uses the sod/hdf5 format. Maybe one can ask why such
a feature is needed ? Sometimes it can be usefull to have a function
which is callable by different names but actually does the same
thing. The different calling names can come from the adaptation for
different types of data, which can sometimes lead to the same
treatment, hence to the same function. Instead of writing two
functions with the same source code but a different calling name,
cloning the original one was an interesting feature.
I admit that the way it worked under scilab<6.x was not clean at all
*but* officially documented in the "lib" help page. For example,
imagine that a library has just been built (e.g. the plotlib...)
genlib('plotlib','macros')
I need to add to this library %axesData_i_h which is a clone of
generic_i_h (in overloadinglib), which can be done in scilab<6.x by:
%axesData_i_h=generic_i_h;
save('macros/%axesData_i_h.bin',%axesData_i_h)
mputl([mgetl('macros/names');'%axesData_i_h'],'macros/names')
I said above "not clean at all", because the binary file "macros/lib"
(which is created by the genlib call) does not need to be updated, as
a subsequent
plotlib=lib("macros")
loads all functions, including %axesData_i_h
Doing things like this is not possible any more. It was was also to
add persistent variables in libraries, with the same mechanism.
By the way, under scilab 6.0.1, the "macros/lib" is now an XML file
with a clear syntax, e.g.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<scilablib name="plotliblib">
<macro name="%c_i_pltlibH" file="%c_i_pltlibH.bin"
md5="d0966468b335a69681a29d84c99feb5c"/>
<macro name="%figureDa_i_h" file="%figureDa_i_h.bin"
md5="a1ebda57a1607b28095def2e415e2ec1"/>
...
</scilablib>
It does not seem to be documented either.
S.
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users
--
Stéphane Mottelet
Ingénieur de recherche
EA 4297 Transformations Intégrées de la Matière Renouvelable
Département Génie des Procédés Industriels
Sorbonne Universités - Université de Technologie de Compiègne
CS 60319, 60203 Compiègne cedex
Tel : +33(0)344234688
http://www.utc.fr/~mottelet
--
Stéphane Mottelet
Ingénieur de recherche
EA 4297 Transformations Intégrées de la Matière Renouvelable
Département Génie des Procédés Industriels
Sorbonne Universités - Université de Technologie de Compiègne
CS 60319, 60203 Compiègne cedex
Tel : +33(0)344234688
http://www.utc.fr/~mottelet
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users