view src/pager.h @ 14294:9e3983c8963c

deprecate the static keyword * octave.gperf: Use PERSISTENT as the token for "static" and "persistent" but use separate static_kw and persistent_kw values so we can distinguish them. * lex.ll (is_keyword_token): Handle static_kw and persistent_kw separately. Generate deprecated keyword warning for static_kw. * oct-parse.cc: Use PERSISTENT token instead of STATIC. * pt-decl.h, pt-decl.cc (tree_persistent_command): Rename from tree_static_command. Change all uses. * pt-walk.h (tree_walker::visit_persistent_command): Rename from visit_static_command. Change all derived classes. * NEWS: note that static has been deprecated.
author John W. Eaton <jwe@octave.org>
date Mon, 30 Jan 2012 23:42:41 -0500
parents 72c96de7a403
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