bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-apl] using c libs in apl?


From: Juergen Sauermann
Subject: Re: [Bug-apl] using c libs in apl?
Date: Tue, 7 Feb 2017 19:52:23 +0100
User-agent: Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Thunderbird/45.2.0

Hi Xiao-Yong,

I believe this could be achieved by a single "master"-native function which then loads the
actual DLL as specified by the arguments of the master function. Referring to the example in
link you gave below:

   a=: 'kernel32 GetProfileStringA s *c *c *c *c s'
   b=: 'windows';'device'; 'default'; (32$'z');32
   a cd b
+--+-------+------+-------+--------------------------------+--+
|31|windows|device|default|HP LaserJet 4P/4MP,HPPCL5MS,LPT |32|
+--+-------+------+-------+--------------------------------+--+


This would become in GNU APL:


   a← 'kernel32 GetProfileStringA s *c *c *c *c s'
   b← 'windows' 'device' 'default' (32⍴'z') 32

   'universal-dll-loader' ⎕FX 'cd'

  a cd b  ⍝ dlopen("kernel32.dll"), dlsym("GetProfileStringA") on first access,
          ⍝ and call GetProfileStringA with argument b


The universal-dll-loader.so needs to be written only once and contains mainly the code from github below.
That code somehow goes into the native/template_F12.cc code of GNU APL and thats it.

If you need help doing this then please let me know.

/// Jürgen


On 02/07/2017 06:30 PM, Xiao-Yong Jin wrote:
It would be nice if one doesn't need to write wrappers and the APL system can do the
structure conversions within the APL interpreter.  In J, you can dlopen a library
and pass J values directly without writing and compiling C, see

  http://www.jsoftware.com/help/user/call_procedure.htm

and the relevant code is at

  https://github.com/jsoftware/jsource/blob/master/jsrc/x15.c

It would simplify using external libraries a lot.

On Feb 4, 2017, at 7:38 AM, Juergen Sauermann <address@hidden> wrote:

Hi,

yes there is: native functions. You can load shared libraries and ⎕FX functions in
them to be called from APL code. The src/native directory contains a few templates
that you can use as a starting point and to call your favourite library from them.

Of course you need to provide wrappers from/to APL values to/from the data
structures expected or produced by the libraries.

Coming back to your other problems, if you do not like the terminal I/O of GNU APL, then
you can write your own one and call libapl from it. I have extended libapl recently, giving
you the full functionality of GNU APL without the specific ways how it handles terminal IO.

/// Jürgen


On 02/04/2017 02:52 AM, address@hidden wrote:
is there method for loading a c lib and using it in apl ?  cdecl?   like this in fpc?


ftp://ftp.freepascal.org/fpc/docs-pdf/CinFreePascal.pdf
 





      



reply via email to

[Prev in Thread] Current Thread [Next in Thread]