rlmm::basic_terminal< Lock > Struct Template Reference
[The Readline classes.]

#include <rlmm/terminal.hh>

Inheritance diagram for rlmm::basic_terminal< Lock >:

Inheritance graph
[legend]
Collaboration diagram for rlmm::basic_terminal< Lock >:

Collaboration graph
[legend]
List of all members.

Detailed Description

template<typename Lock>
struct rlmm::basic_terminal< Lock >

Terminal handling.

namespace examples 
{
  /** Simple example. 
      This example shows how to use hooks and other file desripters
      than the standard ones. */ 
  class simple : public rlmm::readline
  {
  private:
    /// The default input 
    string    _def;
    /// The file descriptor used for input
    string    _fd;
    /// MEximum number of characters to read. 
    int       _n;
    /// The prompt 
    string _prompt;
  public:
    /** CTOR
        @param argc from main. 
        @param argv from main. */
    simple(int argc, char** argv);
    /// DTOR.
    virtual ~simple() {}
    /// Hook run when starting up 
    virtual int startup_hook();
    /// show usage 
    void usage();
    /// main function
    int run();
  };
}

//____________________________________________________________________
examples::simple::simple(int argc, char** argv)
{
  _def  = "";
  _n    = 0;
  _fd   = "";
  name(argv[0]);
  _prompt = argv[0];
  
  for (int i = 1; i < argc; i++) {
    if (argv[i][0] != '-' || argv[i][1] == '\0' || !argv[i+1]) 
      continue;
    stringstream sarg(argv[i+1]);
    switch (argv[i][1]) {
    case 'p': sarg >> _prompt; break;
    case 'u': sarg >> _fd;     break;
    case 'd': sarg >> _def;    break;
    case 'n': sarg >> _n;      break;
    default: usage(); exit(2); break;
    }
    i++;
  }
}

//____________________________________________________________________
int examples::simple::run()
{

  if (!_fd.empty()) {
    FILE* fp = fopen(_fd.c_str(), "r");
    if (!fp) {
      stringstream ss;
      ss << name() << ": Bad file descriptor: " << _fd;
      terminal::active().print(ss.str());
      return 2;
    }
    terminal::active().instream(fp);
  }

  if (_n > 0) max_read(_n);

  _prompt.append("$ ");
  string line;
  if (!read(_prompt, line)) return 1;
  terminal::active().print(line);
  terminal::active().next_line();
  return 0;
}



//____________________________________________________________________
int examples::simple::startup_hook() 
{
  static bool first = false;
  if (first) return 0;
  first = true;
  buffer::instance().insert(_def);
  return 0;
}

//____________________________________________________________________
void examples::simple::usage() 
{
  stringstream ss;
  ss << "Usage: " << name() 
     << " [-p prompt] [-u unit] [-d default] [-n nchars]\n";
  terminal::active().print(ss.str()); 
  fflush(terminal::active().outstream());
}

//____________________________________________________________________
int main(int argc, char** argv) 
{
  examples::simple s(argc, argv);
  return s.run();
}

//____________________________________________________________________
//
// EOF


Public Member Functions

virtual ~basic_terminal ()
virtual void reset ()
virtual const std::string & name () const
virtual void name (const std::string &name)
virtual void default_size ()
virtual void resize (int width, int height)
virtual void size (int &width, int &height) const
virtual void instream (FILE *in)
virtual FILE * instream ()
virtual void outstream (FILE *out)
virtual FILE * outstream ()
virtual void input_timeout (int us)
virtual int input_timeout () const
virtual int read_key ()
virtual int write_character (int c)
virtual void write_message (const std::string &message)
virtual void clear_message ()
virtual void print (const std::string &txt)
virtual void update ()
virtual void new_line (bool withPrompt=false)
virtual void next_line ()
virtual void reset_line ()
virtual bool ding ()

Static Public Member Functions

static void true_size (int &width, int &height)

Protected Member Functions

 basic_terminal ()
 basic_terminal (const basic_terminal &o)
basic_terminaloperator= (const basic_terminal &o)
void do_activate ()
void do_deactivate ()
virtual int read_character ()
virtual void prepare (bool eightbit=false)
virtual void deprepare ()
virtual void redisplay ()

Protected Attributes

FILE * _input
FILE * _output
std::string _name
int _input_timeout
int _width
int _height

Friends

class one_at_a_time
int rlmm_read_character (FILE *)
void rlmm_redisplay ()
void rlmm_prepare (int eightbit)
void rlmm_deprepare ()


Constructor & Destructor Documentation

template<typename Lock>
rlmm::basic_terminal< Lock >::basic_terminal  )  [inline, protected]
 

Constructor.

template<typename Lock>
rlmm::basic_terminal< Lock >::basic_terminal const basic_terminal< Lock > &  o  )  [inline, protected]
 

Constructor.

template<typename Lock>
rlmm::basic_terminal< Lock >::~basic_terminal  )  [inline, virtual]
 

DTOR.


Member Function Documentation

template<typename Lock>
void rlmm::basic_terminal< Lock >::clear_message  )  [inline, virtual]
 

Clear message area.

template<typename Lock>
void rlmm::basic_terminal< Lock >::default_size  )  [inline, virtual]
 

Set the terminal size to default.

template<typename Lock>
void rlmm::basic_terminal< Lock >::deprepare  )  [inline, protected, virtual]
 

Undo last PrepareTerminal (overload).

template<typename Lock>
bool rlmm::basic_terminal< Lock >::ding  )  [inline, virtual]
 

Ring the terminal bell, returns false if no echo.

template<typename Lock>
void rlmm::basic_terminal< Lock >::do_activate  )  [inline, protected, virtual]
 

Install a new terminal handler.

Implements rlmm::one_at_a_time< basic_terminal, Lock >.

template<typename Lock>
void rlmm::basic_terminal< Lock >::do_deactivate  )  [inline, protected, virtual]
 

Remove a terminal handler.

Implements rlmm::one_at_a_time< basic_terminal, Lock >.

template<typename Lock>
virtual int rlmm::basic_terminal< Lock >::input_timeout  )  const [inline, virtual]
 

template<typename Lock>
void rlmm::basic_terminal< Lock >::input_timeout int  us  )  [inline, virtual]
 

Set the time out (in microseconds) before Input hook is exec'd.

template<typename Lock>
virtual FILE* rlmm::basic_terminal< Lock >::instream  )  [inline, virtual]
 

Get the input stream.

template<typename Lock>
void rlmm::basic_terminal< Lock >::instream FILE *  in  )  [inline, virtual]
 

Set the input stream.

Parameters:
in A pointer to a C file stream.

template<typename Lock>
void rlmm::basic_terminal< Lock >::name const std::string &  name  )  [inline, virtual]
 

Set the terminal name.

template<typename Lock>
const std::string & rlmm::basic_terminal< Lock >::name  )  const [inline, virtual]
 

Get the terminal name.

template<typename Lock>
void rlmm::basic_terminal< Lock >::new_line bool  withPrompt = false  )  [inline, virtual]
 

Signal a new line.

Parameters:
withPrompt If true, then it's assumed that the prompt has already been shown. If false, then the prompt is reshown. This member function is a good candidate for begin the last thing to do in rlmm::completion::display_hook.

template<typename Lock>
void rlmm::basic_terminal< Lock >::next_line  )  [inline, virtual]
 

Jump to next line.

template<typename Lock>
basic_terminal< Lock > & rlmm::basic_terminal< Lock >::operator= const basic_terminal< Lock > &  o  )  [inline, protected]
 

Constructor.

template<typename Lock>
virtual FILE* rlmm::basic_terminal< Lock >::outstream  )  [inline, virtual]
 

Get the output stream.

template<typename Lock>
void rlmm::basic_terminal< Lock >::outstream FILE *  out  )  [inline, virtual]
 

Set the output stream.

template<typename Lock>
void rlmm::basic_terminal< Lock >::prepare bool  eightbit = false  )  [inline, protected, virtual]
 

Prepare terminal for readline reads (overload).

template<typename Lock>
void rlmm::basic_terminal< Lock >::print const std::string &  txt  )  [inline, virtual]
 

Write on output stream.

template<typename Lock>
int rlmm::basic_terminal< Lock >::read_character  )  [inline, protected, virtual]
 

Abstract method to be overloaded, read one character from passed file pointer.

template<typename Lock>
int rlmm::basic_terminal< Lock >::read_key  )  [inline, virtual]
 

Read a character from input buffer.

template<typename Lock>
void rlmm::basic_terminal< Lock >::redisplay  )  [inline, protected, virtual]
 

Abstract method to be overloaded, redisplay the screen.

template<typename Lock>
void rlmm::basic_terminal< Lock >::reset  )  [inline, virtual]
 

Reset the terminal to term.

template<typename Lock>
void rlmm::basic_terminal< Lock >::reset_line  )  [inline, virtual]
 

Redisplay the current line.

template<typename Lock>
void rlmm::basic_terminal< Lock >::resize int  width,
int  height
[inline, virtual]
 

Set the size (in characters) of the terminal.

template<typename Lock>
void rlmm::basic_terminal< Lock >::size int &  width,
int &  height
const [inline, virtual]
 

Get the size of the terminal.

template<typename Lock>
void rlmm::basic_terminal< Lock >::true_size int &  width,
int &  height
[inline, static]
 

Get the size of the terminal.

template<typename Lock>
void rlmm::basic_terminal< Lock >::update  )  [inline, virtual]
 

Force a redisplay.

template<typename Lock>
int rlmm::basic_terminal< Lock >::write_character int  c  )  [inline, virtual]
 

Write a character to output, returns # of chars written.

template<typename Lock>
void rlmm::basic_terminal< Lock >::write_message const std::string &  message  )  [inline, virtual]
 

Write a message to output in `echo area'.


Friends And Related Function Documentation

template<typename Lock>
friend class one_at_a_time [friend]
 

Base class is a friend.

template<typename Lock>
void rlmm_deprepare  )  [friend]
 

Deprepare screen.

template<typename Lock>
void rlmm_prepare int  eightbit  )  [friend]
 

Prepare terminal.

Parameters:
eightbit Whether to use the meta bit

template<typename Lock>
int rlmm_read_character FILE *  in  )  [friend]
 

Read one character from in.

Parameters:
in File descriptor to read from
Returns:
basic_terminal<Lock>::read_character()

template<typename Lock>
void rlmm_redisplay  )  [friend]
 

Redisplay screen.


Member Data Documentation

template<typename Lock>
int rlmm::basic_terminal< Lock >::_height [protected]
 

Screen height in characters.

template<typename Lock>
FILE* rlmm::basic_terminal< Lock >::_input [protected]
 

template<typename Lock>
int rlmm::basic_terminal< Lock >::_input_timeout [protected]
 

input time out in $ \mu s$

template<typename Lock>
std::string rlmm::basic_terminal< Lock >::_name [protected]
 

Terminal name.

template<typename Lock>
FILE* rlmm::basic_terminal< Lock >::_output [protected]
 

template<typename Lock>
int rlmm::basic_terminal< Lock >::_width [protected]
 

Screen width in characters.


The documentation for this struct was generated from the following file:
Top of page
Last update Fri Aug 26 15:19:53 2005
Christian Holm
Created by DoxyGen 1.4.4