Actually, I'm using a prototype Scott Klement had a prototype
available. It matches Cozzi's.

As far as not using 'move' mode. I'm subborn :) I didn't want to
move the data in the Read procedure as I've got another set up do do
the move...

Here's some code:

dow RecordFileReadNext(recordFile : bytesRead);
SetTriggerBufferRecordImages(recordFile
: triggerBuffer);

TriggerProgram(triggerBuffer
: triggerBufferLength
: *ON);
cnt += 1;
if cnt >= RECORDS_PER_BATCH;
CommitSQL();
cnt = 0;
endif;
enddo;

p RecordFileReadNext...
p b
d RecordFileReadNext...
d pi n
d recFile likeds(rfile_t)
d bytesRead like(t_Int4)

d error ds likeds(t_Exception) inz
d recInfo ds likeds(RIOFB_t) based(p_recInfo)
d p_recInfo s *

/free
p_recInfo = Rreadn(recFile : *OMIT : 0 : r_DFT);
bytesRead = recInfo.num_bytes;
if bytesRead <> EOF
and bytesRead <> recFile.buf_length;
cruntimePtrToErrNbr = GetErrNbr();
error.msgData = 'Rreadn failed - errno: '
+ %char(cruntimeErrNbr);
Msg_Throw(error);
endif;
return (bytesRead <> EOF);
/end-free
p RecordFileReadNext...
p e

p SetTriggerBufferRecordImages...
p b
d SetTriggerBufferRecordImages...
d pi
d recFile likeds(rfile_t)
d trgBuff likeds(triggerBuffer)

d error ds likeds(t_Exception) inz
d p_OrigRec s *
d p_NewRec s *
d p_InBuff s * based(p_p_InBuff)
d p_p_InBuff s *
/free
trgBuff.header.RelRecNbr = recFile.riofb.rrn;

p_OrigRec = %addr(trgBuff) + trgBuff.header.OriginalRecord.offset;
p_NewRec = %addr(trgBuff) + trgBuff.header.NewRecord.offset;

// We're going to use memmove() as it is the absolute fastest
// way to copy bytes from one buffer to another
p_p_InBuff = recFile.in_buf;
MemMove(p_OrigRec : p_InBuff : recFile.buf_length);
MemMove(p_NewRec : p_InBuff : recFile.buf_length);

return;
/end-free
p SetTriggerBufferRecordImages...
p e


On Wed, Sep 24, 2008 at 4:58 PM, Elvis Budimlic
<ebudimlic@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
Don't know about RPG, but when you mentioned buf_length earlier I searched
on it and this was one of the hits:

http://www.rpgiv.com/cgi-rpg/viewsrc?FILE=QCPYSRC&LIB=RPGCODER&MBR=RECIO

It's Cozzy's so it ought to be good.

That said, if you're going to move it anyway, why not use the 'move' mode,
instead of 'locate'?
I realize locate performs slightly better, but perhaps that doesn't really
matter in a grand scheme of things.

Hth, Elvis

Celebrating 11-Years of SQL Performance Excellence on IBM i, i5/OS and
OS/400
www.centerfieldtechnology.com


-----Original Message-----
Subject: Re: [C400-L] Question about _Rreadn C function

Ok another issue.

When I try to copy the data out of the buffer, I get garbage.

I think perhaps my RPG prototype isn't right or I'm not using it right.

here's part of the C structure definition for _RFILE:
volatile void *const *const in_buf;
volatile void *const *const out_buf;

Here's the RPG DS definition I'm using:
D in_buf *
D out_buf *

I was trying to use in_buf like so:
MemMove(fileFile.inbuf : myBuffer : 114)

Which apparently isn't right.

Is there a way to use _RFILE.in_buf in RPG?

Thanks!
Charles Wilt


--
This is the C programming iSeries / AS400 (C400-L) mailing list
To post a message email: C400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/c400-l
or email: C400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/c400-l.



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 here. If you have questions about this, please contact [javascript protected email address].