× 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.



If you are referring to the rdline() routine from the socket tutorial (I guess that's what you're referring to... took me about 30 mins to figure that out... I wrote that routine 12 years ago, and have scarcely looked at it since.) then, no, it does not work with VARYING fields. At least not *directly*.

You could make it work by doing something like this:

D VARPREF C CONST(2)

%len(Input_String) = %size(Input_String) - VARPREF;
len = RdLine( cli
: %addr(Input_String) + VARPREF
: %len(Input_String)
: *On );
if (len < 1);
%len(Input_String) = 0;
else;
%len(Input_String) = len;
endif;

All this does is set the length of the input_string to it's maximum length, then get the address of the data portion of the VARYING field (by adding 2 to the start, skipping the length bytes). Then when it's done, setting the length to the proper length for what was received.

Cumbersome, yes... but you can package it into a subprocedure called "rdlinev" or something, so you only have to code it once.

Though, personally, I'd suggest eliminating rdline as it's extremely inefficient.


GKern@xxxxxxxxxxxxxxxx wrote:
I have the following code in which I encounter two problems. First when viewing the Input_String variable in debug, only the last 54 bytes are shown - the first two are truncated. (The string sent contains 56 bytes). The debugger monitor says the field is 56 bytes, as does the dump listing. Second the "If %Len(Input_String) < 1 Or %Len(Input_String) > 56;" triggers an RNX0115 (Length of varying length variable is out of range). Does Rdline not work with a variable length field? (The RdLine code is from Scott Klements tutorial.)

D Input_String S 56A Varying
If RdLine(cli: %addr(Input_String):56:*On) < 0;
Callp Die('Error calling RdLine()');
Callp close(cli);
Return;
Endif;

If %Len(Input_String) < 1 Or %Len(Input_String) > 56;
Error = Yes;
Return_String = %Trim(Return_String) + Error00;
LeaveSr;
EndIf;
Thanks!

Regards, Jerry

Gerald Kern - MIS Project Leader
Lotus Notes/Domino Administrator
IBM Certified RPG IV Developer
The Toledo Clinic, Inc.
4235 Secor Road
Toledo, OH 43623-4299
Phone 419-479-5535
gkern@xxxxxxxxxxxxxxxx


This e-mail message, including any attachments, is for the sole use of the intended recipient(s) and may contain confidential and privileged information. Any unauthorized use, disclosure or distribution is prohibited. If you are not the intended recipient, please inform the sender by reply e-mail and destroy this and all copies of this message.


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.