view libinterp/interpfcn/pager.h @ 15195:2fc554ffbc28

split libinterp from src * libinterp: New directory. Move all files from src directory here except Makefile.am, main.cc, main-cli.cc, mkoctfile.in.cc, mkoctfilr.in.sh, octave-config.in.cc, octave-config.in.sh. * libinterp/Makefile.am: New file, extracted from src/Makefile.am. * src/Makefile.am: Delete everything except targets and definitions needed to build and link main and utility programs. * Makefile.am (SUBDIRS): Include libinterp in the list. * autogen.sh: Run config-module.sh in libinterp/dldfcn directory, not src/dldfcn directory. * configure.ac (AC_CONFIG_SRCDIR): Use libinterp/octave.cc, not src/octave.cc. (DL_LDFLAGS, LIBOCTINTERP): Use libinterp, not src. (AC_CONFIG_FILES): Include libinterp/Makefile in the list. * find-docstring-files.sh: Look in libinterp, not src. * gui/src/Makefile.am (liboctgui_la_CPPFLAGS): Find header files in libinterp, not src.
author John W. Eaton <jwe@octave.org>
date Sat, 18 Aug 2012 16:23:39 -0400
parents src/interpfcn/pager.h@60ff2cef569d
children
line wrap: on
line source

/*

Copyright (C) 1993-2012 John W. Eaton

This file is part of Octave.

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

Octave 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 Octave; see the file COPYING.  If not, see
<http://www.gnu.org/licenses/>.

*/

#if !defined (octave_pager_h)
#define octave_pager_h 1

#include <iosfwd>
#include <sstream>
#include <string>

#include <sys/types.h>

class
OCTINTERP_API
octave_pager_buf : public std::stringbuf
{
public:

  octave_pager_buf (void) : std::stringbuf (), diary_skip (0) { }

  void flush_current_contents_to_diary (void);

  void set_diary_skip (void);

protected:

  int sync (void);

private:

  size_t diary_skip;
};

class
OCTINTERP_API
octave_pager_stream : public std::ostream
{
protected:

  octave_pager_stream (void);

public:

  ~octave_pager_stream (void);

  static void flush_current_contents_to_diary (void);

  static void set_diary_skip (void);

  static std::ostream& stream (void);

  static void reset (void);

private:

  void do_flush_current_contents_to_diary (void);

  void do_set_diary_skip (void);

  void do_reset (void);

  static octave_pager_stream *instance;

  static bool instance_ok (void);

  static void cleanup_instance (void) { delete instance; instance = 0; }

  octave_pager_buf *pb;

  // No copying!

  octave_pager_stream (const octave_pager_stream&);

  octave_pager_stream& operator = (const octave_pager_stream&);
};

class
OCTINTERP_API
octave_diary_buf : public std::stringbuf
{
public:

  octave_diary_buf (void) : std::stringbuf () { }

protected:

  int sync (void);
};

class
OCTINTERP_API
octave_diary_stream : public std::ostream
{
protected:

  octave_diary_stream (void);

public:

  ~octave_diary_stream (void);

  static std::ostream& stream (void);

  static void reset (void);

private:

  void do_reset (void);

  static octave_diary_stream *instance;

  static bool instance_ok (void);

  static void cleanup_instance (void) { delete instance; instance = 0; }

  octave_diary_buf *db;

  // No copying!

  octave_diary_stream (const octave_diary_stream&);

  octave_diary_stream& operator = (const octave_diary_stream&);
};

#define octave_stdout (octave_pager_stream::stream ())

#define octave_diary (octave_diary_stream::stream ())

extern OCTINTERP_API void flush_octave_stdout (void);

#endif