× 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.


  • Subject: Re: why callp vs call? (was: how to let my program sleep a while)
  • From: "Barbara Morris/Toronto/IBM" <bmorris@xxxxxxxxxx>
  • Date: Wed, 20 Sep 2000 11:33:12 -0400
  • Importance: Normal


>Date: Wed, 20 Sep 2000 00:03:53 GMT
>From: booth@martinvt.com
>
>... why do I want to use
>
>"CallP   Sleepfor('00:30:00')"
>
>instead of
>
>"Call   'SleepFor'"
>"Parm   '00:30:00'    Parm8       8"

Booth, here are some of the main reasons for preferring
callp over call are.  Assume that SleepSeconds takes a
numeric parameter with the number of seconds:

1. the compiler will check your parameters for you, ensuring
   that you pass enough, and that they are the right types

    C     callp   SleepSeconds ('00:30:00')
    ==> Error: incorrect parameter 1 for SleepSeconds

2. you can code an expression as a CALLP parameter

    C     callp   SleepSeconds (numHours * 60 * 60)

3. the compiler will fix up your parameters for you
   if it can (say you pass packed, and the procedure
   wants zoned, it will handle it for you as long
   as the parameter is defined as CONST or VALUE.)

    D SleepSeconds  PR             EXTPGM('SLEEPSECS')
    D   seconds             6p 0   CONST

    D numSecs1      S        5p 0
    D numSecs2      S       10i 0
    C     callp   SleepSeconds (numSecs1)
    C     callp   SleepSeconds (numSecs2)

    Both the packed and integer parameter will be valid,
    and the procedure will receive the parameter the way
    you said you wanted it in the prototype: packed(6,0)

    If you use CALL, the compiler wouldn't care, but one
    of the calls would get a decimal-data error.

4. you can often change some of the details of the called
   program or procedure without changing any of the
   calling code.  For example, say you would rather this
   be a procedure instead of a program; you just change
   the prototype and recompile all the callers.  You don't
   have to change the code of callers at all because the
   compiler will handle calling procedure SLEEPSECONDS
   instead of program SLEEPSECS because the prototype tells
   it what to do.  If you do change it in a way that requires
   the callers's code to change, the compiler will tell you.

    D SleepSeconds  PR
    D   seconds             6p 0   CONST

5. using CALLP, you can reduce the number of variables in your
   program.  In your example above, you don't really need
   variable Parm8.

Barbara Morris


+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---

As an Amazon Associate we earn from qualifying purchases.

This thread ...


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.