2016-07-19 14 views
0

Könntest du mir eine Idee geben, wie man sich die Datei ansieht, wie kann ich zwischen RPG Copybook und Programm unterscheiden?Unterschied zwischen RPG Copybook und Programm

Zum Beispiel in c, wenn Sie Haupt in der Datei haben, wissen Sie, dass es als Programm verwendet werden kann.

Vielen Dank im Voraus.

+0

Einfachste, möglicherweise sogar "schnellste", ist es zu versuchen, es zu kompilieren. Das größte Problem wäre, dass Sie bis zu vier Compiles testen müssen - als * PGM, * MODULE, SQL * PGM und SQL * MODULE. Wenn ein Fehler auftritt, versuchen Sie den nächsten. Hmmm ... ich denke auch OPM und ILE. Kompilieren Sie mit etwas wie OPTION (* NOSRCSTMT * NOXREF * NOGEN) vielleicht, und in QTEMP. – user2338816

Antwort

2

Das ist eine interessante Frage ... es ist normalerweise ziemlich offensichtlich.

Ich nehme an, die schnelle Antwort ist, dass Kopierbücher nicht verschiedene Arten von Spezifikationen enthalten. Ein RPG IV-Programm kann H-, F-, D-, I-, C-, O- und P-Spezifikationen oder ihre Freiformäquivalente haben. (Der Spezifikationstyp wird durch den Buchstaben in Spalte 6 der Quelle mit festem Format bestimmt). Die Reihenfolge ist wichtig und Sie können die Typen nicht mischen. Wenn Sie eine Quelle mit nur einer Art von Spezifikationen betrachten, ist diese wahrscheinlich als Copybook konzipiert. Da der ausführbare Code in den Spezifikationen C (Berechnung) und/oder P (Prozedur) enthalten ist, ist eine Quelle ohne C- oder P-Spezifikationen ein Copybook. Während es normalerweise eine schlechte Übung ist, C oder P Specs in einem Copybook zu haben, erlaubt RPG es und ich habe es gesehen. Aber noch einmal, das einzige Ding im Kopierbuch würde C oder P specs sein.

EDIT Sie könnten ein Heft mit zum Beispiel F & D-Spezifikationen, aber der einzige Ort, es ist am Ende eines F-Spezifikationen des Programms vor all D-Spezifikationen berücksichtigt werden kann. Sie könnten ein Copybook haben, das Compiler-Direktiven /IF DEFINED verwendet, um zu steuern, welcher Teil des Copybooks wo enthalten ist.

EDIT2 Es stellte sich heraus, dass IBM die Möglichkeit hinzugefügt hat, F & D Spezifikationen in Version 7.1 und höher zu mischen. Ein Quellenelement mit nur F & D Spezifikationen wäre ein Copybook Also die kurze Antwort wird, ein Quellelement mit beiden Definitionen (H, F, D, I, O) Spezifikationen und ausführbare (C & P) Spezifikationen ist so konzipiert, kompiliert werden .

Die längere Antwort, ein RPG-Programm hat auch eine "Haupt". Ursprünglich war die einzige Option, was heute als "cycle-main" bekannt ist. IE. Die "Haupt" -Prozedur ist der implizit erzeugte Code "cycle", der in RPG-Programme eingebaut ist.

Dann kam RPG IV und ILE. IBM hat das Steuerelementspezifikationsschlüsselwort NOMAIN hinzugefügt.

H NOMAIN 
    //or in freeform 
    ctl-opt nomain; 

Dies führte zu einem nicht ausführbaren Modul ohne eine "Haupt" -Prozedur; der normalerweise vom Compiler für den "Zyklus" erzeugte Code wird weggelassen. Das resultierende * MODULE-Objekt müsste in ein * PGM-Objekt mit einem anderen * MODULE eingebunden werden, das eine Hauptprozedur bereitstellt.

Oder es könnte mit null oder mehr anderen * MODULE-Objekte in ein * SRVPGM-Objekt gebunden werden; * SRVPGM sind nur Sammlungen von Prozeduren. Denken Sie an sie wie Windows DLLs.

Dann fügte IBM die Option hinzu, ein "linear-main" RPG IV-Programm zu haben.

H MAIN(MYMAIN) 
    // or freeform 
    ctl-opt main(MYMAIN); 

So ist die Hauptprozedur, welche Prozedur Sie bezeichnen. Der erzeugte "Zyklus" -Code wird wieder aus der ausführbaren Datei herausgelassen.

Die Existenz der Schlüsselwörter NOMAIN oder MAIN würde also anzeigen, dass ein Quellmember kompiliert werden soll; vorausgesetzt, es gibt mehr als die Quelle. Es ist möglich, dass es eine Include-Datei für "Standardoptionen" gibt, die eines davon enthält.

Das Fehlen dieser beiden Schlüsselwörter weist darauf hin, dass es sich um eine Zyklushaupt- oder eine Include-Datei handelt.

Wenn es ein Zyklus Hauptprogramm ist und es dauert Parameter als Eingabe, können Sie den Eintrag Parameterliste

//Fixed format, old school RPG III, IV 
C  *ENTRY  PLIST          
C     PARM     LCMPNO   2 
C     PARM     LNTACT   1 

// fixed format, RPG IV using a "Procedure Interface (PI) to replace *ENTRY PLIST 
D CheckDate  PI    
D lDateIs      4a 

    // free format RPG IV 
dcl-pi CheckDate; 
    lDateIs char(4); 
end-pi; 

Beachten Sie, dass ein wesentlicher Unterschied in der Quelle zwischen einem „Zyklus-main“ sehen Programm, das die PI anstelle von *ENTRY PLIST verwendet und eine lineare Haupt ist, dass eine lineare Hauptprozedur von einer expliziten Prozedurdefinition umgeben ist.

// linear main 
h main(CHECKDATE) 
p CheckDate  b 
d CheckDate  PI    
d lDateIs      4a 
    //do something 
    *INLR = *ON 
    return; 
p CheckDate  e 

    //cycle main with PI 
d lDateIs      4a 
    //do something 
    *INLR = *ON 
    return; 
+0

ziemlich saubere Antwort. Vielen Dank. – user1578026

+0

@ user1578026, habe ich eine Bearbeitung hinzugefügt, um einige spezielle Fälle abzudecken, in denen die kurze Antwort nicht ganz richtig ist. – Charles

+0

Vielleicht möchten Sie @Barbra Morris Antwort auch bemerken, die wirklich ein Kommentar zu dieser Antwort ist. – jmarkmurphy

1

Beginnend in 7.1 (mit den Freiform-PTFs von 2013), können Sie F- und D-Spezifikationen (sogar in der festen Form) mischen.

+0

Verpasste diesen Leckerbissen in den Erweiterungen. Ich füge es meiner Antwort hinzu. – Charles

0

rpg Kopie Buch ist ziemlich nah an imports in modernen Programmiersprachen

0

Eine Kopie Buch sollte wie eine Header-Datei in C oder C++ mehr verwendet werden. Leider wird es diesen hilfreichen .h-Extender nicht haben, um die Dinge getrennt zu halten. Shop-Standards können hier hilfreich sein. Sie können Copybooks in einer separaten Quelldatei speichern oder sie mit einem bestimmten Präfix oder Suffix benennen, um anzuzeigen, dass es sich um ein Copybook handelt. Ich habe Suffixe wie _ oder _h in Copybooks verwendet, in denen der Basisname mit dem Quellelement übereinstimmt, für das er als Header-Datei fungiert. Oder, falls Copybooks und Programmquellen in verschiedenen Quelldateien gespeichert sind, haben ein Programm und seine Header-Datei denselben Namen. Wie C kann RPG4 Quelldateien enthalten, die in Programme und Quelldateien kompiliert werden können, die zu Modulen kompiliert werden können (ein Modul ist ein IBM i-Begriff, ähnlich wie die nicht verknüpfte .obj-Datei, die von einem C-Compiler generiert wird) andere Plattformen) oder Programme, die vollständig verknüpfte ausführbare Dateien sind. Damit eine RPG-Quelle zu einer vollständig verknüpften ausführbaren Datei kompiliert werden kann, benötigt sie eine Hauptprozedur. Charles erklärte die Haupt- und Nomain-Schlüsselwörter für h-Spezifikationen. Wenn die Programmquelle nicht das Schlüsselwort Nomain hat, kann sie als vollständig verknüpftes Programm generiert werden. Seien Sie vorsichtig, obwohl es nicht üblich ist, können die h-Spezifikationen anderswo sein, wie in ihrem eigenen Copybook oder in einem Datenbereich.

+0

Sie können einen Quellmembertyp von RPGLEINC oder ein Suffix von .rpgleinc verwenden, wenn Sie IFS verwenden. Der RDI-Editor unterstützt sowohl RPGLE als auch RPGLEINC als ILE RPG. –