Recovered from microbel
This commit is contained in:
185
client/renderer/srvcliconsole.C
Normal file
185
client/renderer/srvcliconsole.C
Normal file
@@ -0,0 +1,185 @@
|
||||
/*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
#include <fstream>
|
||||
#include <malloc.h>
|
||||
#include "pvvmud.H"
|
||||
#include "srvcliconsole.H"
|
||||
#include "string.h"
|
||||
|
||||
const char * CSrvCliConsole::HISTORY_FILE = ".pvvmud_history";
|
||||
|
||||
|
||||
CSrvCliConsole::CSrvCliConsole(CPvvmudClient * cli) : CConsole(cli) {
|
||||
m_numMsgs = 0;
|
||||
m_historyPos = 0;
|
||||
m_consSize = getCols()-1;
|
||||
loadHistory();
|
||||
}
|
||||
|
||||
CSrvCliConsole::CSrvCliConsole(CPvvmudClient * cli, int cols, int rows) : CConsole(cli, cols, rows) {
|
||||
m_numMsgs = 0;
|
||||
m_historyPos = 0;
|
||||
m_consSize = getCols()-1;
|
||||
loadHistory();
|
||||
}
|
||||
|
||||
void CSrvCliConsole::drawText() {
|
||||
}
|
||||
|
||||
int CSrvCliConsole::getNumMsgs() {
|
||||
return m_numMsgs;
|
||||
}
|
||||
|
||||
void CSrvCliConsole::setNumMsgs(int num) {
|
||||
m_numMsgs = num;
|
||||
}
|
||||
|
||||
void CSrvCliConsole::addMsg(char * msg) {
|
||||
string s = msg;
|
||||
if (m_numMsgs >= m_consSize) {
|
||||
m_messages.erase(m_messages.begin());
|
||||
}
|
||||
m_messages.push_back(msg);
|
||||
m_numMsgs++;
|
||||
printMsgs();
|
||||
}
|
||||
|
||||
void CSrvCliConsole::printMsgs() {
|
||||
const char * c;
|
||||
clear();
|
||||
for (int i=0;i<m_messages.size();i++) {
|
||||
c = m_messages[i].c_str();
|
||||
print((char *)c);
|
||||
}
|
||||
}
|
||||
|
||||
void CSrvCliConsole::loadHistory() {
|
||||
ifstream * file = new ifstream(HISTORY_FILE);
|
||||
if (!file) {
|
||||
cout << "Error\n";
|
||||
exit(0);
|
||||
} // if
|
||||
filebuf * fb = file->rdbuf();
|
||||
char * buf = (char*)malloc(80);
|
||||
char c = 0;
|
||||
int i = 0;
|
||||
while(file->get(c)) {
|
||||
if (i >= 80 || c == '\n') {
|
||||
string s = string(buf);
|
||||
//cout << s;
|
||||
m_history.push_back(s);
|
||||
m_historyPos++;
|
||||
i = 0;
|
||||
memset(buf, 0, 80);
|
||||
} // if
|
||||
else {
|
||||
buf[i++] = c;
|
||||
} // else
|
||||
} // while
|
||||
file->close();
|
||||
free(buf);
|
||||
delete file;
|
||||
}
|
||||
|
||||
void CSrvCliConsole::saveHistory() {
|
||||
ofstream * file = new ofstream(HISTORY_FILE);
|
||||
filebuf * fb = file->rdbuf();
|
||||
for (int i=0;i<m_history.size();i++) {
|
||||
fb->sputn(m_history[i].c_str(), m_history[i].size());
|
||||
fb->sputc('\n');
|
||||
} // for
|
||||
file->close();
|
||||
delete file;
|
||||
}
|
||||
void CSrvCliConsole::keyboardInput(char k) {
|
||||
switch (k) {
|
||||
case KEY_UP:
|
||||
m_input_x = 0;
|
||||
m_inputBuffer = "";
|
||||
clear();
|
||||
printMsgs();
|
||||
if (m_historyPos > -1) {
|
||||
m_historyPos--;
|
||||
if (m_historyPos > -1) {
|
||||
m_inputBuffer = m_history[m_historyPos];
|
||||
if (getEcho()) {
|
||||
char c;
|
||||
int i = 0;
|
||||
const char * cstr = m_inputBuffer.c_str();
|
||||
while (c = cstr[i]) {
|
||||
echoChar(c);
|
||||
i++;
|
||||
} // while
|
||||
} // if
|
||||
} // if
|
||||
} // if
|
||||
break;
|
||||
case KEY_DOWN:
|
||||
m_input_x = 0;
|
||||
m_inputBuffer = "";
|
||||
clear();
|
||||
printMsgs();
|
||||
if (m_historyPos == -1 || m_historyPos < m_history.size()) { // Stygt hack
|
||||
m_historyPos++;
|
||||
if (m_historyPos < m_history.size()) {
|
||||
m_inputBuffer = m_history[m_historyPos];
|
||||
if (getEcho()) {
|
||||
char c;
|
||||
int i = 0;
|
||||
const char * cstr = m_inputBuffer.c_str();
|
||||
while (c = cstr[i]) {
|
||||
echoChar(c);
|
||||
i++;
|
||||
} // while
|
||||
} // if
|
||||
} // if
|
||||
else {
|
||||
m_inputBuffer = "";
|
||||
m_input_x = 0;
|
||||
} // else
|
||||
}
|
||||
break;
|
||||
case '\r':
|
||||
changeInputMode();
|
||||
m_historyPos = m_history.size();
|
||||
if (m_inputBuffer != "") {
|
||||
setDataReady();
|
||||
m_history.push_back(m_inputBuffer);
|
||||
m_historyPos++;
|
||||
}
|
||||
break;
|
||||
case '\b':
|
||||
if (m_inputBuffer != "") {
|
||||
m_inputBuffer.erase(m_inputBuffer.end()-1);
|
||||
if (getEcho()) {
|
||||
m_input_x--;
|
||||
m_console[m_input_y * getRows() + m_input_x] = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (getEcho()) {
|
||||
echoChar(k);
|
||||
}
|
||||
m_inputBuffer += k;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user