Why /Free in RPG?

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

Why should you use /Free? Certainly positional RPG is familiar to everyone in our world. Why bother to learn or use /Free? Fortunately, there are a ton of articles out there about the advantages of /Free, so I am not going to belabor it. Just search on “RPG Free advantages”.

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

The thrust of /Free is simple: it gives you opcodes and structures that do not have to be in a given column position on the screen. And this allows you to do four things.

First, to write code that looks similar to an English sentence (that is, in straightforward order, not inverted like German), so it is more readable.

Second, it lets you have longer field names, thus giving you the ability to make them more understandable. The maximum length you can have in /Free is 4,096 characters, which I admit might be a bit too long for good communication. You probably want to shoot for something under 20 or so, but the ability to have more meaningful names is a critical feature.

Third, it allows you to indent to show structure more clearly, just as these few sentences have been indented to show they are subordinate to the paragraph above. This is huge for me.

Fourth, it removes a number of opcodes from the mix, simplifying and cleaning up the language by gently forcing you to make extensive use of IBM’s built-in functions (BIFs).

So, in a nutshell, why would you want to use /Free?

With the indentation, sentence-type structure, and the ability to create longer names, the code is much more readable, which means it’s much more maintainable.

Code written in /Free doesn’t look outdated and quirky to outsiders the way positional RPG does, and its syntax really is not all that different from some other Web languages like C or Java. Certainly it’s much closer than positional RPG is. Who cares what others think? We have to, because many times those heathen others make the decision about what platform and language we will be allowed to use. Nothing says “outdated” quite as clearly as positional requirements.

Finally, this is the direction that the language is going in. We gave up RPG III to go to IV (kicking and screaming on the part of some, I’ll admit), and we should give up positional RPG now for /Free.

Who Can Use /Free?

Anyone can use /Free if they are on 5.1 or above (it really became functionally useful with 5.3), and no one can be denied access to it based on race, gender, sexual orientation, or even what sports teams they root for.

Most of what I am going to do will be using version 5.4. Yes, I know, that is an old version and a lot of people are on 6.1 or 7.x. But a lot is not all; as I said earlier, I believe many people are still on 5.4 (or below), captives of a management that does not recognize the benefits of upgrading, so I am going to use that version of the operating system to be sure that you can do what I can do. I will mention the additional features you have in 6.1 and 7.x but not require their use.

So the first thing you want to do is find out what version of the system you are on to be sure you can use /Free. If you don’t know or don’t know how to check, go to a command line and enter this command:




See the OS version you are on at the top part of the screen.

For those of you who are on 7.1, we will be talking later about whether or not you are on TR7 because some additional /Free functionality was added at that point. To check your technical refresh level, run this command:




The display that results will show you the level you are on. The level number is your TR level.

In the meantime, I will assume you are set to go. Please sign a copy of the enclosed Permission to Code in /Free form and hand it to the person on your right. I will pick them up later.


Why /Free in RPG? - Figure 1 


What’s Not in /Free

/Free was not only an attempt to do something that was more structured but also a way of simplifying the number of opcodes that are supported. Let’s face it, there are a ton of them in positional RPG. I mean there are almost three dozen Move statements alone. And so, a number of tried and true RPG favorites didn’t make the cut.

Like indicators on the I/O functions,

Or the ability to define variables on the fly,

And the Move opcodes (gasp ... yes, all of them), And some others.

How could they do that?

Complete disregard for what you need to do your job? I suppose that would be one way to look at it, but in reality it was done to make things simpler. To get away with this, /Free makes extensive use of two things.

First, BIFs. You can use them in positional RPG, of course, but they are standard operating fare for /Free.

And second, some additional, simplifying functionality (for example, how record keys are handled) that is new and exclusive with /Free.

For a complete list of what RPG operators have been deprecated just do an Internet search on “deprecated RPG opcodes in /Free”. Seriously. There are a couple of appendices in the James Martin book that pertain to this also. Appendix A is a brief description of every opcode that did make it into /Free, and Appendix C tells you what /Free opcodes you can use to replace the deprecated ones. I just didn’t feel like doing one; I prefer to Google.

Setting Up a /Free Program

All set? Great. Now let’s create a /Free program.

Probably the easiest way to do it the first time is to copy a short positional RPG program that we will modify to be a /Free model. (P.S. If you can’t find a short one, which is more than likely, take a long one and just delete more C-specs.)

Once copied, delete all the C-specs. Yep, that’s right, everything with a C in position 6 gets deleted. This should shorten up the model a bit. I would also delete all but one of the F-specs, and most of the D-specs, too. Oh, yeah, get rid of I- and O-specs also. This will get rid of a lot of the debris from the old program that we will not need in our model. Everyone whistle when you are done.

Why /Free in RPG? - Figure 2