home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v1.zip / IBMCPP / WKFRAME / MAHJONGG / MAHJONGG.H < prev    next >
Text File  |  1993-02-28  |  35KB  |  623 lines

  1. #ifndef IPF
  2. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  3. /*│                                                                          │*/
  4. /*│ PROGRAM NAME: MAHJONGG                                                   │*/
  5. /*│ -------------                                                            │*/
  6. /*│  A PM version of a Chinese game similar to 'concentration' but without   │*/
  7. /*│  the background puzzle.                                                  │*/
  8. /*│                                                                          │*/
  9. /*│ COPYRIGHT:                                                               │*/
  10. /*│ ----------                                                               │*/
  11. /*│  Copyright (C) International Business Machines Corp., 1991,1992,1993.    │*/
  12. /*│                                                                          │*/
  13. /*│ DISCLAIMER OF WARRANTIES:                                                │*/
  14. /*│ -------------------------                                                │*/
  15. /*│  The following [enclosed] code is sample code created by IBM Corporation.│*/
  16. /*│  This sample code is not part of any standard IBM product and is provided│*/
  17. /*│  to you solely for the purpose of assisting you in the development of    │*/
  18. /*│  your applications.  The code is provided "AS IS", without warranty of   │*/
  19. /*│  any kind.  IBM shall not be liable for any damages arising out of your  │*/
  20. /*│  use of the sample code, even if they have been advised of the           │*/
  21. /*│  possibility of such damages.                                            │*/
  22. /*│                                                                          │*/
  23. /*│ For details on what this program does etc., please see the MAHJONGG.C    │*/
  24. /*│ file.                                                                    │*/
  25. /*│                                                                          │*/
  26. /*└──────────────────────────────────────────────────────────────────────────┘*/
  27.  
  28. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  29. /*│ MAHJONGG.H                                                               │*/
  30. /*│                                                                          │*/
  31. /*│ Mahjongg Game header file                                                │*/
  32. /*└──────────────────────────────────────────────────────────────────────────┘*/
  33.  
  34. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  35. /*│ Includes                                                                 │*/
  36. /*└──────────────────────────────────────────────────────────────────────────┘*/
  37. #define  INCL_PM
  38. #include <os2.h>
  39. #define  NULLH NULLHANDLE
  40.  
  41. #include <math.h>
  42. #include <time.h>
  43. #include <stdlib.h>
  44. #include <stdio.h>
  45. #include <memory.h>
  46. #include <string.h>
  47.  
  48. #else
  49. #define res(x) res= ## x ## .
  50. #endif  /* IPF */
  51. #ifndef IPF
  52. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  53. /*│ Constant Definitions                                                     │*/
  54. /*└──────────────────────────────────────────────────────────────────────────┘*/
  55. #endif  /* IPF */
  56. #define ID_WINDOW           1000
  57.  
  58. #define IDM_EXIT            1120
  59. #define IDA_GAME            1150
  60. #define IDM_NEW_G           1151
  61. #define IDA_MOVES           1200
  62. #define IDM_UNDO            1201
  63. #define IDM_REDO            1202
  64. #define IDM_SHOW            1203
  65. #define IDA_OPTIONS         1300
  66. #define IDM_SOUND           1310
  67. #define IDM_SAVEOPT         1360
  68. #define IDA_HELP            1900
  69. #define IDM_HELP_HELP       1910
  70. #define IDM_HELP_EXTENDED   1911
  71. #define IDM_HELP_GAME       1912
  72. #define IDM_HELP_RULES      1912
  73. #define IDM_HELP_PATIENCE   1912
  74. #define IDM_HELP_KEYS       1913
  75. #define IDM_HELP_INDEX      1914
  76. #define IDM_ABOUT           1999
  77.  
  78. #define IDD_READ_STATUS     2000
  79. #define IDD_STATUS          2001
  80.  
  81. #define IDD_ABOUT           3500
  82.  
  83. #define IDD_NOMORE          3510
  84. #define IDD_NEW             3511
  85.  
  86. #define IDD_OK              DID_OK
  87. #define IDD_CANCEL          DID_CANCEL
  88.  
  89. #ifndef IPF
  90. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  91. /*│ Help Table IDs                                                           │*/
  92. /*└──────────────────────────────────────────────────────────────────────────┘*/
  93. #endif  /* IPF */
  94. #define IDH_MAIN_TABLE       5000
  95. #define IDH_SUBTABLE_FRAME   5001
  96.  
  97. #if defined(IPF)
  98. #else
  99. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  100. /*│ pointer IDs                                                              │*/
  101. /*└──────────────────────────────────────────────────────────────────────────┘*/
  102. #define IDP_CARDMOVE        1001
  103.  
  104. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  105. /*│ Bitmap IDs                                                               │*/
  106. /*└──────────────────────────────────────────────────────────────────────────┘*/
  107. #define IDB_CONGRATULATION  4000
  108.  
  109. #define IDB_ABOUT           4001
  110. #define IDB_BACKVGA         4002
  111. #define IDB_BACKBGA         4003
  112.  
  113. #define IDB_TILE_N_0        4090
  114. #define IDB_TILE_N_1        4091
  115. #define IDB_TILE_N_2        4092
  116. #define IDB_TILE_N_3        4093
  117. #define IDB_TILE_N_4        4094
  118. #define IDB_TILE_N_5        4095
  119. #define IDB_TILE_N_6        4096
  120. #define IDB_TILE_N_7        4097
  121. #define IDB_TILE_N_8        4098
  122. #define IDB_TILE_N_9        4099
  123. #define IDB_TILE_C_1        4100
  124. #define IDB_TILE_C_2        4101
  125. #define IDB_TILE_C_3        4102
  126. #define IDB_TILE_C_4        4103
  127. #define IDB_TILE_C_5        4104
  128. #define IDB_TILE_C_6        4105
  129. #define IDB_TILE_C_7        4106
  130. #define IDB_TILE_C_8        4107
  131. #define IDB_TILE_C_9        4108
  132. #define IDB_TILE_D_1        4109
  133. #define IDB_TILE_D_2        4110
  134. #define IDB_TILE_D_3        4111
  135. #define IDB_TILE_D_4        4112
  136. #define IDB_TILE_D_5        4113
  137. #define IDB_TILE_D_6        4114
  138. #define IDB_TILE_D_7        4115
  139. #define IDB_TILE_D_8        4116
  140. #define IDB_TILE_D_9        4117
  141. #define IDB_TILE_B_1        4118
  142. #define IDB_TILE_B_2        4119
  143. #define IDB_TILE_B_3        4120
  144. #define IDB_TILE_B_4        4121
  145. #define IDB_TILE_B_5        4122
  146. #define IDB_TILE_B_6        4123
  147. #define IDB_TILE_B_7        4124
  148. #define IDB_TILE_B_8        4125
  149. #define IDB_TILE_B_9        4126
  150. #define IDB_TILE_R_1        4127
  151. #define IDB_TILE_R_2        4128
  152. #define IDB_TILE_R_3        4129
  153. #define IDB_TILE_W_N        4130
  154. #define IDB_TILE_W_S        4131
  155. #define IDB_TILE_W_E        4132
  156. #define IDB_TILE_W_W        4133
  157. #define IDB_TILE_F_1        4134
  158. #define IDB_TILE_F_2        4135
  159. #define IDB_TILE_F_3        4136
  160. #define IDB_TILE_F_4        4137
  161. #define IDB_TILE_S_SPR      4138
  162. #define IDB_TILE_S_SUM      4139
  163. #define IDB_TILE_S_AUT      4140
  164. #define IDB_TILE_S_WIN      4141
  165.  
  166. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  167. /*│ String ID's  (they must all have continuous numbers!!!)                  │*/
  168. /*└──────────────────────────────────────────────────────────────────────────┘*/
  169. #define IDS_FIRST_STRING                0
  170. #define IDS_TITLE                       0
  171. #define IDS_VERSION                     1
  172. #define IDS_DASH                        2
  173. #define IDS_UNTITLED                    3
  174.  
  175. #define IDS_CLASS_MAHJONGG              4
  176. #define IDS_CLASS_TILE                  5
  177. #define IDS_CLASS_BOARD                 6
  178.  
  179. #define IDS_LAST_STRING                 6
  180.  
  181. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  182. /*│ User defined window messages                                             │*/
  183. /*└──────────────────────────────────────────────────────────────────────────┘*/
  184. #define MJ_DRAW_STATUS        WM_USER + 0x0001        /* to board */
  185.  
  186. #define MJ_INFORM_SELECTED    WM_USER + 0x0100        /* to board */
  187. #define MJ_QUERY_SELECTED     WM_USER + 0x0101        /* to board */
  188. #define MJ_SELECT             WM_USER + 0x0102        /* to tile */
  189. #define MJ_DESELECT           WM_USER + 0x0103        /* to tile */
  190. #define MJ_REMOVE             WM_USER + 0x0104        /* to tile */
  191.  
  192. #define MJ_PUSH_UNDOCMD       WM_USER + 0x0250        /* to board */
  193.                                /* mp1 = SHORT cmd. SHORT card id */
  194.                                /* mp2 = SHORT fromPile, SHORT toPile */
  195.  
  196. #define MJ_ADJUST_TILES       WM_USER + 0x0340        /* to board */
  197.  
  198. #define MJ_SUCCESS            WM_USER + 0x0400        /* to board */
  199.  
  200. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  201. /*│ other constants                                                          │*/
  202. /*└──────────────────────────────────────────────────────────────────────────┘*/
  203. #define STRING_LENGTH          128
  204.  
  205. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  206. /*│ Game Constants                                                           │*/
  207. /*└──────────────────────────────────────────────────────────────────────────┘*/
  208. #define NBR_OF_TILES           144
  209. #define NO_TILE                 -1
  210.  
  211. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  212. /*│ Type Definitons                                                          │*/
  213. /*└──────────────────────────────────────────────────────────────────────────┘*/
  214.  
  215. /*─── Game ───────────────────────────────────────────────────────────────────*/
  216. typedef struct {
  217.     char * pszTitle;                /* Game Title */
  218.     char * pszHelpFile;             /* Help File */
  219.   } GAME, * PGAME;
  220.  
  221. /*─── Tile ───────────────────────────────────────────────────────────────────*/
  222. typedef enum {CHARACTERS,
  223.               DOTS,
  224.               BAMBOO,
  225.               DRAGONS,
  226.               WINDS,
  227.               FLOWERS,
  228.               SEASONS
  229.              } SUITS;
  230. typedef enum {NUM, PLU, ORC, BAM} VALUE;
  231.  
  232. typedef struct {
  233.     HWND  hwnd;      /* window handle */
  234.     INT   iTxt;      /* index into text array */
  235.     INT   iPos;      /* board position */
  236.     SUITS suit;
  237.     VALUE value;
  238.     BOOL  bSelected;
  239.     BOOL  bRemoved;
  240.   } TILE, * PTILE;
  241.  
  242. /*─── Board ──────────────────────────────────────────────────────────────────*/
  243. typedef struct {
  244.     INT cx;
  245.     INT cy;
  246.     INT cxt;                /* 17   default tile aspect ratio */
  247.     INT cyt;                /* 22                             */
  248.   } BOARD, * PBOARD;
  249.  
  250. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  251. /*│ Variable definitons / declarations                                       │*/
  252. /*└──────────────────────────────────────────────────────────────────────────┘*/
  253.  
  254. /* determine SCOPE to use on global variables */
  255. #if defined(DEFINE_VARIABLES)
  256.   #define xSCOPE
  257.   #define iGLOBAL(init) = init       /*  specify initialization */
  258. #else
  259.   #define xSCOPE extern
  260.   #define iGLOBAL(init)              /*  do not specify initialization */
  261. #endif
  262.  
  263. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  264. /*│ Window variables                                                         │*/
  265. /*└──────────────────────────────────────────────────────────────────────────┘*/
  266. xSCOPE HAB      hab          iGLOBAL(NULLH);
  267. xSCOPE HWND     hwndFrame    iGLOBAL(NULLH);
  268. xSCOPE HSWITCH  hSwitch;
  269. xSCOPE SWCNTRL  swcntrl;
  270. xSCOPE HWND     hwndBoard    iGLOBAL(NULLH);
  271. xSCOPE HPOINTER hptrArrow    iGLOBAL(NULLH);
  272. xSCOPE HPOINTER hptrWait     iGLOBAL(NULLH);
  273. xSCOPE LONG     deltaX       iGLOBAL(4L);    /* mapping of card units */
  274. xSCOPE PFNWP    oldFrameProc iGLOBAL(NULL);
  275. xSCOPE LONG     ColorTable[256];
  276.  
  277. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  278. /*│ Game variables                                                           │*/
  279. /*└──────────────────────────────────────────────────────────────────────────┘*/
  280. xSCOPE GAME        Game;
  281. xSCOPE BOARD       Board;
  282. xSCOPE TILE        Tiles[NBR_OF_TILES];
  283. xSCOPE SHORT         Shuffled[NBR_OF_TILES];
  284. xSCOPE SHORT       SelectedTile;
  285. xSCOPE INT         NbrOfTilesRemaining;
  286. xSCOPE BOOL        bSound iGLOBAL(TRUE);    /* sound effects */
  287. xSCOPE BOOL        bDealing iGLOBAL(FALSE); /* currently dealing */
  288.  
  289. xSCOPE PCHAR       pszStringTab[IDS_LAST_STRING - IDS_FIRST_STRING + 1];
  290. xSCOPE INT         TilePos[NBR_OF_TILES][2];
  291.  
  292. #if defined(DEFINE_VARIABLES)
  293.                                     /*   R    L    A              */
  294.   INT Neighbors[NBR_OF_TILES][3] = { { -1,  -1,  -1},      /*   1 */
  295.                                      {  0,   2,  -1},      /*   2 */
  296.                                      {  1,   3,  -1},      /*   3 */
  297.                                      {  2,   4,  -1},      /*   4 */
  298.                                      {  3,   5,  -1},      /*   5 */
  299.                                      {  4,   6,  -1},      /*   6 */
  300.                                      {  5,   7,  -1},      /*   7 */
  301.                                      {  6,   8,  -1},      /*   8 */
  302.                                      {  7,   9,  -1},      /*   9 */
  303.                                      {  8,  10,  -1},      /*  10 */
  304.                                      {  9,  11,  -1},
  305.                                      { -1,  -1,  -1},
  306.                                      { -1,  -1,  -1},
  307.                                      { 12,  14,  87},
  308.                                      { 13,  15,  88},      /*  15 */
  309.                                      { 14,  16,  89},
  310.                                      { 15,  17,  90},
  311.                                      { 16,  18,  91},
  312.                                      { 17,  19,  92},
  313.                                      { -1,  -1,  -1},      /*  20 */
  314.                                      { -1,  -1,  -1},
  315.                                      { 20,  22,  -1},
  316.                                      { 21,  23,  93},
  317.                                      { 22,  24,  94},
  318.                                      { 23,  25,  95},      /*  25 */
  319.                                      { 24,  26,  96},
  320.                                      { 25,  27,  97},
  321.                                      { 26,  28,  98},
  322.                                      { 27,  29,  -1},
  323.                                      { -1,  -1,  -1},      /*  30 */
  324.                                      { -1,  -1,  -1},
  325.                                      { 32,  30,  -1},
  326.                                      { 33,  31,  -1},
  327.                                      { 34,  32,  -1},
  328.                                      { 35,  33,  -1},      /*  35 */
  329.                                      { 36,  34,  99},
  330.                                      { 37,  35, 100},
  331.                                      { 38,  36, 101},
  332.                                      { 39,  37, 102},
  333.                                      { 40,  38, 103},      /*  40 */
  334.                                      { 41,  39, 104},
  335.                                      { 42,  40,  -1},
  336.                                      { 43,  41,  -1},
  337.                                      { 56,  42,  -1},
  338.                                      { 31,  45,  -1},      /*  45 */
  339.                                      { 44,  46,  -1},
  340.                                      { 45,  47,  -1},
  341.                                      { 46,  48, 105},
  342.                                      { 47,  49, 106},
  343.                                      { 48,  50, 107},      /*  50 */
  344.                                      { 49,  51, 108},
  345.                                      { 50,  52, 109},
  346.                                      { 51,  53, 110},
  347.                                      { 52,  54,  -1},
  348.                                      { 53,  55,  -1},      /*  55 */
  349.                                      { 54,  56,  -1},
  350.                                      { -1,  -1,  -1},
  351.                                      { -1,  -1,  -1},
  352.                                      { 57,  59,  -1},
  353.                                      { 58,  60, 111},      /*  60 */
  354.                                      { 59,  61, 112},
  355.                                      { 60,  62, 113},
  356.                                      { 61,  63, 114},
  357.                                      { 62,  64, 115},
  358.                                      { 63,  65, 116},      /*  65 */
  359.                                      { 64,  66,  -1},
  360.                                      { -1,  -1,  -1},
  361.                                      { -1,  -1,  -1},
  362.                                      { 67,  69, 117},
  363.                                      { 68,  70, 118},      /*  70 */
  364.                                      { 69,  71, 119},
  365.                                      { 70,  72, 120},
  366.                                      { 71,  73, 121},
  367.                                      { 72,  74, 122},
  368.                                      { -1,  -1,  -1},      /*  75 */
  369.                                      { -1,  -1,  -1},
  370.                                      { 75,  77,  -1},
  371.                                      { 76,  78,  -1},
  372.                                      { 77,  79,  -1},
  373.                                      { 78,  80,  -1},      /*  80 */
  374.                                      { 79,  81,  -1},
  375.                                      { 80,  82,  -1},
  376.                                      { 81,  83,  -1},
  377.                                      { 82,  84,  -1},
  378.                                      { 83,  85,  -1},      /*  85 */
  379.                                      { 84,  86,  -1},
  380.                                      { -1,  -1,  -1},
  381.                                      { -1,  -1,  -1},
  382.                                      { 87,  89,  -1},
  383.                                      { 88,  90,  -1},      /*  90 */
  384.                                      { 89,  91,  -1},
  385.                                      { 90,  92,  -1},
  386.                                      { -1,  -1,  -1},
  387.                                      { -1,  -1,  -1},
  388.                                      { 93,  95, 123},      /*  95 */
  389.                                      { 94,  96, 124},
  390.                                      { 95,  97, 125},
  391.                                      { 96,  98, 126},
  392.                                      { -1,  -1,  -1},
  393.                                      { -1,  -1,  -1},      /* 100 */
  394.                                      { 99, 101, 127},
  395.                                      {100, 102, 128},
  396.                                      {101, 103, 129},
  397.                                      {102, 104, 130},
  398.                                      { -1,  -1,  -1},      /* 105 */
  399.                                      { -1,  -1,  -1},
  400.                                      {105, 107, 131},
  401.                                      {106, 108, 132},
  402.                                      {107, 109, 133},
  403.                                      {108, 110, 134},      /* 110 */
  404.                                      { -1,  -1,  -1},
  405.                                      { -1,  -1,  -1},
  406.                                      {111, 113, 135},
  407.                                      {112, 114, 136},
  408.                                      {113, 115, 137},      /* 115 */
  409.                                      {114, 116, 138},
  410.                                      { -1,  -1,  -1},
  411.                                      { -1,  -1,  -1},
  412.                                      {117, 119,  -1},
  413.                                      {118, 120,  -1},      /* 120 */
  414.                                      {119, 121,  -1},
  415.                                      {120, 122,  -1},
  416.                                      { -1,  -1,  -1},
  417.                                      { -1,  -1,  -1},
  418.                                      {123, 125,  -1},      /* 125 */
  419.                                      {124, 126,  -1},
  420.                                      { -1,  -1,  -1},
  421.                                      { -1,  -1,  -1},
  422.                                      {127, 129, 139},
  423.                                      {128, 130, 140},      /* 130 */
  424.                                      { -1,  -1,  -1},
  425.                                      { -1,  -1,  -1},
  426.                                      {131, 133, 141},
  427.                                      {132, 134, 142},
  428.                                      { -1,  -1,  -1},      /* 135 */
  429.                                      { -1,  -1,  -1},
  430.                                      {135, 137,  -1},
  431.                                      {136, 138,  -1},
  432.                                      { -1,  -1,  -1},
  433.                                      { -1,  -1, 143},      /* 140 */
  434.                                      { -1,  -1, 143},
  435.                                      { -1,  -1, 143},
  436.                                      { -1,  -1, 143},
  437.                                      { -1,  -1,  -1}       /* 144 */
  438.                                    };
  439.  
  440.                                 /* HWND TXT POS       SUIT VALUE    SEL    REM          */
  441.   TILE DefTiles[NBR_OF_TILES] = { {NULLH,  0,  0,CHARACTERS,    1, FALSE, FALSE}, /*   1 */
  442.                                   {NULLH,  1,  0,CHARACTERS,    2, FALSE, FALSE}, /*   2 */
  443.                                   {NULLH,  2,  0,CHARACTERS,    3, FALSE, FALSE}, /*   3 */
  444.                                   {NULLH,  3,  0,CHARACTERS,    4, FALSE, FALSE}, /*   4 */
  445.                                   {NULLH,  4,  0,CHARACTERS,    5, FALSE, FALSE}, /*   5 */
  446.                                   {NULLH,  5,  0,CHARACTERS,    6, FALSE, FALSE}, /*   6 */
  447.                                   {NULLH,  6,  0,CHARACTERS,    7, FALSE, FALSE}, /*   7 */
  448.                                   {NULLH,  7,  0,CHARACTERS,    8, FALSE, FALSE}, /*   8 */
  449.                                   {NULLH,  8,  0,CHARACTERS,    9, FALSE, FALSE}, /*   9 */
  450.                                   {NULLH,  0,  0,CHARACTERS,    1, FALSE, FALSE}, /*  10 */
  451.                                   {NULLH,  1,  0,CHARACTERS,    2, FALSE, FALSE},
  452.                                   {NULLH,  2,  0,CHARACTERS,    3, FALSE, FALSE},
  453.                                   {NULLH,  3,  0,CHARACTERS,    4, FALSE, FALSE},
  454.                                   {NULLH,  4,  0,CHARACTERS,    5, FALSE, FALSE},
  455.                                   {NULLH,  5,  0,CHARACTERS,    6, FALSE, FALSE}, /*  15 */
  456.                                   {NULLH,  6,  0,CHARACTERS,    7, FALSE, FALSE},
  457.                                   {NULLH,  7,  0,CHARACTERS,    8, FALSE, FALSE},
  458.                                   {NULLH,  8,  0,CHARACTERS,    9, FALSE, FALSE},
  459.                                   {NULLH,  0,  0,CHARACTERS,    1, FALSE, FALSE},
  460.                                   {NULLH,  1,  0,CHARACTERS,    2, FALSE, FALSE}, /*  20 */
  461.                                   {NULLH,  2,  0,CHARACTERS,    3, FALSE, FALSE},
  462.                                   {NULLH,  3,  0,CHARACTERS,    4, FALSE, FALSE},
  463.                                   {NULLH,  4,  0,CHARACTERS,    5, FALSE, FALSE},
  464.                                   {NULLH,  5,  0,CHARACTERS,    6, FALSE, FALSE},
  465.                                   {NULLH,  6,  0,CHARACTERS,    7, FALSE, FALSE}, /*  25 */
  466.                                   {NULLH,  7,  0,CHARACTERS,    8, FALSE, FALSE},
  467.                                   {NULLH,  8,  0,CHARACTERS,    9, FALSE, FALSE},
  468.                                   {NULLH,  0,  0,CHARACTERS,    1, FALSE, FALSE},
  469.                                   {NULLH,  1,  0,CHARACTERS,    2, FALSE, FALSE},
  470.                                   {NULLH,  2,  0,CHARACTERS,    3, FALSE, FALSE}, /*  30 */
  471.                                   {NULLH,  3,  0,CHARACTERS,    4, FALSE, FALSE},
  472.                                   {NULLH,  4,  0,CHARACTERS,    5, FALSE, FALSE},
  473.                                   {NULLH,  5,  0,CHARACTERS,    6, FALSE, FALSE},
  474.                                   {NULLH,  6,  0,CHARACTERS,    7, FALSE, FALSE},
  475.                                   {NULLH,  7,  0,CHARACTERS,    8, FALSE, FALSE}, /*  35 */
  476.                                   {NULLH,  8,  0,CHARACTERS,    9, FALSE, FALSE},
  477.                                   {NULLH,  9,  0,DOTS      ,    1, FALSE, FALSE},
  478.                                   {NULLH, 10,  0,DOTS      ,    2, FALSE, FALSE},
  479.                                   {NULLH, 11,  0,DOTS      ,    3, FALSE, FALSE},
  480.                                   {NULLH, 12,  0,DOTS      ,    4, FALSE, FALSE}, /*  40 */
  481.                                   {NULLH, 13,  0,DOTS      ,    5, FALSE, FALSE},
  482.                                   {NULLH, 14,  0,DOTS      ,    6, FALSE, FALSE},
  483.                                   {NULLH, 15,  0,DOTS      ,    7, FALSE, FALSE},
  484.                                   {NULLH, 16,  0,DOTS      ,    8, FALSE, FALSE},
  485.                                   {NULLH, 17,  0,DOTS      ,    9, FALSE, FALSE}, /*  45 */
  486.                                   {NULLH,  9,  0,DOTS      ,    1, FALSE, FALSE},
  487.                                   {NULLH, 10,  0,DOTS      ,    2, FALSE, FALSE},
  488.                                   {NULLH, 11,  0,DOTS      ,    3, FALSE, FALSE},
  489.                                   {NULLH, 12,  0,DOTS      ,    4, FALSE, FALSE},
  490.                                   {NULLH, 13,  0,DOTS      ,    5, FALSE, FALSE}, /*  50 */
  491.                                   {NULLH, 14,  0,DOTS      ,    6, FALSE, FALSE},
  492.                                   {NULLH, 15,  0,DOTS      ,    7, FALSE, FALSE},
  493.                                   {NULLH, 16,  0,DOTS      ,    8, FALSE, FALSE},
  494.                                   {NULLH, 17,  0,DOTS      ,    9, FALSE, FALSE},
  495.                                   {NULLH,  9,  0,DOTS      ,    1, FALSE, FALSE}, /*  55 */
  496.                                   {NULLH, 10,  0,DOTS      ,    2, FALSE, FALSE},
  497.                                   {NULLH, 11,  0,DOTS      ,    3, FALSE, FALSE},
  498.                                   {NULLH, 12,  0,DOTS      ,    4, FALSE, FALSE},
  499.                                   {NULLH, 13,  0,DOTS      ,    5, FALSE, FALSE},
  500.                                   {NULLH, 14,  0,DOTS      ,    6, FALSE, FALSE}, /*  60 */
  501.                                   {NULLH, 15,  0,DOTS      ,    7, FALSE, FALSE},
  502.                                   {NULLH, 16,  0,DOTS      ,    8, FALSE, FALSE},
  503.                                   {NULLH, 17,  0,DOTS      ,    9, FALSE, FALSE},
  504.                                   {NULLH,  9,  0,DOTS      ,    1, FALSE, FALSE},
  505.                                   {NULLH, 10,  0,DOTS      ,    2, FALSE, FALSE}, /*  65 */
  506.                                   {NULLH, 11,  0,DOTS      ,    3, FALSE, FALSE},
  507.                                   {NULLH, 12,  0,DOTS      ,    4, FALSE, FALSE},
  508.                                   {NULLH, 13,  0,DOTS      ,    5, FALSE, FALSE},
  509.                                   {NULLH, 14,  0,DOTS      ,    6, FALSE, FALSE},
  510.                                   {NULLH, 15,  0,DOTS      ,    7, FALSE, FALSE}, /*  70 */
  511.                                   {NULLH, 16,  0,DOTS      ,    8, FALSE, FALSE},
  512.                                   {NULLH, 17,  0,DOTS      ,    9, FALSE, FALSE},
  513.                                   {NULLH, 18,  0,BAMBOO    ,    1, FALSE, FALSE},
  514.                                   {NULLH, 19,  0,BAMBOO    ,    2, FALSE, FALSE},
  515.                                   {NULLH, 20,  0,BAMBOO    ,    3, FALSE, FALSE}, /*  75 */
  516.                                   {NULLH, 21,  0,BAMBOO    ,    4, FALSE, FALSE},
  517.                                   {NULLH, 22,  0,BAMBOO    ,    5, FALSE, FALSE},
  518.                                   {NULLH, 23,  0,BAMBOO    ,    6, FALSE, FALSE},
  519.                                   {NULLH, 24,  0,BAMBOO    ,    7, FALSE, FALSE},
  520.                                   {NULLH, 25,  0,BAMBOO    ,    8, FALSE, FALSE}, /*  80 */
  521.                                   {NULLH, 26,  0,BAMBOO    ,    9, FALSE, FALSE},
  522.                                   {NULLH, 18,  0,BAMBOO    ,    1, FALSE, FALSE},
  523.                                   {NULLH, 19,  0,BAMBOO    ,    2, FALSE, FALSE},
  524.                                   {NULLH, 20,  0,BAMBOO    ,    3, FALSE, FALSE},
  525.                                   {NULLH, 21,  0,BAMBOO    ,    4, FALSE, FALSE}, /*  85 */
  526.                                   {NULLH, 22,  0,BAMBOO    ,    5, FALSE, FALSE},
  527.                                   {NULLH, 23,  0,BAMBOO    ,    6, FALSE, FALSE},
  528.                                   {NULLH, 24,  0,BAMBOO    ,    7, FALSE, FALSE},
  529.                                   {NULLH, 25,  0,BAMBOO    ,    8, FALSE, FALSE},
  530.                                   {NULLH, 26,  0,BAMBOO    ,    9, FALSE, FALSE}, /*  90 */
  531.                                   {NULLH, 18,  0,BAMBOO    ,    1, FALSE, FALSE},
  532.                                   {NULLH, 19,  0,BAMBOO    ,    2, FALSE, FALSE},
  533.                                   {NULLH, 20,  0,BAMBOO    ,    3, FALSE, FALSE},
  534.                                   {NULLH, 21,  0,BAMBOO    ,    4, FALSE, FALSE},
  535.                                   {NULLH, 22,  0,BAMBOO    ,    5, FALSE, FALSE}, /*  95 */
  536.                                   {NULLH, 23,  0,BAMBOO    ,    6, FALSE, FALSE},
  537.                                   {NULLH, 24,  0,BAMBOO    ,    7, FALSE, FALSE},
  538.                                   {NULLH, 25,  0,BAMBOO    ,    8, FALSE, FALSE},
  539.                                   {NULLH, 26,  0,BAMBOO    ,    9, FALSE, FALSE},
  540.                                   {NULLH, 18,  0,BAMBOO    ,    1, FALSE, FALSE}, /* 100 */
  541.                                   {NULLH, 19,  0,BAMBOO    ,    2, FALSE, FALSE},
  542.                                   {NULLH, 20,  0,BAMBOO    ,    3, FALSE, FALSE},
  543.                                   {NULLH, 21,  0,BAMBOO    ,    4, FALSE, FALSE},
  544.                                   {NULLH, 22,  0,BAMBOO    ,    5, FALSE, FALSE},
  545.                                   {NULLH, 23,  0,BAMBOO    ,    6, FALSE, FALSE}, /* 105 */
  546.                                   {NULLH, 24,  0,BAMBOO    ,    7, FALSE, FALSE},
  547.                                   {NULLH, 25,  0,BAMBOO    ,    8, FALSE, FALSE},
  548.                                   {NULLH, 26,  0,BAMBOO    ,    9, FALSE, FALSE},
  549.                                   {NULLH, 27,  0,DRAGONS   ,    1, FALSE, FALSE},
  550.                                   {NULLH, 28,  0,DRAGONS   ,    2, FALSE, FALSE}, /* 110 */
  551.                                   {NULLH, 29,  0,DRAGONS   ,    3, FALSE, FALSE},
  552.                                   {NULLH, 27,  0,DRAGONS   ,    1, FALSE, FALSE},
  553.                                   {NULLH, 28,  0,DRAGONS   ,    2, FALSE, FALSE},
  554.                                   {NULLH, 29,  0,DRAGONS   ,    3, FALSE, FALSE},
  555.                                   {NULLH, 27,  0,DRAGONS   ,    1, FALSE, FALSE}, /* 115 */
  556.                                   {NULLH, 28,  0,DRAGONS   ,    2, FALSE, FALSE},
  557.                                   {NULLH, 29,  0,DRAGONS   ,    3, FALSE, FALSE},
  558.                                   {NULLH, 27,  0,DRAGONS   ,    1, FALSE, FALSE},
  559.                                   {NULLH, 28,  0,DRAGONS   ,    2, FALSE, FALSE},
  560.                                   {NULLH, 29,  0,DRAGONS   ,    3, FALSE, FALSE}, /* 120 */
  561.                                   {NULLH, 30,  0,WINDS     ,    1, FALSE, FALSE},
  562.                                   {NULLH, 31,  0,WINDS     ,    2, FALSE, FALSE},
  563.                                   {NULLH, 32,  0,WINDS     ,    3, FALSE, FALSE},
  564.                                   {NULLH, 33,  0,WINDS     ,    4, FALSE, FALSE},
  565.                                   {NULLH, 30,  0,WINDS     ,    1, FALSE, FALSE}, /* 125 */
  566.                                   {NULLH, 31,  0,WINDS     ,    2, FALSE, FALSE},
  567.                                   {NULLH, 32,  0,WINDS     ,    3, FALSE, FALSE},
  568.                                   {NULLH, 33,  0,WINDS     ,    4, FALSE, FALSE},
  569.                                   {NULLH, 30,  0,WINDS     ,    1, FALSE, FALSE},
  570.                                   {NULLH, 31,  0,WINDS     ,    2, FALSE, FALSE}, /* 130 */
  571.                                   {NULLH, 32,  0,WINDS     ,    3, FALSE, FALSE},
  572.                                   {NULLH, 33,  0,WINDS     ,    4, FALSE, FALSE},
  573.                                   {NULLH, 30,  0,WINDS     ,    1, FALSE, FALSE},
  574.                                   {NULLH, 31,  0,WINDS     ,    2, FALSE, FALSE},
  575.                                   {NULLH, 32,  0,WINDS     ,    3, FALSE, FALSE}, /* 135 */
  576.                                   {NULLH, 33,  0,WINDS     ,    4, FALSE, FALSE},
  577.                                   {NULLH, 34,  0,FLOWERS   ,    1, FALSE, FALSE},
  578.                                   {NULLH, 35,  0,FLOWERS   ,    1, FALSE, FALSE},
  579.                                   {NULLH, 36,  0,FLOWERS   ,    1, FALSE, FALSE},
  580.                                   {NULLH, 37,  0,FLOWERS   ,    1, FALSE, FALSE}, /* 140 */
  581.                                   {NULLH, 38,  0,SEASONS   ,    1, FALSE, FALSE},
  582.                                   {NULLH, 39,  0,SEASONS   ,    1, FALSE, FALSE},
  583.                                   {NULLH, 40,  0,SEASONS   ,    1, FALSE, FALSE},
  584.                                   {NULLH, 41,  0,SEASONS   ,    1, FALSE, FALSE}  /* 144 */
  585.                                  };
  586. #else
  587.   extern INT  Neighbors[NBR_OF_TILES][3];
  588.   extern INT  TilePos[NBR_OF_TILES][2];
  589.   extern TILE DefTiles[NBR_OF_TILES];
  590. #endif
  591.  
  592. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  593. /*│ undefine xSCOPE and iGLOBAL                                              │*/
  594. /*└──────────────────────────────────────────────────────────────────────────┘*/
  595. #undef xSCOPE
  596. #undef iGLOBAL
  597.  
  598. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  599. /*│ Macro definitions                                                        │*/
  600. /*└──────────────────────────────────────────────────────────────────────────┘*/
  601.  
  602. #define LONGFromRGB(R,G,B) (LONG)(((LONG)R<<16)+((LONG)G<<8)+(LONG)B)
  603.  
  604. /*┌──────────────────────────────────────────────────────────────────────────┐*/
  605. /*│ Function Prototypes                                                      │*/
  606. /*└──────────────────────────────────────────────────────────────────────────┘*/
  607. void *MemAlloc(USHORT size);
  608. BOOL  ClearMsgQueue(void);
  609. void  CreationAdjustment(void);
  610.  
  611. /*─── Game Functions ─────────────────────────────────────────────────────────*/
  612. void ShuffleTiles(void);
  613. void DealTiles(void);
  614. BOOL IsTileSelectable(INT id);
  615.  
  616. /*─── Window Functions ───────────────────────────────────────────────────────*/
  617. FNWP MainWndProc;
  618. FNWP TileWndProc;
  619. FNWP AboutWindowProc;
  620. FNWP NoMoreWindowProc;
  621. FNWP FrameSubClass;
  622. #endif  /* IPF */
  623.