Tue, May
3 New Articles

/Free Control Statements, Part 2

  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

DO Stuff: There’s an old programmers’ adage: “Where there’s an IF, there’s a DO,” and darned if it isn’t true.

By David Shirey

Editor's Note: This article is excerpted from chapter 5 of 21st Century RPG: /Free, ILE, and MVC, by David Shirey.

Fortunately, most of what we said for IFs is true for DO loops.

The DO itself has been eliminated from /Free (use FOR). And the DOWGT, DOULT, and others of that ilk are out as well.

What you are left with is simpler and more straightforward: DOW and DOU with a conditional statement. The basic syntax is:

/Free Control Statements, Part 2 - Figure 1

Despite the changes in syntax, these two commands operate the same way they do in positional RPG. That is, the difference is the point in the construct where the decision is made whether to continue with the loop or get out. For the DOW, it is done at the start of the loop; for DOU, it is at the end. In both cases, an ENDDO is required.

As with the IF statement, you can use parentheses and logical operators to write more complex conditions, and you can split them up on multiple lines with a semicolon only at the end-of-line group. For example:

/Free Control Statements, Part 2 - Figure 2

Now, please don’t think that I consider the above example a good example of coding. God help you if you end up ever having to duplicate this kind of logic. In reality, I would break this up into a couple of nested IFs, even though I hate those, too. It’s just an example, not my vision of reality.

/Free Control Statements, Part 2 - Figure 3

FOR Loop

To be honest, this is one that I don’t use that much. But strangely enough, right after I switched to /Free, I used it. Haven’t touched it since. For some reason, using it puts me in a FORTRAN sort of mood and makes me want to drink Harvey Wallbangers. Never really liked them when they were popular, so it’s a good reason to try to avoid the FOR. The Galliano bottles were cool, though.

But, sometimes you need to do a loop a given number of times, and that is what the FOR is there for.

FOR i = 1 to 5;

your indented logic statements; ENDFOR

(There is a syntax error in the above statement. Do you see what it is? Hint: have I mentioned the importance of the semicolon before?)

The From and To limits in the FOR can easily be variables.

One important thing to note is that the FOR statement will automatically update the i value each time the loop ends. So don’t do it yourself. That would be sooooo weird.

/Free Control Statements, Part 2 - Figure 4

Leaving a Loop

Sometimes you may be in an IF statement or a loop and decide you just want to get out. It can be a panic situation. You know, you feel the walls beginning to close in, and the longer the loop runs, the tighter and tighter and tighter ..., well, you get the idea. Often what we do is set a flag and fudge the structure of the loop so that when this flag is set, you can exit. Of course, back in the real olden days we would just do a GOTO and get out, but that was abused and has rightfully been banished by the Great Queen who rules Game of War.

Fortunately, /Free supports the LEAVE and ITER opcodes.

LEAVE will take you to the next statement after the end of the loop you are currently in. It truly gets you out of the loop. Ta-dah!

ITER causes you to jump to the ENDDO (or ENDFOR) and perform the normal checking that is done to see if you should get out or do another iteration. You skip any code within the loop but come back in the loop for another go-round.

In other words, LEAVE does just that: it kicks you out of the loop you are in. ITER bypasses all of the logic between you and the end of the loop, but keeps you in the loop and lets it do the normal checking to see if you should be set free or if you have another ticket to ride.

Both of these opcodes work only if you are in a DOx or FOR loop. You can code it inside a DOx or FOR loop that is in an IF or SELECT statement, but if you just put it in a standalone IF or SELECT, you will get a compile error.


The CALL opcode was not moved over to /Free. Instead, you will use the prototyped call, CALLP.

The format for this is pretty simple:

CALLP DWS0001(parm1:parm2:parm3);

Like the EVAL opcode, however, the CALLP is optional. So you may see the call to a program set up to look more like a BIF statement:


Some people consider this the only civilized way to set up a call, and they use it frequently. For my money, I prefer the first form. The main issue to me is one of clarity. I like having the CALLP there because that is a very clear visual sign that a call is being made. I suppose I should be smart enough to instantly recognize that the other is a call, but I am not. In this case it is obvious, but if I had named my PR spec AP_CREDIT_CHECK instead of DWS0001 (an obvious program name), it might not be quite so clear. And don’t worry, we will talk about what PR specs are later.

It’s a small thing, but to me it sometimes seems that now that we have a version of RPG that is very easy to read and understand, we are taking steps to make it more cryptic. I agree, it looks more Web-like that way, but I would hardly argue that Web languages are easy to read.

But chose whatever form seems best to you. They both work just fine. And, as we shall see later, sometimes you have to use the format without the CALLP.


While we are talking about control logic statements, I want to say just a final word about indenting your code.

Do it!

Indenting is something RPG programmers generally don’t think about too much (since you can’t do it in fixed-format mode). But indenting is probably the single most powerful structure tool a programmer has. Anyone who has struggled to match up IFs and ENDIFs in a big logic section has to appreciate the ability to be able to indent code and so easily see which ENDIF matches up with which IF.

So get in the habit right now. I like to indent four spaces; some people like more or fewer, but they are crazy. The important point is to start to build indenting into your coding style with /Free right away. You won’t regret it.

What Ya Shoulda Learned

OK, we are a couple of chapters into /Free now, and your feet should be getting pretty wet. You already know enough to do quite a bit of damage, but we are not going to stop here. Before we go on, though, I want to quickly review what we have talked about here.

  • First, you should have a good handle on setting up the IF
  • Second, need I mention that you have to have a semicolon after each statement?
  • Use parentheses as necessary to make the whole thing easier to read and compile (that is, for the compiler to understand what you want).
  • Use the new mathematical comparison operators (versus the old alphabetic abbreviations).
  • If you do use not on an expression, be sure to surround the expression with parenthesis for clarity.
  • In addition, we went over the SELECT/WHEN.
  • And the FOR.
  • Plus the DOW/DOU, which when used in conjunction with a condition statement replace the DOWEQ, operators from positional RPG.
  • And finally, we saw the prototyped call parm, CALLP, and its two
  • But most important, you have not only learned about these things but actually used them in your sample /Free program. You did try each one of these, right? I hope so.

And now we are tired; happy but tired. So let’s rest for just a minute before we move on to /Free I/O.

Want to learn more?  You can pick up Dave Shirey's book, 21st Century RPG: /Free, ILE, and MVC, at the MC Press Bookstore Today!

David Shirey

David Shirey is president of Shirey Consulting Services, providing technical and business consulting services for the IBM i world. Among the services provided are IBM i technical support, including application design and programming services, ERP installation and support, and EDI setup and maintenance. With experience in a wide range of industries (food and beverage to electronics to hard manufacturing to drugs--the legal kind--to medical devices to fulfillment houses) and a wide range of business sizes served (from very large, like Fresh Express, to much smaller, like Labconco), SCS has the knowledge and experience to assist with your technical or business issues. You may contact Dave by email at This email address is being protected from spambots. You need JavaScript enabled to view it. or by phone at (616) 304-2466.

MC Press books written by David Shirey available now on the MC Press Bookstore.

21st Century RPG: /Free, ILE, and MVC 21st Century RPG: /Free, ILE, and MVC
Boost your productivity, modernize your applications, and upgrade your skills with these powerful coding methods.
List Price $69.95

Now On Sale



Support MC Press Online

$0.00 Raised:

Book Reviews

Resource Center

  • SB Profound WC 5536 Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application. You can find Part 1 here. In Part 2 of our free Node.js Webinar Series, Brian May teaches you the different tooling options available for writing code, debugging, and using Git for version control. Brian will briefly discuss the different tools available, and demonstrate his preferred setup for Node development on IBM i or any platform. Attend this webinar to learn:

  • SB Profound WP 5539More than ever, there is a demand for IT to deliver innovation. Your IBM i has been an essential part of your business operations for years. However, your organization may struggle to maintain the current system and implement new projects. The thousands of customers we've worked with and surveyed state that expectations regarding the digital footprint and vision of the company are not aligned with the current IT environment.

  • SB HelpSystems ROBOT Generic IBM announced the E1080 servers using the latest Power10 processor in September 2021. The most powerful processor from IBM to date, Power10 is designed to handle the demands of doing business in today’s high-tech atmosphere, including running cloud applications, supporting big data, and managing AI workloads. But what does Power10 mean for your data center? In this recorded webinar, IBMers Dan Sundt and Dylan Boday join IBM Power Champion Tom Huntington for a discussion on why Power10 technology is the right strategic investment if you run IBM i, AIX, or Linux. In this action-packed hour, Tom will share trends from the IBM i and AIX user communities while Dan and Dylan dive into the tech specs for key hardware, including:

  • Magic MarkTRY the one package that solves all your document design and printing challenges on all your platforms. Produce bar code labels, electronic forms, ad hoc reports, and RFID tags – without programming! MarkMagic is the only document design and print solution that combines report writing, WYSIWYG label and forms design, and conditional printing in one integrated product. Make sure your data survives when catastrophe hits. Request your trial now!  Request Now.

  • SB HelpSystems ROBOT GenericForms of ransomware has been around for over 30 years, and with more and more organizations suffering attacks each year, it continues to endure. What has made ransomware such a durable threat and what is the best way to combat it? In order to prevent ransomware, organizations must first understand how it works.

  • SB HelpSystems ROBOT GenericIT security is a top priority for businesses around the world, but most IBM i pros don’t know where to begin—and most cybersecurity experts don’t know IBM i. In this session, Robin Tatam explores the business impact of lax IBM i security, the top vulnerabilities putting IBM i at risk, and the steps you can take to protect your organization. If you’re looking to avoid unexpected downtime or corrupted data, you don’t want to miss this session.

  • SB HelpSystems ROBOT GenericCan you trust all of your users all of the time? A typical end user receives 16 malicious emails each month, but only 17 percent of these phishing campaigns are reported to IT. Once an attack is underway, most organizations won’t discover the breach until six months later. A staggering amount of damage can occur in that time. Despite these risks, 93 percent of organizations are leaving their IBM i systems vulnerable to cybercrime. In this on-demand webinar, IBM i security experts Robin Tatam and Sandi Moore will reveal:

  • FORTRA Disaster protection is vital to every business. Yet, it often consists of patched together procedures that are prone to error. From automatic backups to data encryption to media management, Robot automates the routine (yet often complex) tasks of iSeries backup and recovery, saving you time and money and making the process safer and more reliable. Automate your backups with the Robot Backup and Recovery Solution. Key features include:

  • FORTRAManaging messages on your IBM i can be more than a full-time job if you have to do it manually. Messages need a response and resources must be monitored—often over multiple systems and across platforms. How can you be sure you won’t miss important system events? Automate your message center with the Robot Message Management Solution. Key features include:

  • FORTRAThe thought of printing, distributing, and storing iSeries reports manually may reduce you to tears. Paper and labor costs associated with report generation can spiral out of control. Mountains of paper threaten to swamp your files. Robot automates report bursting, distribution, bundling, and archiving, and offers secure, selective online report viewing. Manage your reports with the Robot Report Management Solution. Key features include:

  • FORTRAFor over 30 years, Robot has been a leader in systems management for IBM i. With batch job creation and scheduling at its core, the Robot Job Scheduling Solution reduces the opportunity for human error and helps you maintain service levels, automating even the biggest, most complex runbooks. Manage your job schedule with the Robot Job Scheduling Solution. Key features include:

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • LANSAWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed. Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

  • LANSASupply Chain is becoming increasingly complex and unpredictable. From raw materials for manufacturing to food supply chains, the journey from source to production to delivery to consumers is marred with inefficiencies, manual processes, shortages, recalls, counterfeits, and scandals. In this webinar, we discuss how:

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • Profound Logic Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application.

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: