.平台所有接口，均以UTF-8编码传输数据。UTF-8进UTF-8出。
.所有脚本文件请用UTF-8编码保存（不是UTF-8+）。
.接口info返回服务端状态和系统状态；
.接口ask、www负责应答网页嵌入式脚本
.接口upfile负责formdata方式上传文件的接收（fname单文件，多文件请循环提交），文件保存至upload配置的目录下并返回文件地址，会创建日期目录；
.接口upfile2负责formdata方式上传文件的接收（fname单文件，多文件请循环提交），文件保存至upload配置的目录下并返回文件地址，会创建日期目录；
.接口upcache负责formdata方式上传文件的接收（fname单文件，多文件请循环提交），文件保存至cache临时目录下并返回文件地址，会创建日期目录；
.接口upfiles负责formdata方式上传文件的接收（fpath、fname单文件，多文件请循环提交），文件保存至指定的web路径下并返回文件地址，不会创建日期目录；
.接口restart负责重启服务端，会关闭服务并重启；
.支持上传路径设置，指定url和磁盘路径，在配置文件中设置[Upload]项，仅第一条记录有效；
.支持pascal语法脚本解析；
.支持虚拟目录、默认页和输出类型等设置，请在配置中设置；
.支持中文目录识别和输出；
.支持web服务，静态文本、二进制数据输出；
.支持HOST重定向，301域名转移，针对浏览器，不影响接口；
.支持伪静态页，动态脚本生成伪静态页，以优化搜索引擎的收录；
.支持JavaScript跨域设置；
.支持gzip压缩模式；
.支持IP黑名单设置；
.支持浏览器缓存设置，以时间为单位；
.支持多域名绑定，域名对应不同的脚本目录。


内置函数清单：

1.HTTP HTTP/HTTPS请求转发函数（没有跨域限制）
  (*
    标题：HTTP请求，支持ssl
    格式：http(网址，参数，包头，方法 JSON|SOAP|FILE|GET|POST|DELETE，超时 100毫秒以上，
    __________提交编码格式 65001|936，接收编码格式 65001|936，
    __________提交编码 true|false，接收编码 true|false);
    参数：网址.asText，参数.asText，包头.asText，方法.asText，超时.asInteger，
    ______提交编码格式.asIntegre，接收编码格式.asIntegre，
    ______提交编码.asBoolean，接收编码.asBoolean
    返回：asText
    示例：HTTP('http://offeu.com/utf8.txt','','','GET',10000,65001,65001,false,false);
    HTTP('http://localhost:8833/upfile','fname=file(/data.json)&utt=xxoo','','FILE',10000,65001,65001,false,false);

    caption:HTTP request, support ssl
    format:http(url,params,headers,method JSON|SOAP|FILE|GET|POST|DELETE,
    _______timeout millisecond,requestCoding 65001|936,responseCoding 65001|936,
    _______encoding true|false,decoding true|false);
    params:url.asText,params.asText,headers.asText,method.asText,
    _______timeout.asInteger,requestCoding.asInteger,responseCoding.asInteger,
    _______encoding.asBoolean,decoding.asBoolean;
    result:asText
    example:HTTP('http://offeu.com/utf8.txt','','','GET',10000,65001,65001,false,false);
    HTTP('http://localhost:8833/upfile','fname=file(/data.json)&utt=xxoo','','FILE',10000,65001,65001,false,false);
  *)
2.DBConn/DBExec/DBQuery/DBQueryToJson/DBQueryToTxt/DBQueryToExcel 数据库操作
  (*
    标题：添加数据源（数据库连接源）
    格式：DBConn(数据源名称,连接参数);
    参数：数据源名称.asText,连接参数.asText
    返回：asBoolean
    示例：DBConn('mydb','DriverID=MSAcc;Database=.\db.mdb');
    备注：只允许添加，不覆盖不删除（重启服务时清空），新添加成功才会返回True
    如果覆盖或删除连接的话，会影响并发使用，所以在重启服务时清空会好点。

    caption:Add data source (database connection source)
    format:DBConn(name,params);
    params:name.asText,params.asText
    result:asBoolean
    example:DBConn('mydb','DriverID=MSAcc;Database=.\db.mdb');
    Note: Only allowed to add, do not overwrite does not delete
    (emptied restart the service), the new success will be added to return True.
    If you overwrite or delete the connection, it will affect the concurrent
    use, so it will be better to empty the service restart.
  *)
  (*
    标题：执行SQL语句
    格式：DBExec(数据源,SQL语句[,参数1,...,参数n]);
    参数：数据源.asText,SQL语句.asText
    返回：asBoolean
    示例：DBExec('mydb','update tuser set fuser=:p1 where fid=1','admin');

    caption:Execute SQL statements
    format:DBExec(conn,sql[,P1,...,Pn]);
    params:conn.asText,sql.asText
    result:asBoolean
    example:DBExec('mydb','update tuser set fuser=:p1 where fid=1','admin');
  *)
  (*
    标题：使用SQL语句查询数据库
    格式：DBQuery(数据源,SQL语句[,参数1,...,参数n]);
    参数：数据源.asText,SQL语句.asText
    返回：asDataset
    示例：DBQuery('mydb','select * from tuser where fname=:p1','admin');

    caption:Use SQL statements to query the database
    format:DBQuery(conn,sql[,P1,...,Pn]);
    params:conn.asText,sql.asText
    result:asDataset
    example:DBQuery('mydb','select * from tuser where fname=:p1','admin');
  *)
  (*
    标题：使用SQL语句查询数据库并输出JSON
    格式：DBQueryToJSON(数据源,SQL语句[,参数1,...,参数n]);
    参数：数据源.asText,SQL语句.asText
    返回：asText
    示例：DBQueryToJSON('mydb','select * from tuser where fname=:p1','admin');

    caption:Use SQL statements to query the database and output json
    format:DBQueryToJSON(conn,sql[,P1,...,Pn]);
    params:conn.asText,sql.asText
    result:asText
    example:DBQueryToJSON('mydb','select * from tuser where fname=:p1','admin');
  *)
  (*
    标题：使用SQL语句查询数据库并保存到文本文件
    格式：DBQueryToTxt(数据源,SQL语句[,参数1,...,参数n]);
    参数：数据源.asText,SQL语句.asText
    返回：asText
    示例：DBQueryToTxt('mydb','select * from tuser where fname=:p1','admin');

    caption:Use SQL statements to query the database and save it to a text file
    format:DBQueryToTxt(conn,sql[,P1,...,Pn]);
    params:conn.asText,sql.asText
    result:asText
    example:DBQueryToTxt('mydb','select * from tuser where fname=:p1','admin');
  *)
  (*
    标题：使用SQL语句查询数据库并保存到Excel文件
    格式：DBQueryToExcel(数据源,SQL语句[,参数1,...,参数n]);
    参数：数据源.asText,SQL语句.asText
    返回：asText
    示例：DBQueryToExcel('mydb','select * from tuser where fname=:p1','admin');

    caption:Use SQL statements to query the database and save it to a excel file
    format:DBQueryToExcel(conn,sql[,P1,...,Pn]);
    params:conn.asText,sql.asText
    result:asText
    example:DBQueryToExcel('mydb','select * from tuser where fname=:p1','admin');
  *)
3.URLencode 字符串编码/解码函数
  (*
    标题：URL编码
    格式：URLencode(内容[,编码 65001|936[,是否编码 true|false]]);
    参数：内容.asText,编码.asInteger,是否编码.asBoolean
    返回：asText
    示例：URLencode('123456',65001,true);

    caption:URLencoding
    format:URLencode(content[,encode 65001|936[,encoding true|false]]);
    params:content.asText,encode.asInteger,encoding.asBoolean
    result:asText
    example:URLencode('123456',65001,true);
  *)
4.RegexCheck/Regex 正则表达式取值/校验字符串
  (*
    标题：使用正则表达式验证数据
    格式：RegexCheck(内容,正则表达式);
    参数：内容.asText,正则表达式.asText
    返回：asBoolean
    示例：RegexCheck('I am 18 years old forever','.*');

    caption:Use regular expressions to validate the data
    format:RegexCheck(content,regex);
    params:content.asText,regex.asText
    result:asBoolean
    example:RegexCheck('I am 18 years old forever','.*');
  *)
  (*
    标题：使用正则表达式获取数据
    格式：Regex(内容,正则表达式);
    参数：内容.asText,正则表达式.asText
    返回：asRecord
    示例：Regex('I am 18 years old forever','.*');

    caption:Use regular expressions to get the data
    format:Regex(content,regex);
    params:content.asText,regex.asText
    result:asRecord
    example:Regex('I am 18 years old forever','.*');
  *)
5.JsonToRecord/RecordToJson/JsonRead/JsonSave Json与Record互转，Json文件读取与保存
  (*
    标题：Json字符串转Record记录集
    格式：JsonToRecord(内容);
    参数：内容.asText
    返回：asRecord
    示例：JsonToRecord('{"name": "文森特","sex": "男"}');

    caption:Json string to Record set
    format:JsonToRecord(json);
    params:json.asText
    result:asRecord
    example:JsonToRecord('{"name": "Vincent","sex": "male"}');
  *)
  (*
    标题：Record记录集转Json字符串
    格式：RecordToJson(记录集);
    参数：记录集.asRecord
    返回：asText
    示例：RecordToJson(JsonToRecord('{"name": "文森特","sex": "男"}'));

    caption:Record set to Json string
    format:RecordToJson(Record);
    params:Record.asRecord
    result:asText
    example:RecordToJson(JsonToRecord('{"name": "Vincent","sex": "male"}'));
  *)
  (*
    标题：读取文件（json格式）并转换成记录集
    格式：JsonRead(文件名);
    参数：文件名.asText
    返回：asRecord
    示例：JsonRead('/up/data.json');

    caption:Read the file(json format) and converted into a record set
    format:JsonRead(filename);
    params:filename.asText
    result:asRecord
    example:JsonRead('/up/data.json');
  *)
  (*
    标题：Json字符串保存到文件
    格式：JsonSave(json内容,文件名);
    参数：json内容.asText,文件名.asText
    返回：asBoolean
    示例：JsonSave('{"a":"b"}','/up/data.json');
    备注：web路径必需/开头，结尾不能有/，不允许使用..\，web路径与host设置有关

    caption:Json string saved to the file
    format:JsonSave(json,filename);
    params:json.asText,filename.asText
    result:asBoolean
    example:JsonSave('{"a":"b"}','/up/data.json');
    Note: web path required / beginning, end can not /, not allowed to use .. \,
    web path and host settings related.
  *)
6.UnicodeToAnsi Unicode转换成中文
  (*
    标题：将unicode转换成中文
    格式：UnicodeToAnsi(unicode内容);
    参数：unicode内容.asText
    返回：asText
    示例：UnicodeToAnsi('{"name":"\u59d3\u540d","sex":"\u6027\u522b"}');

    caption:Convert unicode to Chinese
    format:UnicodeToAnsi(unicode);
    params:unicode.asText
    result:asText
    example:UnicodeToAnsi('{"name":"\u59d3\u540d","sex":"\u6027\u522b"}');
  *)
7.Base64ToFile 将base64编码后的文件解码并保存成文件，返回文件名
  (*
    标题：base64解码到文件
    格式：Base64toFile(base64内容,文件名);
    参数：base64内容.asText,文件名.asText
    返回：asText

    caption:base64 decoding to file
    format:Base64toFile(unicode);
    params:base64.asText,filename.asText
    result:asText
    example:
    $f:=Base64ToFile('iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAACz0lEQVQ4jXVUz2sTQRh9s7M/kiba'
    +'1KZSCq0HCQgteLMexINUL6KCIngQpFLBg/+A3kTPIiheFJGi4klPKl6sF7G11Wqp1FKkbWKsSW2y'
    +'TTfNZrM74+xOzKatHfKYH+R7+77vfTOkWq1ybBo/F6cwOfoM8zNvYRWyqJSKYDUPED/CDXT3HseZ'
    +'SzfR2Z1qxKyWqiCO4zTIOOf4/GEYlrmAzPc3yGemARcBSfO8vs4Rj7RgYOgu9h85F8QWijZU27Yb'
    +'7F8/DiOqE2Smn8AuFbDT0AG1TkTrswJEwRGjHibuXwb1XPQdPQ/PZSC5XC5Qll14j4r5DempR3DK'
    +'pgzcBopQGKdKsHZFYodvjMCN7JHKGPOw9OMVUJ4FdcuIUk3kjG3hi0wYFIpYcMIx9/g6egYfSLKV'
    +'pS9QaxlU1+YRoSIvJtPZAiJBFYKdqgq1vrdn3qG4lIVaqVRQ+j0GpZKDHhQoDArQPIj0ICZS9Ml0'
    +'Rf6BR2NIT45IMtfKIOJY4uO0bmsTGlZLcM93UhNkGgxG5LmhYjE9J8k8uwziKfKzPhjCddMZF4gI'
    +'NSpT0aoaUF0i0xfOUtsRparV4LEdcKs+mbLROQ8b9sT1U6SiGBQaMUL1jjAx2QlF13VoiT5oXg06'
    +'0SWUOshGaAK2Q5EUNQITPcj1YGarZbB9/VC7urrgJk+gmn+KWEtcqqj9p7/qZy2EoiNiyDMmla1F'
    +'dyO2txdqKiXvV8EcQlv6hci/LQzeDm5oDlv+BX7hmtiSoHzBaO2/gqKbFPl7MoV/4JuApvVaBWbq'
    +'ABIDp0BVJSRTRLPGTz+EWRa9ZllhANuGaLmAwq4eJK7eEs4IhwUZYYwFgv0XI5AtLu7q69vQJ54j'
    +'FmsXvdAeumwL1fk8rKIF9+QgEmcvNtpwdCwL8mdFvCd8y5MmrpaJ9fGXILOfQMyiICTg8Q6g9yBi'
    +'h45B8x2tD/8tu3NvHH8B9EZlK6ozLtkAAAAASUVORK5CYII=',formatdatetime('yyyyMMddhhmmsszzz".jpg"',now));
    if $f<>'error' then begin
    'File saved successfully, the file name is:'$f;' <img src="'$f'">'
    end else begin
    'File save failed.';
    end;
  *)
8.CAPTCHA 验证码图片生成（data:image/jpeg;base64）
  (*
    标题：生成验证码图片数据(base64)
    格式：captcha(内容35汉字以内[,品质100~20])
    参数：内容.asText,品质.asInteger
    返回：asText
    示例：captcha('abc123ABC',100);

    caption:Generate captcha image data (base64)
    format:captcha(content[,quality]);
    params:content.asText,quality.asInteger
    result:asText
    example:captcha('abc123ABC',100);
  *)
9.QRCode 二维码生成（data:image/jpeg;base64）
  (*
    标题：生成二维码图片数据(base64)
    格式：qrcode(内容1210字母数值605汉字以内[，品质100~20，[放大倍数]]);
    参数：内容.asText,品质.asInteger,倍数.asInteger
    返回：asText
    示例：qrcode('abc123ABC',100,2);

    caption:Generate QRCode image data (base64)
    format:qrcode(content[,quality[,multiple]]);
    params:content.asText,quality.asInteger,multiple.asInteger
    result:asText
    example:qrcode('abc123ABC',100,2);
  *)
10.GetDirList/GetDirFile/GetFileList/CopyFile/DeleteFile/MakeDir/RemoveDir/FileExists/DirectoryExists/
   FileSize/FileDateTime/DirDateTime 文件操作相关函数
  (*
    标题：获取目录列表，不包括子目录
    格式：GetDirList(路径);
    参数：路径.asText
    返回：asArray
    示例：GetDirList('/');

    caption:Get a list of directories, excluding subdirectories
    format:GetFileList(path);
    params:path.asText
    result:asArray
    example:GetFileList('/');
  *)
  (*
    标题：获取文件列表，不包括子目录下的文件
    格式：GetDirFile(路径);
    参数：路径.asText
    返回：asRecord.asArray['r']
    示例：GetDirFile('/');

    caption:Get a list of files, excluding files in subdirectories
    format:GetDirFile(path);
    params:path.asText
    result:asRecord.asArray['r']
    example:GetDirFile('/');
  *)
  (*
    标题：获取文件列表，包括子目录下的文件
    格式：GetFileList(路径);
    参数：路径.asText
    返回：asRecord.asArray['r']
    示例：GetFileList('/');

    caption:Get a list of files, including files in subdirectories
    format:GetFileList(path);
    params:path.asText
    result:asRecord.asArray['r']
    example:GetFileList('/');
  *)
  (*
    标题：复制文件，比如将 /a.txt 复制到 /doc/a.txt
    格式：CopyFile(源文件，目标文件);
    参数：路径.asText
    返回：asBoolean
    示例：CopyFile('/cache/a.jpg','/up/a.jpg');
    备注：不会创建目录，如果目标目录不存在，会复制失败

    caption:copy file
    format:CopyFile(Source,target);
    params:Source.asText,target.asText
    result:asBoolean
    example:CopyFile('/cache/a.jpg','/up/a.jpg');
    Note: The directory will not be created, and if the target directory does
    not exist, replication will fail
  *)
  (*
    标题：删除指定文件
    格式：DeleteFile(文件名);
    参数：文件名.asText
    返回：asBoolean
    示例：DeleteFile('/up/a.png');

    caption:Delete the specified file
    format:DeleteFile(filename);
    params:filename.asText
    result:asBoolean
    example:DeleteFile('/up/a.png');
  *)
  (*
    标题：创建目录
    格式：MakeDir(目录名);
    参数：目录名.asText
    返回：asBoolean
    示例：MakeDir('/up/aaa');

    caption:Create a directory
    format:MakeDir(dir);
    params:dir.asText
    result:asBoolean
    example:MakeDir('/up/aaa');
  *)
  (*
    标题：删除指定目录
    格式：RemoveDir(路径);
    参数：路径.asText
    返回：asBoolean
    示例：RemoveDir('/up/aaa');

    caption:Delete the specified directory
    format:RemoveDir(path);
    params:path.asText
    result:asBoolean
    example:RemoveDir('/up/aaa');
  *)
  (*
    标题：判断文件是否存在
    格式：FileExists(路径);
    参数：路径.asText
    返回：asBoolean
    示例：FileExists('/up/a.png');

    caption:Judge whether the file exists
    format:FileExists(filename);
    params:filename.asText
    result:asBoolean
    example:FileExists('/up/a.png');
  *)
  (*
    标题：判断路径是否存在
    格式：DirectoryExists(路径);
    参数：路径.asText
    返回：asBoolean
    示例：DirectoryExists('/up/aaa');

    caption:Judge whether the path exists
    format:DirectoryExists(path);
    params:path.asText
    result:asBoolean
    example:DirectoryExists('/up/aaa');
  *)
  (*
    标题：获取文件大小
    格式：FileSize(文件名);
    参数：文件名.asText
    返回：asLargeInt Int64
    示例：FileSize('/up/a.png');

    caption:Get the file size
    format:FileSize(filename);
    params:filename.asText
    result:asLargeInt Int64
    example:FileSize('/up/a.png');
  *)
  (*
    标题：获取文件日期时间
    格式：FileDateTime(文件名);
    参数：文件名.asText
    返回：asDateTime
    示例：FileDateTime('/up/a.png');

    caption:Get the file date and time
    format:FileDateTime(filename);
    params:filename.asText
    result:asDateTime
    example:FileDateTime('/up/a.png');
  *)
  (*
    标题：获取目录日期时间
    格式：DirDateTime(目录名);
    参数：目录名.asText
    返回：asDateTime
    示例：DirDateTime('/up');

    caption:Get the Directory date and time
    format:DirDateTime(path);
    params:path.asText
    result:asDateTime
    example:DirDateTime('/up');
  *)
11.Include 包含一个外部脚本文件，返回该脚本文件的执行结果
  (*
    标题：加载脚本文件，返回该脚本文件的执行结果
    格式：Include(文件名);
    参数：文件名.asText
    返回：asText
    示例：Include('admin\login.api');

    caption:Load the script file and return the execution result of the script file
    format:Include(filename);
    params:filename.asText
    result:asText
    example:Include('admin\login.api');
  *)
12.MergePng 合并多个png文件成一个jpg文件
  (*
    标题：合并png图片并输出图片数据（base64）
    格式：MergePng(品质,宽,高,目标文件,源文件1[,源文件2,...,源文件n]);
    参数：品质.asInteger,宽.asInteger,高.asInteger,目标文件.asText,源文件.asText
    返回：asText data:image/jpeg;base64,....
    示例：MergePng(100,2048,1536,'abc.jpg','c:\1.jpg','c:\2.jpg');

    caption:Merge png pictures and output picture data (base64)
    format:MergePng(quality,width,height,objFile,srcFile1[,srcFile2,...,srcFileN]);
    params:quality.asInteger,width.asInteger,height.asInteger,
    _______objFile.asText,srcFile1.asText
    result:asText data:image/jpeg;base64,....
    example:MergePng(100,2048,1536,'abc.jpg','c:\1.jpg','c:\2.jpg');
  *)
13.GetMachineInfo 用于获取软硬件信息，如BIOS信息、UUID编码、CPU信息、计算机名、Win系统GUID等信息
  (*
    标题：用于获取软硬件信息，如BIOS信息、UUID编码、CPU信息、计算机名、Win系统GUID等信息
    格式：GetMachineInfo;
    参数：
    返回：asText
    示例：GetMachineInfo;
    备注：UUID不变，重装系统不影响，支持win和mac；CPUID同批次相同；Win系统GUID重装系统后会变。

    caption:Used to obtain hardware and software information
    format:GetMachineInfo;
    params:
    result:asText
    example:GetMachineInfo;
    Note: UUID unchanged, reinstall the system does not affect win and mac;
    CPUID the same batch; Win system GUID reinstall the system will change.
  *)
14.UnZip 解压zip文件
  (*
    标题：解压zip文件
    格式：UnZip(文件名,路径);
    参数：文件名.asText,路径.asText
    返回：asText {"result":"success or error","msg":""}
    示例：UnZip('/up/abc.zip','/up');

    caption:Unzip the zip file
    format:UnZip(filename,path);
    params:filename.asText,path.asText
    result:asText {"result":"success or error","msg":""}
    example:UnZip('/up/abc.zip','/up');
  *)
15.Exit/Error 停止执行后续脚本并返回信息，Error是抛出异常并停止执行后续脚本，Exit是抛出提示并停止执行后续脚本
  (*
    标题：退出当前脚本，输出提示
    格式：Exit(内容);
    参数：内容.asText
    返回：rtc_Text Exit('abc') 返回 abc
    示例：Exit('abc');
    注意：函数前面的内容会正常执行，变量有效，执行结果可以用这个函数输出

    caption:Exit the current script, the output prompt
    format:Exit(content);
    params:content.asText
    result:rtc_Text Exit('abc') result abc
    example:Exit('abc');
    Note: The contents of the front of the function will be executed normally,
    the variable is valid, the execution result can be output by this function
  *)
  (*
    标题：退出当前脚本，输出提示
    格式：Error(内容);
    参数：内容.asText
    返回：rtc_Text Error('abc') 返回 {"result":"error","msg":"abc"}
    示例：Error('abc');
    注意：函数前面的内容会正常执行，变量有效，执行结果可以用这个函数输出

    caption:Exit the current script, the output prompt
    format:Error(content);
    params:content.asText
    result:rtc_Text Error('abc') result {"result":"error","msg":"abc"}
    example:Error('abc');
    Note: The contents of the front of the function will be executed normally,
    the variable is valid, the execution result can be output by this function
  *)
16.微信接口相关
  (*
    标题：微信消息加密
    格式：WxEncryptMsg(sMsg,sToken,sCorpid,sEncodingAESKey);
    参数：参数.asText (所有参数均为文本)
    返回：asText

    caption:Weixin Encrypt Msg
    format:WxEncryptMsg(sMsg,sToken,sCorpid,sEncodingAESKey);
    params:param.asText
    result:asText
  *)
  (*
    标题：微信消息解密
    格式：WxDecryptMsg(sToken,sTimestamp,sNonce,sMsgEncrypt,
    sMsg_signature,sCorpid,sEncodingAESKey);
    参数：参数.asText (所有参数均为文本)
    返回：asText

    caption:Weixin Decrypt Msg
    format:WxDecryptMsg(sToken,sTimestamp,sNonce,sMsgEncrypt,
    sMsg_signature,sCorpid,sEncodingAESKey);
    params:param.asText
    result:asText
  *)
17.计划任务相关
  (*
   标题：获取计划任务状态
   格式：TaskInfo
   参数：无
   返回：asText
   示例：taskinfo;

   caption:Get scheduled task status
   format:taskinfo
   params:
   result:asText
   example:taskinfo;
  *)
  (*
   标题：暂停计划任务（挂起）
   格式：TaskPause(任务编号,是否挂起);
   参数：任务编号.asInteger,是否挂起.asBoolean
   返回：asBoolean;
   示例：taskpause(true);

   caption:Pause scheduled task(Suspended)
   format:TaskPause(TaskID,Suspended);
   params:TaskID.asInteger,Suspended.asBoolean;
   result:asBoolean;
   example:taskpause(true);
  *)
  (*
   标题：加载计划任务
   格式：TaskLoad(任务编号,脚本文件);
   参数：任务编号.asInteger,脚本文件.asText
   返回：asBoolean;
   示例：taskload(0,'test.api');

   caption:Load scheduled task
   format:TaskPause(TaskID,ScriptFileName);
   params:TaskID.asInteger,ScriptFileName.asText;
   result:asBoolean;
   example:taskload(0,'test.api');
  *)
18.哈希算法相关
  (*
    标题：哈希算法
    格式：HASH(内容,算法[,输出格式]);
    参数：文本,文本(MD5,SHA1,SHA224,SHA256,SHA384,SHA512,SHA512_224,SHA512_256)[,文本(Hex/Base64)]
    返回：文本
    示例：hash('123456','md5','hex');

    caption:Hash algorithm
    format:HASH(content,algorithm[,format]);
    params:Text,Text(MD5,SHA1,SHA224,SHA256,SHA384,SHA512,SHA512_224,SHA512_256)[,Text(Hex/Base64)]
    result:Text
    example:hash('123456','md5','hex');
  *)
  (*
    标题：哈希密钥算法
    格式：HMAC(内容,密钥,算法[,输出格式]);
    参数：文本,文本,文本(MD5,SHA1,SHA224,SHA256,SHA384,SHA512,SHA512_224,SHA512_256)[,文本(Hex/Base64)]
    返回：文本
    示例：hmac('123456','key','md5','hex');

    caption:hmac hash algorithm
    format:HMAC(content,key,algorithm[,format]);
    params:Text,Text,Text(MD5,SHA1,SHA224,SHA256,SHA384,SHA512,SHA512_224,SHA512_256)[,Text(Hex/Base64)]
    result:Text
    example:hmac('123456','key','md5','hex');
  *)
19.执行外部程序并捕获结果
  (*
    标题：执行CMD并返回结果
    格式：RunCMD(指令);
    参数：文本
    返回：文本
    示例：RunCMD('dir /ad c:\');

    caption:Execute CMD and return results
    format:RunCMD(command);
    params:Text
    result:Text
    example:RunCMD('dir /ad c:\');
  *)

n.其它函数
  Length		返回字符串长度			<?length('12345')?>
  Trim			清空字符串左右空格		<?trim(' abc ')?>
  Now			获取当前日期时间		<?formatdatetime('yyyy-MM-DD hh:mm:ss.zzz',now);?>
  StrToDatetime		字符串转日期类型		<?formatdatetime('yyyy-MM-DD hh:mm:ss.zzz',StrToDatetime('2019-01-01 00:00:00'));?>
  FormatDateTime	格式化日期			<?formatdatetime('yyyy-MM-DD hh:mm:ss.zzz',now);?>
  FormatFloat		格式化数值			<?formatfloat('#,##0.#0',555.55);?>
  FormatCapacity	格式化容量显示			<?formatcapacity(1024);?>
  Pos			定位字符在字符串中的位置	<?copy('abcdefg',pos('e','abcdefg'),2);?>
  Copy			从指定位置复制指定数量的字符串	<?copy('abcdefg',pos('e','abcdefg'),2);?>
  Sort			对字符串进行排序		<?sort('a','c','d');?>
  Split			对字符串进行拆分		<?split('a,c,d',',');?>
  Log			记录日志信息到日志目录下	<?log('测试','服务日志');?>
  AES			对字符串进行AES编码		<?AES('123456','key',true,128,true);?>//最后一参数为假则解密，第三个是否是ECB模式
  DES			对字符串进行DES编码		<?DES('123456','key',true);?>//最后一参数为假则解密
  BlowFish		对字符串进行BlowFish编码	<?BlowFish('123456','key',true,'ECB','Hex');?>
  BASE64		对字符串进行BASE64编码		<?base64('123456',true);'|'base64('MTIzNDU2',false);?>
  FileSHA1		获取文件SHA1编码		<?FileSHA1('/up/a.png');?>
  MD5			对字符串进行MD5编码		<?md5('123456');?>
  FileMD5		获取文件MD5编码			<?FileMD5('/up/a.png');?>
  StrToFloat		将字符串转换成浮点型		<?StrToFloat('55.55');?>
  Trunc			取浮点型整数部分，不四舍五入	<?Trunc(55.55);?>
  ABS			取浮绝对值			<?ABS(-100.55);?>
  Random		获取随机数			<?Random(100);?>
  LowerCase		字母转小写			<?LowerCase('TEST');?>
  UpperCase		字母转大写			<?UpperCase('test');?>
  QuotedStr		字符串两边添加单引号		<?QuotedStr('test');?>
  Replace		替换指定内容，支持正则		<?Replace('我是一只来自北方的狼！','(?<=一)只(?=来)','匹')?>
  Sleep			休眠指定毫秒时间		<?Sleep(1000);?>
  Timestamp		获取Unix时间戳			<?Timestamp;?>
  TimestampToDateTime	将Unix时间戳还原成日期类型	<?FormatDateTime('yyyy-MM-DD hh:mm:ss',TimestampToDateTime(Timestamp));?>
  GetPort		获取当前开启的服务端口		<?GetPort;?>
  Snowflake		获取唯一id			<?Snowflake(1);?>

