/*
This file is part of GNU APL, a free implementation of the
ISO/IEC Standard 13751, "Programming Language APL, Extended"
Copyright (C) 2018-2019 Dr. Jürgen Sauermann
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#ifndef __Quad_PLOT_DEFINED__
#define __Quad_PLOT_DEFINED__
#include
#include
#include
#include
#include "QuadFunction.hh"
#include "Value.hh"
class Plot_window_properties;
class Plot_data;
/// The class implementing ⎕PLOT
class Quad_PLOT : public QuadFunction
{
public:
/// Constructor.
Quad_PLOT();
/// Denstructor.
~Quad_PLOT();
static Quad_PLOT * fun; ///< Built-in function.
static Quad_PLOT _fun; ///< Built-in function.
/// a semaphore protecting plot_threads
static sem_t * plot_threads_sema;
/// an array of threads (one per plot window) handling X events from the
/// window
static std::vector plot_threads;
protected:
/// overloaded Function::eval_AB()
Token eval_AB(Value_P A, Value_P B);
/// overloaded Function::eval_B()
Token eval_B(Value_P B);
/// print attribute help text
void help() const;
/// plot the data (creating a new plot window in X)
Value_P plot_data(Plot_window_properties * w_props,
const Plot_data * data);
/// initialize the data to be plotted
Plot_data * setup_data(const Value * B);
/// whether to print some debug info during plotting
int verbosity;
};
#endif // __Quad_PLOT_DEFINED__