U»ytkowanie i programowanie systemu AS/400 J¦zyk RPG IV
Transkrypt
U»ytkowanie i programowanie systemu AS/400 J¦zyk RPG IV
Politechnika l¡ska, Gliwice Instytut Informatyki U»ytkowanie i programowanie systemu AS/400 J¦zyk RPG IV 15 pa¹dziernika 2003 1 1 Wprowadzenie Przez wiele lat j¦zyk programowania RPG rozwin¡ª si¦ od narz¦dzia generuj¡cego raporty do w peªni funkcjonalnego j¦zyka programowania. W wersji trzeciej systemu OS /400 IBM wprowadziª now¡ wersj¦ RPG nazwanego RPG ILE dla AS /400. Wersja ta byªa najbardziej znacz¡c¡ modykacj¡ oryginalnego j¦zyka. Konwencja nazewnicza wersji j¦zyka RPG mo»e cz¦sto wprowadza¢ w zakªopotanie. Terminy RPG ILE i RPG IV cz¦sto s¡ u»yte na przemian i w prawdzie s¡ one tym samym produktem. Jednak»e, jest ró»nica mi¦dzy terminem RPG IV i ILE RPG. Nazwa RPG IV oznacza kolejn¡ wersj¦ j¦zyka w stosunku do RPG III, natomiast ILE RPG okre±la, »e j¦zyk ten jest zgodny z modelem ILE (Integrated Language Environment). ILE jest zbiorem funkcjonalno±ci, który wyst¦puje w wielu j¦zykach programowania (C, C++, CL, Cobol) na platformie AS /400. Dostarcza mo»liwo±¢ tworzenia pojedynczego programu u»ywaj¡c wielu j¦zyków programowania. Dlatego, RPG IV jest zgodny z modelem ILE. Odkªadaj¡c na bok funkcjonalno±¢ ILE, RPG IV ma znaczn¡ liczb¦ ulepsze« w stosunku do RPG III: • Dªu»sze pola nazw • Wsparcie dla zmiennych typu data i czasu • Dodatkowe typy danych ( liczby zmienno przecinkowe, Boole'a, wska¹niki) • Wyra»enia typu Free-format • Funkcje wbudowane (BIF - Built In Functions) • Procedury 2 Porównanie ILE i OPM RPG przed wersj¡ RPG IV ILE u»ywa oryginalnego modelu programu (OPM - Original Model Program). Odpowiednik OPM jest ILE. OPM charakteryzuje si¦ tym, »e z jednej jednostki kompilacji (zbiór pliku z ¹ródªami) tworzony jest jeden wykonywalny program. W przypadku modelu ILE proces tworzenia programu jest dwufazowy. Z danych jednostek kompilacji tworzone s¡ obiekty typu moduª. Moduªy zwieraj¡ kod maszynowy, ale nie mog¡ by¢ bezpo±rednio wykonywane. Aby stworzy¢ program wykonywalny nale»y jeden lub wi¦cej moduªów powi¡za¢ wykorzystuj¡c polecenie systemowe CRTPGM. Gªówn¡ zalet¡ ILE jest to, »e moduªy utworzone przy wykorzystaniu ró»nych j¦zyków programowania mog¡ zosta¢ powi¡zane w jeden program. 2 3 Wyra»enia typu Free-format Wprowadzono wiele nowych instrukcji do j¦zyka RPG IV pozwalaj¡cych wykorzysta¢ poszerzone pole drugiego argumentu operacji. Poszerzone pole drugiego argumentu pozwala na wprowadzanie wyra»e« i wykorzystanie mo»liwo±¢ funkcji wbudowanych (BIF). Wszystkie instrukcje RPG III, które zawieraj¡ operacje porównania (np.: IFEQ, DOWLT) mog¡ zosta¢ zapisane w ROG IV u»ywaj¡c roszeroznego pola drugiego argumentu. Na przykªad: C C C *in99 A ifeq andne ... *off C Mo»e zosta¢ zapisane w RPG IV C C if ... *in99 = *off and A <> C Oba powy»sze instrukcje opisuj¡ ten sam przebieg sterowania, podczas gdy wykorzystanie rozszerzonego pola drugiego argumentu mo»e by¢ znacznie czytelniejsze, zwªaszcza przy skomplikowanych wyra»eniach. Wyra»enia obj¦te w nawiasy zawsze wykonywane s¡ pierwsze. C C if ... *in99 = *off and (a + b = c) Poni»sze instrukcje wykorzystuj¡ rozszerzone pole drugiego argumentu: RPG IV IF DOW DOU WHEN EVAL EVALR FOR RPG III IFxx DOWxx DOUxx WHxx brak brak brak 3 4 Instrukcja EVAL/EVALR Instrukcja EVAL pozwala na przypisanie warto±ci zmiennej wykorzystuj¡c wyra»enia. C C C eval eval eval x = y + 10 napis = "Hello Word" Z = (X / Y) * 3.14159 Instrukcja mo»e by¢ u»ywana na dowolnego typu zmiennych, jednak»e prawa i lewa strona przypisania musz¡ by¢ tego samego typu. Instrukcja EVAL zawiera funkcjonalno±¢ nast¦puj¡cych instrukcji j¦zyka RPG III: Z-ADD, MOVE, ADD, SUB, MULT, DIV. 5 Deklaracja zmiennych Specykacja D pozwala na deklaracje zmiennych. W RPG IV poza zmiennymi typu zankowego i numerycznego staªoprzecinkowego istnieje typ zmiennoprzecinkowy (FLOAT DOUBLE) oraz typy reprezentuj¡ce czas, date oraz stempel czasowy. Sªowo kluczowe INZ mo»e posªu»y¢ do inicjalizacji zmiennych. * zmienna d napis * zmienna d alfa * zmienna d data * zmienna d czas * zmienna d stemp * zmienna d beta * zmienna d gama 6 znakowa s 20 inz('Hello World') numeryczna (staªoprzecinkowa) s 6 0 inz(256) reprezentuj¡ca date s D inz(d'2000-01-01') reprezentuj¡ca czas s T inz(t'23:59:59') reprezentuj¡ca stempel czasowy s Z inz(*sys) zmiennoprzecinkowa typu FLOAT s 4F zmiennoprzecinkowa typu DOUBLE s 8F Funkcje wbudowane BIF Funkcje wbudowane s¡ to funkcje napisane przez IBM'a dostarczane z j¦zykiem RPG IV. Mog¡ zosta¢ u»yte w wyra»eniach. Nazwa wszystkich funkcji wbudowanych jest poprzedzona znakiem % ,wi¦kszo±¢ z nich pobiera parametry. Kompletn¡ list¦ funkcji wbudowanych mo»na znale¹¢ w dokumentacji j¦zyka RPG IV. Przykªad: C * index = 3 eval index = %int(%abs(-3.14)) 4 Szczególnie wa»n¡ role odgrywaj¡ funkcje wbudowane zwi¡zane z operacjami wej±cia wyj±cia, pozwalaj¡ na eliminacj¦ potrzeby u»ywania indykatorów. • %Eof - zwraca warto±¢ *ON, gdy wyst¡pi koniec pliku, u»ywana w kooperacji z instrukcjami: READ, READE • %Found - zwraca warto±¢ *ON, gdy ostatnia operacja na pliku odnalazªa rekor- dy, u»ywana w kooperacji z instrukcjami: CHAIN, SETLL, SETGT C C C KLUCZ C C C KLUCZ 7 CHAIN IF DOW ... READE ENDDO ENDIF PLIK %FOUND NOT %EOF PLIK Procedury 7.1 Denicja procedury Denicja wszystkich procedur musi si¦ rozpocz¡¢ i zako«czy¢ specykacj¡ P. PName+++++++++++..T...................Keywords P FUN B . . P FUN E 7.2 Interfejs procedury Wszystkie procedury musz¡ mie¢ zdeniowany interfejs. Okre±la on wszystkie parametry jakie musz¡ zosta¢ przekazane do procedury, oraz deniuje typ zwracanej warto±ci. P D D D FUN FUN ARG1 ARG2 B PI 3 0 20 6 0 * Procedura FUN zwraca warto±¢ typu numerycznego (3 0) * pobiera ARG1 typu znakowego (20) i ARG2 typu numerycznego (6 0) P FUN E 5 7.3 Wywoªanie procedury Aby móc wywoªa¢ z procedure nale»y zdeklarowa¢ jej prototyp. Procedury mog¡ zosta¢ wywoªane w wyra»eniach w analogiczny sposób jak funkcje wbudowane lub wykorzystuj¡c instrukcj¦ CALLP. Parametry s¡ przekazywane do procedury przez referencje. * deklaracja prototypu procedury D FUN PR 9 0 D ARG1 20 0 D ARG2 9 0 * wywoªanie procedury w wyra»eniu C eval A = FUN( NAPIS : ALFA ) * wywoªanie procedury instrukcj¡ CALLP * tracona jest warto±¢ zwracana C callp FUN( NAPIS : ALFA ) 7.4 Przykªad programu wykorzystuj¡cego procedury * deklaracja prototypu procedury D FUN PR 9 0 D ARG1 9 0 D ARG2 9 0 * deklaracja zmiennych globalnych D ALFA 9 0 inz(32) D BETA 9 0 inz(32) D GAMA 9 0 C C * program eval eval * definicja procedury P FUN2 B * interfejs procedury D FUN PI D ARG1 D ARG2 * zmienne lokalne D wynik S *obliczenia C eval C return P FUN2 E GAMA = FUN( ALFA : BETA ) *inlr = *on 9 0 9 0 9 0 9 0 wynik = Arg1 + Arg2 wynik 6