TechTip: Fixed-Format to Free-Format: Missing Op-Codes

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

One challenge when switching from fixed- to free-format RPG IV is the disappearance of many frequently used op-codes. This tip reveals what to do for six of the lost operations.

 

Commonly used operations for character manipulation in fixed-format are SCAN, SUBST, CAT, MOVE, MOVEL, and MOVEA. These operations are not available in free-format. This tip demonstrates how to do these operations in the free-format way.

 

SCAN: A built-in function (BIF) %scan is available that performs the scan function. The only difference between the SCAN op-code and the BIF is that the BIF does not have the array option that the SCAN op-code has. Otherwise, they are identical.

 

Example: Assume field CITY contains 'ALBUQUERQUE'.

 

           'QU'     SCAN   CITY:6           ANS

 

After this operation, ANS contains a 9, because we started the scan in position 6.

 

The free format equivalent would be:

 

            ANS = %scan('QU':CITY:6);

 

 

SUBST: This op-code was also replaced with a BIF: %subst. The SUBST operation can only substring a source string, but the %subst BIF can substring both a source and a target string.

 

Example: Assume a field named STR has a value of 2, and field NAME has a value of 'JONATHAN SMITH'.

 

           3       SUBST   NAME:STR       ANSW

 

After this operation, ANSW contains 'ONA'.

 

The free format equivalent would be this:

 

            ANSW = %subst(NAME:STR:3);

 

CAT: Concatenation is performed in free-format by using the plus symbol (+) in a string expression. The following example shows both the fixed-format method of building an address line and the free-format equivalent:

 

D City           s             15   Inz('Chicago')

D State           s             2   Inz('IL')    

D Zip             s             5   Inz('60601')

d Line4           s             30                

c                   Movel     City         Line4  

c                   Cat       ',':0         Line4  

c                   Cat       State:1       Line4  

c                  Cat       Zip:2         Line4  

/free                                            

Line4 = %trim(City) + ', ' + State + ' ' + Zip;

 

MOVE: This op-code has many functions available, but I will limit my discussion to the character-handling part. For this operation, the Factor 2 field is right-adjusted in the result field, with left blank fill optional. There is no exact match in free-format, in a BIF or other operation, but whatever is needed can be accomplished.

 

For a right-adjust move with left blank fill (padding), the EVALR operation is the solution in free-format.

 

Example: Assume field ALPHA is 'ABCDEFGH' and field NAME is 'JOE'.

 

The fixed format operation…

 

                  MOVE(P)   NAME          ALPHA    

 

…would have an equivalent in free format of…

 

            EvalR ALPHA = NAME;

 

Without blank fill, the fixed format operation would be…

 

                  MOVE   NAME           ALPHA

 

The field ALPHA would now be 'ABCDEJOE'.

 

The equivalent in free-format can be done several ways, and here's one way:

 

      ALPHA = %replace(NAME:ALPHA:%len(ALPHA) - %len(NAME) + 1);

 

MOVEL: As with MOVE, there is no exact match in free-format, but the functionality is easy to duplicate. In MOVEL, Factor two is left-justified in the Result field.

 

Example: Assume field ALPHA is 'ABCDEFGH' and NAME is 'JOE'.

 

                  MOVEL NAME       ALPHA

 

The field ALPHA now contains 'JOEDEFGH'.

 

The equivalent in free-format would be…

 

      ALPHA = %replace(NAME:ALPHA);

 

MOVEA: There is no move array operation in free-format. However, there's always some way to duplicate the function needed.

 

The MOVEA operation was first available in RPG II, and it helped solve a big need for character scan, concatenation, and sub-stringing that was previously unavailable. By moving a field to an array defined as one character per element, scanning became available using the LOOKUP operation. If an element is found, the index resulting from the LOOKUP is then used to modify the array element to whatever is desired.

 

Since we now have scanning (%scan), translate (%xlate), concatenation (+), and sub-stringing (%subst) of character fields, the old technique of using MOVEA is not needed or desirable.

 

Using MOVEA to move an array to another array is a bit trickier to do in free-format, and not as elegant, but nonetheless possible.

 

Here are examples:

 

D Ary1           s             1   Dim(100)            

D Ary2           s           100   Dim(50)              

D i               s             5u 0                      

D j               s             5u 0                      

D Arx            s                   Like(Ary1) Based(Ptr)

D                                     Dim(100)            

* Move all elements of Ary1 to element i of Ary2:        

c                   MoveA     Ary1         Ary2(i)        

/free                                                    

// Free format Method 1:                                            

For j = 1 to %elem(Ary1);                                

   %subst(Ary2(i):j:1) = Ary1(j);                        

EndFor;                                                  

                                                          

// Free Format Method 2;                                            

Ptr = %addr(Ary2(i)); // Point to correct element in Ary2      

Arx = Ary1;  

 

There are many other operations in fixed-format that are not available in free-format, but there's always an equivalent programming method available.

 

JIM MARTIN

Jim Martin holds a BS degree in mathematics and an MS in computer science. For 26 years, he was employed by IBM, where he wrote RPG applications for customers and worked in the programming laboratory as a programmer on portions of CPF and the OS/400 operating system. After leaving IBM, Jim took post-graduate work in computer science and performed RPG training. He is an IBM-certified RPG IV developer and author of multiple bestselling editions of Free-Format RPG IV, which, since the book's initial publication in 2005, have taught thousands of RPG IV programmers how to be successful with the free-format coding style.


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

Free-Format RPG IV: Third Edition Free-Format RPG IV: Third Edition
Improve productivity, readability, and program maintenance with the free-format style of programming in RPG IV.
List Price $59.95

Now On Sale

Free-Format RPG IV: Second Edition Free-Format RPG IV: Second Edition
>Make the transition from coding in fixed-format RPG to free format.
List Price $59.95

Now On Sale

Functions in Free-Format RPG IV Functions in Free-Format RPG IV
Here’s the ultimate guide to writing RPG IV programs with functions in the free-format style.
List Price $59.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: