aboutsummaryrefslogtreecommitdiff
path: root/engines/tony/utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/tony/utils.h')
-rw-r--r--engines/tony/utils.h247
1 files changed, 246 insertions, 1 deletions
diff --git a/engines/tony/utils.h b/engines/tony/utils.h
index b1afcca074..bec42b343b 100644
--- a/engines/tony/utils.h
+++ b/engines/tony/utils.h
@@ -19,16 +19,261 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
+/**************************************************************************
+ * 様様様様様様様様様様様様様様様様様 *
+ * Nayma Software srl *
+ * e -= We create much MORE than ALL =- *
+ * u- z$$$c '. 様様様様様様様様様様様様様様様様様 *
+ * .d" d$$$$$b "b. *
+ * .z$* d$$$$$$$L ^*$c. *
+ * #$$$. $$$$$$$$$ .$$$" Project: Roasted Moths........ *
+ * ^*$b 4$$$$$$$$$F .d$*" *
+ * ^$$. 4$$$$$$$$$F .$P" Module: Loc.CPP.............. *
+ * *$. '$$$$$$$$$ 4$P 4 *
+ * J *$ "$$$$$$$" $P r Author: Giovanni Bajo........ *
+ * z$ '$$$P*4c.*$$$*.z@*R$$$ $. *
+ * z$" "" #$F^ "" '$c Desc: Classi di gestione *
+ * z$$beu .ue=" $ "=e.. .zed$$c dei dati di una loca- *
+ * "#$e z$*" . `. ^*Nc e$"" zione................ *
+ * "$$". .r" ^4. .^$$" ..................... *
+ * ^.@*"6L=\ebu^+C$"*b." *
+ * "**$. "c 4$$$ J" J$P*" OS: [ ] DOS [X] WIN95 [ ] PORT *
+ * ^"--.^ 9$" .--"" COMP: [ ] WATCOM [X] VISUAL C++ *
+ * " [ ] EIFFEL [ ] GCC/GXX/DJGPP *
+ * *
+ * This source code is Copyright (C) Nayma Software. ALL RIGHTS RESERVED *
+ * *
+ **************************************************************************/
#ifndef TONY_UTILS_H
#define TONY_UTILS_H
#include "common/scummsys.h"
#include "common/file.h"
+#include "common/rect.h"
#include "common/str.h"
+#include "tony/mpal/memory.h"
namespace Tony {
+using namespace ::Tony::MPAL;
+
+/**
+ * Data stream for reading data
+ */
+class RMDataStream {
+protected:
+ const byte *m_buf;
+ int m_length;
+ int m_pos;
+ bool m_bError;
+ int m_ecode;
+
+public:
+ enum RMDSPos {
+ CUR,
+ START,
+ END
+ };
+
+private:
+ enum {
+ SIZENOTKNOWN = 0x7FFFFFFF
+ };
+
+public:
+ // Constructor and destructor
+ RMDataStream();
+ virtual ~RMDataStream();
+
+ // Loading buffer
+ void OpenBuffer(const byte *buf, int size = SIZENOTKNOWN);
+ void Close(void);
+
+ // Attributi
+ int Length();
+ virtual int Pos();
+
+ // EOF
+ virtual bool IsEOF();
+
+ // Read methods
+ friend RMDataStream &operator>>(RMDataStream &df, char &var);
+ friend RMDataStream &operator>>(RMDataStream &df, byte &var);
+ friend RMDataStream &operator>>(RMDataStream &df, uint16 &var);
+ friend RMDataStream &operator>>(RMDataStream &df, int16 &var);
+ friend RMDataStream &operator>>(RMDataStream &df, int &var);
+ friend RMDataStream &operator>>(RMDataStream &df, uint32 &var);
+
+ // Lettura generica
+ virtual bool Read(void *buf, int size);
+
+ // Skipping & Seeking
+ virtual RMDataStream &operator+=(int nBytes);
+ virtual int Seek(int nBytes, RMDSPos origin = CUR);
+
+ // Gestione errori
+ void SetError(int ecode);
+ int GetError();
+ bool IsError();
+};
+
+/**
+ * String class
+ */
+class RMString {
+private:
+ char *m_string;
+ int m_length;
+ int m_realLength;
+
+public:
+ RMString();
+ ~RMString();
+
+ // Assignment constructors
+ RMString(const RMString &str);
+ RMString(const char *str);
+ RMString(const int ch);
+
+ // Metodi generici
+ int Length();
+ void Compact();
+
+ // Access characters within string
+ char GetAt(int nIndex);
+ void SetAt(int nIndex, char c);
+ char& operator[](int nIndex);
+
+ // String cast
+ operator char*() const;
+
+ // String assignments
+ const RMString &operator=(const RMString &str);
+ const RMString &operator=(const char *str);
+ const RMString &operator=(const int ch);
+
+ // String concatenation
+ const RMString &operator+=(RMString &str);
+ const RMString &operator+=(const char *str);
+ const RMString &operator+=(const int ch);
+
+ // Concatentation of string or character
+ friend RMString operator+(const RMString &str1, const RMString &str2);
+
+ friend RMString operator+(RMString& str, const int ch);
+ friend RMString operator+(const int ch, RMString &str);
+
+ friend RMString operator+(RMString &str, const char *s);
+ friend RMString operator+(const char *s, RMString &str);
+
+ // Estrazione da data stream
+ friend RMDataStream& operator>>(RMDataStream& df, RMString &var);
+
+ // Formattazione di stringa
+ void Format(char *str, ...);
+
+private:
+ void Resize(int size, bool bMantain = false);
+ void Connect(const char* str, int size);
+};
+
+/**
+ * Point class
+ */
+class RMPoint {
+public:
+ int x, y;
+
+public:
+ // Constructor
+ RMPoint();
+ RMPoint(const RMPoint &p);
+ RMPoint(int x1, int y1);
+
+ // Copia
+ RMPoint& operator=(RMPoint p);
+
+ // Set
+ void Set(int x1, int y1) { x=x1; y=y1; }
+
+ // Offset
+ void Offset(int xOff, int yOff);
+ void Offset(RMPoint p);
+ friend RMPoint operator+(RMPoint p1, RMPoint p2);
+ friend RMPoint operator-(RMPoint p1, RMPoint p2);
+ RMPoint &operator+=(RMPoint p);
+ RMPoint &operator-=(RMPoint p);
+ RMPoint operator-();
+
+ // Confronti
+ bool operator==(RMPoint p);
+ bool operator!=(RMPoint p);
+
+ // Casting a POINT
+ operator Common::Point() const;
+
+ // Extraction from data streams
+ friend RMDataStream& operator>>(RMDataStream &ds, RMPoint &p);
+};
+
+class RMRect {
+public:
+ int x1,y1;
+ int x2,y2;
+
+public:
+ RMRect();
+ RMRect(int x1, int y1, int x2, int y2);
+ RMRect(RMPoint p1, RMPoint p2);
+ RMRect(const RMRect &rc);
+
+ // Attributes
+ RMPoint &TopLeft();
+ RMPoint &BottomRight();
+ RMPoint Center();
+ int Width();
+ int Height();
+ bool IsEmpty();
+ int Size();
+
+ // Set
+ void SetRect(int x1, int y1, int x2, int y2);
+ void SetRect(RMPoint p1, RMPoint p2);
+ void SetEmpty(void);
+
+ // Copiers
+ void SetRect(const RMRect &rc);
+ void CopyRect(const RMRect &rc);
+ const RMRect &operator=(const RMRect &rc);
+
+ // Offset
+ void Offset(int xOff, int yOff);
+ void Offset(RMPoint p);
+ friend RMRect operator+(const RMRect &rc, RMPoint p);
+ friend RMRect operator-(const RMRect &rc, RMPoint p);
+ friend RMRect operator+(RMPoint p, const RMRect &rc);
+ friend RMRect operator-(RMPoint p, const RMRect &rc);
+ const RMRect &operator+=(RMPoint p);
+ const RMRect &operator-=(RMPoint p);
+
+ // Comparison
+ bool operator==(const RMRect &rc);
+ bool operator!=(const RMRect &rc);
+
+ // Normalise
+ void NormalizeRect();
+
+ // Point in rect
+ bool PtInRect(RMPoint pt) { return (pt.x>=x1 && pt.x<=x2 && pt.y>=y1 && pt.y<=y2); }
+
+ // Extract from data stream
+ friend RMDataStream &operator>>(RMDataStream& ds, RMRect &rc);
+};
+
+/**
+ * Resource update manager
+ */
class RMResUpdate {
struct ResUpdInfo {
uint32 dwRes;
@@ -46,7 +291,7 @@ public:
~RMResUpdate();
void Init(const Common::String &fileName);
- const byte *QueryResource(uint32 dwRes);
+ HGLOBAL QueryResource(uint32 dwRes);
};
} // End of namespace Tony