QString is mmore or less equivalent to the C++ std::string class.

On 1/27/23 18:00, enz...@gmx.com wrote:
what do i replace all the qstring with

/apl/libapl/c > grepi qstring

./aplexec.h:18:aplExec (apl_op_e apl_op, QString &cmd,
./aplexec.h:19:QString &outString, QString &errString);
./libaplc.c:12:AplExec::aplExec (apl_op_e apl_op, QString &cmd,
./libaplc.c:13:QString &outString, QString &errString)
./libaplc.c:29:outString = QString (outbuffer.str ().c_str ());
./libaplc.c:30:errString = QString (errbuffer.str ().c_str ());
./libaplc.c:40:outString = QString (res);
./libaplc.c:44:errString = QString (errbuffer.str ().c_str ());


On Fri, 27 Jan 2023 17:18:01 -0500
Chris Moller<mol...@mollerware.com>  wrote:

Qt isn't necessary--that's just the environment I'm working in.  From my
example, get rid of the #include <QtWidgets>line.

Here's aplexec.h:

     #ifndef APLEXEC_H
     #define APLEXEC_H

     #include <QtWidgets>
     #include <apl/libapl.h>

     #define APL_VARIABLE "([⍙∆a-z][⍙∆_a-z0-9]*)"

     typedef enum {
       APL_OP_EXEC,
       APL_OP_COMMAND
     } apl_op_e;

     class AplExec
     {
     public:
       static LIBAPL_error
       aplExec (apl_op_e apl_op, QString &cmd,
                QString &outString, QString &errString);
     };
     #endif // APLEEXEC_H



Again, you don't need the Qt stuff.  Mostly, what you need is the

     #include <apl/libapl.h>

line.  And you probably don't need the #define APL_VARIABLE
"([⍙∆a-z][⍙∆_a-z0-9]*)" line

For this to work at all, you need to build Jürgen's APL twice, once as
usual to install apl itself, and a second time with

     ./configure --with-libapl
     make install

(with any other options you need on the configure)

What this does is put apl-related stuff in /usr/local/include and
/usr/local/lib.  (I think I manually copied Error.def from the apl
source tree into /usr/local/include--I don't think it gets copied with
the make install.)

On 1/27/23 16:28,enz...@gmx.com  wrote:
Chris

i don't have qt installed nor do i have your
#include "aplexec.h"

On Fri, 27 Jan 2023 11:23:08 -0500
Chris Moller<mol...@mollerware.com>   wrote:

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.

Attachment: OpenPGP_0xDA6C01938888083E.asc
Description: OpenPGP public key

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to