• The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
Menu
  • The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
  • Guru: The Case for Mixed-Case Procedure Names

    July 14, 2020 Paul Tuohy

    Using mixed case makes source code easier to read and easier to debug. I programmed in all upper case for many, many years, so I don’t recoil in horror when I see something in all uppercase. However, it’s a bit more difficult for developers who aren’t quite as long in the tooth as I am. To them, all uppercase is pretty abhorrent and bad (and I don’t mean bad as in good).

    There is a potential case issue with subprocedure names: there are at least three places on the system where the system shows subprocedure names in uppercase, regardless of how they are coded. Luckily, this is something that is easily addressed, so with a thought to those who follow in your footsteps, you may want to consider standardizing on the use of extProc(*dclCase).

    The conversion of subprocedure names to uppercase can be seen in the exports for a service program (DSPSRVPGM with DETAIL(*PROCEXP)).

    So, if we look at the exports for a service program (DSPSRVPGM with DETAIL(*PROCEXP)):

                                   Procedure Exports:                              
     Procedure Name                                                          ARGOPT
     CALCULATEDEDUCTIONS                                                     *NO   
     CALCULATEPAY                                                            *NO   
     CALCULATETAX                                                            *NO   
     GETINCOME                                                               *NO   
    

    Or the call stack in a job (DSPJOB option 11):

    PAYCALC1   TESTSTUFF                       _QRNP_PEP_PAYCALC1 
    PAYCALC1   TESTSTUFF     600               PAYCALC1           
    PAYCALC    TESTSTUFF     800               CALCULATEPAY       
    PAYCALC    TESTSTUFF     1400              GETINCOME          
    PAYCALC    TESTSTUFF     2000              CALCULATETAX       
    PAYCALC    TESTSTUFF     2800              CALCULATEDEDUCTIONS   
    

    Or the details of an error message (F1 on a message in the job log then F9):

    From program . . . . . . . . . :   TRYCASE                       
      From library . . . . . . . . :     TESTSTUFF                   
      From module  . . . . . . . . :     TRYCASE                     
      From procedure . . . . . . . :     GETRESULTOFACOOLCALCULATION 
      From statement . . . . . . . :     81                          
                                                                     
    To program . . . . . . . . . . :   TRYCASE                       
      To library . . . . . . . . . :     TESTSTUFF                   
      To module  . . . . . . . . . :     TRYCASE                     
      To procedure . . . . . . . . :     GETRESULTOFACOOLCALCULATION 
      To statement . . . . . . . . :     81                            
    

    We see that the subprocedure names are in uppercase.

    Instead, we want to see this in the export list:

                                   Procedure Exports:                              
                                                                                  
     Procedure Name                                                          ARGOPT
     calculateDeductions                                                     *NO   
     calculatePay                                                            *NO   
     calculateTax                                                            *NO   
     getIncome                                                               *NO                            
    

    And this in the call stack:

    PAYCALC1   TESTSTUFF                       _QRNP_PEP_PAYCALC1  
    PAYCALC1   TESTSTUFF     600               PAYCALC1            
    PAYCALC    TESTSTUFF     800               calculatePay        
    PAYCALC    TESTSTUFF     1400              getIncome           
    PAYCALC    TESTSTUFF     2000              calculateTax        
    PAYCALC    TESTSTUFF     2800              calculateDeductions                            
    

    And this in the message details:

    From program . . . . . . . . . :   TRYCASE                       
      From library . . . . . . . . :     TESTSTUFF                   
      From module  . . . . . . . . :     TRYCASE                     
      From procedure . . . . . . . :     getResultOfACoolCalculation 
      From statement . . . . . . . :     81                          
                                                                     
    To program . . . . . . . . . . :   TRYCASE                       
      To library . . . . . . . . . :     TESTSTUFF                   
      To module  . . . . . . . . . :     TRYCASE                     
      To procedure . . . . . . . . :     getResultOfACoolCalculation 
      To statement . . . . . . . . :     81                            
    

    EXTPROC(*DCLCASE) to the rescue!

    The EXTPROC keyword indicates the external name of a subprocedure. The EXTPROC keyword can be defined on a prototype (dcl-pr) or a procedure interface (dcl-p1) definition.

    This prototype will result in an external name of get_otherStuff:

    dcl-pr get_otherStuff end-pr;                          
    

    Whereas this prototype will result in an external name of get_otherStuff:

    dcl-pr get_otherStuff extProc('get_otherStuff') end-pr;                          
    

    Repeating the subprocedure name can be tedious and open to typos, so better to make use of the special value of *DCLCASE, which means that the exact case of the subprocedure name will be used.

    dcl-pr get_otherStuff extProc(*dclcase) end-pr;                          
    

    This is all well and good for prototypes, but prototypes are not required for subprocedures that are not exported. In this case we specify the EXTPROC(*DCLCASE) on the procedure interface:

    dcl-Proc calculateTax export;
      dcl-pi *n extProc(*dclCase) 
      end-pr;
    end-Proc;                          
    

    Using EXTPROC(*DCLCASE) means we now have easy-to-read subprocedure names in export lists, call stacks and message details.

    RELATED STORIES

    *DCLCASE with the EXTPROC keyword (IBM Knowledge Center)

    The Geezer’s Guide To Free-Form RPG, Part 4: Prototypes and Procedure Interfaces

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Tags: Tags: 400guru, FHG, Four Hundred Guru, IBM i

    Sponsored by
    DRV Tech

    Get More Out of Your IBM i

    With soaring costs, operational data is more critical than ever. IBM shops need faster, easier ways to distribute IBM applications-based data to users more efficiently, no matter where they are.

    The Problem:

    For Users, IBM Data Can Be Difficult to Get To

    IBM Applications generate reports as spooled files, originally designed to be printed. Often those reports are packed together with so much data it makes them difficult to read. Add to that hardcopy is a pain to distribute. User-friendly formats like Excel and PDF are better, offering sorting, searching, and easy portability but getting IBM reports into these formats can be tricky without the right tools.

    The Solution:

    IBM i Reports can easily be converted to easy to read and share formats like Excel and PDF and Delivered by Email

    Converting IBM i, iSeries, and AS400 reports into Excel and PDF is now a lot easier with SpoolFlex software by DRV Tech.  If you or your users are still doing this manually, think how much time is wasted dragging and reformatting to make a report readable. How much time would be saved if they were automatically formatted correctly and delivered to one or multiple recipients.

    SpoolFlex converts spooled files to Excel and PDF, automatically emailing them, and saving copies to network shared folders. SpoolFlex converts complex reports to Excel, removing unwanted headers, splitting large reports out for individual recipients, and delivering to users whether they are at the office or working from home.

    Watch our 2-minute video and see DRV’s powerful SpoolFlex software can solve your file conversion challenges.

    Watch Video

    DRV Tech

    www.drvtech.com

    866.378.3366

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    The Path Truly Opens To Alternate Power CPUs, But Is It Enough? Thoroughly Modern: Why You Need An IT Strategy And Roadmap

    2 thoughts on “Guru: The Case for Mixed-Case Procedure Names”

    • Bill Pahl says:
      July 14, 2020 at 8:47 am

      >>This prototype will result in an external name of >>get_otherStuff:

      >>dcl-pr get_otherStuff end-pr;

      Doesn’t this declaration yield an upper case external name?

      Reply
    • Paul Jackson says:
      August 11, 2020 at 7:41 pm

      I was thinking the same, I think it’s a typo. Also the last code example shouldn’t have the Export keyword as it is specifically referring to the example where a procedure is NOT exported.

      Reply

    Leave a Reply Cancel reply

TFH Volume: 30 Issue: 41

This Issue Sponsored By

  • ProData
  • Fresche Solutions
  • OCEAN TechCon20
  • Kisco Information Systems
  • Raz-Lee Security

Table of Contents

  • IBM Revamps Entry Power Servers With Expanded I/O, Utility Pricing
  • Thoroughly Modern: Why You Need An IT Strategy And Roadmap
  • Guru: The Case for Mixed-Case Procedure Names
  • The Path Truly Opens To Alternate Power CPUs, But Is It Enough?
  • IBM i PTF Guide, Volume 22, Number 27

Content archive

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

Recent Posts

  • Big Blue Raises IBM i License Transfer Fees, Other Prices
  • Keep The IBM i Youth Movement Going With More Training, Better Tools
  • Remain Begins Migrating DevOps Tools To VS Code
  • IBM Readies LTO-10 Tape Drives And Libraries
  • IBM i PTF Guide, Volume 27, Number 23
  • SEU’s Fate, An IBM i V8, And The Odds Of A Power13
  • Tandberg Bankruptcy Leaves A Hole In IBM Power Storage
  • RPG Code Generation And The Agentic Future Of IBM i
  • A Bunch Of IBM i-Power Systems Things To Be Aware Of
  • IBM i PTF Guide, Volume 27, Numbers 21 And 22

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