2016-07-19 50 views
0

您能否給我一些關於查看文件的想法如何區分RPG副本和程序?RPG副本和程序的區別

例如,在c中,如果您在文件中有main,那麼您知道它可以用作程序。

在此先感謝。

+0

最簡單的,甚至可能是「最快」的,是嘗試編譯它。最大的問題是你需要測試多達四個編譯器 - 例如* PGM,* MODULE,SQL * PGM和SQL * MODULE。如果失敗了,請嘗試下一個。嗯......我想也是OPM和ILE。也許在QTEMP中編譯類似OPTION(* NOSRCSTMT * NOXREF * NOGEN)的東西。 – user2338816

回答

2

這是一個有趣的問題......它通常很明顯。

我想快速回答是複印書不會包含不同類型的規格。 RPG IV程序可以有H,F,D,I,C,O和P規格,或者它們的自由形式等價物。 (規格類型由固定格式源的第6列中的字母確定)。順序很重要,你不能混合這些類型。如果您正在查看僅有一種規格的源代碼,則可能將其設計爲副本。由於可執行代碼包含在C(計算)和/或P(過程)規格中,因此沒有C或P規格的源代碼是副本。雖然在字帖中使用C或P規格通常是不好的做法,但RPG確實允許它,並且我已經看到它完成了。但是,複印本中唯一的東西是C或P規格。

編輯你可以有例如˚F& d規範一個字帖,但它可以被包含在兩個地方,d規範之前,是在一個程序中的F規格的結束。您可以使用一個使用編譯器指令/IF DEFINED的副本來控制該副本的哪一部分包含在哪裏。

EDIT2原來,IBM增加了在7.1和更高版本中混用F & D規格的功能。只有F & D規格的源成員將是一本習字簿所以簡短的回答就變成了,具有定義(H,F,D,I,O)規格和可執行文件(C & P)規格的源成員被設計爲編譯。

較長的答案,一個RPG程序也有一個「主」。最初,唯一的選擇是現在稱爲「循環主」的部分。 IE瀏覽器。 「主要」過程是內置於RPG程序中的隱含生成的代碼"cycle"

然後沿着RPG IV和ILE來。 IBM添加了控制規範關鍵字NOMAIN

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

這導致了一個不可執行的模塊沒有「主」程序;通常由編譯器爲「循環」生成的代碼將被忽略。產生的* MODULE對象需要與另一個提供主程序的* MODULE綁定到一個* PGM對象中。

或者可以將零個或多個其他* MODULE對象綁定到一個* SRVPGM對象中; * SRVPGM只是過程的集合。把它們想象成Windows DLL。然後IBM增加了一個「線性主」RPG IV程序的選項。

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

因此,主程序是您指定的任何程序。生成的「循環」代碼再次被排除在可執行文件之外。

因此,NOMAINMAIN關鍵字的存在將表明源成員被設計爲編譯;假設來源更多。有可能有一個「標準選項」包含文件,其中包括其中之一。

缺少這兩個關鍵字將表明您正在處理循環主文件或包含文件。

如果它是一個循環的主程序,它需要的參數作爲輸入,你就可以看到輸入參數列表

//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; 

請注意,「週期主」之間源中的關鍵區別程序使用PI而不是*ENTRY PLIST,而線性主要是線性主程序被明確的程序定義所包圍。

// 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

非常整潔的答案。謝謝。 – user1578026

+0

@ user1578026,我添加了一個編輯來涵蓋一些特殊情況,其中簡短的回答可能不太正確。 – Charles

+0

您可能還想要注意@Barbra Morris的回答,以及對此答案的評論。 – jmarkmurphy

1

在7.1開始(從2013年的自由形式的PTF),你可以混合F和d規格(即使在固定形式的代碼)。

+0

錯過了增強中的珍聞。我會將其添加到我的答案。 – Charles

0

RPG副本的書是非常接近imports現代編程語言

0

副本書應使用更象C或C頭文件++。不幸的是,它不會有那麼有用的擴展器來保持獨立。商店標準可以在這裏有所幫助。您可以將副本保存在單獨的源文件中,甚至可以將它們命名爲特定的前綴或後綴,以表明它是一本抄寫本。我在副本上看到了像_或_h這樣的後綴,其中基本名稱與作爲頭文件的源成員相同。或者,如果副本和程序源存儲在不同的源文件中,則程序和它的頭文件將具有相同的名稱。

與C一樣,RPG4可以將源文件編譯爲可以編譯爲模塊的程序和源文件(模塊是IBM i術語,非常類似於C編譯器生成的未鏈接.obj文件其他平臺)或完全鏈接可執行文件的程序。爲了將RPG源文件編譯爲完全鏈接的可執行文件,它需要一個主程序。 Charles解釋了h規格的主要和非主要關鍵字。如果程序源沒有nomain關鍵字,則可以將其作爲完全鏈接的程序生成。不過要小心,即使它不常見,h規格可能在其他地方,比如在他們自己的字帖或數據區中。

+0

如果使用IFS,您可以使用RPGLEINC的源成員類型或.rpgleinc的後綴。 RDI編輯器支持RPGLE和RPGLEINC作爲ILE RPG。 –

相關問題