RPG Fundamentals Tip #2: Working with Linear Main Programs

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

Unlike cycle main programs, linear main programs do not include the RPG cycle.

Editor’s note: This article is excerpted from Programming in ILE RPG, Fifth Edition, chapter 14, “Building Modular Programs with Procedures.”

RPG supports a second type of program (as an alternative to cycle main programs) that does not include the RPG cycle. A linear main program explicitly names a procedure to be the main procedure for the program. A linear main program includes a Ctl-opt instruction with the Main keyword to name the main procedure:

 

Ctl-opt Main(proc-name);

 

You then code the main procedure just as any other subprocedure, starting with a Dcl-proc instruction and ending with an End-proc instruction. The main section in a linear main program (before the first Dcl-proc instruction) does not contain any executable code, although it can include global declarations.

 

The RPG compiler will not embed the RPG cycle into a linear main program. A linear main program implicitly initializes variables, locks data areas, and opens files when the program starts, but these resources are not cleaned up or closed when the program ends, unless the program explicitly does so, using RPG operations. A linear main program does not use *Inlr to trigger such an automatic shutdown.

 

To understand the basic coding requirements for a linear main program, let’s modify the earlier cycle main program to now be a linear main program. Notice the highlighted differences between this program and the earlier cycle main program.

 

// ----------------------------------------------------

//

// Program – THISPGM – Displays Celsius temperature and

//                     corresponding water state

//

// ----------------------------------------------------

Ctl-opt Main(Driver);

// ----------------------------------------- Prototypes

Dcl-pr Driver Extpgm('THISPGM');

*N Int(5);

End-pr;

Dcl-pr Celsius Int(5);

*N Int(5);

End-pr;

// ----------------------------------------------------

//

// Main procedure

//

Dcl-proc Driver;

// ------------------------------ Procedure interface

Dcl-pi *N;

 Englishtemp Int(5);

End-pi;

// ---------------------------------- Local variables

Dcl-s Message   Char(50);

Dcl-s Metrictemp Int(5);

Dcl-s State     Varchar(8);

Metrictemp = Celsius(Englishtemp);

Select;

 When Metrictemp < 0;

    State = 'solid';

 When Metrictemp = 0;

    State = 'freezing';

 When Metrictemp = 100;

    State = 'boiling';

 When Metrictemp > 100;

    State = 'gaseous';

 Other;

    State = 'liquid';

Endsl;

Message = 'At ' + %Char(Englishtemp) + ' degrees (' +

        %Char(Metrictemp) + ' Celsius), water is ' +

         State + '.';

Dsply Message;

Return;

End-proc Driver;

// ----------------------------------------------------

//

// Procedure – Celsius – Converts Fahrenheit to Celsius

//

Dcl-proc Celsius;

// ------------------------------ Procedure interface

Dcl-pi *N Int(5);

 Fahrenheit Int(5);

End-pi;

// ---------------------------------- Local variables

Dcl-s Temperature Int(5);

Eval(H) Temperature = (5/9) * (Fahrenheit - 32);

Return Temperature;

End-proc Celsius;

 

The first difference is the addition of the Ctl-opt instruction to name the program’s main procedure, Driver (it can be any valid name). The Main keyword to name the main procedure is the key to creating the linear main program. The Driver procedure will be coded with other subprocedures, but it will be the first user-written code to execute when the program starts. You code the prototype for the Driver procedure in the global declarations section of the program. The Extpgm keyword indicates the name of the program: THISPGM.

 

The Driver procedure begins with a Dcl-proc instruction and ends with an End-proc instruction. The first declaration in Driver is its procedure interface. All the variables are local variables, restricted to the procedure in which they are declared. Like the main procedure in the earlier program, the Driver procedure in this program accepts a single parameter, Fahrenheit, and then executes the Celsius subprocedure to convert that value to Celsius. It then assigns a state and displays a message.

 

Unlike in the earlier program, the Driver main procedure does not set *Inlr to implicitly close the program; instead, the program ends when it encounters the Return operation. Note that any open files or locked data areas, without the presence of explicit Close or Unlock operations, will remain open or locked after the program ends.

 

The result of running this program is the same as the earlier cycle main program. But a linear main program does not include logic for the RPG cycle. While it cannot use the automatic features of the cycle, a linear main program also avoids any possible performance impact of the cycle, however minimal it may be. In addition, a linear main program is recursive. Unlike a cycle main program, a linear main program can call itself for those applications where recursive calls are necessary.

 

Choosing which type of program to code, cycle main or linear main, is largely a matter of style, preference, and shop standards. Most traditional programs use the cycle main model. Many newer programs (and newer programmers) tend toward the linear main model, which is similar to that of other computer languages. Unless your program requires RPG cycle features—most notably using *Inlr to close the program—the runtime differences between the two models are negligible.

Jim Buck

Jim Buck's career in IT has spanned more than 35 years, primarily in the college education, manufacturing, and healthcare industries. Past president (13 years) of the Wisconsin Midrange Computer Professional Association, he has served on several teams developing IBM and COMMON certification tests. Jim has co-authored several IBM i textbooks with Bryan Meyers that are used by many companies and in colleges worldwide. Other accomplishments include: recipient of the 2007 IBM System i Innovation - Education Excellence Award, 2014 COMMON President's Award, and 2013/2016/2017 IBM Champion - Power Systems.


Jim is the president and founder of imPower Technologies, where he provides professional IBM i training and consulting services. He is active in the IBM i community, working to help companies train their employees in the latest IBM technologies and develop the next generation of IBM i professionals.


MC Press books written by Jim Buck available now on the MC Press Bookstore.

Control Language Programming for IBM i Control Language Programming for IBM i
Master the A-Z of CL, including features such as structured programming, file processing enhancements, and ILE.
List Price $79.95

Now On Sale

Mastering IBM i Mastering IBM i
Get the must-have guide to the tools and concepts needed to work with today's IBM i.
List Price $85.95

Now On Sale

Programming in ILE RPG Programming in ILE RPG
Get the definitive guide to the RPG programming language.
List Price $95.95

Now On Sale

Programming in RPG IV Programming in RPG IV
Understand the essentials of business programming using RPG IV.
List Price $79.95

Now On Sale

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  •  

  • 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.

  • 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

  • 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: