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(¬_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 | / | /__/ /__