Tutorial 1 – Getting Started with /Free

advertisement
/Free Tutorial 1
Shirey Consulting Services
Tutorial 1 – Getting Started with /Free
So you want to learn /Free, do you? Well, no problem. It’s easy and it’s fun. Well, at least easy.
So let’s get right into it.
Disclaimer
These tutorials are not designed to teach you everything you ever wanted to know about /Free.
They are designed as a fun, simple way to get started in the topic and not feel like a total idiot.
And if you learn everything here you will have learned a lot. But for more information on /Free
(and you should look for more info once you finish this), please see Jim Martin’s excellent (and
not too long or expensive) book Free Format RPG IV. In fact, I would order a copy now and use
it as an adjunct to these tutorials. Good reference.
Anti-Disclaimer
If a disclaimer is something you use to hedge your bets about the topic you are talking about,
then I guess this would be an anti-disclaimer. /Free is not something that you will use
intermittently in your program or only in certain situations. /Free is something that you can use
instead of the old column based RPG. I have been using it exclusively for quite some time now
and have never run into a situation, even though I have done a number of tricky, dickey
programs. /Free is all you need and it’s good to get used to it now because the train has left the
station and we are never going back to column based coding. In fact, the word on the street is
that RPG V, which is in the works and will be released sometime in the next few OS releases,
will be strictly /Free. And that is a good thing that helps RPG position itself as a legitimate
language with people who didn’t break in on RPG III.
Get a Program to Work With
OK, enough posturing, let’s start by creating a stub program. You can start from scratch or take
a simple one and copy it but either way, get a small program that you can work with.
To begin with, delete off all C-specs. Yes, all of them. And that includes any *ENTRY lines.
To begin with this will be a program that has no input parms. When you are done there
shouldn’t be a C line anywhere in the program (not even a C*). For the moment, comment out
the F-specs and either comment out or delete your D-specs. This will make it easier and prevent
compiler mistakes. You won’t have much left but that’s fine.
Page 1
/Free Tutorial 1
Shirey Consulting Services
You can do programs that are part fixed format and part /Free, in which case the free stuff will be
mixed in with the traditional C-specs, but that’s for wimps. Just do /Free and forget about all
that fixed format stuff. I know, when I first started using /Free I thought there were some things
you just had to do with regular C-specs, but that’s soooooo totally bogus. /Free is all you need.
F-specs, D-Specs, I-Specs, and O-Specs
The first thing you need to know is that /Free makes no changes to the F, D, I, and O specs. You
will code them up just like you do when you are doing a normal, outmoded, fixed format
program.
The truth is that /Free works only on your C-specs, and if you want the full truth, /Free replaces
your C-specs. That’s right, Tex, if your program is totally /Free you will have no C-specs what
so ever. I know, it’s outrageous. I love it.
/Free Syntax
The syntax rules for /Free are so simple that it’s almost like there are none. Almost.
First, you MUST tell the compiler that what you are about to do is in /Free. And you do that by
coding the verbiage ‘/Free’, starting in column 7 of the first line in your procedure division
(that’s the column you would put an * in if you were coding ‘C*’ for comments in fixed). You
will do that right at the top of the area where the C specs would normally start.
Once you put in your /Free, then no C specs can be coded below that until you have a /End-Free,
which also begins in column 7. After the /End-Free you can have C-specs and you can even
have multiple /Free - /End-Free code segments with normal C-specs in between. But like I said,
that’s for wimps. If you have your whole procedure division coded in /Free then you don’t need
the /End-Free at the end of the program. The compiler can figure out that the program is over. If
you do feel the need to code an /end-free then it goes at the very end of the program (after any
subroutines, not after the LR indicator which you need to include just like with fixed format
RPG).
It’s also important to mention that, like RPG, /Free is case independent. You can code /free,
/Free, /FrEe, /FREE, whatever you want and the system could care less. And the same is true for
all /Free commands and parms. I generally put my code in UPPER CASE and my comments in
lower case but a lot of folks do the reverse. You are limited only by your sense of style and
propriety.
OK, so far we have our F-specs, our D-specs, and no C-specs, but we do have /Free and /EndFree coded up with nothing in column 6. You with me, sport?
Page 2
/Free Tutorial 1
Shirey Consulting Services
Fig 1 - /Free Program Start.
Remember, the /end-free at the end is optional and the *INLR is required.
Page 3
/Free Tutorial 1
Shirey Consulting Services
/Free Syntax – 2
Now we are ready to code some /Free stuff.
Unlike fixed format where you have a C in column 6 and can put an ‘*’ in column 7, you can
never put anything in columns six or seven for /Free. And that includes the markers for
comments when we get to that point. So, just keep it in mind – nothing ever goes in columns 6
or 7 (except for the /Free and /End-Free junk).
So, let’s start by putting in an EVAL statement.
Remember, there is no MOVE support in /Free (take a couple of deep breaths now, bend at the
waist, you’ll get past it) and so you have to use the EVAL. Create a D-spec field, say ‘dave’
with a 10 alpha picture (because the other thing you can’t do in /Free is to define fields on the
fly, but that’s OK because that was bogus too). Now let’s enter the EVAL statement
EVAL DAVE = ‘Nice Guy’;
Let’s start it in column 8 because that is the left most column we can use so just type it in. You
can really start this in any column 8 or higher but I like to start as far left as I can so I can indent.
Notice that there are no extra spaces in this statement, no positional requirements. Of course,
there could be extra spaces, like if you had a series of EVALs and you wanted the equal sign to
line up. No positional requirements.
You can also write it without the EVAL. No, I’m totally serious, dude, the compiler is that
smart. And you don’t have to capitalize DAVE either. I just like emphasizing it.
DaVe = ‘Nice Guy’;
The last thing you need to do then is put a semicolon after the statement. Every single statement
in /Free has a semicolon at the end, even ELSE and things like that. In the beginning it will be
hard but pretty soon you’ll get used to it and then you’ll say things like ‘I’m going to the store,
semicolon’ when you talk. You want to try to avoid that.
Finally, we better put on the LR indicator and I will tell you straight up that the old SETON with
the LR in the HI column doesn’t work in /Free. Instead, just use a simple EVAL (EVAL LR =
*ON;) or even (LR = *ON;).
Now at this point I want you to go ahead and compile this program. Yeah, I know it’s one line
but that just means it won’t take too long. If you get errors then boy you are really stup . . . er, I
mean I bet the problem is you have something in column 6 or 7 somewhere. Or you forgot the
semicolon. Or something really dorky like that. Get a clean compile and then we’ll continue.
I’m going to fix myself a highball.
Page 4
/Free Tutorial 1
Shirey Consulting Services
Fig 2 - /Free Syntax
Page 5
/Free Tutorial 1
Shirey Consulting Services
Comments
Now that we have a line of code, let’s enter some comments. After all, some people may want a
bit of an explanation for anything that equates ‘Dave’ with ‘Nice Guy’.
Comments are always preceded by two slashes; ‘//’. You can start them anywhere on the line
(after columns six and seven, of course) and so you can either put your comments above or to the
right of the code.
// Initializing fields.
Eval dave = ‘Nice Guy’;
Eval dave = ‘Nice Guy’;
// An obvious blatant lie.
You can do it either way. It doesn’t matter to me. I mean why should I care? No, live and let
live, that’s my motto. I don’t interfere.
It’s just that I think, based on my own personal preferences and certain divine truths that have
been revealed only to me, that it’s much better to put the comments above. One of the beauties
of /Free is that it makes the code so much more readable, there’s more white space. Putting
comments to the right of it makes it harder to read. Plus the comment lines are so short.
But it really doesn’t matter to me. Do what you damn well please. You will anyway.
Fig 3 - /Free with some comments
Page 6
/Free Tutorial 1
Shirey Consulting Services
The End
At this point I think you should recompile. God help us if you get errors putting in a comment
(although I’ve done it on a couple of occasions but I like to think of myself as an extraordinary
exception).
Done? Congratulations, you are now a /Free programmer. Add it to your resume, ask your boss
for a raise.
What? The IF statement? Oh yeah, you’re right, that might be helpful. OK, if you insist, always
good to know a few advanced /Free functions like the If and the Else and all that. The next
tutorial will look at program logic statements.
Questions or Comments?
For more information on how/Free can help you, contact Shirey Consulting Services at
616-452-6398 or support@shireyllc.com.
Page 7
Download