/*
 * PVVMUD a 3D MUD
 * Copyright (C) 1998-1999  Programvareverkstedet (pvv@pvv.org)
 *
 * 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 2 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */
#ifndef CCONSOLE_H
#define CCONSOLE_H

#include <string>

class CPvvmudClient;

//class CConsoleCursor {


class CConsole {
  int m_cols; //  Number of columns
  int m_rows; //  Number of rows
  int m_state; //  State variable
  int m_visible;
  int num_msgs; // Number of messages printed on console
  BOOL m_echo;
  BOOL m_dataReady;
  CPvvmudClient * m_client;

protected:
  char * m_console; 
  string m_inputBuffer;
  int m_numInputChars;
  int m_bufStart;
  double * m_charColor;  
  int m_screen_x;  //  Startpoint (in screen coordinates)
  int m_screen_y;
  int m_print_x; //  Position for writing
  int m_print_y;
  int m_input_x; //  Position for echo
  int m_input_y;
  void setDataReady(BOOL d=TRUE);
  void scrollMsgs();

public:
  const int INPUTSIZE = 80;
  CConsole(CPvvmudClient * cli);
  CConsole(CPvvmudClient * cli, int cols, int rows);
  virtual ~CConsole();
  

  virtual void drawText();
  virtual void addMsg(char * msg);
  int printLine(char * string);
  int print(char * string);
  int printChar(char c);
  void printMsg(char * msg);
  void echoChar(char c);
  void clear();
  void scroll(int lines);
  virtual void keyboardInput(char k);

  const char * getLine();
  void setCursorPos(int x, int y);
  int getRows();
  int getCols();
  double * getColor();
  void setColor(double red, double green, double blue);
  CPvvmudClient * getClient();
  int changeInputMode();
  int getInputMode();
  int setVisible();
  int isVisible();  
  void setEcho(BOOL e);
  BOOL getEcho();
  BOOL getDataReady();
};
  
#endif // CCONSOLE_H