Можно ли использовать внешний индикатор для активации атрибута отображения в файле отображения?

В настоящее время я исправляю существующую программу RPG. Цель состоит в том, чтобы установить индикатор так, чтобы этот индикатор активировал атрибут отображения ND в файле отображения, чтобы скрыть поле. Проблема в том, что все индикаторы общего назначения IN01~IN99 были израсходованы, и я не могу повторно использовать ни один из них, не нарушая существующий ход программы. Можно ли вместо этого использовать внешний индикатор U1~U8? Если это невозможно, есть ли другая альтернатива? Или я просто облажался?


person God_of_Thunder    schedule 25.07.2012    source источник
comment
Это довольно удивительно. Насколько велика эта программа (сколько строк кода, сколько открытых файлов)? Мне сложно представить, что я буду писать что-то, что использует столько индикаторов, даже в RPG III. Я очень уверен, что есть индикаторы, которые не нужны. (Не говорю, что очистка использования индикатора является самым быстрым или лучшим решением; просто восхищаюсь предыдущими программистами, которые создали это чудовище.)   -  person John Y    schedule 25.07.2012
comment
Программа содержит около 4000 строк и ссылается более чем на 20 файлов. Но настоящая проблема заключается в том, что моя компания использует ключевое слово ERRMSGID в DDS для отображения сообщений в файлах отображения. В этой программе отображается около 90 сообщений. И я вам скажу, что это не единственная программа в моей компании, которая использует все 99 индикаторов. Конечно, программу можно переписать, чтобы предотвратить ненужное использование индикатора, но это требует слишком много усилий и не рекомендуется моим начальником. Какой позор...   -  person God_of_Thunder    schedule 28.07.2012


Ответы (2)


Рассмотрите возможность использования программы для системного поля вместо индикатора. http://wiki.midrange.com/index.php/Program_To_System_Fields

Другая возможность заключается во внешнем отображении всех индикаторов файла отображения с помощью ключевого слова DDS INDARA http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frzakc%2Frzakcmstdfindar.htm.

person Buck Calabro    schedule 25.07.2012
comment
Разве внешний индикатор здесь не лучший выбор? Или тут вообще не работает? - person God_of_Thunder; 25.07.2012
comment
Единственные индикаторы, которые допускает DDS, это 01-99. - person Buck Calabro; 25.07.2012
comment
Для решения INDARA вы имеете в виду удалить индикатор ответа из буфера и использовать его для активации нового атрибута отображения? - person God_of_Thunder; 25.07.2012
comment
Нет. INDARA выделяет отдельный 99-байтовый буфер для всех индикаторов формата записи. Если вы используете INDARA, вам нужно будет изменить все места, где существующий код использует индикатор для DSPF, и изменить его, чтобы использовать массив INDARA. Использовать поле Program to System проще, если вам нужно добавить еще несколько индикаторов. Вот старый пример: archive.midrange.com/rpg400-l/200402/msg00197 .html - person Buck Calabro; 25.07.2012

Проверьте использование каждого индикатора 01-99, чтобы определить, сможете ли вы освободить их для использования в вашем файле дисплея.

ЕСЛИ какие-либо из них используются только для управления потоком программы и не участвуют напрямую в файлах отображения, файлах печати, I-спецификациях или O-спецификациях, ТОГДА вы можете заменить ее использование переменной типа индикатора. Объявите переменную с внутренним типом данных N (позиция 40 вашей D-спецификации) в качестве поля формата индикатора символа. Используйте эту переменную вместо индикатора, который используется только для управления ходом выполнения программы.

Если таких индикаторов нет, то, вероятно, вам следует использовать один из методов, рекомендованных Баком.

В качестве альтернативы в старом стиле вы можете сохранить весь массив индикаторов *IN в области хранения, временно повторно использовать некоторые индикаторы ввода-вывода, а затем снова поместить область хранения в массив индикаторов. У вас может быть несколько структур с 99 индикаторами, которые вы перемещаете в *IN или загружаете из *IN в подходящее время. У вас может быть одна такая структура для каждого формата записи, которую вы переместите в *IN прямо перед вводом-выводом в этом формате записи и загрузите обратно после ввода-вывода. Это дает вам почти бесконечное количество индикаторов в вашей программе, хотя по-прежнему ограничено 99 для каждого формата отображения.

person WarrenT    schedule 25.07.2012
comment
Будем надеяться, что старая программа не переполнена висящими индикаторами с бредом и/или комбинациями. - person Tracy Probst; 26.07.2012