♻️ refactor(playbook): streamline agents and refresh tsl docs
This commit is contained in:
@@ -105,140 +105,52 @@ tsl --buildexe=TSLDemo01.tsl --output=test01.exe
|
||||
|
||||
Windows命令集
|
||||
|
||||
<table><tbody><tr><td>
|
||||
命令</td><td>
|
||||
功能说明</td><td>
|
||||
备注</td></tr><tr><td>
|
||||
tsl.exe /?</td><td>
|
||||
查看命令列表帮助,或TSL /?</td><td>
|
||||
注意/前有一个空格</td></tr><tr><td>
|
||||
-COMPILE|-COMPILEC [/S] [-S] tslfiename</td><td>
|
||||
将tsl/tsf文件编译为二进制格式文件。
|
||||
-COMPILE命令生成的文件后缀为.TSB
|
||||
- COMPILEC命令生成的文件后缀为.TSC
|
||||
可选项
|
||||
/S:递归模式,即加上该可选命令后,会从子目录中查找该函数。默认只在当前目录下查找。
|
||||
-S:安静模式,不打印执行结果的信息</td><td>
|
||||
默认生成的文件与原文件同目录,如:
|
||||
Tsl -COMPILE TsfDemo01.tsf
|
||||
作用:编译成二进制文件后,函数与脚本照样可以正常调用,可以用于隐藏源代码。</td></tr><tr><td>
|
||||
编译指令</td><td></td><td></td></tr><tr><td>
|
||||
--buildexe=tslfilename</td><td>
|
||||
将指定tsl文件编译成可执行(.exe)文件,默认生成文件名为default.exe,可执行文件默认图标为tsl编译器图标</td><td>
|
||||
</td></tr><tr><td>
|
||||
其可选项</td><td>
|
||||
-buildgui
|
||||
指定编译的可执行文件为Windows UI应用程序</td><td>
|
||||
默认为控制台应用程序</td></tr><tr><td>
|
||||
</td><td>
|
||||
--buildico=xxx.ico
|
||||
指定可执行文件的图标</td><td>
|
||||
默认为TSL.exe的图标</td></tr><tr><td>
|
||||
--buildlib=tsl(tsf)filename</td><td>
|
||||
将指定tsl/tsf文件编译成动态库(.dll)文件</td><td>
|
||||
默认生成文件名为default.dll</td></tr><tr><td>
|
||||
其可选项</td><td>
|
||||
--exports=func1[:exp1][,…]
|
||||
将指定函数名输出在动态库中</td><td>
|
||||
指定多个函数用逗号分割</td></tr><tr><td>
|
||||
--build=tslfilename</td><td>
|
||||
将指定tsl文件编译成.tsg包文件,默认生成文件名为default.tsg</td><td>
|
||||
可以通过函数获取包中资源内容rs:
|
||||
getglobalcache("@@tsl-resource@@",rs)</td></tr><tr><td>
|
||||
编译指令的可选项</td><td>
|
||||
--buildexe|--buildlib|--build通用的可选项</td><td></td></tr><tr><td>
|
||||
--output=filename</td><td>
|
||||
给输出目标指定文件路径与名称</td><td>
|
||||
默认为
|
||||
default.exe|default.dll|default.tsg
|
||||
默认生成在当前路径下</td></tr><tr><td>
|
||||
-strong</td><td>
|
||||
编译所有引用,将所有依赖的引用都进行编译
|
||||
缺省为仅编译调用的</td><td>
|
||||
解决调用了某些动态库不能被检测到的函数。</td></tr><tr><td>
|
||||
--depends=fun1,fun2,…</td><td>
|
||||
指定额外需要编译的函数列表</td><td>
|
||||
多个函数或路径用,分隔</td></tr><tr><td>
|
||||
--dependsdir=dir1,dir2,…</td><td>
|
||||
指定额外需要编译的函数路径</td><td>
|
||||
</td></tr><tr><td>
|
||||
--excludes=fun1,fun2,…</td><td>
|
||||
不编译某些函数</td><td>
|
||||
</td></tr><tr><td>
|
||||
--resourcedir=foldername</td><td>
|
||||
指定编译资源文件目录</td><td>
|
||||
</td></tr><tr><td>
|
||||
--resourcepat=pat1,pat2,…</td><td>
|
||||
指定资源文件的匹配串</td><td>
|
||||
需要搭配--resourcedir=一起使用</td></tr><tr><td>
|
||||
-resourcekeepdir</td><td>
|
||||
资源名保留相对路径</td><td>
|
||||
</td></tr><tr><td>
|
||||
--extresource=filename1
|
||||
[:keyname1],filename2…</td><td>
|
||||
指定额外的资源</td><td>
|
||||
</td></tr><tr><td>
|
||||
运行指令</td><td></td><td></td></tr><tr><td>
|
||||
--runpkg=packagename</td><td>
|
||||
执行包文件</td><td>
|
||||
如:tsl --runpkg=runpkg.tsg</td></tr><tr><td>
|
||||
-eval tslstring</td><td>
|
||||
执行TSL脚本串</td><td>
|
||||
如:tsl -eval “inttostr(100)”</td></tr><tr><td>
|
||||
tslfilename</td><td>
|
||||
执行TSL脚本文件</td><td>
|
||||
如:tsl test.tsl</td></tr><tr><td>
|
||||
其可选项</td><td>
|
||||
-LIBPATH </td><td>
|
||||
扩展函数查找路径</td></tr><tr><td>
|
||||
</td><td>
|
||||
-TESTMULTITHREAD N</td><td>
|
||||
线程调用,N为线程数</td></tr><tr><td>
|
||||
</td><td>
|
||||
-NODEBUGSERVER</td><td>
|
||||
不启用调试服务器</td></tr><tr><td>
|
||||
</td><td>
|
||||
-DEBUGSERVER</td><td>
|
||||
开启调试服务器</td></tr><tr><td>
|
||||
</td><td>
|
||||
-DEBUGPORT port</td><td>
|
||||
指定调试监听端口</td></tr><tr><td>
|
||||
</td><td>
|
||||
-DEBUGLISTEN ip</td><td>
|
||||
指定调试监听地址</td></tr><tr><td>
|
||||
</td><td>
|
||||
-DEBUGTHREADS N</td><td>
|
||||
指定调试用于网络通信的线程数</td></tr><tr><td>
|
||||
</td><td>
|
||||
-WAITATTACH</td><td>
|
||||
运行时等待调试程序连接</td></tr><tr><td>
|
||||
</td><td>
|
||||
-DEBUGLOGIN 1|0</td><td>
|
||||
是否需要进行用户登陆</td></tr><tr><td>
|
||||
</td><td>
|
||||
--data-dir=datapath</td><td>
|
||||
使用指定文件夹中的配置文件</td></tr><tr><td>
|
||||
</td><td>
|
||||
--pkg=pgk1,pkg2…</td><td>
|
||||
加载指定包中的函数</td></tr><tr><td>
|
||||
其它指令</td><td></td><td></td></tr><tr><td>
|
||||
-ENCODE configstring</td><td>
|
||||
生成加密串</td><td>
|
||||
用于数据库配置串加密</td></tr><tr><td>
|
||||
-ENCODEDEBUGPASS</td><td>
|
||||
生成密码串的加密串</td><td>
|
||||
用于远程调试配置中密码的加密</td></tr></tbody></table>
|
||||
| 命令 | 功能说明 | 备注 |
|
||||
| --- | --- | --- |
|
||||
| tsl.exe /? | 查看命令列表帮助,或TSL /? | 注意/前有一个空格 |
|
||||
| -COMPILE\|-COMPILEC [/S] [-S] tslfiename | 将tsl/tsf文件编译为二进制格式文件。<br>-COMPILE命令生成的文件后缀为.TSB<br>- COMPILEC命令生成的文件后缀为.TSC<br>可选项<br>/S:递归模式,即加上该可选命令后,会从子目录中查找该函数。默认只在当前目录下查找。<br>-S:安静模式,不打印执行结果的信息 | 默认生成的文件与原文件同目录,如:<br>Tsl -COMPILE TsfDemo01.tsf<br>作用:编译成二进制文件后,函数与脚本照样可以正常调用,可以用于隐藏源代码。 |
|
||||
| 编译指令 | | |
|
||||
| --buildexe=tslfilename | 将指定tsl文件编译成可执行(.exe)文件,默认生成文件名为default.exe,可执行文件默认图标为tsl编译器图标 | |
|
||||
| 其可选项 | -buildgui<br>指定编译的可执行文件为Windows UI应用程序 | 默认为控制台应用程序 |
|
||||
| | --buildico=xxx.ico<br>指定可执行文件的图标 | 默认为TSL.exe的图标 |
|
||||
| --buildlib=tsl(tsf)filename | 将指定tsl/tsf文件编译成动态库(.dll)文件 | 默认生成文件名为default.dll |
|
||||
| 其可选项 | `--exports=func1[:exp1][,…]`<br>将指定函数名输出在动态库中 | 指定多个函数用逗号分割 |
|
||||
| --build=tslfilename | 将指定tsl文件编译成.tsg包文件,默认生成文件名为default.tsg | 可以通过函数获取包中资源内容rs:<br>getglobalcache("@@tsl-resource@@",rs) |
|
||||
| 编译指令的可选项 | --buildexe\|--buildlib\|--build通用的可选项 | |
|
||||
| --output=filename | 给输出目标指定文件路径与名称 | 默认为<br>default.exe\|default.dll\|default.tsg<br>默认生成在当前路径下 |
|
||||
| -strong | 编译所有引用,将所有依赖的引用都进行编译<br>缺省为仅编译调用的 | 解决调用了某些动态库不能被检测到的函数。 |
|
||||
| --depends=fun1,fun2,… | 指定额外需要编译的函数列表 | 多个函数或路径用,分隔 |
|
||||
| --dependsdir=dir1,dir2,… | 指定额外需要编译的函数路径 | |
|
||||
| --excludes=fun1,fun2,… | 不编译某些函数 | |
|
||||
| --resourcedir=foldername | 指定编译资源文件目录 | |
|
||||
| --resourcepat=pat1,pat2,… | 指定资源文件的匹配串 | 需要搭配--resourcedir=一起使用 |
|
||||
| -resourcekeepdir | 资源名保留相对路径 | |
|
||||
| --extresource=filename1<br>[:keyname1],filename2… | 指定额外的资源 | |
|
||||
| 运行指令 | | |
|
||||
| --runpkg=packagename | 执行包文件 | 如:tsl --runpkg=runpkg.tsg |
|
||||
| -eval tslstring | 执行TSL脚本串 | 如:tsl -eval “inttostr(100)” |
|
||||
| tslfilename | 执行TSL脚本文件 | 如:tsl test.tsl |
|
||||
| 其可选项 | -LIBPATH | 扩展函数查找路径 |
|
||||
| | -TESTMULTITHREAD N | 线程调用,N为线程数 |
|
||||
| | -NODEBUGSERVER | 不启用调试服务器 |
|
||||
| | -DEBUGSERVER | 开启调试服务器 |
|
||||
| | -DEBUGPORT port | 指定调试监听端口 |
|
||||
| | -DEBUGLISTEN ip | 指定调试监听地址 |
|
||||
| | -DEBUGTHREADS N | 指定调试用于网络通信的线程数 |
|
||||
| | -WAITATTACH | 运行时等待调试程序连接 |
|
||||
| | -DEBUGLOGIN 1\|0 | 是否需要进行用户登陆 |
|
||||
| | --data-dir=datapath | 使用指定文件夹中的配置文件 |
|
||||
| | --pkg=pgk1,pkg2… | 加载指定包中的函数 |
|
||||
| 其它指令 | | |
|
||||
| -ENCODE configstring | 生成加密串 | 用于数据库配置串加密 |
|
||||
| -ENCODEDEBUGPASS | 生成密码串的加密串 | 用于远程调试配置中密码的加密 |
|
||||
|
||||
Linux命令集
|
||||
|
||||
<table><tbody><tr><td>
|
||||
命令</td><td>
|
||||
说明</td><td>
|
||||
备注</td></tr><tr><td>
|
||||
TSL /?</td><td>
|
||||
查看命令列表帮助</td><td>
|
||||
注意TSL后有一个空格</td></tr><tr><td>
|
||||
其它命令参考Windows命令集,注意大小写</td><td></td><td></td></tr></tbody></table>
|
||||
| 命令 | 说明 | 备注 |
|
||||
| --- | --- | --- |
|
||||
| TSL /? | 查看命令列表帮助 | 注意TSL后有一个空格 |
|
||||
| 其它命令参考Windows命令集,注意大小写 | | |
|
||||
|
||||
##### 命令集详细解析
|
||||
|
||||
@@ -291,15 +203,10 @@ tsl -COMPILE C:\DoTSL\CompileToExe\TsfDemo01.tsf
|
||||
|
||||
如:被编译的文件TsfFuncB.tsf在C:\DoTSL\CompileToExe\AAA目录下,命令运行当前路径是在C:\DoTSL\CompileToExe\,执行以下操作进行对比:
|
||||
|
||||
<table><tbody><tr><td>
|
||||
执行命令</td><td>
|
||||
结果说明</td></tr><tr><td>
|
||||
默认情况下进行编译
|
||||
命令行:tsl -COMPILE TsfFuncB.tsf</td><td>
|
||||
执行结果:编译失败,找不到目标文件,原因是默认只在当前路径下查找。</td></tr><tr><td>
|
||||
在递归模式下进行编译
|
||||
命令行:tsl -COMPILE /S TsfFuncB.tsf</td><td>
|
||||
执行结果:编译成功,递归模式下,还会在当前目录下的子目录下进行查找。</td></tr></tbody></table>
|
||||
| 执行命令 | 结果说明 |
|
||||
| --- | --- |
|
||||
| 默认情况下进行编译<br>命令行:tsl -COMPILE TsfFuncB.tsf | 执行结果:编译失败,找不到目标文件,原因是默认只在当前路径下查找。 |
|
||||
| 在递归模式下进行编译<br>命令行:tsl -COMPILE /S TsfFuncB.tsf | 执行结果:编译成功,递归模式下,还会在当前目录下的子目录下进行查找。 |
|
||||
|
||||
执行具体表现如下:
|
||||
|
||||
@@ -350,30 +257,19 @@ tsl -COMPILE C:\DoTSL\CompileToExe\TsfDemo01.tsf
|
||||
|
||||
以下是上述Test_GUIexe.tsl文件中的代码,仅供参考。执行下述案例中用到了界面tslvcl工具包。
|
||||
|
||||
```text
|
||||
```tsl
|
||||
uses tslvcl;
|
||||
|
||||
app := initializeapplication();
|
||||
|
||||
app.createform(class(tfm),fm);
|
||||
|
||||
app.createform(class(tfm), fm);
|
||||
fm.show();
|
||||
|
||||
app.run();
|
||||
|
||||
type tfm=class(TVCForm)
|
||||
|
||||
uses tslvcl;
|
||||
|
||||
function Create(AOwner);
|
||||
|
||||
begin
|
||||
|
||||
type tfm = class(TVCForm)
|
||||
uses tslvcl;
|
||||
function Create(AOwner);
|
||||
begin
|
||||
inherited;
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end;
|
||||
end;
|
||||
```
|
||||
|
||||
####### 可选项:--buildico= 指定图标
|
||||
@@ -488,55 +384,34 @@ ExePath
|
||||
|
||||
其中,TestDemo01.tsl?的源代码如下:
|
||||
|
||||
```text
|
||||
```tsl
|
||||
uses TSLUnitDemo01;
|
||||
|
||||
a:=10;
|
||||
|
||||
t:=FuncA(a);
|
||||
|
||||
echo "TSLUnitDemo01.FuncA",t;
|
||||
|
||||
sleep(10*1000);
|
||||
|
||||
a := 10;
|
||||
t := FuncA(a);
|
||||
echo "TSLUnitDemo01.FuncA", t;
|
||||
sleep(10 * 1000);
|
||||
return t;
|
||||
```
|
||||
|
||||
TSLUnitDemo01单元的源代码如下:
|
||||
|
||||
```text
|
||||
Unit TSLUnitDemo01;
|
||||
|
||||
Interface
|
||||
|
||||
```tsl
|
||||
unit TSLUnitDemo01;
|
||||
interface
|
||||
function FuncA(a);
|
||||
|
||||
function FuncB(a);
|
||||
|
||||
Implementation
|
||||
|
||||
implementation
|
||||
function FuncA(a);
|
||||
|
||||
begin
|
||||
|
||||
return a+20;
|
||||
|
||||
return a + 20;
|
||||
end;
|
||||
|
||||
function FuncB(a);
|
||||
|
||||
begin
|
||||
|
||||
a:=TD_Test(a);
|
||||
|
||||
return a*a;
|
||||
|
||||
a := TD_Test(a);
|
||||
return a * a;
|
||||
end;
|
||||
|
||||
Initialization
|
||||
|
||||
FuncA(2);
|
||||
|
||||
FuncA(2);
|
||||
Finalizationend.
|
||||
```
|
||||
|
||||
@@ -613,17 +488,12 @@ Finalizationend.
|
||||
|
||||
Test_resourcepat.tsl中代码如下:
|
||||
|
||||
```text
|
||||
```tsl
|
||||
echo "\r\n";
|
||||
|
||||
echo "Running!!\r\n";
|
||||
|
||||
getglobalcache("@@tsl-resource@@",rs);//获取可执行文件中的所有资源文件信息
|
||||
|
||||
getglobalcache("@@tsl-resource@@", rs); // 获取可执行文件中的所有资源文件信息
|
||||
echo tostn(rs);
|
||||
|
||||
sleep(20 * 1000);
|
||||
|
||||
return 1;
|
||||
```
|
||||
|
||||
@@ -671,17 +541,12 @@ return 1;
|
||||
|
||||
其中Test01_TD.tsl?的源程序如下:
|
||||
|
||||
```text
|
||||
```tsl
|
||||
echo "\r\n";
|
||||
|
||||
echo "Running!!\r\n";
|
||||
|
||||
getglobalcache("@@tsl-resource@@",rs);//获取包中的资源文件信息
|
||||
|
||||
getglobalcache("@@tsl-resource@@", rs); // 获取包中的资源文件信息
|
||||
echo tostn(rs);
|
||||
|
||||
sleep(20 * 1000);
|
||||
|
||||
return 1;
|
||||
```
|
||||
|
||||
@@ -699,11 +564,9 @@ return 1;
|
||||
|
||||
其中,包中目标文件的的源代码如下:
|
||||
|
||||
```text
|
||||
content:="test_runpkg";
|
||||
|
||||
writefile(rwraw(),"","D:\\test\\tslCmdTest\\runpkg\\test_runpkg.txt",0,1000,content);
|
||||
|
||||
```tsl
|
||||
content := "test_runpkg";
|
||||
writefile(rwraw(), "", "D:\\test\\tslCmdTest\\runpkg\\test_runpkg.txt", 0, 1000, content);
|
||||
return 1;
|
||||
```
|
||||
|
||||
@@ -727,70 +590,45 @@ return 1;
|
||||
|
||||
包main.tsg对应的TSL代码如下:
|
||||
|
||||
```text
|
||||
echo evalData(0);
|
||||
|
||||
function evalData(n)
|
||||
|
||||
begin
|
||||
|
||||
```tsl
|
||||
echo evalData(0);
|
||||
function evalData(n)
|
||||
begin
|
||||
data := data();
|
||||
|
||||
ret :=
|
||||
|
||||
ret :=
|
||||
case n of
|
||||
|
||||
0:SumVol(data);
|
||||
|
||||
1:AvgVol(data);
|
||||
|
||||
2:SumAmount(data);
|
||||
|
||||
3:AvgAmount(data);
|
||||
|
||||
0:SumVol(data);
|
||||
1:AvgVol(data);
|
||||
2:SumAmount(data);
|
||||
3:AvgAmount(data);
|
||||
end;
|
||||
|
||||
return ret;
|
||||
|
||||
end
|
||||
end;
|
||||
```
|
||||
|
||||
包data.tsg对应的TSL代码如下:
|
||||
|
||||
```text
|
||||
```tsl
|
||||
function data()
|
||||
|
||||
begin
|
||||
|
||||
return array(
|
||||
|
||||
("StockID":"SZ000002","收盘价":7.79,"成交量":189366181.0,"成交金额":1482908609.8),
|
||||
|
||||
("StockID":"SZ000002","收盘价":7.64,"成交量":145843421.0,"成交金额":1110094218.41),
|
||||
|
||||
("StockID":"SZ000002","收盘价":7.53,"成交量":136469106.0,"成交金额":1027113710.84),
|
||||
|
||||
("StockID":"SZ000002","收盘价":7.77,"成交量":211713302.0,"成交金额":1624520449.34),
|
||||
|
||||
("StockID":"SZ000002","收盘价":7.53,"成交量":159372804.0,"成交金额":1205270122.69),
|
||||
|
||||
("StockID":"SZ000002","收盘价":7.48,"成交量":97780993.0,"成交金额":732008884.19)
|
||||
|
||||
);
|
||||
|
||||
end
|
||||
return array(
|
||||
("StockID":"SZ000002", "收盘价":7.79, "成交量":189366181.0, "成交金额":1482908609.8),
|
||||
("StockID":"SZ000002", "收盘价":7.64, "成交量":145843421.0, "成交金额":1110094218.41),
|
||||
("StockID":"SZ000002", "收盘价":7.53, "成交量":136469106.0, "成交金额":1027113710.84),
|
||||
("StockID":"SZ000002", "收盘价":7.77, "成交量":211713302.0, "成交金额":1624520449.34),
|
||||
("StockID":"SZ000002", "收盘价":7.53, "成交量":159372804.0, "成交金额":1205270122.69),
|
||||
("StockID":"SZ000002", "收盘价":7.48, "成交量":97780993.0, "成交金额":732008884.19)
|
||||
);
|
||||
end;
|
||||
```
|
||||
|
||||
包SumVol.tsg对应的TSL代码如下:
|
||||
|
||||
```text
|
||||
```tsl
|
||||
function SumVol(data)
|
||||
|
||||
begin
|
||||
|
||||
return sum(data[:,"成交量"]);
|
||||
|
||||
end
|
||||
return sum(data[:, "成交量"]);
|
||||
end;
|
||||
```
|
||||
|
||||
###### 生成加密串
|
||||
@@ -910,15 +748,12 @@ TsfFuncA函数的路径如下:
|
||||
|
||||
范例01:查找函数的依赖关系
|
||||
|
||||
```text
|
||||
obj:=Findfunction("stockzf");
|
||||
|
||||
v:=SysGetFuncdepends(obj,2+4+8,v1,v2);
|
||||
|
||||
return array("依赖的函数信息":v,"二进制函数信息":v1,"二进制类信息":v2);
|
||||
```tsl
|
||||
obj := Findfunction("stockzf");
|
||||
v := SysGetFuncdepends(obj, 2 + 4 + 8, v1, v2);
|
||||
return array("依赖的函数信息":v, "二进制函数信息":v1, "二进制类信息":v2);
|
||||
```
|
||||
|
||||
返回结果:
|
||||
|
||||
其中,依赖的函数信息结果截图如下:
|
||||
|
||||
@@ -926,12 +761,10 @@ return array("依赖的函数信息":v,"二进制函数信息":v1,"二进制类
|
||||
|
||||
范例02:查找类相关函数的依赖关系
|
||||
|
||||
```text
|
||||
obj:=Findfunction("getPYStringList");
|
||||
|
||||
v:=SysGetFuncdepends(obj,2+4+8,v1,v2);
|
||||
|
||||
return array("依赖的函数信息":v,"二进制函数信息":v1,"二进制类信息":v2);
|
||||
```tsl
|
||||
obj := Findfunction("getPYStringList");
|
||||
v := SysGetFuncdepends(obj, 2 + 4 + 8, v1, v2);
|
||||
return array("依赖的函数信息":v, "二进制函数信息":v1, "二进制类信息":v2);
|
||||
```
|
||||
|
||||
其中,函数getPYStringList调用了天软内置类THashedStringList。
|
||||
|
||||
Reference in New Issue
Block a user