DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T r

⟦7780b80f2⟧ TextFile

    Length: 2067 (0x813)
    Types: TextFile
    Names: »review.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Kriegspiel/review.c« 

TextFile

/* review.c */

#include "externs.h"
#include <ctype.h>
#include <sys/ioctl.h>

review ()
{
	int color = WHITE;
	MOVELIST m;
	struct sgttyb termcap_stuff;

	initdirlists ();
	initpiecelocs ();
	initboard (TRUE);
	ioctl (0, TIOCGETP, &termcap_stuff);
	if (termcap_stuff.sg_ospeed > B1800) {
		touchwin (stdscr);
		redraw ();
	} else
		refresh ();
	m = movelist;
	waddstr (win [MESSAGE], "hit a key for\neach move\n");
	while (m) {
		makereviewmove (m -> from, m -> to, color);
		m = m -> n;
		if (m)
			move (square [m -> from] -> _begy,
			      square [m -> from] -> _begx);
		refresh();
		if (m
		&& occupant[m->from] == KING
		&& (m->to - m->from == 2 || m->to - m->from == -2))
			/* do nothing */;
		else {
			/* not castling */
			color = 1 - color;
			while (getchar () == '\f')
				redraw ();
		}
	}
}

makereviewmove (from, to, color)
	int from, to, color;
{
	int victim, i, j;

	wclear (win [INPUT]);
	waddstr (win [INPUT], ": ");
	i = from;
	j = to;
	if (occupant [from] != KING || (to - from != 2 && to - from != -2)) {
		/* not castling */
		if (option [REVERSE] && ourcolor == BLACK) {
			i = 99 - from;
			j = 99 - to;
		}
		waddch (win [INPUT], 'a' + (i % 10) - 1);
		waddch (win [INPUT], '0' + (9 - (i / 10)));
		waddch (win [INPUT], '-');
		waddch (win [INPUT], 'a' + (j % 10) - 1);
		waddch (win [INPUT], '0' + (9 - (j / 10)));
	}
	else if (to - from == 2)
		waddstr (win [INPUT], "o-o");
	else
		waddstr (win [INPUT], "o-o-o");
	if (victim = findvictim (from, to)) {
		whose [victim] = EMPTY;
		waddch (square [victim], sqcolor[(victim + victim / 10) % 2]);
	}
	if (occupant [from] == KING)
		kingloc [color] = to;
	whose [to] = color;
	occupant [to] = occupant [from];
	whose [from] = EMPTY;
	occupant [from] = 0;
	if (occupant [to] == PAWN
	&& ((to / 10 == 1 && color == WHITE)
	||  (to / 10 == 8 && color == BLACK)))
		occupant [to] = QUEEN;
	waddch (square [from], sqcolor [(from + from / 10) % 2]);
	if (whose [to] == ourcolor)
		waddch (square [to], symbol [occupant [to]]);
	else
		waddch (square [to], tolower (symbol [occupant [to]]));
}