I Saw the Light
I have changed my mind again on this matter of using the RPGIII style of calling external programs instead of subprocedures, modules, service programs and all that sort of stuff. I am beginning to “see the light” about updating my coding style.
I don’t know why, but just out of the blue I started to mess around with the service program concept. I must have 15 or 20 variations on date conversion routines: GTOJ for MMDDYY to Julian, ISOTODOW for inputting an ISO date (CCYYMMDD) and outputting the day of the week, and ISOTOVBG for inputting ISO and outputting a spelled-out date (in the format September 30, 2010) are just a few of them. Somehow I guess I felt that there was a natural grouping evident there that ought to be respected.
So anyway, I began exploring service programs a bit more. I think my main objection to modules was the fact that compilation would be a three-step process- compiling the two modules separately with CRTRPGMOD, then using CRTPGM to create the final program. I considered this to be an incredible nuisance. But I pressed on and put all my date modules into one service program. I then discovered that there was a way in the header specifications to use a “binding directory” to join the main program to modules. I found out how to put service programs into a binding directory, then reference the modules from there.
The final step was freeing myself from a misconception about the use of service programs. The article I was using for reference only referred to the use of CRTPGM. I found, though, that once the binding directory reference was inserted into the H spec, I could use CRTBNDRPG, just like I always do, so it could be a one-step compilation again. This was important beyond simple ease of use, because a number of other programs I had written, including my file/program cross-reference system, provided for recompilation of programs when requested. Before, the few programs that had external subprocedures always bombed on the CRTBNDRPG compile, and I could think of no easy way to create the proper CRTRPGMOD/CRTPGM combinations automatically. That is partly why I had retained the old CALL/PARM syntax, so I would not have to deal with that issue. Now, my problem has been solved.
So maybe there is hope for me yet.
November 22nd, 2010 at 11:28 am
Yes, the client programs can be compiled with PDM option 14 if you have H BNDDIR(…) which was imperative for me because not everyone here (or my prior employer) is familiar with service programs, etc. You’ll still have to do a two step to create the service program. I strongly advise two things:
1) Create a MAKE-like CL program to re-create the service program
2) Use a simple binder language signature of your own creation, like SIGNATURE(’MYCOMPANY’)
November 22nd, 2010 at 12:18 pm
I prefer a signature of ‘SRVPGMNAMEV99′ where the ‘V99′ is used when I want to change the interface of one of the procedures. I don’t do it very often at all, but when I do, it gives me a simple way force a signature violation if something doesn’t get recompiled for whatever reason.