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 17:47:05 -0700

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 <moller@mollerware.com> wrote:

> QString is mmore or less equivalent to the C++ std::string class.
> 
> On 1/27/23 18:00, enztec@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<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]