IBM РПГ II
RPG II — очень ранняя и популярная версия языка программирования IBM RPG .
Он был разработан в конце 1960-х годов и предназначен для работы на самых маленьких системах IBM того времени, таких как IBM 1130 , IBM System/3 , System/32 , System/34 , System/36 . Он также был доступен для System/370 , The Singer System 10 , Sperry Univac 90/25, 90/30, 90/40, System 80, 1100. серий [1] и серия Ван против . ICL выпустила версии для своей системы ICL 2903 и для VME/K ; и Burroughs Corporation выпустили компилятор RPG II с расширениями базы данных для своих B1700 компьютеров серии . У Digital Equipment Corporation была собственная реализация под названием VAX RPG II для систем VAX/VMS . [2]
Усовершенствованная версия RPG III появилась в 1978 году.
Он имеет ряд необычных особенностей, в том числе: подразумеваемый цикл обработки; и что это язык программирования фиксированного формата, поэтому программы трудно читать без специального шаблона отладки. [3]
Функции
[ редактировать ]RPG II — это язык программирования фиксированного формата, а это означает, что код должен размещаться в точных местах столбцов, чтобы генерировать правильные результаты. Существует восемь различных типов спецификаций, для написания каждого из которых используются отдельные формы кодирования, а также специальный шаблон отладки. [3] используется в качестве вспомогательного средства для чтения распечаток программы.
Каждая программа RPG II выполняется в рамках подразумеваемого цикла, программного цикла , который последовательно применяет программу к каждой записи файла - это документируется с помощью диаграммы «Логического потока» в шаблоне отладки. [3] Каждая запись (индивидуальная перфокарта) будет сравниваться с каждой строкой в программе, которая будет действовать на запись или нет, в зависимости от того, включен или выключен «индикатор» этой строки — из набора логические переменные с номерами 01–99 для определяемых пользователем целей или другие меньшие наборы на основе функций обработки записей, полей или отчетов. Специальные переменные, такие как UDATE, UYEAR, PAGE и т. д., заполняются при запуске программы или при переполнении страницы, даже если для этих действий нет явных инструкций. Общие вычисления и вывод выполняются в «общее время», после цикла детализации, когда L1/LR включен фиксированной логикой.
Концепция программного цикла RPG прекрасно сочеталась с циклической машиной, которая считывала карты, суммировала их содержимое и печатала результат, что напоминало машину для подсчета таблиц . Язык был расширен для работы с другими устройствами ввода и вывода и обеспечивает быстрый и эффективный метод программирования.
Такие устройства, как рабочая станция (WORKSTN), клавиатура (KEYBORD) или консоль (CONSOLE), не имеют фиксированного количества записей в начале задания и, следовательно, для включения RPG с фиксированной логикой «Последняя запись» ", индикатор LR можно включить с помощью команды SETON. LR не может быть отключен.
RPG II не сильно изменилась с момента реализации System/34 в 1977 году до 2000 года, когда Advanced/36 продажи были прекращены. Изменения, внесенные по сравнению с версией 1970-х годов, включали группировку IFEQ/IFNE/IFGT/IFGE/IFLT/IFLE и END. Кроме того, вызов/парм позволяет вызывать внешние подпрограммы. Еще одно изменение заключалось в том, что для внутренних подпрограмм больше не нужно было указывать SR в столбцах 7 и 8 спецификации C (расчет).
Сторонние поставщики продали более 200 различных ассемблерных подпрограмм, которые могли использоваться программистами System/36 и Advanced/36 для преодоления ограничений RPG II. Некоторыми ограничениями RPG II на System/3, 32, 34 и 36, включая Advanced/36, были ограничение в 64 КБ и количество файлов, которые вы могли иметь в программе. Поэтому, если у вас было много строк программирования или большие массивы, было легко превысить размер объектного кода в 64 000 байт. Однако RPG II, работающий на AS/400, и его последователи на iseries и IBM i (которые работают под управлением OS/400 или i5/OS в так называемой S/36E (среда выполнения)) эти ограничения (64 КБ и количество файлы) были либо значительно расширены, либо удалены.
Технические характеристики РПГII
[ редактировать ]В реализации RPG II для System/36 существует восемь различных типов спецификаций (спецификаций), то есть строка текста фиксированного формата длиной 80 символов (байтов), полученная в результате первоначального использования ввода с перфокарт для более ранних версий IBM. системы, такие как System/3 . тип должен был располагаться в определенном порядке: U , T , H , F , E , L , I , C AND O. Подобные спецификации были сгруппированы вместе, и каждый
Коды спецификаций указаны в столбце 6 спецификации RPG-II:
Код операции | Имя |
---|---|
В | Спецификация автоматического отчета требуется только для программ автоматического отчета. |
Т | Телекоммуникации. Эта девятая спецификация была добавлена позже, в 1977 году: [4] |
ЧАС | Спецификация заголовка находится в верхней части программы и описывает параметры компилятора, такие как максимальный размер компиляции, является ли программа программой MRT (множественный терминал запроса) и какой тип листинга генерируется при компиляции программы. Имя объекта создаваемой программы располагается в столбцах 75–80; если источник не имеет спецификации H, используется имя RPGOBJ. |
Ф | Спецификации файлов приведены ниже и описывают файлы, используемые в программе. Файлы могут быть файлами на диске (DISK) или устройствами, такими как принтер (PRINTER), рабочая станция (WORKSTN), клавиатура (KEYBORD), неформатированный дисплей (CRT или DISPLAY) или определяемый пользователем (SPECIAL). Описан размер записи, размер блока, индикаторы переполнения и внешние индикаторы. Вполне возможно, что программа RPG не будет использовать какие-либо спецификации F. |
И | Спецификации расширения следуют далее и описывают массивы и таблицы, которые могут быть предварительно выбраны из файлов на диске (входная таблица), взяты из констант, помещенных в конце источника между символами ** и /*, или построены на основе вычислений. |
л | Спецификации счетчика строк приведены ниже. Если они имеются, опишите форму для печати. Он определяет количество строк на странице и места начала и окончания печати. |
я | Следующими идут входные характеристики, которые описывают области данных в файлах. RPG II позволяет переопределить области данных так, чтобы поле с именем FLDA могло занимать ту же область, что и массив AR, содержащий 8 элементов по 1 символу каждый. Могут быть описаны незаписываемые области, такие как структуры данных. В зависимости от значений входной записи показатели могут быть обусловлены. |
С | Ниже приведены спецификации расчета. Всего полей можно описывать и накапливать. Возможны сложные вычисления и манипуляции со строками. Показатели могут быть условными. |
ТО | Спецификации вывода, которые описывают выходную запись с точки зрения полей и позиций вывода. |
Коды операций указаны в столбцах 28–32 спецификации расчета RPG-II.
Код операции | Имя |
---|---|
ДОБАВЛЯТЬ | Добавлять |
СУБ | Вычесть |
МНОГО | Умножить |
ДИВ | Разделять |
Z-ADD | Ноль и добавление |
Z-SUB | Ноль и вычитание |
МВР | Переместить остаток |
ДВИГАТЬСЯ | Двигаться |
МОБИЛЬНЫЙ | Двигаться влево |
ГЛАЗ | Переместить верхнюю зону в нижнюю |
МЛХЗО | Переместить низкую зону в верхнюю |
МЛЛЗО | Переместить низкую зону в нижнюю |
МХХЗО | Переместитесь в верхнюю зону |
крем для обуви | Bit On |
БИТОФ | Бит выключен |
ТЕСТ Б | Тестовый бит |
ПЕРЕЙТИ К | Перейти к |
ЯРЛЫК | Тег (пункт назначения GOTO) |
ЭКССР | Выполнить подпрограмму |
БЭГСР | Начать подпрограмму |
ЭНДСР | Завершить подпрограмму |
СЕТОН | Включить |
СЕТОФ | Отправляться |
КРОМЕ | Исключение |
ВЫХОД | Выход |
РЛАБЛ | Переопределить метку |
УЛАБЛ | Метка пользователя |
ВЫЗОВ 1 | Вызов |
ПАРМ 1 | Параметр |
ЦЕПЬ | Цепь |
ЧИТАТЬ | Читать |
ЧИТАТЬ | Читать равно |
ЧТДП | Читать предыдущее |
ПОВТОРИТЬ | Читать предыдущее равно |
РЕШИТЬ | Установить нижние пределы |
НАБОР | Набор |
ВРЕМЯ | Время суток (000000-235959) |
ДСПЛИ | Отображать |
ДОБРЫЙ | Сортировать массив |
XFOOT | Перекрестная стопа |
МОВА | Переместить массив |
ЛОКУП | Поиск (найти в массиве) |
- CALL/PARM был добавлен в RPG II в версии 6.0 (также известной как VASP).
CHAIN извлекает запись в индексированном файле, указанном в факторе 2, который точно соответствует ключу, указанному в значении фактора 1.
SETLL заставляет указатель индекса файла, указанного в факторе 2, располагаться в месте, указанном значением в факторе 1.
SORTA вызывает сортировку именованного массива на месте; то есть элементы появляются по порядку.
Z-SUB вычисляет коэффициент 2 с противоположным знаком и перемещает его в поле результата.
XFOOT вызывает суммирование массива и перемещение результата в поле результата.
MVR должен следовать за операцией DIV. Целочисленный остаток от операции DIV помещается в поле результата. MVR после операции DIV для «56 разделить на 3» поместит значение 2 в поле результата.
Индикаторы
[ редактировать ]Индикаторы либо «установлены», либо нет, это «флаги» или логические типы данных .
- Общий, обычно устанавливаемый вручную, для индивидуального использования в спецификациях I , C и O программы:
- 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19
- 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
- 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
- 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
- 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
- Индикаторы остановки, устанавливаемые вручную в расчетных C -спецификациях, для завершения программы с кодом возврата:
- H1 H2 H3 H4 H5 H6 H7 H8 H9
- Индикаторы сопоставления, назначенные для входных полей I -spec, автоматически устанавливаются при чтении записей из файла, чтобы согласовать иерархию и указать, какие поля (переменные) в записях из двух или более файлов синхронизируются, предполагая отсортированный порядок записей внутри. каждого файла, записи обрабатываются последовательно:
- М1 М2 М3 М4 М5 М6 М7 М8 М9 и
MR
что означает, что совпадение произошло
- М1 М2 М3 М4 М5 М6 М7 М8 М9 и
- Индикаторы уровня управления, назначенные полям ввода I -spec, для координации иерархии и сигнализации того, какие поля в записи из файла сгруппированы, предполагая отсортированный порядок записей в файле, при этом записи обрабатываются последовательно:
- L0 L1 L2 L3 L4 L5 L6 L7 L8 L9
- Индикаторы командных клавиш для подачи сигнала на ввод обработки программы с клавиатуры рабочей станции, эквивалентные функциональным клавишам (
F1-F12
, иshift-F1-F12
) на клавиатуре ПК, используемой вместоEnter
ключ:
- KA KB KC KD KE KF KG KH KI KJ KK KL KM KN KP KQ KR KS KT KU KV KW KX KY
- Эти индикаторы относятся к командным клавишам от 1 до 24 в указанном порядке. Обратите внимание, что нет
KO
индикатор.
- Индикатор первого цикла, устанавливается автоматически при выводе первой страницы, в основном используется для файлов принтера, используется аналогично индикатору переполнения для управления выводом, таким как разрывы страниц и заголовки:
- 1П
- Индикаторы переполнения срабатывают автоматически, обрабатывая ограничения на нумерацию страниц выходного файла принтера, для каждого счетчика строк L -spec каждого файла, а также могут быть установлены вручную. Обычно устанавливают разрывы страниц и печатают заголовки. По одному индикатору, до 8 выходных файлов:
- ОА ОБ ОК ОД ОЕ ОГ ОВ
- Индикатор последней записи, не путать с индикаторами уровня управления, завершает программу, чтобы вернуть управление потоку заданий пакетной обработки (скрипту), устанавливается автоматически при достижении конца файла в последовательно обрабатываемом файле, вручную устанавливается на завершение. программа, не имеющая последовательного источника процесса (файла):
- ЛР
- Внешние индикаторы, общие для пользовательского использования, передаются в программу из пакетного файла управления потоком заданий (скрипта):
- U1 U2 U3 U4 U5 U6 U7 U8
Были доступны складные листы, шаблоны из пластика с покрытием от износа и пятен, суммирующие различные характеристики. Используется для визуального осмотра и проверки текста исходного кода фиксированного формата, сопоставленного с его печатным результатом. Они соответствовали стандартным на тот момент интервалам в тексте, взятым из первоначального использования перфокарт :
3 | ЧАС | заголовок |
5 | Ф | файлы |
6 | Ф | расширения |
7 | И | расширения |
8 | л | счетчики строк |
10 | я | файл |
11 | я | поля |
12 | С | расчет |
13 | ТО | файл |
14 | ТО | поля |
Пример кода
[ редактировать ]F*************************************************************** F* THIS PROGRAM READS THE CONTENTS OF AN INVOICE HEADER FILE F* AND PRINTS THE INVOICES PROCESSED FOR THE DATE SET IN THE F* LOCAL DATA AREA. THERE ARE LEVEL BREAKS AND TOTALS FOR F* EACH STORE. F*************************************************************** F* FINVHDR IP F 62 DISK FPRINTER O F 132 OF PRINTER IINVHDR NS 01 1NC I 1 3 STORE L1 I 4 13 INVNO I 14 20 CUSTNO I 21 45 STNAM I 46 53 INVDAT I 54 622TOTINV I UDS I 1 8 RPTDAT C 01 INVDAT COMP RPTDAT 11 C 01 11 ADD TOTINV L1TOT 92 C 01 11 ADD TOTINV LRTOT 92 OPRINTER H 101 1P O OR OF O PAGE Z 106 O 102 'PAGE' O 59 'VERY BIG' O 72 'STORES, INC.' O UDATE Y 17 O 8 'RUN DATE' O H 1 1P O OR OF O 73 'DAILY SALES BY STORE' O H 2 1P O OR OF O RPTDAT 83 O 63 'FOR DATE:' O H 1 1P O OR OF O 6 'STORE' O 18 'INVOICE' O 28 'CUSTOMER' O 58 'CUSTOMER' O 78 'INVOICE' O H 2 1P O OR OF O 6 'NUMBER' O 18 'NUMBER' O 28 'NUMBER' O 58 'NAME' O 78 'TOTAL' O D 0 L1 O STORE 6 O D 1 01 11 O INVNO 18 O CUSTNO 28 O STNAM 58 O TOTINV1B 78 O T 1 L1 O 45 'STORE TOTAL...' O L1TOT 1B 78 O T 1 LR O 45 'GRAND TOTAL...' O LRTOT 1 78
Ссылки
[ редактировать ]- ^ «Система Sperry Univac 1100/60» (PDF) . Проверено 18 января 2021 г.
- ^ «Справочник по языку программного обеспечения и инструментам VAX/VMS» (PDF) . bitsavers.org . 1985 год . Проверено 31 декабря 2020 г.
- ^ Перейти обратно: а б с «Шаблон отладки IBM RPG» , Музей истории компьютеров
- ^ «Компиляторы RPG II IBM System/3 Model 8, Model 10, Model 12 и Model 15» , Спецификации программных продуктов IBM, ноябрь 1977 г., стр. 3