付録  CからOPM−RPGを呼び出す
RPGプログラマーの為のC言語講座

CからOPM−RPGを呼び出す場合の、サンプルコードです。

必要なのは、#pragma linkage(プログラム名,OS)と関数のプロトタイプ宣言です。

RPGを呼び出すPGM PROG3C

/*---------------------------------------------------------------*/
/* PROGRAM-ID  : PROG3C                                          */
/* REMARKS     : RPGを呼びたすPGM                           */
/* AUTHOR      : Y.Ide                                           */
/* DATE-WRITEN : 1999/8/15                                       */
/* VERSION     : 01.00 ORIGINAL                                  */
/*---------------------------------------------------------------*/
/* RPGを呼び出すプログラム                         */
/* ポインター渡しで全部のパラメーターを定義する                */

#include<stdio.h>

#pragma linkage(PROG3R,OS)

/*関数プロトタイプ宣言*/
void PROG3R(char *, int *);

int  main(int argc, char *argv[]){
  char *p1 = "1234567890";
  int  p2  = 123 ;

  printf("P1 = %s \n",p1);
  printf("P2 = %d \n",p2);

  PROG3R(p1,&p2);

  return 0 ;

}

Cから呼び出されるPGM PROG3R

     H            Y/                                    1
     H*---------------------------------------------------------------*
     H* PROGRAM-ID    :    PROG3R                                     *
     H* REMARKS       :   Cから呼び出されるプログラム            *
     H* AUTHOR        :    Y.IDE                                      *
     H* DATE-WRITEN   :    1999/8/15                                  *
     H* VERSION       :    01.00 ORIGINAL                             *
     H*---------------------------------------------------------------*
     I            DS
     I                                        1   4 P2A
     I                                    B   1   40P2B
     C           *ENTRY    PLIST
     C                     PARM           P1     10
     C                     PARM           P2      4
     C*
     C                     Z-ADD0         P2B
     C                     MOVE P2        P2A
     C*
     C           P1        DSPLY
     C           P2B       DSPLY
     C*
     C                     SETON                     LR
     C                     RETRN
     C*