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
и is
. Я использую USAGE для INDEX и POINTER. computational
не нужно писать полностью, достаточно COMP
, включая COMP-3
.
Срок годности 77-го уровня давно истек, и редко можно увидеть их в LINKAGE SECTION
. На работу программы не повлияет, если вы их все поменяете на 01-уровни.
Имена данных ужасны, почти ничего не значат. У нас есть 30 персонажей для игры, поэтому сделайте их значимыми. Что такое Я, Д и М? Вы можете сказать это, только внимательно изучив код.
Кажется, это все WORKING-STORAGE SECTION
(частью которого LINKAGE SECTION
не является, они оба являются частью DATA DIVISION
). Это указывало бы на то, что в PROCEDURE DIVISION у программы немного, но также и на то, что там много литералов. Что плохо. Усложняет поддержку программы.
Программа вроде бы как-то связана с римскими цифрами. Чтобы подчеркнуть путаницу, которую могут вызвать имена данных, цифры D, I и M не имеют ничего общего с именами данных D, I и M соответственно, но если вам не повезло, одно или несколько имен данных будет связано с именем данных с односимвольным именем, но другим.
Не могу сказать больше без дополнительного кода. Если вы хотите просмотреть его, в Stack Exchange есть раздел Code Review как раз для этой цели. Рабочий код, как сделать лучше...
Из кода, который вы сейчас показали, вам нужно скомпилировать его как загружаемый модуль, поэтому используйте ключ -m вместо -x:
cobx -m ..otherswitches.. yourprogramname
Программа, вызванная z/OS, будет иметь только один элемент USING of PROCEDURE DIVISION, и это будет групповой элемент, состоящий из двухбайтового двоичного файла (вероятно, COMP, возможно, COMP-4, COMP). -5 или BINARY, это не имеет значения) и PIC X размером до 100 байт, возможно, определяемый с помощью OCCURS, но, скорее всего, нет. Возможно, в названии было бы слово PARM.
Код, который вы показали, не очень похож на устаревшую программу z/OS COBOL :-)
Во-первых, вы можете подумать о переходе на GnuCOBOL, новое название OpenCOBOL. Здесь есть область для обсуждения, https://sourceforge.net/p/open-cobol/discussion/?source=navbar, для любой проблемы, большой или маленькой.
GnuCOBOL знает, что если у вас есть USING в операторе PROCEDURE DIVISION или ENTRY, вы не можете ожидать, что программа будет работать, если она скомпилирована как исполняемый файл с ключом -x. Он должен быть скомпилирован как загружаемый модуль с параметром -m.
Однако, как указал cschneid, в COBOL для мейнфреймов IBM обычно и допустимо выполнение USING в первой программе, поскольку это способ получить значение параметра из JCL, в котором выполняется программа.
В этом случае вам нужно будет изменить код, чтобы разрешить параметр из командной строки.
Итак, что у вас есть? Вызванная программа, которая должна быть скомпилирована с параметром -m, или программа, которая ожидает параметр от операционной системы?
Вне зависимости от того, обновляетесь вы или нет, вы должны получить копию Руководства по программированию Гэри Катлера для OpenCOBOL/GnuCOBOL, который вы будете использовать. Поиск с gary cutler cobol programming guide
позволит вам найти правильный.
person
Bill Woodger
schedule
14.03.2015