闲暇、偶然,杂乱、零碎、等等

『特注:此博客以转贴为主,大部分文章来自网络搜索,如果涉及版权,请及时告知,博主会及时撤下内容。』

2007年9月12日星期三

SciLab工具箱接口及src目录、宏目录

scilab工具箱结构
工具箱的根目录名为工具箱的名字(比如mytoolbox),它包含8个子目录:
macros: Scilab宏 (例如用Scilab代码写的,以.sci为文件名扩展名的函数),buldmacros宏和loadmacros宏脚本。
src: 源代码(所有的 .c 和 .f 文件),一个 buildsrc脚本
sci_gateway: 接口程序,和一个buildsci_gateway
help: 英语和法语帮助,其子目录明分别为eng和fr,里面包含.xml帮助文件,buildhelp和loadhelp脚本。
etc: .html, .pdf, .txt, .jpeg, ...
unit tests: .tst files (测试你的工具箱的脚本)
demos: 各种展示你的工具箱的例子。
includes: .h 文件。
和四个文件:
readme.txt: 工具箱描述和安装说明。
builder.sce: 主builder
loader.sce: 主loader
license.txt: 协议

scilan工具箱的接口和src目录
primitive是指一个Scilab函数,它使用一个接口程序来调用以C或者Fortran代码写的函数。对于每个Scilabprimitive,我们必须为它在sci_gateway目录中创建对应的接口函数。
在使用C语言的写接口程序的情况下,当一个Scilab primitive被调用的时候,接口函数收件检查输入和输出的数值,类型和大小是否正确(使用CheckRhs和CheckLhs 函数),并从Scilab内部堆栈中获取rhs参数的地址,传给接口函数。
我们这里并不展开描述接口函数的所有可能情况,更多的例子请参考SCI/examples目录的例程。

scilab宏目录
为了方便,在宏目录里的builder和loader分别命名为buildmacros.sce和loadmacros.sce,当然您也可以命名为其他的名字。
一个宏(macros)是以Scilab语言写的一个函数(以.sci结尾)
假设目前我们的工具箱mytoolbox只包含一个.sci文件,函数foo1(见下面的代码)的功能如下:输入一个方阵A,这个函数返回向量X,X是A对角线上的正数元素。
foo1.sci
function [X]=foo1(A)
//这个函数返回方阵A对角线上的正数元素

// 检查A的类型和大小
if type(A)<>1 then
error("type of input argument must be a double");
end
if size(A,1)<>size(A,2) then
error("input argument must be a square matrix");
end
//提取对角线上的正数
X=[];
for i=1:size(A,1)
if A(i,i)>0 then
X($+1)=A(i,i);
end
end
endfunction

没有评论:

发表评论

愿与大家多交流分享。芸芸众生,相识即缘。。。 ^_^