♻️ refactor(playbook): streamline agents and refresh tsl docs

This commit is contained in:
csh
2026-01-10 16:55:44 +08:00
parent b529012c59
commit 5822a8736d
88 changed files with 103561 additions and 130104 deletions
+106 -273
View File
@@ -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。