|
A while back I had a question about this recently I can across a good
example of how to use this api
So here it is
Any message that is not sent as an *ESCAPE, *STATUS, or *NOTIFY message
can be sent as an impromptu message, Russell. Here's a short program you
can play with. The display file is the JKL001D file from the March 29,
2002, "Odds and Ends" column.
A DSPSIZ(24 80 *DS3)
A R FORMAT01
A CA03(03)
A OVERLAY
A 1 31'Generate Some Report'
A 1 72DATE
A EDTCDE(Y)
A 2 72TIME
A 5 8'Enter range of dates in MMDDYY
for-
A mat. You may leave ending date'
A 6 8'blank if the report is to be run
f-
A or only one day.'
A 8 8'Beginning date
...................-
A ...........:'
A SBGNDATE 6Y 0B 8 55EDTCDE(4)
A 9 8'Ending date
......................-
A ...........:'
A SENDDATE 6Y 0B 9 55EDTCDE(4)
A 22 6'F3=Cancel request'
A 22 27'Enter=Generate report'
A
A R MSGSFL SFL
A SFLMSGRCD(24)
A MSGKEY SFLMSGKEY
A PGMNAM SFLPGMQ
A
A R MSGCTL SFLCTL(MSGSFL)
A SFLSIZ(0010)
A SFLPAG(0001)
A OVERLAY
A SFLDSP
A SFLDSPCTL
A SFLINZ
A N87 SFLEND
A PGMNAM SFLPGMQ(10)
Notice the SFLPGMQ keywords in both the subfile and subfile control
formats. I attached the field name PGMNAM to both of them. (This is a
habit from my RPG III days, when the maximum allowable length of
variable names was six characters.) This variable gets its value from
the program status data structure of the RPG program.
Here's the RPG source code. I compiled it with Create Bound RPG Program
(CRTBNDRPG) command to run in the default activation group. I only
included one test for an error--in a production environment, there would
be more, of course.
FJKL001D cf e workstn
D Error s n
D ErrorDS ds 16
D BytesProv 10i 0 inz(%size(ErrorDS))
D BytesAvail 10i 0
D ExceptionID 7
D sds
D PgmNam *proc
D
D Msg s 78
D
D SendMsg pr extpgm('QMHSNDPM')
D MsgID 7a const
D MsgF 20a const
D MsgData 30a const
D MsgDataLen 10i 0 const
D MsgType 10a const
D CallStackEnt 10a const
D CallStackCtr 10i 0 const
D MsgKey 4a const
D Error like(ErrorDS)
D ClrMsgQ pr extpgm('QMHRMVPM')
D MsgQueue 276a const
D CallStack 10i 0 const
D MsgKey 4a const
D MsgRmv 10a const
D Error like(ErrorDS)
/free
dow '0' = '0';
exfmt format01;
// clear msg subfile
callp ClrMsgQ ('*': *zero: *blanks: '*ALL': ErrorDS);
if *in03;
leave;
endif;
// ++++++++ calcs to verify data go here ++++++++
error = *off;
if (sbgndate = *zero);
error = *on;
msg = 'Beginning date must not be blank.';
endif;
// ----------------------------------------------
if not error;
leave;
endif;
callp SendMsg (*blanks: *blanks :
Msg : %size(Msg):
'*INFO': '*':
0: *blanks: ErrorDS);
write msgctl;
enddo;
if not *in03;
// do what needs to be done
endif;
*inlr = *on;
/end-free
-----Original Message-----
From: rpg400-l-bounces+michael.ala=bp.com@xxxxxxxxxxxx
[mailto:rpg400-l-bounces+michael.ala=bp.com@xxxxxxxxxxxx] On Behalf Of
rpg400-l-request@xxxxxxxxxxxx
Sent: Friday, March 18, 2005 2:15 AM
To: rpg400-l@xxxxxxxxxxxx
Subject: RPG400-L Digest, Vol 4, Issue 307
Send RPG400-L mailing list submissions to
rpg400-l@xxxxxxxxxxxx
To subscribe or unsubscribe via the World Wide Web, visit
http://lists.midrange.com/mailman/listinfo/rpg400-l
or, via email, send a message with subject or body 'help' to
rpg400-l-request@xxxxxxxxxxxx
You can reach the person managing the list at
rpg400-l-owner@xxxxxxxxxxxx
When replying, please edit your Subject line so it is more specific than
"Re: Contents of RPG400-L digest..."
Today's Topics:
1. Re: Proper way to die... (Simon Coulter)
2. Data translation question (Paul Jackson)
3. RE: Data translation question (Bob Cozzi)
4. RE: Data translation question (Paul Jackson)
5. RE: Data translation question (Bob Cozzi)
6. comments in rpgle program (kurien)
7. Re: comments in rpgle program (Peter Colpaert)
8. Re: data pointer vs userspace (Scott Klement)
9. RE: data pointer vs userspace (Scott Klement)
----------------------------------------------------------------------
message: 1
date: Fri, 18 Mar 2005 08:35:41 +1100
from: Simon Coulter <shc@xxxxxxxxxxxxxxxxx>
subject: Re: Proper way to die...
On 18/03/2005, at 7:40 AM, Rich Duzenbury wrote:
> I also tried *CTLBDY and *PGMBDY, they work the same as setting the
> call stack entry to the program name, and the call stack count to 1.
> That is, the application doesn't throw an inquiry message, but instead
> a
> CEE9901 INFO message on the message line after the program ends -
> 'Application error. CPF9898 ummonitored by ZZZ_PH at statement *N,
> instruction x'0000'.
Using *PGMBDY is the correct way to do what you want. *CTLBDY appears to
give the same behaviour in this case but may not always do that when you
start messing with activation groups.
I'll bet you are calling this from within PDM. PDM receives the *ESCAPE
message and converts it to *INFO (UIM panels often do the same). Call it
from QCMD or from another program and I think you'll get the effect you
desire.
Regards,
Simon Coulter.
--------------------------------------------------------------------
FlyByNight Software AS/400 Technical Specialists
http://www.flybynight.com.au/
Phone: +61 3 9419 0175 Mobile: +61 0411 091 400 /"\
Fax: +61 3 9419 0175 \ /
X
ASCII Ribbon campaign against HTML E-Mail / \
--------------------------------------------------------------------
------------------------------
message: 2
date: Thu, 17 Mar 2005 13:14:36 -0800
from: Paul Jackson <pjackson@xxxxxxxxxx>
subject: Data translation question
I am calling API QSYRUSRI to get the user profile Home Directory, but
the structure that the info comes back into has the directory name
formatted as CCSID 1200.
I am looking at various API's but am wondering what the consensus seems
to be regarding the best way to translate this data back into human
readable form.
Thanks in advance for any suggestions.
Paul
------------------------------
message: 3
date: Thu, 17 Mar 2005 16:41:34 -0600
from: "Bob Cozzi" <cozzi@xxxxxxxxx>
subject: RE: Data translation question
If you have the RPG xTools, you can use the xLateCCSID subprocedure to
"just do it". If not, you can call a number of different APIs to do the
conversion for you. The one xlateCCSID uses under the covers is iconv().
-Bob Cozzi
www.RPGxTools.com
If everything is under control, you are going too slow.
- Mario Andretti
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Paul Jackson
Sent: Thursday, March 17, 2005 3:15 PM
To: 'RPG400-L@xxxxxxxxxxxx'
Subject: Data translation question
I am calling API QSYRUSRI to get the user profile Home Directory, but
the structure that the info comes back into has the directory name
formatted as CCSID 1200.
I am looking at various API's but am wondering what the consensus seems
to be regarding the best way to translate this data back into human
readable form.
Thanks in advance for any suggestions.
Paul
--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at
http://archive.midrange.com/rpg400-l.
------------------------------
message: 4
date: Thu, 17 Mar 2005 15:43:52 -0800
from: Paul Jackson <pjackson@xxxxxxxxxx>
subject: RE: Data translation question
Thanks Bob,
I was contemplating the iconv() api's also. Do you happen to have
example
usage of these api's? (we don't have xTools)
Thanks
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx]On Behalf Of Bob Cozzi
Sent: Thursday, March 17, 2005 2:42 PM
To: 'RPG programming on the AS400 / iSeries'
Subject: RE: Data translation question
If you have the RPG xTools, you can use the xLateCCSID subprocedure to
"just
do it". If not, you can call a number of different APIs to do the
conversion
for you. The one xlateCCSID uses under the covers is iconv().
-Bob Cozzi
www.RPGxTools.com
If everything is under control, you are going too slow.
- Mario Andretti
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Paul Jackson
Sent: Thursday, March 17, 2005 3:15 PM
To: 'RPG400-L@xxxxxxxxxxxx'
Subject: Data translation question
I am calling API QSYRUSRI to get the user profile Home Directory, but
the
structure that the info comes back into has the directory name formatted
as
CCSID 1200.
I am looking at various API's but am wondering what the consensus seems
to
be regarding the best way to translate this data back into human
readable
form.
Thanks in advance for any suggestions.
Paul
--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.
--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.
------------------------------
message: 5
date: Thu, 17 Mar 2005 20:10:48 -0600
from: "Bob Cozzi" <cozzi@xxxxxxxxx>
subject: RE: Data translation question
I don't think I have any open source that uses iconv() in RPG IV, but
here's
a link to a C example... RPG IV isn't really all that much different
today.
http://www.delorie.com/gnu/docs/glibc/libc_101.html
To use the xTools, do this:
Callp xLateCCSID(szHomeDir : szOutDir : %size(szHomeDir) : 1200 : 0)
This would convert the text from CCSID 1200 in szHOMEDIR to the CCSID of
your job and copy that converted text in to the szOUTDIR field.
-Bob Cozzi
www.RPGxTools.com
If everything is under control, you are going too slow.
- Mario Andretti
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Paul Jackson
Sent: Thursday, March 17, 2005 5:44 PM
To: 'RPG programming on the AS400 / iSeries'
Subject: RE: Data translation question
Thanks Bob,
I was contemplating the iconv() api's also. Do you happen to have
example
usage of these api's? (we don't have xTools)
Thanks
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx]On Behalf Of Bob Cozzi
Sent: Thursday, March 17, 2005 2:42 PM
To: 'RPG programming on the AS400 / iSeries'
Subject: RE: Data translation question
If you have the RPG xTools, you can use the xLateCCSID subprocedure to
"just
do it". If not, you can call a number of different APIs to do the
conversion
for you. The one xlateCCSID uses under the covers is iconv().
-Bob Cozzi
www.RPGxTools.com
If everything is under control, you are going too slow.
- Mario Andretti
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Paul Jackson
Sent: Thursday, March 17, 2005 3:15 PM
To: 'RPG400-L@xxxxxxxxxxxx'
Subject: Data translation question
I am calling API QSYRUSRI to get the user profile Home Directory, but
the
structure that the info comes back into has the directory name formatted
as
CCSID 1200.
I am looking at various API's but am wondering what the consensus seems
to
be regarding the best way to translate this data back into human
readable
form.
Thanks in advance for any suggestions.
Paul
--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.
--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.
--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.
------------------------------
message: 6
date: Fri, 18 Mar 2005 08:52:47 +0530
from: "kurien" <kurien.joseph@xxxxxxxxx>
subject: comments in rpgle program
Hi
I would like to highlight the comments in the RPGLE program so that it
appears in bold. Can you let me know if you are aware of it.
Regards
Joseph
Confidentiality Notice
The information contained in this electronic message and any attachments
to this message are intended
for the exclusive use of the addressee(s) and may contain confidential
or privileged information. If
you are not the intended recipient, please notify the sender at Wipro or
Mailadmin@xxxxxxxxx immediately
and destroy all copies of this message and any attachments.
------------------------------
message: 7
date: Fri, 18 Mar 2005 07:39:59 +0100
from: "Peter Colpaert" <Peter.Colpaert@xxxxxxxxxx>
subject: Re: comments in rpgle program
Joseph,
if you use CODE or WDSCi, the comments will be in a different colour and
easily recognised.
Plus you get all the other advantages these products have to offer.
If you have the compilers, you will also have (or can ask your BP for)
the
client tools.
HTH,
Peter Colpaert
Application Developer
Massive - Kontich, Belgium
-----
Yoda of Borg are we. Futile is resistance, assimilated will you be.
-----
"kurien" <kurien.joseph@xxxxxxxxx>
Sent by: rpg400-l-bounces@xxxxxxxxxxxx
18/03/2005 04:22
Please respond to RPG programming on the AS400 / iSeries
To: <RPG400-L@xxxxxxxxxxxx>
cc:
Subject: comments in rpgle program
Hi
I would like to highlight the comments in the RPGLE program so that it
appears in bold. Can you let me know if you are aware of it.
Regards
Joseph
Confidentiality Notice
The information contained in this electronic message and any attachments
to this message are intended
for the exclusive use of the addressee(s) and may contain confidential
or
privileged information. If
you are not the intended recipient, please notify the sender at Wipro or
Mailadmin@xxxxxxxxx immediately
and destroy all copies of this message and any attachments.
------------------------------
message: 8
date: Fri, 18 Mar 2005 01:03:53 -0600 (CST)
from: Scott Klement <rpg400-l@xxxxxxxxxxxxxxxx>
subject: Re: data pointer vs userspace
> I know I can allocate up to 16mb of memory to a data pointer, and
similar
> sizes on a userspace. BUT what scenarios favour one over the other?
Which is
> fastest to allocate? Which is fastest to reallocate? Which is the most
> flexible? Which is the most stable/reliable/resilient?
User space: Takes longer to create, takes longer to do read/write access
until the optimizer kicks in and speeds things up for you. Auto-extend
is
very quick.
%alloc space: Allocates very quickly, access is very quick unless your
system is hurting for physical RAM. %realloc causes a whole new
allocation
to be created, the data from the original allocation gets copied to the
new one, and the original is deallocated. This copy can end up slowing
you down -- the user space technique is faster if you have to
re-allocate
frequently, since auto-extend does not involve copying your data.
A third alternative is to allocate memory in teraspace. This will be
slightly slower than both of the other alternatives, but has the
advantage
that you're not limited to 16mb.
>
> Finally, I would not expect the memory I allocate to persist once the
> job has finished.
>
Space allocated with %alloc() / %realloc() / teraspace is automatically
deallocated when the activation group ends. Since all activation groups
are destroyed when your job ends, allocated memory never persists past
the
job end.
User spaces can also be forced to be cleaned up when the job ends simply
by creating them in QTEMP.
Another consideration is what happens when your program is called
recursively. With a user space, you'd need to make sure that each
incarnation of your program used a different user space name, or you'll
have problems. That won't be a problem if you use %alloc / teraspace.
If performance is your primary consideration, I'd suggest trying each
method and benchmarking them. The coding difference is relatively minor,
especially if you wrap them up in subprocedures.
------------------------------
message: 9
date: Fri, 18 Mar 2005 01:05:59 -0600 (CST)
from: Scott Klement <rpg400-l@xxxxxxxxxxxxxxxx>
subject: RE: data pointer vs userspace
> The other benefit is, as you pointed out, you don't have to remember
to do
> the DeAlloc and the end of the program, when the job ends, the usrspc
in
> qtemp goes away.
Allocated memory will also automatically go away when the job ends (or
when the activation group ends, if that's sooner.)
------------------------------
--
This is the RPG programming on the AS400 / iSeries (RPG400-L) digest
list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.
End of RPG400-L Digest, Vol 4, Issue 307
****************************************
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.