24
Sun, Nov
1 New Articles

Practical RPG: Technology Refresh 7 First Look

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

Technology Refresh 7 (TR7) provides quite a few new features, and this is the first article devoted to some of those changes.

 

TR7 has a wealth of additional features and functionality for various parts of the IBM i operating system, and in coming articles I plan to cover as many of them as possible. But since the focus of today's article is RPG, it makes sense to stick with the enhancements in RPG-related compilers. So let's take a look at what has happened.

Getting /Freer Every Day

The title of this paragraph is tinged with irony, since part of the evolution of free-format RPG is to actually get rid of the /free (and /end-free) statements in RPG. But I'm putting the cart just a little bit ahead of the horse here, so let me try to present the changes in an orderly fashion.

 

If you haven't been asleep the last decade, you've heard about free-form RPG, in which the calculation specifications have been unshackled from their fixed columns and allowed to roam freely across the source member. The resulting code looks a lot more like something you would expect to see in a Java or C class, albeit with some rather noticeable differences (such as the lack of curly braces). Here's an example. We're defaulting an operation to be rejected and then overriding it to be allowed for a security officer (this is a very small piece of a web authorization code).

 

     C               eval     Authorization = Reject

     *

     C              if       user = SecurityOfficer

     C               eval     Authorization = Allow

     C               else

 

In free-form RPG, the code is more C-like:

 

     /free

      Authorization = Reject;

 

      if user = SecurityOfficer;

       Authorization = Allow;

      else;

 

However, even with the new look, there's a certain amount of clumsiness in the implementation. Immediately noticeable even in the brief segment above is the requirement of the use of the /free directive to switch between fixed-format and free-format syntax (and the corresponding /end-free directive—not shown—to switch back to fixed format). Also, the original free-format RPG syntax affected only calculation specification (C-specs). Other specificationsheader, file, data, input, and output, as well as the new procedure specificationall required a fixed-format syntax. When I teach RPG and the Rational development tools, I always make light of the fact that one of the capabilities of the advanced GUI development tools is the ability to still prompt for a fixed-format F-spec.

 

110613PlutaImage1                       

Figure 1: You can still prompt for a fixed-format F-spec if you want to.

 

But really, this is needed, because I can never remember where to put the K to indicate keyed access or the A that identifies file addition. And as I use more and more free-format RPG, it's harder to remember. And while I suppose if I tried hard enough I could remember them, it's so much easier to just write this:

 

      dcl-f envdef keyed;

 

That's all that is required to create a file definition for the ENVDEF file. I'll have to remember a few new keywords such as USAGE( *INPUT | *OUTPUT | *UPDATE | *DELETE) and the KEYED keyword you see in the example, which identifies the file as having keyed access, just like the old K in column 34, but I find keywords a lot easier to remember than fixed column positions. Anyway, two of the old-fashioned specification types, namely header and file, are each replaced by a specific new free-format opcode: header by the ctl-opt operation and file by the dcl-f operation.

 

Next in the list is the newer procedure specification. The P-spec is replaced by the dcl-proc operation, but this is a little more complex in that the dcl-proc just opens the specification; it requires a matching end-proc operation to close the block. Everything between those two statements is considered the body of the declaration. In a more C-like implementation, you might expect to see the body of the procedure delimited by curly braces ("{" and "}"), but the RPG compiler team decided to stick with the opcode and semi-colon approach. Most RPG programmers should feel comfortable with that sort of blocking, mimicking as it does the if/endif and dowhile/enddo constructs we know already.

 

Finally, we get to the data definition specification. The D-spec is a complex, multi-functional specification, and because of that, it's broken apart into multiple free-format operation codes. Generally, though, the operation codes mirror the definition types: one operation exists for each of the primary definition types of constant, data structure, standalone field, prototype, and procedure interface. If you're familiar with the fixed-format D-specs, you know that each has its own definition type specified in columns 24 and 25 of the specification, such as C for constant or PI for procedure interface. The new free-format operation codes correspond directly to those types, with dcl-c used to declare a constant and dcl-pi to define a procedure interface. Other operations follow that pattern. Additionally, two other operations provide the functionality for the two data definitions with blank definition types: data structure subfields (dcl-subf in the new syntax) and procedure parameters (identified by dcl-parm).

 

Note also that those definitions that can have sub-definitions (data structures, prototypes, and procedure interfaces) are all closed by an end specification. For example, a data structure might look like dcl-ds, one or more dcl-subf intrsuctions, and an end-ds.

 

      dcl-ds reference;

       dcl-subf program char(10);

        dcl-subf library char(10);

        dcl-subf filename char(10);

      end-ds;

 

In another article, I'll go through some of the more subtle nuances of the new syntax (for example, the dcl-subf operation is optional, much the same way that eval is optional in free-format calculations).

Final Twists

There are a couple of last minor changes to the syntax. First, as I've alluded to already, the /free and /end-free are deprecated. You can still use them, but they're ignored, and in fact you can now intersperse fixed-format and free-format RPG code with impunity. It makes sense, since the logic is pretty simple: if there's a C in column 6, it's a fixed-format statement, and if there's a blank, it's free-format. Extend that out to the rest of the source and basically column 6 identifies each line as either fixed- or free-format. This does lead to one byproduct that could easily be abused: you can now put old-fashioned fixed-format code including GOTOs, TAGs, and even the dreaded MOVEs in the midst of your free-format code. You could always do that, of course, but prior to TR7 you had to at least surround the deprecated opcodes with an ugly /end-free and /free block.

 

And finally, you don't have to have your F-specs ahead of your other declarations. Feel free to intersperse your dcl-f, dcl-c, dcl-s, and dcl-ds as you see fit.

 

Please note that you'll have to apply the TR7 PTF before all of this free-format goodness becomes available. Also, it's not yet clear when these syntax changes will be recognized by the Rational development tools. I think it's safe to say, though, that you won't ever be seeing them in SEU.

Joe Pluta

Joe Pluta is the founder and chief architect of Pluta Brothers Design, Inc. He has been extending the IBM midrange since the days of the IBM System/3. Joe uses WebSphere extensively, especially as the base for PSC/400, the only product that can move your legacy systems to the Web using simple green-screen commands. He has written several books, including Developing Web 2.0 Applications with EGL for IBM i, E-Deployment: The Fastest Path to the Web, Eclipse: Step by Step, and WDSC: Step by Step. Joe performs onsite mentoring and speaks at user groups around the country. You can reach him at This email address is being protected from spambots. You need JavaScript enabled to view it..


MC Press books written by Joe Pluta available now on the MC Press Bookstore.

Developing Web 2.0 Applications with EGL for IBM i Developing Web 2.0 Applications with EGL for IBM i
Joe Pluta introduces you to EGL Rich UI and IBM’s Rational Developer for the IBM i platform.
List Price $39.95

Now On Sale

WDSC: Step by Step WDSC: Step by Step
Discover incredibly powerful WDSC with this easy-to-understand yet thorough introduction.
List Price $74.95

Now On Sale

Eclipse: Step by Step Eclipse: Step by Step
Quickly get up to speed and productivity using Eclipse.
List Price $59.00

Now On Sale

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

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: