Reader Feedback and Q&A

RPG
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times
I am beginning to receive questions and comments regarding previous issues' content as well as questions on entirely new topics. To that end, I am starting a Reader Feedback and Q&A section. I will include this section as part of an issue when you send me feedback or questions that warrant publication. While other publications may print questions that are fabricated to suit the purposes of the publication, I will only answer questions you send me through email, online forums, or my RPG IV list server. So keep in touch!

Q: I recently discovered an API named "Access" in a published article. I copied the syntax into my program. It works and saves me a lot of time. I have no problem with this as long as I understand what is going on. I have researched the Access API and understand the parameters, but there is one part of the following line of code that I have not seen before.
     C                   return    (Access(%Addr(Filename):F_OK) = 0)


The part I do not understand is the use of = 0. I suspect it has more to do with calling a procedure than the Access API. Can you help me with this?

A: I don't know where you found the Access() API/procedure you mention, but the technique used in your example code is a technique that I teach in my onsite RPG IV seminars.

It is what we call a "Boolean expression," meaning that the result of the expression is either true or false (*ON or *OFF in RPG IV-speak). In your example, the value returned from the procedure is compared to zero. If the returned value is equal to zero, then the condition is true and *ON is returned to the caller. If the return value is not equal to zero, then the condition is false and *OFF is returned to the caller.

A similar Boolean operation, one that I use in my seminars, follows:

     C                   eval      *INLR = (A = B)


In this expression, if A is equal to B, then *ON is moved into *INLR; otherwise, *OFF is moved into *INLR.

The conditional expression on the right side of the assignment operator (i.e., the equal sign) is performed as though it were on an IF statement. The result of the conditional test is copied to the field on the left side of the assignment operator. The Boolean expression illustrated above could be rewritten as follows:

     C                   if        A = B
     C                   eval      *INLR = *ON
     C                   else
     C                   eval      *INLR = *OFF
     C                   endif


If you're a long-time RPG programmer, you may remember the COMP (compare) operation code. The COMP operation code compared two values and set on an indicator based on the result of that comparison. Boolean expressions in RPG IV can be thought of as a contemporary form of the COMP operation code.

Remember, however, that an indicator data type was added to RPG IV a few releases back. So the result of a Boolean expression can be either a traditional RPG indicator or a so-called named indicator. The data type for named indicators is N, and the fields must be one position in length. Here's a simple named indicator being used in the same situation:

0001 D match           S              1N   Inz(*OFF)

0002 C                   Eval      match = (A = B)


The MATCH field (line 1) is declared as a named indicator (N data type) and is initialized to *OFF. Line 2 does a comparison of A equal to B, and if A is equal to B, *ON is moved into MATCH; otherwise, *OFF is moved into MATCH.

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$0.00 Raised:
$