|
On Mon, 4 Dec 2000, Jim Langston wrote:
> Please give me an example of a procedural pointer's use. Or reference to
> where I can read about them.
>
> Regards,
> Jim Langston
Here's an example that I dreamed up of using a procedure pointer.
Hopefully this illustrates their use fairly well :)
(The only places that I've used procptr's in the past have been VERY
complex programs, and wouldnt make good examples...)
Let me know if it makes sense :)
** Procedure Pointer Example
**
** This example illustrates a dynamic decision of how to display
** a program's status messages to a user, or to the job log in
** case we wanted to be a batch program.
**
**
D p_ShowProc S * ProcPtr
D ShowMsg PR ExtProc(p_ShowProc)
D Msg 50A const
D StatMsg PR
D Msg 50A const
D DiagMsg PR
D Msg 50A const
D DsplyMsg PR
D Msg 50A const
D* API error code data structure
D dsEC DS
D dsECBytesP 1 4B 0 INZ(256)
D dsECBytesA 5 8B 0 INZ(0)
D dsECMsgID 9 15
D dsECReserv 16 16
D dsECMsgDta 17 256
D SndPgmMsg PR ExtPgm('QMHSNDPM')
D MessageID 7A Const
D QualMsgF 20A Const
D MsgData 32766A options(*varsize) const
D MsgDtaLen 10I 0 Const
D MsgType 10A Const
D CallStkEnt 10A Const
D CallStkCnt 10I 0 Const
D MessageKey 4A
D ErrorCode 32766A options(*varsize)
** Normally, the users preference of how they want their messages
** displayed would come from a file containing user prefs, but
** to make the example simple, I'm just using a parm:
**
C *entry plist
c parm MsgType 7
c select
c when MsgType = '*STATUS'
c eval p_ShowProc = %paddr('STATMSG')
c when MsgType = '*DIAG'
c eval p_ShowProc = %paddr('DIAGMSG')
c when MsgType = '*DSPLY'
c eval p_ShowProc = %paddr('DSPLYMSG')
c endsl
** Now you might have many, many lines of code, with occasional
** messages back to the user here and there... of course, to
** keep the example simple, I'm just going to send a simple
** test message, here... :)
c callp ShowMsg('This is a test message.')
c eval *inlr = *on
P*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
P* This displays a message as a '*STATUS' message...
P*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
P StatMsg B export
D StatMsg PI
D Msg 50A const
D MsgKey S 4A
c callp SndPgmMsg('CPF9897': 'QCPFMSG *LIBL':
c Msg: 50: '*STATUS': '*EXT': 0: MsgKey:
c dsEC)
P E
P*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
P* This puts a diagnostic message into the job log
P*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
P DiagMsg B export
D DiagMsg PI
D Msg 50A Const
D MsgKey S 4A
c callp SndPgmMsg('CPF9897': 'QCPFMSG *LIBL':
c Msg: 50: '*DIAG': '*': 0: MsgKey: dsEC)
P E
P*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
P* This shows a message using RPG's DSPLY op-code
P*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
P DsplyMsg B export
D DsplyMsg PI
D Msg 50A Const
c Msg dsply
P E
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---
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.