calculation and UI scripting manual
(taoism 3 版)
使用说明
Snooper taoism 2的界面脚本是指用文本工具编写的、简单易用、可嵌套使用多种常见算法、实现不同逻辑组合、可在线动态升级、快速搭建数据处理界面的一种脚本语言。
Snooper taoism 2 的界面脚本功能比较简单,主要针对算法使用,不涉及复杂控制逻辑。
Snooper 界面脚本完全是unicode表现,使用非unicode字符时必须使用函数转换。
界面脚本与常规脚本不兼容,且有很多函数类似,使用时要特别小心。
本手册中涉及的软件是Snooper taoism 2软件0.0.3.9版及以上版本。
calculation and UI scripting manual
0.0.3.9----在界面脚本中加入简单的流程控制功能,支持了简单的标号。
未经说明,本文档中所有的数值都是16进制形式,比如E9表示值为0xe9的数值的16进制数。
点击或
,则可弹出辅助计算工具菜单,内置了部分算法组合,可显示输入参数与输出结果,英文版菜单如下
user 01 – 08供用户自己编写界面脚本,界面脚本可以完成各种逻辑算法的逻辑组合,尤其适用于各种需要人工计算、核验数据的情况。
l
n 界面脚本中mac的长度,一般是4或8,默认是4.
n 是否显示函数调用名称和内部执行过程
n 是否显示函数调用过程和最终结果
n 是否用C格式输出最终结果(输出结果不能被再次使用)
两个相连的斜杠//后面的字符被认为是注释,注释用于解释该程序是做什么的。//后面的的字符序列在编译时被忽略掉,它们可以在程序中自由地使用,目的是为了使程序更易于理解。注释可以出现在任何空格、制表符或换行符可以出现的地方。
界面脚本语言不支持块注释。
变量无类型,变量实质是自带长度的16进制数据串,界面脚本中变量的值存储界面的控件或在内存中,所有关键字不能作为变量名而保留,不可任意使用。
控件共6种
static
edit
button
check
group
radio
static |
static 控件名称 = “标题” position = 逻辑位置% width = 逻辑宽度% height = 行数 |
edit |
edit 控件名称 filename = “保存文件的名字” position = 逻辑位置% width = 逻辑宽度 height = 行数 |
button |
button 控件名称 = “标题” position = 逻辑位置% width = 逻辑宽度% height = 行数 |
check |
同static |
group |
同static |
radio |
同static |
内存变量只有一种
var
var |
var input |
换行
crlf |
从下一行开始 |
function |
按钮名称 |
|
edit控件 = 内置的函数( 参数,参数… ) |
end function |
|
语句 |
作用 |
string |
表明输出是字符串 |
multiline |
表明输入是按行区分的,否则输入数据会忽略分行 |
assume |
Assume控件名称 is input,当要处理的数据是多行的时候,必须使用此语句指定输入数据源 |
addsrc |
输出结果包含输入内容 |
escape |
字符转义 |
unescape |
字符反转义 |
结果 = 函数(数据) |
结果是edit控件的名称,输入数据可以是控件内容、常量、函数的组合。 |
注:
1. 当处理函数按行区分时,有且只能有一个assume语句指定唯一一个数据源。当处理函数不按行区分时,每行处理语句可以有自己的数据源。
2. 当目标控件为NULL或nothing时,不进行赋值操作。
3. 当输入数据为hex格式时,需要在表达式中使用$ + 控件名称表示,当输入数据当做字符串时,需要在表达式中使用@ + 控件名称表示。
4. 脚本界面不区分大小写
5. 所有输入的hex格式数据不能使用“0x”
6. 所有输入的hex格式数据不能使用“,”
7. 如果选择了C格式输出,因为结果中有“0x”和“,”,使用时要注意。
打开文本编译器,输入如下内容
// 提示控件001 是 控件的名字 “密钥输入处”是要显示的内容 // 此控件从逻辑位置0开始,占满整个宽度,高度为1 static 提示控件001 = "密钥输入处" position = 0% width = 100% height = 1 crlf
|
保存为文本文件,拖动到脚界面工具的User page处,或者通过右键菜单打开
或
效果如下。
继续编辑脚本界面,如下内容
// 提示控件001 是 控件的名字 “密钥输入处”是要显示的内容 // 此控件从逻辑位置0开始,占满整个宽度,高度为1 static 提示控件001 = "密钥输入处" position = 0% width = 100% height = 1 crlf
// 创建一个输入控件,名称为 密钥,另一属性为 “密钥存储文件”,将密钥 // 的内容存储到 “密钥存储文件.txt” 下,下次打开此脚本时,可以自动加载文件的内容 // 其他属性同上 edit 密钥 filename = "密钥存储文件" position = 0% width = 100% height = 3 crlf |
重新加载
加载效果如下
继续编辑脚本界面,如下内容
// 提示控件001 是 控件的名字 “密钥输入处”是要显示的内容 // 此控件从逻辑位置0开始,占满整个宽度,高度为1 static 提示控件001 = "密钥输入处" position = 0% width = 100% height = 1 crlf
// 创建一个输入控件,名称为 密钥,另一属性为 “密钥存储文件”,将密钥 // 的内容存储到 “密钥存储文件.txt” 下,下次打开此脚本时,可以自动加载控件的内容 // 其他属性同上 edit 密钥 filename = "密钥存储文件" position = 0% width = 100% height = 3 crlf
// 输入控件和输出控件 static 提示控件002 = "数据输入处" position = 0% width = 100% height = 1 crlf edit 输入数据 filename = "输入存储文件" position = 0% width = 100% height = 3 crlf
static 提示控件003 = "结果输出处" position = 0% width = 100% height = 1 crlf edit 输出结果 filename = "输出存储文件" position = 0% width = 100% height = 3 crlf
// 声明一个按钮,其基本属性与static相同 button des加密演示 = "des 加密演示 按钮" position = 20 % width = 60% height = 1 crlf
|
加载效果如下
此时按钮因为没有执行函数,所以点击按钮没有任何效果,下面编写按钮响应事件。
// 格式 function 按钮名 function des加密演示 // 结果控件名 = 函数名 数据 // 函数可嵌套 输出结果 = des_encode_ecb( $输入数据, $密钥 ) end function |
在输入框里输入密钥,数据,点击按钮即可执行des加密。
界面脚本的函数可任意嵌套,如图所示,密钥为8字节的aa,数据为20字节的bb,选中主界面上的
这两个按钮,可以显示函数调用原型和调用堆栈。
正面就是选中后的主界面log
//des_encode_ecb ( dup ( int ( 20 ) , bb ) , dup ( int ( 8 ) , aa ) )
//------int
//------ input = 20 hex = 00 00 00 14
//
//--------int
//-------- input = 08 hex = 00 00 00 08
//
//----dup repeat the specified number of times the input data
//---- result = BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB
//
//----dup repeat the specified number of times the input data
//---- result = AA AA AA AA AA AA AA AA
//
//--single des ecb encrypt
//--key = AA AA AA AA AA AA AA AA
//--plain = BB BB BB BB BB BB BB BB cipher = 9B FF 13 C8 DC 46 20 72
//--plain = BB BB BB BB BB BB BB BB cipher = 9B FF 13 C8 DC 46 20 72
//--plain = BB BB BB BB 00 00 00 00 cipher = 8D E2 BC E0 4B 2F 9B D4
//
//-----Final result --- 9B FF 13 C8 DC 46 20 72 9B FF 13 C8 DC 46 20 72 8D E2 BC E0 4B 2F 9B D4
//
脚本界面工具窗口如下