[Scilab-users] Clone a function, continued

Stéphane Mottelet stephane.mottelet at utc.fr
Wed Feb 28 16:30:19 CET 2018


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 at 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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20180228/efd1255e/attachment.htm>


More information about the users mailing list