Dauerhafte RPGUmwandlungsoptionen per/COPY

4. Dezember 2013 | Von | Kategorie: Tools, Hot-Tips

IBM ist redlich bemüht bei der Weiterentwicklung von RPG rückwärtskompatibel zu alten Compilerversionen zu bleiben. Dies ist zweifelsohne eine der größten Stärken von RPG, gleichzeitig aber auch ein wesentlicher Schwachpunkt.

balaton12_camp__MG_7098Neue Optionen, die nach und nach zu RPG hinzugefügt worden sind, werden aus genau diesen Kompatibilitätsgründen default-mäßig deaktiviert. Um sie zu aktivieren, muss ein entsprechendes Schlüsselwort zu den HAnweisungen hinzugefügt werden.

Der einfachste Weg, seinen etablierten Satz an H-Anweisungen fest zu verankern, ist, diese H-Anweisungen in ein separates SrcMbr zu schreiben und das Sr incMbr per / COPY standardmäßig an den Anfang seiner RPG-Quellen zu übernehmen.

Bleibt die Frage, welche Compiler- Optionen standardmäßig aufgenommen werden sollen. Nachfolgend eine Liste interessanter Optionen:

Option(*SRCSTMT):

Ohne diese Option erzeugt der RPG Compiler bei der Umwandlung neue Zeilennummern. Bei einem Laufzeitfehler wird entsprechend eine Fehlernachricht mit einer Zeilennummer angezeigt, die nicht notwendigerweise mit der ihrer RPG-Quelle übereinstimmt. Üblicherweise muss man dann erst wieder eine aktuelle Umwandlungsliste erzeugen, um die Zeilennummer dort zu suchen. Mit der Option *SRCSTMT vermeiden Sie diesen Aufwand, da die Fehlermeldungen die Zeilennummern des Source- Codes verwenden.

Option(*NODEBUGIO):

Ausgesprochen lästig beim Debuggen eines Programms ist der schrittweise Weg des Debuggers durch alle Felder der Ein- oder Ausgabe-Bestimmungen. Dies vermeiden Sie, indem Sie die Option *NODEBUGIO angeben.

EXTBININT(*YES):

Seit seinen ersten Anfängen hat RPG einen langen Weg zurückgelegt. Anfangs nur mit den Datentypen gepackte und betonte Dezimalzahlen sowie alphanumerische Felder vertraut, wurde die betagte Programmiersprache unter anderem um neue Datentypen wie Binärfelder, vorzeichenlose und vorzeichenbehaftete Integerfelder erweitert. Was auch immer die Compilerentwickler sich dabei gedacht haben: Wenn RPG auf ein binäres Integerfeld einer extern beschriebenen Datei stößt, wird dieses als RPG-Datentyp B eingelesen, aber vor jeder der Rechenoperationen temporär in ein gepacktes numerisches Feld umgewandelt, anschließend die Kalkulation durchgeführt und das Ergebnis wieder in ein Integerfeld zurückverwandelt. Naturgemäß verlangsamt dies die Programmausführung erheblich. Vermeiden können Sie dieses Verhalten mit der Aktivierung der Option EXTBININT. Dadurch verwendet RPG direkte Integer-Berechnungen und macht nicht mehr den Umweg über gepackte Zahlen.

DFTACTGRP(*NO):

Ohne Angabe dieses Wertes wird ein RPG-Programm in einem Kompatibilitätsmodus zu dem klassischen Original Program Model (OPM) umgewandelt. Dadurch läuft das Programm nicht nur in der so genannten Default Activation Group, sondern verhält sich auch in jeder anderen Hinsicht als reines OPM Programm, das keine ILE-Fähigkeiten hat und häufi ger als erwünscht deaktiviert wird.  

BNDDIR(‚UNSERDIR‘:’QC2LE‘):

Wer mit Unterprozeduren aus Modulen und Serviceprogrammen arbeitet, kennt das Ärgernis, diese Verzeichnisse jedes Mal explizit angeben zu müssen. Eine H-Anweisung mit dieser Angabe weist den Compiler an, Prozeduren in diesen beiden Binder-Verzeichnissen zu suchen. Die erste Verzeichnisangabe ‚UNSERDIR‘ sollten Sie natürlich durch den Namen Ihres Binderverzeichnisses ersetzen. Die zweite Angabe ist erforderlich, wenn Sie eine der vielen von IBM mitgelieferten Tools verwenden. Sie können diese BNDDIR Angabe unbesorgt in jedem RPG-Programm verwenden, selbst wenn sich darin keinerlei externe Unterprozeduren befi nden. Zum Zeitpunkt der Umwandlung werden nur dann Prozeduren in Ihr Programm eingebunden, wenn auch tatsächlich welche verwendet werden, die in einem Binderverzeichnis aufgeführt sind. Mit IBM OS i V6R1 wird der Eintrag ‚QC2LE‘ übrigens nicht mehr benötigt, dieses Binderverzeichnis wird jetzt automatisch durchsucht.

Wenn Sie die Umwandlungsoptionen standardmäßig verwenden wollen, könnten Sie sie wie folgt in eine Quellen Teildatei schreiben und per /COPY standardmäßig in ihre Programme einbinden:

H Option( *SRCSTMT:*NODEBUGIO)
H EXTBININT(*YES)
H BNDDIR('UNSERE_PRC': 'QC2LE')
/if defi ned( *CRTBNDRPG )
H DFTACTGRP(*NO)
/endif

Anmerkung:

Die bedingte Compileranweisung stellt sicher, dass das Schlüsselwort DFTACTGRP nur bei den Umwandlungsbefehlen CRTBNDRPG bzw. CRTSQLRPGI (bei dem intern auch ein CRTBNDRPG abgesetzt wird) zum Tragen kommt. Angenommen, Sie schreiben diese H-Anweisungen in eine Quellendatei mit Namen UNSREHSPEC, dann binden Sie diese per

H/COPY UNSREHSPEC

in Ihre RPG-Programme ein. Wollen Sie in einem einzelnen Programm eine oder mehrere zusätzliche H-Anweisungen einsetzen, können Sie diese nach der /Copy- Anweisung hinzufügen:

H/COPY UNSREHSPEC
H ACTGRP(*CALLER) NOMAIN

Der RPG-Compiler wird alle HAnweisungen verwenden, sowohl die der /Copy-Strecke als auch die explizit eingefügten.

Schlagworte: , , , , , , , , , ,

Schreibe einen Kommentar

Sie müssen eingeloggt sein, um einen Kommentar schreiben.