Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, プログラミング・ガイド

マクロ・プリプロセッサーの例

プリプロセッサーを使用してソース・デックを作成する簡単な 例を 図 4 に示します。 ソース・ステートメントは、プリプロセッサー変数 USE に割り当てられた 値に応じて、サブルーチン (CITYSUB) または関数 (CITYFUN) のどちらかを 表します。

SYSPUNCH に使用する DSNAME には、プリプロセッサー出力が入る ソース・プログラム・ライブラリーを指定します。 通常、コンパイルが続行され、プリプロセッサー出力がコンパイルされます。

図 4. ソース・デックを作成するためのマクロ・プリプロセッサーの使用
//OPT4#8  JOB
//STEP2 EXEC  IBMZC,PARM.PLI='MACRO,MDECK,NOCOMPILE,NOSYNTAX'
//PLI.SYSPUNCH DD  DSNAME=HPU8.NEWLIB(FUN),DISP=(NEW,CATLG),UNIT=SYSDA,
//          SPACE=(TRK,(1,1,1)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=400)
//PLI.SYSIN  DD *
  /* GIVEN ZIP CODE, FINDS CITY                                       */
  %DCL USE CHAR;
  %USE = 'FUN'                  /* FOR SUBROUTINE, %USE = 'SUB' */ ;
  %IF USE = 'FUN' %THEN %DO;
  CITYFUN: PROC(ZIPIN) RETURNS(CHAR(16)) REORDER; /* FUNCTION         */
                        %END;
                  %ELSE %DO;
  CITYSUB: PROC(ZIPIN, CITYOUT) REORDER;     /* SUBROUTINE            */
    DCL CITYOUT CHAR(16);          /* CITY NAME                       */
                        %END;
    DCL (LBOUND, HBOUND) BUILTIN;
    DCL ZIPIN PIC '99999';        /* ZIP CODE                         */
    DCL 1 ZIP_CITY(7) STATIC,     /* ZIP CODE - CITY NAME TABLE       */
          2 ZIP PIC '99999' INIT(
                      95141, 95014, 95030,
                      95051, 95070, 95008,
                      0),           /* WILL NOT LOOK AT LAST ONE      */
          2 CITY CHAR(16) INIT(
                      'SAN JOSE', 'CUPERTINO', 'LOS GATOS',
                      'SANTA CLARA', 'SARATOGA', 'CAMPBELL',
                      'UNKNOWN CITY');  /* WILL NOT LOOK AT LAST ONE  */
    DCL I FIXED BIN(31);
    DO I = LBOUND(ZIP,1) TO             /* SEARCH FOR ZIP IN TABLE    */
           HBOUND(ZIP,1)-1              /* DON'T LOOK AT LAST ELEMENT */
           WHILE(ZIPIN ¬= ZIP(I));
    END;
  %IF USE = 'FUN' %THEN %DO;
    RETURN(CITY(I));                    /* RETURN CITY NAME           */
                        %END;
                  %ELSE %DO;
    CITYOUT=CITY(I);                    /* RETURN CITY NAME           */
                        %END;
  END;


Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)