[alt.sources] UnixChess04/10

ml@brumuc.muc.sub.org (Marc Laukien) (05/20/91)

Submitted-by: ml@brumuc.muc.sub.org
Archive-name: UnixChess/part04

---- Cut Here and feed the following to sh ----
#!/bin/sh
# this is chess.04 (part 4 of UnixChess)
# do not concatenate these parts, unpack them in order with /bin/sh
# file ad/tour_comp.c continued
#
if test ! -r _shar_seq_.tmp; then
	echo 'Please unpack part 1 first!'
	exit 1
fi
(read Scheck
 if test "$Scheck" != 4; then
	echo Please unpack part "$Scheck" next!
	exit 1
 else
	exit 0
 fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
	echo 'x - still skipping ad/tour_comp.c'
else
echo 'x - continuing file ad/tour_comp.c'
sed 's/^X//' << 'SHAR_EOF' >> 'ad/tour_comp.c' &&
X		else if((farbe=='w' && W_IS_OPP())
X		     || (farbe=='s' && B_IS_OPP()))
X		{	/* Computerzug	*/
X			int	x;
X
X			mvaddstr(2,MPOS,thinking);/* Status ausgeben	*/
X			move(23,79);
X			refresh();
X
X			schach("comp",ptr);	/* Zug holen	*/
X
X			ad_brett();		/* Brett aufbauen	*/
X
X			schach("info",ptr);	/* Info holen	*/
X			farbe=ptr[0][0];	/* Farbe am Zug	*/
X
X			move(2,MPOS);		/* Meldung loeschen	*/
X			for(x=stdscr->_curx;x<79;x++)	/* loeschen	*/
X				mvaddch(stdscr->_cury,x,(int)' ');
X		}
X		else
X		/*--- Spieler ------------------------------------------*/
X		{
X			ad_read(0,&ch,1);	/* einlesen	*/
X
X			if(isupper(ch))		/* gross ?	*/
X				ch=tolower(ch);
X
X			ad_flush();	/* restliche Zeichen wegwerfen	*/
X
X			ret=ad_domenu(ch);	/* auswerten		*/
X
X			if(ret==0)		/* Ende ?		*/
X			{
X				schach("info",ptr);	/* Info holen	*/
X
X				if(atoi(ptr[1]) != old_moves)
X				{		/* veraendert ?		*/
X					ad_lock();
X					sprintf(s,"save %s",stdname);
X					schach(s,ptr);	/* Speichern	*/
X					ad_unlock();
X				}
X				break;
X			}
X			else if(ret==2)		/* Aufgeben ?		*/
X				if(ad_sure('a'))
X				{
X					move(3,MPOS);
X
X					addstr(wei==0 ? w_up:b_up);
X					ende = wei==0 ? W_AUFG:S_AUFG;
X				}
X		}
X
X		/*--- alles ausgeben -----------------------------------*/
X
X		move(23,79);		/* Cursor weg		*/
X		refresh();		/* ausgeben		*/
X	}
X
X	stdname[0]='\0';	/* Kein Standardname	*/
}
SHAR_EOF
echo 'File ad/tour_comp.c is complete' &&
chmod 0644 ad/tour_comp.c ||
echo 'restore of ad/tour_comp.c failed'
Wc_c="`wc -c < 'ad/tour_comp.c'`"
test 3534 -eq "$Wc_c" ||
	echo 'ad/tour_comp.c: original size 3534, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= ad/expire.c ==============
if test -f 'ad/expire.c' -a X"$1" != X"-c"; then
	echo 'x - skipping ad/expire.c (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting ad/expire.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'ad/expire.c' &&
/****************************************************************/
/*								*/
/*	XChess V2.7 Adapter: Curses				*/
/*								*/
/*	(c) 1991 by Marc Laukien				*/
/*								*/
/*	Programmteil:	Expire					*/
/*								*/
/****************************************************************/
X
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>
#include <stdio.h>
#include <curses.h>
X
#include "ad.h"
X
/****************************************************************/
/*	Expire							*/
/****************************************************************/
X
void	ad_expire()
X
{
X	char	c;
X	int	i,j;
X	DIR	*dir;	/* Directory - Struktur		*/
X	struct	dirent	*dp;	/* Directorypointer	*/
X	char	str[STRLEN],str2[STRLEN*5];	/* String	*/
X	char	*s[3];
X	char	white[STRLEN],black[STRLEN];	/* Namen der Spieler	*/
X	struct	stat	sbuf;	/* Statusinfo.	*/
X
X	lex();				/* Strings einlesen 	*/
X
X	if( (dir=opendir("save"))==(DIR *)0 )	/* oeffnen	*/
X	{
X		ad_error("");		/* Fehler		*/
X		return;
X	}
X
X	while( (dp=readdir(dir)) != (struct dirent *)0 )  /* Ende ?	*/
X	{
X		strcpy(str,dp->d_name);	/* kopieren		*/
X
X		i=0;
X		j=0;
X		s[j++]=str;
X		while(str[i]!='\0')		/* String aufbereiten	*/
X		{
X			if(str[i]=='.')
X			{
X				str[i++]='\0';	/* beenden	*/
X				s[j++]=str+i;
X			}
X
X			if(j>=3)
X				break;
X
X			i++;
X		}
X
X		if(j==3)			/* Spiel gefunden ?	*/
X		{
X			double	days;
X
X			sprintf(str2,"save/%s.%s.%s",s[0],s[1],s[2]);
X
X			strcpy(white,ad_revid(s[0]));	/* Namen	*/
X			strcpy(black,ad_revid(s[1]));
X
X			if(stat(str2,&sbuf)== -1)
X			{
X				ad_error("");	/* Fehler		*/
X				return;
X			}
X
X			days=(double)	/* Anzahl der Tage		*/
X			(time((long *)0)-(long)sbuf.st_mtime) /
X			(24.0 * 60.0 * 60.0) ;
X
X			if(days > (double)(EXPIRE))	/* ueberschritten ? */
X			{
X			sprintf(str2,"loadinfo save/%s.%s",s[0],s[1]);
X						/* Kommandostring   */
X			schach(str2,ptr);	/* Info anfordern   */
X
X			if(atoi(ptr[1]) > MOVES /* Mehr als MOVES Zuege ? */
X			&& !(ptr[0][0]=='w' && s[0][0]=='~')
X			&& !(ptr[0][0]=='s' && s[1][0]=='~'))
X			/* Schwarz oder Weiss am Zug ?	*/
X			{
X				/* Highscoreeintrag	*/
X
X				switch(ptr[0][0])	/* Farbe	*/
X				{
X				case 'w':		/* Weiss	*/
X					ad_addscore_expire('B',white,black);
X							/* Score 	*/
X
X					if(s[0][0] != '~') /* Kein Comp. ? */
X					{
X					sprintf(str2,
"echo \"Chess game has timed out !\\nYou've lost the game \\\"%s vs. %s\\\".\" | %s %s",
X					white,black,MAIL,white);
X					system(str2);
X					break;
X					}
X
X					if(s[1][0] != '~') /* Kein Comp. ? */
X					{
X					sprintf(str2,
"echo \"Chess game has timed out !\\nYou've won the game \\\"%s vs. %s\\\".\" | %s %s",
X					white,black,MAIL,black);
X					system(str2);
X					break;
X					}
X
X				case 's':		/* Schwarz	*/
X					ad_addscore_expire('W',white,black);
X							/* Score 	*/
X
X 					if(s[1][0] != '~') /* Kein Comp. ? */
X					{
X					sprintf(str2,
"echo \"Chess game has timed out !\\nYou've lost the game \\\"%s vs. %s\\\".\" | %s %s",
X					white,black,MAIL,black);
X					system(str2);
X					break;
X					}
X
X					if(s[0][0] != '~') /* Kein Comp. ? */
X					{
X					sprintf(str2,
"echo \"Chess game has timed out !\\nYou've won the game \\\"%s vs. %s\\\".\" | %s %s",
X					white,black,MAIL,white);
X					system(str2);
X					break;
X					}
X				}
X			}
X			else		/* Kein Verlierer	*/
X			{
X				if(s[0][0] != '~') 	/* Kein Comp. ? */
X				{
X				sprintf(str2,
"echo \"Chess game has timed out !\\nThe game \\\"%s vs. %s\\\" has been removed.\" | %s %s",
X				white,black,MAIL,white);
X				system(str2);
X				}
X
X				if(s[1][0] != '~') 	/* Kein Comp. ? */
X				{
X				sprintf(str2,
"echo \"Chess game has timed out !\\nThe game \\\"%s vs. %s\\\" has been removed.\" | %s %s",
X				white,black,MAIL,black);
X				system(str2);
X				}
X			}
X
X			/* Spiel loeschen  */
X			sprintf(str2,"save/%s.%s.ch",s[0],s[1]);
X			if(unlink(str2) == -1)	/* loeschen		*/
X				ad_error("");
X			}
X			else if(days > (double)(EXPIRE)-3.0) 
X			{				/* Noch 3 Tage 	*/
X				if(s[0][0] != '~') 	/* Kein Comp. ? */
X				{
X				sprintf(str2,
"echo \"Attention !\\nThe game \\\"%s vs. %s\\\" will expire in %d days.\" | %s %s",
X				white,black,
X				(int)(EXPIRE) - (int)days,
X				MAIL,white);
X				system(str2);
X				}
X
X				if(s[1][0] != '~') 	/* Kein Comp. ? */
X				{
X				sprintf(str2,
"echo \"Attention !\\nThe game \\\"%s vs. %s\\\" will expire in %d days.\" | %s %s",
X				white,black,
X				(int)(EXPIRE) - (int)days,
X				MAIL,black);
X				system(str2);
X				}
X			}
X
X		}	/* Ende Spiel gefunden	*/
X
X	}	/* Ende Directory lesen	*/
X
X	closedir(dir);
}
SHAR_EOF
chmod 0644 ad/expire.c ||
echo 'restore of ad/expire.c failed'
Wc_c="`wc -c < 'ad/expire.c'`"
test 4458 -eq "$Wc_c" ||
	echo 'ad/expire.c: original size 4458, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= ad/setup.c ==============
if test -f 'ad/setup.c' -a X"$1" != X"-c"; then
	echo 'x - skipping ad/setup.c (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting ad/setup.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'ad/setup.c' &&
/****************************************************************/
/*								*/
/*	XChess V2.7 Adapter: Curses				*/
/*								*/
/*	(c) 1991 by Marc Laukien				*/
/*								*/
/*	Programmteil:	Setup					*/
/*								*/
/****************************************************************/
X
#include <curses.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include "ad.h"
X
static	void	ad_piece();
X
/****************************************************************/
/*	Setupmenue						*/
/****************************************************************/
X
void	ad_setup()
X
{
X	int 	i;			/* Zeile		*/
X	char	ch;
X
X	if(TURNIER())	/* Turnierspiel ?	*/
X	{
X		ad_error(not_allowed);
X		return;
X	}
X
X	setupwin=newwin(11,27,11,50);		/* neues setupwindow	*/
X	box(setupwin,0,0);			/* mit Rahmen		*/
X
X	for(i=0;i<5;i++)
X	{
X		wmove(setupwin,i+2,2);		/* positionieren	*/
X		waddstr(setupwin,smenu[i]+1);	/* ausgeben		*/
X	}
X
X	wrefresh(setupwin);			/* ausgeben		*/
X
X	do
X	{
X		touchwin(stdscr);
X		wnoutrefresh(stdscr);
X
X		touchwin(setupwin);
X
X		wmove(setupwin,5,1+strlen(smenu[3]));	/* Farbe am Zug	*/
X		for(i=1+strlen(smenu[3]);i<26;i++)
X			waddstr(setupwin," ");		/* loschen	*/
X
X		wmove(setupwin,5,1+strlen(smenu[3]));
X
X		if(farbe=='w')
X			waddstr(setupwin,white);
X		else
X			waddstr(setupwin,black);
X
X		wnoutrefresh(setupwin);
X		doupdate();
X
X		move(23,79);
X		refresh();
X
X		ad_read(0,&ch,1);	/* einlesen	*/
X
X		if(isupper(ch))		/* gross ?	*/
X			ch=tolower(ch);
X
X		ad_flush();	/* restliche Zeichen wegwerfen	*/
X
X		if(ch<='h' && ch>='a')
X			ad_piece(ch);
X		else if(ch == smenu[0][0])	/*** Laden	***/
X			ad_load();
X		else if(ch == smenu[1][0])	/*** Save	***/
X			ad_save();
X		else if(ch == smenu[2][0])	/*** Loeschen	***/
X		{
X			schach("loeschen",ptr);
X			ad_brett();
X		}
X		else if(ch == smenu[3][0])	/*** Farbe wechseln ***/
X		{
X			if(farbe == 'w')	/* Weiss ?	*/
X			{
X				farbe = 's';	/* aendern	*/
X				schach("schwarz",ptr);
X			}
X			else			/* Schwarz	*/
X			{
X				farbe = 'w';	/* aendern	*/
X				schach("weiss",ptr);
X			}
X		}
X		else if(ch != smenu[4][0])
X			beep();
X	}
X	while(ch != smenu[4][0]);	/* Ende ?		*/
X
X	delwin(setupwin);		/* Fenster aus		*/
X	setupwin=(WINDOW *)0;
X	touchwin(stdscr);
}
X
static	void	ad_piece(ch)
X
char	ch;
{
X	char	str[STRLEN],str2[STRLEN];	/* String	*/
X	int	i;
X	static	char	*ofigtab="bsltdkBSLTDK.";
X
X	wmove(setupwin,9,2);		/* in Position			*/
X	strcpy(str2,figtab);		/* Space durch Punkt ersetzen	*/
X	str2[strlen(str2)-1]='.';
X	waddstr(setupwin,str2);		/* Figurenliste	*/
X
X	strcpy(str,"setze ");		/* aufbereiten	*/
X
X	wmove(setupwin,8,2);		/* in Position	*/
X	waddstr(setupwin,doset);	/* Meldung	*/
X	waddch(setupwin,ch|A_UNDERLINE);		/* ausgeben	*/
X	sprintf(str+strlen(str),"%%c%c",(char)ch);	/* aufbereiten	*/
X	wrefresh(setupwin);
X
l1:	ad_read(0,&ch,1);	/* einlesen	*/
X	if(ch=='\b')		/* zurueck ?	*/
X	{
X		waddstr(setupwin,"\b \b");
X		str[strlen(str)-1]=0;
X		wrefresh(setupwin);
X		goto l5;
X	}
X	if(ch<(int)'1' || ch>(int)'8')
X	{
X		beep();
X		goto l1;
X	}
X	waddch(setupwin,ch|A_UNDERLINE);	/* ausgeben	*/
X	sprintf(str+strlen(str),"%c",(char)ch);	/* aufbereiten	*/
X	waddch(setupwin,(int)'='|A_UNDERLINE);
X	wrefresh(setupwin);
X	
l2:	ad_read(0,&ch,1);		/* einlesen	*/
X	if(ch=='\b')		/* zurueck ?	*/
X	{
X		waddstr(setupwin,"\b \b");
X		str[strlen(str)-1]=0;
X		waddstr(setupwin,"\b \b");
X		str[strlen(str)-1]=0;
X		wrefresh(setupwin);
X		goto l1;
X	}
X
X	for(i=0;str2[i]!='\0';i++)
X		if(str2[i]==ch)
X			break;
X
X	if(figtab[i]=='\0')	/* nicht gefunden	*/
X	{
X		beep();
X		goto l2;
X	}
X	waddch(setupwin,ch|A_UNDERLINE);	/* ausgeben	*/
X	sprintf(str2,str,ofigtab[i]);		/* aufbereiten	*/
X	wrefresh(setupwin);
X
X	schach(str2,ptr);	/* ziehen	*/
X	if(ptr[0][0]!='?')	/* zug ok ?	*/
X		ad_brett();
X	else			/* falscheingabe	*/
X		beep();
X
l5:	wmove(setupwin,8,2);		/* in Position	*/
X	for(i=0;i<16;i++)		/* loschen	*/
X		waddstr(setupwin," ");
X
X	wmove(setupwin,9,2);		/* in Position	*/
X	for(i=0;i<16;i++)		/* loschen	*/
X		waddstr(setupwin," ");
X	wrefresh(setupwin);
}
SHAR_EOF
chmod 0644 ad/setup.c ||
echo 'restore of ad/setup.c failed'
Wc_c="`wc -c < 'ad/setup.c'`"
test 3935 -eq "$Wc_c" ||
	echo 'ad/setup.c: original size 3935, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= br/break.c ==============
if test ! -d 'br'; then
    echo 'x - creating directory br'
    mkdir 'br'
fi
if test -f 'br/break.c' -a X"$1" != X"-c"; then
	echo 'x - skipping br/break.c (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting br/break.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'br/break.c' &&
/****************************************************************/
/*								*/
/*	XChess V2.7 Adapter: Curses				*/
/*								*/
/*	(c) 1991 by Marc Laukien				*/
/*								*/
/*	Programmteil:	Programmunterbrechung			*/
/*								*/
/****************************************************************/
X
#include <signal.h>
#include <fcntl.h>
#include <stdio.h>
X
/****************************************************************/
/*	Hauptprogramm						*/
/****************************************************************/
X
main()
X
{
X	int	ppid;				/* Parent Process ID	*/
X	char	c,c2;
X	int 	flags;				/* Flags fuer read() 	*/
X
X	ppid=getppid();
X
X	flags=fcntl(0,F_GETFL,0);		/* flags retten 	*/
X
X	while(1)
X	{
X		read(0,&c,1);			/* Zeichen einlesen	*/
X
X		/* Buffer leeren	*/
X		fcntl(0,F_SETFL,flags | O_NDELAY);	/* blockierung aus */
X		while(read(0,&c2,1));			/* Zeichen lesen   */
X		fcntl(0,F_SETFL,flags & ~O_NDELAY);	/* blockierung ein */
X
X		switch(c)
X		{
X		case (char)27:			/* Escape		*/
X			kill(ppid,SIGUSR2);
X			break;
X
X		case (char)12:			/* ^ L -> refresh	*/
X			kill(ppid,SIGUSR1);
X			break;
X
X		default:
X			write(1,&c,1);
X			break;
X		}
X	}	
}
SHAR_EOF
chmod 0644 br/break.c ||
echo 'restore of br/break.c failed'
Wc_c="`wc -c < 'br/break.c'`"
test 1141 -eq "$Wc_c" ||
	echo 'br/break.c: original size 1141, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= ad/ad.h ==============
if test -f 'ad/ad.h' -a X"$1" != X"-c"; then
	echo 'x - skipping ad/ad.h (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting ad/ad.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'ad/ad.h' &&
/****************************************************************/
/* Includefile fuer XChess V2.7 Curses Adapter			*/
/* (c) 1991 by M.Laukien					*/
/****************************************************************/
X
#define PTR		200	/* Anzahl der moeglichen Antworten	*/
#define STRLEN		81	/* Laenge von Strings			*/
#define ADM_RAND	12	/* Einruecken beim Administrationsmenue	*/
#define	MPOS		47	/* Position des Spielmenues		*/
X
#define PATT		1	/* Status	*/
#define W_MATT		2
#define S_MATT		3
#define W_AUFG		4
#define S_AUFG		5
X
#ifndef	WORKDIR
#define	WORKDIR	"."
#endif
X
#define	UEBUNG()	(gegner[0]=='\0')	/* Uebungsspiel		*/
#define	TURNIER()	(gegner[0]!='\0')	/* Turnierspiel		*/
#define	TURNGEG()	(gegner[0]!='\0' && gegner[0]!='~')
X						/* Turnier gegen Gegner	*/
#define	TURNCOM()	(gegner[0]=='~')	/* Turnier gegen Comp.	*/
X
#define W_IS_USER()	(!wei)		/* Weiss ist User		*/
#define B_IS_USER()	(!sch)		/* Schwarz ist User		*/
#define W_IS_OPP()	(wei)		/* Weiss ist Gegner		*/
#define B_IS_OPP()	(sch)		/* Schwarz ist Gegner		*/
X
extern 	int	errno;			/* Fehlernummer 		*/
extern 	char	*sys_errlist[];		/* Fehlertexte 			*/
X
extern	char	*pname;			/* Prgname: argv[0] 		*/
extern	char	*cwd;			/* Working Directory 		*/
extern	char	stdname[];		/* Standardname fuers Speichern	*/
extern	char	def[];			/* Sprache 			*/
extern	int	lock;			/* Falls 1: Lock erworben	*/
extern	int	curses;			/* Falls 1: Curses an		*/
extern	int	inter;			/* Falls 1: Es war ein Interrupt*/
extern	int	break_pid;		/* Prozessid des Unterbrechers	*/
extern	WINDOW	*win;			/* Subwindow			*/
extern	WINDOW	*setupwin;		/* Setup-Subwindow		*/
X
extern	char	*amenu[];			/* Adm.-Menuestrings	*/
extern	char	*menu[];			/* Menuestrings		*/
extern	char	*smenu[];			/* Setup-Menuestrings	*/
extern	char	*info[];			/* Infostrings		*/
extern	char	*tr_lv;				/* Trainingslevel	*/
extern	char	*to_lv;				/* Turnierlevel		*/
extern	char	*press_key;			/* <Taste>		*/
extern	char	*tlist;				/* Ueberschrift Turnier	*/
extern	char	*ulist;				/* Ueberschrift Training*/
extern	char	*scorelist;			/* Ueberschrift Score	*/
extern	char	*sure;				/* Sicherheitsabfrage	*/
extern	char	*give_up;			/* Aufg. Abfrage	*/
extern	char	*figtab;			/* Figurentab.		*/
extern	char	*comp;				/* Computername		*/
extern	char	*white,*black;			/* Farben		*/
extern	char	*domove;			/* Zug			*/
extern	char	*doset;				/* Setup		*/
extern	char	*enter;				/* Namen eing.		*/
extern	char	*opponent;			/* Gegner eing.		*/
extern	char	*error;				/* Fehler		*/
extern	char	*not_allowed;			/* nicht erlaubt	*/
extern	char	*no_user;			/* kein User		*/
extern	char	*figlist;			/* geschl. Fig.		*/
extern	char	*ison,*isoff;			/* Ein/Aus		*/
extern	char	*thinking;			/* Comp. denkt		*/
extern	char	*is_thinking;			/* Gegner denkt		*/
extern	char	*load_lib;			/* Lade Eroeffnungen	*/
extern	char	*startcmd;			/* Startkommando	*/
extern	char	*patt,*w_mate,*b_mate;		/* Status		*/
extern	char	*w_chess,*b_chess;
extern	char	*w_up,*b_up;
extern	char	*remis_3;
X
extern	char	farbe;			/* w=weiss,s=schwarz		*/
extern	int	wei;			/* 0=Spieler			*/
extern	int	sch;			/* 1=Computer oder Gegener	*/
extern	char	gegner[];		/* Spielgegner (leer:Computer)	*/
extern	int	level;			/* Stufe			*/
extern	int	ende;			/* 1:Matt oder Patt		*/
extern	int	modus;			/* eingestellter Modus		*/
X
extern	int	old_moves;	/* Anzahl der Zuege bei Spielbeginn	*/
X
extern	char	ant[PTR][81];		/* Antworten			*/
extern	char	*ptr[PTR];		/* Pointer auf Antw.		*/
X
extern 	char 	*getcwd();		/* externe Funktionen		*/
extern 	char 	*getenv();
extern	char	*getlogin();
extern	int	atoi();
extern	int	unlink();
X
extern	void	ad_admin();		/* Administrationsmenue		*/
extern	void	ad_game();		/* Spielmenue			*/
extern	void	ad_tr_game();		/* Trainingsspiel		*/
extern	void	ad_tc_game();		/* Turnierspiel gegen Computer	*/
extern	void	ad_tu_game();		/* Turnierspiel gegen Gegner	*/
extern	void	ad_game_screen();	/* Spielscreen			*/
extern	void	ad_admin_screen();	/* Hauptmenue			*/
extern	void	ad_menu();		/* Menue ausgeben		*/
extern	void	ad_amenu();		/* Administrationsmenue ausg.	*/
extern	void	ad_status();		/* Status ausgeben		*/
extern	void	ad_analyse();		/* Analyse ausgabe		*/
extern	void	ad_tliste();		/* Turnierliste ausgeben	*/
extern	void	ad_uliste();		/* Uebungsspielliste		*/
extern	void	ad_break();		/* Denken abbrechen		*/
extern	void	ad_brett();		/* Brett ausgeben		*/
extern	void	ad_deinit();		/* Deinitialisierungen		*/
extern	void	ad_error();		/* Fehlermeldung		*/
extern	void	ad_msg();		/* Meldung			*/
extern	void	ad_flush();		/* Eingabe leeren		*/
extern	void	ad_info();		/* Informationen ausg.		*/
extern	void	ad_init();		/* Initialisierungen		*/
extern	void	ad_interrupt();		/* Interrupt			*/
extern	void	ad_new();		/* Programm Neustart		*/
extern	void	ad_remove();		/* Spiel loeschen		*/
extern	void	ad_refresh();		/* Refresh-Interrupt		*/
extern	void	ad_startint();		/* Interrupt starten		*/
extern	void	ad_zug();		/* Zug ausfuehren		*/
extern	void	ad_extzug();		/* externen Zug ausfuehren	*/
extern	void	ad_load();		/* Spiel laden			*/
extern	void	ad_save();		/* Spiel speichern		*/
extern	void	ad_lock();		/* File locken			*/
extern	void	ad_unlock();		/* File unlocken		*/
extern	void	ad_locksc();		/* Score locken			*/
extern	void	ad_unlocksc();		/* Score unlocken		*/
extern	void	ad_zurueck();		/* Zug zuruecknehmen		*/
extern	void	ad_showscore();		/* Highscoreliste ausgeben	*/
extern	void	ad_addscore();		/* Score eintragen		*/
extern	void	ad_addscore_expire();	/* dito. fuer expire		*/
extern	void	ad_expire();		/* Expire			*/
extern	void	ad_setup();		/* Setup-Menue			*/
X
extern	void	lex();			/* lex-Analyse			*/
extern	void	insert();		/* String einfuegen		*/
X
extern	char	*ad_name();		/* Name einlesen		*/
extern	char	*ad_id();		/* ID-String liefern		*/
extern	char	*ad_revid();		/* Name zu ID liefern		*/
X
extern	int	ad_domenu();		/* Menueauswertung		*/
extern	int	ad_read();		/* Eigenes read()		*/
extern	int	ad_sure();		/* Sicherheitsabfrage		*/
extern	int	main();			/* Hauptprogramm		*/
SHAR_EOF
chmod 0644 ad/ad.h ||
echo 'restore of ad/ad.h failed'
Wc_c="`wc -c < 'ad/ad.h'`"
test 6012 -eq "$Wc_c" ||
	echo 'ad/ad.h: original size 6012, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= ch/ch.h ==============
if test -f 'ch/ch.h' -a X"$1" != X"-c"; then
	echo 'x - skipping ch/ch.h (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting ch/ch.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'ch/ch.h' &&
/****************************************************************/
/*								*/
/*	Includefile fuer XChess	V2.7				*/
/*								*/
/*	(c) 1991 by Marc Laukien				*/
/*								*/
/****************************************************************/
X
/* Diverse Definitionen	*/
X
#define MAXOP		5000			/* Max. Eroeffnungszahl	*/
#define	OPTRYS		10			/* Zugriffsversuche	*/
#define	MAXSP		200			/* Max. Zuganzahl	*/
#define MAXTIEFE	10			/* Max. Rechentiefe	*/
#define STRLEN		81			/* Laenge von Strings	*/
#define	RAND		2			/* Offset vom Spielfeld */
#define ZLEN		12			/* Zeilenlaenge		*/
#define GROE		144			/* Spielfeldgroesse =	*/
X						/* (8+2*RAND)^2		*/
#define MAXZUG		200			/* Max. Zugmgl. in zlist*/
#define MATT		1000000L		/* schlechteste Bew.	*/
#define TAB		(char)9			/* Tabulator		*/
X
typedef	unsigned char	BYTE;			/* sinnvolle Typen 	*/
typedef unsigned short	WORD;
typedef unsigned long	LWORD;
X
typedef struct spieldaten			/* Spieldatenstruktur 	*/
{
X	BYTE	brett[GROE];			/* Spielfeld 		*/
X	BYTE	wkpos,skpos;			/* Koenigsposition	*/
X	WORD	zlist[MAXZUG];			/* Zugliste		*/
X	long	blist[MAXZUG];			/* Bewertungsliste	*/
X	WORD	bzug;				/* beste Zugfolge	*/
X	WORD	lzug;				/* letzter Zug		*/
X	int	zuege;				/* Anz. der Zuege	*/
X	BYTE	farbe;				/* Farbe am Zug		*/
X	long	wert;				/* Wert der Stellung	*/
X	int	minstufe,maxstufe;		/* Spielstufe		*/
X	struct	spieldaten *vorher;		/* Ptr auf Zug davor 	*/
} SPDAT;
X
typedef struct archivdaten			/* Spieldatenstruktur 	*/
{                                               /* zur Speicherung	*/
X	BYTE	brett[GROE];			/* Spielfeld 		*/
X	BYTE	wkpos,skpos;			/* Koenigsposition	*/
X	WORD	lzug;				/* letzter Zug		*/
X	BYTE	farbe;				/* Farbe am Zug		*/
X	int	wdh;				/* Wiederholung		*/
} ARCHIV;
X
/* Figuren	*/
X
#define LEE	0				/* Leeres Feld	*/
#define BAU	1				/* Bauer	*/
#define XBAU	2				/* nicht bewegt	*/
#define SPR	3				/* Springer	*/
#define LAE	4				/* Laeufer	*/
#define TUR	5				/* Turm		*/
#define XTUR	6				/* nicht bewegt	*/
#define DAM	7				/* Dame		*/
#define KOE	8				/* Koenig	*/
#define XKOE	9				/* nicht bewegt	*/
X
/* Farben	*/
X
#define WEI	16				/* Weiss	*/
#define SCH	32				/* Schwarz	*/
X
#define SPZ	WEI+SCH				/* Spezialfigur fuer	*/
X						/* die Raender		*/
/* Testmakros	*/
X
#define _istwei(x)	((x)&WEI)		/* Test auf Weiss	*/
#define _istsch(x)	((x)&SCH)            	/* Test auf Schwarz	*/
#define _istnwei(x)	(_istwei(x)&&!_istsch(x))/* Test auf nur Weiss	*/
#define _istnsch(x)	(_istsch(x)&&!_istwei(x))/* Test auf nur Schwarz*/
#define _farbe(x)	((x)&(WEI|SCH))		/* Farbe einer Figur	*/
#define _figur(x)	((x)&0xf)		/* Figur ohne Farbe	*/
X
#define _istlee(x)	(!(x))			/* Test auf leeres Feld	*/
#define _istbau(x)	(_figur(x)==BAU||_figur(x)==XBAU)
X						/* Test auf Bauer	*/
#define _istxbau(x)	(_figur(x)==XBAU)	/* Test auf unb. Bauer	*/
#define _istplbau(x)	(_figur(x)==PLBAU)	/* Test auf pas. Bauer	*/
#define _istprbau(x)	(_figur(x)==PRBAU)	/* Test auf pas. Bauer	*/
#define _istspr(x)	(_figur(x)==SPR)	/* Test auf Springer	*/
#define _istlae(x)	(_figur(x)==LAE)	/* Test auf Laeufer	*/
#define _isttur(x)	(_figur(x)==TUR||_figur(x)==XTUR)
X						/* Test auf Turm	*/
#define _istxtur(x)	(_figur(x)==XTUR)	/* Test auf unb. Turm	*/
#define _istdam(x)	(_figur(x)==DAM)	/* Test auf Dame	*/
#define _istkoe(x)	(_figur(x)==KOE||_figur(x)==XKOE)
X						/* Test auf Koenig	*/
#define _istxkoe(x)	(_figur(x)==XKOE)	/* Test auf unb. Koenig	*/
#define _istspz(x)	((x)==SPZ)		/* Test auf Spezialfig. */
X
/* Zug -> Positionen	*/
X
#define _apos(x)	(BYTE)((x)&0xff)	/* alte Position	*/
/*#define _npos(x)	*((BYTE*)&(x)+1)	/* neue Position	*/
#define	_npos(x)	(BYTE)((x)>>8)		/* neue Position	*/
X
/* Positionen -> Koordianten	*/
X
#define _xpos(x)	(BYTE)((x)%ZLEN-RAND)	/* x-Koordinate	*/
#define _ypos(x)	(BYTE)((x)/ZLEN-RAND)	/* y-Koordinate	*/
X
/* Analysefunktion	*/
X
#define ANALYSE(x)	ad_analyse(x)
X
/* externe Variable	*/
X
extern 	int	opnr;			/* Anzahl der Eroeff.		*/
extern	int	testopnr;		/* Eroeffnungsnummer zum testen */
extern	WORD	*op[];			/* Eroeffnungen			*/
extern	BYTE	op_fa[MAXOP];		/* Farbe fuer die Eroeff. gilt	*/
extern	int	noop;			/* 1:Keine Bibliothek		*/
extern	SPDAT	spdat;			/* Spieldaten			*/
extern	ARCHIV	*archiv[];		/* Archivdaten			*/
extern	int	phase;			/* Spielphase			*/
extern	int	zaehler;		/* Antwortzaehler		*/
extern	int	compzuege;		/* Computerzuege		*/
extern	long	varianten;		/* Variantenzaehler		*/
extern	long	zeit;			/* Dauer des letzten Zuges	*/
extern	long	varprosek;		/* Varianten pro Sek.		*/
extern	int	mode;			/* Modus			*/
extern	int	stufe;			/* Spielstufe			*/
extern	int	beende;			/* Falls 1 Denkvorgang beenden	*/
extern	WORD	best_so_far;		/* Bester Zug bis jetzt		*/
extern	int	maxtiefe[],mintiefe[];	/* Rechentiefe			*/
X					/* Status des letzten Zuges:	*/
extern	int	schlag;			/* falls 1 wurde geschlagen	*/
X					/* oder befoerdert		*/
extern	int	gabel;			/* Bauernspiess oder		*/
X					/* Springergabel falls 1	*/
X
/* externe Funktionen	*/
X
extern  char	*wandle();			/* int. Format in String */
extern	char	*kombination();			/* Kombination in String */
extern	WORD	wandle_inv();			/* String in int. Form.  */
extern	BYTE	wandle_fig();			/* Figur in int. Form.   */
extern	long	bewerte();			/* Zug bewerten		 */
extern	long	comp_zug();			/* Computer Zug		 */
extern	WORD	bib_zug();			/* Zug aus Bibliothek	 */
extern	int	zugliste();			/* Zugliste		 */
extern	int	sortliste();			/* Zugliste sortiert	 */
extern	int	ziehe();			/* Zug ausfuehren	 */
extern	int	zug_test();			/* Zug testen		 */
extern	int	save_game();			/* Speichern		 */
extern	int	load_game();			/* Laden		 */
extern	int	bedrohung();			/* Bedrohung testen	 */
extern	int	hole_zurueck();			/* Zurueckholen		 */
extern	int 	bib_test();			/* Bibliothek testen	 */
X
extern	void	brett_aus();			/* Brett ausgeben	 */
extern	void	info_aus();			/* Info ausgeben	 */
extern	void	zugliste_aus();			/* Zugliste ausgeben	 */
extern	void	status_aus();			/* Status ausgeben	 */
extern	void	archiviere();			/* Archivieren		 */
extern	void	eff_stufe();			/* Stufe einstellen	 */
extern	void	init();				/* Initialisieren	 */
extern	void	load_open();			/* Eroeffnungen laden	 */
SHAR_EOF
chmod 0644 ch/ch.h ||
echo 'restore of ch/ch.h failed'
Wc_c="`wc -c < 'ch/ch.h'`"
test 6139 -eq "$Wc_c" ||
	echo 'ch/ch.h: original size 6139, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= ch/ph.h ==============
if test -f 'ch/ph.h' -a X"$1" != X"-c"; then
	echo 'x - skipping ch/ph.h (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting ch/ph.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'ch/ph.h' &&
/* XChess V2.7						*/
/* Beweglichkeit der Figuren bei optimalen Bedingungen	*/
/* ohne Schlagen					*/
X
#define	BWLEE	0
#define	BWBAU	1
#define	BWXBAU	2
#define BWSPR	8
#define	BWLAE	13
#define	BWTUR	14
#define	BWXTUR	9
#define	BWDAM	(BWTUR+BWLAE)
#define	BWKOE	8
#define	BWXKOE	6
X
/* Spielphasen	*/
X
#define	EROEFF	0	/* Eroeffnung				*/
#define	MITTEL	1	/* Mittelspiel				*/
#define	ENDSPI	2	/* Endspiel				*/
#define	WKOEOO	10	/* Weisser Koenig ohne Offiziere	*/
#define	SKOEOO	11	/* Schwarzer Koenig ohne Offiziere	*/	
#define	REMIS	99	/* Remis				*/
X
SHAR_EOF
chmod 0644 ch/ph.h ||
echo 'restore of ch/ph.h failed'
Wc_c="`wc -c < 'ch/ph.h'`"
test 557 -eq "$Wc_c" ||
	echo 'ch/ph.h: original size 557, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= ad/patchlevel.h ==============
if test -f 'ad/patchlevel.h' -a X"$1" != X"-c"; then
	echo 'x - skipping ad/patchlevel.h (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting ad/patchlevel.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'ad/patchlevel.h' &&
/*----------------------------------------------------------------------*/
/*									*/
/*	XChess V2.7:		Current patch level			*/
/*				(initial level is zero)			*/
/*									*/
/*----------------------------------------------------------------------*/
X
#define PATCHLEVEL 0
SHAR_EOF
chmod 0644 ad/patchlevel.h ||
echo 'restore of ad/patchlevel.h failed'
Wc_c="`wc -c < 'ad/patchlevel.h'`"
test 277 -eq "$Wc_c" ||
	echo 'ad/patchlevel.h: original size 277, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= ad/lex.l ==============
if test -f 'ad/lex.l' -a X"$1" != X"-c"; then
	echo 'x - skipping ad/lex.l (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting ad/lex.l (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'ad/lex.l' &&
/*----------------------------------------------------------------------*/
/*									*/
/*	Name:			Chess V2.7				*/
/*	                                                                */
/*	Programmteil:		externe Strings einlesen		*/
/*									*/
/*	Library:		UNIX V	+ lex				*/
/*									*/
/*	Autor:			Marc Laukien				*/
/*									*/
/*----------------------------------------------------------------------*/
X
%{
#include	<string.h>
#include	<ctype.h>
X
extern	char	*malloc();
extern	void	exit();
X
extern	char	*pname;			/* Programmname		*/
extern	char	def[];			/* Definitionfile	*/
extern 	int	errno;			/* Fehlernummer 	*/
extern 	char	*sys_errlist[];		/* Fehlertexte 		*/
X
extern	int	atoi();
X
void	lex();
static	void	insert();
static	int	getnr();
X
static	char 	str[100];		/* String 		*/
X
char	*amenu[10];			/* Adm.menuestrings	*/
char	*menu[10];			/* Menuestrings		*/
char	*smenu[5];			/* Setup-Menuestrings	*/
char	*info[10];			/* Infostrings		*/
char	*tr_lv;				/* Trainingslevel	*/
char	*to_lv;				/* Turnierlevel		*/
char	*press_key;			/* <Taste>		*/
char	*tlist;				/* Ueberschrift Turnier	*/
char	*ulist;				/* Ueberschrift Training*/
char	*scorelist;			/* Ueberschrift Score	*/
char	*sure;				/* Sicherheitsabfrage	*/
char	*give_up;			/* Aufg. Abfrage	*/
char	*figtab;			/* Figurentab.		*/
char	*comp;				/* Computername		*/
char	*white,*black;			/* Farben		*/
char	*domove;			/* Zug			*/
char	*doset;				/* Setup		*/
char	*enter;				/* Namen eing.		*/
char	*opponent;			/* Gegner eing.		*/
char	*error;				/* Fehler		*/
char	*not_allowed;			/* nicht erlaubt	*/
char	*no_user;			/* kein User		*/
char	*figlist;			/* geschl. Fig.		*/
char	*ison,*isoff;			/* Ein/Aus		*/
char	*thinking;			/* Comp. denkt		*/
char	*is_thinking;			/* Gegner denkt		*/
char	*load_lib;			/* Lade Eroeffnungen	*/
char	*startcmd;			/* Startkommando	*/
char	*patt,*w_mate,*b_mate;		/* Status		*/
char	*w_up,*b_up;
char	*w_chess,*b_chess;
char	*remis_3;
X
%}
X
T	[ \t]
S	\".*\"
N	"["[0-9]*"]"
%%
#.*\n			{ ;	/* Kommentar */		}
"amenu"{N}{T}*{S}	{	insert(&amenu[getnr()]);}
"menu"{N}{T}*{S}	{	insert(&menu[getnr()]);	}
"smenu"{N}{T}*{S}	{	insert(&smenu[getnr()]);}
"info"{N}{T}*{S}	{	insert(&info[getnr()]);	}
"tr_lv"{T}*{S}		{	insert(&tr_lv);		}
"to_lv"{T}*{S}		{	insert(&to_lv);		}
"press_key"{T}*{S}	{	insert(&press_key);	}
"tlist"{T}*{S}		{	insert(&tlist);		}
"ulist"{T}*{S}		{	insert(&ulist);		}
"scorelist"{T}*{S}	{	insert(&scorelist);	}
"sure"{T}*{S}		{	insert(&sure);		}
"give_up"{T}*{S}	{	insert(&give_up);	}
"comp"{T}*{S}		{	insert(&comp);		}
"figtab"{T}*{S}		{	insert(&figtab);	}
"white"{T}*{S}		{	insert(&white);		}
"black"{T}*{S}		{	insert(&black);		}
"domove"{T}*{S}		{	insert(&domove);	}
"doset"{T}*{S}		{	insert(&doset);		}
"enter"{T}*{S}		{	insert(&enter);		}
"opponent"{T}*{S}	{	insert(&opponent);	}
"error"{T}*{S}		{	insert(&error);		}
"not_allowed"{T}*{S}	{	insert(&not_allowed);	}
"no_user"{T}*{S}	{	insert(&no_user);	}
"figlist"{T}*{S}	{	insert(&figlist);	}
"ison"{T}*{S}		{	insert(&ison);		}
"isoff"{T}*{S}		{	insert(&isoff);		}
"thinking"{T}*{S}	{	insert(&thinking);	}
"is_thinking"{T}*{S}	{	insert(&is_thinking);	}
"load_lib"{T}*{S}	{	insert(&load_lib);	}
"startcmd"{T}*{S}	{	insert(&startcmd);	}
"patt"{T}*{S}		{	insert(&patt);		}
"w_mate"{T}*{S}		{	insert(&w_mate);	}
"b_mate"{T}*{S}		{	insert(&b_mate);	}
"w_up"{T}*{S}		{	insert(&w_up);		}
"b_up"{T}*{S}		{	insert(&b_up);		}
"w_chess"{T}*{S}	{	insert(&w_chess);	}
"b_chess"{T}*{S}	{	insert(&b_chess);	}
"remis_3"{T}*{S}	{	insert(&remis_3);	}
X
[ \t\n]			{ ;	/* Leerstellen, Tabs und Newline ignorieren */	}
.			{ 	fprintf(stderr,
X				"%s: syntax error in %s at line %d\n"
X				,pname,str,yylineno);
X				ad_deinit();
X				exit(1);
X			}	/* Fehler */
%%
X
void	lex()
{
X	FILE *fp;				/* Filepointer 		*/
X
X	sprintf(str,"def.%s",def);		/* aufbereiten */
X	if((fp=fopen(str,"r"))==(FILE *)0)	/* oeffnen */
X	{
X		fprintf(stderr,"%s: %s\n",pname,sys_errlist[errno]);
X		ad_deinit();
X		exit(1);
X	}
X
X	yyin = fp;		/* Input setzen */
X
X	yylex();
X
X	fclose(fp);		/* schliessen */
}
X
static	void	insert(pt)	/* String einfuegen */
char 	**pt;
{
X	char st[100];
X	char *s;
X	int i;
X
X	s=st;
X
X	strcpy(s,yytext);
X	while(*s != '"')
X		s++;
X	s++;
X
X	i=0;
X	while(s[i] != '"')
X		i++;
X	s[i]=0;
X
X	*pt=(char *)malloc((unsigned)(strlen(s)+1));
X	strcpy(*pt,s);
}
X
static	int	getnr()		/* Stringnummer holen */
{
X	char st[100];
X	char *s;
X	int i;
X
X	s=st;
X
X	strcpy(s,yytext);
X	while(!isdigit(*s))
X		s++;
X
X	i=0;
X	while(isdigit(s[i]))
X		i++;
X	s[i]=0;
X
X	return(atoi(s));
}
X
SHAR_EOF
chmod 0644 ad/lex.l ||
echo 'restore of ad/lex.l failed'
Wc_c="`wc -c < 'ad/lex.l'`"
test 4484 -eq "$Wc_c" ||
	echo 'ad/lex.l: original size 4484, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= ad/patchlevel.h ==============
if test -f 'ad/patchlevel.h' -a X"$1" != X"-c"; then
	echo 'x - skipping ad/patchlevel.h (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting ad/patchlevel.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'ad/patchlevel.h' &&
/*----------------------------------------------------------------------*/
/*									*/
/*	XChess V2.7:		Current patch level			*/
/*				(initial level is zero)			*/
/*									*/
/*----------------------------------------------------------------------*/
X
#define PATCHLEVEL 0
SHAR_EOF
chmod 0644 ad/patchlevel.h ||
echo 'restore of ad/patchlevel.h failed'
Wc_c="`wc -c < 'ad/patchlevel.h'`"
test 277 -eq "$Wc_c" ||
	echo 'ad/patchlevel.h: original size 277, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= op/op.albinsgegam ==============
if test ! -d 'op'; then
    echo 'x - creating directory op'
    mkdir 'op'
fi
if test -f 'op/op.albinsgegam' -a X"$1" != X"-c"; then
	echo 'x - skipping op/op.albinsgegam (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting op/op.albinsgegam (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'op/op.albinsgegam' &&
# ---------------------------------------------------------------------
#
#       Name:                   Chess V2.7
#                               Schachprogramm
#
#       Programmteil:           Opening-Library
#                               Albins Gegengambit
#
#       Autor:                  Christoph Thommes
#
# ---------------------------------------------------------------------
#
# (unknown)
# 4. e2e3 (?)
# +++ Umwandlung 7. .... f2g1S nicht moeglich +++
# Bd2d4d7d5c2c4e7e5d4e5d5d4e2e3f8b4c1d2d4e3d2b4e3f2e1e2f2g1e2e1d8h4e1d2b8c6b4c3
# c8g4
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
#
SHAR_EOF
chmod 0644 op/op.albinsgegam ||
echo 'restore of op/op.albinsgegam failed'
Wc_c="`wc -c < 'op/op.albinsgegam'`"
test 636 -eq "$Wc_c" ||
	echo 'op/op.albinsgegam: original size 636, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= op/op.aljechin ==============
if test -f 'op/op.aljechin' -a X"$1" != X"-c"; then
	echo 'x - skipping op/op.aljechin (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting op/op.aljechin (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'op/op.aljechin' &&
# ---------------------------------------------------------------------
#
#       Name:                   Chess V2.7
#                               Schachprogramm
#
#       Programmteil:           Opening-Library
#                               Aljechin-Verteidigung
#
#       Autor:                  Christoph Thommes
#
# ---------------------------------------------------------------------
#
# (unknown)
WBe2e4g8f6e4e5f6d5c2c4d5b6d2d4d7d6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3f8e7
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Mazukewitsch-Bodischko,1958)
#  8. .... c8e6 (?)
We2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5b1c3d5c3d2c3d7d6c1g5d6e5d1b3c8e6b3b7b8d7b2b4f7f6g5e3e8f7g1f3d8c8b7c6a7a6c6e6f7e6f1c4e6f5f3h4f5e4e1e2
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Aronin-Mikenas,1951)
#  6. .... b8c6 (?!)
We2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2e7e6e1g1b8c6c2c4d5e7e5d6d8d6b1c3e7g6d4d5e6d5c4d5g4f3g2f3c6e5c3b5d6d7f3f4g6h4f4e5d7h3b5c7e8d8c7e6
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
#
# (Aljechin-Fine,1932)
WBe2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5b1c3d5c3d2c3d7d6f1c4d6d5d1d5d8d5c4d5e7e6d5e4f8c5
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Poletajew-Rachno,1948)
We2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5b1c3d5c3d2c3d7d6c1g5d6e5d1b3d8d7a1d1d7f5f1c4b8c6c4d5h7h6b3b5f5g6g1f3a7a6b5a4c8d7g5e3e7e6d5e4g6f6a4b3
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Krogius-Saizew,1971)
We2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5b1c3d5c3d2c3d7d6c5d6e7d6f1c4f8e7c1f4d6e5f4e5e8g8d1d8e7d8g1f3
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Hennings-Semjkal,1970)
We2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5b1c3e7e6c3d5e6d5d2d4b7b6c1e3b6c5d4c5c7c6f1d3b8a6a1c1d8a5e3d2a5a2c1a1a2b2d3a6c8a6a1a6b2e5g1e2f8c5
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Nicewski-Wasjukow,1969)
WBe2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5b1c3e7e6c3d5e6d5d2d4d7d6c5d6c7d6g1f3b8c6f1e2f8e7e1g1e8g8c1f4c8g4d1d2f8e8f1d1a8c8a1c1a7a6
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Ozsvath-Csom,1967)
WBe2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5b1c3e7e6d2d4d7d6c5d6c7d6g1f3b8c6e5d6f8d6f1d3d5f4c1f4d6f4
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Sweschnikow-Palatnik,1974)
WBe2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5b1c3c7c6f1c4d7d6d1b3d6e5c3d5c6d5c4d5e7e6d5b7c8b7b3b7d8d5
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
We2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5f1c4e7e6b1c3f8c5d2d4c5b4c4d5e6d5d1g4e8f8g1f3d7d6g4g3b8c6e1g1
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Wasjukow-Spasski,1959)
WBe2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5f1c4e7e6b1c3d7d6c3d5e6d5c4d5c7c6d5f7e8f7c5d6d8e8d1f3f7g8f3e3c8e6g1e2b8d7e1g1d7e5e3e5e6c4e5e8a8e8
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Prachov-Slawow,1961)
WBe2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5f1c4e7e6b1c3d5c3d2c3f8c5d1g4e8f8
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Markland-Ghizdavu,1973)
We2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5f1c4e7e6b1c3d5c3d2c3b8c6c1f4b7b6c5b6a7b6g1f3f8e7e1g1e8g8d1e2
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Angelow-Orew,1971)
WBe2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5f1c4e7e6b1c3d5c3d2c3b8c6c1f4f8c5d1g4g7g5f4g5h8g8g1h3c5e7f2f4c6e5f4e5e7g5g4h5g8g7e1g1d8e7
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Angelow-Suba,1975)
WBe2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5f1c4e7e6b1c3d5c3d2c3b8c6c1f4d8h4d1d2c6e5c4e2e5g6f4c7f8c5c7g3h4a4h2h4h7h5
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Matschulski-Gurgenidse,1973)
WBe2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5f1c4e7e6d2d4b7b6c5b6a7b6g1f3c8a6c4a6b8a6e1g1f8e7
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
WBe2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5f1c4e7e6d2d4d7d6c5d6c7d6g1f3d5b6c4d3b8c6e1g1c6b4
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Dworezki-Taimanov,1975)
We2e4g8f6e4e5f6d5c2c4d5b6c4c5b6d5f1c4e7e6d2d4d7d6c5d6c7d6d1e2b8c6g1f3f8e7e1g1e8g8e2e4b7b6c4d3g7g6c1h6f8e8b1d2d5b4d3b1c8a6f1d1d6e5d4e5d8d5
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
WBe2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4g7g6b1c3d6e5f4e5f8g7c1e3e8g8g1f3c7c5d4c5b6d7e5e6f7e6d1c2d8a5f1e2
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Gasic-Michaltschischin,1970)
We2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4c8f5b1c3e7e6c1e3b8a6e5d6c7d6g1f3f8e7f1e2e8g8a1c1
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
We2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4c8f5b1c3e7e6c1e3f8e7g1f3e8g8f1d3f5d3d1d3d6d5b2b3d5c4b3c4b8c6e1g1
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Ljubojevic-Moses,1969)
We2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5c7c5d4d5e7e6b1c3e6d5c4d5d8h4g2g3h4d4f1b5c8d7d1e2b6d5e5e6f7e6e2e6d5e7g1f3
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Gruenfeld-Ljubojevic,1979)
WBe2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5c7c5d4d5e7e6b1c3e6d5c4d5c5c4g1f3c8g4d1d4g4f3g2f3f8b4f1c4e8g8h1g1g7g6c1g5d8c7c4b3b4c5d4f4c5g1d5d6c7c5c3e4c5d4a1d1d4b2e5e6b8d7
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Suetin-Mikenas,1961)
WBe2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5c8f5b1c3e7e6g1f3f8e7f1e2e8g8e1g1f7f6c1e3f6e5f3e5b8d7e5f3h7h6c4c5b6d5c3d5e6d5d1b3d7f6f3e5d8c8a1e1c7c6
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Pithart-Williams,1972)
WBe2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5c8f5b1c3e7e6g1f3f8b4c1e3c7c5f1e2b8c6e1g1c5d4f3d4c6d4e3d4f5c2d1d2a8c8g1h1e8g8b2b3b4c5c3b5c5d4b5d4c2g6e2f3c8c7d2e3c7d7
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Velimirovic-Martz,1973)
We2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5c8f5b1c3e7e6g1f3f8b4f1d3f5g4e1g1b8c6c4c5b4c3b2c3b6d5d1e1
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
We2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6g1f3c8g4e5e6f7e6c4c5b6c8f1b5g4f3d1f3d8d5b1d2g7g6e1g1d5f3d2f3f8g7c1e3
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
WBe2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6g1f3c8g4e5e6f7e6c4c5b6d7f1e2e6e5e1g1e5d4f3g5g4e2d1e2d7e5g5e6d8d7e2h5g7g6h5h7d7e6h7h8e5d7
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
WBe2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6g1f3c8g4e5e6f7e6c4c5e6e5c5b6e5e4d4d5e4f3g2f3g4h5b6c7d8c7d5c6c7c6f1e2a8d8c1d2
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
We2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6g1f3c8g4e5e6f7e6c4c5g4f3d1f3c6d4f3f2b6a4c1e3d8d5b1a3
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Keeley-Hewitt,1962)
Be2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6g1f3c8g4e5e6f7e6c4c5b6d5f1b5d8d7b1d2g7g6d1a4f8g7f3e5g7e5d4e5d5e3a4e4e8g8e4e3c6b4
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Zuidema-Hecht,1971)
WBe2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3f8b4f1e2e8g8e1g1b4c3b2c3c6a5f3d2d8d7f1f4f5g6d1f1c7c5
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
We2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3f8b4a1c1e8g8a2a3b4c3c1c3d8d7f1e2a8d8e1g1f5g4g1h1g4f3e2f3c6d4e3g5
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Hora-Pribly,1972)
WBe2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3f5g4d1d2f8e7e1c1a7a5h2h3g4h5g2g4h5g6h3h4c6b4
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Kadrew-Bogdanow,1963)
We2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3c6b4a1c1c7c5f1e2f5g4e1g1g4f3e2f3b6c4
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Negyesy-Tartakower,1925)
# 11. .... c5d4 (?)
We2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3c6b4a1c1c7c5f1e2c5d4f3d4f5g6a2a3b4c6d4c6b7c6d1d8e8d8e3b6a7b6e2f3a8c8c3e4
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Keres-Saitar,1943)
WBe2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3c6b4a1c1c7c5f1e2f8e7e1g1e8g8a2a3c5d4f3d4b4c6d4f5e6f5f1f5g7g6f5f1e7g5e3c5f8e8d1d8a8d8c1d1c6e5c3e4d8d1
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Honfi-Ghizdavu,1973)
WBe2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3d8d7f1e2e8c8e1g1f5g4c4c5b6d5c3d5d7d5f3g5g4e2d1e2c6d4e3d4d5d4g1h1d4d2e2d2d8d2f1f7f8c5g5e6
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
WBe2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3d8d7f1e2e8c8e1g1f7f6d4d5c6e5f3e5f6e5a2a4a7a5c3b5f8b4d5d6c7c5e3d2
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Hecht-Timman,1971)
WBe2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3f8e7f1e2e8g8e1g1f7f6e5f6e7f6d1d2d8e7a1d1a8d8d2c1h7h6g1h1g8h8h2h3f5h7e3g1f8e8f1e1e7f7
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
We2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3f8e7f1e2e8g8e1g1f7f6e5f6e7f6d1d2d8e8e3g5a8d8g5f6f8f6a1d1f5g4c3e4f6f5d2e3
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Lutikow-Bagirow,1960)
We2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3f8e7f1e2e8g8e1g1f7f6e5f6e7f6d1d2f8f7a1d1f7d7c4c5b6d5c3d5e6d5f3e5f6e5f1f5e5f6e2g4
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Marjanovic-Roguli,1975)
We2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3f8e7d4d5e6d5c4d5c6b4f3d4f5d7e5e6f7e6d5e6d7c6d1g4e7h4g2g3c6h1e1c1d8f6g3h4e8g8
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
WBe2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3f8e7d4d5c6b4f3d4f5g6a2a3c7c5d4e6f7e6a3b4c5b4c3a4e8g8a4b6a7b6a1a8d8a8d5d6e7d8f1e2b4b3
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
We2e4g8f6e4e5f6d5d2d4d7d6c2c4d5b6f2f4d6e5f4e5b8c6c1e3c8f5b1c3e7e6g1f3f8e7d4d5c6b4a1c1e6d5a2a3c7c5a3b4d5d4e3d4c5d4f3d4d8b8d4f5b8e5f1e2e5f5c4c5b6d7e2g4f5e5d1e2e5e2e1e2d7e5
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Panow-Mikenas,1943)
Be2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4h2h3g4f3d1f3d6e5d4e5e7e6a2a3b8d7f3g3h7h5b1d2h5h4g3b3h8h5d2f3d7e5
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Kupreitschik-Bagirow,1970)
Be2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4h2h3g4f3d1f3d6e5d4e5e7e6f3e4b8d7f1c4d7c5e4e2d5b6c4b3a7a5a2a3c5b3c2b3f8e7
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Shurawljow-Alburt,1974)
Be2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4h2h3g4f3d1f3d6e5d4e5e7e6f1c4b8c6f3e4d5e7c1e3e7f5e1g1d8h4e4h4f5h4c4b5h4f5b5c6b7c6b1d2f5e3f2e3a8d8
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
WBe2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4c2c4d5b6f1e2d6e5c4c5e5e4c5b6e4f3e2f3g4f3d1f3b8c6e1g1c6d4f3b7a7b6c1e3a8b8b7e4d4b5
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Bschniew-Sergejew,1982)
WBe2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2c7c6e1g1g4f3e2f3d6e5d4e5e7e6d1e2b8d7f1e1d8c7c1d2f8c5c2c4d5e7d2c3a7a5
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Unzicker-Schmid,1959)
We2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2c7c6f3g5g4e2d1e2d6e5d4e5e7e6e1g1b8d7c2c4d5e7b1c3e7f5g5f3d8c7f1e1f8b4c1d2
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
WBe2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2c7c6f3g5g4f5e5e6f7e6g2g4f5g6e2d3g6d3d1d3g7g6e1g1f8h6g5e6d8d7d3e2h6c1f1c1b8a6
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Estrin-Gik,1968)
WBe2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2b8c6c2c4d5b6e5d6e7d6e1g1f8e7b1c3e8g8b2b3e7f6c1e3d6d5c4c5b6c8h2h3g4e6b3b4a7a6a1b1c8e7
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
We2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2b8c6e1g1d5b6h2h3g4f3e2f3d6e5d4e5d8d1f1d1e7e6b2b3f8e7
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
We2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2e7e6e1g1b8c6c2c4d5b6e5d6c7d6d4d5e6d5c4d5g4f3g2f3c6e5e2b5e5d7d1d4d8f6f1e1f8e7d4f6g7f6b1c3e8d8f3f4
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Minic-Hort,1969)
WBe2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2e7e6e1g1f8e7c2c4d5b6e5d6c7d6b2b3b8c6b1c3e8g8c1e3d6d5c4c5b6c8b3b4a7a6a1b1e7f6a2a4c8e7b4b5c6a5e3f4e7f5f3e5g4e2c3e2a6b5a4b5
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Makarytschew-Palatnik,1974)
WBe2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2e7e6e1g1f8e7c2c4d5b6e5d6c7d6b2b3b8c6c1b2e8g8b1d2d6d5c4c5b6d7a2a3a7a6b3b4d8c7
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Timman-Bagirow,1971)
We2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2e7e6e1g1f8e7c2c4d5b6e5d6c7d6b1c3e8g8c1e3b8c6d4d5g4f3e2f3c6e5d5e6f7e6f3g4e5c4g4e6g8h8e3b6c4b6d1b3e7f6
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (unknown)
WBe2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2e7e6e1g1f8e7c2c4d5b6e5d6c7d6b1c3e8g8c1e3d6d5c4c5g4f3e2f3b6c4e3f4b8c6b2b3c4a5a1c1b7b6c3a4e7f6f4e3b6b5a4c3b5b4
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Medina-Hecht,1972)
WBe2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2e7e6e1g1f8e7c2c4d5b6h2h3g4h5e5d6c7d6b1d2b8c6b2b3e8g8c1b2d6d5c4c5b6d7a2a3f7f6b3b4a7a6f1e1h5f7d2f1b7b6f1e3d8c7d1d2f8d8
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Kavalek-Schmidt,1974)
WBe2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2e7e6e1g1f8e7c2c4d5b6h2h3g4h5b1c3e8g8c1e3d6d5c4c5h5f3e2f3b6c4e3f4b7b6b2b3c4a5a1c1b6c5d4c5a5c6f1e1e7g5c3d5e6d5f4g5d8g5f3d5
#   .   2   .   3   .   4   .   5   .   6   .   7   .   8   .   9   .   0   .
# (Matanovic-Vukic,1975)
WBe2e4g8f6e4e5f6d5d2d4d7d6g1f3c8g4f1e2e7e6e1g1f8e7c2c4d5b6h2h3g4h5b1c3e8g8c1e3d6d5c4c5h5f3g2f3b6c8b2b4f7f6f3f4f6e5f4e5d8e8e2d3e7d8
SHAR_EOF
true || echo 'restore of op/op.aljechin failed'
fi
echo 'End of UnixChess part 4'
echo 'File op/op.aljechin is continued in part 5'
echo 5 > _shar_seq_.tmp
exit 0
-- 
   /              |    -: Marc Laukien :-     |
  /__             |                           |   _  _           __
 /   \  /_  /  /  |   ml@brumuc.muc.sub.org   |  / \/ |   /  /  /
/____/ /   /__/   | sigma@salyko.doit.sub.org | /     |  /__/  /__