记录一次关于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三种版本对应的不同数据是本次修改的关键。


问题描述

记录一次关于128码的修改
三个条码,只有第二个打印出来,其中第一个不打印的原因为开头为大写字母,第三个不打印的原因为未设置起始字符,根据TSPL指令集相关描述,不设置起始字符应该按照默认起始字符。
记录一次关于128码的修改

修改思路和方法

问题一:未设置版本号不打印

思路

检测到第一个字符为!,才是设置版本号,否则为未设置版本号,此时按照默认版本进行打印。
记录一次关于128码的修改
记录一次关于128码的修改

问题二:开头为大写字母不打印

思路

记录一次关于128码的修改
左边是原来的代码,开头为大写字母时,直接将大写字母填入缓冲区,而这时版本号还没有设置,增加当版本号设置不为A或B时,设置版本号。

总结

这次的bug修改并不困难,但是花了一个早上和一个下午加半个晚上,花费这么多时间的主要原因是对TSPL代码架构的不熟悉,还有对128码的不熟悉导致的。

所以这里特别记录一下,方便后续补充或查阅。