diff options
Diffstat (limited to 'engines/gargoyle/frotz')
-rw-r--r-- | engines/gargoyle/frotz/buffer.h | 72 | ||||
-rw-r--r-- | engines/gargoyle/frotz/processor.cpp | 4 | ||||
-rw-r--r-- | engines/gargoyle/frotz/processor.h | 46 | ||||
-rw-r--r-- | engines/gargoyle/frotz/processor_buffer.cpp (renamed from engines/gargoyle/frotz/buffer.cpp) | 23 | ||||
-rw-r--r-- | engines/gargoyle/frotz/processor_streams.cpp | 1 | ||||
-rw-r--r-- | engines/gargoyle/frotz/processor_text.cpp | 2 |
6 files changed, 52 insertions, 96 deletions
diff --git a/engines/gargoyle/frotz/buffer.h b/engines/gargoyle/frotz/buffer.h deleted file mode 100644 index 608e087f3d..0000000000 --- a/engines/gargoyle/frotz/buffer.h +++ /dev/null @@ -1,72 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef GARGOYLE_FROTZ_BUFFER -#define GARGOYLE_FROTZ_BUFFER - -#include "gargoyle/frotz/frotz_types.h" - -namespace Gargoyle { -namespace Frotz { - -#define TEXT_BUFFER_SIZE 200 - -/** - * Text buffer class - */ -class Buffer { -public: - zchar _buffer[TEXT_BUFFER_SIZE]; - size_t _bufPos; - bool _locked; - zchar _prevC; -public: - /** - * Constructor - */ - Buffer(); - - /** - * Copy the contents of the text buffer to the output streams. - */ - void flush(); - - /** - * High level output function. - */ - void printChar(zchar c); - - /** - * High level newline function. - */ - void newLine(); - - /** - * Returns true if the buffer is empty - */ - bool empty() const { return !_bufPos; } -}; - -} // End of namespace Frotz -} // End of namespace Gargoyle - -#endif diff --git a/engines/gargoyle/frotz/processor.cpp b/engines/gargoyle/frotz/processor.cpp index 721f64b4bf..85a539b48f 100644 --- a/engines/gargoyle/frotz/processor.cpp +++ b/engines/gargoyle/frotz/processor.cpp @@ -135,7 +135,8 @@ Processor::Processor(OSystem *syst, const GargoyleGameDescription *gameDesc) : GlkInterface(syst, gameDesc), Errors(), _finished(0), _sp(nullptr), _fp(nullptr), _frameCount(0), zargc(0), _decoded(nullptr), _encoded(nullptr), _resolution(0), - _randomInterval(0), _randomCtr(0), first_restart(true) { + _randomInterval(0), _randomCtr(0), first_restart(true), _bufPos(0), + _locked(false), _prevC('\0') { static const Opcode OP0_OPCODES[16] = { &Processor::z_rtrue, &Processor::z_rfalse, @@ -177,6 +178,7 @@ Processor::Processor(OSystem *syst, const GargoyleGameDescription *gameDesc) : Common::copy(&OP1_OPCODES[0], &OP1_OPCODES[16], op1_opcodes); Common::fill(&_stack[0], &_stack[STACK_SIZE], 0); Common::fill(&zargs[0], &zargs[8], 0); + Common::fill(&_buffer[0], &_buffer[TEXT_BUFFER_SIZE], '\0'); } void Processor::initialize() { diff --git a/engines/gargoyle/frotz/processor.h b/engines/gargoyle/frotz/processor.h index 77192b4f6a..d754b1f1ee 100644 --- a/engines/gargoyle/frotz/processor.h +++ b/engines/gargoyle/frotz/processor.h @@ -23,7 +23,6 @@ #ifndef GARGOYLE_FROTZ_PROCESSOR #define GARGOYLE_FROTZ_PROCESSOR -#include "gargoyle/frotz/buffer.h" #include "gargoyle/frotz/err.h" #include "gargoyle/frotz/mem.h" #include "gargoyle/frotz/glk_interface.h" @@ -37,6 +36,7 @@ namespace Frotz { #define GET_PC(v) v = pcp - zmp #define SET_PC(v) pcp = zmp + v +#define TEXT_BUFFER_SIZE 200 enum string_type { LOW_STRING, ABBREVIATION, HIGH_STRING, EMBEDDED_STRING, VOCABULARY @@ -48,12 +48,8 @@ typedef void (Processor::*Opcode)(); /** * Zcode processor */ -class Processor : public virtual Mem, public Errors, public GlkInterface { +class Processor : public Errors, public GlkInterface, public virtual Mem { private: - Opcode op0_opcodes[16]; - Opcode op1_opcodes[16]; - static Opcode var_opcodes[64]; - static Opcode ext_opcodes[64]; int _finished; zword zargs[8]; int zargc; @@ -71,6 +67,17 @@ private: static zchar ZSCII_TO_LATIN1[]; zchar *_decoded, *_encoded; int _resolution; + + // Buffer related fields + zchar _buffer[TEXT_BUFFER_SIZE]; + size_t _bufPos; + bool _locked; + zchar _prevC; + + Opcode op0_opcodes[16]; + Opcode op1_opcodes[16]; + static Opcode var_opcodes[64]; + static Opcode ext_opcodes[64]; private: /** * \defgroup General support methods @@ -146,6 +153,33 @@ private: */ /** + * Copy the contents of the text buffer to the output streams. + */ + void flush_buffer(); + + /** + * High level output function. + */ + void print_char(zchar c); + + /** + * High level newline function. + */ + void new_line(); + + /** + * Returns true if the buffer is empty + */ + bool bufferEmpty() const { return !_bufPos; } + + /**@}*/ + + /** + * \defgroup Input support methods + * @{ + */ + + /** * Check if the given key is an input terminator. */ bool is_terminator(zchar key); diff --git a/engines/gargoyle/frotz/buffer.cpp b/engines/gargoyle/frotz/processor_buffer.cpp index 7d9e64465b..be30bfe560 100644 --- a/engines/gargoyle/frotz/buffer.cpp +++ b/engines/gargoyle/frotz/processor_buffer.cpp @@ -20,8 +20,7 @@ * */ -#include "gargoyle/frotz/buffer.h" -#include "gargoyle/frotz/frotz.h" +#include "gargoyle/frotz/processor.h" #include "common/algorithm.h" #include "common/textconsole.h" @@ -33,17 +32,13 @@ void stream_char(zchar) {} void stream_word(const zchar *) {} void stream_new_line(void) {} -Buffer::Buffer() : _bufPos(0), _locked(false), _prevC('\0') { - Common::fill(&_buffer[0], &_buffer[TEXT_BUFFER_SIZE], '\0'); -} - -void Buffer::flush() { +void Processor::flush_buffer() { /* Make sure we stop when flush_buffer is called from flush_buffer. * Note that this is difficult to avoid as we might print a newline * during flush_buffer, which might cause a newline interrupt, that * might execute any arbitrary opcode, which might flush the buffer. */ - if (_locked || empty()) + if (_locked || bufferEmpty()) return; // Send the buffer to the output streams @@ -58,14 +53,14 @@ void Buffer::flush() { _prevC = '\0'; } -void Buffer::printChar(zchar c) { +void Processor::print_char(zchar c) { static bool flag = false; - if (g_vm->message || g_vm->ostream_memory || g_vm->enable_buffering) { + if (message || ostream_memory || enable_buffering) { if (!flag) { // Characters 0 and ZC_RETURN are special cases if (c == ZC_RETURN) { - newLine(); + new_line(); return; } if (c == 0) @@ -73,7 +68,7 @@ void Buffer::printChar(zchar c) { // Flush the buffer before a whitespace or after a hyphen if (c == ' ' || c == ZC_INDENT || c == ZC_GAP || (_prevC == '-' && c != '-')) - flush(); + flush_buffer(); // Set the flag if this is part one of a style or font change if (c == ZC_NEW_FONT || c == ZC_NEW_STYLE) @@ -95,8 +90,8 @@ void Buffer::printChar(zchar c) { } } -void Buffer::newLine() { - flush(); +void Processor::new_line() { + flush_buffer(); stream_new_line(); } diff --git a/engines/gargoyle/frotz/processor_streams.cpp b/engines/gargoyle/frotz/processor_streams.cpp index 5fe526fbe4..ae4dbaada1 100644 --- a/engines/gargoyle/frotz/processor_streams.cpp +++ b/engines/gargoyle/frotz/processor_streams.cpp @@ -28,7 +28,6 @@ namespace Frotz { // TODO: Implement method stubs static void os_scrollback_char(zchar) {} static void os_scrollback_erase(zword) {} -static void flush_buffer() {} static void script_open() {} static void script_close() {} static void script_mssg_on() {} diff --git a/engines/gargoyle/frotz/processor_text.cpp b/engines/gargoyle/frotz/processor_text.cpp index e660ac1fd9..f6a82fb56e 100644 --- a/engines/gargoyle/frotz/processor_text.cpp +++ b/engines/gargoyle/frotz/processor_text.cpp @@ -26,8 +26,6 @@ namespace Gargoyle { namespace Frotz { // TODO: Replace method stubs -static void new_line() {} -static void print_char(zchar) {} static void storeb(zword, zchar) {} static void storew(zword, zword) {} |