プログラム学習室 http://studyhallweb.com/

AS/400 RPG サブルーチンの例

サブルーチンの使い方

IBMのマニュアルではサブプロシージャと呼んでいます。
RPGの公式な「サブルーチン」(BEGSR~ENDSR)は、ただのGOTO文にしか思えませんので..。
     H**-------------------------------------------------------------**
     H* サブルーチン使用例
     H*                コンパイルオプションDFTACTGRP(*NO)を追加のこと
     H**-------------------------------------------------------------**
     H DATEDIT(*YMD/)
     F**-------------------------------------------------------------**
     F**   FILE                                                      **
     F**-------------------------------------------------------------**
     FSMPDDSP   UF   E           K DISK
     D**-------------------------------------------------------------**
     D**    定義                                                     **
     D**-------------------------------------------------------------**
     D* サブルーチン定義
     D @SUBADD         PR             4  0                                      * 戻り値の型定義
     D                                4  0                                      * 第一引数
     D                                4  0                                      * 第二引数
     D*
     D* 変数定義
     D X               S              4  0
     D Y               S              4  0
     D ANS             S              4  0
     C*****************************************************************
     C**         M A I N   R O U T I N E                             **
     C*****************************************************************
     C*
+--- C                   DOW       '1'
|    C                   READ      SMPR
|+-- C                   IF        %EOF
||   C                   LEAVE
|+-- C                   ENDIF
|    C                   EVAL      X = SMIIN
|    C                   EVAL      Y = SMIOUT
|    C                   EVAL      ANS = @SUBADD(X:Y)
|    C                   EVAL      SMIOUT = ANS
|    C                   UPDATE    SMPR
|    C                   CLEAR                   SMPR
+--- C                   ENDDO
     C                   SETON                                        LR
     C                   RETURN
     C*-----------------------------------------------------------------
     C* SUB ROUTINE
     C*  引数 A, B (4桁)
     C*  戻り値AとBの合計
     C*-----------------------------------------------------------------
     P @SUBADD         B                                                        * サブルーチン名
     D @SUBADD         PI             4  0                                      * 戻り値の定義
     D   A                            4  0                                      * 第一引数
     D   B                            4  0                                      * 第二引数
     C*
     C                   RETURN    A + B
     P @SUBADD         E