欢迎访问 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日