as/400: другой способ отображения графики?

Я знаю о существовании файлов DDS, которые позволяют программировать графику дисплея на as/400, но есть ли другой способ?

В частности, я хочу напрямую манипулировать буфером терминала, чтобы иметь возможность отображать что-либо еще, кроме текста. Например, терминал выглядит так:введите здесь описание изображения

Скажем, в памяти будет двумерный массив символов: text[20][80] для текстового меню, а ниже будет массив пикселей размером [200][800].

Есть ли способ получить прямой доступ к любому из этих массивов? Я хотел бы иметь возможность полностью создавать отображаемое меню на C без необходимости в файле отображения, а также отображать другую графику (изображения) непосредственно в буфере пикселей.


person aganm    schedule 03.09.2016    source источник
comment
Вы разработчик с доступом к командной строке? Если да, то что произойдет, если вы введете команду STRPTL и запросите ее с помощью F4? Команда установлена?   -  person user2338816    schedule 04.09.2016
comment
@ user2338816 Да, у меня есть доступ к командной строке. Версия as400, с которой я работаю, V6R1M0. У него не установлена ​​команда STRPTL.   -  person aganm    schedule 04.09.2016
comment
Непонятно, что вы подразумеваете под графикой, особенно с C. Обычно в настоящее время это может быть пользовательский интерфейс браузера через Java. Если C требуется, в противном случае вам может понадобиться отображение X-window, поэтому изучите загрузку/установку Инструменты IBM для разработчиков (идентификатор продукта 5799PTL). Но если вы можете отредактировать свой вопрос, вы можете объяснить больше того, что вам действительно нужно.   -  person user2338816    schedule 05.09.2016
comment
@user2338816 user2338816 Я сделал это намного яснее. Спасибо, мой вопрос действительно был недоработан.   -  person aganm    schedule 05.09.2016


Ответы (3)


Есть ли способ получить прямой доступ к любому из этих массивов?

Это достаточно просто, хотя все равно потребуется «файл отображения», в котором нет форматированных полей. «Файл» будет соединением между программой и физическим устройством (или эмулятором). Вы можете определить одну большую область, содержащую любой «текст», который вы хотите, чтобы ваша программа поместила в нее. Это может даже включать атрибуты поля отображения, которые ограничивают области ввода.

Для максимального контроля подходит ключевое слово DDS USRDFN. . Но для простых вещей, таких как списки пунктов меню, можно вывести почти любое большое текстовое поле.

Выводить простой текст легко. Для таких подробных вещей, как форматирование USRDFN, необходимо детальное понимание протокола 5250.

Одной из альтернатив может быть использование API User Interface Manager (UIM). для обновления «текстовой области» ПАНЕЛИ (:ТЕКСТ) через прикладную программу USREXIT=. UIM обрабатывает все, что касается любого определения «файла отображения» и фактического ввода-вывода. UIM можно рассматривать как интерфейс HTML для 5250, и он использует очень похожий язык разметки для определения панелей.

Другой альтернативой являются API Dynamic Screen Manager (DSM). . Они обеспечивают гораздо более точное управление, чем методы UIM или DDS (хотя DDS USRDFN очень близок). Но, как и в случае с USRDFN, фактическое управление устройством потребует знания протокола 5250.

...а также отображать другую графику (изображения) непосредственно в буфере пикселей.

Для 5250 нет ни «пиксельного буфера», ни даже «пикселей». Это символьный протокол, такой как telnet. Если вам нужны изображения или «пиксели», вы предпочитаете интерфейсы браузера или, возможно, Java и NAWT, X-windows и т. д.

Теперь, учитывая, что с TCP/IP и сокетами вы можете делать практически все, что можете запрограммировать. Все, что вы можете придумать, включая загрузку/установку сторонних библиотек кода, вы можете сделать — в рамках сетевых ограничений, окружающих ваш сервер. Но на самом деле это сервер, поэтому приложения с графическим интерфейсом обычно не должны запускаться на нем. Это то же самое, что и для почти всех типов серверов. Кодируйте графический интерфейс в клиентской системе, а не на сервере. Но вы можете это сделать, если очень хотите.

person user2338816    schedule 06.09.2016

Я не уверен, почему вы хотите сделать это...

В наши дни было бы намного проще просто сгенерировать ваш вывод в виде HTML и передать его через встроенный веб-сервер apache.

Но если вы действительно хотите делать графику через 5250, это можно сделать... по крайней мере, теоретически. За 20 с лишним лет на платформе я ни разу такого не видел.

Но когда-то (1994?) IBM добавила поддержку графического отображения данных. Manager (GDDM) и API презентационной графики в OS/400. «GDDM — это средство отображения, печати или рисования изображений. Подпрограммы Presentation Graphics — это средства отображения, печати или построения бизнес-диаграмм».

Поддержка по-прежнему находится в ОС. Однако поддержка на стороне клиента НЕ доступна в IBM i Access для Windows или в последнем выпущенном клиенте IBM Access Client Solutions (ACS). Похоже, что автономный Продукт IBM Personal Communications может поддерживать GDDM.

Для полного управления буфером символов обратитесь к API Dynamic Screen Manager (DSM). API-интерфейсы DSM представляют собой «набор интерфейсов экранного ввода-вывода, которые обеспечивают динамический способ создания и управления экранами для языков высокого уровня Integrated Language Environment® (ILE). Поскольку интерфейсы DSM являются привязываемыми, они доступны для программ ILE. Только."

person Charles    schedule 06.09.2016
comment
Я использовал GDDM как для печати, так и для отображения. Однако для отображения вам понадобится терминал 5250 или эмулятор с поддержкой графики. Последний эмулятор, который, насколько я знаю, работал с графикой 5250, был старым эмулятором IBM DOS через SNA. (Может, подойдет цвет 3279?) Конечно, ничто не мешает кому-то написать современный. IIRC, GDDM был встроенным в ОС для нескольких версий, не требуя установки отдельной опции или продукта. - person user2338816; 07.09.2016
comment
@ user2338816 ... Да, я создал небольшую демонстрацию ... и оказалось, что ни ACS, ни iAW не поддерживают GDDM. Но похоже, что PCOMM может. - person Charles; 07.09.2016

Есть способ сделать это в ILE C/C++. Это было очень интересно исследовать, так как я не пробовал это сам.

Единственная документация по нему (стр. 183+) I можно найти из версии 5.1, но вы можете ссылаться на функции, используемые для это руководство 7.3 (возможно, страница vii/7), чтобы узнать, используются ли они по-прежнему.

Надеюсь, это помогло!

person Barry    schedule 03.09.2016