46 static void addmove(GameState* gamestate, Move *move) { |
46 static void addmove(GameState* gamestate, Move *move) { |
47 MoveList *elem = malloc(sizeof(MoveList)); |
47 MoveList *elem = malloc(sizeof(MoveList)); |
48 elem->next = NULL; |
48 elem->next = NULL; |
49 elem->move = *move; |
49 elem->move = *move; |
50 |
50 |
51 gettimeofday(&(elem->move.timestamp), NULL); |
51 struct timeval curtimestamp; |
|
52 gettimeofday(&curtimestamp, NULL); |
|
53 elem->move.timestamp.tv_sec = curtimestamp.tv_sec; |
|
54 elem->move.timestamp.tv_usec = curtimestamp.tv_usec; |
52 |
55 |
53 if (gamestate->lastmove) { |
56 if (gamestate->lastmove) { |
54 struct timeval *lasttstamp = &(gamestate->lastmove->move.timestamp); |
57 struct movetimeval *lasttstamp = &(gamestate->lastmove->move.timestamp); |
55 time_t sec = elem->move.timestamp.tv_sec - lasttstamp->tv_sec; |
58 uint64_t sec = curtimestamp.tv_sec - lasttstamp->tv_sec; |
56 suseconds_t micros; |
59 suseconds_t micros; |
57 if (elem->move.timestamp.tv_usec < lasttstamp->tv_usec) { |
60 if (curtimestamp.tv_usec < lasttstamp->tv_usec) { |
58 micros = 1e6L-(lasttstamp->tv_usec - elem->move.timestamp.tv_usec); |
61 micros = 1e6L-(lasttstamp->tv_usec - curtimestamp.tv_usec); |
59 sec--; |
62 sec--; |
60 } else { |
63 } else { |
61 micros = elem->move.timestamp.tv_usec - lasttstamp->tv_usec; |
64 micros = curtimestamp.tv_usec - lasttstamp->tv_usec; |
62 } |
65 } |
63 |
66 |
64 elem->move.movetime.tv_sec = sec; |
67 elem->move.movetime.tv_sec = sec; |
65 elem->move.movetime.tv_usec = micros; |
68 elem->move.movetime.tv_usec = micros; |
66 |
69 |
557 gamestate->movelist : gamestate->movelist->next; |
560 gamestate->movelist : gamestate->movelist->next; |
558 |
561 |
559 while (movelist) { |
562 while (movelist) { |
560 time += gameinfo->addtime; |
563 time += gameinfo->addtime; |
561 |
564 |
562 struct timeval *movetime = &(movelist->move.movetime); |
565 struct movetimeval *movetime = &(movelist->move.movetime); |
563 if (movetime->tv_sec >= time) { |
566 if (movetime->tv_sec >= time) { |
564 return 0; |
567 return 0; |
565 } |
568 } |
566 |
569 |
567 time -= movetime->tv_sec; |
570 time -= movetime->tv_sec; |
571 } |
574 } |
572 |
575 |
573 time_t sec; |
576 time_t sec; |
574 movelist = gamestate->lastmove; |
577 movelist = gamestate->lastmove; |
575 if ((movelist->move.piece & COLOR_MASK) != color) { |
578 if ((movelist->move.piece & COLOR_MASK) != color) { |
576 struct timeval *lastmovetstamp = &(movelist->move.timestamp); |
579 struct movetimeval *lastmovetstamp = &(movelist->move.timestamp); |
577 struct timeval currenttstamp; |
580 struct timeval currenttstamp; |
578 gettimeofday(¤ttstamp, NULL); |
581 gettimeofday(¤ttstamp, NULL); |
579 micros += currenttstamp.tv_usec - lastmovetstamp->tv_usec; |
582 micros += currenttstamp.tv_usec - lastmovetstamp->tv_usec; |
580 sec = currenttstamp.tv_sec - lastmovetstamp->tv_sec; |
583 sec = currenttstamp.tv_sec - lastmovetstamp->tv_sec; |
581 if (sec >= time) { |
584 if (sec >= time) { |