- 为批处理实现高效彩色显示的小com程序(彩色显示引擎)
-
- ********* 所有功能已经在 xp3和win7 下通过测试 ***********
-
- ::////////////////////////////////////////////////////
- :: syxq.com 使用方用和特殊显示语法定义规则
- ::
- :: 调用方法: syxq <[变量名] [变量名] [变量名] ....>
- :: syxq.com 会根据指定的变量名,找到变量值,再解释其中的语句
- :: 变量值的语法如下:
- :: 第一个为功能代号:可以是0,1,2
- ::
- :: 功能0, 把当前光标转到指定行列,例如(光标转到10行30列):
- :: set cur=010$30
- :: syxq.com cur
- ::
- ::
- ::
- :: 功能1,sybc 功能
- :: 作用:在一行(无分号)或多行(有分号)或不连续位置(有分号冒号)输出
- ; "$" 颜色 读取一个坐标颜色信息执行
- ; ";" 换行 到下一行,与最后一次指定位置的列相同
- ; "#" 跳过 仅改变颜色,不修改所在位置的原内容
- ; ";:" 从新指定行列位置,
- ; ";@" 后定义鼠标有效点击区
- @14550207L03 定义了点击左键有效
- @14550207R08 定义了点击右键有效
- "/"后的字符为普通字符
-
- 10进制 ;:1122$33文本 :号 后为数字
- 16进制 ;:H1122$H3F文本 :号 后大写H
- syxq变量 ;::1122$33文本 :后 为:号
- 变量取值 ;:XXYY$MM文本 :后 为非数字,及以上字符为变量
-
-
- 如:
- set sybc=1TEST;:1505$H3E[test1];:1530$H3E[test2];:1455$H3E[-----];[test3];[-----];@15050007L01;@15300007L02;@14550207L03;@14550207R08;
- set key=5
- syxq sybc key
- ::
- ::
- ::
- :: 功能2, 在指定行列开始显示指定的颜色C的字符串,不影响光标位置
- :: 单个变量可以指定多项,项与项间用{}分开
- :: 例如(在5行7列开始显示蓝底白字31(16进制为:1f)的字符串“BAT高速彩显”)
- :: set str=25$7$31$BAT高速彩显
- :: syxq.com str
- :: 功能2连用:set str=25$7$31$BAT高速彩显{}8$4$86$Code By Netbenton
-
-
- ************* 以下是 syxq.com 功能2增强 详细使用说明 ***************************
-
- 内部,寄存器,dh:行,dl:列,bh:画板色,bl:当前颜色(前景在低4位,背景在高4位)
-
- 在格式串 “25$7$31$BAT高速彩显” 中,2为功能号,5为行,7为列,31为画板色,
- “BAT高速彩显”为要显示的字符串
-
-
- 一.1 显示字符串,不处理串内的所有功能字符
-
- /# 以/#后的字符作为界线,取消字符串的功能,如:/#:333:
-
- /@ 以/@后的字符作为界线,取消字符串的功能,并仅输出颜色 /@:333:
-
- /- 以/-后的字符作为界线,取消字符串的功能,并仅输出字符 /-:333:
-
-
- 一.2
-
- 一.2.1 /~0?x1.y1-x2.y2$ 保存x1.y1 到 x2.y2 的屏幕信息 (已完成)
- /~1?x1.y1-x2.y2$ 恢复x1.y1 到 x2.y2 的屏幕信息
- 一.2.2
- /~xx#0 重复xx 次 0 改变颜色
- 一.2.3
- /~xx@0 重复xx 次 0 仅输出颜色
- 一.2.4
- /~xx-0 重复xx 次 0 仅输出字符
-
- 一.2.5 大写的G
- /Gxx? 喇叭发声频率值为:xx
- /GI 初始化
- /GB 让机箱喇叭开始发声
- /GE 让机箱喇叭停止发声
-
-
- 一.3 跟其它,表示后面的作为特殊字符处理。
- // /{ /} /[ /] /; /, /?
-
-
-
-
- 二、 {HxxG...} 语法每个功能以{开始,以}结束,可以层层嵌套,如:{2${4~字符}}
-
- {HxxG...} { 跟 "H"表示16进制,G表示功能符号
- {xxG... } { 跟 数字表示10进制,G表示功能符号
- {{xx}G... } { 跟{xx} 表示取变量xx的值,作为数值
-
-
- 二.1 代表的功能符有:
- {xx$...} n下N行(dh+N) Dwon ;push dx
- {xxU...} u上N行(dh-N) Up ;push dx
- {xxL...} L左N列(dl+N) Left ;push dx
- {xx~...} R右N列(dl-N) Right ;push dx
- {xx@...} @改颜色 ;push bx
- {xx-...} -改前景色 ;push bx
- {xx+...} +改背景色 ;push bx
-
- {xx#...} 使用重复,重复执行xx次“...” 中的格式串
-
- {xx?...} 如果G位为:?号,则xx的值将代表以下子功能:
-
- {0?...} 0,插入显示,不影响后面的任何字符的位置
- {1?...} 1, 在光标位置输出显示,
- {2?...} 2, 取光标位置字符的颜色作为显示颜色 (此项CPU占用大,原因在,int 10上)
- {3?xx$yy$...} 3,表示的重新指定显示位置。
-
- 其它保留,暂作忽略处理
-
- 二.2 G如果是未知功能符号,保留,暂作忽略处理
-
-
- 二.3
- {{变量名}G... } {{变量名}?... } 数值进行变量扩展取值
-
- 二.4
- {&变量名} 进行格式串变量扩展取值。
-
- {&abc:~1,4} 取变量abc的第1个字节开始,4 个字节
-
- {&&变量名} 进行格式串变量扩展取值。但其中的值将去掉所有符号的功能
-
-
- 二.5 计算式
- "{" 后跟空格 &0 为存放结果的空间
-
- { &0 =:1 + :2 } 进入计算模式
- { &0 =:3 + 11 }
- { &0 =:G * 2 }
- { &0 =:{&var} }
-
-
-
- 二.6
- { 跟其它符号,保留,暂作忽略处理。
-
-
-
- 三.单字功能:
-
- ; 换行,dh+1,且dh*宽+dl =>di
- , 换列,不改变dl,仅仅di+1
- [ 动态显示开始,以 ] 结束,已经解决和IF [...]间的层次嵌套问题
- { 一个有效区开始
- } 恢复,
- ? 互换前背景,为什么不用{}格式呢,因为要恢复时,再来一次?就可以了。
-
-
-
-
-
- 五、引入syxq用户数值型变量,共有256个,表示方法如下:
-
- :0 10进制表示
- :H0a 16进制表示
- :{aa} 变量取值表示
-
- :0~:256 公用变量(只要在整个窗口中的程序都可以访问) 值大小:0~ffff
-
- :V0~V15 区域变量,遇到一次[],进入一个区域,里面的变量调用也有效 (未完成)
- 区域变量的值占用双字,即可以用来存放变量名地址 (未完成)
-
-
- 特殊值:
- 1, :Gx 光标行
- 2, :Gy 光标列
- :Gc 光标所在字符的属性
- ;Ga 光标所在字符的ascii码
- 3, :Sx 当前鼠标行
- 4, :Sy 当前鼠标列
- 5, :SX 鼠标按下时的行(大写X)
- 6, :SY 鼠标按下时的列(大写Y)
- 7, :SK 鼠标按键 左键1 右键2 中键3(如果鼠标驱动有)
- 8, :K 按键的ascii码
- 9, :Vx 当前显示的行 (已完成)
- :Vy 当前显示的列
-
-
-
-
- 六、引入条件执行语句: “[”号后一个为界定符,?是可以变的
- 可用的条件符号有:< = >
- /if :0 = 3 [? one ?]
- /if :0 = 3 [? one ? two ?]
-
-
- 七、引入,控制功能,如:
- /CQ 退出
- /CFxx? 置返回码
- /CGxx.yy# 改变光标位置 (0功能也可以实现这个效果)
-
-
- /CL n - m# 把n - m行送打印串 (只取同一颜色的)
- /CTxx. n -m# 把n - m行送打印串,过虑掉xx属性的字符 (未完成)
- /CZxx. n -m# 把n - m行送打印串,只要xx属性的字符 (未完成)
-
-
- /C$ /$ 送打印信息串,以/$结束,并且信息串支持以下特殊值:
- /@xxh 显示一个数,按16进制
- /@xxo 显示一个数,按10进制
- /{变量名} 取变量的值来显示 (正在做)
-
- /CK 等待输入一字符串 (未使用)
-
- /CSxx.xx# 改变显示窗口在空间的位置 (未使用,大图模式)
-
-
- 八、{} 作为格式串分隔符
- ************* 以上是 syxq.com 功能2 详细使用说明 ***************************
-
-
-
- :: 功能3, 把指定行列开始的N个字符转为指定的颜色C,不改变字符
- :: 单个变量可以指定多项,项与项间用空格分开
- :: 例如(从3行16列开始18个字符转为蓝底白字31(16进制为:1f):
- :: set colo=33$16$31$18
- :: xq.com colo
- :: 集合用法:set colo=33$16$31$18 4$14$41$9 6$40$51$2
- ::
- :: 功能3增强:改变了三行的颜色分别为,18 19 20个字符,注意 @ 符号不能用其它的代替
- :: set colo=33$16$31$18@19@20
- ::
- ::
- ::
- :: 功能4, 变量串功能,即串中原素以空格分开,再作为变量名,去搜索
- :: set str=4strname1 strname2 strname3...
- ::
- :: 功能5 作以下增强:
- ::
- :: 功能5 等待一按键,并开始,动态显示,有按键退出
- ::
- :: 50 开始动态显示,按键不退出,需要使用 /CQ 方式来退出
- ::
- :: 51filename 指定一个文件名,把要返回显示的信息串,写入到文件中。
-
-
- 51filename?开始/?结束 指定一个文件名返回缓存,写入的开始和结束位置。以/;代表回车符 (正在做)
- 如果开始符找不到,以0计,如果结束符找不到,则无限制 (未完成)
-
-
- :: 如果不指定,则回显示出来,可用于管道操作
- ::
- :: 52 开始动态显示,不响应按键
- ::
- :: 功能6,指定框内:
- :: HH
- :: 60$0-24$79$80# 所有颜色灰化,在HH位置指定运算数据
- :: 60$0-24$79$80$ 所有颜色增亮,在HH位置指定运算数据
- :: 60$0-24$79$80= 所有颜色前背景交换,HH位置无意义
- :: 60$0-24$79$80@ 所有字符清空,HH位置无意义
- ::
- :: 7功能,格式串库文件调入
- ::
- :: 格式串:=7文件名
- ::
- :: 把指定文件名的内容调用内存,像批处理变量一样使用。
- :: 但是如果自定义变量名与bat的变量名相同是,以bat的变量有效。
- ::
- :: 把一些常用的功能模板放到一个文件内。如游戏的地图,图标,窗口,动画,特效等。
- ::
- :: 这样可以减少批处理的环境变量空间的使用。
- ::
- ::
- :: 库文件中有效的变量定义以 :@ 开始,以 :# 结束
- :: 如文件内容可以这样:
-
-
- ...自定义变量列表...
- :@
- 窗口=^_^------^_^
- table={$╔{7#━}╗;{4#┃{14# }┃;}╚{7#━}╝}
- :#
-
-
- :: 功能9,为写示例文件增加的功能
- ::
- :: 9行$列$底色$颜色表$首尾符
- :: 98$2$31#23456abcde#{}显示功能字符串
- ::
- :: "$"可以用其它非数字符号代替。#是固定的,{}号根据要显示的格式串来选择合适的字符
- :: 以达到理想的效果;
- :: 数值可为10进制或16进制(在前面加H),应小于255,颜色表为单字符的16进制字符
- :: 为了效率,并没有做过多的语法出错校对。使用时应严格按语法定义。
- ::
- ::////////////////////////////////////////////////////
-
- ================= 分项功能完 =========================
-
- :: 注意:
- :: 一次性可以指定多个变量,如:
- :: xq.com cur colo str
- :: 可以一次性完成三种功能的定义,理论上可以指定N个变量,
- :: 只是受到com程序的参数只能有128个字符的限制。但是功能4可以祢补这一缺限。
复制代码 链接: https://pan.baidu.com/s/12U5p8uMGXwQYsiJx9P25LQ 提取码: n1y9 |