欢迎访问 Forcal程序设计

FORCAL系统扩展动态库FcSystem

目 录

1 什么是FcSystem
2 Forcal系统常量
sys::fcfor | 用于通过函数new申请表达式对象：new[sys::fcfor] 。通过这种方式申请的对象不能由函数oo自动销毁，故不推荐使用。
sys::CLOCKS_PER_SEC | 每秒流逝过去的时钟脉冲数。
sys::nlen | 一个整数或实数所占宽字节数。
3 Forcal系统函数
sys::fcfor() | 整数函数、实数函数。申请表达式对象。在oo函数中调用该函数，将返回临时对象，否则返回一般对象
sys::comfor | 将Forcal静态字符串编译为表达式
sys::comfors | 将FcData字符串编译为表达式
sys::testfcfor | 测试fcfor是否有效
sys::call | 动态调用表达式
sys::rearray | 数组维数反序
sys::A | 设置或获得多维数组元素的值
sys::SA | 将多维数组视为一维数组，设置多个数组元素
sys::GA | 将多维数组视为一维数组，获得多个数组元素
sys::setnn | 设置静态整数（实数）数组元素的值
sys::getnn | 获得静态整数（实数）数组元素的值
4 操作系统函数
sys::clock | 获取流逝过去的时钟脉冲数。
sys::ShellExecute | 执行外部程序函数
sys:: |

1 什么是FcSystem [返回页首]

FcSystem32W.dll是一个Forcal系统扩展动态库，主要包含一些增强Forcal系统功能的函数和与操作系统有关的函数。

在FcSystem中的函数是通过二级函数命名空间“sys”输出的，所有函数均具有类似“sys::call(...)”的格式。使用!using("sys");可简化FcSystem中的函数访问。

FcSystem32W.dll需要FcData32W.dll的支持，FcData32W.dll要先于FcSystem32W.dll加载。

3 Forcal系统函数 [返回页首]

[返回页首][整数函数、实数函数] sys::comfor(pFcFor,"f(x,y)=x+y",ForType,hModule,&ErrBegin,&ErrEnd)：将Forcal静态字符串编译为表达式

pFcFor：保存Forcal表达式（函数）句柄的FcData数据指针。由pFcFor=new[sys::fcfor]申请 的对象，不用时用delete[pFcFor]销毁；在oo函数中用sys::fcfor()申请的对象，无需使用delete函数。每次编译前，将销毁pFcFor中原先保存的表达式。
"f(x,y)=x+y"：Forcal表达式（函数）。必须提供一个函数名，否则无法访问。
ForType：表达式的类型。ForType=1表示整数表达式，ForType=2表示实数表达式，ForType=3表示复数表达式。
hModule：表达式所在模块。如果hModule是一个正数，编译为全局表达式，否则编译为私有表达式。
ErrBegin,ErrEnd：编译出错时返回出错位置。
返回值：错误代码。返回0表示没有错误。
说明：如果表达式编译成功，可以直接调用该表达式。如果要将表达式传给一个函数，需要用HFor(...)函数获得该表达式的句柄。

运行错误：1：指针pFcFor非法；2：非法的Forcal静态字符串地址；3：非法的表达式类型。

[例子1] 该例子需要FcData32W.dll的支持。

> !using("sys"); //使用命名空间sys
> i: !(::pf)= pf=new[fcfor],comfor(pf,"f(x)=x+1",2,100,0,0); //申请保存Forcal表达式句柄的FcData数据指针，然后将Forcal静态字符串编译为全局的实数表达式
> f[5]; //直接调用函数f
> (:y)= call[2,HFor("f"):5:&y],y; //动态调用函数f
> i: (::pf)= delete[pf]; //销毁pf及表达式

[例子2] 该例子需要FcData32W.dll的支持。

> !using("sys"); //使用命名空间sys
> !(::pf)= pf=newr[fcfor],comfor(pf,"f(x)=x+1",2,100,0,0); //申请保存Forcal表达式句柄的FcData数据指针，然后将Forcal静态字符串编译为全局的实数表达式
> f[5]; //直接调用函数f
> (:y)= call[2,HFor("f"):5:&y],y; //动态调用函数f
> (::pf)= delete[pf]; //销毁pf及表达式

[例子3] 该例子需要FcData32W.dll的支持。

> !using("sys"); //使用命名空间sys
> main(:pf,a)=
> oo{pf=fcfor()}, //申请保存Forcal表达式句柄的FcData数据指针，
> comfor(pf,"f(x)=x+1",2,100,0,0), //将Forcal静态字符串编译为全局的实数表达式
> a=HFor("f"), //获得函数f的句柄
> a[5]; //动态调用函数f

[返回页首][整数函数、实数函数] sys::comfors(pFcFor,pStr,ForType,hModule,&ErrBegin,&ErrEnd)：将FcData字符串编译为表达式

pFcFor：保存Forcal表达式（函数）句柄的FcData数据指针。由pFcFor=new[sys::fcfor]申请 的对象，不用时用delete[pFcFor]销毁；在oo函数中用sys::fcfor()申请的对象，无需使用delete函数。每次编译前，将销毁pFcFor中原先保存的表达式。
pStr：FcData字符串指针，包含Forcal表达式（函数）。必须提供一个函数名，否则无法访问。
ForType：表达式的类型。ForType=1表示整数表达式，ForType=2表示实数表达式，ForType=3表示复数表达式。
hModule：表达式所在模块。如果hModule是一个正数，编译为全局表达式，否则编译为私有表达式。
ErrBegin,ErrEnd：编译出错时返回出错位置。
返回值：错误代码。返回0表示没有错误。
说明：如果表达式编译成功，可以直接调用该表达式。如果要将表达式传给一个函数，需要用HFor(...)函数获得该表达式的句柄。

运行错误：1：指针pFcFor或者pStr非法；2：非法的表达式类型。

[返回页首][整数函数、实数函数] sys::testfcfor(pFcFor)：测试fcfor是否有效

pFcFor：保存Forcal表达式（函数）句柄的FcData数据指针。由pFcFor=new[sys::fcfor]或pFcFor=sys::fcfor()申请的对象。
返回值：如果pFcFor包含有效的表达式，返回表达式句柄（该句柄与用HFor(...)函数获得的表达式句柄完全相同），否则返回NULL。如果pFcFor非法，也返回NULL。

[返回页首][整数函数、实数函数] sys::call(ForType,ForHandle : x0,x1,x2,... : &r0,...)：动态调用表达式

ForType,ForHandle：表达式的类型及句柄。ForType=1表示整数表达式，ForType=2表示实数表达式，ForType=3表示复数表达式。
x0,x1,x2,...：表达式参数。调用整数或实数表达式时，参数个数与表达式参数个数相同；调用复数表达式时，参数个数为表达式参数个数的2倍。
&r0,...：表达式的返回值。ForType=1或ForType=2时只有&r0；ForType=3时为&r0,&r1。必须使用引用参数。
说明：表达式调用成功时返回1，否则返回0。

运行错误：1：至少需要3个参数；2：非法的表达式类型；3：调用整数表达式时参数不匹配；4：调用实数表达式时参数不匹配；5：调用复数表达式时参数不匹配；6：非法的表达式句柄。

[例子] 该例子需要FcData32W.dll的支持。

> !using("sys");
> i:a(x)= x=x+1;
> b(x)= x=x+1;
> c:c(x)= x=x+1+i;
> i:(:y)= call[1,HFor("a",1):11:&y],y;
> (:y)= call[1,HFor("a",1):rtoi(11):&y],itor(y);
> i:(:a,b,s)= s=new[string,80,EndType:"22"],StrToFCD[s,real:&a],call[2,HFor("b",2):a:&b],FCDToStr[real:b:s],printff["\r\n结果：{1,s}\r\n",s];
> i:(:a,b,c,d,s)=
> {
> s=new[string,80,EndType:"2-2i"], //申请一个字符串，存放一个复数
> StrToFCD[s,complex:&a,&b], //将复数转换并保存到a,b
> call[3,HFor("c",3):a,b:&c,&d], //调用复数表达式c，返回值保存到c,d
> FCDToStr[complex:c,d:s], //将复数c,d转换为字符串并保存到s
> printff["\r\n结果：{1,s}\r\n",s] //输出字符串s
> };

[返回页首][整数函数、实数函数] sys::rearray(Array)：数组维数反序。
Array：FcData数组指针。
返回值：Array。

运行错误：1：数组指针Array非法。

说明：举例来说，对于三维数组Array[2,3,5]，调用该函数后，将成为Array[5,3,2]。

[返回页首][实数函数] sys::A(array,k1,k2,... ... : x)：设置或获得多维数组元素的值

设置多维实数数组array的元素k1,k2,... ... 的值为x，返回array。若缺省x，则获得多维实数数组array的元素k1,k2,... ... 的值。
该函数可能返回如下运行错误：1：至少需要2个参数；2：无效的数组指针；3：数组维数错误；4：数组维数非法。

[返回页首][实数函数] sys::SA(array,&k,x1,x2,... ...)：将多维数组视为一维数组，设置多个数组元素

将数值x1,x2,... ...在多维实数数组array（数组元素按行存放）中从地址k开始连续存放。地址k使用取地址操作符&时返回下一个存放地址，因此可以连续使用该函数在同一数组中存放若干数值。返回array。
该函数可能返回如下运行错误：1：至少需要2个参数；2：无效的数组指针；3：数组元素地址错误；4：数组元素个数不够。

[返回页首][实数函数] sys::GA(array,&k,&x1,&x2,... ...)：将多维数组视为一维数组，获得多个数组元素

从多维实数数组array（数组元素按列存放）中地址k开始连续取数组元素存放在变量x1,x2,... ...中。地址k及变量x1,x2,... ...前须用取地址操作符&，否则不能返回值。地址k使用取地址操作符&时返回下一个数组元素地址，因此可以连续使用该函数在同一数组中取若干数值。返回array。
该函数可能返回如下运行错误：1：至少需要2个参数；2：无效的数组指针；3：数组元素地址错误；4：数组元素个数不够。

[返回页首][整数函数、实数函数] sys::setnn(array,x1,x2,... ...)：设置静态整数（实数）数组元素的值

将数值x1,x2,... ...在静态整数（实数）数组array中连续存放。返回array。
该函数可能返回如下运行错误：1：至少需要1个参数；2：数组元素地址错误。

[返回页首][整数函数、实数函数] sys::getnn(array,&x1,&x2,... ...)：获得静态整数（实数）数组元素的值

从静态整数（实数）数组array中连续取数组元素存放在变量x1,x2,... ...中。返回array。
该函数可能返回如下运行错误：1：至少需要1个参数；2：数组元素地址错误。

4 操作系统函数 [返回页首]

[返回页首][整数函数、实数函数] sys::clock()：获取流逝过去的时钟脉冲数。

[返回页首][整数函数] sys::ShellExecute(hwnd,"lpOperation","lpFile","lpParameters","lpDirectory",nShowCmd)：执行外部程序函数
hwnd：窗口句柄，一般为null(0)；
lpOperation：指定本命令所要执行的动作；
lpFile：指定本命令所要操作的文件；
lpParameters：指定操作文件时所使用的参数；
lpDirectory：指定本命令所使用的缺省路径；
nShowCmd：显示方式。

运行错误：1：指定的字符串不存在。

例子：该例子需要FcData32W.dll的支持。

打开一个应用程序：i: sys::ShellExecute(null(0),"open","calc.exe","","",0);
打开一个网页：i: sys::ShellExecute(null(0),"open","http://blog.csdn.net/forcal","","",0);
用系统打印机打印文档：i: sys::ShellExecute(null(0),"print","openfc.ini","","",0);
查找文件：i: sys::ShellExecute(null(0),"find","","","",0);

版权所有© Forcal程序设计 2002-2010，保留所有权利
E-mail: forcal@sina.com QQ：630715621
最近更新: 2011年05月13日