The module below, INTERACT, determines whether your program is running in interactive or batch mode:
NoMain p Interactive PR N D DummyPrm 1 Options( *Omit ) P pInteractive B Export D pInteractive PI N D DummyPrm 1 Options( *Omit ) * Local variables D RetdInfDs DS D 4 D 10I 0 Inz( %Size( RetdInfDs ) ) D RiJobType 61 61 D RiTypeInteractive... D C 'I' D LenRetdInf S 10I 0 Inz( %Size( RetdInfDs ) ) D FmtName S 8 Inz( 'JOBI0100' ) D QlJobName S 26 Inz( '*' ) D IntJobId S 16 Inz( *Blank ) Call 'QUSRJOBI' Parm RetdInfDs Parm LenRetdInf Parm FmtName Parm QlJobName Parm IntJobId If RiJobType = RiTypeInteractive Return *On Else Return *Off EndIf P pInteractive E
Use option 15 in PDM to compile INTERACT.
Issue the command: CrtSrvPgm SrvPgm( INTERACT ) Export( *All ) ActGrp( WhateverYouWant )
To use this service program from an RPG IV program, follow these steps:
a) Include the following prototype in your source with the D-specs: D pInteractive PR N D DummyPrm 1 Options( *Omit ) If you expect to use this procedure in more than one program, you might consider using a /Copy member for this prototype.
b) Here are a couple of sample calls to INTERACT in the C-specs: C If pInteractive( *Omit ) C ‘Interactive’ DsplyDummyVar C EndIf C If Not pInteractive( *Omit ) C ‘Batch’ Dsply C Endif
c) Use PDM option 15 to compile your program. d) Issue the following command to create your program (Note that the following assumes your program is a standalone program, i.e., a single module, named MYPGM): CrtPgm MyPgm Module( MYPGM ) BndSrvPgm( INTERACT ) ActGrp( Whatever )
Adapted from a utility by Mike Cravitz