× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Hi David,

>
> Does anyone know of an example that uses the CEE4RAGE API in RPG?
>

Here's a message that I posted to the iSeries Network RPG forum back in
May. It was in reply to someone who wanted to run procedures when a service
program was activated or deactivated (much like a constructor/destructor
in OO languages.)


---------------------------------------------------------------------
Date: May 24, 2004 10:49 AM
Author: Scott Klement (sklement@xxxxxxxxxxxxxxxxxx)
Subject: Here's how I do it...

As far as I know, there's no way to run a procedure during the activation
phase.

Here's how I approach the problem:  I have a subprocedure that gets called
first by every exported subprocedure.  I use a global field to determine
if it's been called before, and if so, it does not run again.

I also tend to register a cleanup procedure with CEE4RAGE. Though,
ending the activation group should theoretically clean everything
up for me, I like to do it explicitly.  I like to be in control! :)

The following code should help illustrate what I'm talking about:

     H NOMAIN

     D Initialized     s              1N   inz(*off)

      *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      * Initialization routine
      *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     P InzSrvPgm       B
     D InzSrvPgm       PI

     D CEE4RAGE        PR
     D   procedure                     *   procptr const
     D   feedback                    12A   options(*omit)

      /free
         if (Initialized);
             return;
         endif;

         // .. open files here ...
         // .. other initializations ...

         CEE4RAGE(%paddr(EndSrvPgm): *OMIT);

         Initialized = *ON;
         return;
      /end-free
     P                 e

      *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      * EndSrvPgm():  This is called automatically when the activation
      *               group ends.  (which is when the srvpgm is removed
      *               from memory.)
      *
      *  Note that this must be exported so that CEE4RAGE can call it.
      *
      * InzSrvPgm() registers this procedure with the CEE4RAGE() API
      *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     P EndSrvPgm       B                   export
     D EndSrvPgm       PI
     D   AgMark                      10U 0 options(*nopass)
     D   Reason                      10U 0 options(*nopass)
     D   Result                      10U 0 options(*nopass)
     D   UserRC                      10U 0 options(*nopass)
      /free

           // ... terminate any helper processes
           // ... shut down any persistent APIs
           // ... close files.
           // ... deallocate memory.

           Initialized = *OFF;
           return;
      /end-free
     P                 E


      *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      *  Every exported procedure (besides EndSrvPgm) starts by calling
      *  the InzSrvPgm() subprocedure
      *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     P SomeProc        B                   export
     D SomeProc        PI            10I 0
     D   SomeParm                   123A   const

      /free

            InzSrvPgm();

            // ... perform function of subproc here ...
            return data;

      /end-free
     P                 E


      *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      *  Every exported procedure (besides EndSrvPgm) starts by calling
      *  the InzSrvPgm() subprocedure
      *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     P AnotherProc     B                   export
     D AnotherProc     PI            10I 0
     D   AnotherParm                321A   const

      /free

            InzSrvPgm();

            // ... perform function of subproc here ...

            return data;

      /end-free
     P                 E





As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.