imported catch-22 sol clone with authors permission
[reactos.git] / rosapps / games / solitaire / cardlib / cardlib.cpp
diff --git a/rosapps/games/solitaire/cardlib/cardlib.cpp b/rosapps/games/solitaire/cardlib/cardlib.cpp
new file mode 100644 (file)
index 0000000..07cd4ee
--- /dev/null
@@ -0,0 +1,122 @@
+//\r
+//     CardLib - not much of interest in here\r
+//\r
+//     Freeware\r
+//     Copyright J Brown 2001\r
+//\r
+#include <windows.h>\r
+#include "cardlib.h"\r
+#include "globals.h"\r
+\r
+void LoadCardBitmaps(void);\r
+\r
+static bool __CARDLIB_ACES_HIGH = false;\r
+extern double __CARDZOOMSPEED;\r
+\r
+//\r
+//     Global variables!\r
+//\r
+HDC     __hdcCardBitmaps;\r
+HBITMAP __hbmCardBitmaps;\r
+\r
+HDC            __hdcPlaceHolder;\r
+HBITMAP        __hbmPlaceHolder;\r
+HPALETTE __holdplacepal;\r
+\r
+int            __cardwidth;\r
+int            __cardheight;\r
+\r
+HPALETTE __hPalette;\r
+\r
+\r
+//\r
+//     Cardlib global functions!\r
+//\r
+void CardLib_SetZoomSpeed(int speed)\r
+{\r
+       __CARDZOOMSPEED = (double)speed;\r
+}\r
+\r
+/*\r
+\r
+  It's dangerous to use these operators, because of all\r
+  the implicit conversions that could take place, which\r
+  would have unpredicted side-effects.\r
+\r
+  e.g. Card card(Hearts, 4);\r
+       if(card == 4)   - how does 4 get converted??\r
+                             It uses the Card(int uval) constructor,\r
+                                                 which results in a 2 of clubs...\r
+                                                 not what was expected\r
+*/ \r
+/*\r
+void CardLib_SetAcesHigh(bool fHigh);\r
+bool operator != (const Card &lhs, const Card &rhs);\r
+bool operator == (const Card &lhs, const Card &rhs);\r
+bool operator <  (const Card &lhs, const Card &rhs);\r
+bool operator <= (const Card &lhs, const Card &rhs);\r
+bool operator >  (const Card &lhs, const Card &rhs);\r
+bool operator >= (const Card &lhs, const Card &rhs);\r
+*/\r
+\r
+/*\r
+void CardLib_SetAcesHigh(bool fHigh)\r
+{\r
+       __CARDLIB_ACES_HIGH = fHigh;\r
+}\r
+\r
+bool operator == (const Card &lhs, const Card &rhs)\r
+{\r
+       if(__CARDLIB_ACES_HIGH)\r
+               return lhs.HiVal() == rhs.HiVal();\r
+       else\r
+               return lhs.LoVal() == rhs.LoVal();\r
+}\r
+\r
+bool operator != (const Card &lhs, const Card &rhs)\r
+{\r
+       if(__CARDLIB_ACES_HIGH)\r
+               return lhs.HiVal() != rhs.HiVal();\r
+       else\r
+               return lhs.LoVal() != rhs.LoVal();\r
+}\r
+\r
+bool operator > (const Card &lhs, const Card &rhs)\r
+{\r
+       if(__CARDLIB_ACES_HIGH)\r
+               return lhs.HiVal() > rhs.HiVal();\r
+       else\r
+               return lhs.LoVal() > rhs.LoVal();\r
+}\r
+\r
+bool operator >= (const Card &lhs, const Card &rhs)\r
+{\r
+       if(__CARDLIB_ACES_HIGH)\r
+               return lhs.HiVal() >= rhs.HiVal();\r
+       else\r
+               return lhs.LoVal() >= rhs.LoVal();\r
+}\r
+\r
+bool operator < (const Card &lhs, const Card &rhs)\r
+{\r
+       if(__CARDLIB_ACES_HIGH)\r
+               return lhs.HiVal() < rhs.HiVal();\r
+       else\r
+               return lhs.LoVal() < rhs.LoVal();\r
+}\r
+\r
+bool operator <= (const Card &lhs, const Card &rhs)\r
+{\r
+       if(__CARDLIB_ACES_HIGH)\r
+               return lhs.HiVal() <= rhs.HiVal();\r
+       else\r
+               return lhs.LoVal() <= rhs.LoVal();\r
+}\r
+*/\r
+\r
+void PaintRect(HDC hdc, RECT *rect, COLORREF colour)\r
+{\r
+    COLORREF oldcr = SetBkColor(hdc, colour);\r
+    ExtTextOut(hdc, 0, 0, ETO_OPAQUE, rect, "", 0, 0);\r
+    SetBkColor(hdc, oldcr);\r
+}\r