Oppolzer - Informatik / Blog


Blog-Hauptseite      Neuester Artikel      Älterer Artikel      Neuerer Artikel      Älterer gleiche Kategorie      Neuerer gleiche Kategorie

PL1-L - Parameterübergabe von PL/1 an C

Subject:

Re: Passing parameters to C

From:

Bernd Oppolzer <bernd.oppolzer@T-ONLINE.DE>

Reply-To:

PL1 (language) discussions <PL1-L@LISTSERV.DARTMOUTH.EDU>

Date:

2014.03.23 23:09:15


On 03/23/2014 06:28 PM, Bernd Oppolzer wrote:
>
> The glue functions have to do the transformation of the PL/1 compatible
> interface to the original interface of the C library.

I think all the argument twiddling could be done in the C program
(caller or callee) assuming you're willing to accept changes to the C code.

...
>
> With the problem of NUL-terminated strings, you have to make a decision;
> either PL/1 or C has to accept the logic of the other side. If the PL/1 side
> wants the strings to be filled with blanks and have no NULL termination;
> C can cope with this (but you have to take care, if you want to use some
> of ther str... functions, anyway). If you want the strings to have nulls, you
> have some troubles on the PL/1 side ... with old compilers, the new
> ones have CHAR (x) VARZ, which is one of the nicest things if you
> have to deal with C functions from PL/1 callers.

On the other hand this is (mostly) easily handled by PL/I.  A PL/I
program passing a (nonassignable) string argument to a C function can
just pass the argument as the expression ('string' || '00'x).

[To digress a bit, Iron Spring PL/I has the procedure and entry option
LINKAGE(SYSTEM) - borrowed from OS/2 PL/I - to generate C-compatible
calls and entries.  I haven't yet implemented the new(ish) options like
BYVALUE, etc., but I have found I can do everything I need using this.]
...
>
> Kind regards
>
> Bernd
>
> Am 23.03.2014 21:44, schrieb S.H.:
>>
>> One thing you can do to alleviate a bit of pain is to have parallel PL/I and C
>> include files that declare such things as array dimensions and string lengths,
>> to avoid the trap of parallel maintenance.  You could even do a script that
>> would generate both from a common source, and make that a step in the build
>> script.

S. - here I'm not on as sure ground, but I used to generate
dual-language PL/I and ASM  include files using logic stolen from IBM's
PL/S and ASM macros.  I think you could do the same with PL/I and C.
For example having the PL/I left margin start at 4 you could code the
PL/I definition first surrounded by '/*' in columns 2 and 3 to make them
comments for C.  At the end the PL/I code could %GOTO the end, the %GOTO
followed by the C code.

What we really need is SDL (like your script) to maintain a set of
language-independent definitions and then generate both the C and PL/I
declarations.  Oh well, someday.

Blog-Hauptseite      Neuester Artikel      Älterer Artikel      Neuerer Artikel      Älterer gleiche Kategorie      Neuerer gleiche Kategorie