working-storage section.
77 i picture s99 usage is computational.
77 prev picture s9(8) usage is computational.
77 d picture s9(4) usage is computational.
01 error-mess.
02 filler picture x(22) value ' illegal roman numeral'.
linkage section.
77 m picture s99 usage is computational.
77 err picture s9 usage is computational-3.
77 sum1 picture s9(8) usage is computational.
01 array-area.
02 s picture x(1) occurs 30 times.
首先,不需要单词usage
and is
。我将 USAGE 用于 INDEX 和 POINTER。computational
不需要完整拼写,COMP
就足够了,并且包括COMP-3
.
Level-77 已经过了保质期,在LINKAGE SECTION
. 全部改成01级不影响程序运行。
数据名称很糟糕,几乎没有意义。我们有 30 个角色可以玩,所以让它们有意义。什么是 I、D 和 M?您只能通过详细查看代码来判断。
这似乎是全部WORKING-STORAGE SECTION
(LINKAGE SECTION
不是其中的一部分,它们都是 的一部分DATA DIVISION
)。这将表明该程序在 PROCEDURE DIVISION 中没有太多内容,但也表明确实包含很多文字。哪个不好。使程序更难维护。
该程序似乎与罗马数字有关。为了突出数据名称可能引起的混乱,数字 D、I 和 M 分别与数据名称 D、I 和 M 无关,但如果你更不幸,一个或多个数据名称将与具有单字符名称但不同的数据名称相关联。
没有更多的代码不能说更多。如果您想对其进行审查,Stack Exchange 有一个方面,代码审查,正是为了这个目的。工作代码,如何做得更好......
从您现在显示的代码中,您需要将其编译为可加载模块,因此请使用 -m 开关而不是 -x:
cobx -m ..otherswitches.. yourprogramname
z/OS 调用的程序在 PROCEDURE DIVISION 的 USING 上只有一个项目,它是一个组项目,由一个两字节的二进制文件组成(可能是 COMP,可能是 COMP-4,COMP -5 或 BINARY,没关系)和最多 100 个字节的 PIC X,可能用 OCCURS 定义,但很可能不是。名称中可能包含 PARM 一词。
您显示的代码看起来不像传统的 z/OS COBOL 程序:-)
首先,您可能需要考虑升级到 GnuCOBOL,即 OpenCOBOL 的新名称。这里有一个讨论区,https://sourceforge.net/p/open-cobol/discussion/?source=navbar,可以解决任何大小问题。
GnuCOBOL 知道,如果您在 PROCEDURE DIVISION 或 ENTRY 语句上使用了 USING,那么如果使用 -x 开关将程序编译为可执行文件,您就不能期望该程序能够工作。它必须用-m 编译为可加载模块。
但是,正如 cschneid 所指出的,在 IBM Mainframe COBOL 中,在执行的第一个程序中使用 USING 是常见且有效的,因为这是从运行程序的 JCL 获取参数值的方式。
如果是这种情况,您将需要更改代码,以允许来自命令行的参数。
那么,你有哪个?应该使用 -m 编译的 CALLed 程序,还是需要操作系统提供参数的程序?
无论您是否升级,您都应该为自己准备一份 Gary Cutler 的 OpenCOBOL/GnuCOBOL 编程指南,供您使用。搜索gary cutler cobol programming guide
将允许您找到正确的。