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<moller@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,enztec@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<moller@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.