Ошибка GNUCobol (OpenCOBOL): libcob: модуль '»' не найден

Я конвертирую набор программ COBOL, написанных для компилятора Microfocus, для использования с GnuCobol. До сих пор я добился умеренного успеха, мне пришлось изменить только некоторые специфичные для микрофокуса команды даты, а также использовать аргумент -std=mf GnuCobol.

Я использую готовую сборку с сайта www.arnoldtrembley.com/GnuCOBOL.htm.

У меня возникают проблемы с этой ошибкой при запуске определенного файла после успешной компиляции:

libcob: module '»' not found

Поиграв в OpenCOBOLIDE, я обнаружил, что оскорбительная строка

 CALL X"AF" USING SET-BIT-PAIRS
                               USER-KEY-CONTROL

Что я могу сделать, чтобы исправить это?


person Kurtoid    schedule 24.10.2017    source источник


Ответы (1)


Вам нужно будет перекодировать эту часть. GnuCOBOL поддерживает только несколько пронумерованных подпрограмм поддержки системы. х"91", х"Е4", х"Е5", х"F4" и х"F5". x"AF" еще нет в списке встроенных подпрограмм системной библиотеки. И даже поддерживаемые не включают обработку всех подфункций.

Поскольку x"AF" связан с экраном (по крайней мере, на одной странице документа, которую я видел), вы, вероятно, можете просто выяснить, какие escape-коды отправлять на терминал, и выполнить эту часть вручную с помощью DISPLAY вместо CALL.

Не зная, какая подфункция x"AF" вызывается (независимо от того, что находится в SET-BIT-PAIRS), невозможно придумать конкретную последовательность VT100, чтобы предложить попробовать. Если это просто подфункция 18, то, вероятно, будет достаточно ОТОБРАЖЕНИЯ одного символа БЕЗ ПРОДВИЖЕНИЯ. Подфункция 22 просто означает звонок в терминал, что можно сделать, нажав Ctrl-G. И т. д.

Если вам интересно, запустите cobc --list-system (или просто загляните в руководство GnuCOBOL, которое включено в готовый пакет, который вы используете), чтобы узнать, какие вызовы стандартных системных библиотек поддерживаются с помощью GnuCOBOL.

И если вы предприимчивы, вы можете заглянуть в дерево исходного кода компилятора и просто изменить libcob для поддержки кода, который у вас есть, связав номер CALL с функцией C, расширив libcob/system.def новой записью и пересобрав GnuCOBOL. из источника.

person Brian Tiffin    schedule 24.10.2017