Rev 33 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 33 | Rev 108 | ||
---|---|---|---|
Line 13... | Line 13... | ||
13 | * Hopefully, only one move will remain after the elimination and legality * |
13 | * Hopefully, only one move will remain after the elimination and legality * |
14 | * checks. * |
14 | * checks. * |
15 | * * |
15 | * * |
16 | ******************************************************************************* |
16 | ******************************************************************************* |
17 | */ |
17 | */ |
18 | int InputMove(TREE * RESTRICT tree |
18 | int InputMove(TREE * RESTRICT tree, int ply, int wtm, int silent, |
19 | int ponder_list) { |
19 | int ponder_list, char *text) { |
20 |
|
20 | unsigned moves[220], *mv, *mvp, *goodmove = 0; |
21 | int piece = -1, capture, promote, give_check; |
21 | int piece = -1, capture, promote, give_check; |
22 | int ffile, frank, tfile, trank; |
22 | int ffile, frank, tfile, trank; |
23 | int current, i, nleft; |
23 | int current, i, nleft; |
24 | char *goodchar, *tc; |
24 | char *goodchar, *tc; |
25 | char movetext[128]; |
25 | char movetext[128]; |
Line 55... | Line 55... | ||
55 | if (strlen(text) == 0) |
55 | if (strlen(text) == 0) |
56 | return 0; |
56 | return 0; |
57 | if ((text[0] >= 'a') && (text[0] <= 'h') && (text[1] >= '1') |
57 | if ((text[0] >= 'a') && (text[0] <= 'h') && (text[1] >= '1') |
58 | && (text[1] <= '8') && (text[2] >= 'a') && (text[2] <= 'h') |
58 | && (text[1] <= '8') && (text[2] >= 'a') && (text[2] <= 'h') |
59 | && (text[3] >= '1') && (text[3] <= '8')) |
59 | && (text[3] >= '1') && (text[3] <= '8')) |
60 | return InputMoveICS(tree |
60 | return InputMoveICS(tree, ply, wtm, silent, ponder_list, text); |
61 | /* |
61 | /* |
62 | ************************************************************ |
62 | ************************************************************ |
63 | * * |
63 | * * |
64 | * Initialize move structure. If we discover a parsing * |
64 | * Initialize move structure. If we discover a parsing * |
65 | * error, this will cause us to return a move of "0" to * |
65 | * error, this will cause us to return a move of "0" to * |
66 | * indicate some sort of error was detected. * |
66 | * indicate some sort of error was detected. * |
67 | * * |
67 | * * |
68 | ************************************************************ |
68 | ************************************************************ |
69 | */ |
69 | */ |
70 | tree->status[MAXPLY] = tree->status[ply]; |
70 | tree->status[MAXPLY] = tree->status[ply]; |
71 |
|
71 | strcpy(movetext, text); |
72 | moves[0] = 0; |
72 | moves[0] = 0; |
73 | piece = 0; |
73 | piece = 0; |
74 | capture = 0; |
74 | capture = 0; |
75 | promote = 0; |
75 | promote = 0; |
76 | give_check = 0; |
76 | give_check = 0; |
Line 296... | Line 296... | ||
296 | if ((tfile >= 0) && (File(To(*mv)) != tfile)) |
296 | if ((tfile >= 0) && (File(To(*mv)) != tfile)) |
297 | *mv = 0; |
297 | *mv = 0; |
298 | if ((trank >= 0) && (Rank(To(*mv)) != trank)) |
298 | if ((trank >= 0) && (Rank(To(*mv)) != trank)) |
299 | *mv = 0; |
299 | *mv = 0; |
300 | if (!ponder_list && *mv) { |
300 | if (!ponder_list && *mv) { |
301 | MakeMove(tree, MAXPLY, *mv |
301 | MakeMove(tree, MAXPLY, wtm, *mv); |
302 | if (Check(wtm) || (give_check && !Check(Flip(wtm)))) { |
302 | if (Check(wtm) || (give_check && !Check(Flip(wtm)))) { |
303 | UnmakeMove(tree, MAXPLY, *mv |
303 | UnmakeMove(tree, MAXPLY, wtm, *mv); |
304 | *mv = 0; |
304 | *mv = 0; |
305 | } else |
305 | } else |
306 | UnmakeMove(tree, MAXPLY, *mv |
306 | UnmakeMove(tree, MAXPLY, wtm, *mv); |
307 | } |
307 | } |
308 | } |
308 | } |
309 | /* |
309 | /* |
310 | ************************************************************ |
310 | ************************************************************ |
311 | * * |
311 | * * |
Line 344... | Line 344... | ||
344 | * InputMoveICS() is responsible for converting a move from the ics format * |
344 | * InputMoveICS() is responsible for converting a move from the ics format * |
345 | * [from][to][promote] to the program's internal format. * |
345 | * [from][to][promote] to the program's internal format. * |
346 | * * |
346 | * * |
347 | ******************************************************************************* |
347 | ******************************************************************************* |
348 | */ |
348 | */ |
349 | int InputMoveICS(TREE * RESTRICT tree, |
349 | int InputMoveICS(TREE * RESTRICT tree, int ply, int wtm, int silent, |
350 | int |
350 | int ponder_list, char *text) { |
351 |
|
351 | unsigned moves[220], *mv, *mvp, *goodmove = 0; |
352 | int piece = -1, promote; |
352 | int piece = -1, promote; |
353 | int ffile, frank, tfile, trank; |
353 | int ffile, frank, tfile, trank; |
354 | int i, nleft; |
354 | int i, nleft; |
355 | char movetext[128]; |
355 | char movetext[128]; |
356 | static const char pieces[15] = |
356 | static const char pieces[15] = |
Line 367... | Line 367... | ||
367 | ************************************************************ |
367 | ************************************************************ |
368 | */ |
368 | */ |
369 | if (strlen(text) == 0) |
369 | if (strlen(text) == 0) |
370 | return 0; |
370 | return 0; |
371 | tree->status[MAXPLY] = tree->status[ply]; |
371 | tree->status[MAXPLY] = tree->status[ply]; |
372 |
|
372 | strcpy(movetext, text); |
373 | moves[0] = 0; |
373 | moves[0] = 0; |
374 | promote = 0; |
374 | promote = 0; |
375 | /* |
375 | /* |
376 | ************************************************************ |
376 | ************************************************************ |
377 | * * |
377 | * * |
Line 469... | Line 469... | ||
469 | if (Rank(To(*mv)) != trank) |
469 | if (Rank(To(*mv)) != trank) |
470 | *mv = 0; |
470 | *mv = 0; |
471 | if (File(To(*mv)) != tfile) |
471 | if (File(To(*mv)) != tfile) |
472 | *mv = 0; |
472 | *mv = 0; |
473 | if (!ponder_list && *mv) { |
473 | if (!ponder_list && *mv) { |
474 | MakeMove(tree, MAXPLY, *mv |
474 | MakeMove(tree, MAXPLY, wtm, *mv); |
475 | if (Check(wtm)) { |
475 | if (Check(wtm)) { |
476 | UnmakeMove(tree, MAXPLY, *mv |
476 | UnmakeMove(tree, MAXPLY, wtm, *mv); |
477 | *mv = 0; |
477 | *mv = 0; |
478 | } else |
478 | } else |
479 | UnmakeMove(tree, MAXPLY, *mv |
479 | UnmakeMove(tree, MAXPLY, wtm, *mv); |
480 | } |
480 | } |
481 | } |
481 | } |
482 | /* |
482 | /* |
483 | ************************************************************ |
483 | ************************************************************ |
484 | * * |
484 | * * |