IBM RPG II

RPG II to bardzo wczesna i popularna wersja języka programowania IBM RPG .

Został opracowany pod koniec lat 60. XX wieku i przeznaczony do pracy na najmniejszych ówczesnych systemach IBM, takich jak IBM 1130 , IBM System/3 , System/32 , System/34 , System/36 . Był jednak również dostępny dla serii System / 370 , The Singer System 10 , Sperry Univac 90/25, 90/30, 90/40, System 80, 1100 i serii Wang VS. ICL wyprodukowała wersje dla swojego systemu ICL 2903 i dla VME/K ; i Burroughs Corporation wyprodukowały kompilator RPG II z rozszerzeniami baz danych dla swoich komputerów z serii B1700 . Firma Digital Equipment Corporation miała własną implementację o nazwie VAX RPG II dla systemów VAX/VMS .

Ulepszona wersja RPG III pojawiła się w 1978 roku.

Ma wiele niezwykłych funkcji, w tym: domniemaną pętlę przetwarzania; i że jest to język programowania o stałym formacie, więc programy są trudne do odczytania bez specjalnego szablonu debugowania.

Cechy

RPG II to język programowania o stałym formacie, co oznacza, że ​​kod musi być umieszczony dokładnie w kolumnach, aby wygenerować poprawne wyniki. Istnieje osiem różnych typów specyfikacji, a każdy z nich jest zapisywany w oddzielnych formach kodowania, a specjalny szablon do debugowania służy jako pomoc w odczytywaniu wydruków programów.

Każdy program RPG II wykonuje się w domniemanej pętli, cyklu programu , który stosuje program sukcesywnie do każdego rekordu pliku - jest to udokumentowane za pomocą diagramu „Logic Flow” na szablonie debugowania. Każdy rekord (pojedyncza karta dziurkowana) byłby porównywany z każdą linią w programie, która działałaby na płycie lub nie, w zależności od tego, czy ta linia miała „wskaźnik” włączony lub „wyłączony” - z zestawu zmienne logiczne o numerach 01–99 do celów zdefiniowanych przez użytkownika lub inne mniejsze zestawy oparte na funkcjach przetwarzania rekordów, pól lub raportów. Zmienne specjalne, takie jak UDATE, UYEAR, PAGE i tak dalej, są wypełniane podczas uruchamiania programu lub w przypadku przepełnienia strony, mimo że nie ma wyraźnych instrukcji dotyczących tych działań. Całkowite obliczenia i dane wyjściowe są wykonywane w „czasie całkowitym”, po cyklu szczegółowym, gdy L1/LR został włączony przez ustaloną logikę.

Koncepcja cyklu programu RPG idealnie pasowała do cyklicznej maszyny, która odczytuje karty, podsumowuje ich zawartość i drukuje wynik, podobnie jak maszyna do tworzenia tabel . Język został rozszerzony o obsługę innych urządzeń wejścia i wyjścia oraz zapewnia szybką i wydajną metodę programowania.

Urządzenia takie jak stacja robocza (WORKSTN), klawiatura (KEYBORD) lub konsola (CONSOLE) nie mają ustalonej liczby rekordów na początku zadania i dlatego, aby włączyć RPG o stałej logice „Ostatni rekord ", wskaźnik LR można ustawić za pomocą instrukcji SETON. LR nie można wyłączyć.

RPG II niewiele ewoluowało od implementacji w Systemie / 34 z 1977 r. Do 2000 r., Kiedy Advanced / 36 został wycofany ze sprzedaży. Zmiany wprowadzone w stosunku do wersji z lat 70. obejmowały grupowanie IFEQ/IFNE/IFGT/IFGE/IFLT/IFLE i END. Również call/parm, aby móc wywoływać zewnętrzne podprogramy. Kolejną zmianą było to, że w przypadku wewnętrznych podprogramów nie trzeba było już umieszczać SR w kolumnach 7 i 8 specyfikacji C (obliczeń).

Dostawcy zewnętrzni sprzedali ponad 200 różnych podprogramów asemblera, których programiści System / 36 i Advanced / 36 mogli używać w celu przekroczenia ograniczeń RPG II. Niektóre z ograniczeń RPG II w systemach System/3, 32, 34 i 36, w tym Advanced/36, to limit 64 KB i liczba plików, które można mieć w programie. Więc jeśli miałeś dużo linii programowania lub duże tablice, łatwo było przekroczyć 64 000 bajtów kodu obiektowego. Jednak RPG II działający na AS/400 i jego kontynuacja na iseries i IBM i (z systemem OS/400 lub i5/OS w tak zwanym S/36E (środowisko wykonawcze)) te ograniczenia (64 KB i liczba pliki) zostały znacznie rozszerzone lub usunięte.

Specyfikacja RPG II

W popularnej implementacji RPG II System/36 istnieje 8 różnych typów specyfikacji:

U — Raport automatyczny jest wymagana tylko w przypadku programów automatycznego raportowania.
H - Specyfikacja nagłówka znajduje się na górze programu i opisuje opcje kompilatora, takie jak maksymalny rozmiar kompilacji, czy program jest programem MRT (Multiple Requestor Terminal) i jaki typ listy jest generowany podczas kompilacji programu. Nazwa obiektu utworzonego programu znajduje się w kolumnach 75–80; jeśli źródło nie ma specyfikacji H, używana jest nazwa RPGOBJ.
F - Specyfikacje plików są następne i opisują pliki używane w programie. Pliki mogą być plikami dyskowymi (DYSK) lub urządzeniami takimi jak drukarka (DRUKARKA), stacja robocza (WORKSTN), klawiatura (KEYBORD), niesformatowany wyświetlacz (CRT lub DISPLAY) lub zdefiniowany przez użytkownika (SPECIAL). Opisano rozmiar rekordu, rozmiar bloku, wskaźniki przepełnienia i wskaźniki zewnętrzne. Możliwe, że program RPG nie będzie używał żadnych specyfikacji F.
E - Specyfikacje rozszerzeń są następne i opisują tablice i tabele, które mogą być wstępnie pobrane z plików dyskowych (tabela wejściowa), narysowane ze stałych umieszczonych na końcu źródła między symbolami ** i /* lub zbudowane z obliczenia.
Ł - Następna jest specyfikacja licznika linii, a jeśli jest, opisz formularz, który ma zostać wydrukowany. Określa liczbę wierszy na stronie oraz pozycje rozpoczęcia i zakończenia drukowania.
I — Specyfikacje wejściowe są następne i opisują obszary danych w plikach. RPG II pozwala na ponowne zdefiniowanie obszarów danych, tak aby pole o nazwie FLDA mogło zajmować ten sam obszar co tablica AR zawierająca 8 elementów po 1 znak każdy. Można opisać obszary inne niż rekordy, takie jak struktury danych. W zależności od wartości rekordu wejściowego wskaźniki mogą być uwarunkowane.
C - Specyfikacje obliczeniowe są następne. Wszystkie pola mogą być opisywane i sumowane. Możliwe są złożone obliczenia i manipulacje łańcuchami. Wskaźniki mogą być uwarunkowane.
O - Specyfikacje danych wyjściowych, które opisują rekord wyjściowy w kategoriach pól i pozycji wyjściowych.

Dziewiąty został dodany później w 1977 roku:

T - Telekomunikacja

Kody operacji pojawiają się w kolumnach 28–32 specyfikacji obliczeniowej RPG-II.

Kod operacji Nazwa
DODAĆ Dodać
POD Odejmować
WIELE Zwielokrotniać
DIV Dzielić
Z-ADD Wyzeruj i dodaj
Z-SUB Zero i odejmij
MVR Pozostała część ruchu
PRZENOSIĆ Przenosić
RUCH Przesuń w lewo
MHLZO Przenieś strefę wysoką do niskiej
MLHZO Przejdź do strefy niskiej do wysokiej
MLLZO Przenieś Niską do Niskiej Strefy
MHZO Przenieś wysoką do wysokiej strefy
BITON Bit włączony
TROCHĘ Odgryźć
TESTB Bit testowy
IŚĆ DO Iść do
ETYKIETKA Tag (miejsce docelowe GOTO)
EXSR Wykonaj podprogram
BEGSR Rozpocznij podprogram
KONIEC Koniec podprogramu
USTAW NA Ustaw na
USTAW Wyruszyć
Z WYJĄTKIEM Wyjątek
WYJŚCIE Wyjście
RLABL Przedefiniuj etykietę
ULAB Etykieta użytkownika
ZADZWOŃ 1 Dzwonić
PARMA 1 Parametr
ŁAŃCUCH Łańcuch
CZYTAĆ Czytać
PRZECZYTAJ Przeczytaj Równość
PRZECZYTAJ Przeczytaj poprzedni
REDPE Czytaj poprzednie równe
SETLL Ustaw dolne limity
USTAWIĆ Ustawić
CZAS Pora dnia (000000-235959)
DSPLY Wyświetlacz
SORTUJ Sortuj tablicę
XFOOT ze skrzyżowanymi stopami
RUCH Przenieś tablicę
LOKUP Wyszukiwanie (znajdź w tablicy)
  1. CALL/PARM został dodany do RPG II wraz z wydaniem 6.0 (znanym również jako VASP).

CHAIN ​​pobiera rekord w indeksowanym pliku nazwany w Factor 2, który dokładnie pasuje do klucza określonego przez wartość w Factor 1.

SETLL powoduje, że wskaźnik indeksu dla pliku nazwanego w Factor 2 jest umieszczony w miejscu określonym przez wartość w Factor 1.

SORTA powoduje, że nazwana tablica jest sortowana w miejscu; oznacza to, że elementy pojawiają się w kolejności.

Z-SUB oblicza Współczynnik 2 z przeciwnym znakiem i przechodzi do pola wynikowego.

XFOOT powoduje zsumowanie tablicy i przeniesienie wyniku do pola wynikowego.

MVR musi następować po operacji DIV. Reszta całkowita z operacji DIV jest umieszczana w polu wynikowym. MVR następujący po operacji DIV dla „56 podzielone przez 3” umieściłby wartość 2 w polu wyniku.

Wskaźniki

Wskaźniki są albo „ustawione”, albo nie – są więc w rzeczywistości wbudowaną serią „flag” lub boolowskich typów danych .

  • Standardowy:
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 8 9 90 91 92 93 94 95 96 97
98 99
  • Wskaźniki zatrzymania:
H1 H2 H3 H4 H5 H6 H7 H8 H9
  • Pasujące wskaźniki:
M1 M2 M3 M4 M5 M6 M7 M8 M9 MR
  • Wskaźniki poziomu sterowania:
L0 L1 L2 L3 L4 L5 L6 L7 L8 L9
  • Wskaźniki klawiszy poleceń:
KA KB KC KD KE KF KG KH KI KJ KK KL KM KN KP KQ KR KS KT KU KV KW KX KY
Te wskaźniki odnoszą się do klawiszy poleceń od 1 do 24, w tej kolejności. Zauważ, że nie ma wskaźnika KO.
  • Wskaźnik pierwszego cyklu (pierwsza strona, używany głównie do plików drukarskich):
1P
  • Wskaźnik ostatniego zapisu:
LR
  • Wskaźniki przepełnienia:
OA OB OC OD OE OF OG OV
  • Wskaźniki zewnętrzne:
U1 U2 U3 U4 U5 U6 U7 U8
Szablony System/36 SEU
3 H
5 F/pliki
6 F/rozszerzenia
7 mi
8 Ł
10 ja/nagłówek
11 I/pola
12 C
13 O/nagłówek
14 O/pola

Przykładowy kod

F************************************************* ************** F* TEN PROGRAM ODCZYTUJE ZAWARTOŚĆ PLIKU NAGŁÓWKOWEGO F* FAKTURY I WYDRUKUJE FAKTURY PRZETWARZANE DLA DATY USTAWIONEJ W LOKALNYM OBSZARZE DANYCH F*. DLA KAŻDEGO SKLEPU SĄ PODZIĘKOWANIA POZIOMÓW I SUMY. F************************************************* ************** F* FINVHDR IP F 62 DYSK FDRUKARKA 132 DRUKARKI 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 'V ERY BIG' O 72 'SKLEPY, INC.' O UDATE Y 17 O 8 „RUN DATE” OH 1 1P O LUB O 73 „DZIENNA SPRZEDAŻ WEDŁUG SKLEPU” OH 2 1P O OR OF O RPTDAT 83 O 63 „DATA DLA:” OH 1 1P O LUB O 6 „SKLEP ' O 18 'FAKTURA' O 28 'KLIENT' O 58 'KLIENT' O 78 'FAKTURA' OH 2 1P O LUB O 6 'NUMER' O 18 'NUMER' O 28 'NUMER' O 58 'NAZWA' O 78 ' TOTAL' OD 0 L1 O STORE 6 OD 1 01 11 O INVNO 18 O CUSTNO 28 O STNAM 58 O TOTINV1B 78 OT 1 L1 O 45 'STORE TOTAL...' O L1TOT 1B 78 OT 1 LR O 45 'GRAND TOTAL.. O LRTOT 1 78

Linki zewnętrzne