For what it's worth, in an ongoing project in use:

   #include <QtWidgets>

   #include <iostream>
   #include <sstream>

   #include <apl/libapl.h>

   #include "aplexec.h"

   LIBAPL_error
   AplExec::aplExec (apl_op_e apl_op, QString &cmd,
              QString &outString, QString &errString)
   {
     LIBAPL_error execerr = LAE_NO_ERROR;

     switch(apl_op) {
     case APL_OP_EXEC:
       {
         std::stringstream outbuffer;
         std::streambuf *coutbuf = std::cout.rdbuf();
         std::cout.rdbuf(outbuffer.rdbuf());
         std::stringstream errbuffer;
         std::streambuf *cerrbuf = std::cerr.rdbuf();
         std::cerr.rdbuf(errbuffer.rdbuf());
         execerr = apl_exec (cmd.toStdString ().c_str ());
         std::cout.rdbuf(coutbuf);
         std::cerr.rdbuf(cerrbuf);
         outString = QString (outbuffer.str ().c_str ());
         errString = QString (errbuffer.str ().c_str ());
       }
       break;
     case APL_OP_COMMAND:
       {
         std::stringstream errbuffer;
         std::streambuf *cerrbuf = std::cerr.rdbuf();
         std::cerr.rdbuf(errbuffer.rdbuf());
         const char *res = apl_command (cmd.toStdString ().c_str ());
         if (res) {
           outString = QString (res);
           free ((void *)res);
         }
         std::cerr.rdbuf(cerrbuf);
         errString = QString (errbuffer.str ().c_str ());
       }
       break;
     }

     return execerr;
   }

I.e., I'm capturing stdout and stderr in strings.



On 1/27/23 10:18, Dr. Jürgen Sauermann wrote:
Hi enztec,

not sure if this helps, but if I remember correctly (I may not) then the main GNU APL output goes to *stderr* (fd 2) and not to *stdout* (fd 1). The reason is somewhat historic because *stdout* is buffered by default while *stderr* is not (which caused some issues with *stdout* when used
interactively that did not occur with *stderr*).

Best Regads,
Jürgen


On 1/15/23 12:19 AM, enz...@gmx.com wrote:
Hi

I'm still trying to resolve the failure of fpc using libapl to get it's stdout

trying to get libapl stdout to be gotten in my libapl/fpc program i read the https://gist.github.com/houmei/cfd9e570b8de4d8fd55ada228d5ff004#file-readme-2-configure

thinking fpc might be using a different stdout then the libapl does from this line 'but because the executable that is linked with libapl.so) has its own I/O channels.'

and re-compiled libapl with --with-android
and then compiling my program i get get :

/usr/local/lib/apl/libapl.so: undefined reference to `CIN'
/usr/local/lib/apl/libapl.so: undefined reference to `UERR'
/usr/local/lib/apl/libapl.so: undefined reference to `COUT'
/usr/local/lib/apl/libapl.so: undefined reference to `CERR'

is this suppose to happen ?

i get same error when compiling my libaplo.c program

how to set these in the c program?





Attachment: OpenPGP_0xDA6C01938888083E.asc
Description: OpenPGP public key

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to