another bug fix found by Stanislav Brabec
[xboard.git] / winboard / winboard.h
1 /*\r
2  * WinBoard.h -- Definitions for Windows NT front end to XBoard\r
3  *\r
4  * Copyright 1991 by Digital Equipment Corporation, Maynard,\r
5  * Massachusetts. \r
6  *\r
7  * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,\r
8  * 2007, 2008, 2009 Free Software Foundation, Inc.\r
9  *\r
10  * Enhancements Copyright 2005 Alessandro Scotti\r
11  *\r
12  * The following terms apply to Digital Equipment Corporation's copyright\r
13  * interest in XBoard:\r
14  * ------------------------------------------------------------------------\r
15  * All Rights Reserved\r
16  *\r
17  * Permission to use, copy, modify, and distribute this software and its\r
18  * documentation for any purpose and without fee is hereby granted,\r
19  * provided that the above copyright notice appear in all copies and that\r
20  * both that copyright notice and this permission notice appear in\r
21  * supporting documentation, and that the name of Digital not be\r
22  * used in advertising or publicity pertaining to distribution of the\r
23  * software without specific, written prior permission.\r
24  *\r
25  * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING\r
26  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL\r
27  * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR\r
28  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r
29  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r
30  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS\r
31  * SOFTWARE.\r
32  * ------------------------------------------------------------------------\r
33  *\r
34  * The following terms apply to the enhanced version of XBoard\r
35  * distributed by the Free Software Foundation:\r
36  * ------------------------------------------------------------------------\r
37  *\r
38  * GNU XBoard is free software: you can redistribute it and/or modify\r
39  * it under the terms of the GNU General Public License as published by\r
40  * the Free Software Foundation, either version 3 of the License, or (at\r
41  * your option) any later version.\r
42  *\r
43  * GNU XBoard is distributed in the hope that it will be useful, but\r
44  * WITHOUT ANY WARRANTY; without even the implied warranty of\r
45  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
46  * General Public License for more details.\r
47  *\r
48  * You should have received a copy of the GNU General Public License\r
49  * along with this program. If not, see http://www.gnu.org/licenses/.  *\r
50  *\r
51  *------------------------------------------------------------------------\r
52  ** See the file ChangeLog for a revision history.  */\r
53 \r
54 #include "resource.h"\r
55 #include <dlgs.h>\r
56 \r
57 /* Types */\r
58 typedef struct {\r
59   char faceName[LF_FACESIZE];\r
60   float pointSize;\r
61   BYTE bold, italic, underline, strikeout;\r
62 } MyFontParams;\r
63 \r
64 typedef struct {\r
65   char *def;\r
66   MyFontParams mfp;\r
67   LOGFONT lf;\r
68   HFONT hf;\r
69 } MyFont;\r
70 \r
71 typedef enum { \r
72   SizeTiny, SizeTeeny, SizeDinky, SizePetite, SizeSlim, SizeSmall,\r
73   SizeMediocre, SizeMiddling, SizeAverage, SizeModerate, SizeMedium,\r
74   SizeBulky, SizeLarge, SizeBig, SizeHuge, SizeGiant, SizeColossal,\r
75   SizeTitanic, NUM_SIZES \r
76 } BoardSize;\r
77 \r
78 typedef struct {\r
79     COLORREF color;\r
80     int effects;\r
81     char *name;\r
82 } MyColorizeAttribs;\r
83 \r
84 typedef struct {\r
85   char* name;\r
86   void* data;\r
87 } MySound;\r
88 \r
89 typedef struct {\r
90     COLORREF color;\r
91     int effects;\r
92     MySound sound;\r
93 } MyTextAttribs;\r
94 \r
95 /* Functions */\r
96 \r
97 BOOL InitApplication(HINSTANCE);\r
98 BOOL InitInstance(HINSTANCE, int, LPSTR);\r
99 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);\r
100 LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);\r
101 LRESULT CALLBACK BoardSizeDlg(HWND, UINT, WPARAM, LPARAM);\r
102 LRESULT CALLBACK ButtonProc(HWND, UINT, WPARAM, LPARAM);\r
103 VOID InitAppData(LPSTR);\r
104 VOID InitDrawingColors(VOID);\r
105 VOID InitDrawingSizes(BoardSize boardSize, int flags);\r
106 VOID InitMenuChecks(VOID);\r
107 VOID ICSInitScript(VOID);\r
108 BOOL CenterWindow(HWND hwndChild, HWND hwndParent);\r
109 VOID ResizeEditPlusButtons(HWND hDlg, HWND hText, int sizeX, int sizeY, int newSizeX, int newSizeY);\r
110 VOID PromotionPopup(HWND hwnd);\r
111 FILE *OpenFileDialog(HWND hWnd, char *write, char *defName, char *defExt, \r
112                      char *nameFilt, char *dlgTitle, UINT *number,\r
113                      char fileTitle[MSG_SIZ], char fileName[MSG_SIZ]);\r
114 VOID InputEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);\r
115 DWORD InputThread(LPVOID arg);\r
116 DWORD NonOvlInputThread(LPVOID arg);\r
117 DWORD SocketInputThread(LPVOID arg);\r
118 BOOL ChangeColor(HWND hwnd, COLORREF *which);\r
119 VOID ChangeBoardSize(BoardSize newSize);\r
120 BOOL APIENTRY MyCreateFont(HWND hwnd, MyFont *font);\r
121 VOID ErrorPopDown(VOID);\r
122 VOID EnsureOnScreen(int *x, int *y, int minX, int minY);\r
123 typedef char GetFunc(void *getClosure);\r
124 VOID ParseArgs(GetFunc get, void *cl);\r
125 HBITMAP \r
126 DoLoadBitmap(HINSTANCE hinst, char *piece, int squareSize, char *suffix);\r
127 COLORREF ParseColorName(char *name);\r
128 void ParseAttribs(COLORREF *color, int *effects, char* argValue);\r
129 VOID CreateFontInMF(MyFont *mf);\r
130 VOID ChangedConsoleFont();\r
131 VOID ParseFontName(char *name, MyFontParams *mfp);\r
132 void InitComboStrings(HANDLE hwndCombo, char **cd);\r
133 BOOLEAN MyLoadSound(MySound *ms);\r
134 BOOLEAN MyPlaySound(MySound *ms);\r
135 VOID ExitArgError(char *msg, char *badArg);\r
136 \r
137 /* Constants */\r
138 \r
139 #define CLOCK_FONT 0\r
140 #define MESSAGE_FONT 1\r
141 #define COORD_FONT 2\r
142 #define CONSOLE_FONT 3\r
143 #define COMMENT_FONT 4\r
144 #define EDITTAGS_FONT 5\r
145 #define MOVEHISTORY_FONT 6\r
146 #define NUM_FONTS 7\r
147 \r
148 /* Positions of some menu items.  Origin is zero and separator lines count. */\r
149 /* It's gross that these are needed. */\r
150 #define ACTION_POS 2     /* Posn of "Action" on menu bar */\r
151 #define OPTIONS_POS 4    /* Posn of "Options" on menu bar */\r
152 #define ICS_POS 4        /* Posn of "ICS " on Options menu */\r
153 #define SOUNDS_POS 6     /* Posn of "Sounds" on Options menu */\r
154 /* end grossness */\r
155 \r
156 extern MyFont *font[NUM_SIZES][NUM_FONTS];\r
157 \r
158 #define WM_USER_Input                 (WM_USER + 4242)\r
159 #define WM_USER_Mouseleave            (WM_USER + 4243)\r
160 #define WM_USER_GetConsoleBackground  (WM_USER + 4244)\r
161 \r
162 #define CLOCK_TIMER_ID        51\r
163 #define LOAD_GAME_TIMER_ID    52\r
164 #define ANALYSIS_TIMER_ID     53\r
165 #define MOUSE_TIMER_ID        54\r
166 #define DELAYED_TIMER_ID      55\r
167 \r
168 #define SOLID_PIECE           0\r
169 #define OUTLINE_PIECE         1\r
170 #define WHITE_PIECE           2\r
171 \r
172 #define COPY_TMP "wbcopy.tmp"\r
173 #define PASTE_TMP "wbpaste.tmp"\r
174 \r
175 /* [AS] Layout management */\r
176 typedef struct {\r
177     Boolean visible;\r
178     int x;\r
179     int y;\r
180     int width;\r
181     int height;\r
182 } WindowPlacement;\r
183 \r
184 VOID InitWindowPlacement( WindowPlacement * wp );\r
185 \r
186 VOID RestoreWindowPlacement( HWND hWnd, WindowPlacement * wp );\r
187 \r
188 VOID ReattachAfterMove( LPRECT lprcOldPos, int new_x, int new_y, HWND hWndChild, WindowPlacement * pwpChild );\r
189 \r
190 VOID ReattachAfterSize( LPRECT lprcOldPos, int new_w, int new_h, HWND hWndChild, WindowPlacement * pwpChild );\r