bug-apl
[Top][All Lists]
Advanced

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

Re: libapl stdout


From: enztec
Subject: Re: libapl stdout
Date: Fri, 27 Jan 2023 16:00:05 -0700

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.
> >
> 



reply via email to

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