记录一次关于128码的修改
code128
CODE128码是1981年引入的一种高密度条码,CODE128 码可表示从 ASCII 0 到ASCII 127 共128个字符,故称128码。其中包含了数字、字母和符号字符。
特点
- 可表示高密度数据和字符串;
- List item
- 每个字符由3个条、3个空、11个单元构成,字符串可变长;
- 符号内含校验码;
- 有三种不同的版本:A(数字、大写字母、控制字符)B(数字、大小字母、字符)C(双位数字)
CODE128A:标准数字和大写字母,控制符,特殊字符
CODE128B:标准数字和大写字母,小写字母,特殊字符
CODE128C:[00]-[99]的数字对集合,共100个 - 可用128个字符分别在A、B或C三个字符串集合中。
构成
一个Code 128条形码由六部分组成。
- 1.空白区域
- 2.起始标记
- 3.数据区
- 4.校验符
- 5.终止符
- 6.空白区域
Code 128条码指定相互间隔的3个条形和3个空白(共六个单元)代表一个字符,每个字符由一个条开始,以一个空结束。 在条形码字体中,最后一个条形通常与终止符一起组合成一个更宽的终止符。
以上是针对128码的一些简单介绍,其中ABC三种版本对应的不同数据是本次修改的关键。
问题描述
三个条码,只有第二个打印出来,其中第一个不打印的原因为开头为大写字母,第三个不打印的原因为未设置起始字符,根据TSPL指令集相关描述,不设置起始字符应该按照默认起始字符。
修改思路和方法
问题一:未设置版本号不打印
思路
检测到第一个字符为!,才是设置版本号,否则为未设置版本号,此时按照默认版本进行打印。
问题二:开头为大写字母不打印
思路
左边是原来的代码,开头为大写字母时,直接将大写字母填入缓冲区,而这时版本号还没有设置,增加当版本号设置不为A或B时,设置版本号。
总结
这次的bug修改并不困难,但是花了一个早上和一个下午加半个晚上,花费这么多时间的主要原因是对TSPL代码架构的不熟悉,还有对128码的不熟悉导致的。
所以这里特别记录一下,方便后续补充或查阅。