diff options
| -rw-r--r-- | engines/gargoyle/glk.cpp | 23 | ||||
| -rw-r--r-- | engines/gargoyle/glk.h | 4 | ||||
| -rw-r--r-- | engines/gargoyle/glk_types.h | 3 | ||||
| -rw-r--r-- | engines/gargoyle/module.mk | 1 | ||||
| -rw-r--r-- | engines/gargoyle/stream.cpp | 44 | ||||
| -rw-r--r-- | engines/gargoyle/stream.h | 74 | ||||
| -rw-r--r-- | engines/gargoyle/windows.cpp | 9 | ||||
| -rw-r--r-- | engines/gargoyle/windows.h | 13 | 
8 files changed, 148 insertions, 23 deletions
| diff --git a/engines/gargoyle/glk.cpp b/engines/gargoyle/glk.cpp index 7274ff2af4..3e308d5506 100644 --- a/engines/gargoyle/glk.cpp +++ b/engines/gargoyle/glk.cpp @@ -22,6 +22,7 @@  #include "gargoyle/glk.h"  #include "gargoyle/events.h" +#include "gargoyle/stream.h"  #include "gargoyle/windows.h"  namespace Gargoyle { @@ -122,8 +123,7 @@ void Glk::glk_window_move_cursor(winid_t win, glui32 xpos, glui32 ypos) {  }  strid_t Glk::glk_window_get_stream(winid_t win) { -	// TODO -	return nullptr; +	return win->_stream;  }  void Glk::glk_window_set_echo_stream(winid_t win, strid_t str) { @@ -136,7 +136,7 @@ strid_t Glk::glk_window_get_echo_stream(winid_t win) {  }  void Glk::glk_set_window(winid_t win) { -	_windows->setCurrent(win ? win->str : nullptr); +	_windows->setCurrent(win ? win->_stream : nullptr);  }  strid_t Glk::glk_stream_open_file(frefid_t fileref, glui32 fmode, @@ -371,27 +371,28 @@ glui32 Glk::glk_buffer_to_title_case_uni(glui32 *buf, glui32 len,  }  void Glk::glk_put_char_uni(glui32 ch) { -	// TODO +	glk_put_char_stream_uni(_windows->getCurrent(), ch);  }  void Glk::glk_put_string_uni(glui32 *s) { -	// TODO +	glk_put_buffer_stream_uni(_windows->getCurrent(), s, strlen_uni(s));  }  void Glk::glk_put_buffer_uni(glui32 *buf, glui32 len) { -	// TODO +	glk_put_buffer_stream_uni(_windows->getCurrent(), buf, len);  }  void Glk::glk_put_char_stream_uni(strid_t str, glui32 ch) { -	// TODO +	str->writeUint32LE(ch);  } -void Glk::glk_put_string_stream_uni(strid_t str, glui32 *s) { -	// TODO +void Glk::glk_put_string_stream_uni(strid_t str, const glui32 *s) { +	glk_put_buffer_stream_uni(str, s, strlen_uni(s));  } -void Glk::glk_put_buffer_stream_uni(strid_t str, glui32 *buf, glui32 len) { -	// TODO +void Glk::glk_put_buffer_stream_uni(strid_t str, const glui32 *buf, glui32 len) { +	while (len-- > 0) +		str->writeUint32LE(*buf++);  }  glsi32 Glk::glk_get_char_stream_uni(strid_t str) { diff --git a/engines/gargoyle/glk.h b/engines/gargoyle/glk.h index ce21910a1a..b0ef1714ac 100644 --- a/engines/gargoyle/glk.h +++ b/engines/gargoyle/glk.h @@ -171,8 +171,8 @@ public:  	void glk_put_string_uni(glui32 *s);  	void glk_put_buffer_uni(glui32 *buf, glui32 len);  	void glk_put_char_stream_uni(strid_t str, glui32 ch); -	void glk_put_string_stream_uni(strid_t str, glui32 *s); -	void glk_put_buffer_stream_uni(strid_t str, glui32 *buf, glui32 len); +	void glk_put_string_stream_uni(strid_t str, const glui32 *s); +	void glk_put_buffer_stream_uni(strid_t str, const glui32 *buf, glui32 len);  	glsi32 glk_get_char_stream_uni(strid_t str);  	glui32 glk_get_buffer_stream_uni(strid_t str, glui32 *buf, glui32 len); diff --git a/engines/gargoyle/glk_types.h b/engines/gargoyle/glk_types.h index 82f70e3618..86b37fc5d7 100644 --- a/engines/gargoyle/glk_types.h +++ b/engines/gargoyle/glk_types.h @@ -24,6 +24,7 @@  #define GARGOYLE_GLK_TYPES_H  #include "common/scummsys.h" +#include "common/stream.h"  namespace Gargoyle { @@ -49,7 +50,7 @@ class Window;   * These types are opaque object identifiers. They're pointers to opaque   * C structures, which are defined differently by each library.   */ -typedef struct glk_stream_struct  *strid_t; +typedef Common::WriteStream  *strid_t;  typedef struct glk_fileref_struct *frefid_t;  typedef struct glk_schannel_struct *schanid_t; diff --git a/engines/gargoyle/module.mk b/engines/gargoyle/module.mk index e5542a763c..5acba6a7a4 100644 --- a/engines/gargoyle/module.mk +++ b/engines/gargoyle/module.mk @@ -6,6 +6,7 @@ MODULE_OBJS := \  	gargoyle.o \  	glk.o \  	picture.o \ +	stream.o \  	windows.o \  	scott/detection.o \  	scott/scott.o diff --git a/engines/gargoyle/stream.cpp b/engines/gargoyle/stream.cpp new file mode 100644 index 0000000000..a08579a97d --- /dev/null +++ b/engines/gargoyle/stream.cpp @@ -0,0 +1,44 @@ +/* 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. + * + */ + +#include "gargoyle/stream.h" + +namespace Gargoyle { + +uint32 WindowStream::write(const void *dataPtr, uint32 dataSize) { +	// TODO +	return dataSize; +} + +bool WindowStream::flush() { +	// TODO +	return true; +} + +size_t strlen_uni(const uint32 *s) { +	size_t len = 0; +	while (*s++) +		++len; +	return len; +} + +} // End of namespace Gargoyle diff --git a/engines/gargoyle/stream.h b/engines/gargoyle/stream.h new file mode 100644 index 0000000000..5a55fbc16a --- /dev/null +++ b/engines/gargoyle/stream.h @@ -0,0 +1,74 @@ +/* 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_STREAM_H +#define GARGOYLE_STREAM_H + +#include "common/stream.h" + +namespace Gargoyle { + +class Window; + +/** + * Implements the stream for writing text to a window + */ +class WindowStream : public Common::WriteStream { +private: +	uint32 _rock; +	Window *_window; +public: +	/** +	 * Constructor +	 */ +	WindowStream(Window *window, uint32 rock = 0) : Common::WriteStream(), +		_window(window), _rock(rock) {} + +	/** +	 * Write to the stream +	 */ +	virtual uint32 write(const void *dataPtr, uint32 dataSize); +	 +	/** +	 * Flush the stream +	 */ +	virtual bool flush(); + +	/** +	 * Finalize and close this stream +	 */ +	virtual void finalize() { flush(); } + +	/** +	 * Returns the stream position +	 */ +	virtual int32 pos() const { return 0; } +}; + +/* + * Get the length of a unicode string + */ +size_t strlen_uni(const uint32 *s); + +} // End of namespace Gargoyle + +#endif diff --git a/engines/gargoyle/windows.cpp b/engines/gargoyle/windows.cpp index 42c5b1ab76..0abc8a8797 100644 --- a/engines/gargoyle/windows.cpp +++ b/engines/gargoyle/windows.cpp @@ -21,6 +21,7 @@   */  #include "gargoyle/windows.h" +#include "gargoyle/stream.h"  #include "common/algorithm.h"  #include "common/textconsole.h" @@ -281,10 +282,6 @@ void Windows::clearSelection() {  	_claimSelect = false;  } -void Windows::setCurrent(Common::WriteStream *stream) { -	_currentStr = stream; -} -  void Windows::repaint(const Common::Rect &box) {  	// TODO  } @@ -295,7 +292,7 @@ Window::Window(Windows *windows, glui32 rock) : _magicnum(MAGIC_WINDOW_NUM),  		_windows(windows), _rock(rock), _type(0), parent(nullptr), next(nullptr), prev(nullptr),  		yadj(0), line_request(0), line_request_uni(0), char_request(0), char_request_uni(0),  		mouse_request(0), hyper_request(0), more_request(0), scroll_request(0), image_loaded(0), -		echo_line_input(true),  line_terminators(nullptr), termct(0), str(nullptr), echostr(nullptr) { +		echo_line_input(true),  line_terminators(nullptr), termct(0), _echoStream(nullptr) {  	attr.fgset = 0;  	attr.bgset = 0;  	attr.reverse = 0; @@ -307,6 +304,8 @@ Window::Window(Windows *windows, glui32 rock) : _magicnum(MAGIC_WINDOW_NUM),  	Common::fill(&bgcolor[0], &bgcolor[3], 3);  	Common::fill(&fgcolor[0], &fgcolor[3], 3);  	disprock.num = 0; + +	_stream = new WindowStream(this, rock);  }  /*--------------------------------------------------------------------------*/ diff --git a/engines/gargoyle/windows.h b/engines/gargoyle/windows.h index 112e903beb..17e7d16aef 100644 --- a/engines/gargoyle/windows.h +++ b/engines/gargoyle/windows.h @@ -116,7 +116,12 @@ public:  	/**  	 * Set the current output stream  	 */ -	void setCurrent(Common::WriteStream *stream); +	void setCurrent(Common::WriteStream *stream) { _currentStr = stream; } + +	/** +	 * Gets the current output stream +	 */ +	Common::WriteStream *getCurrent() const { return _currentStr; }  	/**  	 * Repaint an area of the windows @@ -179,12 +184,12 @@ public:  	glui32 _rock;  	glui32 _type; -	Window *parent;               ///< pair window which contains this one +	Window *parent;                   ///< pair window which contains this one  	Common::Rect bbox;  	int yadj; -	Common::WriteStream *str;     ///< the window stream. -	Common::WriteStream *echostr; ///< the window's echo stream, if any. +	Common::WriteStream *_stream;     ///< the window stream. +	Common::WriteStream *_echoStream; ///< the window's echo stream, if any.  	int line_request;  	int line_request_uni; | 
