#include <math.h>
#include <iostream>
-#include "physfs/ifile_stream.hpp"
+#include "physfs/buffered_ifile_stream.hpp"
+#include "scripting/scripting.hpp"
#include "scripting/squirrel_util.hpp"
#include "supertux/gameconfig.hpp"
#include "supertux/globals.hpp"
void
Console::on_buffer_change(int line_count)
{
+ if (!m_font)
+ {
+ // FIXME: This is an ugly workaround for a crash at startup.
+ // Console::current() becomes valid before the Console constructor
+ // is finished and loading Surfaces and Fonts wants to write text
+ // to the Console, with Fonts that aren't yet loaded, thus
+ // crashing
+ return;
+ }
+
// increase console height if necessary
if (m_stayOpen > 0 && m_height < 64)
{
try {
std::string filename = "scripts/console.nut";
- IFileStream stream(filename);
- scripting::compile_and_run(m_vm, stream, filename);
+ BufferedIFileStream* buffered_stream = new BufferedIFileStream(filename);
+ IFileStream* stream = buffered_stream->get_stream();
+ scripting::compile_and_run(m_vm, *stream, filename);
} catch(std::exception& e) {
log_warning << "Couldn't load console.nut: " << e.what() << std::endl;
}
Console::show_history(int offset_)
{
while ((offset_ > 0) && (m_history_position != m_history.end())) {
- m_history_position++;
+ ++m_history_position;
offset_--;
}
while ((offset_ < 0) && (m_history_position != m_history.begin())) {
- m_history_position--;
+ --m_history_position;
offset_++;
}
if (m_history_position == m_history.end()) {
// split line into list of args
std::vector<std::string> args;
- size_t start = 0;
size_t end = 0;
while (1) {
- start = s.find_first_not_of(" ,", end);
+ size_t start = s.find_first_not_of(" ,", end);
end = s.find_first_of(" ,", start);
if (start == s.npos) break;
args.push_back(s.substr(start, end-start));
}
int skipLines = -m_offset;
- for (std::list<std::string>::iterator i = m_buffer.m_lines.begin(); i != m_buffer.m_lines.end(); i++)
+ for (std::list<std::string>::iterator i = m_buffer.m_lines.begin(); i != m_buffer.m_lines.end(); ++i)
{
if (skipLines-- > 0) continue;
lineNo++;