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 года, когда продвинутая версия / 36 была снята с продажи. Изменения, внесенные в версию 1970-х годов, включали группировку IFEQ / IFNE / IFGT / IFGE / IFLT / IFLE и END. Кроме того, call / parm позволяет вызывать внешние подпрограммы. Еще одно изменение заключалось в том, что для внутренних подпрограмм вам больше не нужно было указывать SR в столбцах 7 и 8 спецификаций C (расчет).
Сторонние поставщики продали более 200 различных подпрограмм ассемблера, которые могли использоваться программистами System / 36 и Advanced / 36 для выхода за пределы ограничений RPG II. Некоторыми из ограничений RPG II в System / 3, 32, 34 и 36, включая Advanced / 36, были ограничение в 64 КБ и количество файлов, которые вы могли иметь в программе. Поэтому, если у вас было много строк программирования или большие массивы, было легко превысить 64000 байтов объектного кода. Однако RPG II, работающая на AS / 400 и последующих версиях iseries и IBM i (которые работают под OS / 400 или i5 / OS в так называемой S / 36E (среде выполнения)), эти ограничения (64 Кбайт и количество файлы) были либо значительно расширены, либо удалены.
Характеристики RPGII
В популярной реализации RPG II System / 36 существует 8 различных типов спецификаций:
- U - Спецификация Auto Report требуется только для программ Auto Report.
- H - Спецификация заголовка находится в верхней части программы и описывает параметры компилятора, такие как максимальный размер компиляции, является ли программа программой MRT (терминал с несколькими запросами) и какой тип листинга создается при компиляции программы. Имя объекта созданной программы находится в столбцах 75–80; если источник не имеет спецификации H, используется имя RPGOBJ.
- F - Далее следуют спецификации файлов, которые описывают файлы, используемые в программе. Файлы могут быть дисковыми файлами (DISK) или устройствами, такими как принтер (PRINTER), рабочая станция (WORKSTN), клавиатура (KEYBORD), неформатированный дисплей (CRT или DISPLAY) или определяемый пользователем (SPECIAL). Описываются размер записи, размер блока, индикаторы переполнения и внешние индикаторы. Вполне возможно, что программа RPG не будет использовать спецификации F.
- E - Спецификации расширений следующие, и описывают массивы и таблицы, которые могут быть предварительно извлечены из файлов на диске (входная таблица), взяты из констант, помещенных в конец источника между символами ** и / *, или построены из расчеты.
- Далее следуют спецификации счетчика строк L , и, если они есть, описывают форму для печати. Он определяет количество строк на странице и позиции, в которых печать начинается и заканчивается.
- I - Далее следуют входные спецификации, которые описывают области данных в файлах. RPG II позволяет переопределить области данных, чтобы поле с именем FLDA могло занимать ту же область, что и массив AR, содержащий 8 элементов по 1 символу каждый. Могут быть описаны не записываемые области, такие как структуры данных. В зависимости от значений входной записи индикаторы могут быть обусловлены.
- C - Далее следуют расчетные спецификации. Итоговые поля можно описывать и накапливать. Возможны сложные вычисления и манипуляции со строками. Индикаторы могут быть условными.
- O - Выходные спецификации, которые описывают выходную запись с точки зрения полей и выходных позиций.
Девятая была добавлена позже в 1977 году: [4]
- T - Телекоммуникации
Коды операций указаны в столбцах 28–32 расчетной спецификации RPG-II.
Код операции | Имя |
---|---|
ДОБАВЛЯТЬ | Добавлять |
SUB | Вычесть |
MULT | Умножить |
DIV | Делить |
Z-ADD | Ноль и добавить |
Z-SUB | Ноль и вычесть |
MVR | Переместить остаток |
ДВИГАТЬСЯ | Двигаться |
ДВИЖЕНИЕ | Двигай влево |
МХЛЗО | Перейти от высокой к низкой зоне |
MLHZO | Перейти от низкой к высокой зоне |
MLLZO | Перейти от низкой к низкой зоне |
MHHZO | Двигайтесь высоко в высокую зону |
БИТОН | Бит на |
НЕМНОГО | Откусить |
ТЕСТБ | Тестовый бит |
ПЕРЕЙТИ К | Перейти к |
ТЕГ | Тег (пункт назначения GOTO) |
EXSR | Выполнить подпрограмму |
BEGSR | Начать подпрограмму |
ENDSR | Конец подпрограммы |
УСТАНОВИТЬ НА | Установить на |
НАБОР ИЗ | Отправляться |
EXCPT | Исключение |
ВЫХОД | Выход |
RLABL | Переопределить ярлык |
ULABL | Метка пользователя |
ЗВОНИТЕ 1 | Вызов |
ПАРМ 1 | Параметр |
ЦЕПЬ | Цепь |
ЧИТАТЬ | Читать |
ПРОЧИТАЙТЕ | Читать равно |
READP | Прочитать предыдущий |
РЕДПЕ | Читать предыдущее равно |
SETLL | Установить нижние пределы |
НАБОР | Набор |
ВРЕМЯ | Время суток (000000-235959) |
DSPLY | Отображать |
СОРТА | Сортировать массив |
XFOOT | Crossfoot |
MOVEA | Переместить массив |
LOKUP | Поиск (найти в массиве) |
- CALL / PARM был добавлен в RPG II с выпуском 6.0 (также известный как VASP).
CHAIN извлекает запись в индексированном файле, названном в Факторе 2, который соответствует точному ключу, указанному значением в Факторе 1.
SETLL заставляет указатель индекса для файла, названного в Факторе 2, позиционироваться в месте, указанном значением в Факторе 1.
СОРТА вызывает сортировку именованного массива на месте; то есть элементы отображаются по порядку.
Z-SUB вычисляет коэффициент 2 с противоположным знаком и перемещается в поле результата.
XFOOT вызывает суммирование массива и перемещение результата в поле результата.
MVR должен следовать за операцией DIV. Целочисленный остаток от операции DIV помещается в поле результата. MVR после операции DIV для «56, разделенного на 3» поместит значение 2 в поле результата.
Индикаторы
Индикаторы либо «установлены», либо нет, поэтому они фактически представляют собой встроенную серию «флагов» или логических типов данных .
- Стандарт:
- 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
- Индикаторы остановки:
- H1 H2 H3 H4 H5 H6 H7 H8 H9
- Индикаторы соответствия:
- M1 M2 M3 M4 M5 M6 M7 M8 M9 MR
- Индикаторы контрольного уровня:
- L0 L1 L2 L3 L4 L5 L6 L7 L8 L9
- Индикаторы командных клавиш:
- 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-я страница, в основном используется для файлов принтера):
- 1P
- Индикатор последней записи:
- LR
- Индикаторы переполнения:
- OA OB OC OD OE OF OG OV
- Внешние индикаторы:
- U1 U2 U3 U4 U5 U6 U7 U8
3 | ЧАС |
5 | F / файлы |
6 | F / расширения |
7 | E |
8 | L |
10 | I / заголовок |
11 | I / поля |
12 | C |
13 | O / заголовок |
14 | O / поля |
Образец кода
F *********************************************** ************** F * ЭТА ПРОГРАММА СЧИТЫВАЕТ СОДЕРЖАНИЕ ФАЙЛА ЗАГРУЗКИ СЧЕТА F * И ПЕЧАТЬ СЧЕТА, ОБРАБОТАННЫЕ НА ДАТУ, УСТАНОВЛЕННУЮ В F * МЕСТНАЯ ОБЛАСТЬ ДАННЫХ. ЕСТЬ ПЕРЕРЫВ УРОВНЕЙ И ИТОГО ДЛЯ F * КАЖДЫЙ МАГАЗИН. F *********************************************** ************** F * FINVHDR IP F 62 ДИСК FПРИНТЕР 132 ПРИНТЕРА IINVHDR NS 01 1NC I 1 3 МАГАЗИН L1 I 4 13 ИНВНО Я 14 20 КАСТНО Я 21 45 СТНАМ Я 46 53 ИНВДАТ Я 54 622TOTINV I UDS I 1 8 RPTDAT C 01 INVDAT COMP RPTDAT 11 C 01 11 ДОБАВИТЬ TOTINV L1TOT 92 C 01 11 ДОБАВИТЬ TOTINV LRTOT 92 ОПРИНТЕР H 101 1P О ИЛИ O СТРАНИЦА Z 106 O 102 'СТРАНИЦА' O 59 'ОЧЕНЬ БОЛЬШОЙ' О 72 'МАГАЗИНЫ, ИНК.' О ДАТЕ Г 17 O 8 'ДАТА РАБОТЫ' ОН 1 1П О ИЛИ O 73 «ЕЖЕДНЕВНЫЕ ПРОДАЖИ ПО МАГАЗИНАМ» OH 2 1P О ИЛИ O RPTDAT 83 O 63 'НА ДАТУ:' ОН 1 1П О ИЛИ O 6 «МАГАЗИН» O 18 «СЧЕТ-ФАКТУРА» O 28 «КЛИЕНТ» O 58 «КЛИЕНТ» O 78 «СЧЕТ-ФАКТУРА» OH 2 1P О ИЛИ O 6 'НОМЕР' O 18 'НОМЕР' O 28 'НОМЕР' O 58 'ИМЯ' O 78 'ИТОГО' OD 0 L1 О МАГАЗИН 6 OD 1 01 11 O INVNO 18 O CUSTNO 28 О СТНАМ 58 О TOTINV1B 78 ОТ 1 L1 O 45 'ВСЕГО ПО МАГАЗИНУ ...' О L1TOT 1B 78 ОТ 1 LR O 45 'ВСЕГО ...' О LRTOT 1 78
Рекомендации
- ^ "Система Сперри Univac 1100/60" (PDF) . Проверено 18 января 2021 года .
- ^ "Руководство по языку и инструментам программного обеспечения VAX / VMS" (PDF) . bitsavers.org . 1985 . Проверено 31 декабря 2020 .
- ^ a b c «Шаблон отладки IBM RPG» , Музей истории компьютеров
- ^ "Компиляторы IBM System / 3 Model 8, Model 10, Model 12 и Model 15 RPG II" , IBM Program Product Specifications, ноябрь 1977 г., стр. 3