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 серии мэйнфреймов и Ван VS Series. ICL выпустила версии для своей системы ICL 2903 и для VME / K ; и Burroughs Corporation выпустили компилятор RPG II с расширениями базы данных для компьютеров серии B1700. У Digital Equipment Corporation была собственная реализация VAX RPG II для систем VAX / VMS.
Усовершенствованная версия RPG III появилась в 1978 году.
Он имеет ряд необычных функций, в том числе: подразумеваемый цикл обработки; и что это язык программирования с фиксированным форматом, поэтому программы трудно читать без специального шаблона отладки.
RPG II - это язык программирования с фиксированным форматом, что означает, что код должен быть размещен в точных местах столбцов для получения правильных результатов. Существует восемь различных типов спецификаций, и для каждой записи используются отдельные формы кодирования, а также специальный шаблон отладки, используемый в качестве вспомогательного средства для чтения распечаток программ.
Каждая программа RPG II выполняется в рамках подразумеваемого цикла, программного цикла, который последовательно применяет программу к каждой записи файла - это задокументировано с помощью диаграммы «Логический поток» в шаблоне отладки. Каждая запись (отдельная перфокарта) будет сравниваться с каждой строкой в программе, которая будет воздействовать на запись или нет, в зависимости от того, был ли у этой строки «индикатор» включен или выключен - из набора логические переменные, пронумерованные 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. Кроме того, 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 Кбайт и количество файлы) были либо значительно расширены, либо удалены.
В популярной реализации RPG II System / 36 существует 8 различных типов спецификаций:
Девятая была добавлена позже в 1977 году:
Коды операций указаны в столбцах 28–32 расчетной спецификации RPG-II.
Код операции | имя |
---|---|
ДОБАВИТЬ | Добавить |
SUB | Вычесть |
MULT | Умножить |
DIV | Делить |
Z-ADD | Ноль и добавить |
Z-SUB | Ноль и вычесть |
MVR | Переместить остаток |
ШАГ | Шаг |
MOVEL | Движение влево |
МХЛЗО | Перейти от высокой к низкой зоне |
MLHZO | Перейти от низкой к высокой зоне |
MLLZO | Перейти от низкой к низкой зоне |
MHHZO | Двигайтесь высоко в высокую зону |
БИТОН | Бит на |
НЕМНОГО | Откусил |
ТЕСТБ | Тестовый бит |
ПЕРЕЙТИ К | Перейти к |
ТЕГ | Тег (пункт назначения GOTO) |
EXSR | Выполнить подпрограмму |
BEGSR | Начать подпрограмму |
ENDSR | Конец подпрограммы |
УСТАНОВЛЕН НА | Установлен на |
НАБОР ИЗ | Отправляться |
EXCPT | Исключение |
ВЫХОД | Выход |
RLABL | Переопределить ярлык |
ULABL | Метка пользователя |
ЗВОНИТЕ 1 | Вызов |
ПАРМ 1 | Параметр |
ЦЕПЬ | Цепь |
ЧИТАТЬ | Читать |
ПРОЧИТАТЬ | Читать равно |
READP | Читать предыдущий |
РЕДПЕ | Читать предыдущее равно |
SETLL | Установить нижние пределы |
НАБОР | Набор |
ВРЕМЯ | Время суток (000000-235959) |
DSPLY | Дисплей |
СОРТА | Сортировка массива |
XFOOT | Crossfoot |
MOVEA | Переместить массив |
LOKUP | Поиск (найти в массиве) |
CHAIN извлекает запись в индексированном файле, названном в Факторе 2, который соответствует точному ключу, указанному значением в Факторе 1.
SETLL заставляет указатель индекса для файла, названного в Факторе 2, позиционироваться в местоположении, указанном значением в Факторе 1.
СОРТА вызывает сортировку именованного массива на месте; то есть элементы появляются по порядку.
Z-SUB вычисляет коэффициент 2 с противоположным знаком и перемещается в поле результата.
XFOOT вызывает суммирование массива и перемещение результата в поле результата.
MVR должен следовать за операцией DIV. Целочисленный остаток от операции DIV помещается в поле результата. MVR после операции DIV для «56, разделенного на 3» поместит значение 2 в поле результата.
Индикаторы либо «установлены», либо нет - поэтому они фактически представляют собой встроенную серию «флагов» или логических типов данных.
3 | ЧАС |
5 | F / файлы |
6 | F / расширения |
7 | E |
8 | L |
10 | I / заголовок |
11 | I / поля |
12 | C |
13 | O / заголовок |
14 | O / поля |
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