|
What we did when we had some programmers that were quite anal about large
/copy members that had a bunch of stuff they didn't use, was to bust it
up. Here's a simplistic example:
Original member COPYMBR (Not a real life example, just simplified!)
D MyDate s d
D MyChar s 15a
Became
D/copy qcpysrc,MyDate
D/copy qcpysrc,MyChar
Now, if they wanted everything in COPYMBR they could just include
D/copy qcpysrc,copymbr
and that would get both other members. But if they just wanted one they
could do just
D/copy qcpysrc,MyDate
Now, let's take that to the next level. Let's change all three members.
Now we have
MYDATE
D/define MYDATE
D MyDate s d
MYCHAR
D/define MYCHAR
D MyChar s 15a
COPYMBR
D/if not defined(MYDATE)
D/copy qcpysrc,MyDate
D/endif
D/if not defined(MYCHAR)
D/copy qcpysrc,MyChar
D/endif
Now, let's say we have a program called PGM. At first they had a
D/copy qcpysrc,MyDate
Now, they wanted the whole COPYMBR so they added it, but didn't take out
the first /copy so they have
D/copy qcpysrc,MyDate
D/copy qcpysrc,copymbr
It doesn't copy in MYDATE twice because of the /define. Get it?
I do a LOT of api's. API's traditionally use an error structure. I have
a member called ERRC0100
/Define errc0100
* ERRC0100 - Error code data structure
D ERRC0100 DS
D BytesProvided 10I 0 INZ(%len(errc0100))
D BytesAvail 10I 0
D ExceptionId 7A
D Reserved1 1A
D ExceptData 250A
D ERRC0100P S LIKE(ERRC0100)
Then one of my api members is called QCLRDTAQ. It looks like
/Define qclrdtaq
* Clear data from a data queue.
D qclrdtaq PR EXTPGM('QCLRDTAQ')
D DataQue 10A CONST
D DataQueLib 10A CONST
* Optional Parameter Group 1
D KeyOrder 2A CONST OPTIONS(*NOPASS)
D KeyLength 3P 0 CONST OPTIONS(*NOPASS)
D KeyData 200A CONST OPTIONS(*NOPASS:*VARSIZE)
D ErrorCode OPTIONS(*NOPASS:*VARSIZE)
D LIKE(ERRC0100P)
D qclrdtaqEr ds likeds(errc0100) INZ(*LIKEDS)
/If not defined(errc0100)
/INCLUDE ROUTINES/QAPISRC,ERRC0100
/EndIf
Rob Berendt
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 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].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.