+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else // !TIME_WITH_SYS_TIME
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else // !HAVE_SYS_TIME_H
+# include <time.h>
+# endif // HAVE_SYS_TIME_H
+#endif // TIME_WITH_SYS_TIME
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif // HAVE_UNISTD_H
+#if defined(HAVE_PROCESS_H) && defined(__EMX__)
+# include <process.h>
+#endif // HAVE_PROCESS_H __EMX__
+
+#include <assert.h>
+}
+
+#include <algorithm>
+
+#include "Util.hh"
+
+using std::string;
+
+
+void Rect::setX(int __x) {
+ _x2 += __x - _x1;
+ _x1 = __x;
+}
+
+
+void Rect::setY(int __y)
+{
+ _y2 += __y - _y1;
+ _y1 = __y;
+}
+
+
+void Rect::setPos(int __x, int __y) {
+ _x2 += __x - _x1;
+ _x1 = __x;
+ _y2 += __y - _y1;
+ _y1 = __y;
+}
+
+
+void Rect::setWidth(unsigned int __w) {
+ _x2 = __w + _x1 - 1;
+}
+
+
+void Rect::setHeight(unsigned int __h) {
+ _y2 = __h + _y1 - 1;
+}
+
+
+void Rect::setSize(unsigned int __w, unsigned int __h) {
+ _x2 = __w + _x1 - 1;
+ _y2 = __h + _y1 - 1;
+}
+
+
+void Rect::setRect(int __x, int __y, unsigned int __w, unsigned int __h) {
+ *this = Rect(__x, __y, __w, __h);
+}
+
+
+void Rect::setCoords(int __l, int __t, int __r, int __b) {
+ _x1 = __l;
+ _y1 = __t;
+ _x2 = __r;
+ _y2 = __b;
+}
+
+
+Rect Rect::operator|(const Rect &a) const {
+ Rect b;
+
+ b._x1 = std::min(_x1, a._x1);
+ b._y1 = std::min(_y1, a._y1);
+ b._x2 = std::max(_x2, a._x2);
+ b._y2 = std::max(_y2, a._y2);
+
+ return b;
+}
+
+
+Rect Rect::operator&(const Rect &a) const {
+ Rect b;