• The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
Menu
  • The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
  • Comparing Lists of Numbers to a Value

    September 20, 2002 Timothy Prickett Morgan

    Hey, Ted:

    It’s a shame you can’t do something like this in RPG:

    * if any of the fields > 25
    If       (field1 or field2 or field3) > 25 
             etc
    Endif
    
    * if all three fields > 25)
    If       (field1 and field2 and field3) > 25 
             etc
    Endif
    

    — David

    Who says you can’t, David? You just have to do it a different way. You know, cogitate external to the rectangular container constructed of corrugated paper.

    Many programming languages have minimum and maximum functions, which return one value from a list. OPNQRYF and Microsoft Excel come to mind.

    Below is source code for a module containing minimum and maximum functions for integers. To use them, pass a list of two to eight values to the function. Here’s an example of how to use them:

         D/copy prototypes,minmax
         D field1          s              5p 0
         D field2          s              5p 0
         D field3          s              5p 0
    
          * if field1 > 25 or field2 > 25 or field3 > 25
         C                   if        MaxInt(field1: field2: field3) > 25
          * at least one is greater, because the largest is greater
         C                   endif
          * if field1 > 25 and field2 > 25 and field3 > 25
         C                   if        MinInt(field1: field2: field3) > 25
          * all are greater, because the smallest is greater
         C                   endif
    

    I hope this helps.

    — Ted

    Prototype member:

         D MaxInt          pr            10i 0
         D  N1                           10i 0 value
         D  N2                           10i 0 value
         D  N3                           10i 0 value options(*nopass)
         D  N4                           10i 0 value options(*nopass)
         D  N5                           10i 0 value options(*nopass)
         D  N6                           10i 0 value options(*nopass)
         D  N7                           10i 0 value options(*nopass)
         D  N8                           10i 0 value options(*nopass)
    
         D MinInt          pr            10i 0
         D  N1                           10i 0 value
         D  N2                           10i 0 value
         D  N3                           10i 0 value options(*nopass)
         D  N4                           10i 0 value options(*nopass)
         D  N5                           10i 0 value options(*nopass)
         D  N6                           10i 0 value options(*nopass)
         D  N7                           10i 0 value options(*nopass)
         D  N8                           10i 0 value options(*nopass)
    

    Module member:

         H nomain
          /copy prototypes,minmax
    
         P MaxInt          b                   export
         D                 pi            10i 0
         D  N1                           10i 0 value
         D  N2                           10i 0 value
         D  N3                           10i 0 value options(*nopass)
         D  N4                           10i 0 value options(*nopass)
         D  N5                           10i 0 value options(*nopass)
         D  N6                           10i 0 value options(*nopass)
         D  N7                           10i 0 value options(*nopass)
         D  N8                           10i 0 value options(*nopass)
         D Value           s             10i 0
         D ParmCt          s             10i 0
         C                   eval      ParmCt = %parms
         C                   eval      Value = N1
         C                   if        N2 > Value
         C                   eval      Value = N2
         C                   endif
         C                   if        ParmCt >=3
         C                   if        N3 > Value
         C                   eval      Value = N3
         C                   endif
         C                   endif
         C                   if        ParmCt >=4
         C                   if        N4 > Value
         C                   eval      Value = N4
         C                   endif
         C                   endif
         C                   if        ParmCt >=5
         C                   if        N5 > Value
         C                   eval      Value = N5
         C                   endif
         C                   endif
         C                   if        ParmCt >=6
         C                   if        N6 > Value
         C                   eval      Value = N6
         C                   endif
         C                   endif
         C                   if        ParmCt >=7
         C                   if        N7 > Value
         C                   eval      Value = N7
         C                   endif
         C                   endif
         C                   if        ParmCt >=8
         C                   if        N8 > Value
         C                   eval      Value = N8
         C                   endif
         C                   endif
         C                   return    Value
         P                 e
    
         P MinInt          b                   export
         D                 pi            10i 0
         D  N1                           10i 0 value
         D  N2                           10i 0 value
         D  N3                           10i 0 value options(*nopass)
         D  N4                           10i 0 value options(*nopass)
         D  N5                           10i 0 value options(*nopass)
         D  N6                           10i 0 value options(*nopass)
         D  N7                           10i 0 value options(*nopass)
         D  N8                           10i 0 value options(*nopass)
         D Value           s             10i 0
         D ParmCt          s             10i 0
         C                   eval      ParmCt = %parms
         C                   eval      Value = N1
         C                   if        N2 < Value
         C                   eval      Value = N2
         C                   endif
         C                   if        ParmCt >=3
         C                   if        N3 < Value
         C                   eval      Value = N3
         C                   endif
         C                   endif
         C                   if        ParmCt >=4
         C                   if        N4 < Value
         C                   eval      Value = N4
         C                   endif
         C                   endif
         C                   if        ParmCt >=5
         C                   if        N5 < Value
         C                   eval      Value = N5
         C                   endif
         C                   endif
         C                   if        ParmCt >=6
         C                   if        N6 < Value
         C                   eval      Value = N6
         C                   endif
         C                   endif
         C                   if        ParmCt >=7
         C                   if        N7 < Value
         C                   eval      Value = N7
         C                   endif
         C                   endif
         C                   if        ParmCt >==8
         C                   if        N8 < Value
         C                   eval      Value = N8
         C                   endif
         C                   endif
         C                   return    Value
         P                 e
    

    Sponsored By
    ADVANCED SYSTEMS CONCEPTS

    SEQUEL meets all your iSeries and AS/400 data access needs in a single, integrated solution:

    • Windows, Web or host user interfaces

    • Convert AS/400 data into PC file formats

    • E-mail or FTP query results, reports and spool files
    • Run-time prompted queries and reports for end users

    • IF-THEN-ELSE logic in queries and reports

    • Report, form and label formatting second to none

    • Easily convert date fields, character-to-numeric, numeric-to-character and other data manipulation

    • SORT or JOIN using a calculated field

    • Quick summarization of data with Tabling function

    • Run multiple SEQUEL requests as one with the SEQUEL Scripting function

    • OLAP Business Intelligence at a fraction of the cost of comparable solutions

    Take 6 minutes to view a SEQUEL ViewPoint ScreenCam movie to see how simple Windows-based AS/400 and iSeries data access can be! In just a few short minutes, you can find out ways to make your job easier and improve data access throughout your organization. Download the ViewPoint movie here .

    For more information or a FREE trial of SEQUEL, call 847/605-1311 or visit Advanced Systems Concepts.

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Tags: Tags: mgo_rc, Volume 2, Number 72 -- September 20, 2002

    Sponsored by
    VISUAL LANSA 16 WEBINAR

    Trying to balance stability and agility in your IBM i environment?

    Join this webinar and explore Visual LANSA 16 – our enhanced professional low-code platform designed to help organizations running on IBM i evolve seamlessly for what’s next.

    🎙️VISUAL LANSA 16 WEBINAR

    Break Monolithic IBM i Applications and Unlock New Value

    Explore modernization without rewriting. Decouple monolithic applications and extend their value through integration with modern services, web frameworks, and cloud technologies.

    🗓️ July 10, 2025

    ⏰ 9 AM – 10 AM CDT (4 PM to 5 PM CEST)

    See the webinar schedule in your time zone

    Register to join the webinar now

    What to Expect

    • Get to know Visual LANSA 16, its core features, latest enhancements, and use cases
    • Understand how you can transition to a MACH-aligned architecture to enable faster innovation
    • Discover native REST APIs, WebView2 support, cloud-ready Azure licensing, and more to help transform and scale your IBM i applications

    Read more about V16 here.

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Is It a Different ‘Hello World’ in OS/400 V5R1? Reader Feedback and Insights: Displaying Menu Options

    Leave a Reply Cancel reply

MGO Volume: 2 Issue: 72

This Issue Sponsored By

    Table of Contents

    • Reader Feedback and Insights: Thanks for the Tips
    • Comparing Lists of Numbers to a Value
    • JD Edwards Dates, Revisited

    Content archive

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

    Recent Posts

    • Liam Allan Shares What’s Coming Next With Code For IBM i
    • From Stable To Scalable: Visual LANSA 16 Powers IBM i Growth – Launching July 8
    • VS Code Will Be The Heart Of The Modern IBM i Platform
    • The AS/400: A 37-Year-Old Dog That Loves To Learn New Tricks
    • IBM i PTF Guide, Volume 27, Number 25
    • Meet The Next Gen Of IBMers Helping To Build IBM i
    • Looks Like IBM Is Building A Linux-Like PASE For IBM i After All
    • Will Independent IBM i Clouds Survive PowerVS?
    • Now, IBM Is Jacking Up Hardware Maintenance Prices
    • IBM i PTF Guide, Volume 27, Number 24

    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