Skip to Main Content
IBM Power Ideas Portal


This portal is to open public enhancement requests against IBM Power Systems products, including IBM i. To view all of your ideas submitted to IBM, create and manage groups of Ideas, or create an idea explicitly set to be either visible by all (public) or visible only to you and IBM (private), use the IBM Unified Ideas Portal (https://ideas.ibm.com).


Shape the future of IBM!

We invite you to shape the future of IBM, including product roadmaps, by submitting ideas that matter to you the most. Here's how it works:

Search existing ideas

Start by searching and reviewing ideas and requests to enhance a product or service. Take a look at ideas others have posted, and add a comment, vote, or subscribe to updates on them if they matter to you. If you can't find what you are looking for,

Post your ideas
  1. Post an idea.

  2. Get feedback from the IBM team and other customers to refine your idea.

  3. Follow the idea through the IBM Ideas process.


Specific links you will want to bookmark for future use

Welcome to the IBM Ideas Portal (https://www.ibm.com/ideas) - Use this site to find out additional information and details about the IBM Ideas process and statuses.

IBM Unified Ideas Portal (https://ideas.ibm.com) - Use this site to view all of your ideas, create new ideas for any IBM product, or search for ideas across all of IBM.

ideasibm@us.ibm.com - Use this email to suggest enhancements to the Ideas process or request help from IBM for submitting your Ideas.

Status Under review
Workspace IBM i
Categories Languages - RPG
Created by Guest
Created on Jan 20, 2025

Allow SND-MSG to use %target(*PGMBDY 1 ) more like the QMH* APIs.

I was using SND-MSG with %target(*PGMBDY 1 ) the other day and noticed that it does not work correctly -- or, rather, it does not work as expected (like the message handling APIs do it). 

When using (*PGMBDY 1) via QMHSNDPM or other QMH apis, the message is sent to the call stack entry immediately preceding the first procedure called in the current executable (VERY handy for *ESCAPE messages).  

"For an ILE program, this option can be used to identify the first procedure of the ILE program that was called in the current sequence. If the ILE program was called using a dynamic call, this is the PEP (program entry procedure) of the ILE program. If sequence was started by calling by means of a procedure pointer, this is the call stack entry for the procedure that was pointed to.

For ILE service programs, this special value can be used to identify the call stack entry for the first procedure called in the specified service program."

When using SND-MSG, the message is sent to (from the RPG Ref) "the most recent procedure on the call stack that is in the same program or service program as the procedure with the SND-MSG operation."  This is not the same behavior as QMHSNDPM, especially when you're 5 call levels deep in the service program, so I find the need to mix in some QMHSNDPM calls instead of the more handy SND-MSG operation.

My point, then, is that *PGMBDY should represent the first procedure called in the current executable, and sending a message using (*PGMBDY 1) should cause the message to be sent to the first call stack entry that is NOT in the current executable.

 

Idea priority Medium
  • Guest
    Reply
    |
    Feb 12, 2025

    Testing now indicates that it WORKS correctly, but the description in the ILE RPG Reference is still inaccurate. The *PGMBDY target is not the "most recent procedure in the call stack in the same executable", it is the "first procedure in the call stack in the same executable."  "First" is more clear and more in line with the description in the QMHSNDPM API documentation.

    What happened?  I don't know.  I swear I was coding something that was not working like QMHSNDPM and I fought with it all morning until I had to open the manuals and check.  I cannot locate that code now. Honestly, it was acting EXACTLY like the RPG Reference describes it -- which is wrong.  No matter how deep into a service program I was, it always sent the message to the immediate caller of the proc with the SND-MSG in it.  It drove me nuts because I had assumed you would code the compiler to emplace a call to QMHSNDPM, but it acted differently.

     

  • Guest
    Reply
    |
    Jan 24, 2025
    IBM needs more information to further assess your Idea.

    The SND-MSG operation code is implemented by generating a call to the QMHSNDPM API. In our testing, SND-MSG with %TARGET(*PGMBDY:stack_offset) behaves the same as coding a call to QMHSNDPM with '*PGMBDY' and the same stack_offset.

    Please clarify
    - whether you are requesting a correction for the documentation of the SND-MSG operation code
    or
    - whether you have found a scenario where SND-MSG behaves differently from a call to QMHSNDPM with the *PGMBDY and the same stack offset.

    If you have found a scenario with different behaviour, please also contact your service representative to open a Case, so IBM can request the code to reproduce the scenario, and investigate the problem.

    -IBM Power Systems Development