从 SCO Xenix 转换为 Linux

作者:Fred Treasure

SBT 的会计系统程序有很多定制版本,因为多年来 SBT (<http://www.sbt.com/>) 一直在其软件的多用户版本中提供源代码。我从 SCO Xenix 升级到 Caldera OpenLinux 的系统使用了 SBT 的应收账款/库存程序作为销售点系统的基础。最初的 SBT 程序和附加组件都是用 SCO Foxbase plus 编写的,这是一种与 dBase 兼容的语言。我的客户 Steve Maxwell 使用该程序运营他的百货商店大约十年了,对程序的性能和稳定性感到满意。不幸的是,当我测试该软件在 2000 年的日期下的工作情况时,它失败了。SCO Foxbase 在 1999 年之后无法正常工作。

在研究解决该问题的可用方案时,我发现除了从 SCO 升级之外,还有几种与 dBase 兼容的语言也适用于 Linux。我喜欢 Multisoft 的一款名为 FlagShip 的产品(在美国由 Linux Mall 出售,<http://www.linuxmall.com/>),因为我的初步测试表明,它只需进行少量更改即可编译原始的 SBT 源代码(我将在稍后详细介绍这些更改),并且它生成了非常快速的代码。它也是最便宜的解决方案,价格不到 600 美元。FlagShip 分两个步骤编译源代码,首先将原始的 dBase 源代码转换为 C 代码,然后由 Linux 的 C 编译器将其编译为本机可执行文件。

从客户的角度来看,升级到 Linux 的主要优势之一是它允许他使用大部分现有硬件,包括许多终端、收据打印机、条形码扫描仪等等,以及他的主计算机。我们唯一需要更换的硬件是 60MB 磁带驱动器和多端口串行卡。这两者都已经停产,并且 Linux 不支持。我们将多端口串行板升级为 Cyclades Cyclom Y 板,并将磁带驱动器升级为带有 BRU 备份软件的 Hewlett Packard IDE 5GB 单元。能够回收主要组件节省了数万美元。通过使用原始程序,我们也避免了培训成本。

由于这是我第一次进行 Xenix 到 Linux 的转换,我非常担心会遇到意想不到的问题,导致项目失败。在这方面,我很幸运有一位非常有经验的客户。Steve Maxwell 参与了原始 Xenix 版本程序的开发,并且一直在没有外部支持的情况下维护该系统。有这样一位真正聪明的客户在身边,我感觉好多了,因为我一开始就遇到了麻烦:我无法将 Xenix 系统上的信息转移到 Linux 系统上。尽管 Linux 可以读取 Xenix 文件系统,但我无法让 Linux 读取包含原始源代码和数据的 Xenix 硬盘驱动器。我使用 Steve 称之为 Term 的程序从 Xenix 系统中获取了信息,该程序有 Xenix 和 DOS 版本。最终,我将所有需要的文件都放在了我的 Linux 开发系统的 DOS 分区上。事实证明这非常有用,因为它允许我使用所有 DOS 开发工具以及 Linux 工具,并生成可以在任一环境中调试的代码。

我通过进行 Y2K 工作开始了转换。我将所有与日期相关的内容从原始的 8 字节字符数据格式(例如,01/01/90)转换为 dBase 的日期类型。这是 SBT 为其 DOS 和 Windows 产品使用的方法。我使用了 SET CENTURY ON 命令来启用四位数的年份,然后对需要转换日期的地方进行了必要的更改。事实证明这相对容易。

在转换的下一步中,我构建了一个精简版的百货商店系统,包括一台主计算机和一个单点销售工作站(一个哑终端、条形码扫描仪和收据打印机)。我还设置了一些商店使用的配置中的系统打印机。

没有可用的 Linux 终端类型可以工作,并且当我从终端注销时,我没有再次获得登录提示。这是我没有预料到的事情,并且很难解决。我最终通过逆向工程 Xenix termcap 设置生成了一个自定义的 terminfo 条目。登录问题通过使用 mingetty 而不是标准的 getty 程序解决了。解决这些问题后,我得到了一个可工作的单终端版本的系统。

SCO Foxplus 处理多用户文件的方式与 FlagShip 处理它的方式不同。基本上,我剥离了 Foxplus 代码,并根据需要添加了 FlagShip 代码,这是一个简单的过程,但有点乏味,因为我必须在程序中出现 USE 命令的每个点添加一个 FlagShip 代码块。大约一个月后,我完成了所有转换,并将 Linux 硬盘驱动器(我在其上进行了开发)安装为主要商店计算机。我保留了 Xenix 硬盘驱动器,以防升级过程中出现更多问题。令人惊讶的是,Linux 版本第一次尝试就成功了。在那之后,我对代码进行了细微的更改,以优化打印机的工作方式,但是 Linux 系统已经启动并运行,我再也不需要回到 Xenix 了。

最初的销售点程序通过更新一组主文件来支持多家商店,这涉及在每家商店创建事务文件和一个批处理更新过程的复杂操作。我能够通过使用 Linux 强大的通信功能将分店直接通过 Internet 连接到主店来简化这一点。

我从为商店所在的两个城镇提供服务的本地 ISP Gilanet 获得了两个专用 IP 地址,并将自动拨号程序配置为在营业时间启动链接,并在不需要时关闭链接。来自 Gilanet 的系统管理员 Bill Stites 在使 Internet 连接正常工作方面提供了大力支持。Bill 在内部为他的一些 Gilanet 服务器使用了 Caldera OpenLinux。

当我们开始这个项目时,Steve Maxwell 和我都希望在繁忙的圣诞季之前完成升级。结果证明,即使遇到了一些问题,我也能够在预期时间的一半左右完成工作。系统运行良好。

电子邮件:fred@nfo.edu

Fred Treasure 可以通过电子邮件 fred@nfo.edu 联系到他。

加载 Disqus 评论