]>
Commit | Line | Data |
---|---|---|
9b3e9736 | 1 | [The patch is further down.] |
2 | ||
3 | Bug fixes: | |
4 | ||
5 | - Fixed a bug in the networking read loop | |
6 | (conn.c:newNetData). The loop around the read() | |
7 | breaks when taken more than once. Results were | |
8 | damaged game/player lists and garbage in the | |
9 | terminal window. | |
10 | ||
11 | - Fixed a bug in the bPropW handling in the rc-file. | |
12 | Small windows sizes were not stored. [Note: When | |
13 | starting cgoban (with an old config file) the first | |
14 | time after applying the patch windows will be half | |
15 | the wide that they used to be.] | |
16 | ||
17 | - Fixed a bug when inserting text into a text window. | |
18 | The passed width was wrong so that it forces a line | |
19 | break of the string when it was not neccesary. | |
20 | ||
21 | - Inserted a missing str_clip(cmdBuild,0) into | |
22 | client/game.c. | |
23 | ||
24 | - Fixed a bug in CTRL-D handling of the tbin widget. | |
25 | (SEGV when pressed on last char in last line (not | |
26 | always immediate)) | |
27 | ||
28 | - NNGS guest login sometimes hang. Server sends "#> " | |
29 | (two spaces) which was not recognized as a prompt. | |
30 | ||
31 | ||
32 | Enhancements: | |
33 | ||
34 | - Added cross mark support (on board, in sgf files, in | |
35 | editor). | |
36 | ||
37 | - Added support for "titled games". IGS send a "Game | |
38 | is titled: ...." for each move of a titled game. | |
39 | These were shown in the terminal window. I forward | |
40 | these titles to the goban widget where they will be | |
41 | displayed in the title box. | |
42 | ||
43 | - Added the player names into the timer/score boxes. | |
44 | The rows of black/white stones are reduced to a | |
45 | single stone and the player's name and rank are | |
46 | shown right of that stone. (That was done after I | |
47 | noticed that the names may not be visible in titled | |
48 | games.) | |
49 | ||
50 | - Optional (compile time support) for a fixed width | |
51 | font in the terminal window. IGS output assumes a | |
52 | fixed width font and the ASCII-graphics, tables, and | |
53 | help files will be messed up with proportional fonts. | |
54 | Change the TBIN_FONTNUM define in | |
55 | wmslib/src/but/tbin.h. | |
56 | ||
57 | - Made the game list window a little bit larger so that | |
58 | 3-digit game numbers will fit into the first column. | |
59 | ||
60 | - In the game list window the common values of some | |
61 | fields (board size=19, move number=0, handicap=0, | |
62 | observers=0) are replaced by a single dot. Not only | |
63 | makes this the window cleaner, it's also easier to | |
64 | look for special games (unusual board size, high | |
65 | handycap, etc). | |
66 | ||
67 | - Added a key (XK_Insert) to insert the current | |
68 | selection. | |
69 | ||
70 | - The resource name changed to "CGoban" from | |
71 | "Basicwin". That way the window manager can properly | |
72 | identify the windows. | |
73 | ||
74 | - Added a '-connect <name>' command line option and | |
75 | changed the '-nngs/igs' option slightly. '-connect' | |
76 | looks for the given name in the setup's server list | |
77 | and uses that server entry to connect to. | |
78 | '-nngs/igs' has become a shortcut for '-connect | |
79 | NNGS/IGS'. (Original -nngs/igs took always the | |
80 | first/second entry of the list whatever server that | |
81 | may be.) | |
82 | (TODO: gmpSetup still has the same problem). | |
83 | ||
84 | - '-connect/-igs/-nngs' does an autologin without | |
85 | putting up the username/password requester. Old | |
86 | behaviour selectable by #if. (I'm not sure if the | |
87 | cliData_decRef(cd) in src/main.c:connect_to is | |
88 | required. It seems to be but even without everything | |
89 | seems to work correct...) | |
90 | ||
91 | - When playing/observing the say/kibitz input box is | |
92 | activated by default. (Pressing RETURN on an empty | |
93 | line still switches back to 'browse-game-mode'. And | |
94 | the input box is empty on start...) | |
95 | ||
96 | - Use the bold font for the remaining time / score. | |
97 | (And added some space too.) | |
98 | ||
99 | - Put Helvetica as the first font in the font lists. | |
100 | The serif fonts are too hard to read with these low | |
101 | resolutions. | |
102 | ||
103 | - I removed all these strange cursor shapes (annoying, | |
104 | especially with the different hotspot locations). | |
105 | ||
106 | - Made the idle cursor look dull (recolored to some | |
107 | shades of gray). | |
108 | ||
109 | - Made the scroll speed faster (8 lines/second instead | |
110 | of 2). | |
111 | ||
112 | ||
113 | Ciao, ET. <froese@gmx.de> | |
114 | ||
115 | ||
116 | diff -ru cgoban-1.9.12-orig/src/cgbuts.c cgoban-1.9.12-et1/src/cgbuts.c | |
117 | --- cgoban-1.9.12-orig/src/cgbuts.c Tue Jan 25 05:40:24 2000 | |
118 | +++ cgoban-1.9.12-et1/src/cgbuts.c Mon May 13 22:52:48 2002 | |
119 | @@ -481,7 +481,10 @@ | |
120 | lw = (w + 7) / 15; | |
121 | if (lw < 1) | |
122 | lw = 1; | |
123 | - XSetLineAttributes(dpy, gc, lw, LineSolid, CapButt, JoinMiter); | |
124 | + XSetLineAttributes(dpy, gc, lw, LineSolid, CapProjecting, JoinMiter); | |
125 | + /* all of them require abs coordinates */ | |
126 | + x -= win->xOff; | |
127 | + y -= win->yOff; | |
128 | } | |
129 | if (piece == goStone_black) | |
130 | butEnv_setXFg(env, BUT_WHITE); | |
131 | @@ -490,35 +493,43 @@ | |
132 | switch(markType) { | |
133 | case goMark_none: | |
134 | break; | |
135 | + case goMark_cross: | |
136 | + off = w/3; | |
137 | + XDrawLine(dpy, win->win, gc, x+off, y+off, x+2*off, y+2*off); | |
138 | + XDrawLine(dpy, win->win, gc, x+2*off, y+off, x+off, y+2*off); | |
139 | + break; | |
140 | case goMark_triangle: | |
141 | - points[0].x = x+w/2 - win->xOff; | |
142 | - points[0].y = y+lw - win->yOff; | |
143 | - points[1].x = x+((w*0.9330127)-(lw*0.8660254)+0.5) - win->xOff; | |
144 | - points[1].y = y+((w*0.75)-(lw*0.5)+0.5) - win->yOff; | |
145 | - points[2].x = x+((w*0.0669873)+(lw*0.8660254)+0.5) - win->xOff; | |
146 | + #define SIN60 0.8660254038 | |
147 | + #define COS60 0.5 | |
148 | + points[0].x = x+w/2; | |
149 | + points[0].y = y+lw-1; | |
150 | + points[1].x = x+(w*(0.5+SIN60/2) - lw*SIN60 + 0.5); | |
151 | + points[1].y = y+(w*(0.5+COS60/2) - lw*COS60 + 0.5); | |
152 | + points[2].x = x+(w*(0.5-SIN60/2) + lw*SIN60 - 0.5); | |
153 | points[2].y = points[1].y; | |
154 | points[3] = points[0]; | |
155 | XDrawLines(dpy, win->win, gc, points, 4, CoordModeOrigin); | |
156 | break; | |
157 | case goMark_ko: | |
158 | case goMark_square: | |
159 | - off = (int)(w*0.14644661+lw*0.5+0.5); | |
160 | - XDrawRectangle(dpy, win->win, gc, x + off - win->xOff, y + off - win->yOff, | |
161 | - w-off*2-(lw&1),w-off*2-(lw&1)); | |
162 | + #define SIN45 0.7071067812 | |
163 | + off = w*(1-SIN45) + lw + 1; | |
164 | + XDrawRectangle(dpy, win->win, gc, x + off/2, y + off/2, w-off, w-off); | |
165 | break; | |
166 | case goMark_lastMove: | |
167 | case goMark_circle: | |
168 | off = (w + 1) / 4; | |
169 | - XDrawArc(dpy, win->win, gc, x + off - win->xOff, y + off - win->yOff, | |
170 | + XDrawArc(dpy, win->win, gc, x + off, y + off, | |
171 | w-off*2-1,w-off*2-1, 0,360*64); | |
172 | break; | |
173 | case goMark_smBlack: | |
174 | case goMark_smWhite: | |
175 | + off = (w + 1) / 4; | |
176 | if (markType == goMark_smBlack) | |
177 | - cgbuts_drawp(b, win, goStone_black, FALSE, x+(w+1)/4,y+(w+1)/4, w/2, | |
178 | + cgbuts_drawp(b, win, goStone_black, FALSE, x+off,y+off, w/2, | |
179 | stoneVersion, dx,dy,dw,dh); | |
180 | else | |
181 | - cgbuts_drawp(b, win, goStone_white, FALSE, x+(w+1)/4,y+(w+1)/4, w/2, | |
182 | + cgbuts_drawp(b, win, goStone_white, FALSE, x+off,y+off, w/2, | |
183 | stoneVersion, dx,dy,dw,dh); | |
184 | break; | |
185 | case goMark_letter: | |
186 | @@ -531,7 +542,7 @@ | |
187 | assert(markAux >= 0); | |
188 | if (markAux > 999) | |
189 | markAux = 999; | |
190 | - if ((markAux > 99) && (w < butEnv_fontH(env, 0) * 2)) | |
191 | + if ((markAux > 99) && (w < butEnv_fontH(env, 1) * 2)) | |
192 | sprintf(text, "%02d", markAux % 100); | |
193 | else | |
194 | sprintf(text, "%d", markAux); | |
195 | diff -ru cgoban-1.9.12-orig/src/cgbuts.h cgoban-1.9.12-et1/src/cgbuts.h | |
196 | --- cgoban-1.9.12-orig/src/cgbuts.h Tue Jan 25 05:40:24 2000 | |
197 | +++ cgoban-1.9.12-et1/src/cgbuts.h Sun Apr 21 20:04:13 2002 | |
198 | @@ -75,7 +75,7 @@ | |
199 | ||
200 | typedef enum { | |
201 | goMark_none, goMark_lastMove, goMark_ko, | |
202 | - goMark_triangle, goMark_square, goMark_circle, | |
203 | + goMark_cross, goMark_triangle, goMark_square, goMark_circle, | |
204 | goMark_letter, goMark_number, goMark_smWhite, goMark_smBlack | |
205 | } GoMarkType; | |
206 | #define goMark_max (goMark_ko + 1) | |
207 | diff -ru cgoban-1.9.12-orig/src/cgoban.c cgoban-1.9.12-et1/src/cgoban.c | |
208 | --- cgoban-1.9.12-orig/src/cgoban.c Thu Feb 28 04:34:35 2002 | |
209 | +++ cgoban-1.9.12-et1/src/cgoban.c Mon May 13 14:46:31 2002 | |
210 | @@ -91,6 +91,7 @@ | |
211 | {"board.showCoords", "t", NULL, CLPSETUP_SHOWBOOL|CLPSETUP_BOOL, NULL}, | |
212 | CLPSETUP_MSG(""), | |
213 | {"edit", "", "Edit SGF file", CLPSETUP_NOSAVE, NULL}, | |
214 | + {"connect", "", "Connect to given server", CLPSETUP_NOSAVE, NULL}, | |
215 | {"nngs", "f", "Connect to NNGS", CLPSETUP_BOOL|CLPSETUP_NOSAVE, NULL}, | |
216 | {"igs", "f", "Connect to IGS", CLPSETUP_BOOL|CLPSETUP_NOSAVE, NULL}, | |
217 | {"iconic", "f", NULL, CLPSETUP_BOOL|CLPSETUP_NOSAVE, NULL}, | |
218 | @@ -100,7 +101,7 @@ | |
219 | {"help.y", "", NULL, 0, NULL}, | |
220 | {"help.w", "28.284271", NULL, 0, NULL}, | |
221 | {"help.h", "40.0", NULL, 0, NULL}, | |
222 | - {"game.rules", "0", NULL, 0, checkRules}, | |
223 | + {"game.rules", "1", NULL, 0, checkRules}, | |
224 | {"game.size", "19", NULL, 0, checkSize}, | |
225 | {"game.komi", "5.5", NULL, 0, checkKomi}, | |
226 | {"game.handicap", "0", NULL, 0, checkHandicap}, | |
227 | @@ -109,7 +110,7 @@ | |
228 | {"local.x", "", NULL, 0, NULL}, | |
229 | {"local.y", "", NULL, 0, NULL}, | |
230 | {"local.bProp", "1.0", NULL, 0, checkBProp}, | |
231 | - {"local.bPropW", "1.0", NULL, 0, checkBProp}, | |
232 | + {"local.bPropW", "2.0", NULL, 0, checkBProp}, | |
233 | {"local.sgfName", "game.sgf", NULL, 0, NULL}, | |
234 | {"edit.x", "", NULL, 0, NULL}, | |
235 | {"edit.y", "", NULL, 0, NULL}, | |
236 | @@ -118,13 +119,13 @@ | |
237 | {"edit.toolW", "0.0", NULL, 0, NULL}, | |
238 | {"edit.toolH", "0.0", NULL, 0, NULL}, | |
239 | {"edit.bProp", "1.0", NULL, 0, checkBProp}, | |
240 | - {"edit.bPropW", "1.0", NULL, 0, checkBProp}, | |
241 | + {"edit.bPropW", "2.0", NULL, 0, checkBProp}, | |
242 | {"edit.sgfName", "seigen-minoru.sgf", NULL, 0, NULL}, | |
243 | {"edit.infoX", "", NULL, 0, NULL}, | |
244 | {"edit.infoY", "", NULL, 0, NULL}, | |
245 | {"edit.infoW", "1.0", NULL, 0, NULL}, | |
246 | {"edit.infoH", "1.0", NULL, 0, NULL}, | |
247 | - {"setup.timeType", "2", NULL, 0, checkTimeType}, | |
248 | + {"setup.timeType", "3", NULL, 0, checkTimeType}, | |
249 | {"setup.mainTime", "30:00", NULL, 0, checkTimeValue}, | |
250 | {"setup.igsBYTime", "10:00", NULL, 0, checkTimeValue}, | |
251 | {"setup.igsBYStones", "25", NULL, 0, checkBYStones}, | |
252 | @@ -189,13 +190,13 @@ | |
253 | {"client.x", "", NULL, 0, NULL}, | |
254 | {"client.y", "", NULL, 0, NULL}, | |
255 | {"client.bProp", "1.0", NULL, 0, checkBProp}, | |
256 | - {"client.bPropW", "1.0", NULL, 0, checkBProp}, | |
257 | + {"client.bPropW", "2.0", NULL, 0, checkBProp}, | |
258 | {"client.numberKibitz", "f", NULL, CLPSETUP_BOOL, NULL}, | |
259 | {"client.noTypo", "f", NULL, CLPSETUP_BOOL, NULL}, | |
260 | {"client.look.x", "", NULL, 0, NULL}, | |
261 | {"client.look.y", "", NULL, 0, NULL}, | |
262 | {"client.look.bProp", "1.0", NULL, 0, checkBProp}, | |
263 | - {"client.look.bPropW", "1.0", NULL, 0, checkBProp}, | |
264 | + {"client.look.bPropW", "2.0", NULL, 0, checkBProp}, | |
265 | {"client.saykib", "1", NULL, 0, NULL}, | |
266 | {"client.warnLimit", "30", NULL, 0, NULL}, | |
267 | {"abut.fsel.x", "", NULL, 0, NULL}, | |
268 | @@ -287,6 +288,7 @@ | |
269 | butEnv_setFont(cg->env, 1, msg_labelFonts, | |
270 | (cg->fontH*5+3)/6); | |
271 | butEnv_setFont(cg->env, 2, msg_bFonts, cg->fontH); | |
272 | + butEnv_setFont(cg->env, 3, msg_fFonts, cg->fontH); | |
273 | cgbuts_init(&cg->cgbuts, cg->env, cg->rnd, color, | |
274 | clp_getBool(cg->clp, "client.noTypo"), | |
275 | clp_getBool(cg->clp, "hiContrast"), | |
276 | diff -ru cgoban-1.9.12-orig/src/client/board.c cgoban-1.9.12-et1/src/client/board.c | |
277 | --- cgoban-1.9.12-orig/src/client/board.c Tue Jan 25 05:40:25 2000 | |
278 | +++ cgoban-1.9.12-et1/src/client/board.c Fri Apr 12 10:03:39 2002 | |
279 | @@ -65,7 +65,7 @@ | |
280 | static const ButKey ctrlKeys[] = {{XK_Control_L, 0,0}, | |
281 | {XK_Control_R,0,0}, {0,0,0}}; | |
282 | CliBoard *cli; | |
283 | - Str gameName; | |
284 | + Str gameName, whiteName, blackName; | |
285 | ||
286 | cli = wms_malloc(sizeof(CliBoard)); | |
287 | MAGIC_SET(cli); | |
288 | @@ -99,14 +99,20 @@ | |
289 | cli->game->forcePlay = TRUE; | |
290 | cli->sgf->mode = sgfInsert_variant; | |
291 | str_init(&gameName); | |
292 | + str_init(&whiteName); | |
293 | + str_init(&blackName); | |
294 | + str_print(&whiteName, "%s %s", str_chars(wName), str_chars(wRank)); | |
295 | + str_print(&blackName, "%s %s", str_chars(bName), str_chars(bRank)); | |
296 | str_print(&gameName, msg_cliGameName, gameNum, | |
297 | - str_chars(wName), str_chars(wRank), | |
298 | - str_chars(bName), str_chars(bRank)); | |
299 | + str_chars(&whiteName), str_chars(&blackName)); | |
300 | cli->goban = goban_create(cli->cg, &actions, cli, cli->game, | |
301 | - "client", str_chars(&gameName)); | |
302 | + "client", str_chars(&gameName), | |
303 | + str_chars(&whiteName), str_chars(&blackName)); | |
304 | goban_startTimer(cli->goban, goGame_whoseMove(cli->game)); | |
305 | goban_setHold(cli->goban, TRUE); | |
306 | but_setFlags(cli->goban->save, BUT_NOPRESS); | |
307 | + str_deinit(&blackName); | |
308 | + str_deinit(&whiteName); | |
309 | str_deinit(&gameName); | |
310 | cli->goban->iDec1 = grid_create(&cli->cg->cgbuts, NULL, NULL, | |
311 | cli->goban->iWin, 2, BUT_DRAWABLE, 0); | |
312 | diff -ru cgoban-1.9.12-orig/src/client/conn.c cgoban-1.9.12-et1/src/client/conn.c | |
313 | --- cgoban-1.9.12-orig/src/client/conn.c Tue Jan 25 05:40:25 2000 | |
314 | +++ cgoban-1.9.12-et1/src/client/conn.c Thu May 9 19:45:22 2002 | |
315 | @@ -142,64 +142,70 @@ | |
316 | ||
317 | static ButOut newNetData(void *packet, int fd) { | |
318 | CliConn *cc = packet; | |
319 | - int amtRead, totalAmtRead, readLen, lineStart, lineEnd; | |
320 | + int len; | |
321 | ||
322 | assert(MAGIC(cc)); | |
323 | - totalAmtRead = 0; | |
324 | - do { | |
325 | - if (cc->inLen + totalAmtRead + 1 >= cc->inSize) | |
326 | - expandBuf(&cc->inBuf, &cc->inSize, cc->inLen); | |
327 | - readLen = cc->inSize - (cc->inLen + totalAmtRead + 1); | |
328 | - amtRead = read(cc->fd, cc->inBuf + cc->inLen, readLen); | |
329 | - if (amtRead < 0) { | |
330 | - if (errno == EAGAIN) | |
331 | - amtRead = 0; | |
332 | - else { | |
333 | - cc->newData(cc->packet, NULL, errno); | |
334 | - return(0); | |
335 | - } | |
336 | - } else if (amtRead == 0) { | |
337 | + if (cc->inLen + 1 >= cc->inSize) /* +1 for \0 */ | |
338 | + expandBuf(&cc->inBuf, &cc->inSize, len); | |
339 | + /*FIXME: if server sends a sequence of non-LF chars we run OOM...*/ | |
340 | + | |
341 | + len = read(cc->fd, cc->inBuf + cc->inLen, cc->inSize - cc->inLen - 1); | |
342 | + if (len <= 0) | |
343 | + { | |
344 | + if (len == 0) /* EOF */ | |
345 | + cc->newData(cc->packet, NULL, 0); | |
346 | + else if (errno != EAGAIN) | |
347 | cc->newData(cc->packet, NULL, errno); | |
348 | - return(0); | |
349 | - } | |
350 | - totalAmtRead += amtRead; | |
351 | - } while (amtRead == readLen); | |
352 | - totalAmtRead = telnetMunge(cc, totalAmtRead); | |
353 | - if (totalAmtRead < 0) { | |
354 | + return 0; | |
355 | + } | |
356 | + | |
357 | + len = telnetMunge(cc, len); | |
358 | + if (len < 0) /* a telnet ^C packet */ | |
359 | + { | |
360 | cc->newData(cc->packet, NULL, EPIPE); | |
361 | - return(0); | |
362 | + return 0 ; | |
363 | } | |
364 | - if (totalAmtRead > 0) { | |
365 | - cc->inLen += totalAmtRead; | |
366 | - assert(cc->inLen < cc->inSize); | |
367 | - lineStart = 0; | |
368 | - for (;;) { | |
369 | - lineEnd = lineStart; | |
370 | - while ((lineEnd < cc->inLen) && (cc->inBuf[lineEnd] != '\n')) | |
371 | - ++lineEnd; | |
372 | - if ((lineEnd < cc->inLen) || | |
373 | - (cc->loginMode && | |
374 | - (((lineEnd - lineStart == 7) && | |
375 | - !strncmp(cc->inBuf + lineStart, "Login: ", 7)) || | |
376 | - ((lineEnd - lineStart == 10) && | |
377 | - !strncmp(cc->inBuf + lineStart, "Password: ", 10)) || | |
378 | - ((lineEnd - lineStart == 3) && | |
379 | - !strncmp(cc->inBuf + lineStart, "#> ", 3))))) { | |
380 | - cc->inBuf[lineEnd] = '\0'; | |
381 | -#if TRACELOG | |
382 | - printf("%s\n", cc->inBuf + lineStart); | |
383 | + | |
384 | + if (len > 0) | |
385 | + { | |
386 | + char *s = cc->inBuf; | |
387 | + char *e = s + cc->inLen + len; | |
388 | + char *p; | |
389 | + | |
390 | + *e = '\0'; | |
391 | + /* pass complete lines */ | |
392 | + while (s < e && (p = memchr(s, '\n', e - s))) | |
393 | + { | |
394 | + *p = '\0'; | |
395 | +#if TRACELOG | |
396 | + printf("`%s'\n", s); | |
397 | #endif | |
398 | - cc->newData(cc->packet, cc->inBuf + lineStart, lineEnd - lineStart); | |
399 | - lineStart = lineEnd + 1; | |
400 | - } else | |
401 | - break; | |
402 | + cc->newData(cc->packet, s, p - s); | |
403 | + s = p + 1; | |
404 | } | |
405 | - if (lineStart >= cc->inLen) { | |
406 | - cc->inLen = 0; | |
407 | - } else if (lineStart > 0) { | |
408 | - memmove(cc->inBuf, cc->inBuf + lineStart, cc->inLen - lineStart); | |
409 | - cc->inLen -= lineStart; | |
410 | + /* in login mode we may pass (some) incomplete lines */ | |
411 | + if (s < e && cc->loginMode) | |
412 | + { | |
413 | + /* strip trailing whitespace */ | |
414 | + for (p = e; p > s && isspace(p[-1]); *--p = '\0') | |
415 | + ; | |
416 | + if (!strcmp(s, "Login:") || !strcmp(s, "Password:") || !strcmp(s, "#>")) | |
417 | + { | |
418 | +#if TRACELOG | |
419 | + printf("`%s'\n", s); | |
420 | +#endif | |
421 | + cc->newData(cc->packet, s, p - s); | |
422 | + s = e + 1; | |
423 | + } | |
424 | + } | |
425 | + if (s < e) | |
426 | + { | |
427 | + cc->inLen = e - s; | |
428 | + if (s > cc->inBuf) | |
429 | + memmove(cc->inBuf, s, cc->inLen); | |
430 | } | |
431 | + else | |
432 | + cc->inLen = 0; | |
433 | } | |
434 | return(0); | |
435 | } | |
436 | diff -ru cgoban-1.9.12-orig/src/client/game.c cgoban-1.9.12-et1/src/client/game.c | |
437 | --- cgoban-1.9.12-orig/src/client/game.c Thu Feb 28 04:29:03 2002 | |
438 | +++ cgoban-1.9.12-et1/src/client/game.c Wed Apr 24 16:35:22 2002 | |
439 | @@ -115,7 +115,7 @@ | |
440 | cg = gl->data->cg; | |
441 | physH = butEnv_fontH(gl->data->cg->env, 0); | |
442 | bw = butEnv_stdBw(gl->data->cg->env); | |
443 | - minWinW = physH * 18 + bw * 8; | |
444 | + minWinW = physH * 19 + bw * 8; | |
445 | winW = minWinW + physH * 2 * clp_getInt(cg->clp, "client.games.w"); | |
446 | wHRatio = clp_getDouble(cg->clp, "client.games.h2"); | |
447 | winH = ((double)(minWinW + physH * 12) * wHRatio + 0.5); | |
448 | @@ -165,6 +165,15 @@ | |
449 | } | |
450 | ||
451 | ||
452 | +void cliGameList_gotTitle(CliGameList *gl, const char *buf) { | |
453 | + if (gl->defaultGame >= 0) { | |
454 | + CliBoard *b = gl->games[gl->defaultGame].board; | |
455 | + if (b) | |
456 | + butText_set(b->goban->labelText, buf); | |
457 | + } | |
458 | +} | |
459 | + | |
460 | + | |
461 | void cliGameList_gotMove(CliGameList *gl, const char *buf) { | |
462 | int args; | |
463 | int moveNum, handicap; | |
464 | @@ -351,6 +360,7 @@ | |
465 | cliPlayerList_playerInGame(gl->playerList, bName, gameNum); | |
466 | g->moveNum = move; | |
467 | if (g->board && g->fromMatch && (move < 2)) { | |
468 | + str_clip(&gl->data->cmdBuild, 0); | |
469 | if (g->komi != komi) | |
470 | str_print(&gl->data->cmdBuild, "komi %g\n", g->komi); | |
471 | if (g->board->moveBlack) { | |
472 | @@ -519,7 +529,6 @@ | |
473 | int fontH; | |
474 | int physFontH = butEnv_fontH(butWin_env(win), 0); | |
475 | int slideW = (physFontH * 3)/2; | |
476 | - int centerAdd; | |
477 | ||
478 | assert(MAGIC(gl)); | |
479 | fontH = gl->data->cg->fontH; | |
480 | @@ -535,28 +544,27 @@ | |
481 | slideW, physFontH); | |
482 | butCan_resizeWin(gl->swin->win, 0, butList_len(gl->list) * | |
483 | physFontH + bw * 2, TRUE); | |
484 | - centerAdd = (physFontH * 3 + 1) / 4; | |
485 | - tabs[0] = (physFontH * 2) / 2; | |
486 | - tabs[1] = (physFontH * 3) / 2; | |
487 | - tabs[2] = (physFontH * 17) / 2; | |
488 | - tabs[3] = (physFontH * 20) / 2; | |
489 | - tabs[4] = (physFontH * 37) / 2; | |
490 | - tabs[5] = (physFontH * 41) / 2; | |
491 | - tabs[6] = (physFontH * 45) / 2; | |
492 | - tabs[7] = (physFontH * 49) / 2; | |
493 | - tabs[8] = (physFontH * 53) / 2; | |
494 | - tabs[9] = (physFontH * 57) / 2; | |
495 | - if (w < physFontH * 20 + bw * 8) | |
496 | + tabs[0] = (physFontH * 3) / 2; | |
497 | + tabs[1] = (physFontH * 4) / 2; | |
498 | + tabs[2] = (physFontH * 18) / 2; | |
499 | + tabs[3] = (physFontH * 21) / 2; | |
500 | + tabs[4] = (physFontH * 38) / 2; | |
501 | + tabs[5] = (physFontH * 42) / 2; | |
502 | + tabs[6] = (physFontH * 46) / 2; | |
503 | + tabs[7] = (physFontH * 50) / 2; | |
504 | + tabs[8] = (physFontH * 54) / 2; | |
505 | + tabs[9] = (physFontH * 58) / 2; | |
506 | + if (w < physFontH * 21 + bw * 8) | |
507 | tabs[4] += physFontH * 20; | |
508 | - if (w < physFontH * 22 + bw * 8) | |
509 | + if (w < physFontH * 23 + bw * 8) | |
510 | tabs[5] += physFontH * 20; | |
511 | - if (w < physFontH * 24 + bw * 8) | |
512 | + if (w < physFontH * 25 + bw * 8) | |
513 | tabs[6] += physFontH * 20; | |
514 | - if (w < physFontH * 26 + bw * 8) | |
515 | + if (w < physFontH * 27 + bw * 8) | |
516 | tabs[7] += physFontH * 20; | |
517 | - if (w < physFontH * 28 + bw * 8) | |
518 | + if (w < physFontH * 29 + bw * 8) | |
519 | tabs[8] += physFontH * 20; | |
520 | - if (w < physFontH * 30 + bw * 8) | |
521 | + if (w < physFontH * 31 + bw * 8) | |
522 | tabs[9] += physFontH * 20; | |
523 | butList_setTabs(gl->title, tabs, tabAligns, 10); | |
524 | butList_setTabs(gl->list, tabs, tabAligns, 10); | |
525 | @@ -599,6 +607,19 @@ | |
526 | return(0); | |
527 | } | |
528 | ||
529 | +static const char * | |
530 | +opt_num(int num, int ignore) | |
531 | +{ | |
532 | + static char buf[64]; | |
533 | + static char *p = buf; | |
534 | + | |
535 | + if (num == ignore) | |
536 |