All of the code below is in the C++ language and std::string is a very basic bit of C++.  If you're not familiar with C++, the string class, stringstream, stringbuf, and so on, the first thing you need to do is get some experience in C++.

There is no direct replacement for QString, but std::string is close.  See:

   https://cplusplus.com/reference/string/string/


On 1/27/23 19:47, enz...@gmx.com wrote:
sorry that means nothing to me as to what to replace the qstring below with


On Fri, 27 Jan 2023 19:38:51 -0500
Chris Moller<mol...@mollerware.com>  wrote:

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