• The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
Menu
  • The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
  • Make a CL Program or Module Retrieve Its Name

    April 21, 2004 Hey, Ted

    As if I didn’t have enough to do, I wasted an hour on a wild goose chase. A user contacted me when a program cancelled. The message she received told her that program XYZ had ended abnormally. It took me a while to determine that program ABC had cancelled instead. It turned out that ABC was a clone of XYZ and still included the following, misleading CL command.

    SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('Program +
                  XYZ ended abnormally') MSGTYPE(*ESCAPE)     
    

    I would like to make CL programs determine their own names, so that I can make sure each program reports the correct name in error messages, even when cloned. I have not found a CL command or an API to make a program retrieve its own name. Is this possible?

    –Chuck

    Yes. The trick is to make a program send a message to itself and retrieve the program name from the message about the sender. The following code works in OPM CL programs, ILE CL programs, and ILE CL modules.

    dcl   &MsgKey        *char      4                               
    dcl   &PgmName       *char     10                               
    dcl   &Sender        *char     80                               
                                                                    
    sndpgmmsg msg(' ') topgmq(*same) msgtype(*info) keyvar(&msgkey) 
    rcvmsg    pgmq(*same) msgtype(*info) sender(&sender) rmv(*yes)     
    chgvar    &PgmName   %sst(&Sender 56 10)                        
    

    In the case of CL modules, you should know that this routine returns the name of the program in which this module is bound, not the name of the module. In ILE modules, try the following code to retrieve both program name and module name.

    dcl   &MsgKey        *char      4                             
    dcl   &PgmName       *char     10                             
    dcl   &ModName       *char     10                             
    dcl   &Sender        *char    720                             
                                                                  
    sndpgmmsg msg(' ') topgmq(*same) msgtype(*info) keyvar(&msgkey
    rcvmsg    pgmq(*same) msgtype(*info) rmv(*yes) +              
                 sender(&sender) senderfmt(*long)                 
    chgvar    &PgmName   %sst(&Sender 42 10)                      
    chgvar    &ModName   %sst(&Sender 54 10)                      
    

    –Ted

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Tags:

    Sponsored by
    ARCAD Software

    Unlock Application Knowledge with DISCOVER: From Code to Data Lineage

    In today’s fast-paced IT landscape, organizations face a critical challenge: understanding the complexity of their existing applications while preparing for modernization. DISCOVER addresses this challenge by providing a powerful, AI-assisted knowledge base that makes application intelligence accessible to everyone.

    Join Alan Ashley, Solution Architect at ARCAD Software, as he demonstrates how DISCOVER empowers teams to:

    • Visualize and explore application metadata, code, and dependencies
    • Gain clear insights into data lineage to maximize the value of enterprise data
    • Document and explain applications in natural language
    • Boost productivity and autonomy across technical and business users

    Whether you are modernizing legacy systems, leveraging data for new business initiatives, or simply striving to recover lost application knowledge, DISCOVER is your key to bridging the gap between code and actionable intelligence.

    Register Now!

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Cleo Enhances Automation with AS2 Software for OS/400 IBM Cuts iSeries Prices Ahead of Power5 Launch

    One thought on “Make a CL Program or Module Retrieve Its Name”

    • Svetlana says:
      June 30, 2023 at 7:38 am

      Hello! Thank you for the tip, but I have a question. Can we figure out the library of the programm?

      Best regards,
      Svetlana

      Reply

    Leave a Reply Cancel reply

Volume 4, Number 13 -- April 21, 2004
THIS ISSUE
SPONSORED BY:

T.L. Ashford
Damon Technologies
COMMON
iTera
Guild Companies

Table of Contents

  • Smooth the Java Journey with Struts
  • Programming with Assertions
  • Make a CL Program or Module Retrieve Its Name
  • Admin Alert: When Management Central Server Won’t Start
  • OS/400 Alert: Microsoft Extends the Life of JVM

Content archive

  • The Four Hundred
  • Four Hundred Stuff
  • Four Hundred Guru

Recent Posts

  • What You Will Find In IBM i 7.6 TR1 and IBM i 7.5 TR7
  • Three Things For IBM i Shops To Consider About DevSecOps
  • Big Blue Converges IBM i RPG And System Z COBOL Code Assistants Into “Project Bob”
  • As I See It: Retirement Challenges
  • IBM i PTF Guide, Volume 27, Number 41
  • Stacking Up Power11 Entry Server Performance To Older Iron
  • Big Blue Boosts IBM i Support In Instana, Adds Tracing
  • It Is Time To Tell Us What You Are Thinking And Doing
  • IBM i PTF Guide, Volume 27, Number 40
  • The GenAI Boom Is Only Slightly Louder Than The Dot Com Boom

Subscribe

To get news from IT Jungle sent to your inbox every week, subscribe to our newsletter.

Pages

  • About Us
  • Contact
  • Contributors
  • Four Hundred Monitor
  • IBM i PTF Guide
  • Media Kit
  • Subscribe

Search

Copyright © 2025 IT Jungle