IBM RPG 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 серии мэйнфреймов и Ван VS Series. ICL выпустила версии для своей системы ICL 2903 и для VME / K ; и Burroughs Corporation выпустили компилятор RPG II с расширениями базы данных для компьютеров серии B1700. У Digital Equipment Corporation была собственная реализация VAX RPG II для систем VAX / VMS.

Усовершенствованная версия RPG III появилась в 1978 году.

Он имеет ряд необычных функций, в том числе: подразумеваемый цикл обработки; и что это язык программирования с фиксированным форматом, поэтому программы трудно читать без специального шаблона отладки.

Содержание
  • 1 Особенности
  • 2 спецификации RPGII
  • 3 индикатора
  • 4 Пример кода
  • 5 ссылки
  • 6 Внешние ссылки
особенности

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 Кбайт и количество файлы) были либо значительно расширены, либо удалены.

Характеристики RPGII

В популярной реализации RPG II System / 36 существует 8 различных типов спецификаций:

U - Спецификация автоматического отчета требуется только для программ автоматического отчета.
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 году:

T - Телекоммуникации

Коды операций указаны в столбцах 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 Поиск (найти в массиве)
  1. 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
Система / 36 шаблонов SEU
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
использованная литература
внешние ссылки
Последняя правка сделана 2023-04-21 08:13:15
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте