|
I find it easier to just tack on a NULL in the CL. That way I don't
have to make the C procedure CL centric.
DCL VAR(&NULL) TYPE(*CHAR) LEN(1) VALUE(X'00')
CHGVAR VAR(&STRING) VALUE(&STRING |< &NULL)
-- OR --
CHGVAR VAR(&STRING) VALUE('what ever you want' |< &NULL)
-- OR --
SOMECMD VAR('TEXT' |< &NULL) - Assuming the command allows expressions
If you are going to go to the effort of using a C function, why pad with
NULL? If you know the length just use this:
char c_str[max_size];
memcpy(c_str, cl_str, len);
c_str[len] = '\0';
8< - - -
If you want to return an int result to CL, you need to make a procedure
call, not a program call. This means your CL must be CLLE. Declare a 4
character variable named &RTNVAL and use CALLPRC PRC(C_PGM) PARAM(&PARM)
RTNVAL(%BIN(&RTNVAL)), then test %BIN(&RTNVAL) or move it to an *DEC. I
have not tried to return a string, I don't know if the return value is
done by reference or value.
C could write EBCDIC to a DB/2 file and CL can open and read that. You
could also use a *DTAQ or *DTAARA via an API and CL can read either of
those just also.
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.