Think "signatures", and that is why you need binder source. For example,
let's say you create a service program. Then you create a program that
uses that service program. If you do a
DSPPGM PGM(library/program) DETAIL(*SRVPGM)
on the program you will see something like:
Service
Program Library Activation Signature
SRVPGM ROUTINES *IMMED D4BB63A7B4B4913D5335E198295018B8

This will match what you see when you do a
DSPSRVPGM SRVPGM(library/ServiceProgram) DETAIL(*SIGNATURE)

Now, let's say you add another export to library/ServiceProgram. If you
repeat the DSPSRVPGM on the *SRVPGM you will see that the signature do not
match with what's in the *PGM. If you do not recompile the *PGM you will
get something akin to a "record format level check" only it will pertain
to the signature.

Now if you add the exports in an orderly fashion and you use binder
language, the *SRVPGM can have multiple signatures. Like this:
Signatures:
A5AE6D8F472C4062A3B65BB050DA6E4A
4A5AE6D8F472C409BC1E294E76E16998
34A5AE6D8F472D319E34B65869F1E82D
A34A5AE6DAD855760BC72D475940D126
4A34A5AE6DAD855760BF26880847F0E4
49D4A34A5AE6D049BA18DEB5EB4FF53E
B49D4A34A5AE60E85D74405E3288A2D7
4B49D4A34A5AE60E85DB27C8C6FC3DA1
D4BB63A7B4B4913D5335E198295018B8
C5D4BB63A7B4B4913D5338554A272DE9
More...

And no recompiling of the *PGM's are necessary.

See this sample binder source:
... (notice the three dots? I'll talk about the beginning later)
STRPGMEXP PGMLVL(*PRV) LVLCHK(*YES) SIGNATURE(*GEN)
/********************************************************************/
/* *MODULE SRVPGM ROUTINES 03/30/00 10:54:11 */
/********************************************************************/
EXPORT SYMBOL("ADDDAYS")
EXPORT SYMBOL("CENTER40")
EXPORT SYMBOL("CHECKPRF")
EXPORT SYMBOL("COMPANYNAME")
EXPORT SYMBOL("DATEEDIT")
EXPORT SYMBOL("DAYNAMEL")
EXPORT SYMBOL("DAYNAMES")
EXPORT SYMBOL("DAYOFWEEK")
EXPORT SYMBOL("DAYSDIFF")
EXPORT SYMBOL("EXECCMD")
EXPORT SYMBOL("STRNETSVRP")
EXPORT SYMBOL("RUNCMDAPI")
ENDPGMEXP
STRPGMEXP PGMLVL(*PRV) LVLCHK(*YES) SIGNATURE(*GEN)
/********************************************************************/
/* *MODULE SRVPGM ROUTINES 03/30/00 10:54:11 */
/********************************************************************/
EXPORT SYMBOL("ADDDAYS")
EXPORT SYMBOL("CENTER40")
EXPORT SYMBOL("CHECKPRF")
EXPORT SYMBOL("COMPANYNAME")
EXPORT SYMBOL("DATEEDIT")
EXPORT SYMBOL("DAYNAMEL")
EXPORT SYMBOL("DAYNAMES")
EXPORT SYMBOL("DAYOFWEEK")
EXPORT SYMBOL("DAYSDIFF")
EXPORT SYMBOL("EXECCMD")
EXPORT SYMBOL("STRNETSVRP")
ENDPGMEXP

Back to the beginning...
I now have lots of exports. The first line is
STRPGMEXP PGMLVL(*CURRENT) LVLCHK(*YES) SIGNATURE(*GEN)
Notice PGMLVL(*CURRENT) versus (*PRV)?

Actually binder source is very easy. It's so easy that it took me three
sessions at COMMON to understand just how simple it was. Hence Jon's
signature in my "Who Knew ..." redbook: "I thought you knew this stuff
already!".

If you are a vendor you can get fancy and use SIGNATURE(V1.0.0) and so on.
Keep in mind though that if V1.0.0 is not just the version of the *SRVPGM
but a version of your whole release it's probably a bad idea. Why? Let's
say that in 1.0.0 you create the service program, give it 1.0.0. Create
20 *PGM's that use it. Now you add a couple of more exports to *SRVPGM
and create some more *PGMs that use it. Now 1.0.0 is ready to ship. What
are you going to do for the signature? Have v1.0.0 and v1.0.0.01,
v1.0.0.02 and so on?


Rob Berendt

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2019 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].