6a65b4c611f443c0a6082e9794251c81fbdca748
[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, 2010, 2011 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   BYTE charset;\r
63 } MyFontParams;\r
64 \r
65 typedef struct {\r
66   char *def;\r
67   MyFontParams mfp;\r
68   LOGFONT lf;\r
69   HFONT hf;\r
70 } MyFont;\r
71 \r
72 typedef enum { \r
73   SizeTiny, SizeTeeny, SizeDinky, SizePetite, SizeSlim, SizeSmall,\r
74   SizeMediocre, SizeMiddling, SizeAverage, SizeModerate, SizeMedium,\r
75   SizeBulky, SizeLarge, SizeBig, SizeHuge, SizeGiant, SizeColossal,\r
76   SizeTitanic, NUM_SIZES \r
77 } BoardSize;\r
78 \r
79 typedef struct {\r
80     COLORREF color;\r
81     int effects;\r
82     char *name;\r
83 } MyColorizeAttribs;\r
84 \r
85 typedef struct {\r
86   char* name;\r
87   void* data;\r
88   int flag; // [HGM] needed to indicate if data was malloc'ed or not\r
89 } MySound;\r
90 \r
91 typedef struct {\r
92     COLORREF color;\r
93     int effects;\r
94     MySound sound;\r
95 } MyTextAttribs;\r
96 \r
97 /* Functions */\r
98 \r
99 BOOL InitApplication(HINSTANCE);\r
100 BOOL InitInstance(HINSTANCE, int, LPSTR);\r
101 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);\r
102 LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);\r
103 LRESULT CALLBACK BoardSizeDlg(HWND, UINT, WPARAM, LPARAM);\r
104 LRESULT CALLBACK ButtonProc(HWND, UINT, WPARAM, LPARAM);\r
105 VOID InitAppData(LPSTR);\r
106 VOID InitDrawingColors(VOID);\r
107 VOID InitDrawingSizes(BoardSize boardSize, int flags);\r
108 VOID InitMenuChecks(VOID);\r
109 VOID ICSInitScript(VOID);\r
110 BOOL CenterWindow(HWND hwndChild, HWND hwndParent);\r
111 VOID ResizeEditPlusButtons(HWND hDlg, HWND hText, int sizeX, int sizeY, int newSizeX, int newSizeY);\r
112 VOID PromotionPopup(HWND hwnd);\r
113 FILE *OpenFileDialog(HWND hWnd, char *write, char *defName, char *defExt, \r
114                      char *nameFilt, char *dlgTitle, UINT *number,\r
115                      char fileTitle[MSG_SIZ], char fileName[MSG_SIZ]);\r
116 VOID InputEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);\r
117 DWORD InputThread(LPVOID arg);\r
118 DWORD NonOvlInputThread(LPVOID arg);\r
119 DWORD SocketInputThread(LPVOID arg);\r
120 BOOL ChangeColor(HWND hwnd, COLORREF *which);\r
121 VOID ChangeBoardSize(BoardSize newSize);\r
122 BOOL APIENTRY MyCreateFont(HWND hwnd, MyFont *font);\r
123 VOID ErrorPopDown(VOID);\r
124 VOID EnsureOnScreen(int *x, int *y, int minX, int minY);\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, Boolean quit);\r
136 void SaveSettings(char* name);\r
137 BOOL BrowseForFolder( const char * title, char * path );\r
138 VOID TourneyPopup();\r
139 VOID LoadEnginePopUp();\r
140 VOID LoadOptionsPopup(HWND hDlg);\r
141 VOID InitTextures();\r
142 \r
143 /* Constants */\r
144 \r
145 #define CLOCK_FONT 0\r
146 #define MESSAGE_FONT 1\r
147 #define COORD_FONT 2\r
148 #define CONSOLE_FONT 3\r
149 #define COMMENT_FONT 4\r
150 #define EDITTAGS_FONT 5\r
151 #define MOVEHISTORY_FONT 6\r
152 #define GAMELIST_FONT 7\r
153 #define NUM_FONTS 8\r
154 \r
155 /* Positions of some menu items.  Origin is zero and separator lines count. */\r
156 /* It's gross that these are needed. */\r
157 #define ACTION_POS 4     /* Posn of "Action" on menu bar */\r
158 #define OPTIONS_POS 6    /* Posn of "Options" on menu bar */\r
159 /* end grossness */\r
160 \r
161 extern MyFont *font[NUM_SIZES][NUM_FONTS];\r
162 \r
163 #define WM_USER_Input                 (WM_USER + 4242)\r
164 #define WM_USER_Mouseleave            (WM_USER + 4243)\r
165 #define WM_USER_GetConsoleBackground  (WM_USER + 4244)\r
166 \r
167 #define CLOCK_TIMER_ID        51\r
168 #define LOAD_GAME_TIMER_ID    52\r
169 #define ANALYSIS_TIMER_ID     53\r
170 #define MOUSE_TIMER_ID        54\r
171 #define DELAYED_TIMER_ID      55\r
172 \r
173 #define SOLID_PIECE           0\r
174 #define OUTLINE_PIECE         1\r
175 #define WHITE_PIECE           2\r
176 \r
177 #define COPY_TMP "wbcopy.tmp"\r
178 #define PASTE_TMP "wbpaste.tmp"\r
179 \r
180 /* variables */\r
181 extern HINSTANCE hInst;\r
182 extern HWND hwndMain;\r
183 extern BoardSize boardSize;\r
184 \r
185 // [HGM] Some stuff to allo a platform-independent reference to windows\r
186 // This should be moved to frontend.h in due time\r
187 \r
188 typedef enum {\r
189   W_Main, W_Console, W_Comment, W_Tags, W_GameList, \r
190   W_MoveHist, W_EngineOut, NUM_WINDOWS\r
191 } WindowID;\r
192 \r
193 extern WindowPlacement placementTab[NUM_WINDOWS];\r
194 extern HWND hwndTab[NUM_WINDOWS]; // this remains pure front-end.\r
195 \r
196 void Translate( HWND hDlg, int id);
197 VOID InitWindowPlacement( WindowPlacement * wp );\r
198 VOID RestoreWindowPlacement( HWND hWnd, WindowPlacement * wp );\r
199 VOID ReattachAfterMove( LPRECT lprcOldPos, int new_x, int new_y, HWND hWndChild, WindowPlacement * pwpChild );\r
200 VOID ReattachAfterSize( LPRECT lprcOldPos, int new_w, int new_h, HWND hWndChild, WindowPlacement * pwpChild );\r
201 BOOL GetActualPlacement( HWND hWnd, WindowPlacement * wp );\r
202 \r
203 VOID MoveHistoryPopUp();\r
204 VOID MoveHistoryPopDown();\r
205 extern HWND moveHistoryDialog;\r
206 \r
207 VOID EvalGraphPopUp();\r
208 VOID EvalGraphPopDown();\r
209 extern HWND evalGraphDialog;\r
210 \r
211 extern HWND engineOutputDialog;\r
212 \r
213 VOID ShowGameListProc(void);\r
214 extern HWND gameListDialog;\r
215 \r
216 VOID EditTagsProc(void);\r
217 extern HWND editTagsDialog;\r