× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Ok looks like my suspicions where correct, I need something like so:

d p_Ptr * based(p_p_Ptr)
d p_p_Ptr *

p_p_Ptr = recFile.in_buff;

MemMove(myBuff : p_Ptr : 114);

Charles

On Wed, Sep 24, 2008 at 4:51 PM, Charles Wilt <charles.wilt@xxxxxxxxx> wrote:
Sorry, mixed up source and destination....

should be:
MemMove(myBuffer : recFile.in_buf : 114);

The code is correct <grin>

Charles

On Wed, Sep 24, 2008 at 4:50 PM, Charles Wilt <charles.wilt@xxxxxxxxx> wrote:
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

On Wed, Sep 24, 2008 at 11:02 AM, Charles Wilt <charles.wilt@xxxxxxxxx> wrote:
All,

I'm calling the _Rread() C function from RPG (thus the cross-posting).

_RIOFB_T *_Rreadn (_RFILE *fp, void *buf, size_t size, int opts)

I'm trying to use the "locate mode" of the function by not passing the
void *buf parameter as I want to move the buffer myself ( via
fp->in_buf) in a later procedure.

However, my question: how can I determine if an error occurred?
According to the manual:

"If attempts are made to read beyond the last record in the file, the
num_bytes field is set to EOF. If it is unsuccessful, the num_bytes
field is set to a value less than size, and errno is changed. If you
are using device files and specify zero as the size, check errno to
determine if the function was successful."

But when in "locate mode" the manual says:
"size Specifies the number of bytes that are to be read and stored in
buf. If locate mode is used, this parameter is ignored."

So I can still detect EOF, but what about other errors?

Thanks!
Charles Wilt




As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

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

This mailing list archive is Copyright 1997-2024 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.