aућp щ ц7чяяяOяoЂ   А а @`Ђ Аа!ря#@%`'Ђ) +А-а/1 3@5`7Ђ9 ;А=а?A CряE`GряI KАяяяOряQряSряU`WЂY [А]а_a c@e`gЂiряяяяяяяяq s@u`wЂy {А}аЃ ѓ@…`‡Ђ‰ ‹АЌаЏ ‘ “@ •` —Ђ ™  яП ќа џ Ў Ј@ Ґ` §Ђ ©  «А ­а Ї ± і@ µ` ·Ђ №  »А Ѕа ї Б Г@ Е` ЗЂ Й  ЛА На ПряС У@ Х` ЧЂ Щ  ЫА Эа Яб г@е`зЂй лАнапс у@х`чЂщ ыАэая!AaЃ Ў Б б!яяяяoЃЎБб!!#A%a'Ѓ)Ў+Б-б/1!3A5a7Ѓ9Ў;Б=б?я/CAEaGЃIЎKБMбOQ!SAUaWЃYЎ[Б]б_a!cAeagЃiЎkБmбoq!sAuawЃyЎ{Б}бЃ!ѓся…a‡Ѓ‰Ў‹БЌбЏ‘!“A•a—Ѓ™ЎяПќбџЎ!ЈAҐa§Ѓ©Ў«Б­бЇ±!іAµся·ся№ЎяПЅбїя/яOяoяЏЙЎЛБНбПС!УAХaЧЃЩЎЫБЭбЯб!гсяеaзсяяЇлБнбпс!уAхсячЃщЎыБэбя " B b ‚ ў В в !"!B!b!‚!ў!В!в!"!тяяO"%b"яЏ")тя+В"-в"/#1"#3B#5b#7‚#9ў#;В#=в#?$A"$CB$Eb$G‚$Iў$KВ$Mв$O%Q"%SB%Ub%W‚%Yў%[В%]в%_&a"&cB&eb&g‚&iў&kВ&mв&o'q"'sB'ub'w‚'yў'{В'}в'(яяяѓB(…b(‡‚(яї(яП(ячяяяOяoЂ   А а @`Ђ Аа!ря#@%`'Ђ) +А-а/1 3@5`7Ђ9 ;А=а?A CряE`GряI KАяяяOряQряSряU`WЂY [А]а_a c@e`gЂiряяяяяяяяq s@u`wЂy {А}аЃ ѓ@…`‡Ђ‰ ‹АЌаЏ ‘ “@ •` —Ђ ™  яП ќа џ Ў Ј@ Ґ` §Ђ ©  «А ­а Ї ± і@ µ` ·Ђ №  »А Ѕа ї Б Г@ Е` ЗЂ Й  ЛА На ПряС У@ Х` ЧЂ Щ  ЫА Эа Яб г@е`зЂй лАнапс у@х`чЂщ ыАэая!AaЃ Ў Б б!яяяяoЃЎБб!!#A%a'Ѓ)Ў+Б-б/1!3A5a7Ѓ9Ў;Б=б?я/CAEaGЃIЎKБMбOQ!SAUaWЃYЎ[Б]б_a!cAeagЃiЎkБmбoq!sAuawЃyЎ{Б}бЃ!ѓся…a‡Ѓ‰Ў‹БЌбЏ‘!“A•a—Ѓ™ЎяПќбџЎ!ЈAҐa§Ѓ©Ў«Б­бЇ±!іAµся·ся№ЎяПЅбїя/яOяoяЏЙЎЛБНбПС!УAХaЧЃЩЎЫБЭбЯб!гсяеaзсяяЇлБнбпс!уAхсячЃщЎыБэбя " B b ‚ ў В в !"!B!b!‚!ў!В!в!"!тяяO"%b"яЏ")тя+В"-в"/#1"#3B#5b#7‚#9ў#;В#=в#?$A"$CB$Eb$G‚$Iў$KВ$Mв$O%Q"%SB%Ub%W‚%Yў%[В%]в%_&a"&cB&eb&g‚&iў&kВ&mв&o'q"'sB'ub'w‚'yў'{В'}в'(яяяѓB(…b(‡‚(яї(яП(яA508 Ёq‡CURSES –EXECS *–nSRC B–COPYING ¬–йБ1GNUCHESSBOO °–цњ®GULAM G µ–"яGULAM HLP ·–#Ъ README NOW №–'_GULAM_UKPRG ј–*uXREADME ST Ж–ЃуGNUCHESSTXTЙ–‚KLEES DIT -j‡‰4LEESMIJ TXT vtmЉ . –.. –CURSES NET –ЂCURSES C –sCURSES DOC –"О„CURSES H –D№CURSES MAN –HєPORTAB H –MфREADME TOO –NREADME TXT –P=TWINKLE C –R7TWINKLE TOS –T~WMAKEFILE "–jTEST C $–kRAND TXT &–lґRAND C (–mFrom idec!stc!ukc!mcsun!uunet!ginosko!gem.mps.ohio-state.edu!apple!sun-barr!newstop!sun!grapevine!koreth@panarthea.ebay.sun.com Thu Oct 19 19:59:34 BST 1989 Article 163 of comp.sources.atari.st: Path: prlhp1!idec!stc!ukc!mcsun!uunet!ginosko!gem.mps.ohio-state.edu!apple!sun-barr!newstop!sun!grapevine!koreth@panarthea.ebay.sun.com >From: koreth@panarthea.ebay.sun.com (Steven Grimm) Newsgroups: comp.sources.atari.st Subject: v02i090: curses -- Screen updating package part01/02 Keywords: shar, C Message-ID: <34528@grapevine.uucp> Date: 12 Oct 89 20:41:01 GMT Sender: news@grapevine.EBay Reply-To: gray@hplb.hpl.hp.com (Graham Higgins) Lines: 1633 Approved: koreth@panarthea.ebay.sun.com Submitted-by: gray@hplb.hpl.hp.com (Graham Higgins) Posting-number: Volume 2, Issue 90 Archive-name: curses/part01 Following a request on comp.sys.atari.st, here's the source to curses. Apologies to the original author, TWINKLE.TOS didn't appear in the posting where I obtained this, the poster wanted to post plain text - understandable. [Since that's the way I want sources submitted, VERY understandable. :) -sg] Cheers, Graham ====== ------------------------------------------------------------------ Graham Higgins | Phone: (0272) 799910 x 24060 Hewlett-Packard Labs | gray@hpl.hp.co.uk Bristol | gray%hplb.uucp@ukc.ac.uk U.K. | gray@hplb.hpl.hp.com ------------------------------------------------------------------ Disclaimer: My opinions above are exactly that, mine and opinions. ------------------------------------------------------------------ ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее/* #[curses: simple-minded implementation of the curses package */ /* #[intro: introduction */ /* */ /* This source and resulting object may be modified, used or distributed by */ /* anyone who so desires under the following conditions : */ /* */ /* 1) This notice and the copyright notice shall not be removed or */ /* changed. */ /* 2) No credit shall be taken for this source and resulting objects */ /* 3) This source or resulting objects is not to be traded, sold or */ /* used for personal gain or profit. */ /* 4) Inclusion of this source or resulting objects in commercially */ /* available packages is forbidden without written consent of the */ /* author of this source. */ /* GNU C version, RMG 16/06/91 */ /* */ /* #]intro: */ /* #[include: include files */ #include "portab.h" #ifndef __GNUC__ #include "osbind.h" #else #include #endif #include "curses.h" #ifndef __GNUC__ /* #]include: */ /* define supervisor mode entry forgotten in osbind.h */ #define Supexec(a) xbios(38,a) #endif /* terminal states : cooked, cbreak and raw */ #define COOKED 0 #define CBREAK 1 #define RAW 2 /* define address of system-variable _conterm for kbshift return value */ #define CONTERM (*((char *)0x484)) /* #[globals: definition of global variables */ /* #[curglob: define the following variables as external in curses.h */ WINDOW *curscr ; WINDOW *stdscr ; char *Def_term = "AtariST" ; bool My_term = FALSE ; char *ttytype = "Atari ST-series computer, VT52/CURSES mode" ; int LINES = 25 ; int COLS = 80 ; int ERR = 0 ; int OK = 1 ; /* #]curglob: */ bool _doecho = FALSE ; bool _nlmap = FALSE ; bool _curini = FALSE ; BYTE _modinp = 0 ; /* set input to Un*x compatability, i.e only char's */ BYTE _csry = 0 ; BYTE _csrx = 0 ; char *cpyrid = "Copyright, R. van't Veen. All rights reserved. 1987" ; #ifndef __GNUC__ overlay "curses" /* put in separate segment */ #endif /* #]globals: */ /* #[miscel: miscellaneous curses functions */ /* #[initscr: initialize the curses package */ initscr() { WORD i,j ; WINDOW *newwin() ; if ( _curini ) { wrefresh(curscr) ; if ( cpyrid == NULL ) Pterm(-12L) ; ERR = 1 ; OK = 0 ; return ; } ; _curini = 1 ; curscr = newwin(0,0,0,0) ; if ( curscr == NULL ) { ERR = 1 ; OK = 0 ; return ; } ; stdscr = newwin(0,0,0,0) ; if ( stdscr == NULL ) { ERR = 1 ; OK = 0 ; return ; } ; Bconout(2,'\033') ; Bconout(2,'E') ; Bconout(2,'\033') ; Bconout(2,'w') ; Bconout(2,'\033') ; Bconout(2,'f') ; _csry = 0 ; _csrx = 0 ; ERR = 0 ; OK = 1 ; } /* #]initscr: */ /* #[endwin: end of curses package */ endwin() { if ( !_curini ) { ERR = 1 ; OK = 0 ; return ; } ; _curini = 0 ; delwin(stdscr) ; delwin(curscr) ; _movcur(LINES,0) ; Bconout(2,'\033') ; Bconout(2,'e') ; ERR = 1 ; OK = 0 ; } /* #]endwin: */ /* #[newwin: create a new window for the user */ WINDOW *newwin(l,c,by,bx) int l,c,bx,by ; { WINDOW *tmp ; WORD i, j, nl, nc ; char *malloc() ; tmp = ( WINDOW * ) malloc(sizeof(WINDOW)) ; if ( tmp == NULL ) { ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_curx = 0 ; tmp->_cury = 0 ; tmp->_clear = 0 ; tmp->_leave = 0 ; tmp->_scroll = 0 ; if ( l == 0 ) nl = LINES - by ; else nl = l ; if ( c == 0 ) nc = COLS - bx ; else nc = c ; if ( nl < 1 || nl > LINES || nc < 1 || nc > COLS ) { free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_maxy = nl - 1 ; tmp->_maxx = nc - 1 ; if ( nl == LINES && nc == COLS ) tmp->_flags = _FULLWIN ; else tmp->_flags = 0 ; if ( by < 0 || by >= LINES || bx < 0 || bx >= COLS ) { free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_begy = by ; tmp->_begx = bx ; tmp->_y = ( WORD ** ) malloc(sizeof(WORD *)*(tmp->_maxy+1)) ; if ( tmp->_y == NULL ) { free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_y[0] = ( WORD * ) malloc(sizeof(WORD)*(tmp->_maxy+1)*(tmp->_maxx+1)) ; if ( tmp->_y[0] == NULL ) { free(tmp->_y) ; free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; for ( i = 1 ; i <= tmp->_maxy ; i++ ) tmp->_y[i] = tmp->_y[0] + i * ( tmp->_maxx + 1 ) ; for ( i = 0 ; i <= tmp->_maxy ; i++ ) { for ( j = 0 ; j <= tmp->_maxx ; j++ ) tmp->_y[i][j] = ' ' ; } ; /* make everything changed on first update of tmp */ touchwin(tmp) ; ERR = 0 ; OK = 1 ; return(tmp) ; } /* #]newwin: */ /* #[delwin: delete a window */ delwin(w) WINDOW *w ; { if ( w == NULL ) { ERR = 1 ; OK = 0 ; return ; } ; if ( w->_flags & _SUBWIN ) free(w->_y) ; else { free(w->_y[0]) ; free(w->_y) ; } ; free(w) ; ERR = 0 ; OK = 1 ; } /* #]delwin: */ /* #[mvwin: move window */ mvwin(w,y,x) WINDOW *w ; int y,x ; { if ( y < 0 || x < 0 || ( y + w->_maxy + 1 ) > LINES || ( x + w->_maxx + 1 ) > COLS ) { ERR = 1 ; OK = 0 ; return ; } ; w->_begy = y ; w->_begx = x ; touchwin(w) ; ERR = 0 ; OK = 1 ; } /* #]mvwin: */ /* #[touchwin: touch a window */ touchwin(w) WINDOW *w ; { WORD i,j ; w->_firstch = w->_y[0] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; for ( i = 0 ; i <= w->_maxy ; i++ ) for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[i][j] = w->_y[i][j] | TOUCHED ; ERR = 0 ; OK = 1 ; } /* #]touchwin: */ /* #[subwin: create a sub-window */ WINDOW *subwin(w,l,c,by,bx) WINDOW *w ; int l,c,by,bx ; { WINDOW *tmp ; WORD i, nl, nc ; char *malloc() ; /* cannot take subwindows of curscr */ if ( w == curscr ) { ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp = ( WINDOW * ) malloc(sizeof(WINDOW)) ; if ( tmp == NULL ) { ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_curx = 0 ; tmp->_cury = 0 ; tmp->_clear = 0 ; tmp->_leave = 0 ; tmp->_scroll = 0 ; if ( l == 0 ) nl = LINES - by ; else nl = l ; if ( c == 0 ) nc = COLS - bx ; else nc = c ; if ( l < 1 || l > (w->_maxy+1) || c < 1 || c > (w->_maxx+1) ) { free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_maxy = nl - 1 ; tmp->_maxx = nc - 1 ; if ( nl == LINES && nc == COLS ) tmp->_flags = _FULLWIN | _SUBWIN ; else tmp->_flags = _SUBWIN ; if ( by < w->_begy || by >= (w->_maxy+w->_begy) || bx < w->_begx || bx >= (w->_maxx+w->_begx) ) { free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_begy = by ; tmp->_begx = bx ; tmp->_y = ( WORD ** ) malloc(sizeof(WORD *)*(tmp->_maxy+1)) ; if ( tmp->_y == NULL ) { free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_y[0] = w->_y[0] + ( tmp->_begy - w->_begy ) * ( w->_maxx + 2 ) + ( tmp->_maxx - w->_maxx ) ; for ( i = 1 ; i <= tmp->_maxy ; i++ ) tmp->_y[i] = tmp->_y[0] + i * ( w->_maxx + 2 ) ; /* make everything changed on first update of tmp */ touchwin(tmp) ; ERR = 0 ; OK = 1 ; return(tmp) ; } /* #]subwin: */ /* #[leaveok: tell curses where to leave the cursor after updating */ leaveok(w,f) WINDOW *w ; bool f ; { w->_leave = f ; ERR = 0 ; OK = 1 ; } /* #]leaveok: */ /* #[scrollok: tell curses it is ok to scroll the window */ scrollok(w,f) WINDOW *w ; bool f ; { w->_scroll = f ; ERR = 0 ; OK = 1 ; } /* #]scrollok: */ /* #[nl: tell curses to map CR to CR,LF */ nl() { _nlmap = 1 ; ERR = 0 ; OK = 1 ; } /* #]nl: */ /* #[nonl: tell curses not to map CR to CR,LF */ nonl() { _nlmap = 0 ; ERR = 0 ; OK = 1 ; } /* #]nonl: */ /* #[longname: return the full name of the terminal */ /* always returns the contents of ttytype in name */ longname(termbuf,name) char *termbuf, *name ; { int i ; for ( i = 0 ; ttytype[i] != '\0' ; i++ ) name[i] = ttytype[i] ; name[i] = '\0' ; } /* #]longname: */ /* #]miscel: */ /* #[output: output functions */ /* #[waddch: add a character to a window */ waddch(w,c) WINDOW *w ; char c ; { WORD i, tpos ; ERR = 0 ; OK = 1 ; if ( c >= 0x20 ) { if ( w == curscr ) { if ( ( w->_flags & _STANDOUT )) { w->_y[w->_cury][w->_curx] = c | STANDOUT | TOUCHED ; Bconout(2,'\033') ; Bconout(2,'p') ; Bconout(5,c) ; Bconout(2,'\033') ; Bconout(2,'q') ; } else { w->_y[w->_cury][w->_curx] = c | TOUCHED ; Bconout(5,c) ; } ; _csrx++ ; } else { if ( (w->_flags & _STANDOUT )) w->_y[w->_cury][w->_curx] = c | STANDOUT | TOUCHED ; else w->_y[w->_cury][w->_curx] = c | TOUCHED ; if ( w->_firstch == 0 ) { w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = w->_firstch ; } else { if ( w->_firstch > &(w->_y[w->_cury][w->_curx]) ) w->_firstch = &(w->_y[w->_cury][w->_curx]) ; else { if ( w->_lastch < &(w->_y[w->_cury][w->_curx]) ) w->_lastch = &(w->_y[w->_cury][w->_curx]) ; } ; } ; } ; wmove(w,w->_cury,w->_curx+1) ; } else if ( c == '\n' ) { wclrtoeol(w) ; if ( _nlmap ) wmove(w,w->_cury+1,0) ; else wmove(w,w->_cury+1,w->_curx) ; } else if ( c == '\r' ) { wmove(w,w->_cury,0) ; } else if ( c == '\t' ) { tpos = ( w->_curx + w->_begx ) % 8 ; tpos = ( tpos == 0 ) ? 8 : tpos ; for ( i = 0 ; i < tpos ; i++ ) waddch(w,' ') ; } else { if ( w == curscr ) { if ( ( w->_flags & _STANDOUT )) { w->_y[w->_cury][w->_curx] = c | STANDOUT | TOUCHED ; Bconout(2,'\033') ; Bconout(2,'p') ; Bconout(5,c) ; Bconout(2,'\033') ; Bconout(2,'q') ; } else { w->_y[w->_cury][w->_curx] = c | TOUCHED ; Bconout(5,c) ; } ; _csrx++ ; } else { if ( (w->_flags & _STANDOUT )) w->_y[w->_cury][w->_curx] = c | STANDOUT | TOUCHED ; else w->_y[w->_cury][w->_curx] = c | TOUCHED ; if ( w->_firstch == 0 ) { w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = w->_firstch ; } else { if ( w->_firstch > &(w->_y[w->_cury][w->_curx]) ) w->_firstch = &(w->_y[w->_cury][w->_curx]) ; else { if ( w->_lastch < &(w->_y[w->_cury][w->_curx]) ) w->_lastch = &(w->_y[w->_cury][w->_curx]) ; } ; } ; } ; wmove(w,w->_cury,w->_curx+1) ; } ; } /* #]waddch: */ /* #[waddstr: add a string of characters to a window */ waddstr(w,s) WINDOW *w ; char *s ; { WORD i ; ERR = 0 ; OK = 1 ; for ( i = 0 ; s[i] != '\0' ; i++ ) waddch(w,s[i]) ; } /* #]waddstr: */ /* #[box: draw a box around a window */ box(w,v,h) WINDOW *w ; char v,h ; { WORD i ; ERR = 0 ; OK = 1 ; for ( i = 0 ; i <= w->_maxy ; i++ ) { mvwaddch(w,i,0,v) ; mvwaddch(w,i,w->_maxx,v) ; } ; for ( i = 1 ; i < w->_maxx ; i++ ) { mvwaddch(w,0,i,h) ; mvwaddch(w,w->_maxy,i,h) ; } ; } /* #]box: */ /* #[wclear: clear a window */ wclear(w) WINDOW *w ; { ERR = 0 ; OK = 1 ; werase(w) ; clearok(w,TRUE) ; w->_curx = 0 ; w->_cury = 0 ; } /* #]wclear: */ /* #[wclrtobo: clear a window to the bottom */ wclrtobot(w) WINDOW *w ; { WORD i,j ; ERR = 0 ; OK = 1 ; for ( i = w->_curx ; i <= w->_maxx ; i++ ) w->_y[w->_cury][i] = ' ' | TOUCHED ; for ( i = w->_cury + 1 ; i <= w->_maxy ; i++ ) { for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[i][j] = ' ' | TOUCHED ; } ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'J') ; } else { if ( w->_firstch == 0 ) { w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } else { if ( w->_firstch > &(w->_y[w->_cury][w->_curx]) ) w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } ; } /* #]wclrtobo: */ /* #[wclrtoeo: clear a window to the end of the line */ wclrtoeol(w) WINDOW *w ; { WORD i ; ERR = 0 ; OK = 1 ; for ( i = w->_curx ; i <= w->_maxx ; i++ ) w->_y[w->_cury][i] = ' ' | TOUCHED ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'K') ; } else { if ( w->_firstch == 0 ) { w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = &(w->_y[w->_cury][w->_maxx]) ; } else { if ( w->_firstch > &(w->_y[w->_cury][w->_curx]) ) w->_firstch = &(w->_y[w->_cury][w->_curx]) ; if ( w->_lastch < &(w->_y[w->_cury][w->_maxx]) ) w->_lastch = &(w->_y[w->_cury][w->_maxx]) ; } ; } ; } /* #]wclrtoeo: */ /* #[wdelch: delete a character on a window */ wdelch(w) WINDOW *w ; { WORD ox, oy, i ; ERR = 0 ; OK = 1 ; ox = w->_curx ; oy = w->_cury ; for ( i = ox + 1 ; i <= w->_maxx ; i++ ) { w->_y[oy][i-1] = w->_y[oy][i] | TOUCHED ; } ; w->_y[oy][w->_maxx] = ' ' | TOUCHED ; w->_curx = ox ; w->_cury = oy ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'K') ; for ( i = w->_curx ; i <= w->_maxx ; i++ ) { Bconout(5,(w->_y[w->_cury][i] & 0xff )) ; _csrx++ ; } ; _movcur(w->_cury,w->_curx) ; } else { if ( w->_firstch == 0 ) { w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = &(w->_y[w->_cury][w->_maxx]) ; } else { if ( w->_firstch > &(w->_y[w->_cury][w->_curx]) ) w->_firstch = w->_y[w->_cury] ; if ( w->_lastch < &(w->_y[w->_cury][w->_maxx]) ) w->_lastch = &(w->_y[w->_cury][w->_maxx]) ; } ; } ; } /* #]wdelch: */ /* #[wdeletel: delete a line from a window */ wdeleteln(w) WINDOW *w ; { WORD i,j ; ERR = 0 ; OK = 1 ; for ( i = w->_cury + 1 ; i <= w->_maxy ; i++ ) { for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[i-1][j] = w->_y[i][j] | TOUCHED ; } ; for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[w->_maxy][j] = ' ' | TOUCHED ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'M') ; _csrx = 0 ; _movcur(w->_cury,w->_curx) ; } else { if ( w->_firstch == 0 ) { w->_firstch = w->_y[w->_cury] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } else { if ( w->_firstch > w->_y[w->_cury] ) w->_firstch = w->_y[w->_cury] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } ; } /* #]wdeletel: */ /* #[werase: erase a window */ werase(w) WINDOW *w ; { WORD i,j ; ERR = 0 ; OK = 1 ; for ( i = 0 ; i <= w->_maxy ; i++ ) { for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[i][j] = ' ' | TOUCHED ; } ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'E') ; _csry = 0 ; _csrx = 0 ; _movcur(curscr->_cury,curscr->_curx) ; } else { w->_firstch = w->_y[0] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } /* #]werase: */ /* #[winsch: insert a character */ winsch(w,c) WINDOW *w ; char c ; { WORD ox,oy,i ; BYTE tstr[2] ; ERR = 0 ; OK = 1 ; ox = w->_curx ; oy = w->_cury ; for ( i = w->_maxx - 1 ; i >= ox ; --i ) { w->_y[oy][i+1] = w->_y[oy][i] | TOUCHED ; } ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'K') ; for ( i = w->_curx ; i <= w->_maxx ; i++ ) { Bconout(5,(w->_y[w->_cury][i] & 0xff )) ; _csrx++ ; } ; _movcur(w->_cury,w->_curx) ; } else { if ( w->_firstch == 0 ) { w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = &(w->_y[w->_cury][w->_maxx]) ; } else { if ( w->_firstch > &(w->_y[w->_cury][w->_curx]) ) w->_firstch = &(w->_y[w->_cury][w->_curx]) ; if ( w->_lastch < &(w->_y[w->_cury][w->_maxx]) ) w->_lastch = &(w->_y[w->_cury][w->_maxx]) ; } ; } ; mvwaddch(w,oy,ox,c) ; } /* #]winsch: */ /* #[winsertl: insert a line in a window */ winsertln(w) WINDOW *w ; { WORD ox,oy,i,j ; ERR = 0 ; OK = 1 ; for ( i = w->_maxy - 1 ; i >= w->_cury ; --i ) { for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[i+1][j] = w->_y[i][j] | TOUCHED ; } ; for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[w->_cury][j] = ' ' | TOUCHED ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'L') ; _csrx = 0 ; _movcur(w->_cury,w->_curx) ; } else { if ( w->_firstch == 0 ) w->_firstch = w->_y[w->_cury] ; else { if ( w->_firstch > w->_y[w->_cury] ) w->_firstch = w->_y[w->_cury] ; } ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } /* #]winsertl: */ /* #[wmove: move the cursor of the window to a location */ wmove(w,y,x) WINDOW *w ; int y,x ; { WORD i ; ERR = 0 ; OK = 1 ; if ( x < 0 ) { w->_curx = 0 ; ERR = 1 ; OK = 0 ; } else { if ( x > w->_maxx ) { w->_curx = w->_maxx ; ERR = 1 ; OK = 0 ; } else w->_curx = x ; } ; if ( y < 0 ) { w->_cury = 0 ; ERR = 1 ; OK = 0 ; } else { if ( y > w->_maxy ) { if ( w->_scroll ) { for ( i = w->_maxy ; i < y ; i++ ) scroll(w) ; } ; w->_cury = w->_maxy ; ERR = 1 ; OK = 0 ; } else w->_cury = y ; } ; if ( w == curscr ) { _movcur(curscr->_cury,curscr->_curx) ; } ; } /* #]wmove: */ /* #[woverlay: overlay two windows. */ woverlay(v,w) WINDOW *v, *w ; { WORD i, j ; for ( i = 0 ; i <= w->_maxy && i <= v->_maxy ; i++ ) { for ( j = 0 ; j <= w->_maxx && j <= v->_maxx ; j++ ) { if ( ( v->_y[i][j] & 0xff ) == 0x20 ) w->_y[i][j] = v->_y[i][j] | TOUCHED ; } ; } ; if ( w == curscr ) wrefresh(curscr) ; else { w->_firstch = w->_y[0] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } /* #]woverlay: */ /* #[overwrit: overwrite two windows. */ overwrite(v,w) WINDOW *v, *w ; { WORD i, j ; for ( i = 0 ; i <= w->_maxy && i <= v->_maxy ; i++ ) { for ( j = 0 ; j <= w->_maxx && j <= v->_maxx ; j++ ) { w->_y[i][j] = v->_y[i][j] | TOUCHED ; } ; } ; if ( w == curscr ) wrefresh(curscr) ; else { w->_firstch = w->_y[0] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } /* #]overwrit: */ /* #[wstandou: set the standout flag for a window */ wstandout(w) WINDOW *w ; { w->_flags = w->_flags | _STANDOUT ; ERR = 0 ; OK = 1 ; } /* #]wstandou: */ /* #[wstanden: end standout mode */ wstandend(w) WINDOW *w ; { w->_flags = w->_flags & ( ~_STANDOUT) ; ERR = 0 ; OK = 1 ; } /* #]wstanden: */ /* #]output: */ /* #[input: input functions */ /* #[raw: set terminal in raw mode */ raw() { /* * raw mode means : * when getting a character from the keyboard, return everything * including keyboard shift state. */ int __sshft() ; if ( _modinp == RAW ) return ; Supexec(__sshft) ; _modinp = RAW ; } /* #]raw: */ /* #[noraw: reset terminal from raw mode into cooked mode */ noraw() { int __ushft() ; if ( _modinp != RAW ) return ; Supexec(__ushft) ; _modinp = COOKED ; } /* #]noraw: */ /* #[__sshft: set terminal to return keyboard shift state */ /* execute in supervisor mode only */ __sshft() { int ov, nv ; ov = CONTERM ; nv = ov | 0x08 ; CONTERM = nv ; } /* #]__sshft: */ /* #[__ushft: set terminal to not return keyboard shift state */ /* execute in supervisor mode only */ __ushft() { int ov, nv ; ov = CONTERM ; nv = ov & ~0x08 ; CONTERM = nv ; } /* #]__ushft: */ /* #[crmode: set terminal in cbreak mode */ /* * cbreak mode means for the atari ; * return both keyboard scan code as well as the character value. * kill the process with a process terminate -1 as soons as a control C is met * control D is also recognized to be the EOF. */ crmode() { if ( _modinp == CBREAK ) return ; if ( _modinp == RAW ) noraw() ; _modinp = CBREAK ; } /* #]crmode: */ /* #[nocrmode: reset terminal from cbreak into cooked mode */ nocrmode() { if ( _modinp != CBREAK ) return ; _modinp = COOKED ; } /* #]nocrmode: */ /* #[echo: set curses to echo characters on input */ echo() { _doecho = TRUE ; ERR = 0 ; OK = 1 ; } /* #]echo: */ /* #[noecho: set curses not to echo characters on input */ noecho() { _doecho = FALSE ; ERR = 0 ; OK = 1 ; } /* #]noecho: */ /* #[wgetch: get a character from the terminal */ /* WARNING : wgetch returns a 32-bit value, not a char although only */ /* the lowest 8 bits may actually be transmitted. */ wgetch(w) WINDOW *w ; { bool reset ; LONG retval ; reset = FALSE ; if ( _modinp == COOKED && _doecho == TRUE ) { reset = TRUE ; crmode() ; } ; Bconout(2,'\033') ; Bconout(2,'e') ; switch ( _modinp ) { case COOKED: while ( !Cconis() ) ; retval = Cnecin() ; retval = retval & 0x00ff ; /* kill process on control C */ if ( retval == 0x03 ) Pterm(-1L) ; break ; case CBREAK: while ( !Cconis() ) ; retval = Cnecin() ; /* kill process on control C */ if ( ( retval & 0x00ff ) == 0x03 ) Pterm(-1L) ; break ; case RAW: while ( !Cconis() ) ; retval = Crawcin() ; break ; } ; Bconout(2,'\033') ; Bconout(2,'f') ; if ( _doecho ) waddch(w,(char ) ( 0x00ff & retval )) ; if ( reset ) nocrmode() ; return(retval) ; } /* #]wgetch: */ /* #[wgetstr: get a string from the terminal */ wgetstr(w,s) WINDOW *w ; char *s ; { WORD ox, oy ; bool reset, end ; char c ; int i ; LONG wgetch() ; reset = FALSE ; getyx(w,oy,ox) ; if ( _modinp == COOKED && _doecho == TRUE ) { reset = TRUE ; _doecho = FALSE ; } ; i = 0 ; for ( end = FALSE ; !end ; i++ ) { wrefresh(w); switch ( _modinp ) { case COOKED: c = ( char ) wgetch(w) ; if ( c == 0x0d || c == 0x0a || c == 0x04 || c == 0 ) { s[i] = '\0' ; end = TRUE ; break ; } ; /* receive a backspace */ if ( c == 0x08 ) { if ( i != 0 ) { --i ; s[i] = 0 ; if ( reset ) { int x, y; getyx(w, y, x); mvwaddch(w,y,x-1,' '); wmove(w, y, x-1); /* mvwaddstr(w,oy,ox,s) ; */ } } i--; break; } /* receive control U or line kill */ if ( c == 0x13 ) { i = 0 ; if ( reset ) wmove(w,oy,ox) ; break ; } ; s[i] = c ; if (reset) waddch(w,c) ; break ; case CBREAK: c = ( char ) wgetch(w) ; if ( c == 0x0d || c == 0x0a || c == 0x04 || c == 0 ) { s[i] = '\0' ; end = TRUE ; break ; } ; s[i] = c ; break ; case RAW: c = ( char ) wgetch(w) ; if ( c == 0x0d || c == 0x0a || c == 0x04 || c == 0 ) { s[i] = '\0' ; end = TRUE ; break ; } ; s[i] = c ; break ; } ; } ; if ( reset ) _doecho = TRUE ; } /* #]wgetstr: */ /* #]input: */ /* #[wrefresh: refresh a window on the screen */ wrefresh(w) WINDOW *w ; { WORD i,j,k,l ; WORD c, *ptr ; ERR = 0 ; OK = 1 ; if ( w != curscr && curscr->_clear ) { Bconout(2,'\033') ; Bconout(2,'E') ; _csry = 0 ; _csrx = 0 ; for ( i = 0 ; i < LINES ; i++ ) { for ( j = 0 ; j < COLS ; j++ ) curscr->_y[i][j] = ' ' ; } ; curscr->_clear = 0 ; } ; if ( w->_clear ) { if ( ( w->_flags & _FULLWIN ) ) { Bconout(2,'\033') ; Bconout(2,'E') ; _csry = 0 ; _csrx = 0 ; for ( i = 0 ; i < LINES ; i++ ) { for ( j = 0 ; j < COLS ; j++ ) curscr->_y[i][j] = ' ' ; } ; } ; w->_firstch = w->_y[0] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; w->_clear = 0 ; } ; if ( w != curscr ) { if ( w->_firstch != 0 ) { if ( w->_flags & _SUBWIN ) { for ( i = 0 ; i <= w->_maxy ; i++ ) { ptr = w->_y[i] ; if ( ptr >= w->_firstch && ptr <= w->_lastch ) { for ( j = 0 ; j <= w->_maxx ; j++ ) { c = ptr[j] ; k = i + w->_begy ; l = j + w->_begx ; if ( ( c & TOUCHED ) && ( k >= 0 && k < LINES && l >= 0 && l < COLS ) ) { ptr[j] = c & ~TOUCHED ; if ( ( curscr->_y[k][l] & 0x01ff ) != ( c & 0x01ff ) ) { curscr->_y[k][l] = c ; _movcur(k,l) ; if ( ( c & STANDOUT ) ) { Bconout(2,'\033') ; Bconout(2,'p') ; Bconout(5,(c & 0xff)) ; Bconout(2,'\033') ; Bconout(2,'q') ; } else { Bconout(5,( c & 0xff )) ; } ; _csry = k ; _csrx = l + 1 ; } ; } ; } ; } ; } ; } else { for ( ptr = w->_firstch ; ptr <= w->_lastch ; ptr++ ) { c = *ptr ; if ( c & TOUCHED ) { k = ( WORD ) ( ptr - w->_y[0] ) ; k = k / ( w->_maxx + 1 ) ; l = ( WORD ) ( ptr - w->_y[k] ) + w->_begx ; k = k + w->_begy ; if ( k >= 0 && k < LINES && l >= 0 && l < COLS ) { *ptr = c & ~TOUCHED ; if ( ( curscr->_y[k][l] & 0x01ff ) != ( c & 0x01ff ) ) { curscr->_y[k][l] = c ; _movcur(k,l) ; if ( ( c & STANDOUT ) ) { Bconout(2,'\033') ; Bconout(2,'p') ; Bconout(5,(c & 0xff)) ; Bconout(2,'\033') ; Bconout(2,'q') ; } else { Bconout(5,( c & 0xff )) ; } ; _csry = k ; _csrx = l + 1 ; } ; } ; } ; } ; } ; w->_firstch = 0 ; w->_lastch = 0 ; if ( w->_leave ) { w->_curx = _csrx - w->_begx ; w->_cury = _csry - w->_begy ; curscr->_cury = _csry ; curscr->_curx = _csrx ; } else { curscr->_cury = w->_cury + w->_begy ; curscr->_curx = w->_curx + w->_begx ; _movcur(curscr->_cury, curscr->_curx) ; } ; } else { curscr->_cury = w->_cury + w->_begy ; curscr->_curx = w->_curx + w->_begx ; _movcur(curscr->_cury, curscr->_curx) ; } ; } else { Bconout(2,'\033') ; Bconout(2,'H') ; _csry = 0 ; _csrx = 0 ; for ( i = 0 ; i < LINES ; i++ ) { for ( j = 0 ; j < COLS ; j++ ) { c = w->_y[i][j] ; if ( ( c & STANDOUT ) ) { Bconout(2,'\033') ; Bconout(2,'p') ; Bconout(5,(c & 0xff)) ; Bconout(2,'\033') ; Bconout(2,'q') ; } else { Bconout(5,(c & 0xff)) ; } ; _csrx++ ; } ; _movcur(i+1,0) ; } ; _movcur( curscr->_cury, curscr->_curx) ; } ; } /* #]wrefresh: */ /* #[detail: detail functions of curses */ /* #[mvcur: move cursor in standard curses manner */ mvcur(ly,lx,ny,nx) int ly,lx,ny,nx ; { _movcur((WORD) ny,( WORD) nx) ; } /* #]mvcur: */ /* #[_movcur: move cursor */ _movcur(y,x) WORD y,x ; { if ( _csry == y && _csrx == x ) return ; Bconout(2,'\033') ; Bconout(2,'Y') ; Bconout(2,y+' ') ; Bconout(2,x+' ') ; _csry = y ; _csrx = x ; } /* #]_movcur: */ /* #[scroll: scroll a window upward one line */ scroll(w) WINDOW *w ; { WORD i,j ; ERR = 0 ; OK = 1 ; for ( i = 0 ; i < w->_maxy ; i++ ) for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[i][j] = w->_y[i+1][j] ; for ( i = 0 ; i <= w->_maxx ; i++ ) w->_y[w->_maxy][i] = ' ' ; if ( w == curscr ) wrefresh(curscr) ; else { w->_firstch = w->_y[0] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } /* #]scroll: */ /* #]detail: */ /* #]curses: */ /* * Extra stuff added - tony */ printw(format, a1, a2, a3, a4, a5, a6, a7, a8, a9) char *format; int a1, a2, a3, a4, a5, a6, a7, a8, a9; { char lbuf[256]; sprintf(lbuf, format, a1, a2, a3, a4, a5, a6, a7, a8, a9); addstr(lbuf); } scanw(format, a1, a2, a3, a4, a5, a6, a7, a8, a9) char *format; int a1, a2, a3, a4, a5, a6, a7, a8, a9; { char lbuf[256]; echo(); getstr(lbuf); sscanf(lbuf, format, a1, a2, a3, a4, a5, a6, a7, a8, a9); } ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее The CURSES screen updating and cursor movement package. A collection of C-functions for Atari ST-series computers Version 1.0 R. van 't Veen This document describes a set of C-functions which allow the user easier design of full-screen applications. This package is intended for programs that perform graphics-like operations on terminal screens. It is largely compatible with the UN*X curses(3x) package. This document provides pointers to its use, a little detail about its inner workings and it stresses differences between the UN*X-implementation and the Atari-ST series implementation. Introduction. This package was born out of my desire to make more programs available for UN*X also available on my Atari. A side-effect of this is that it provides easier screen updating than by means of sending escape codes. The package is also quite fast, timing of a sample application yielded a rate of about 90 kilobaud per second. Terminology. Throughout this document the following words will be used frequently : WINDOW An internal representation of what a section of the terminal screen may eventually look like. A window is a rectangular array, which may be as big as the terminal screen or even as small as a single character. TERMINAL Or terminal screen, the packages idea of what the Atari's VT52 emulation looks like. If everything is allright this is what you see. The terminal screen is a special screen. SCREEN A screen is an element of the set of windows that are as large as the terminal screen. One screen, called stdscr, is already provided for. Using the package. To use the package, include the file "curses.h" in your source. This gives you the types and definitions necessary to be able to use it. After compilation one should link with the file containing the compiled curses-source, as well as with the object-file or library giving you access to the system calls, gemdos, bios and xbios. You also should link in a file giving you access to the malloc() and free() calls. ( Note : this is not the GEMDOS Malloc/Mfree pair, but a malloc() and free(), which should be contained in any decent standard C-function library. GEMDOS Malloc/Mfree are very buggy indeed.) There is a difference with UN*X here : the UN*X-curses includes stdio.h and sgtty.h, whereas Atari-curses includes portab.h and stdio.h. This should give you the definitions for BYTE, WORD and LONG. Some compilers supply default startup files that don't supply enough heap space to run curses in, you should adapt these startup files to your liking. Installing the package. Compile the file "curses.c" with your favorite C-compiler, to create an object-file or library, whatever you prefer. Curses.c includes "portab.h" for BYTE, WORD, LONG, and NULL definitions, osbind.h for system-call macros and curses.h for its own definitions. Remember curses.h also includes stdio.h. The code should be portable between various brands of compilers. Forget about warnings like : warning : pointer substraction yields a long result. Not all compilers adhere to Kernighan and Ritchie standards in this respect. The meaning of each of the constants is given in the table below. In another table the used system call macro's are given. +---------------+----------------------------------------------------+ | constant name | meaning | +===============+====================================================+ | BYTE | a type with at least 8 bits in it, usually a char | | WORD | a type with at least 16 bits in it | | LONG | a type with at least 32 bits, used for pointers | | NULL | a value assigned to pointers pointing nowhere | +---------------+----------------------------------------------------+ +---------------+-----------------------------------------------------+ | macro name | meaning | +===============+=====================================================+ | Pterm | gemdos $4c, terminate process and return to caller | | Cconis | gemdos $0b, console character available ? | | Crawcin | gemdos $07, get a raw character from console | | Cnecin | gemdos $08, get a not-so raw character from console | | Bconout | bios $03, output a character to a device | | Bconstat | bios $01, get input device status | | Bconin | bios $02, input a character from a device | | Supexec | xbios $26, execute function in supervisor mode | +---------------+-----------------------------------------------------+ Screen updating. The package defines a data type called WINDOW, which represents what a section of the terminal may eventually look like. It can be used as a scratch-pad onto which you can make changes. Only after calling the function refresh() or wrefresh() an attempt will be made by the package to make things on the screen look like the things you specified in the window. Information contained in the window include not only its contents, but also its size, its starting point and various other information. Two standard window are defined after initialization of the package, namely curscr, which constitutes the package's idea of what the screen looks like, and stdscr, which is a default window to make changes on. It is advised not to address curscr directly, but first to make changes on another window and then to call refresh() or wrefresh() to make curscr look like the other window. Making a change on curscr results in immediate execution of the change, this greatly reduces any chances of optimization and therefore results in a sizeable loss of speed ( unless you know what you're doing, of course ). Naming conventions. All output and input functions can be used with any window. These functions have two variants, one to act on the default screen stdscr, and another to act on any window. An example is the function addch(), which adds a character to stdscr. The variant, which adds a character to a window w is called waddch() and takes w as an argument. This convention is used throughout the package. The routines which do not adhere to this convention always take a window as an argument. Apart from the w-convention some functions also take a mv- prefix. Ordinarily one moves the current coordinates of a window by calling the move or wmove function. Preceding an I/O function by mv first moves the current coordinates and then performs the I/O function. In this way one can write the sequence : move(y,x) ; addch('Q') ; as : mvaddch(y,x,'Q') ; and the sequence : wmove(win,y,x) ; waddch(win,'W') ; may be replaced by : mvwaddch(win,y,x,'W') ; You may have noticed the following other conventions : 1. If a window must be specified as a parameter, it is always the first parameter. 2. Coordinates are specified as (y,x) pairs, where y is in the up/down direction, and x in the letf/right direction, the coordinate (0,0) is in the upper-left corner of the window. Programming with curses. The following sections deal with programming with the library. First of all curses should be initialized first. This is done by a call to initscr(). On return curses will have initialized the screen to a state known by curses, and have initialized curscr and stdscr, whereas prior to the initscr() call, any reference to curscr or stdscr will result in bombs. After calling initscr() you should perform any terminal status changing routines like crmode() or nonl(), although these may be performed anytime when curses is active. After that you can set up the screen status using functions like leaveok() and scrollok() or allocate new windows with newwin() or subwin(), delete them with delwin(). Calling initscr() again will either result in a redraw of the screen or another initialization step when the variables LINES or COLS have changed. This enables you to set the screen size by hand, because normally the variables LINES and COLS contain the true size of the terminal. Calling initscr ni such a way again, results in the deletion and regeneration of curscr and stdscr. The basic functions that allow you to change the contents of a window are addch() and move(). Addch() adds a character to a window and move() moves the current coordinates. Other output functions exist to let you do some more elaborate things, like addstr() to add an entire string, insertln() to insert a line etc.. When you have composed the contents of the window to your liking you can call refresh() to make the portion of the terminal screen overlapped by the window look like the window. When updating one must keep in mind that refresh assumes that parts of the window not changed since the last update of the window are also not changed on the terminal. Use the touchwin() function to let curses think the entire window has changed when using overlapping windows. Calling wrefresh() with curscr as an argument results in a complete redraw of the terminal screen. Because curses has to know what the contents of the physical screen is at all times, you should not do any other screen output, than by curses alone. Or if you really have to, do a redraw afterwards. If you don't, you're bound to end up with some very confused screens. Input is done by the getch() function, which inputs a character from the keyboard and echoes it through addch() if echo is set. When using curses you may notice that, while performing output and other functions, the cursor is switched off, when curses waits for input however the cursor is switched on. Input can be done in either one of three modes : cooked, cbreak and raw. These input modes are primarily introduced to maintain UN*X-compatability, but they do not work the same, so when porting UN*X-programs special care should be taken with any input routines. Moreover, you should not perform any input through the stdio library, as they will surely echo something on the screen. UN*X-curses can handle this because it explicitly sets the echo of the terminal off, whereas Atari-curses only simulates this behaviour. So : any input only through curses. Cooked mode is supposed to be a line-oriented input interface. Using UN*X and curses, cooked input can only be performed, when echo is not set, if it is set cooked mode input turns to cbreak mode for the duration of the input call. Using Atari and curses, the same restrictions apply, with the exception that the following characters have special meanings : +---------------+-------+------------------------------------------+ | character | ASCII | action | +===============+=======+==========================================+ | control-C | $03 | do a Pterm(-1), i.e. exit immediately | | control-H/BS | $08 | do a backspace, not beyond the beginning | | | | of the input-field. | | control-U | $13 | kill the entire input field | +---------------+-------+------------------------------------------+ Cbreak mode is supposed to be a single character oriented interface, with which one can receive any character and have no special meaning attached to it. The only exceptions are job-control characters like control-C ( interrupt ), delete ( kill the process ), control-Z ( suspend the process ) etc. On Atari this is translated in the following : all characters are received and only control-C has special meaning, which is : terminate the process. Raw mode is also a single character interface and has no special processing whatsoever. The same holds for Atari. Apart from the above-mentioned functions one should also note that getch() does not return a character, but a 32-bit value. For UN*X getch() returns an int, with ( apart from errors ) only the lower 7 or 8 bits set. On Atari the same holds true for cooked mode, in cbreak mode the ASCII value is returned in bits 0 to 7 and the scancode of the key in bits 16 to 23, raw mode adds the keyboard shift state in bits 24 to 30. When entering a string through getstr() or wgetstr() only the character portion of the long values are retained. Cleaning up is performed by the endwin() function. It releases the storage acquired for curscr and stdscr, switches the terminal to its normal state and puts the cursor in a reasonably comfortable place, i.e. at the bottom of the screen. Note that any windows acquired through newwin() and subwin() still exist. They should be released from storage prior to calling endwin(). Constants, types and variables defined by curses.h. The include file curses.h makes several constants, types and variables available to the programmer. In this section something will be told about their function and use. The most important thing defined in curses.h is the data type WINDOW. This datatype is used by curses to maintain data for all windows. It has the following definition : #define WINDOW struct _win_st struct _win_st { WORD _cury, _curx ; WORD _maxy, _maxx ; WORD _begy, _begx ; WORD _flags ; bool _clear ; bool _leave ; bool _scroll ; WORD **_y ; WORD *_firstch ; WORD *_lastch ; } ; The internals of this structure are not normally to be accessed by the user. This structure differs in three aspects from the UN*X-curses WINDOW structure. First of all the _y field is char in UN*X-curses, WORD in Atari-curses. This had been done to ensure that all characters in the Atari character set, including all diacritical marks, can be displayed, whereas UN*X-curses will only display characters $20-$7f, or standard ASCII characters. As a matter of act the Atari will display codes $00-$ff, with the exception of tabs, linefeeds and carriage returns. These have a special meaning. Each character can be in standout mode, if so desired. The other changes are in the _firstch, _lastch fields. This reflects the updating algorithms used. The fields have the following meaning : _cury and _curx are the current coordinates of the window, relative to the window's home, _begy and _begx. This beginning is relative to the terminals home position (0,0). _maxy and _maxx are the maximum values allowed for _cury and _curx. _flags is a bit-pattern of several flags describing the structure of the window. _flags can have several values OR'ed into it. _SUBWIN means that the window is a subwindow, which indicates to delwin() that the character space cannot be freed. The _FULLWIN flag indicates that the window is a screen. _STANDOUT means that any added character is in standout-mode. UN*X-curses also defines the _ENDLINE and _SCROLLWIN flags, they are defined in curses.h for compatability purposes, but Atari-curses does nothing with these values. The _clear field in the WINDOW structure is set when the next refresh on the window should generate a clear screen sequence. Setting the clear flag for curscr will always generate a clear screen sequence on any refresh. The _leave field is TRUE if the windows current coordinates are to be set after the last character changed on the terminal after a refresh. The _scroll field is TRUE, if scrolling is allowed. The _y field is a pointer to an array of pointers to arrays of character values. These values are the actual contents of a window. The lower 8 bits of a character value contain the real character value, the upper 8 bits are used by curses internally. The _firstch and _lastch fields are used by the updating algorithms of curses. Unless you know what you are doing you are not supposed to tamper with any of these values, curses supplies a full set of functions to set any values which you want to be set. After initializing curses you can be sure the following variables have been set and initialized to their proper values. Some variables may even be set prior to initializing curses. This is marked by a & in the table. +----------------+------------+-----------------------------------------------+ | variable name | type | description | +================+============+===============================================+ | curscr | WINDOW * | curses idea of what the terminal screen looks | | | | like. | | stdscr | WINDOW * | Default screen for updates. | | Def_term | char * | Default terminal type. UN*X-compatability. | | My_term & | bool | UN*X-compatability, does nothing. | | ttytype | char * | Full name of the terminal | | LINES & | int | Number of ines curses thinks the terminal has | | | | normally 25, but may be changed, see text | | COLS & | int | Number of columns curses thinks the terminal | | | | has, may be changed, see text. | | ERR | int | If this is set, curses had an internal error | | OK | int | If this is set, everything is gone right | +----------------+------------+-----------------------------------------------+ Also the following constants and macros are defined in curses.h : +----------------+------------------------------------------------------------+ | name | description | +================+============================================================+ | reg | storage class register, i.e. register int i => reg int i | | bool | boolean type, values can be TRUE or FALSE | | TRUE | boolean 'true' flag. | | FALSE | boolean 'false' flag. | +----------------+------------------------------------------------------------+ Another difference between Atari-curses and UN*X-curses is that UN*X-curses reads in a lot of variables described in /etc/termcap, no such thing exists for Atari, and is not needed anyway. However these variables are available to the programmer in UN*X-curses, but not in Atari-curses. These include things like strings, which when output to the terminal cause some action to be taken, like the string VB, for a visible bell, or DM, enter delete mode. Care should be taken with UN*X-programs that perform such actions. Description of individual functions. The following is a description of all the individual routines, a lot of them are defined as macros, notably those that take stdscr as the window and functions that can be preceded by "mv". If such is the case, it is stated by a '!' a little further on the line. Output functions. addch(c) ! char c ; mvaddch(y,x,c) ! int y,x ; char c ; mvwaddch(win,y,x,c) ! WINDOW *win ; int y,x ; char c ; waddch(win,c) WINDOW *win ; char c ; Add the character c at the current coordinates of the window w. The following characters cause special processing : a newline ('\n') causes the line to be cleared to the end, and the current coordinates to be changed to the beginning of the next line if newline mapping is on, or to the next line at the same column if newline mapping isn't on. A return ('\r') will move the cursor to the beginning of the line on the window. Tabs ('\t') will be expanded into spaces into the normal tabstop positions of every eight characters. addstr(s) ! char *s ; mvaddstr(y,x,s) ! int y,x ; char *s ; mvwaddstr(win,y,x,s) ! WINDOW *win ; int y,x ; char *s ; waddstr(win,s) WINDOW *win ; char *s ; Add the string s to the window at the current coordinates. Addstr() calls addch repeatedly to add the characters. box(win,vert,hor) WINDOW *win ; char vert, hor ; mvbox(win,y,x,vert,hor) ! WINDOW *win ; int y, x ; char vert, hor ; Draws a box around the window using vert as the vertical drawing character and hort as the horizontal drawing character. clear() ! wclear(win) WINDOW *win ; Reset the window to blanks. If win is a screen this will cause a clear screen sequence to be sent on the next refresh. The current coordinates are also moved to the home-position (0, 0). clearok(scr, boolf) ! WINDOW *scr ; bool boolf Sets the clear-flag for the screen scr to boolf. If boolf is TRUE this will generate a clear screen sequence on the next refresh. If it is FALSE refresh may be stopped from generating a clear screen sequence. clrtobot() ! wclrtobot(win) WINDOW *win ; Clear the window from the current coordinates to the bottom. The current coordinates aren't changed. clrtoeol() ! wclrtoeol(win) WINDOW *win ; Clear the window from the current coordinates to the end of the line. This doesn't change the current coordinates. delch() ! mvdelch(y,x) ! int y, x ; mvwdelch(win,y,x) ! WINDOW *win ; int y, x ; wdelch(win) WINDOW *win ; Delete the character at the current coordinates. Characters on the same line after the deleted character shift to the left and the last character becomes blank. deleteln() ! mvdeleteln(y,x) ! int y, x ; mvwdeleteln(win,y,x) ! WINDOW *win ; int y,x ; wdeleteln(win) WINDOW *win ; Delete the current line, move every line under it one line up and make the bottom line blank. This doesn't change the current coordinates. erase() ! werase(win) WINDOW *win ; Sets the entire window to blanks without setting the clear flag. See clear(). The difference is that erase doesn't cause a clear screen sequence to be generated. insch(c) ! char c ; mvinsch(y,x,c) ! int y, x ; char c ; mvwinsch(win,y,x,c) ! WINDOW *win ; int y, x ; char c ; Insert the character c at the current coordinates. each character after the current character shifts one place to the right and the rightmost character falls off. insertln() ! mvinsertln(y,x) ! int y, x ; mvwinsertln(win,y,x) ! WINDOW *win ; int y, x ; Insert a line above the current line. Every line below will scroll down, and the bottom line will disappear. The inserted line will be blank. The current coordinates aren't chnaged by this function. move(y,x) ! int y, x ; wmove(win,y,x) WINDOW *win ; int y, x ; Change the current coordinates of window win to (y, x). Whenever one of the other output or input functions are preceded by "mv", this function is executed first. overlay(win1,win2) WINDOW *win1, *win2 ; The contents of win1 are placed on win2 at their respective starting coordinates. Those contents of win1, which would not fit in win2, are discarded. Blanks on win1 leave the contents of win2 untouched. overwrite(win1, win2) WINDOW *win1, *win2 ; The contents of win1 are placed on win2 at their respective starting coordinates. Those contents of win1, which would not fit in win2, are discarded. refresh() ! wrefresh(win) WINDOW *win ; Update the terminal screen with the contents of the window. Only those parts covered by the window will be updated. If the window is a screen and its clear flag has been set, then a clear screen sequence will be generated. mvstandend(y,x) ! int y, x ; mvwstandend(win,y,x) ! WINDOW *win ; int y, x ; standend() ! wstandend(win) WINDOW *win ; Stop putting characters onto win in standout mode. mvstandout(y,x) ! int y, x ; mvwstandout(win,y,x) ! WINDOW *win ; int y, x ; standout() ! wstandout(win) WINDOW *win ; Start putting characters onto win in standout mode, i.e. display inverted characters. Input functions. crmode() Set the terminal in cbreak mode. nocrmode() Reset the terminal from cbreak mode into cooked mode. echo() Let the terminal echo characters on input. noecho() Do not allow the terminal to echo characters on input. getch() ! mvgetch(y,x) ! int y,x ; mvwgetch(win,y,x) ! WINDOW *win ; int y, x ; wgetch(win) WINDOW *win ; Get a character from the terminal and echo it on the window if echo is set. See the section on programming with curses for more details about input modes. Remember getch() returns a 32-bit value, and not a char. getstr(s) ! char *s ; mvgetstr(y,x,s) ! int y,x ; char *s ; mvwgetstr(win,y,x,s) ! WINDOW *win ; int y, x ; char *s ; wgetstr(win,s) WINDOW *win ; char *s ; Get a string through the window win and put it in the string s, which is assumed to be large enough to hold the data. To get the input it calls getch() repeatedly. The end of the input is designated by any of the following characters, a carriage return, a linefeed, a EOF or control-D, and any character, which results in a '\0'. This character is stripped of the string and replaced by a null character to indicate the end of the string. raw() Set the terminal in raw input mode. noraw() Set the terminal from raw into cooked input mode. Miscellaneous functions. delwin(win) WINDOW *win ; Deletes the window. All resources ( i.e. storage ) held by the window is freed for future use. As subwindows share their character space with another window their character space is not freed. To delete a window with subwindows, you should first delete the subwindows and then the root window, as any access to a subwindow after deletion of its parent window is a sure route to disaster. endwin() Clean up after curses. You should call this prior to termination of your program. getyx(win,y,x) ! WINDOW *win ; int y,x ; This macro puts the window current coordinates into the variables y and x. Note that you do not supply the address of the variables, as it is a macro. inch() ! mvinch(y,x) ! int y,x ; mvwinch(w,y,x) ! WINDOW *w ; int y, x ; winch(win) ! WINDOW *win ; This macro returns the value of the character at the current coordinates of the window. This does not change the contents of the window. The functions mvinch() and mvwinch() are not supported by standard UN*X-curses, although they probably are by most UN*X-implementations. initscr() Initialize curses. You should call this before any of the other calls. leaveok(win,flag) WINDOW *win ; bool flag ; Sets the _leave field of the window win to the value flag. If flag is TRUE then after an update on the terminal, the window's current coordinates will be set to the coordinates immediately after the last updated character. If flag is FALSE, then the cursor will be moved to the windows current coordinates. This flag is FALSE by default. longname(termbuf,name) char *termbuf, *name ; Introduced for UN*X-compatability, it returns the contents of ttytype in name, regardless of the contents of termbuf. This is not really consistent with UN*X-curses. mvwin(win,y,x) WINDOW *win ; int y, x ; Move the home position of the window win, from its current coordinates to the coordinates specified in y and x. You cannot move a window off the terminal screen, not even by a character. WINDOW *newwin(l,c,by,bx) int l, c, by, bx ; Create a new window with l lines and c columns starting at position (by,bx). If either l or c is zero, then the dimension will be set to ( LINES - by ), ( LINES - bx ). To get a screen, one would say newwin(0,0,0,0). nl() Set curses to newline mapping. This has consequences for adding the character '\n'. See addch() for these consequences. nonl() Set curses to do no newline mapping. This is the default. In UN*X-curses you get the fastest updates when you have no newline mapping, Atari-curses doesn't care about it. scrollok(win,flag) Set the _scroll field of the window win to flag. If flag is FALSE, the terminal is not allowed to scroll, which is also the default. touchwin(win) WINDOW *win ; Force curses to believe that the entire window has changed on the next refresh. This is useful for overlapping windows. WINDOW *subwin(win,l,c,by,bx) Create a new window with a shared character space,as opposed to newwin(), which allocates a new character space. See newwin() for more details about the l, c, by and bx parameters. The new window will share the character space with the window win. The subwindow must be smaller or the same size as the parent window. Changes on either window are reflected on the other window. Moving subwindows with mvwin() will create some pretty weird results, because the mapping of the subwindow to the parent window will tend to get displaced. For instance, if I have a one character subwindow of a screen at coordinates (2,3) and if I move the subwindow to say (4,5), then if I change the character on the subwindow at (4,5), the parent window will have changed at (2,3). I don't know whether this is UN*X-compatible, so take care here. Detail functions. These routines are at the core of UN*X-curses, and can be used on a standalone basis. Atari-curses has a very limited implemntation of this, so if a program uses these, you'd better rewrite the whole thing. Most likely, the results of using these won't be the same on either of the two implementations. mvcur(lasty,lastx,newy,newx) int lasty, lastx, newy, newx ; Move the terminals cursor from (lasty,lastx) to (newy,newx). Don't use it when you use any of the screen routines. scroll(win) WINDOW *win ; Scroll the window upward one line. You don't normally want to do this. Functions not supported by Atari-curses. Several functions are not supported by Atari-curses, but are by UN*X-curses. The names of these functions are given, as well as a reason for not implementing them. mvprintw(), mvwprintw(), printw() and wprintw() Performs a printf() on a window. I didn't want to implement this for two reasons : 1. This introduces compiler dependant code. 2. A large overhead in coding is required. ( I'm very lazy. ) This omission can easily be gotten around with by inline replacement with : sprintf(a_string, format, ... ) ; addstr(a_string) ; mvscanw(), mvwscanw(), scanw() and wscanw() Performs a scanf() on a window. The same reasons apply here as the reasons for printw(). Replace it inline with : getstr(a_string) ; sscanf(a_string, format, ... ) ; uncntrl() Returns a string which is a representation of a character, nice debugging feature for UN*X-curses, but pretty meaningless for Atari-curses as Atari-curses can show any character. gettmode() A function called by UN*X-initscr(), it gets tty stats, which is UN*X-dependant anyway. savetty() and resetty() Save and reset tty characteristics, used by UN*X-curses to initialize and clean up respectively. Not necessary on Atari. setterm(name) Set terminal characteristics to those of the terminal with name name. Pretty useless on Atari. tstp() Function which is used in UN*X-curses to save the current state when a process is put to sleep and to restore it when it is restarted. This is the normal catch for the signal SIGTSTP, which Atari users won't be able to receive anyway. Caveats and bugs. There are differences between Atari-curses and UN*X-curses, especially in the area of input and the more detailed workings of curses. I will probably not change the workings of any input routines, because if I did application programs wouldn't have any control over say function keys, cursor keys, etc. Such keys really make a difference in user friendly programs, so I'd better let a programmer have access to them. The more detailed workings of curses are best left out too, as they concern themselves with multiple types of terminals, where the Atari-curses is only fitted to a single terminaltype, i.e. the Atari's VT52 emulation mode. Another problem is possibly the low-resolution mode of the Atari, I don't have access to a color monitor, so I wasn't able to test it in either medium or low-res. Medium probably works fine, but low-res ?. So, if you don't do anything too fancy, you should be allright. One more thing : when you write portable programs, keep in mind that the Atari-curses is a lot faster than any implementation, which sends data over a terminal line. Comparing speeds will put any program on the Atari seemingly on a 50+ kilobaud line. Also beware of funny characters, i.e. portable programs require character ranges between $20 and $7F, Atari-curses can and will handle a lot more. This warning should especially be heeded by say Germans and French, diacritical marks may screw things up real bad. ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее/* ************************************************************************ */ /* */ /* CURSES.H include file for programs using CURSES */ /* */ /* ************************************************************************ */ /* */ /* This source and resulting object may be modified, used or distributed by */ /* anyone who so desires under the following conditions : */ /* */ /* 1) This notice and the copyright notice shall not be removed or */ /* changed. */ /* 2) No credit shall be taken for this source and resulting objects */ /* 3) This source or resulting objects is not to be traded, sold or */ /* used for personal gain or profit. */ /* 4) Inclusion of this source or resulting objects in commercially */ /* available packages is forbidden without written consent of the */ /* author of this source. */ /* */ /* ************************************************************************ */ #include "portab.h" #include "stdio.h" #define reg register #define bool BYTE #define TRUE 1 #define FALSE 0 #define _SUBWIN 01 #define _ENDLINE 02 #define _FULLWIN 04 #define _SCROLLWIN 010 #define _STANDOUT 0200 #define WINDOW struct _win_st #define TOUCHED 0x0200 #define STANDOUT 0x0100 #define addch(c) waddch(stdscr, c) #define mvaddch(y,x,c) { wmove(stdscr,y,x) ; waddch(stdscr,c) ; } #define mvwaddch(w,y,x,c) { wmove(w,y,x) ; waddch(w,c) ; } #define addstr(s) waddstr(stdscr,s) #define mvaddstr(y,x,s) { wmove(stdscr,y,x) ; waddstr(stdscr,s) ; } #define mvwaddstr(w,y,x,s) { wmove(w,y,x) ; waddstr(w,s) ; } #define clear() wclear(stdscr) #define clearok(w,f) { w->_clear = (w->_flags & _FULLWIN) ? f : w->_clear ; } #define clrtobot() wclrtobot(stdscr) #define clrtoeol() wclrtoeol(stdscr) #define delch() wdelch(stdscr) #define mvdelch(y,x) { wmove(stdscr,y,x) ; wdelch(stdscr) ; } #define mvwdelch(w,y,x) { wmove(w,y,x) ; wdelch(w) ; } #define deleteln() wdeleteln(stdscr) #define mvdeleteln(y,x) { wmove(stdscr,y,x) ; wdeleteln(stdscr) ; } #define mvwdeleteln(w,y,x) { wmove(w,y,x) ; wdeleteln(w) ; } #define erase() werase(stdscr) #define insch(c) winsch(stdscr,c) #define mvinsch(y,x,c) { wmove(stdscr,y,x) ; winsch(stdscr,c) ; } #define mvwinsch(w,y,x,c) { wmove(w,y,x) ; winsch(w,c) ; } #define insertln() winsertln(stdscr) #define mvinsertln(y,x) { wmove(stdscr,y,x) ; winsertln(stdscr) ; } #define mvwinsertln(w,y,x) { wmove(w,y,x) ; winsertln(w) ; } #define move(y,x) wmove(stdscr,y,x) #define refresh() wrefresh(stdscr) #define standout() wstandout(stdscr) #define standend() wstandend(stdscr) #define getch() wgetch(stdscr) #define mvgetch(y,x) ( wmove(stdscr,y,x) , wgetch(stdscr) ) #define mvwgetch(w,y,x) ( wmove(w,y,x) , wgetch(w) ) #define getstr(s) wgetstr(stdscr,s) #define mvgetstr(y,x,s) { wmove(stdscr,y,x) ; wgetstr(stdscr,s) ; } #define mvwgetstr(w,y,x,s) { wmove(w,y,x) ; wgetstr(w,s) ; } #define getyx(w,y,x) { y = w->_cury ; x = w->_curx ; } #define inch() (stdscr->_y[stdscr->_cury][stdscr->_curx]) #define mvinch(y,x) ( wmove(stdscr,y,x) , stdscr->_y[stdscr->_cury][stdscr->_curx]) #define mvwinch(w,y,x) ( wmove(w,y,x) , w4->_y[w->_cury][w->_curx]) #define winch(w) (w->_y[w->_cury][w->_curx]) struct _win_st { WORD _cury, _curx ; WORD _maxy, _maxx ; WORD _begy, _begx ; WORD _flags ; BYTE _clear ; BYTE _leave ; BYTE _scroll ; WORD **_y ; WORD *_firstch ; WORD *_lastch ; } ; extern WINDOW *curscr ; extern WINDOW *stdscr ; extern char *Def_term ; extern bool My_term ; extern char *ttytype ; extern int LINES ; extern int COLS ; extern int ERR ; extern int OK ; еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееCURSES(3X) CURSES(3X) NAME curses - screen functions with "optimal" cursor motion DESCRIPTION The functions in the curses-package give you an implementation of the UN*X-curses package for the Atari ST series computer. It allows you to do terminal-oriented graphics of a crude nature. An image is kept of what the current screen looks like, while the user creates a new image. Refresh() must be called to make the current screen look like the one the user has prepared. Initscr() must be called to initialize the package and endwin() to clean up before exiting. SEE ALSO Screen Updating and Cursor Movement Optimization : A Library Package, Ken Arnold. The CURSES screen updating and cursor movement package : A collection of C-functions for the Atari ST-series computers, R. van 't Veen. AUTHORS UN*X-curses : Ken Arnold. Atari-curses : Rene van 't Veen. FUNCTIONS addch(c) add a character to stdscr addstr(s) add a string to stdscr box(win,v,h) draw a box around a window crmode() set cbreak mode clear() clear stdscr clearok(scr,f) set clear flag for scr cltobot() clear to bottom on stdscr clrtoeol() clear to end of line on stdscr delch() delete a character deleteln() delete a line delwin(w) delete window w echo() set echo mode endwin() end window mode erase() erase stdscr getch() get a char through stdscr getstr() get a string through stdscr getyx(w,y,x) get current coordinates inch() get char at current coordinates initscr() initialize curses insch() insert a character insertln() insert a line leaveok(w,f) set leave flag for window w longname(termbuf, name) get a long terminal name move(y,x) move to (y,x) on stdscr mvcur(ly,lx,ny,nx) actually move the cursor newwin(lines,cols,begin_y,begin_x) create a window nl() set newline mapping on nocrmode() unset cbreak mode noecho() unset echo mode nonl() set newline mapping off noraw() unset raw mode overlay(win1,win2) overlay win1 on win2 overwrite(win1,win2) overwrite win1 on win2 raw() set raw mode refresh() make terminal look like stdscr scroll(win) scroll win one line up scrollok(w,f) set scroll flag for window win standend() leave standout mode standout() enter standout mode subwin(win,lines,cols,begin_y,begin_x) create a sub window touchwin(win) change everything on win waddch(win,c) add char to win waddstr(win,s) add string to win wclear(w) clear w wclrtobot(w) clear w to bottom of w wclrtoeol(w) clear w to end of line wdelch(w) delete character from w wdeleteln(w) delete line from w werase(w) erase w wgetch(w) get a character through w wgetstr(w,s) get a string through w winch(w) get char at current (y,x) of w winsch(w,c) insert a char on w winsertln(w) insert a line on w wmove(w,y,x) set current coordinates of w wrefresh(w) make terminal look like w wstandend(w) leave standout mode for w wstandout(w) enter standout mode for w BUGS Hopefully none, but you never know ... If you find any, please let me know, I ( Rene ) am at ..!mcvax!nikhefh!u13 . ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее/* * This file re-implements portions of the Alcyon portab.h needed * by curses. If you have a more complete portab.h that contains * the following definitions, use it. */ #define BYTE char #define WORD short int #define LONG int ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее Notes for the Megamax Version of Curses This version of curses compiles with the Megamax C compiler. A couple of bug fixes were needed and the wgetstr routine was hacked quite a bit. Notes: 1. The overlay() routine was renamed woverlay() to avoid a conflict with the Megamax reserved word. 2. The entire file was placed in an overlay because I needed the space. You may want to get rid of the overlay line in curses.c depending on what you're linking curses with. 3. The routines printw() and scanw() are implemented in the usual brute- force way since Megamax doesn't have varargs. These are at the end of curses.c. 4. Remember to change your init.c to get extra stack space. 5. The file portab.h contains the definitions needed from the Alcyon file of the same name. If you have a more complete version, use it. 6. twinkle.tos isn't in this distribution because I wanted to post this stuff as clear text. Tony Andrews ihnp4!onecom!wldrdg!tony Wildridge Consulting, Inc. Boulder, CO ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееThis is Atari-curses, read the curses.doc file about installing first. The archive should contain the following files : CURSES.C Source for CURSES, compile once. CURSES.H Include file for CURSES.C and any program using CURSES. CURSES.MAN CURSES short docs, a manual page for UN*X-freaks. CURSES.DOC CURSES long docs, this is what you will want to read when you are going to use CURSES. README.TXT This file. TWINKLE.C Sample application. TWINKLE.TOS Ready to run sample application. This is essentially a shareware program, its usage is subject to the following conditions : PUBLIC-DOMAIN : don't take the credit for it. Commercial purposes : Send 5 US-dollars or equivalent currency and return postage to me to get a written consent to use it. CURSES may be distributed to anyone, provided that all of the above files remain in the archive, and the various copyright notices remain intact. Bug reports and suggestions are welcome, send me e-mail. Rene van't Veen ( ...!mcvax!nikhefh!u13 ) Debussystraat 27 1817 GL Alkmaar The Netherlands Modified 16/6/91 to work with Gnu C for TOS by Roland Givan, bits for Gnu are #ifdef'd as __GNUC__ (which should be as default on any Gnu C compiler). еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее/* sample application using curses calls, this takes about 25 seconds on the */ /* Atari and over 6 minutes on a mainframe, using a vt100 on a 4800 baud */ /* line. Even on the mainframe it uses 24 seconds of computation time. */ #include "portab.h" #include "curses.h" #define NCOLS 80 #define NLINES 24 #define MAXPATT 4 struct locs { char y,x ; } ; typedef struct locs LOCS ; LOCS Layout[NCOLS*NLINES] ; int pat ; int nstar ; main() { int i ; initscr() ; leaveok(stdscr,1) ; for ( i = 0 ; i < 10 ; i++ ) { makeboard() ; puton('*') ; puton(' ') ; } ; endwin() ; } makeboard() { int y,x ; LOCS *lp ; pat = rand() % MAXPATT ; lp = Layout ; for ( y = 0 ; y < NLINES ; y++ ) for ( x = 0 ; x < NCOLS ; x++ ) if ( ison(y,x) ) { lp->y = y ; lp->x = x ; lp++ ; } ; nstar = lp - Layout ; } ison(y,x) int y,x ; { switch ( pat ) { case 0: return(!(y & 0x01)) ; case 1: if ( x >= NLINES && y >= NCOLS ) return(0) ; if ( y < 3 || y >= NLINES - 3 ) return(1) ; return((x < 3 || x >= NCOLS - 3 )) ; case 2: return(((x+y) & 0x01)) ; case 3: return(( y>= 9 && y <= 15 )) ; } ; } puton(ch) char ch ; { LOCS *lp, *end, temp ; int r ; end = &(Layout[nstar]) ; for ( lp = Layout ; lp < end ; lp++ ) { r = ((unsigned int) rand()) % nstar ; temp = *lp ; *lp = Layout[r] ; Layout[r] = temp ; } ; for ( lp = Layout ; lp < end ; lp++ ) { mvaddch(lp->y,lp->x,ch) ; refresh() ; } ; } еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее`Flx Ц*o#НG„"mУн#ЙVЬ$m,Jg"КJfь`фB™&yVЬJ“g2([ Afф Rfо Gfи Vfв =fЬBЈ$KXЉ I& –ЉYѓдѓ`L IСьЂBX" $Hv ьFl&|ЂЧНSmR‹JfІ‰gB БRѓB`  f Rѓ БB" `ШУ`Ф&H—НJ№Vаf #ь VаЧщVа" ТЌЃяяяю.A/ / Bg?<JщG€NA№G€Яь /9VЬ/ /ќО/<t?< ?<щG€NM№G€PЏ#АG|N№+ ?N№&H/9G|?< ?<щG€NM№G€PЏ /??<LщG€NAHзЂЂ0/@ря @`яf( oR€СР f/H oaяfNhXђLЯPЏNsLЯ/yG|яьNпяьNVHз N№$Hx/9G”N№ ўB‚PЏN№Hx*Eщ N’Hx N’PЏR‚r І‚lЮN№$LояшN^NuNVHз< N№&"lVЂzьА…’Ђ#БVиEщGЬBѓB‚//N№†PЏJЂg„BTЉR‚zOє‚lаRѓzєѓlФ ЂGЬjRЂвЂ#АGЂLо<ямN^NuNVHз0".$. 9Vиv°ѓb`гЂ6;Nы0<FWА`0v¶‚l vO¶ЃlBЂ`6v¶Ѓl.v¶Ѓm(BЂv¶‚l vL¶‚l` РЃvАѓ`BЂv¶Ѓlv¶ЃmpLо яшN^NuNVHз00. 9GЂгЂ$‚GЬEщGЬґЉc.GщGЬN№&/9GЂ/N№-°PЏ"0гЃ4у7ЂґЉbШEщGЬґЉcHHЂ6@*HЂHА/HЂHА//9G”N№И/ /9G”N№ D/9G”N№ИЮьTЉґЉbѕLо ярN^NuAtariSTAtari ST-series computer, VT52/CURSES modeCopyright, R. van't Veen. All rights reserved. 1987NV/ J9Fђg&/9GN№ИXЏJ№F”fLHxяфHxLN№,H`<ьFђB§B§B§B§N№”#АGЮьgB§B§B§B§N№”#АG”Юьfr#БF†B№FЉ`xHxHxHxEщ,pN’HxEHxHxN’HxHxHxN’Юь$HxwHxHxN’HxHxHxN’HxfHxHxN’B9F’B9F“B№F†r#БFЉ$nяьN^NuNV/ J9FђgLB9Fђ/9G”Eщ†N’/9GN’B§/9F~N№$HxHxHxEщ,pN’HxeHxHxN’r#БF†B№FЉ$nяьN^NuNVHз>0(.*. $.&.HxN№5Ф&@XЏ¶ьgBkBSB+B+B+J„f 29FЂ’B`2J…f 09F„ђC`0JAo0A±щF~nJ@o 0@±щF‚o / N№6d`В<SF7F<SF7F0A±щF~f0@±щF‚f7| `Bk J‚mґ№F~l Jѓm¶№F‚m / N№6d`n7B7C 0k RЂеЂ/N№5Ф'@XЏf / N№6d`B0k2k RЂгЂ/HhN№-PЏ/N№5Ф k Ђ kXЏJђf"/Eщ6dN’/ N’|#ЖF†B№FЉBЂ`Ћ6<¶kn.0HА$k$е‚0kHh/N№-PЏгЂР’%Ђ(RC¶koТBC¶kn4BAІkn$0HА$е‚ k0HА p(гЂ1ј RAІkoдRC¶koМ/ N№lB№F†|#ЖFЉ Lо |ядN^NuNVHз0&n¶ьfr#БF†B№FЉ`B+ g/+N№6dXЏ` k/Eщ6dN’/+N’PЏ/ N№6dB№F†r#БFЉLо яшN^NuNVHз0"n$n &nґьm&¶ьm JРйR€±щF~n KРйR€±щF‚or#БF†B№FЉ`3J3K / N№lB№F†r#БFЉLо яшN^NuNVHз8"n i#P0)HА iеЂ2)HБгЃТ°#ABBґin4BAІin$0HА&еѓ i0HА p8гЂpRAІioдRBґioМB№F†x#ДFЉLояфN^NuNVHз><*n$. &.(.*.»щGgмHxN№5Ф(@XЏёьgЦBlBTB,B,B,J‚f 29FЂ’D`2Jѓf 09F„ђE`0J‚o–0mR€±ВmЉJѓo„0mR€±Гmx<SF9F<SF9F0A±щF~f0@±щF‚f9| `9| 2mіДn>0mСЙ±Дo42m іЕn,0mСЙ±Еo"9D9E 0l RЂеЂ/N№5Ф)@XЏf/ N№6d|#ЖF†B№FЉBЂ`†$l&m0lђн2mHi/N№-PЏгЂР“0lђн"гЃРЃ$Ђ6<¶ln.0HА$l$е‚0mHh/N№-PЏгЂР’%Ђ(RC¶loТ/ NєэжB№F†|#ЖFЉ Lо<|яЬN^NuNV nnB№F†p#АFЉN^NuNV nnB№F†p#АFЉN^NuNVьFЏB№F†p#АFЉN^NuNVB9FЏB№F†p#АFЉN^NuNV"n BЂ yFz`°RЂJ0fтB1N^NuNVHз80&n.B№F†x#ДFЉ o€·щGf J+ k `„J+ j 2HБ kеЃ0+HА pгЂHЃA`2HБ kеЃ0+HА pгЂHЃA1ЃJ«gК2HБ kеЃ0+HАгЂР°°«eи`к  f./ N№ђXЏJ9FЏg B§0SHh`т2k/ 0SHh`в  fB§`Т  f>0kРл "l^ЂxшА„ђЃDЂ6f6<BB¶Bo°Hx / NєюЮPЏRB¶Bnо`љ·щGfМJ+ j|2HБ kеЃ0+HА pгЂH‚8D1„HxHxHxEщ,pN’HxpHxHxN’‚я/HxHxN’Юь$HxHxHxN’HxqHxHxN’Юь`>0HА kеЂ2+HБ pгЃHЂ8D1„Ђя/HxHxN№,pЮь R9F“`ІJ+ j 2HБ kеЃ0+HА pгЂHЃA`2HБ kеЃ0+HА pгЂHЃA1ЃJ«f 0HА kеЂ2+HБгЃТ°'A'A`B2HБ kеЃ0+HАгЂР°°«d'@` 2HБ kеЃ0+HАгЂР°°«c'@0kHh2S/ / N№ИLо ямN^NuNVHз 0$.&n B№F†r#БFЉ4|`3 HЂHА//NєььPЏRJJ3 fжLо яфN^NuNVHз8<*n..B№F†r#БFЉBBґmn@HЂ6HГB§4B/ / GщИN“// Iъь N”0m// / N“Юь // N”PЏRBґmoЖ4<ґmlBHЂ6HГ4B/ B§/ GщИN“// IъьTN”/ 0m// N“Юь // N”PЏRBґmmЖLо<ядN^NuNV/ $nB№F†r#БFЉ/ N№T* g<`*@BjBR$nяьN^NuNVHз8 "nB№F†x#ДFЉ4)ґin"0HА iеЂ2HБ pгЃ1ј RBґioЮ4`,BAІin$0HА&еѓ i0HА p8гЂ1ј RAІioдRBґioМіщGf$HxHxHxEщ,pN’HxJHxHxN’`zJ©f80HА iеЂ2)HБгЃТ°#A0)HА iеЂ2)HБгЃТ°#A`<2HБ iеЃ0)HАгЂР°°©d#@2)HБ iеЃ0)HАгЂР°#@LоярN^NuNVHз0 "nB№F†v#ГFЉ4)ґin"0HА iеЂ2HБ pгЃ1ј RBґioЮіщGf$HxHxHxEщ,pN’HxKHxHxN’`|J©f60HА iеЂ2)HБгЃТ°#A0HА iеЂ2)HБгЃТ°#A`@2HБ iеЃ0)HАгЂР°°©d#@2HБ iеЃ0)HАгЂР°°©c#@Lо яфN^NuNVHз<0&nB№F†z#ЕFЉ8+64RBґkn*0HА"еЃ k0HА pгЂ:0E1…юRBґkoЮ0HА kеЂ2+HБ pгЃ1ј 7D6ѓ·щGf†HxHxHxEщ,pN’HxKHxHxN’4+Юьґkn@0HА kеЂ2HБ pгЃ00@яHА/HxHxN№,pR9F“Юь RBґkoА2k/ 2S/ N№$`‚J«f60HА kеЂ2+HБгЃТ°'A0HА kеЂ2+HБгЃТ°'A`D0HА k"еЃ0+HАгЂР°°«d'p2HБ kеЃ0+HАгЂР°°«c'@Lо <яиN^NuNVHз88&nB№F†x#ДFЉ6`6BBґkn.0HА"еЃ k0HА"pьгЂ p80D3„RBґkoЪRC¶koВBBґkn$0+HА kеЂ2HБ pгЃ1ј RBґkoЬ·щGf:HxHxHxEщ,pN’HxMHxHxN’B9F“8k/ 8S/ N№$`jJ«f.0HА kеЂ'p0+HА kеЂ2+HБгЃТ°'A`60HА kеЂ(+ё°c'p2+HБ kеЃ0+HАгЂР°'@LояиN^NuNVHз80"nB№F†x#ДFЉBBґin4BAІin$0HА&еѓ i0HА p8гЂ1ј RAІioдRBґioМіщGfFHxHxHxEщ,pN’HxEHxHxN’B9F’B9F“ yG6h/ 6P/ N№$`$ i#P0)HА iеЂ2)HБгЃТ°#ALо ямN^NuNVHз>0&n.B№F†|#ЖFЉ6+84+SB¶Bn(0HА"еЃ k0HА pгЂ<0F1†SB¶Boа·щGf†HxHxHxEщ,pN’HxKHxHxN’4+Юьґkn@0HА kеЂ2HБ pгЃ00@яHА/HxHxN№,pR9F“Юь RBґkoА2k/ 2S/ N№$PЏ`|J«f60HА kеЂ2+HБгЃТ°'A0HА kеЂ2+HБгЃТ°'A`@2HБ kеЃ0+HАгЂР°°«d'@2HБ kеЃ0+HАгЂР°°«c'@HГ/HД// N№ИHЂHА// NєфўLо |ядN^NuNVHз88&nB№F†x#ДFЉ6+`6BBґkn.0HА"еЃ k0HА"pгЂ p80D3„RBґkoЪSC¶SlДBBґkn"0HА kеЂ2HБ pгЃ1ј RBґkoЮ·щGf:HxHxHxEщ,pN’HxLHxHxN’B9F“8k/ 8S/ N№$`HJ«f 0HА kеЂ`0HА kеЂ(+ё°c'p2+HБ kеЃ0+HАгЂР°'@LояиN^NuNVHз0 $n&. .B№F†r#БFЉJЂlBj`0j±Аl5jr#БF†B№FЉ`5@JѓlBR`*0j±Гl2J*g4*` / N№$”XЏRB0B¶€nо4Єr#БF†B№FЉ`4ѓµщGf yG2h/ 2P/ N№$Lо яфN^NuNVHз<0&n$n BDёjn^ёknXBBґjnH0HА&еѓґkn: k0HА"p8"гЃ01@я @ f j p8:1E1…RBґjoАRDёjoўµщGf/9GN№И`$ j%P0*HА jеЂ2*HБгЃТ°%ALо <яиN^NuNVHз80&n$n BC¶jnN¶knHBAІjn80HА$е‚Іkn* j0HА p(гЂ"k"q(81D1„RAІjoРRC¶joІµщGf/9GN№И`$ j%P0*HА jеЂ2*HБгЃТ°%ALо ямN^NuNV nhЂ B№F†p#АFЉN^NuNV nhя B№F†p#АFЉN^NuNV 9F‘gHyxHx&N№.HьF‘N^NuNV 9F‘fHyђHx&N№.HB9F‘N^NuNV0|„HЂHАrЂЃЂN^NuNV0|„HЂHАrчАЃЂN^NuNV 9F‘g 9F‘fNєяЋьF‘N^NuNV 9F‘fB9F‘N^NuNVьFЋB№F†p#АFЉN^NuNVB9FЋB№F†p#АFЉN^NuNVHз0 BJ9F‘f 9FЋf<NєяdHxHxHxEщ,pN’HxeHxHxN’Юь9F‘ gl g0 f|Hx Eщ,HN’XЏJЂgоHxN’$‚яXЏrІ‚fT`(Hx Eщ,HN’XЏJЂgоHxN’$ЂяXЏrІЂf*HxяяHxLN’PЏ`Hx Eщ,HN’XЏJЂgоHxN’$XЏHxHxHxEщ,pN’HxfHxHxN’ЮьJ9FЋgHЂHА//.NєпPЏJgNєюЉ Lо яфN^NuNVHз?<*n*. B><-J9F‘f 9FЋf <B9FЋB‚B/ N№ИXЏ9F‘ gШ g° fш/ NєюjXЏ gЦ gО gЖJgА f@J‚g6S‚ EB0(Jg*8U6mS‹/ / / EъъИN’Hx / Nєо8/ / / N’Юь S‚`Њ fB‚Jg~0F/0G// NєъђЮь `j EЂ(Jg`HЂHА// NєнрPЏ`P/ NєэДXЏ g0 g* g$Jg `*/ Nєэ¤XЏ g g gJf EB0(<` EЂ(R‚JgюЬJgьFЋLо<ьяШN^NuNVHз?№йb6BEєin,0HАгЂ84"n6GЦй:EЪй  gь¶ьmф4KµщF~lиєьmа6 HГ¶№F‚lТ<Fэя9† yG h еЂ p$г‚00(@я2AяІ@gћ1„(// N№$PЏgZHxHxHxEщ,pN’HxpHxHxN’„я/HxHxN’Юь$HxHxHxN’HxqHxHxN’Юь`„я/HxHxN№,pЮь < ЖF’< RЖF“RE"nєioюШRG"nѕioюћ`z"n(i№йbj8 gR"n i ђђjRЂвЂ"n0iHhHА/N№-zPЏ6@0 HА"n iеЂ, њ° lRЂвЂ"n:@Ъй Цй¶ьmф: HЕє№F~lжєьmЮ6 HГ¶№F‚lР<Fэя8† yG h еЂ p$г‚00(@я2AяІ@gћ1„(//N№$PЏgZHxHxHxEщ,pN’HxpHxHxN’„я/HxHxN’Юь$HxHxHxN’HxqHxHxN’Юь`„я/HxHxN№,pЮь < ЖF’< RЖF“TЊ"n№йcюљ"nB©B©J)g29F“HЂ<њi 3F9F’HЃ<њi2† yG0Ѓ1@`d yG"n<Ьi0†<)Ьi 1F`2 yG"n<Ьi0†<)Ьi 1F`HxHxHxEщ,pN’HxHHxHxN’B9F’B9F“BGЮь`ЖBE0HА$е‚`љ"n i0HА p(гЂ80gZHxHxHxEщ,pN’HxpHxHxN’„я/HxHxN’Юь$HxHxHxN’HxqHxHxN’Юь`„я/HxHxN№,pЮь R9F“RE0E±щF‚mя^B§0GHhN№$PЏRG0G±щF~mя2 yG2h/ 2P/ N№$Lо<ьяШN^NuNV0n/0n/N№$N^NuNVHз0 4. 6.9F’HЂґ@f 9F“HЂ¶@gbHxHxHxEщ,pN’HxYHxHxN’0Bp Р€Ђя/HxHxN’Юь$0Cp Р€Ђя/HxHxN’ВF’ГF“Lо яфN^NuNVHз8 $nB№F†x#ДFЉBBґjl8BAІjn(0HА&еѓ j0HА"p8гЂ p83°RAІjoаRBґjmИBBґjn$0*HА jеЂ2HБ pгЃ1ј RBґjoЬµщGf /9GNєшћ`$ j%P0*HА jеЂ2*HБгЃТ°%ALоярN^NuNVя//.,/.(/.$/. /././././. /.$‚яяя/N№+tЮь,//9G”Nєиn$.юьN^NuNVя/Nєх.$‚яяя//9G”Nєц†/.,/.(/.$/. /././././. /./N№($.юьN^NuNV/$nяьN^NuNV/ $nґьgnJgj* g f*0j°ьo/HjBЂ0*/N№>РЮь BjBj jbBЂ0*/N№'XЏJЂfBЂ0*/N№? XЏґьg/ N№6dBЂ$nяьN^NuNVHз8 &.lp`њr?ІѓmAщGњJ08g 08WАrАЃ`zHx/B§HxBEщ,HN’(Hx/HxHxBN’Юь JЂgnrАІЂgrЫ#БVдB‚`tB§//HxBN№,Hr?ІѓmJ‚gAщGњј8` AщGњј8 LоярN^NuNV#оGђB№GЊHn/. N№(>N^NuNV#щFњGђB№GЊHn /.N№(>N^NuNVB№Gђ#оGЊHn/. N№(>N^NuNVяьHз?<&n(n B‡`nrяІ‚gRr І€m І‚m8rяІ‚g0N№+$r І‚lк`r%І€g ±Вg `&›Н•КB„HЂ0@r*І€f(:|`r9І€m" гЂз„-Dяь(Ш®яьCрHР( HЂ0@r/І€mШrlІ€fRЉ`rhІ€fHЂ0@pЫР€rS°ЃbљгЂ2;NыЁяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђњњяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђІ њњяђяђяђяђяђяђяђяђ яђяђяђОяђяђяђяђ r%І‚fюв`J„f$\єьf‚R‡N№+$`Ф$\`rяІ‚g*N№+$r І‚lм`rяІ‚gєьfВN№+$S„gr І‚mаBєьfђR‡`Љ4|Рь rxІ€fz` roІ€fz`z B†`r І‚mN№+$rяІ‚fм//N№*В&PЏmю2//N№-PЏ,ЬѓN№+$//N№*В&S„PЏgJѓlТєьf \ †R‡`pю`HЂ0@°ьfэЄ°ьf `pяLо<ьяФN^NuNV/ .". t/ґЂl t9ґЂmtРР‚`2tґЃft`ґЂl tfґЂmt©Р‚`tґЃft@ґЂl tFґЂmtЙР‚`pя$.яьN^NuNVJ№Gђg/9GђN№54HЂHА` yGЊ°ьgJgHЂHАR№GЊ`pяN^NuNV"n Qо "€N^NuNVHnHzявHn/. N№0¶ nBN^Nurww+NVHз HzяоB§Eщ@N’#АFњHzяЬHxN’#АF HzяОHxN’#АF¤/./. /.N№А$Юь$/9FњEщ&ЂN’/9F N’/9F¤N’ LояшN^NuNV/././. . ? .?NAЯь N^NuNV .? .?/. .?NAЯь N^NuNVHз?ь .? . ? .?NM\ЏLЯ?ьN^NuNVHз?ь/. . ? .?NMPЏLЯ?ьN^NuNV/$.g2". g,ДБ 4.g ". ДБбЉбЉР‚BЃ2. g$.ДБбЉбЉР‚`BЂ$N^NuNVяюBnяю . jDЂRnяю/ .jDЂSnяю/Nєя”PЏJnяюgDЂN^NuNV///BЂ".$. vx fг‹гЉ`цІ‚ge’‚ЂѓJЃgS„вЉв‹fк(&$N^NuNVяюBnяю . lDЂRnяю/ .lDЂSnяю/NєяPЏJnяюgDЂN^NuNVяь//. /.Nєяx /. /Nєя6$".’‚-Aяь .яь$.яшN^NuNVяь//. /.Nєя„ /. /Nєя$".’‚-Aяь .яь$.яшN^NuNVHз?ь/./. . ? .?NNЯь LЯ?ьN^NuNVHз?ь .?/./. .?NNЯь LЯ?ьN^NuNVHз?ь/././. .?NNЯьLЯ?ьN^NuNVHз?ь .? . ? .?NN\ЏLЯ?ьN^NuNVяШHз?<(n-nяШ-nяЬ.. .*L| BЃzєЂmp°‡l.zє‡l~/N№AlXЏ///.яЬ/.яШN№@ЮЮьJЂlь-/.яЬ/.яШN№@¤PЏ-@яШ-AяЬ/.яЬ/.яШN№APЏ$/N№AlXЏ///.яЬ/.яШN№@КЮь-@яШ-AяЬ—Л¶ьgJ‚o>//N№-жPЏЂиа 3 иаnJlB3иа//N№-zPЏ$R‹`ДS‹3иа0Е¶ьnо—ЛB3иаR‹zє‹lф—ЛBѓ/EщAlN’XЏ///.яЬ/.яШN№@ђЮь-@яШ-AяЬ//N№APЏ$/N’XЏ///.яЬ/.яШN№@КЮь-@яШ-AяЬЂиа 3 иаnJlB3иаJ‚o& RѓR‹z є‹lя~zяє‡l&Jѓoь.—Л¶‹o3иа0ЕR‹¶‹nрB Lо<ья°N^Nu0123456789ABCDEF0123456789abcdefNVя€Hз?<&n*n ¶ьg^`T %f8 #f ~-Gяђ`B®яђ™МB† -f|`ф +f8|`р  f ёьfд8|яя`Ю~ -GяЊB… 0f~0-GяЊHЂAщFф0g.EщFф` гЂ"зЃ @СБHЂCрР* HЂ2fЬ` *f *J…lD…|&<} .f< *f&`.BѓEщFф` гЂ"зЃ @СБHЂCрР& HЂ2fЬBЃ lfr` hfrHЂAщFф0g~-Gя€r `B®я€ dg og xg uf~І‡g ~І‡gB‡І‡f(` eg gg ff-]я”-]яHЂ0@pЫР€~S°‡bДгЂ>;Nыp¶ёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёё¬ЁВВВёёёёёёёёёёёЂёё4J„lD„t`B‚$NB"Hx /N№-°PЏ0Hx /N№-8PЏ(fЪJ‚g<-`ёьo<+` ёьl< `ь$NB"0жЊfрJ®яђgаJ*gШ<0`Р$NB"J®я€gAъьи`AъьуpА„0иЊfфJ®яђgЁJ*g SЉJ®я€g<X`<xЂ<0`„$NB"Hx /N№-°PЏ0Hx /N№-8PЏ(fЪ`V/./`ь/.Hx%`р ѓ}fvя///.я/.я”B§HnяњNєъx$@/ Iщ@dN”Юь°ѓo / N”&XЏ`$]/ N№@dXЏ¶Ђo&¶…l ђѓJ†g ,~ -GяЊ` ,D†`¶…fB†J†lN -f~0ѕ®яЊf/.HЂHА/"nN‘SѓPЏ/./.яЊ"nN‘R†PЏkИ`/.HЂHА/"nN‘PЏSѓjиJ†g*/./.яЊ"nN‘S†PЏfм`/.HЂHА/"nN‘PЏfыЄLо<ья`N^NuNV/ $nґьgpJ*fjJgf* gX2jІкnR0jСк %H HxHjBЂ0*/N№7|5@Bj2jІкn|Jjl 2j%I`BЄpя`0j0ЁHЂRjЂя$nяьN^NuNVHз0 tФ®rшДЃEщFЁ R°ьgґЁc $H P°ьfр°ьf2 ‚c&`&</HxHN№,H @°ьnBЂ`&$€!CBђ PЂ°Ёd•ЁСи!B`$ђ PЂLо яфN^NuNV/ "nQ‰EщFЁ R°ьgіИc $H P°ьfт Р©°ьg±Аb "(У© P"€ РЄіАb ")УЄ$‘`$‰$nяьN^NuNVHз00&. . &CQ‹tФЂrшДЃґ«dEу("+’‚%AHjNєяf'B`0ґ«c*/NєюД$@"JXЏґьg C +QЂg"ШYЂfъ/Nєя2& Lо ярN^NuNV//. /.N№-PЏ$/Nєюv @JЂg`BQКяьBBS‚dф$.яьN^NuNVHз<0$.(. *.Bѓ&D/N№'XЏJЂf"/ //Hx?N№, JЂl6#АVдpя`*#ДGt#щF°GxHxHxEщ,pN’ЂPЏ9Fзgh9Fзg:HЂЂя/HxHxN’Юь  fB№F°` o ~nR№F°Rѓєѓo®HxHxN№,pPЏJ@gR‹`я|9Fзg  fј І9Fкf$9FзgHЂHА/N№;цXЏ&DBѓHx `,І9Fлf*9FзgHЂHА/N№;цXЏ&DBѓHx N№>vXЏ9Fзg’І9FрfHxHxN№,pЂPЏ9FзgN  f89Fзg.Hx HxHxEщ,pN’Hx HxHxN’B№F°Юь`HЂHА/N№;цXЏRѓHxHxN№,pPЏJ@g„`ОІ9FрfF9Fзg&Hx^HxHxEщ,pN’HxHxHxN’ЮьHxHxN№,pЂPЏ`І9FмfH9FзgHЂHА/N№;ц$•№F°XЏ`HxHxHxN№,pЮь S‚rяІ‚mв`Ю  g І9Fнf^9FзgL  f8Hx HxHxEщ,pN’Юь 9Fзg$Hx HxHxN’B№F°`HЂHА/N№;ц RЂ`rAщFиІgf$JѓgVS‹9FзgHSѓ/N№="XЏ`8І9Fйf"`9Fзg /N№="XЏS‹SѓjжBѓ` І9FпfZ`"  g  fB9Fзg Sѓ/N№="XЏS‹JѓfШ`$  g"  g9Fзg Sѓ/N№="XЏS‹JѓfШR‹`ЁAщFоІf~9FзgHЂHА/N№;цXЏHx HxHxEщ,pN’Hx HxHxN’B№F°B№GxЮь9FзgD$D·Кc>9FзgHЂHА/N№;цXЏRЉ·Кbа`9FзgHЂHА/N№;цXЏRѓєѓnым Lо <яиN^NuNVHз0 . BѓHЂJj,HxMHxHxEщ,pN’Hx-HxHxN’vЮь nЉ  fZr‚№F° 9F°SЂ&–Ђ9Fзg($`Hx HxHxN№,pЮь QКяиBBS‚dа`†Hx HxHxN№,p`pHx^HxHxEщ,pN’HЂ0@p@Р€Ђя/` f&Hx^HxHxEщ,pN’Hx?HxHxN’Tѓ`HЂЂя/HxHxN№,pRѓЧ№F° Lо яфN^NuNVHз0 &. yGt08HЂJjt`B‚ o f$  f//9GtN№=М$9F°”ЂPЏ`T‚`R‚•№F°`4HxHxHxEщ,pN’Hx HxHxN’HxHxHxN’Юь$QКяКBBS‚dВLо яфN^NuNVHз8 n&. $9Gx`.HЂJjT‚ o f  fx„„`T‚`R‚QЛяРBCSѓdИ LояфN^NuNV/ .". t°‚gt °‚gt °‚fAщFЬ`AщFа`AщFё  Ѓ` tа#ВVдpя$.яьN^NuNV/".mFt ґЃm@AщFґ еЂ p°ьf tІ‚g t І‚gt І‚f"AHi N№&H` tґ€gB§/Nђ$.яьN^NuNVHз80(.&. $.9Fзg/N№'XЏJЂf///Hx@N№, `€&CJ‚g~  f&Hx HxEщ?ьN’Hx HxN’B№F°Юь`L  fB№F°`* o ~nR№F°`  fpЂ№F°RЂ#АF°HЂHА/HxN№?ьPЏR‹S‚f‚ Lо ямN^NuNV/$./Hx>N№, JЂl#АVдpяJ‚mr?І‚m AщGњB0($.яьN^NuNVHxHxN№,pЂяN^NuNVHnHx/.Hx@N№, N^NuNV/ HxN№5Ф$@5n /. N№E@BЄ B*BjBjјBЄ $nяьN^NuNV nBЂ`RЂJfъN^Nu// //N№CжPЏBЃNu// //N№BкPЏBЃNu"/ /g ЂЂNu// //N№AОPЏBЃNu// //N№BЄPЏBЃNu /"/ j JЂj°Ѓn mg °ЃgnpяNuBЂNupNuBЂBЃNuBЂBЃNuNV/B‚ .g@jR‚"о‰а‰а‰ЃяЃ~ЂяяЂЂ Ѓgkг€SЃ`рв€RЃ`кJ‚gDЂ$N^NuBЂBЃNuNV/B‚r .gDjDЂR‚ ЂяяяoRЃв€`тfSЃг€`фЂяяЃ~Ѓяб‰б‰п‰ЂЃJ‚gЂЂ$BЃN^NuBЂBЃNuNVHз? .gґ|$мЄ‚я‚~". gћ&м«ѓяѓ~ЂяяЂЂJ®jDЂЃяяЃЂJ® jDЃ¶‚m *љ‚к *`*љѓкЎ*B‡РЃg@jDЂ~gвЂR…fг€S…`фЂяя…~…я|н­Ђ…J‡gЂЂ`BЂ` . LЯьN^Nu /g ЂЂNuJЇg ЇЂNъя /Nu /"/ j JЂj°Ѓn mg °ЃgnpяNuBЂNupNuNVяшHз? .gд". gЬ|$мЄ‚я‚~&м«‚яѓ~B‡ЂяяЂЂJ®j ‡ЃяяЃЂJ® j ‡(„яя*…яяИЕ-DяьB®яш(„яя*|м­ИЕЩ®яъ(м¬*…яяИЕЩ®яъ(м¬*м­ИЕЩ®яш .яъа€fг€S‚`фЂяяФѓ‚~‚я|нЄЂ‚J‡g ЂЂ`BЂLЯьN^NuNVHз? .". |$мЄ‚я‚&м«ѓяѓB‡ЂяяЂЂJ®j ‡ЃяяЃЂJ® j ‡B„*<Ђп€п‰°Ѓk€…ђЃв‰вЌfт fг€S‚`фЂяя”ѓ‚‚янЄЂ‚J‡gЂЂLЯьN^Nu /Nu /BЃNuNVHз0/. N№E&B§//.N№E`$Юьn #ВVдBЂ`,HxN№5Ф @1BјB(BЁCBhBhBЁ Lо яшN^NuNV n +g2 ag( rg wf" (+gr`r ` (+gBЃ`r `r N^NuNVHз8 (.6.0@ @g" @g @fКB§/Hx=N№,H$`ёB‚B§B§/HxCN№,HЮьJЂ\АrАЃggJЂg t°`JЂftЯJ‚fzfJЂf(__mulsf3Bк_waddch  D_overwri<_OK FЉ__mulsi3-_wclear _wdelch €__extendDў_wstandoж_nl  в__modsi3-ж_wstande__udivsi-8___sprin+`_console?а__modinpF‘__start __umulsi,ј_winsch &_woverla‚__fixdfsA_ttytypeFz_COLS F‚__fixdfdAf__negdf2@¤___tcharFи_werase T_puton  _write >Р__movcur$_makeboa_fscanf 'Р_cpyrid F”_curscr G_malloc 5Ф_stdin Fњ__negsf2Bњ__curiniFђ_srand &8__ctype_Fф___handlGњ_console?ь___sshftx_wgetstrT_newwin ”_wmove И_scanw %І_Layout GЬ_ERR F†_scanf 'ф_waddstr_etext Fl_environVЬ_noraw P___ushftђ_noecho ___col_pF°_read 7|_crmode Ё__stksizVа_rand &_delwin †_trap_1_,H_raw &_errno Vд_pat Vи_nonl  _next F_wdelete_exit &H_main А_free 6d_close ? _mvcur #ж__subdf3@К_fdopen @_fopen D¬_edata Gt_nocrmodР_ison †_fgetc 54_end Vм_box ^_fclose &Ђ__truncdDњL@    F  & ‚  "€ R *(    ,V&8 |,(@ N&< .Ћt>‚ И DLF6jЁ2ЄbL t€BF>Lђ*rn * †њD  @  *6$F $  , * , 8Ђ2^ b@2^ &".F^    Jrr &4  P",&,<RJ ¦ 8& ь " 4\FDёHd0$..0Ll",2 *  $L&м®B",ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееtwinkle.tos : twinkle.o curses.o rand.o gcc -O -o twinkle.tos twinkle.o curses.o rand.o twinkle.o : twinkle.c portab.h curses.h gcc -O -c twinkle.c curses.o : curses.c portab.h curses.h gcc -O -c curses.c rand.o : rand.c gcc -O rand.c -c rand.o еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее#include "curses.h" еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееThis rand() function is from Kernighan and Richie and is to make up for the apparent lack of such function in Gnu C which we have, it's not that hot but it works well enough. ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее/* rand() & srand(), K&R, 2nd edition, p46 */ unsigned long int next = 1; /* random number between 0 and 32767 */ int rand(void) { next = next * 1103515245 + 12345; return (unsigned int)(next/65536) % 32768; } void srand(unsigned int seed) { next = seed; } ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее. +–n.. +–GNUCHESSBOO ,–oњ®NCHESS 2–›‘ТGNUCHESS 8–РЅ! ! Opening Library for CHESS ! ! Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. ! Copyright (c) 1987 by Stuart Cracraft and John Stanback ! ! This file is part of CHESS. ! ! CHESS is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY. No author or distributor ! accepts responsibility to anyone for the consequences of using it ! or for whether it serves any particular purpose or works at all, ! unless he says so in writing. Refer to the CHESS General Public ! License for full details. ! ! Everyone is granted permission to copy, modify and redistribute ! CHESS, but only under the conditions described in the ! CHESS General Public License. A copy of this license is ! supposed to have been given to you along with CHESS so you ! can know your rights and responsibilities. It should be in a ! file named COPYING. Among other things, the copyright notice ! and this notice must be preserved on all copies. ! ! ! ! Four Knight's Game e2e4 e7e5 g1f3 b8c6 b1c3 g8f6 f1b5 f8b4 o-o o-o d2d3 b4c3 b2c3 d7d6 c1g5 d8e7 f1e1 c6d8 d3d4 d8e6 ! Giuoco Piano e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 c2c3 g8f6 d2d4 e5d4 c3d4 c5b4 b1c3 f6e4 o-o b4c3 ! Giuoco Piano e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 d2d3 g8f6 b1c3 d7d6 c1g5 h7h6 g5f6 d8f6 c3d5 f6d8 ! Two Knights Defence e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 f3g5 d7d5 e4d5 c6a5 c4b5 c7c6 d5c6 b7c6 b5e2 h7h6 ! Two Knights Defence -- Max Lange Attack e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 d2d4 e5d4 o-o f8c5 e4e5 d7d5 e5f6 d5c4 f6g7 h8g8 ! Petrov's Defence e2e4 e7e5 g1f3 g8f6 f3e5 d7d6 e5f3 f6e4 d2d4 d6d5 f1d3 f8d6 o-o o-o c2c4 c8g4 c4d5 f7f5 b1c3 b8d7 ! Petrov's Defence e2e4 e7e5 g1f3 g8f6 d2d4 e5d4 e4e5 f6e4 d1d4 d7d5 ! Vienna Game e2e4 e7e5 b1c3 g8f6 f1c4 b8c6 d2d3 f8b4 c1g5 h7h6 g5f6 b4c3 b2c3 d8f6 g1e2 d7d6 ! Vienna Game e2e4 e7e5 b1c3 f8c5 g1f3 d7d6 d2d4 e5d4 f3d4 g8f6 c1g5 h7h6 g5h4 b1c3 ! Three Knights Game e2e4 e7e5 b1c3 b8c6 g1f3 g7g6 d2d4 e5d4 c3d5 f8g7 c1g5 c6e7 f3d4 c7c6 d5c3 h7h6 ! Bishop's Opening e2e4 e7e5 f1c4 g8f6 d2d4 e5d4 g1f3 f6e4 d1d4 e4c5 o-o c5e6 f1e1 c7c6 b1c3 d7d5 c4d3 f8e7 ! Ruy Lopez -- Classical Defence e2e4 e7e5 g1f3 b8c6 f1b5 f8c5 c2c3 g8f6 d2d4 e5d4 e4e5 f6e4 o-o d7d5 ! Ruy Lopez -- Birds Defence e2e4 e7e5 g1f3 b8c6 f1b5 c6d4 b5a4 f8c5 o-o d4f3 d1f3 g8e7 d2d3 o-o c1e3 c5b6 b1c3 d7d6 ! Ruy Lopez -- Schliemann Defence e2e4 e7e5 g1f3 b8c6 f1b5 f7f5 b1c3 f5e4 c3e4 d7d5 f3e5 d5e4 e5c6 d8d5 c2c4 d5d6 c6a7 c8d7 ! Ruy Lopez -- Old Steinitz Defence e2e4 e7e5 g1f3 b8c6 f1b5 d7d6 d2d4 c8d7 b1c3 g8f6 o-o f8e7 f1e1 e5d4 f3d4 o-o d4f5 f8e8 ! Ruy Lopez -- Old Steinitz Defence e2e4 e7e5 g1f3 b8c6 f1b5 d7d6 d2d4 c8d7 b1c3 g8f6 b5c6 d7c6 d1d3 e5d4 f3d4 f8e7 c1g5 c6d7 ! Ruy Lopez -- Modern Steinitz Defence e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 d7d6 d2d4 b7b5 a4b3 c6d4 f3d4 e5d4 c2c3 d4c3 b1c3 c8b7 ! Ruy Lopez -- Open Defence e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 o-o f6e4 d2d4 b7b5 a4b3 d7d5 d4e5 c8e6 c2c3 f8c5 b1d2 o-o ! Ruy Lopez -- Open Defence e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 o-o f8e7 f1e1 b7b5 a4b3 d7d6 c2c3 o-o h2h3 c6a5 b3c2 c2c4 d2d4 d8c7 ! Ruy Lopez e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5c6 d7c6 d2d4 e5d4 d1d4 d8d4 f3d4 c8d7 c1e3 o-o-o b1d2 g8e7 ! Scotch Game e2e4 e7e5 g1f3 b8c6 d2d4 e5d4 f3d4 f8c5 c1e3 d8f6 c2c3 g8e7 b1d2 d7d6 e3c5 d6c5 ! Philidor's Defence e2e4 e7e5 g1f3 d7d6 d2d4 g8f6 b8c6 b1d2 f8c5 f1e2 o-o o-o d1e2 c7c6 ! Alekhine's Defence e2e4 g8f6 e4e5 f6d5 c2c4 d5b6 d2d4 d7d6 f2f4 d6e5 f4e5 b8c6 c1e3 c8f5 b1c3 e7e6 g1f3 f8e7 ! Alekhine's Defence e2e4 g8f6 e4e5 f6d5 d2d4 d7d6 g1f3 c8g4 f1e2 e7e6 o-o f8e7 h2h3 g4h5 c2c4 d5b6 ! Kings Gambit Accepted e2e4 e7e5 f2f4 e5f4 g1f3 d7d6 f1c4 h7h6 d2d4 g7g5 o-o f8g7 c2c3 b8c6 d1b3 d8e7 ! Ponziani's Opening e2e4 e7e5 g1f3 b8c6 c2c3 d7d5 d1a4 g8f6 f3e5 f8d6 e5c6 b7c6 d2d3 o-o c1g5 h7h6 ! Caro-Kann Defence e2e4 c7c6 d2d4 d7d5 e4d5 c6d5 c2c4 g8f6 b1c3 b8c6 c1g5 e7e6 c4c5 f8e7 f1b5 o-o g1f3 f6e4 ! Caro-Kann Defence e2e4 c7c6 d2d4 d7d5 e4e5 c8f5 f1d3 f5d3 d1d3 e7e6 b1c3 d8b6 b1d2 c6c5 d4c5 f8c5 ! Caro-Kann Defence e2e4 c7c6 b1c3 d7d5 g1f3 c8g4 h2h3 g4f3 d1f3 e7e6 d2d4 g8f6 f1d3 d5e4 c3e4 d8d4 c2c3 d4d8 ! French Defence -- Classical e2e4 e7e6 d2d4 d7d5 b1c3 g8f6 c1g5 f8e7 e4e5 f6d7 g5e7 d8e7 d1d2 o-o f2f4 c7c5 g1f3 b8c6 o-o-o c5c4 ! French Defence -- MacCutcheon e2e4 e7e6 d2d4 d7d5 b1c3 g8f6 c1g5 c8g4 e4e5 h7h6 g5d2 g4f3 g2f3 f6e4 d1g4 e8f8 h2h4 c7c5 ! French Defence -- Rubenstein e2e4 e7e6 d2d4 d7d5 b1c3 d5e4 c3e4 b8d7 g1f3 g8f6 e4f6 d7f6 f1d3 b7b6 d1e2 c8b7 c1g5 f8e7 ! French Defence -- Winawer e2e4 e7e6 d2d4 d7d5 b1c3 f8b4 e4e5 c7c5 a2a3 b4c3 b2c3 g8e7 d1g4 o-o g1f3 b8c6 f1e3 f7f5 ! French Defence -- Tarrasch e2e4 e7e6 d2d4 d7d5 b1d2 b8c6 g1f3 g8f6 e4e5 f6d7 d2b3 f7f6 f1b5 f8e7 c1f4 o-o ! Pirc Defence e2e4 d7d6 d2d4 g8f6 b1c3 g7g6 f2f4 f8g7 g1f3 o-o f1e2 c7c5 ! Sicilian Defence -- Dragon Variation e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1e2 g7g6 c1e3 f8g7 o-o o-o d4b3 c8e6 f2f4 c6a5 f4f5 e6c4 ! Sicilian Defence -- Dragon Variation e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g7g6 b1c3 f8g7 c1e3 g8f6 f1c4 o-o ! Sicilian Defence -- Boleslavsky Variation e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1e2 e7e5 d4b3 f8e7 o-o o-o c1e3 c8e6 ! Sicilian Defence -- Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o ! Sicilian Defence -- Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1e2 e7e5 d4b3 f8e7 o-o o-o f2f4 b7b5 a2a3 c8b7 ! Sicilian Defence -- Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 g2g3 e7e5 d4e2 c8e6 f1g2 b7b5 o-o b8d7 ! Sicilian Defence -- Closed e2e4 c7c5 b1c3 b8c6 g2g3 g7g6 f1g2 f8g7 d2d3 e7e6 c1e3 d7d6 g1e2 c6d4 d1d2 d8h4 o-o g8d7 ! Nimzowitsch Defence e2e4 b8c6 d2d4 d7d5 e4e5 f7f6 g1f3 c1g4 f1e2 e7e6 e5f6 g8f6 c2c3 f8d6 c1g5 d8d7 ! Queens Gambit Accepted d2d4 d7d5 c2c4 d5c4 g1f3 g8f6 e2e3 e7e6 f1c4 c7c5 o-o a7a6 d1e2 b7b5 c4d3 c5d4 e3d4 b8c6 ! Queens Gambit -- Catalan d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o f6d7 d1c2 c7c6 b1d2 b7b6 e2e4 c8b7 b2b3 a8c8 ! Queens Gambit Declined -- Orthodox d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 f8e7 e2e3 o-o g1f3 b8d7 a1c1 c7c6 f8d3 d5c4 f1c4 f6d5 ! Queens Gambit Declined -- Cambridge Springs d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 b8d7 e2e3 c7c6 g1f3 d8a5 f3d2 f8b4 d1c2 o-o g5h4 c6c5 ! Queens Gambit Declined -- Exchange Var. d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 b8d7 c4d5 e6d5 e2e3 c7c6 f1d3 f8e7 d1c2 o-o g1e2 f8e8 ! Queens Gambit Declined -- Semi-Tarrasch d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 g1f3 c7c5 c4d5 c5d4 d1d4 e6d5 e2e4 b8c6 f1b5 f6e4 ! Queens Gambit Declined -- Tarrasch d2d4 d7d5 c2c4 e7e6 b1c3 c7c5 c4d5 e6d5 g1f3 b8c6 g2g3 g8f6 f1g2 f8e7 o-o o-o ! Queens Gambit Declined -- Vienna d2d4 d7d5 c2c4 e7e6 g1f3 g8f6 f1b5 f8b4 b1c3 d5c4 e2e4 c7c5 e4e5 c5d4 d1a4 b8c6 o-o-o c1d2 ! Queens Gambit Declined -- Slav (Marshall Gambit) d2d4 d7d5 c2c4 c7c6 b1c3 e7e6 e2e4 d4e4 c3e4 f8b4 c1d2 d8d4 d2b4 d4e4 f1e2 b8a6 b4d6 b7b6 ! Queens Gambit --Slav (Krause) d2d4 d7d5 c2c4 c7c6 g1f3 g8f6 b1c3 d5c4 a2a4 c8f5 f3e5 e7e6 f2f3 f8b4 c1g5 h7h6 g5f6 d8f6 e2e4 f5h7 ! Modern Benoni Counter Gambit d2d4 g8f6 c2c4 c7c5 d4d5 e7e6 b1c3 e6d5 c4d5 d7d6 e2e4 g7g6 f1d3 f8g7 g1e2 o-o o-o a7a6 a2a4 d8c7 ! Queens Pawn Game d2d4 d7d5 g1f3 g8f6 c1f4 c7c5 e2e3 b8c6 c2c3 d8b6 d1c1 c8f5 d4c5 b6c5 b1d2 a8c8 f3d4 c6d4 e3d4 c5b6 ! Pirc-Robatsch Defence d2d4 d7d6 e2e4 g8f6 b1c3 g7g6 c1g5 f8g7 d1d2 b8d7 o-o-o e7e5 d4e5 d6e5 g1f3 h7h6 g5h4 g6g5 h4g3 d8e7 ! Pirc-Robatsch Defence d2d4 d7d6 e2e4 g8f6 b1c3 g7g6 f1c4 c7c6 d1e2 f8g7 g1f3 o-o c1g5 b7b5 c4d3 d8c7 ! Queens Indian Defence d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 g2g3 c8b7 f1g2 f8e7 o-o o-o b1c3 f6e4 d1c2 e4c3 c2c3 d7d6 c3c2 f7f5 ! Queens Indian Defence d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 e2e3 c8b7 f1d3 f8e7 b1c3 d7d5 o-o o-o d1e2 b8d7 ! Nimzo-Indian Defence d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 d1c2 d7d5 a2a3 b4c3 c2c3 b8c6 g1f3 f6e4 c3b3 c6a5 b3a4 c7c6 ! Nimzo-Indian Defence (Rubenstein) d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 e2e3 o-o f1d3 d7d5 g1f3 c7c5 o-o b8c6 a2a3 b4c3 b2c3 d5c4 d3c4 d8c7 ! Nimzo-Indian Defence -- Samisch d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 a2a3 b4c3 b2c3 o-o f2f3 d7d5 c4d5 e6d5 e2e3 c8f5 g1e2 b8d7 e2g3 f5g6 ! Nimzo-Indian Defence d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 c1d2 o-o e2e3 d7d5 g1f3 c7c5 a2a3 b4c3 d2c3 f6e4 a1c1 e4c3 c1c3 c5d4 ! Grunfeld Defence d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 c4d5 f6d5 e2e4 d5c3 b2c3 c7c5 f1c4 f8g7 g1e2 o-o o-o c5d4 c3d4 b8c6 ! Grunfeld Defence -- Smyslov d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 g1f3 f8g7 d1b3 d5c4 b3c4 o-o e2e4 c8g4 c1e3 f6d7 o-o-o b8c6 ! Grunfeld Defence d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 c1f4 f8g7 d2d3 o-o c4d5 f6d5 c3d5 d8d5 f4c7 b8c6 ! Kings Indian Defence -- Classical d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 g1f3 o-o f1e2 e7e5 o-o b8c6 c1e3 f8e8 d4e5 d6e5 ! Kings Indian Defence -- 4 pawns attack d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 f2f4 c7c5 g1f3 o-o d4d5 e7e6 f1d3 e6d5 c4d5 d8b6 ! Kings Indian Defence -- Samisch d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 f2f3 o-o c1e3 e7e5 d4d5 c7c6 g1e2 c6d5 c3d5 f6d5 ! Kings Indian Defence -- Main Line d2d4 g8f6 c2c4 g7g6 g2g3 f8g7 f1g2 o-o b1c3 d7d6 g1f3 b8d7 o-o e7e5 e2e4 c7c6 h2h3 d8b6 ! Kings Indian Defence d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 g1f3 o-o c1f4 d7d6 h2h3 b8d7 e2e3 c7c6 ! Dutch Defence d2d4 f7f5 g2g3 e7e6 f1g2 g8f6 g1f3 f8e7 o-o o-o c2c4 d7d6 b1c3 d8e8 d1c2 e8h5 b2b3 b8c6 c1a3 a7a5 ! English Opening c2c4 e7e5 b1c3 g8f6 g1f3 b8c6 e2e4 f8b4 d2d3 d7d6 f1e2 o-o o-o b4c3 b2c3 d8e7 ! English Opening c2c4 g8f6 b1c3 d7d5 c4d5 f6d5 e2e4 d5f4 f1c4 c8e6 c4e6 f7e6 ! English Opening c2c4 e7e5 b1c3 g8f6 g1f3 b8c6 g2g3 d7d5 c4d5 f6d5 f1g2 d5b6 o-o f8e7 d2d3 o-o c1e3 f7f5 ! Reti -- Accepted g1f3 d7d5 c2c4 d5c4 e2e3 c7c5 f1c4 e7e6 o-o g8f6 b2b3 b8c6 c1b2 a7a6 a2a4 f8e7 ! Reti -- Neo Catalan g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 f8e7 o-o o-o b2b3 c7c5 c4d5 f6d5 c1b2 b8c6 d2d4 b7b6 b1c3 d5c3 ! Reti -- Barcza g1f3 d7d5 g2g3 g8f6 f1g2 g7g6 o-o f8g7 d2d3 o-o b1d2 b8c6 e2e4 e7e5 c2c3 a7a5 f1e1 d5e4 d3e4 f6d7 ! Sicilian Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 e4e5 d6e5 f4e5 f6d7 c3e4 h7h6 g5h4 a3a2 b1b3 b8c6 d4c6 b7c6 e4d6 f8d6 e5d6 a6a5 f1e2 a5a4 b3c3 a2a1 e2d1 a4a3 o-o a3a2 d2e3 o-o ! # Sicilian Defense col. 2f p. 176 MCO 12. (Incomplete game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 e4e5 d6e5 f4e5 f6d7 f1c4 f8b4 b1b3 a3a5 o-o o-o g5f6 d7f6 e5f6 f8d8 b3b4 a5b4 d2g5 g7g6 f1f4 b7b6 f4h4 b4f8 g1f1 a8a7 ! # Sicilian Defense col. 3g p. 176 MCO (Incomplete Game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 e4e5 d6e5 f4e5 f6d7 f1c4 a3a5 c4e6 f7e6 d4e6 d7e5 c3d5 a5d2 e1d2 e8d7 e6c7 a8a7 h1e1 e5c4 ! # Parma vs. Fischer, Havana 1965. Sicilian Defense col. 4j p. 176 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 g5f6 g7f6 f1e2 f8g7 o-o f6f5 f1d1 b8c6 d4c6 g7c3 d2e3 b7c6 b1b3 a3c5 e3c5 d6c5 b3c3 f5e4 c3c5 c8d7 c5e5 f7f5 g2g4 h8g8 g1g2 f5g4 e5e4 h7h5 g2g3 e8e7 ! # Matanovic, Sicilian Defense col. 5k p. 176 MCO (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 g5f6 g7f6 f1e2 b8c6 d4c6 b7c6 o-o a3a5 g1h1 f8e7 f4f5 e6f5 e4f5 c8f5 e2a6 a5a6 f1f5 d6d5 b1e1 a6b7 d2h6 o-o-o h6h3 b7d7 c3a4 ! # col. 6a e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 f4f5 b8c6 f5e6 f7e6 d4c6 b7c6 e4e5 d6e5 g5f6 g7f6 c3e4 f8e7 f1e2 h7h6 c2c4 f6f5 b1b3 a3a4 o-o f5e4 g1h1 c6c5 d2c3 a4c6 c3e5 h8f8 ! # col. 7d e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 f4f5 b8c6 f5e6 f7e6 d4c6 b7c6 e4e5 f6d5 c3d5 c6d5 f1e2 d6e5 o-o a8a7 g1h1 a3c5 c2c4 d5d4 e2h5 g7g6 h5d1 f8e7 d1a4 e8d8 f1f7 h7h6 g5h6 e5e4 ! # col. 8 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 d4b3 b8d7 g5f6 g7f6 f1e2 h7h5 o-o b2a3 a1d1 f8e7 g1h1 d7c5 e2f3 a8a7 b3c5 a3c5 ! # col. 9g; Minic-Barczay, Varna 1967 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 d4b3 b8c6 f1d3 d6d5 g5f6 g7f6 c3a4 b2a3 a4b6 d5d4 o-o a8b8 f4f5 a3b4 d2b4 f8b4 b6c8 b8c8 f5e6 f7e6 f1f6 e8e7 a1f1 c6e5 ! # col. 10i; Matulovic-Kavalek, Sousse 1967 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 d4b3 b8c6 a1b1 b2a3 g5f6 g7f6 f1d3 f8g7 o-o o-o f1f3 g8h8 f3h3 c6e7 f4f5 e6f5 e4f5 c8f5 d3f5 e7f5 c3d5 ! # col. 11b; Joppen-Bronstein, Belgrade 1954 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d4b3 b6e3 d1e2 e3e2 f1e2 b8d7 a2a4 f8e7 o-o-o h7h6 g5h4 e6e5 f4f5 b7b6 e2f3 c8b7 ! # col. 12e; Rajkovic-Udovcic, Yugoslav Chp. 1962 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d4b3 b8d7 d1f3 f8e7 o-o-o b6c7 f1d3 h7h6 g5h4 g7g5 f4g5 d7e5 f3e2 f6g4 b3d4 h6g5 h4g3 c8d7 d4f3 c7c5 ! # col. 13i; Fischer-Vukovic (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 f8e7 d1f3 d8c7 o-o-o b8d7 g2g4 b7b5 g5f6 d7f6 g4g5 f6d7 a2a3 a8b8 h2h4 b5b4 a3b4 b8b4 f1h3 o-o d4e6 f7e6 h3e6 g8h8 c3d5 c7c4 e6f5 f8f5 e4f5 c8b7 h1e1 e7f8 ! # col. 14m Parma-Tatai, Athens 1968 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 b7b5 e4e5 d6e5 f4e5 d8c7 e5f6 c7e5 f1e2 e5g5 d1d3 a8a7 c3e4 g5e5 d4f3 e5b2 o-o a7d7 d3e3 c8b7 a1b1 b2c2 f3g5 c2c6 f6g7 f8g7 ! # col. 15; slight advantage for white. e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 h7h6 g5h4 d8b6 d1d3 b6b2 a1b1 b2a3 e4e5 f6d5 c3d5 a3d3 f1d3 e6d5 e5e6 ! # col. 16c; Fichtl-Dolezal, CSSR 1954 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 d1f3 b8d7 o-o-o d8c7 f3g3 b7b5 f1b5 a6b5 d4b5 c7b8 b5d6 f8d6 g3d6 b8d6 d1d6 h7h6 g5f6 d7f6 h1d1 c8b7 f2f3 ! # col. 17e; Vasyukov-Zukharov, USSR 1960 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 d1d2 b8c6 o-o-o h7h6 g5h4 f6e4 d2f4 e4g5 d4c6 b7c6 f4a4 d8b6 f2f4 g5h7 f4f5 a8b8 f5e6 c8e6 f1c4 ! # col. 18g (somewhat questionable) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 b8d7 f1c4 d8a5 d1d2 e7e6 o-o-o b7b5 c4b3 c8b7 h1e1 a8c8 e4e5 d7e5 d4e6 f7e6 e1e5 d6e5 g5f6 ! # col. 19m; Yanofsky-Bolbochan, Stockholm 1962 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1e2 e7e5 d4b3 f8e7 o-o o-o f2f4 b7b5 a2a3 c8b7 e2f3 b8d7 g2g3 a8 d1e1 d7b6 g1h1 b6c4 b3d2 d8d7 d2c4 c8c4 c1d2 d6d5 ! # col. 20p e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1e2 e7e5 d4b3 f8e7 o-o o-o c1e3 b8d7 a2a4 b7b6 d1d2 c8b7 f2f3 d8c7 f1d1 f8c8 b3c1 ! # col. 21b e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 g2g3 e7e5 d4e2 f8e7 f1g2 o-o o-o b7b5 h2h3 c8b7 c3d5 f6d5 e4d5 b8d7 a2a4 d7c5 e2c3 d8d7 a4b5 a6b5 a1a8 f8a8 ! # col. 22 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f2f4 e7e6 d1f3 d8b6 d4b3 b8c6 f1d3 f8e7 c1e3 b6c7 o-o o-o a1e1 c6b4 ! # col. 23f e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1e3 e7e5 d4b3 c8e6 d1d2 b8d7 f2f3 f8e7 g2g4 b7b5 g4g5 f6h5 o-o-o o-o h1g1 a8c8 c3e2 ! # col. 24k; Kotkov-Polugayevski, USSR 1959 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1c4 e7e6 o-o f8e7 c4b3 o-o f2f4 b7b5 a2a3 c8b7 f4f5 e6e5 d4e2 b8d7 e2g3 d7c5 b3d5 b7d5 e4d5 a8c8 c1g5 c5d7 g5f6 d7f6 c3e4 c8c4 ! # col. 25o; Ciocaltea-Minic, Bucharest 1966 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1c4 e7e6 c4b3 b7b5 f2f4 c8b7 f4f5 e6e5 d4e2 b8d7 o-o f8e7 e2g3 a8c8 c1g5 o-o ! # col. 26e e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 o-o-o d6d5 e4d5 f6d5 d4c6 b7c6 c3d5 c6d5 d2d5 d8c7 d5a8 c8f5 a8f8 g8f8 d1d2 h7h5 f1e2 f8g8 a2a3 c7b8 ! # col. 27i; Bikhovski-Gik, Moscow 1968 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 o-o-o d8a5 c4b3 f8c8 g2g4 c6e5 h2h4 e5c4 b3c4 c8c4 d4b3 a5a6 h4h5 c4c3 b2c3 d7e6 c1b1 a8c8 e3d4 c8c4 h5g6 h7g6 ! # col. 28k e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 o-o-o d8a5 c4b3 f8c8 h2h4 c6e5 h4h5 f6h5 e3h6 e5d3 c1b1 d3b2 b1b2 g7h6 d2h6 c8c3 g2g4 h5f6 g4g5 f6h5 ! # col. 29m; Ostojic-Honfi, Monte Carlo 1968 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 o-o-o d8a5 c4b3 f8c8 c1b1 c6e5 h2h4 e5c4 b3c4 c8c4 d4b3 a5c7 h4h5 c4c3 d2c3 c7c3 b2c3 f6h5 e3d4 d7e6 h1e1 h5f6 e4e5 d6e5 d4e5 f6d5 b1b2 a8c8 ! # col. 30p; Karpov-Korchnoi, 2nd match game 1974. e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 h2h4 a8c8 c4b3 c6e5 h4h5 f6h5 o-o-o e5c4 b3c4 c8c4 g2g4 h5f6 d4e2 d8a5 e3h6 g7h6 d2h6 f8c8 d1d3 c4c5 g4g5 c5g5 d3d5 g5d5 c3d5 c8e8 e2c3 d7c6 e4e5 c6d5 e5f6 e7f6 h6h7 g8f8 h7h8 f8e7 c3d5 ! # col. 31 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 g2g3 b8c6 f1g2 c6d4 d1d4 f8g7 o-o o-o d4d3 c8e6 c3d5 f6d5 e4d5 e6f5 ! # col. 32c; Pulsen-Cortlever, Buenos Aires 1939. e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1g5 f8g7 d1d2 b8c6 o-o-o o-o d4b3 f8e8 f2f3 a7a6 c1b1 b7b5 h2h4 c8e6 g2g4 c6e5 ! # col. 33h e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f2f4 b8c6 d4c6 b7c6 e4e5 d6e5 d1d8 e8d8 f4e5 f6g4 c1f4 c8e6 c3e4 f8g7 e4g5 g7e5 o-o-o d8c7 g5e6 f7e6 f4e5 g4e5 d1e1 c7d6 g2g3 e5g4 f1c4 e6e5 e1e2 ! # col. 34j e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f2f4 b8c6 f1b5 d8c7 c3d5 f6d5 e4d5 a7a6 b5c6 b7c6 d4c6 c8b7 c1e3 f8g7 e3d4 g7d4 d1d4 o-o o-o b7c6 ! # col. 35l e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f2f4 b8d7 f1e2 f8g7 c1e3 o-o e2f3 d7b6 d1e2 e7e5 d4b3 f6g4 f3g4 d8h4 g2g3 h4g4 e2g4 c8g4 ! # col. 36a e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o d4b3 c8e6 f2f4 c6a5 f4f5 e6c4 b3a5 c4e2 d1e2 d8a5 g2g4 a8c8 g4g5 c8c3 g5f6 c3e3 e2e3 g7f6 c2c3 f8c8 a2a3 c8c4 a1e1 b7b5 ! # col. 37c; Domnitz-Kraidman, Tel Aviv 1964 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o d4b3 c8e6 f2f4 d8c8 d1e1 f6g4 e2g4 e6g4 f4f5 g6f5 h2h3 g4h3 g2h3 f5e4 e1h4 f7f5 g1h1 f8f7 f1g1 c6e5 c3d5 c8d7 b3d4 e5g6 g1g6 h7g6 a1g1 e7e5 g1g6 d7d8 e3g5 d8a5 d5f6 g8f8 d4e6 ! # col. 38f; Unzicker-Geller, W. Germany-USSR 1960 (drawn) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o d1d2 f6g4 e2g4 c8g4 f2f4 c6d4 e3d4 e7e5 d4e3 e5f4 f1f4 g4e6 f4f2 g7e5 e3d4 a8c8 a1d1 d8a5 a2a3 c8c4 c3e2 a5d2 d1d2 ! # col. 39e2e4 c7c5 g111f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o f2f4 d8b6 d1d3 f6g4 c3d5 g7d4 e2g4 d4e3 d3e3 b6b2 g4c8 a8c8 a1b1 b2a2 b1b7 e7e6 ! # col. 40h e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o f2f4 d8b6 e4e5 d6e5 f4e5 c6e5 d4f5 b6b2 f5e7 g8h8 e3d4 b2b4 d4e5 b4e7 d1d4 f6e8 e5g7 e8g7 e2d3 c8e6 ! # col. 41b; Smyslov-Botvinnik, match 1958 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 h2h4 h7h5 f2f3 o-o d1d2 d6d5 d4c6 b7c6 e4e5 f6e8 f3f4 f7f6 o-o-o f6e5 f4e5 g7e5 g2g4 c8g4 e2g4 h5g4 h4h5 g6g5 ! # col. 42d; Van den Burg-Rajkovic, Orebro 1966 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 d4b3 o-o f2f4 c6a5 g2g4 b7b6 g4g5 f6d7 o-o c8b7 e2d3 a8c8 b3a5 b6a5 d1e1 d7c5 f4f5 g7e5 e1h4 e7e6 f5f6 h7h5 d3e2 g8h7 e2h5 f8h8 ! # col. 43f e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 d4b3 o-o f2f4 c6a5 g2g4 c8e6 g4g5 f6d7 e3d4 f7f6 h2h4 f6g5 d4g7 g8g7 b3d4 e6g8 f4f5 d8b6 ! # col. 44 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 o-o b8c6 d4b3 o-o f2f4 b7b5 e2f3 b5b4 c3d5 f6d5 e4d5 c6a5 b3a5 d8a5 f1e1 f8e8 ! # col. 45i; Smyslov-Korchnoi, Moscow 1960 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 d4b3 b8c6 g2g4 b7b6 f2f4 c8b7 e2f3 o-o h2h4 a7a5 a2a4 c6b4 h4h5 d6d5 e4e5 f6g4 b3d4 g4h6 h5g6 f7g6 d4e6 d8d7 e6f8 a8f8 c3b5 d5d4 ! # col. 46 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 f2f3 e7e5 f1b5 c8d7 b5d7 b8d7 d4f5 d6d5 e4d5 d8a5 b1c3 d7b6 ! # col. 47h; Schweber-Najdorf, Buenos Aires 1970 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 d1d4 b8c6 f1b5 c8d7 b5c6 d7c6 c2c4 g8f6 b1c3 e7e6 c1g5 f8e7 o-o o-o f1e1 h7h6 g5h4 a7a6 a1d1 d8a5 d4d2 a5b6 f3d4 a8c8 e1e3 f8e8 ! # col. 48i e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 d1d4 a7a6 c1e3 g8f6 b1c3 b8c6 d4b6 d8b6 e3b6 g7g6 o-o-o f8h6 c1b1 o-o f3d4 c8d7 f2f3 c6e5 d4b3 f8c8 b3a5 d7c6 c3d5 c6d5 e4d5 f6d7 b6d4 b7b6 ! # col. 49m; Fischer-Korchnoi, Buenos-Aires 1960 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 c2c3 d4c3 b1c3 b8c6 f1c4 e7e6 o-o a7a6 d1e2 g8f6 f1d1 d8c7 c1g5 f8e7 a1c1 o-o c4b3 h7h6 g5f4 e6e5 f4e3 c7d8 c3d5 f6d5 b3d5 c8d7 ! # col. 50 e2e4 c7c5 g1f3 d7d6 d2d4 g8f6 d4c5 f6e4 c5d6 e7e6 d1d3 e4d6 b1c3 b8c6 c1f4 f7f6 o-o-o e6e5 c3b5 ! # col. 51c; Pfeiffer-Kottnauer, Helsinki 1952 e2e4 c7c5 g1f3 d7d6 c2c3 g8f6 f1d3 b8c6 d3c2 c8g4 h2h3 g4h5 d2d3 d6d5 d1e2 e7e6 b1d2 f8e7 d2f1 d8a5 ! # col. 52d; Brasket-Evans, U.S. Open Chp. 1960 e2e4 c7c5 g1f3 d7d6 c2c3 g8f6 d2d3 g7g6 g2g3 f8g7 b1d2 o-o f1g2 e7e5 o-o b8c6 a2a4 h7h6 d2b1 d8a5 ! # col. 53h; Ciocaltea-Fischer, Varna 1962 e2e4 c7c5 g1f3 d7d6 g2g3 g7g6 f1g2 f8g7 o-o b8c6 c2c3 e7e5 d2d3 g8e7 f3h4 o-o f2f4 e5f4 g3f4 f7f5 b1d2 g8h8 d2f3 ! # col. 54k; Tarjan-Mednis, U.S. Chp. 1973 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 e7e6 f1e2 g7g6 d4b3 ! e2e4 c7c5 g1f3 d7d6 b1c3 g8f6 e4e5 d6e5 f3e5 a7a6 f1e2 e7e6 o-o d8c7 e5c4 b7b5 c4e3 f8d6 h2h3 b8c6 a2a4 b5b4 c3b1 c8b7 d2d3 c6d4 b1d2 o-o d2f3 d4e2 d1e2 f8e8 e3c4 e6e5 f3g5 e5e4 c4d6 c7d6 g5e4 f6e4 d3e4 b7e4 c1e3 d6c6 ! # col. 55o; Medina-Pomar, Santander 1947 e2e4 c7c5 g1f3 d7d6 b2b4 c5b4 d2d4 g8f6 f1d3 d6d5 b1d2 d5e4 d2e4 b8d7 e4g5 d8c7 c2c4 h7h6 g5h3 g7g5 h3g1 f8g7 g1e2 e7e5 e2g3 e5e4 d1e2 o-o ! # col. 56e; del Corral-Benko, Mallorca 1968 e2e4 c7c5 g1f3 d7d6 f1b5 c8d7 b5d7 d8d7 o-o b8c6 f1e1 g8f6 c2c3 e7e6 d2d3 f8e7 a2a4 o-o b1d2 d7c7 ! # col. 57g; Radovich-Lombardy, Leipzig 1960 e2e4 c7c5 g1f3 d7d6 f1b5 b8c6 o-o a7a6 b5c6 b7c6 d2d4 c5d4 d1d4 e7e5 d4d3 f7f6 c2c4 c8e6 b1c3 d8c7 ! # col. 58j; Gurgenidze-Osnos, Alma Ata 1969 e2e4 c7c5 g1f3 b8c6 f1b5 e7e6 b1c3 g8e7 o-o a7a6 b5c6 e7c6 d2d4 c5d4 f3d4 d7d6 d4c6 b7c6 d1g4 g7g6 e4e5 d6d5 c1g5 f8e7 ! # col. 59m e2e4 c7c5 g1f3 b8c6 f1b5 g7g6 o-o f8g7 c2c3 g8f6 f1e1 o-o d2d4 c5d4 c3d4 d7d5 e4e5 f6e4 b1c3 e4c3 b2c3 c6a5 c1g5 c8f5 f3d2 f8e8 ! # col. 60o e2e4 c7c5 g1f3 b8c6 f1b5 g7g6 o-o f8g7 f1e1 e7e5 f1e1 o-o d2d4 c5d4 c3d4 d7d5 e4e5 f6e4 b1c3 e4c3 b2c3 c6a5 c1g5 c8f5 f3d2 f8e8 ! # col. 61c; Barczay-Szilagyi, Hungarian Chp. 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 g5f6 g7f6 d4b3 h8g8 g2g3 f6f5 d1d2 f8g7 e4f5 d7f5 f1g2 d8d7 o-o g7c3 b2c3 f5h3 g2h3 d7h3 ! # col. 62e e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d4b3 h7h6 g5h4 a8c8 f1e2 g7g5 h4g3 h6h5 h2h4 g5g4 g3f4 c6e5 d1d4 e5g6 f4g5 f8g7 o-o ! # col. 63g; Matulovic-Masic, Sombor 1968 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 f2f4 d8b6 d4b3 f6g4 d1e2 c6d4 c3d5 d4e2 d5b6 a7b6 e1e2 h7h6 g5h4 g7g5 h4g3 g5f4 g3f4 f8g7 c2c3 d7c6 ! # col. 64j; Liberzo-Stein, USSR Chp. 1969-70. Complete game (draw). e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d3 c6d4 d3d4 d8a5 f2f4 e7e5 d4d3 f8e7 o-o-o d7c6 c1b1 e5f4 g5f4 o-o f1e2 f8e8 e2f3 e7f8 c3d5 f6d7 d3d2 a5d2 d1d2 a8c8 h1d1 d7e5 b2b3 ! # col. 65m; Bronstein-Stein, USSR 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d3 c6d4 d3d4 d8a5 f1e2 e7e5 d4d3 a5c7 e2g4 f8e7 g5f6 e7f6 o-o-o f6e7 c3b5 d7b5 d3b5 c7c6 b5d5 c6d5 d1d5 ! # col. 66b; Benko-R. Byrne, US Open Chp. 1968 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 g5d2 a7a6 f1c4 a5c5 d4c5 c8c5 c4b3 g7g6 d2e3 c5c8 e3d4 f8g7 c3d5 f6h5 d4g7 h5g7 e4e5 c8c6 d5b4 c6b6 ! # col. 66b alternate; Polgar-Nagy, Hungarian Chp. 1972 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 g5d2 e7e5 d4d3 a7a6 c1b1 h7h6 f2f3 a5c7 g2g3 f8e7 h2h4 b7b5 ! # col. 67c; Suetin-Gheorghiu, Hastings 1967/8. Draw. e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 g5e3 a7a6 f2f3 e7e6 d4b6 a5b6 e3b6 d7c6 f1c4 c6e4 c4e6 f7e6 c3e4 f6e4 f3e4 f8e7 h1f1 e7g5 c1b1 e8e7 c2c3 h8f8 b1c2 f8f1 d1f1 c8f8 ! # col. 68d e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 f2f4 e7e6 e4e5 d6e5 f4e5 c8c3 g5d2 a5a2 d2c3 g7g6 ! # col. 69fA1; Janosevic-Larsen, Belgrade 1964 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 f2f4 c8c3 b2c3 e7e5 d4b4 a5b4 c3b4 f6e4 f1c4 b7b5 c4d5 e4c3 f4e5 h7h6 g5h4 g7g5 h4g3 c3e2 c1b2 e2g3 h2g3 f8g7 ! # col. 70g; Bednarski-Simagin, Polanica Zdroj 1968 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 c8c3 d4c3 f6e4 c3e3 e4g5 e3g5 d8b6 f1c4 e7e6 g5g3 g7g6 c4b3 f8e7 h2h4 h7h5 h1e1 b6b4 g3e3 a7a5 e3d4 ! # col. 71d e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o c6d4 d2d4 o-o f2f4 h7h6 g5h4 d8a5 f1c4 e6e5 f4e5 d6e5 d4d3 a5c5 h4f6 e7f6 ! # col. 72g e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o c6d4 d2d4 o-o f2f4 d8a5 f1c4 c8d7 c4b3 d7c6 h1f1 b7b5 g5f6 e7f6 d4d6 f6c3 d6c6 a8c8 c6d7 c8d8 d7e7 c3d2 c1b1 d2f4 d1d8 a5d8 ! # col. 73i e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o d4b3 d8b6 f2f3 a7a6 g2g4 f8d8 g5e3 b6c7 h2h4 b7b5 g4g5 f6d7 g5g6 f7g6 h4h5 g6h5 h1h5 d7f6 h5g5 c6e5 d2g2 e7f8 f3f4 e5c4 f1c4 b5c4 b3d4 a8b8 d1g1 b8b7 ! # col. 74; Tal-Larsen, match 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o d4b3 a7a6 g5f6 g7f6 f1e2 g8h8 e2h5 c8d7 f2f4 b7b5 c1b1 ! # col. 75k e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o d4b5 d8a5 g5f6 e7f6 b5d6 f8d8 f2f4 e6e5 d2d5 a5c7 f4f5 c6d4 d6b5 c7a5 d5c4 c8f5 b2b4 a5a6 ! # col. 76b; Spasski-Larsen, Santa Monica 1966 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o f2f4 h7h6 g5h4 e6e5 d4f5 c8f5 e4f5 d8a5 c1b1 a8d8 h4f6 e7f6 c3d5 a5d2 d5f6 g7f6 d1d2 e5f4 ! # col. 77e; Kujpers-Minev, Halle 1967 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o f2f4 d6d5 e4e5 f6d7 h2h4 d7b6 d2e3 c8d7 g5e7 d8e7 h4h5 c6a5 d4b3 a5c4 e3d4 f8c8 c1b1 a7a5 f4f5 a5a4 f5f6 e7f8 h1h3 c4b2 b1b2 b6c4 f1c4 c8c4 d4d2 ! # col. 78h e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 a7a6 o-o-o c8d7 f2f4 h7h6 g5h4 f6e4 d2e1 e4f6 d4f5 d8a5 f5d6 f8d6 d1d6 o-o-o d6d1 e6e5 f1c4 e5f4 c3e4 d7e6 c4e6 f7e6 e4d6 c8b8 e1e6 h8f8 ! # col. 79j; O'Kelly-Simagin corr. 1964 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 a7a6 o-o-o h7h6 g5h4 f6e4 d2f4 e4g5 d4c6 b7c6 f4a4 d8b6 f2f4 g5h7 f4f5 f8e7 c3e4 a8b8 a4a3 b6b5 ! # col. 80k; Di Camillo-R. Byrne, US Open Chp. 1958 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 h7h6 g5f6 g7f6 o-o-o a7a6 f2f4 c8d7 f1e2 h6h5 c1b1 d8b6 d4b3 o-o-o h1f1 f8e7 c3a4 b6a7 c2c4 c6d4 ! # col. 81b e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d4c6 b7c6 e4e5 d6e5 d1f3 f8e7 f3c6 c8d7 c6f3 e5e4 c3e4 f6e4 g5e7 d8a5 ! # col. 82e e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d3 f8e7 a1d1 o-o f1e2 c8d7 o-o c6d4 d3d4 d7c6 g1h1 d8a5 f2f4 f8e8 ! # col. 83 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 h2h3 g7g6 c1e3 f8g7 d1d2 o-o o-o-o c6d4 e3d4 d8a5 c1b1 e7e5 d4e3 c8e6 ! # BAD! -- col. 84i; Karaklajic-Taimanov, Yugoslavia-USSR, match 1956 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1e3 f6g4 f1b5 g4e3 f2e3 c8d7 o-o e7e6 5c6 b7c6 e4e5 f8e7 d1h5 o-o e5d6 e7d6 c3e4 d6e7 a1d1 d8c7 d4b3 h7h6 ! # col. 85 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 d4e2 e7e6 g2g3 d6d5 e4d5 f6d5 f1g2 d5c3 d1d8 e8d8 e2c3 c8d7 c1d2 f8e7 ! # col. 86c; Carcia-Pomar, Havana 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e5 d4e2 c8e6 c4e6 f7e6 o-o f8e7 f2f4 o-o e2g3 e5f4 f1f4 d8b6 g1h1 a8d8 b2b3 d6d5 e4d5 f6d5 f4f8 e7f8 c3d5 d8d5 d1e1 c6d4 c1e3 f8c5 ! # col. 87 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 d8b6 d4b3 e7e6 o-o f8e7 c1e3 b6c7 f2f4 o-o c4d3 a7a6 d1f3 ! # col. 88 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e6 c1e3 d8c7 d1e2 a7a6 c4b3 c6a5 g2g4 b7b5 g4g5 f6d7 o-o-o d7c5 ! # col. 89mA; Spasjevic-Ostojic, Belgrade 1966 (draw) e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e6 c1e3 f8e7 d1e2 a7a6 o-o-o o-o c4b3 d8c7 g2g4 c6d4 d1d4 e6e5 d4c4 c7d8 g4g5 f6e8 h1g1 c8d7 c3d5 d7b5 e3b6 d8d7 e2g4 e7d8 g4d7 b5d7 c4c3 d7e6 b6d8 a8d8 d5e3 d8d7 b3a4 d7c7 ! # col. 90o; Bogdanovic-Shamkovich, Sarajevo 1963 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e6 c1e3 f8e7 d1e2 o-o o-o-o c6d4 e3d4 d8a5 e4e5 d6e5 d4e5 b7b6 c3b5 c8a6 e5c3 a5a4 d1d4 a6b5 c4b5 a4a2 h1d1 f8d8 d4a4 d8d1 e2d1 a2d5 d1d5 f6d5 c3d4 e7g5 c1b1 h7h5 b5c6 a8d8 a4a7 d5b4 c6d7 b4c6 ! # Queen's Catalan, col. 1c; Kramer-Fichtl, Varna Olympics 1962 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 b1c3 c7c6 b2b3 b7b6 c1b2 c8b7 d1c2 a8c8 a1d1 d8c7 e2e4 d5e4 c3e4 f6e4 c2e4 c6c5 d4d5 e7f6 e4c2 e6d5 c4d5 f6b2 c2b2 c8d8 ! # col. 2f d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 b1c3 d5c4 e2e4 c7c6 a2a4 a7a5 d1e2 d7b6 f1d1 e7b4 f3e5 d8e7 c1e3 c8d7 e5c4 b6c4 e2c4 e6e5 d4e5 f6g4 ! # col. 3i; Geller-Medina, Beverwijk 1965 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 d1c2 b7b6 c4d5 f6d5 b1c3 c8b7 c3d5 b7d5 e2e4 d5b7 f1d1 c7c5 d4d5 e6d5 e4d5 e7f6 h2h4 h7h6 ! # col. 4k; Geller-Bisguier, Bled 1961 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 d1c2 c7c6 b2b3 b7b6 c1b2 c8b7 b1c3 a8c8 a1d1 b6b5 c4c5 b5b4 c3b1 f6e4 f3e1 f7f5 e1d3 a7a5 d3f4 f8f6 f2f3 e4g5 ! # col. 5m; Benko-Pachman, Budapest 1948 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 d1c2 c7c6 b1d2 b7b6 e2e4 c8b7 b2b3 a8c8 f1d1 d8c7 c1b2 f8d8 a1c1 c7b8 c2b1 a7a5 f3e5 b8a8 ! # col. 6 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o c7c6 b1c3 b7b6 f3e5 a7a5 d1c2 c8a6 f1d1 b6b5 ! # col. 7d; Evans-Poschel, US Jr. Chp. 1947 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 c7c5 c4d5 f6d5 f1g2 c5d4 o-o f8c5 f3d4 o-o a2a3 b8c6 d4c6 b7c6 b2b4 c5e7 c1b2 e7f6 d1c2 f6b2 c2b2 a7a5 ! # col. 8g; O'Kelly-Euwe, New York 1951 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 d5c4 f1g2 c7c5 o-o b8c6 d1a4 f6d7 d4c5 f8c5 a4c4 o-o b1c3 a7a6 c3e4 c5e7 c1e3 d7b6 c4b3 b6d5 f1d1 d8c7 ! # col. 9 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 d5c4 f1g2 b7b5 a2a4 c7c6 o-o c8b7 f3e5 d8c8 b2b3 c4b3 d1b3 b5b4 a4a5 f6d7 ! # col. 10l; Keres-Korchnoi, Curacao 1962 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 d5c4 d1a4 b8d7 f1g2 a7a6 a4c4 c7c5 d4c5 f8c5 o-o b7b5 c4h4 c8b7 b1d2 c5e7 d2b3 a8c8 h4d4 o-o c1d2 d7c5 ! # col. -- Accelerated Catalan d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 b8d7 b1d2 c7c6 a4c4 e6e5 g1f3 d7b6 c4d3 e5d4 f3d4 f8e7 o-o o-o ! # col. 12e; Muller-Ratzek, Vienna 1951 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 c8d7 a4c4 d7c6 g1f3 c6d5 c4d3 c7c5 b1c3 d5c6 o-o b8d7 f1d1 d8b6 e2e4 c5d4 f3d4 f8c5 d4c6 c5f2 g1f1 b7c6 c3a4 b6a5 f1f2 a5a4 d3d6 ! # col. 13f; Smyslov-Kere, USSR Chp. 1948 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 c8d7 a4c4 d7c6 g1f3 b8d7 b1c3 d7b6 c4d3 f8b4 o-o o-o f1d1 h7h6 c1d2 d8e7 a2a3 b4c3 d3c3 f8d8 ! # col. 14g d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 b1c3 d5c4 d1a4 b8c6 f1g2 c8d7 a4c4 c6b4 c4b3 c7c5 g1f3 c5d4 f3d4 e6e5 d4f3 d7e6 b3a4 e6d7 ! # col. 15; Stoltz-Vidmar, Groningen 1946 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 b1c3 f8e7 f1g2 o-o g1f3 d5c4 d1a4 a7a6 a4c4 b7b5 c4d3 c8b7 ! # col. 16 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 b1d2 c7c5 d4c5 f8c5 f1g2 b8c6 g1f3 o-o o-o a7a5 c4d5 e6d5 d2b3 c5b6 ! # col. 17d; Mikenas-Aronin, USSR Chp. 1963 d2d4 d7d5 c2c4 e7e6 g2g3 c7c5 c4d5 e6d5 g1f3 b8c6 f1g2 g8f6 o-o f8e7 d4c5 e7c5 b1d2 o-o d2b3 c5b6 b3d4 f8e8 b2b3 c6d4 f3d4 b6d4 d1d4 e8e2 ! # col. 18e d2d4 d7d5 c2c4 e7e6 g2g3 d5c4 d1a4 c8d7 a4c4 c7c5 d4c5 d7c6 g1f3 b8d7 c1e3 g8f6 f1g2 d8c7 o-o c6d5 c4a4 f8c5 e3c5 c7c5 b1c3 d5c6 ! # col. 19 d2d4 d7d5 c2c4 e7e6 g2g3 f8b4 c1d2 b4d2 d1d2 g8f6 g1f3 o-o f1g2 d8e7 o-o b8c6 f1c1 ! # col. 20 d2d4 d7d5 c2c4 e7e6 g2g3 f8b4 c1d2 b4e7 f1g2 g8f6 g1f3 o-o d1b3 b7b6 c4d5 e6d5 b1c3 c8b7 o-o ! # col. 21 d2d4 g8f6 c2c4 e7e6 g2g3 e6e5 g1f3 e5d4 f3d4 d7d5 f1g2 d5c4 d1a4 c7c6 a4c4 f8e7 o-o o-o f1d1 ! # col. 22 d2d4 g8f6 c2c4 e7e6 g2g3 c7c5 g1f3 c5d4 f3d4 d7d5 f1g2 e6e5 d4f3 d5d4 o-o b8c6 e2e3 f8e7 e3d4 e5d4 ! # col. 23g d2d4 g8f6 c2c4 e7e6 g2g3 c7c5 g1f3 c5d4 f3d4 b8c6 f1g2 d8b6 d4c2 f8c5 e2e3 o-o b1c3 b6a6 d1d2 f8d8 a2a3 d7d5 b2b4 d5d4 c3e4 ! # col. 24j; Smyslov-Petrosian, Moscow 1967 d2d4 g8f6 c2c4 e7e6 g2g3 f8b4 b1d2 c7c5 d4c5 b4c5 f1g2 b8c6 g1f3 b7b6 o-o c8b7 a2a3 o-o b2b4 c5e7 c1b2 a8c8 d1b1 ! # col. 25 d2d4 g8f6 c2c4 e7e6 g2g3 f8b4 c1d2 b4d2 d1d2 f6e4 d2c2 f7f5 f2f3 e4f6 e2e4 f5e4 f3e4 e6e5 ! # Alternate openings leading to the Catalan, line C g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 d2d4 ! # line D c2c4 g8f6 d2d4 e7e6 g2g3 d7d5 ! # line E d2d4 g8f6 c2c4 e7e6 g2g3 d7d5 ! # The Reti Opening, col. 1c; Muller-Lilenthal, Budapest 1933 g1f3 d7d5 c2c4 c7c6 b2b3 g8f6 g2g3 c8f5 c1b2 e7e6 f1g2 b8d7 o-o f8d6 d2d3 o-o b1c3 d8e7 f1e1 e6e5 c4d5 c6d5 e2e4 d5e4 d3e4 f5g6 ! # col. 2g; Bilek-Geller, Sousse 1967 g1f3 d7d5 c2c4 c7c6 b2b3 g8f6 g2g3 c8g4 f1g2 e7e6 c1b2 b8d7 o-o f8e7 d2d3 o-o b1d2 a7a5 a2a3 d8b6 d1c2 h7h6 b2c3 f8c8 f1e1 b6d8 e2e4 d8f8 ! # col. 3k; Botvinnik-Fine, Nottingham 1936 g1f3 d7d5 c2c4 d5c4 b1a3 c7c5 a3c4 b8c6 g2g3 e7e5 f1g2 f7f6 b2b3 g8e7 c1b2 e7d5 o-o f8e7 f3h4 o-o d1b1 f8f7 h4f5 c8e6 f2f4 e5f4 g3f4 d5b6 g2e4 e6c4 ! # col. 4n; Katetov-Alekhin, Prague 1943 g1f3 d7d5 c2c4 d5d4 e2e3 b8c6 e3d4 c6d4 f3d4 d8d4 b1c3 e7e5 d2d3 f8c5 c1e3 d4d6 c3b5 d6e7 e3c5 e7c5 d3d4 e5d4 d1d4 c5d4 b5d4 c8g4 ! # col. 5o g1f3 d7d5 c2c4 d5d4 e2e3 c7c5 e3d4 c5d4 g2g3 b8c6 f1g2 g7g6 d2d3 f8g7 o-o e7e5 f1e1 f7f6 b2b4 c6b4 d1a4 b4c6 f3d4 d8d4 g2c6 c8d7 ! # col. 6 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 f8e7 o-o o-o b2b3 c7c5 c4d5 f6d5 c1b2 b8c6 d2d4 d5b4 a2a3 b4a6 d4c5 d8d1 ! # col. 7 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 f8e7 b1c3 o-o b2b3 c7c5 c1b2 b8c6 c4d5 e6d5 a1c1 c8e6 o-o a8c8 d2d4 f8e8 ! # col. 8g; Kashdan-Horowitz, New York 1931 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 b8d7 b2b3 c7c6 o-o f8d6 c1b2 o-o b1c3 b7b6 d2d3 c8b7 e2e4 d5e4 d3e4 d8c7 d1e2 f8d8 f1d1 ! # col. 9h; Abroshin-Krykov corr. 1960 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 c8d7 a4c4 d7c6 o-o c6d5 c4a4 d8d7 a4c2 b8c6 b1c3 d5f3 g2f3 c6d4 c2d3 c7c6 ! # col. 10m; Teti-Tartakover, Semmering 1926 g1f3 d7d5 c2c4 e7e6 g2g3 d5c4 d1a4 c8d7 a4c4 c7c5 f3e5 b8c6 e5d7 d8d7 f1g2 g8f6 d2d3 f8e7 o-o c6d4 b1c3 a8d8 a2a4 f6d5 ! # Barcza System, col. 11 g1f3 d7d5 g2g3 g8f6 f1g2 c8f5 o-o c7c6 c2c4 d5c4 b1a3 e7e5 a3c4 e5e4 f3e1 f8c5 d2d3 o-o c1e3 b8d7 ! # col. 12d; Benko-Petrosian, Curacao 1962 g1f3 d7d5 g2g3 g8f6 f1g2 c8f5 o-o c7c6 d2d3 b8d7 b1d2 h7h6 d1e1 e7e6 e2e4 f5h7 e1e2 f8e7 e4e5 f6g8 d2b3 e7f8 c2c4 g8e7 b3d4 e7f5 d4f5 h7f5 c4d5 c6d5 d3d4 a7a5 c1e3 f8e7 f1c1 o-o ! # col. 13f; Bronstein-O'Kelly, Beverwijk 1963 g1f3 d7d5 g2g3 g8f6 f1g2 c7c5 o-o e7e6 d2d3 b8c6 b1d2 f8e7 e2e4 o-o f1e1 d8c7 e4e5 f6d7 d1e2 b7b5 h2h4 a7a5 d2f1 c8a6 f1h2 c6b4 h4h5 ! # col. 14i; Evans-Olafsson, Dallas 1957 g1f3 d7d5 g2g3 g8f6 f1g2 g7g6 o-o f8g7 d2d3 o-o b1d2 b8c6 e2e4 e7e5 c2c3 a7a5 f1e1 d5e4 d3e4 f6d7 d1e2 b7b6 d2c4 c8a6 g2f1 d8f6 ! # col. 15 g1f3 d7d5 g2g3 g8f6 f1g2 g7g6 d2d4 f8g7 o-o c7c6 b2b3 b8d7 c1b2 e7e5 d4e5 f6g4 b1d2 d7e5 f3e5 g4e5 ! # col. 16d; Larsen-Mecking, Mallorca 1969 g1f3 d7d5 g2g3 c7c5 f1g2 b8c6 o-o e7e6 d2d3 g7g6 b1c3 f8g7 a2a3 g8e7 a1b1 o-o c1d2 a8b8 b2b4 c5b4 a3b4 b7b5 e2e4 a7a5 ! # col. 17h; Benko-Bisguier, US Chp. 1963 g1f3 d7d5 g2g3 c8g4 f1g2 b8d7 c2c4 c7c6 c4d5 c6d5 b1c3 e7e6 d1b3 d8b6 b3b6 d7b6 d2d3 a8c8 c1e3 f8d6 c3b5 d6b8 o-o g8e7 f1c1 c8c1 a1c1 e7c6 f3d4 e8d7 ! # col. 18j; Keene-Basman, Hastings 1966-7 g1f3 d7d5 g2g3 c8g4 f1g2 g8f6 c2c4 c7c6 c4d5 g4f3 g2f3 c6d5 d1b3 d8d7 b1c3 e7e6 o-o b8c6 f3g2 f8e7 d2d3 o-o ! # col. 19k g1f3 d7d5 g2g3 c8g4 f1g2 g8f6 c2c4 c7c6 d1c2 e7e6 o-o f8e7 b2b3 b8d7 c1b2 o-o d2d3 a7a5 b1d2 a5a4 b2c3 a4b3 a2b3 d8b6 ! # col. 20m g1f3 d7d5 g2g3 c8g4 f1g2 g8f6 o-o c7c6 c2c4 e7e6 c4d5 g4f3 g2f3 c6d5 b1c3 b8c6 d2d3 f8e7 f3g2 ! # col. 21b; Savon-Aronin, USSR 1963 g1f3 d7d5 g2g3 b8c6 d2d4 c8f5 f1g2 c6b4 b1a3 e7e6 o-o g8f6 f3h4 f5g4 c2c4 c7c6 a3c2 b4c2 d1c2 f8e7 h2h3 g4h5 f2f3 h5g6 h4g6 h7g6 ! # col. 22d; Fischer-Ivkov, Santa Monica 1966 g1f3 d7d5 g2g3 e7e6 f1g2 c7c5 o-o b8c6 d2d3 f8d6 e2e4 g8e7 b1d2 o-o f3h4 b7b6 f2f4 d5e4 d3e4 c8a6 f1e1 c5c4 c2c3 ! # col. 23 g1f3 d7d5 g2g3 b8d7 c2c4 e7e6 f1g2 g8f6 b1c3 f8e7 o-o o-o d2d3 c7c5 c4d5 e6d5 c1g5 b7b6 ! # col. 24g; Benko-Bisguier, US Chp. 1976-7 g1f3 d7d5 g2g3 g8f6 f1g2 b7b6 c2c4 e7e6 c4d5 e6d5 o-o f8d6 d2d4 o-o b1c3 c7c6 f3e5 c8b7 c1g5 h7h6 g5f6 d8f6 f2f4 f8d8 e2e4 ! # col. 25; Rabinovich-Rauser, Moscow 1934 g1f3 d7d5 b2b3 c8g4 c1b2 b8d7 c2c4 e7e6 e2e3 g8f6 f1e2 c7c6 f3d4 g4e2 d1e2 f8d6 f2f4 o-o ! # col. 26e; Evans-Najdorf, Dallas 1967 g1f3 c7c5 g2g3 b8c6 f1g2 g7g6 o-o f8g7 e2e4 d7d6 c2c3 e7e5 d2d3 g8h6 f3e1 o-o f2f4 e5f4 c1f4 h6g4 b1a3 g4e5 g1h1 d8b6 d1d2 c8e6 ! # col. 27h; Van den Pol-Barden, Holland v. England 1960 g1f3 f7f5 g2g3 g8f6 f1g2 g7g6 d2d3 f8g7 b1d2 d7d6 e2e4 e7e5 d2c4 o-o e4f5 g6f5 c1e3 b8c6 d3d4 e5e4 ! # col. 28m; Gufeld-Bokuchava, USSR Chp. prelims 1968 g1f3 f7f5 g2g3 g8f6 f1g2 e7e6 c2c4 f8e7 o-o o-o d2d3 d7d6 b1c3 b8c6 a1b1 a7a5 a2a3 d8e8 b2b4 a5b4 a3b4 e6e5 ! # col. 29p; Lundin-Tartakover, Groningen 1946 g1f3 f7f5 g2g3 g8f6 f1g2 e7e6 c2c4 f8e7 o-o o-o b2b3 c7c5 c1b2 b8c6 b1c3 e6e5 e2e3 d7d6 d2d4 ! # col. 30 g1f3 g7g6 g2g3 f8g7 f1g2 e7e5 d2d3 b8c6 e2e4 d7d6 b1c3 g8e7 c1e3 o-o d1d2 c6d4 o-o ! # King's Indian attack, col. 31a g1f3 g8f6 g2g3 b7b5 h2h4 b5b4 d2d3 c8b7 e2e4 d7d6 f1g2 b8d7 o-o e7e6 h4h5 a8b8 b1d2 f8e7 d2c4 o-o ! # col. 32d g1f3 g8f6 g2g3 g7g6 b2b4 f8g7 c1b2 o-o f1g2 d7d5 o-o c8g4 c2c4 c7c6 b1a3 b8d7 a1c1 a7a5 b4b5 a5a4 d2d3 e7e5 ! # col. 33e; Olafsson-Kavalek, Wijik aan Zee 1969 g1f3 g8f6 g2g3 g7g6 b2b3 f8g7 c1b2 o-o f1g2 d7d6 d2d4 f6d7 b1c3 e7e5 d1d2 f8e8 d4e5 d7e5 f3e5 g7e5 ! # col. 34h g1f3 g8f6 g2g3 g7g6 c2c4 d7d6 f1g2 f8g7 o-o o-o b1c3 b8d7 d2d3 e7e5 c1d2 d7c5 b2b4 c5e6 a1b1 f6e8 a2a4 c7c6 a4a5 e8c7 ! # col. 35 g1f3 g8f6 c2c4 g7g6 b2b3 f8g7 c1b2 o-o e2e3 d7d6 f1e2 e7e5 o-o f8e8 b1c3 b8d7 d2d3 c7c6 ! # col. 36d g1f3 g8f6 c2c4 g7g6 b1c3 d7d5 c4d5 f6d5 d1a4 c8d7 a4b3 d5b6 d2d4 f8g7 c1f4 d7e6 b3c2 b8c6 a1d1 ! # col. 37f g1f3 g8f6 c2c4 b7b6 g2g3 c8b7 f1g2 c7c5 o-o g7g6 b2b3 f8g7 c1b2 o-o b1c3 d7d5 c3d5 f6d5 b2g7 g8g7 c4d5 d8d5 d2d4 b8a6 ! # col. 38h; Geller-Kholmov, Moscow 1969 g1f3 g8f6 c2c4 b7b6 g2g3 c8b7 f1g2 e7e6 o-o f8e7 b2b3 o-o c1b2 d7d5 e2e3 b8d7 b1c3 f6e4 c4d5 e4c3 b2c3 e6d5 ! # col. 39 g1f3 g8f6 b2b3 g7g6 c2c4 f8g7 c1b2 o-o g2g3 c7c5 f1g2 b7b6 o-o c8b7 b1c3 e7e6 a1b1 d8e7 ! # col. 40o; Lombardy-Burger, US Chp. 1969-70 g1f3 g8f6 b2b3 d7d5 c1b2 e7e6 e2e3 f8e7 c2c4 o-o d2d4 b7b6 f1d3 c8b7 o-o b8d7 b1d2 c7c5 d1e2 f6e4 a1c1 a8c8 ! ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее`§4аЌЪ2*o#Н°r"mУн#Й96$m,Jg"КJfь`фB™&y96J“g2([ Afф Rfо Gfи Vfв =fЬBЈ$KXЉ I& –ЉYѓдѓ`L IСьЂBX" $Hv ь§4&|ЂЧНSmR‹JfІ‰gB БRѓB`  f Rѓ БB" `ШУ`Ф&H—НJ№9Ff #ь 9FЧщ9F" ТЌЃяяяю.A/ / Bg?<Jщ°ЮNA№°ЮЯь /996/ /ќО/<t?< ?<щ°ЮNM№°ЮPЏ#А°VN№‹0?N№ѓ€/9°V?< ?<щ°ЮNM№°ЮPЏ /??<Lщ°ЮNAHзЂЂ0/@ря @`яf( oR€СР f/H oaяfNhXђLЯPЏNsLЯ/y°VяьNпяьNV/<:EBD2HБ пЂбЃ,ЬЃIъъN”$GщЌ–Hx Ђ/ N“PЏ @Сь В0HА"гЃеЂ$AХАСЖ5‚€N”$N”-@яьHx Ђ/ N“PЏ @Сь ВСЖvзЄФ®яь%‚€RD D?oљRG Go‚RE EoяtN№v~Jy;vgN№uц`J№Г~fN№ЃдB§HxB§B§N№vДN№4B§N№ЊH#А7rHxN№tвN№wЮLо<ьяФN^Nuabcdefgh12345678 pnbrqko-oo-o-oNVHз8<6. 8.0.Aщ°Z2HБEщ;†гЃ2rIъя°±ИGщ:ж2sKъя§qШCи4HВг‚4r(ІИEи6s(іШKщ°bGщ<Є6sIъяxіИQRB(B-J@g¶DlHzя`/ ` Hzя\Hy°bN№Њ,0HАAщ<ЄгЂ pf щ°Z°j`0HАAщ<ЄгЂ0pCъяр°j0HАAщ<*гЂ pgCщ°kј:Aщ°\XPB)`H0HАAщ<ЄгЂ pfAщ°kщ°]B`$Cщ°kAщ°ZђhhhB)Lо<ядN^NuNVHз<<6. 8.By°–0HАAщ§<гЂ3р°: Dg3ГДЋJy;vgh4HВAщГ^ еЂGщГZг‚2s(EщЋHi/0N’PЏ @ђщБN#ИГz2s(// N№Ќ–PЏ297zHБгЃ*AHm/N’PЏС№Гz` #щГ~Гz Df #ьзГzJyДжo( y9Z2h0yДтђщ9.±Йl*9Дљ›№Гz`J№Гznz#ЕГzB№жN№SlHy°04C/ N№:L:9°0DE3ЕБN№ЂтPЏJyДжfpN№n/ N№rLBy°*XЏ yя°*n CщДъ0y°*B0Ry°* yя°*oж3ьяяД’3ьяяГjByГr DgBy<By°* y°*nLIщ±bGщ5ЖEщ6Cщ6>Aщ6z09°*HАгЂBpBqBrBsBtRy°* y°*oТ3ьЬШ°,3ь#(°.By°.6nR№Дц0.я¬HАAщ§<гЂ=pяЄ0G2yДжV‰іИm/. N№6€XЏ`*n BU*n UoBЂ`:n/ :n/ :K/ :G/ :nяЄ/ :nя¬/ N№І=@яёЮь @#(nЬ¶ьopJyДоfb4HВAщ=¬"гЃJpfNJy6єgа0.яё°noФ°nlМ GoДAщ°њJpg¶Jpюg®2K0yДж‘ВR€±ЙfњRK`–6.яё¶nm>JyДоf~2HБAщ=¬ гЂJpfj0.я¬HАAщ=ЄгЂ po 0yДжR€±БgH6.яё¶nnB2G0yДжX€±Йo4 Go. Aщ°вгЂJpgCияьJqgKщ°Ю60¶ug6|ByГr¶ьodJy ѕg\ GoVHnяёHnHn:K/ :nя¬/ N№$0HАгЂ*n;№ГrBuЮь n±аf0.яё`r6.¶no0`b yДжf4<`4< 2G0yДжРВ±Йm¶ьn6.яё¶no0.яё`( Go4¶ьo:G/ :nя¬/ N№¬PЏ`:G/ :nяЄ/ :nя¬/ N№%кЮь 0HАAщ±єгЂ60¶pf0.яё`РBЃ¶ьn(0HА0yДжR€±АlAщ°вгЂJpf Jy9^fr=AяЁ¶ьo8<С `8.яёёno=D0HАAщ±єгЂ=pяў:.яў<HЖ&гѓ-Cя¤`ёnn& GoAщ±ј гЂ0pHhяя:E/ N№5аPЏ2HБ гЂзЃРЃ$@Хьж"0б@Рj=@я  гЂBvЖJnяЁg2nяёТк0n±ЙnВ GfтJy9Jg:j/ :R/ :E/ N№ЃЮь єy±јoИ4”yДт2D’кёnl"9ГzгЃ 9ГzзЂТЂ#Бж`0B299.HБ DЂ°€l"0I еЂ°€l 9ГzDЂHx/N№ЋPЏ`\0B099.HАDЂ°€lB№ж`J0B099.Бьяэ°€l #щГzж`.0B099.Бьяч°€l 9ГzгЂ` 9ГzеЂР№Гz#Аж* fTHnя°HnяІHnяґHnя¶/ :nя¬/ N№+¦Aщ°ћ гЂ6*C1ѓAщ=®6*CЂ1ѓAщ±"1ЄHnя®HnяД0.HАDЂ/0.HАDЂ/0KHhяя*FHm:nяЄ/ NєъшD@5@Юь4l 0*HАDЂ`0*HА Ђ#(oj@` nя®f J0*lR@в@1@ nя®n20y8†ђщ=кvc¶€m 0j <'ђ†°€f>Aщ°ж гЂJpf.jj@6.я¬¶yж f 5y6¶` 696¶DC5CHnя°HnяІHnяґHnя¶/ :nя¬/ N№/°ЮьёjlJy°–f¶ьo6*¶no* f6 Чj8*=Eяўёno=D4`0HАгЂ*n;¶ДRB0HАгЂJvДfв*nBu гЂ;®я  Gf¦ёnff2HБ гЂзЃРЃCщж"УАAояє Щ Щ0‘4SBk(Eщж,2HБ гЂзЃРЃAщж"САCт"Ш"Ш2ђSBjЮCояє#Щж"Aщж"X€ Щ0‘Bnяў yДжo.ёnoHx+`ёnlHx-`Hx&/.:D/ N№qpЮь &9Дц¶№Д†o B§N№tвXЏJy°–gAщ± гЂ00HАDЂ`FREAщ±ј&.я¤єp8mыЦ0.яўHА"гЃзЂТЂ$AХьж"0б@Рj=@я Jy ѕg>ѕyДжn6*n JUf.ёnf(BЂ0.я /:n/ :n/ :K/ :D/ :nя¬/ N№О¶ьoѕ0н@4Фj nя¬fB0BCщДъ 0•b0 гС00j098†HАCщ±цйЂ01@яBЃ2І€g@ёnn0HАAщ6zгЂ1®я `&0HАCщ6гЂ6.я ¶qgAщ6>1±3ѓ D#(o0HАAщ5ЖгЂ1®я `0HАAщ5ЖгЂBp0HАLо<ьяxN^NuNVHз>88. :.6.4.<.6n0HАAщБгЂ00D@ђyж2HБAщ<гЃРp2HБгЃђp3АжCщ=ЄBiBQBЂ P°fJy9@g"Jy°Pg y°<fJy9>gJy°Nfp3А9^gB@`PBЂ CgF¶yДжm>JBf4yж0F2y8–‘Й±КlAс°±КnJBl2yж0FРьяз±Йl 0KРь±ЙopJ@gђR№;n0HА"пЃEщ9fХБ/ /N№8т0HАAщ7.лЂ00HАгЂPЏJrnt0HА"пЃEщ9fХБ/ /N№8т0HАAщ7."лЃ20HБгЃPЏJr^БA3БДоHyж/N№:L`n8D/ 0HАAщ7.лЂ8p/ N№7$PЏJЂg <'(@Г `°8E/ 4HВAщ7. лЂ8p/ N№7$3АДоPЏJy9^gHyж/N№<ф0HАAщБ$г‚0HАCщ<гЂ8yжс0 2HБгЃРq1Ђ(JyДоgCщ°д09Д’HАAщВRгЂ3°(`0HАAщ°дгЂBp09жHАLо|яаN^NuNVHз 4."nJn f yДЉ`yяюДЉ29ДЉAяHБ еЂзЃРЃ @Сщ°в#И8ўґh nN$Pµщ6ѕfDR№БB3иГr(g$n4Ё$n4ј±аp` y8ў(g 4hґСoSJ2ЉBЂLояшN^NuNVHз>4.8.:.<.6.Jn f yДЉ`yяюДЉ29ДЉAяHБ еЂзЃРЃ @Сщ°в#И8ў №6ѕ1D 1B1CBhєBoh`јBl y8ўh` y8ўhLо|ямN^NuNV/Jy ѕg(B‚ еЂ"зЃРЃ @Сщ°в#И8ўBh R‚ ‚яoЪ$.яьN^NuNVHз>0:. 8.0HАAщ§<гЂ<0JyГrf0HАAщ5ЖгЂ3р°~` 3щГr°~0HАCщ6гЂ3с°‚Aщ6>3р°vAщ6z3р°zBy°† Do3сь°†0HАAщ±јгЂCщ±є1±AщЄѕ0HАCщЄ¶гЂ0±6PRK3ЛЄМAщДк40m46HГ лЂEщ7.ХА6F/ /0HАгЂ6r/ 6D/ N№!љЮьSBjЬ2HБAщ7~ гЂJpfМAщ;rJpfѕAщ7. лЂ60B§4C$ T‚// /N№)DЮьJЂg<6F/ // 4HВ/N№$hAщ±јг‚20(HБSЃAщж" гЂзЃРЃpЮьB§4C$ U‚// HЕ/N№)DЮьJЂg8HЖ/// 4HВ/N№$hAщ±јг‚20(HБSЃAщж" гЂзЃРЃpLо |ядN^NuNVяшHз?<=n яю>.:.<.0HАAщ<ЄгЂ60Aщ§H=pяь0HАAщЄЁгЂJpg°AщЄј800HАгЂ-@яшKщ<*`|0HАAщЄШгЂ:06.яьЦE4F6G8nяю`R0HАAщ§ИгЂ402HБ гЂ ugјuf4/ // / N№$hЮь`/ HВ// / N№$hЦEЮь0@€g¦RDAщЄК"nяшёq€oяt`О CfFJEfR4G(<<:$ г‚"B qHf<:F/ Hj/ 8nяю/ Gщ$hN“Aщ:жЮь p(fr"D q(fh/ Hj`V EfZ4G(<<$ г‚"B qHfD:F/ Hjяш/ 8nяю/ Gщ$hN“Aщ:жЮь p(f"D q(рf/ Hjяр/ / N“Юь0HАAщЄјгЂ800HА*г…`d0HАAщЄШгЂ6.яьЦp0@€fF0HАAщ§ИгЂ400HАAщ<*гЂјpgґy92f2F/ HВ/2G/ 2nяю/ N№$hЮьRDAщЄКёpXoђ`‚0HАAщЄјгЂ800HА$г‚`Z0HАAщЄШгЂ6.яьЦp0@€f<0HАAщ§ИгЂ20HБAщ<* гЂєpg2F/ /2G/ 2nяю/ N№$hЮьRDAщЄКёp(oљLо<ьяРN^NuNVHз< 8.6.:.0. HАAщ±јгЂ20HБ$г‚зЃФЃ$BХьж"RpBj4„5C0б@РCBB°y°~f4<Р`6°y°‚f4<<`(°y°vf4<2`°y°zf4<(` °y°†f4<0HАAщ<*гЂ pg<j¶yД’fBф0HАAщ<ЄгЂ00HАCщ«JгЂ2HБгЃ01ђpФ@0HАAщ<ЄгЂ pf\0HАAщ:жгЂJpg pf jB `60HАAщ:жгЂ pg pf jЂBX`¶y92fj 0н@2ТCJEfAAщДъB@0Ф@B±а5BLо<ямN^NuNVякHз?<4. =nяю6.0HАCщ±јгЂAщ±є3°00HА"гЃзЂТЂ$AХьж"AщЄѕ0HАCщЄ¶гЂ0±8PRL3МЄМJBf=|яь=|яъ` =|яь=|яшяъ0HАлЂЂ7.-@яцBnяк0HАгЂ-@ятHГ-CяоGщ±ј`Њ0.якHАгЂ(nяц>40HАAщ§HгЂ=pямIщ<Є<40HАAщЄјгЂ20AщЄК2pAщЄЁJpgд8ІДm,0HАгЂIщЄШ642.ямТC*.яог… E`¤0HАгЂIщ§И440HАгЂIщ<* tfТC`z0HАгЂIщ<*:tєояюfn4‡5B5|0HАгЂIщ<Є04HАгЂIщ«JKщВТ:4Ъu0ђF5@ Ff Bo B7o j5|LФь Rs€` 0@€gяVRDІДlя,`R8ІДm°&.яогѓ0HАгЂIщЄШ2.ямТt0@€f„0HАгЂIщ§И440HАгЂIщ<*:tєояюf\4‡5B5|Iщ<Є04HАгЂIщ«JKщВТ:4Ъu0ђF5@ Ff Bo B7o j5|LФь Rs8RDІДlяZ Ff”0HАAщ:жгЂ8pёояьf|4Фnяъ0HАгЂIщ<* tfb4‡5B5|Iщ<Є04HАгЂIщ«JKщВТ:4Ъu0ђF5@ Ff Bo B7o j5|LФь .яогЂRsRnякAщДк(nят:nякєф€oэbLо<ьяВN^NuNVHз><6. 8n6n2.0HАAщ§<гЂ<0ёЛl4 VB8 SD:<` 4 YB8 RD:<яяJAfё0 HАAщ<ЄгЂ pfњ0HАгЂ pfЊAщ<*¶pf~0 HАAщ<*гЂ pfj0HАгЂ pf\ Eяяf0EKр° Aщ<*гЂ pf>:F/ :L/ N№7$PЏJЂf*:F/ :K/ N№7$PЏJЂfHЖ/0EHpАN№7$JЂgфBЂ`р Af0HАAщ;rгЂ1ј`0HАAщ;rгЂBp Af 0 6L8@0840 HАEщ<ЄгЂ5јCщ<*3ѓAщВRBp< HЖ"гЃBr3ј2HБгЃ5ј3ѓ:HЕ$г‚1°(Br(3ј(HГ$л‚00HАгЂCщ7.УВ3‹00HАгЂ3„Jy ѕg":K/ /Hx/Eщ2tN’HД//Hx/N’pLо<|яЬN^NuNV/4. 0.2.°noQ@`P@ AfHАAщ<ЄгЂBpAщ<*1ј`HАAщ<ЄгЂ1јAщ<*1‚N№4$.яьN^NuNVяюHз?<<. (n &n$n4HВAщ§< гЂ=pяю:8,3ьяя923ЕГj3ДД’ByжRy8†098†HАAщ±ц"йЃ0б@РD1Ђ, gBp1† HxHД/HЕ//Nєэ`n2HБAщ<*$г‚4°(Aщ<Є6°(0HАAщВТгЂ*n:°*n:°(098†HАAщ±цйЂ1“1’ RgpHx/:R/ N№3TЮь Sf 0HАйЂAщ;†20(HБгЃAщ6КСАSp0HАAщ<Є$г‚ p(fё0HАйЂCщ;†21(HБгЃAщ6КСАSp0HАгЂ21HБгЃRp61(410HАгЂ2p0HАгЂ0pR€±ЙmZ0HАйЂ2HБгЃCщ6КУА0q0HАгЂ2qR‰іИo yж`0JBg$ Bg0HАйЂ0BСИђГ"гЃAщ6КСАJpfyясж0.яюHАAщ<"гЃ0HАCщ«JгЂ>1џp Sf Aщ9>pяњJy ѕg:D/ Hxяя:S/ :nяю/ N№2tЮь*n>Яyж2HБCщ<*гЃ6HГ гЂ3±Aщ<Є1°EщВТ5ІEщВR5І4HВл‚22HБгЃEщ7.ХВ5„3јBp2HБ гЂ pf$ ђѓ~ѕЂf>PG`0EђД~ѕ€f >QG3З92, gљ0HАAщ<ЄгЂ1ј4HВ"йЃAщ;†00HАгЂAщ6КСБSpAщ< гЂpиAщ9>pяњAщ9:1јJy ѕg(Hxяя4E/ Hx/Gщ2tN“Hxяя/ Hx/N“Юь *n>џyж0HАAщ<ЄгЂ pf0HАAщ7~гЂRp, gHxHД/HЕ/:nяю/ NєыЖ`*Jy ѕg"0HА/HЕ/Aщ<ЄгЂ:p/ HЖ/N№2tLо<ьяЦN^NuNVяъHз?<>. (n2HБAщ§< гЂ=pяъ*n 8<-3ьяя92Sy8†- gHxHЖ/HД//Nєщ@`b0HАAщ<*гЂ:F-Mяь$ г‚1°(Gщ<Є7і(CщВТ*n3•EщВR5І(6HГ"лЃ02HАгЂEщ7.ХБ5„1”(*n7•(*n3•(*n - gx0HАгЂ7ј йЂAщ;†20(HБгЃAщ6КСАRpAщ< гЂpьAщ9>pdJy ѕg*/.яьHxяяHx/Eщ2tN’/.яьHxяяHx/N’Юь TgтHx4HВ/:T/ N№3TЮь *n Uf$0HАйЂAщ;†"гЃ20HБгЃAщ6КСАRp0HАAщ<Є$г‚ p(f20HАйЂ2HБCщ;†гЃ21HБгЃAщ6КСАSp01(HАгЂRp0.яъHАAщ<"гЃ*n0HАCщ«JгЂ:1Ыp Uf Aщ9>pdJy ѕg :F/ Hxяя*n:U/ :nяъ/ N№2tЮь0HАAщ<ЄгЂ pf0HАAщ7~гЂSp*n - gHxHЖ/HД/:nяъ/ Nєщ`*Jy ѕg"HЖ/0HА/Aщ<ЄгЂ:p/ HЗ/N№2tLо<ьяТN^NuNVHз?<8. :.6.<.JCm\6DEщ ВIщЌ–Hx Ђ/ N”PЏ @0HА$п‚бЂФЂAт€0HА"гЃеЂ*AЫАСВ.5€ї№6ѕHx Ђ/ N”PЏХАХВ>5ЁїyДЉJFmZ6DEщ ВIщЌ–Hx Ђ/ N”PЏ @0HА$п‚бЂФЂAт€0HА"гЃеЂ*AЫАСВ.5€ї№6ѕHx Ђ/ N”ХАХВ>5ЁїyДЉLо<ьяШN^NuNVHз<04. 6. nff0HАгЂAщДкСАSP0HАAщВRгЂ20HВGщДк&гѓ(<7.EщВR`$ лЂ0A*г… E"DУА1±€00HАгЂ5ЃRAІs8oЦ`:2HБAщДк гЂRpлЃ40HВг‚Cщ7.УБ3ѓ(2HБCщВRгЃ3°Lо <яиN^NuNVHз?<3ьяя92BAAщ6КEи0HАгЂBrBpRA AoкAщ<Cщ9>BiBQBhBPAщДкBhBPByДЉB№6ѕBDIщ<*Kщ<Є*<ВR,< В0HА$г‚ t(g*24(HБгЃ05(HАAщ«JгЂCщ<>0Яq u(f604(HАAщ9>гЂpd04(HАйЂAщ;†20(HБгЃAщ6КСАRp0HАгЂ uf"EBq` 2HБгЃ04HАAщДкгЂRp"E3°0HАгЂ24HБлЃ"E01HАгЂAщ7.СБ1„6HГ$г‚0t(GщЌ–Hx Ђ/N“PЏ @25(HБ пЂбЃРЃСЖеѓ$BХГСА.2€ї№6ѕ0t(Hx Ђ/N“PЏ @25(HБ пЂбЃРЃСЖСА>2€їyДЉRD D?oюѕLо<ьяШN^NuNVяцHз> 8. <.0HАAщж""гЃзЂТЂ60:4RBјBm$Aщж"0HА"гЃзЂТЂ00¶@l6:RBјBlвёEgF2HБCщж" гЂзЃРЃEсAояц Ъ Ъ0’4HВ"гЃз‚Т‚AсEс$Ш$Ш4ђAояцУБ"Ш"Ш2ђLо|яЮN^NuNVяЂHз0 $nBCBR2y8†0y=кV€±ЙlpBB0HАгЂBvЂRB B?oо498†ґy=кoNCщ±ц0HАйЂ210аHAяHАгЂAцЂRPfSC`RC0HАгЂAцЂSPfSC`RCJCfRRSBґy=кnёLо яtN^NuNVяьHз?<6. 4.0HАAщ§HгЂ<0JBf2Aяс`2A0@€f00HАAщ§ИгЂ00HАAщ<ЄгЂ pfAщ<*ґpgBJBf2Aяп`2A0@€f00HАAщ§ИгЂ00HАAщ<ЄгЂ pfAщ<*ґpgш0HАAщ7.лЂ:p/ HГ/N№`~ѕЂgФ0HАлЂGщ7.ЧА:<0HАгЂ-@яь4FIщЄш`І0HАгЂ03HАAщ<ЄгЂ80 DgђAщ§H60 JђГ°ьl DЂ`*JљГ AщЁёгЂ40g`0HАгЂ2HБAщ«<гЃ04АpgD Dg:¶FoDB2ТBјAg(Cщ§ИAщ<*0HАгЂ01HАгЂ pfТBјAfдјAfp`REAщДк..яьєpxoя@BЂLо<ьяФN^NuNVяьHз?<4. $n BA0HАгЂBrRA A?oоAщЄѕ0HАCщЄ¶"гЃ0±8PRL3МЄМлЂKщ7.ЫАBG0HАгЂ-@яьGщЄШCщ§И`Ф0HАгЂ05HАAщ§HгЂ<0Aщ<Є00HАAщ«XгЂ:0AщЄј20AщЄК80AщЄЁJpgJ4ёBmzAщ<*0HАгЂ632`0HАгЂ01HАгЂRr‹r pf ТC0@€gШRBёBlД`64ёBm00HАгЂ2Тs0@€f0HАгЂ01HАгЂRr‹rRBёBlРRGAщДк(nяьѕt€oяLо<ьяФN^NuNVяъHз?88. $n Aщ7.3Р8Ћ3и ;~N№]Ж0HАAщ§<гЂ6pBnяьBnяъByГv yГvnц.<9fIщ6К09ГvHАAщ§<гЂ3рГnJyГvf 3щ;~°Ъ` 3щ8Ћ°Ъ09ГvHА"пЃТ‡#Б<&29ГnHБ$п‚Ф‡#В<йЂРЊ#А8љйЃТЊ#Б8’BC*<7.`D29ГvHБлЃ0HАгЂ EСБ402D/ HВ/N№BH29ГvHБгЃСvъAщВТг‚1Ђ(PЏRC09ГvHАAщДкгЂ¶po¦RyГv yГvoя0HАAщ=ЄгЂ po <9°ЋЭvъ0 HАAщ=ЄгЂ po <9°ЋЭvъ4HВAщ<г‚0 HАгЂ20(’pТv(ъ’vъA 4ЃJy<gNєЕѕ2y</ /N№ЋzСRJRo60HАAщ9>гЂJpf$Aщ°N p%nBR` R%n J0lR@в@0ЂJRl>0 HАAщ9>гЂJpf,Aщ°N p%nBR`0HАDЂ Ђ%n J0lR@в@0Ђ0 HАAщ<гЂ p°f0HАAщ°NгЂ pcoRИ0HАAщ<гЂ p°f0 HАAщ°NгЂ pcoRя8LоьяЦN^NuNVяюHз?<8n N№]ЖAщ<<јho4|`4|2 HБAщ§< гЂ=pяюAщ7.лЃ>02.яюHБлЃ:0BCAщ9>JpoZ4<8 HД,г†&FKщ7.`6"лЃ0HАгЂAх2p/ 2E/ 2G/ 2nяю/ /2L/ N№>>Ц@ЮьRB,<Дкґshoѕ`p2 HБAщ°N гЂ pБfHЕ/HЗ//N№A6`F0 HАGщ°N(г„ scHo04HВ/HЗ/N№`Aщ¬ћг‚20(гAAю <3HњA2г@6–@ґМf"n `"n DC2ѓLо<ьяЦN^NuNVHз?08. 2.4.6n<.6.0HАAщДкгЂ pf:<2`:<xJAfЁґDf0HАAщ:жгЂ40SB`0HАAщ:жгЂ402HБEщ:ж гЂґrn./8HД/N№`0|ђВ±Аo гЂ22гA02з@Т@ЪA`0HАAщ:жгЂ00Бь2:Eф0HАAщ:жгЂ pnC`°PC`ЄґDf0HАAщ:жгЂ40RB`0HАAщ:жгЂ402HБEщ:ж гЂґrm0/8HД/N№`0BR€±Аo гЂ><ћr02гAз@Т@ЪA` 0HАAщ:жгЂ><ћp0Бь2:Eф0HАAщ:жгЂ poCяр`QC0HАCщ;†"гЃ0q0HАгЂђс°ьl 41”q`2HБAщ;†гЃ0HАгЂ40”p0HАCщ:ж"гЃ0q0HАгЂђс°ьl 01ђq`2HБAщ:жгЃ0HАгЂ>0ћp08Ш@0 HАCщ;†"гЃ0q0HАгЂђс°ьl 41”q`2 HБAщ;†гЃ0HАгЂ40”p0 HАCщ:ж"гЃ0q0HАгЂђс°ьl 01ђq`2 HБAщ:жгЃ0HАгЂ>0ћp0РB@0з@Ъ@0HАLо ьяаN^NuNVHз><<. :.8.0HАAщ°NгЂ60CюФJyД‚f0`20HАAщ:жгЂ20HБйЃAщ;†t*Bљр$ г‚Aщ:fСБ00(HАAщ­гЂЦp0HАCщ;†"гЃ0q0HАгЂђс°ьl 41”q`2HБAщ;†гЃ0HАгЂ40”p0HАCщ:ж"гЃ0q0HАгЂђс°ьl 01ђq`2HБAщ:жгЃ0HАгЂ:pљр0 РB–@8D/ 4HВEщ7.л‚:r(/ Gщ`N“–@/ :r(/ N“–@0HАLо<|яЬN^NuNVяьHз?<6. :n0HАAщ<ЄгЂ<0 y<&>0GOя6G y<>0GOя4GAщ:ж:0Aщ;†40Bnяю FfJyГvfAщ=*=pяю C g C f0HАAщ<:гЂ pg >9Б>ЯnяюJBg0HАгЂ @Сщ8љJhяюf, Bg0HАгЂ @Сщ8љJhf0HАAщ«¦гЂ>0`0HА y8љгЂ po >9еъЯnяю¶ь?яnl0HАгЂ @Сщ<& h?яnV0 ЂяAщ«¶гЂ2.яюТp=Aяю0HА y8’гЂJpf Тy;f=Aяю0HАAщ<:гЂ pg >9БFЯnяю0HА y8’гЂJpfжєьf4SB`4B„29;~HБAщ:ж гЂґpn/8C/ N№`0|ђВPЏ±АoxґьgєьfBB`4<2PA A?n@ y<Cщ<*0HАгЂ p?яo4<` 0HАгЂJpn qg4<PA A?oМ Bf0HАAщ«–`RJDf Bf0HАAщ«†`:Jy°Po0HА`$0HАAщ«fгЂ>0`т FfJ yГvf>0HАAщ8®гЂ=pяю C3g C4f0HАAщ<гЂ pg >9Б>ЯnяюJBg0HАгЂ @Сщ8љJhяюf, Bg0HАгЂ @Сщ8љJhf0HАAщ«¦гЂ>0`0HА y8љгЂ po >9еъЯnяю¶ь?яnl0HАгЂ @Сщ<& h?яярnV0 ЂяAщ«¶гЂ2.яюТp=Aяю0HА y8’гЂJpf Тy;f=Aяю0HАAщ<гЂ pg >9БFЯnяю0HА y8’гЂJpfѕєьf4RB`4B„298ЋHБAщ:ж гЂґpm/8C/ N№`0BR€PЏ±АoxґьgєьfBB`4<2QAk< y<Cщ<*0HАгЂ p?яo4<`0HАгЂJpn qg4<QAjР Bfp(@Е Aщ«–`0JDf Bfp(@Е Aщ«†`Jy°No2p(@Е Aщ«vгЂ>95ВПр Hx /N№ЋPЏСnяю`ѕp(@Е Aщ«fгЂ>0`ў Ff"09ГvHАпЂ2HБгЃAщдъСА=pяю`~ FfN29ГvHБпЃ0HА$г‚AщБRСБ=p(яюHnяьHnяю/N№O€0.яьHАAщ«ЖгЂ>0ЯnяюЮь `* Ffb>99RЯnяюHnяьHnяю8C/ N№O€0.яьHАAщ«вгЂ>0Яnяю0HА y8љгЂЮь Jpf >9ГfЯnяю0HА y8’гЂJpf >99BЯnяю09ГvHАAщ§BгЂєpf09ГnHАAщ9>гЂ pdon яю y5Вot8.яюD0HАCщ;†"гЃ0q09°ЪHАгЂђс°ьl 41”q`2HБAщ;†гЃ09°ЪHАгЂ40”p0HАCщ:ж"гЃ0q09°ЪHАгЂђс°ьl 01ђq` 2HБAщ:жгЃ09°ЪHАгЂ>0ћp0РB@=Dяю`В Ffв y5Вo°8.яюD0HАCщ;†"гЃ0q09°ЪHАгЂђс°ьl 41”q`2HБAщ;†гЃ09°ЪHАгЂ40”p0HАCщ:ж"гЃ0q09°ЪHАгЂђс°ьl 01ђq` 2HБAщ:жгЃ09°ЪHАгЂ>0ћp0РB@=Dяю8y°Ъ/ 8C/ N№`PЏ~ѕЂmдn яю`Ъ FfТ29ГvHБпЃ0HАгЂAщГ‚СБ=pяюJy°Љo.09ГnHАAщДвгЂJpfJy5ВoHnяю8C/ N№LTPЏ09ГvHАAщ;rгЂJpg>97v`09ГvHАAщ7~гЂJpg >9АъЯnяю0HА y8љгЂJpf >9±ЄЯnяю0HА y8’гЂJpf >9жЯnяю Bg Bg Bg Bf<0HАгЂ @Сщ8љJhяюf >9±ЄЯnяю0HАгЂ @Сщ8’Jhяюf >9жЯnяю Bg Bg BgJBf<0HАгЂ @Сщ8љJhf >9±ЄЯnяю0HАгЂ @Сщ8’Jhf >9жЯnяю Bf( y8љJPf >9±ЄЯnяю y8’JPf >9жЯnяю Bf, y8љJhf >9±ЄЯnяю y8’Jhf >9жЯnяюґьoЉ0HАAщ«XгЂ00@Oя¶ьg 2J0@R€±ЙlF>9°’Яnяю09ГvHАEщ=ЄгЂRr Fg@HЖ/HГ/N№QJЂg.09ГvHАгЂRr` Ff¶Кl°Jo¶ь?яn >9±^Яnяю0.яюHАLо<ьяФN^NuNVяьHз?<=n яю$n BF0.яюHАAщ§HгЂ=pяь09ГnHАAщ єгЂJpfAщ9:Jpgњ89ЄВKщЄШIщ§ИGщ<*`x0HАгЂ:54.яь`\0HАгЂ640HА"y<"гЃ01@g,>3ѕyГng y<&Jpg01@я @oRF`WR0HАгЂ sf ФE0@€gљRDёyЄРoЂ09ГnHАAщДћгЂJpfAщ9:Jpgњ89ЄДKщЄШIщ§ИGщ<*`x0HАгЂ:54.яь`\0HАгЂ640HА"y<"гЃ01@g,>3ѕyГng y<&Jpg01@я @oRF`WR0HАгЂ sf ФE0@€gљRDёyЄТoЂ09ГnHАAщ°RгЂJpg„89ЄАKщЄШIщ§ИGщ<*``0HАгЂ4.яьФu0@€fH0HАгЂ04HА"y<гЂ1g,>3ѕyГng y<&Jpg01@я @oRF`WRRDёyЄОo"J0HАAщ«югЂ>9°ЉПр l~Р‡иЂСQBFBA0.яюHАAщ§HгЂ=pяь89ЄИKщЄШIщ§ИGщ<Є`t0HАгЂ4.яьФu0@€f\0HАгЂ640HАгЂ sf2<0HА y<гЂ"y<&>0ѕqo$RF0g po qяn 09°Ље@‘RRDёyЄЦo„JAf>9°ЉџR Fo>9°ЉџRLо<ьяФN^NuNVяъHз?<0. $n (n29ГvHБпЃKщ7†ЫБBTHАAщ§HгЂ=pяюAщ<Є<00HАAщЄјгЂ:00HАгЂ-@яъGщ<Є`8<яя0HАAщЄШгЂ604.яюФCCщ<*`в0HАAщ§ИгЂ200HАгЂ>5ЯR qfRTФC`¶JDl"0HАгЂ sg¬ sgў8ФC`ђ0HАгЂ>1ѕyГnf†јsm y<Jpfr0HАгЂ>1ѕyГnfL>98ћЯR y<Jpg" y<&0p03HАCщ«XгЂ2qR‰іИl*09ГnHАAщ=ЄгЂRp`>96ВЯR` 0@€gяREAщЄК..яъєpxoюаLо<ьяТN^NuNVяьHз?<2. :.0HАAщ§HгЂ<00HАAщЄЁгЂJpg¤AщЄј600HАKщЄКгЂ-@яьIщЄШGщ§ИEщ<* y<``0HАгЂ844ФDCщ<Є`@0HАгЂ230HАгЂ>2ѕyГvg,Jpg єqo0HАгЂ>2ѕyГng ФD0@€gёRC..яь¶uxo–`r EfкJyГvfPA`QA0HАAщ<*гЂ pf"y<& y<>1ѕplЄ09ГvHАAщЄ¶гЂ00HАAщЄШгЂ4Фp0@€f&0HАAщ§ИгЂ00HАAщ<*гЂ>0ѕyГngV09ГvHАAщЄ¶гЂ00HАAщЄЪгЂ4Фp0@€f°0HАAщ§ИгЂ00HАAщ<*гЂ>0ѕyГnf€BЂ`„0HАAщЄјгЂ600HАKщЄК"гЃIщЄШGщ§ИEщ<* y<Cщ<Є`<0HАгЂ4Фt0@€f&0HАгЂ03HАгЂ>2ѕyГvg Jpg€єqo‚RC¶uoѕpLо<ьяФN^NuNVяшHз? Eo Eoj:y8Ћ/ 4HВ/N№`PЏ|јЂmN гЂKщ=*<9±¶Эu`8 nяьn0 Eo Eo$0HА"гЃ$09±¶lR@в@Kщ=*Рu(;ЂJy;tfJy7Ђg> Eo Eoj:y;~/ 4HВ/N№`PЏ|јЂmN гЂKщ8®<9±¶Эu`8 nяьo0 Eo Eo$0HА"гЃ$09±¶lR@в@Kщ8®Рu(;ЂJyБJg 098ЋHАгЂ tn En098ЋHАгЂ to* En$4HВг‚Kщ=*25(Aял0.яьг@РnяьТ@;Ѓ(09;~HАгЂ tn En09;~HАгЂ to En2HБгЃ0.яьг@РnяьKщ8®‘u:y;~/ 6HГ/Eщ`N’$г‚Kщдъ25(ZA’@;Ѓ(:y8Ћ/ /N’Kщдъ25(ZA’@;Ѓ(:y8Ћ/ /N’Kщеz25(ZA’@;Ѓ(:y;~/ /N’Kщеz25(ZA’@;Ѓ(KщБR<99VЭu(KщБТ<99VЭu(BBЮь Eщ7N8HД&гѓ`.0HАгЂ:r/ /N№`PЏ|јЂmKщдъ<96ЖЭu8RBґyДмoКBBEщ7.8HД&гѓ`.0HАгЂ:r/ /N№`PЏ|јЂmKщеz<96ЖЭu8RBґyДкoКJnяюg0HАгЂKщдъ<9АюЭuJnяъg0HАгЂKщеz<9АюЭuJnяюg0HАгЂKщБR<9жЭuJnяъg0HАгЂKщБТ<9жЭu y єf0HАгЂKщБRPu y јf0HАгЂKщБТPu y°Rf0HАгЂKщдъZu y°Tf0HАгЂKщеzZu0HАAщ<ЄгЂ pf62.яьlRAAяю<.яьњA20lR@@яюљ@0°AfByД‚`3ьД‚0HАAщ7†$г‚EиЂBr(Bp(:y8Ћ/ /N№`PЏ|јЂf5№±¦(:y;~/ 4HВ/N№`PЏ|јЂfAщ7† гЂ1№±¦BnяшBBGщ<ЄCщ:ж:HЕ,г†$F0HАгЂ sf€Aщ<*JpfJ6< qf8PD`8D2PA A?nnAщ9ж0HАгЂ p@n sfBCPA A?oа`F6<0HАгЂ qf8QD`8Dяр2QAk"Aщ9f0HАгЂ p@n sfBCQAjдJCgv0rИ0HАгЂђф°ьl 64–rИ`"гЃ0HАгЂ64–t"гЃ0q0HАгЂђс°ьl 01ђq`"гЃ0HАгЂ<1њq02Т@0е@Т@Уnяш`p"гЃ0t0HАгЂђф°ьl 64–t`"гЃ0HАгЂ64–t"гЃ0q0HАгЂђс°ьl 01ђq`"гЃ0HАгЂ<1њq0РCСnяшRB B?oюbJnяшg00.яшБщ±®Hx /N№ЋPЏ2HБAщГ‚гЃ‘pРьЂ‘pRG G?oшFLо<ьяРN^NuNVHз00Aщ<6¶y±Іf6(¶y°љg*Aщ<3Ш±І3Р°љAщ°NEщ9>09±ІђZ@ыP0ЂCи09°љђR@ыP2Ђ4ФQ BИoBy5В`* Bwn 3ь 5В`Hx6|И–В/ N№ЋPЏ3А5В BoBy±®`* Bwn 3ь ±®`HxЬ6|–В/ N№ЋPЏ3А±®3ьясБ>3ьяьБF3ьятеъ3ьяь;f6< –y5В3Г±¶3ь ГR3ьГV3щ5ВАц0y5ВHxHhN№ЋPЏ3А6Ж0y5В \ЂjRЂвЂ3ААю0y5В \ЂjRЂвЂ3Аж295ВгA3Б9V3ь Гf3ь9B095Ве@Т@3Б9R3ь6В3ь 8ћ095ВБьvвРѓjRЂвЂ3А±ЄlR@в@3Аж6< –y5В3Г7v0y5ВHhHxяШN№Ћ3ААъp &@–щ5В lRЂвЂ3А±¦ y5Вn095Вг@6<–@3Г°Љ`By°Љ3ьяъ±^3ьяш°’3ьяф°ЋLо ярN^NuNVHз<6. 8.0HАCщ;†"гЃ0q0HАгЂђс°ьl 41”q`2HБAщ;†гЃ0HАгЂ40”p0HАCщ:ж"гЃ0q0HАгЂђс°ьl 01ђq`2HБAщ:жгЃ0HАгЂ:0љp0°Bl0HАLо<ярN^NuNVHз08(n&n $nBѓ$г‚0t(2| ’щ5В/ /N№Ќ–PЏ @03(Бщ5ВHx HpN№ЋPЏ5Ђ(Rѓr?ІѓlєLо ямN^NuNV/"n n BЃ гЂ1±RЃt?ґЃlо$.яьN^Nu%c%cNVB№°JB№°FHxEHxHzяаN№†N^Nu GNU Chesss Exited NVN№~АHzяЮ/9Ї(N№„дB§N№ѓ€N^Nu Abort? %syesyYYESNVя°Hз HxHx EщџDN’HxHx N’HzяДN№†t°ФЋ/HzяЅN№†hHzя¶/Eщ‹РN’Юь$JЂg*Hzя¤/N’PЏJЂgHzя/N’PЏJЂgHzяЊ/N’PЏJЂfNєяDHzя~Hx EщџDN’HzяnHx N’LояЁN^NuNV/ HxHx EщџDN’HxHx N’3ь°–By;zHzя,Hx N’Hzя"Hx N’$nяьN^NubdquitposteditgohelpforcebooknewlistlevelhashbeepAwindowBwindowrcptrhintzerobothreverseswitchwhiteblackundoremovegetsavedepthrandomeasycontemptxwndwtestcnt= %ld rate= %ld NVя®Hз?0By8¦BF3щ8ЄДЋB№ДљJy<gШJy<fОJ№7‚fД/9Ї(N№„XB§N№ЊH#А7rB§29<AяBЂ0/29<аIBЂ0/N№¤Hy°Zt°ФЋ/N№Њ,8992v®ЦЋ/Hx/EщFN’Юь(JЂg2Hx2yж / N№ /HxHy°ZN’ЮьJyДжoSyДжB§N№ЊHђ№7r#АДљ3Д92XЏHzэBHx EщџDN’Hzэ2Hx N’ЮьJFfx°ШЋJy8¦fN№Ѓ /HzьщN№†h$PЏ~яѕ‚gJ.я°fNєь°3щ8ЄДЋHnя®B§/N№F<Юь g>.я®ѕy<g ByДжB№ДљHzэ /N№‹РPЏJЂfN№v~B§HxB§B§N№vДЮьHzэw/N№‹РPЏJЂf3ь8¦Hzэb/N№‹РPЏJЂfJy9JWА@3А9JHzэC/N№‹РPЏJЂfN№o:Hzэ0/N№‹РPЏJЂf<<Hzэ/N№‹РPЏJЂfN№mFHzэ /N№‹РPЏJЂfJy< WА@3А< Hzьм/N№‹РPЏJЂfB№7‚HzьЩ/N№‹РPЏJЂfN№HzьЕ/N№‹РPЏJЂfN№~АHzьІ/N№‹РPЏJЂfN№ЃдHzь /N№‹РPЏJЂfJy ѕWА@3А ѕHzьЃ/N№‹РPЏJЂfJy<"WА@3А<"Hzьb/N№‹РPЏJЂfN№Ѓ.HzьR/N№‹РPЏJЂfN№ЃPHzьB/N№‹РPЏJЂfJy6єWА@3А6єHzь$/N№‹РPЏJЂfN№ЃzHzь/N№‹РPЏJЂfN№nHzыю/N№‹РPЏJЂf0Jy;zWА@3А;zByДжHx2y8Є/ N№ <<PЏHzыБ/N№‹РPЏJЂf,Jy9NWА@3А9NN№v~B§HxB§B§N№vДЮьHzы‹/N№‹РPЏJЂf:09ж HАAщ§<гЂ3рж 098ЄHАгЂ3р8ЄBy< ByДж<<HzыF/N№‹РPЏJЂfByж 3ь8Є<<By< ByДжHzы/N№‹РPЏJЂf3ьж By8Є<<By< ByДжHzът/N№‹РPЏJЂfJy8†mN№ІHzъЧ/N№‹РPЏJЂfJy8†o EщІN’N’Hzъє/N№‹РPЏJЂfN№z(Hzъ¦/N№‹РPЏJЂfN№|nHzъ“/N№‹РPЏJЂfN№‚XHzъЃ/N№‹РPЏJЂf3ь<Hzъn/N№‹РPЏJЂfJy<WА@3А<HzъO/N№‹РPЏJЂfN№‚†Hzъ@/N№‹РPЏJЂfN№‚°Hzъ./N№‹РPЏJЂffB§N№ЊH*BѓB‚XЏEщ±АGкяюHx2y8Є/ N№¬0RђУЦ€PЏR‚ ‚'oЬB§N№ЊHђ…//N№ЋPЏ//HzщЙN№†ЮьJFgъцHxN№tвXЏJy< g"3щ8Єж 09ж HАAщ§<гЂ3р8ЄHzш|Hx EщџDN’HzшlHx N’Lо ьяЋN^NuCHESS command summary g1f3 move from g1 to f3 nf3 move knight to f3 o-o castle king side o-o-o castle queen side edit edit board switch sides with computer white computer plays white black computer plays black reverse board display both computer match random randomize play undo undo last move time change level depth set search depth post principle variation hint suggest a move bd redraw board clock set time control force enter game moves list game to chess.lst save game to file get game from file new start new game quit exit CHESS Computer: WHITE BLACK Opponent: Response time: %ld Easy mode: ON OFF Depth: %d Random: Transposition table: NV/ N№v~HzьЦEщ†N’HzьбN’HzьщN’HzэN’Hzэ&N’Hzэ=N’HzэMN’HzэfN’Юь Hzэ|N’Hzэ–N’Hzэ©N’HzэЅN’HzэСN’HzэеN’HzэчN’Hzю N’Юь Hzю"N’Hzю6N’HzюHN’Hzю^N’HzюtN’Hzю‹N’HzюќN’Hzю±N’Юь HzюБN’HzюСN’PЏJyж fHzюМN’` HzюЛN№†XЏHzюЖEщ†N’XЏJy8ЄfHzюўN’` HzюЎN№†XЏ/9Г~HzюЎEщ†N’HzюЄN’Юь Jy<gHzю¤N’` Hzю N№†XЏ0y7n/Hzю‘Eщ†N’HzюђN’Юь Jy<gHzюjN’` HzюfN№†XЏHzюsEщ†N’XЏJy ѕgHzю@N’` Hzю`V6ј`P.яњHЃHБxџТ„.яќH‚HВxПФ„.яћHЂHАxџР„.яџHѓHГxПЦ„Aщ:fй‚гЃCр(21бAйѓгЂСГТp6ЃpLо я€N^NuEnter file name: chess.000%hd%hd%hd%hd%hd%hd%hd%hd%hd%ld%ld%hd%hd%hd%hd%hd%hd%ld%hd%hd%hdNVяЦHз88Hzя”N№†tШФЋ/HzзЏN№†hЮь J.яШfHzя‚/N№Њ,PЏHzэjHnяШN№–<&PЏg‚Hy=кHy8ЄHyж HzяV/Eщ†DN’Hy7ЂHy7~Hy;tHy;rHzя:/N’Юь,HyБNHy;vHzя//N’AщГ\/HyГZHhHhHzя/N’BBЮь(Gщ<ЄEщ<*HnяЦHzя/N№†D0HА"гЃ8.яЦаL7„0.яЦ@я5ЂЮь f5ј` 0HАгЂSrRB B?oІ3ьяя8†EщІIкяшGщ±цRy8†0y8†(й„ DHr€HpЁюHpЁьHpЁHpЁъHt€Сь±ц/Hzюw/N№†D"098†HАйЂЮь$Js f7ј `098†HАйЂSs xяёЃfђSy8†J№Г^o3ь;vSyж Sy8Є/N№ѓАN№4B§HxB§B§NєъІByДжLояѕN^Nuw%d %d %d %d %d %d %d %d %d %ld %ld %d %d %d %d %d %d %ld %d %d %d NVяШHз80HzэNN№†tШФЋ/HzеIN№†hЮь J.яШgHx/N№‚ФPЏrяІЂfHzэ(HnяШN№Њ,PЏHzяdHnяШN№–<(2y=к/ 0y8ЄHh0yж HhHzя:/Eщ„дN’2y7Ђ/ 2y7~/ 2y;t/ 2y;r/ Hzя/N’Юь42yБN/ 2y;v/ Hzя/N’2yГ\/ AщГZ2P/ /(/(Hzюм/N’BBЮь(Eщ<*Gщ<Є0HАгЂ rf0|` 0HАгЂ0rRH0HАгЂ03HАбЂ"@HqЂHzю­/N№„дЮь RB B?oґBBґy8†nnEщ±цBѓ0HАйЂ r f0|` 0HАйЂ0r RH2H/ 0HАйЂ2r/ 2r/ /2 2r/ 2r/ 62/Hzю;/N№„дЮь$RBґy8†oљ/N№ѓАLо яДN^Nuchess.lst score depth nodes time score depth nodes time %5s %5d %2d %6ld %5dNVHз0 HzэZHzяxN№–<&Hzт“/Eщ„дN’Hzяh/N’HzяЉ/N’BBЮь ґy8†nђEщ±ц0HАйЂ22аI02@яB§HА/HБ/N№¤0lR@@яюЮь °BfHzт)`HzяR/N№„дPЏ0HАйЂ0r//2 0r/0r/Hy°ZHzя,/N№„дЮьRBґy8†oяzHzцд/N№„д/N№ѓАLо яфN^NuNVHз<8098†HАGщ±цйЂ63аK83Dя4HВAщ<Є гЂ pf84C/ /N№`PЏzєЂl$Hx// 098†HАйЂ8s / N№)DЮь`\0HАAщ<Є$г‚0HАгЂ1°(Eщ<*5І(298†HБCщ±цйЃ1±5±  p(f02(HАAщ7~гЂSpJy;vg0HАAщ<*гЂ00HАAщГZгЂRpSy8†By;jByДжB§HxB§B§NєхюN№4Lо<ядN^Nu%s NV/.HzятN№†N^NuNVN^Nu Your move is? NVHzякN№†N^NuNVN^Nuwindow: NVHzярN№†Hy6кHzшЙN№†hN^NuNVHzяОN№†HyжHzш§N№†hN^Nutry %s NVB§09<@яHА/09<аHHА/N№¤Hy°ZHzяКN№†N^NuEnter #moves #minutes: %hd %hdOperator time= NVHз03ьu0БNHzяѕGщ†N“HyжHy7zHzяѕEщ†hN’HzяєN“HyБNHzчзN’Юь y7z^А@3А;vNєуІLо яшN^Nudepth= NVHzятN№†Hy7nHzчџN№†hN^Nucontempt= NVHzяоN№†Hy6¶HzчqN№†hN^Nuxwndw= NVHzятN№†Hy8–HzчGN№†hN^NuNVяЦ/$. HnяЦ/.N№‰ФJЂm0.яЦHАА‚ґЂfBЂ` rЬ#Б9bpя$.яТN^NuNVHз0 "nBЃ`  g  ffр +fv`0 -fvя`&S‰v` /o 9n гЂзЃ$@AтРHЂРА"fЬ//N№Ќ–Lо яфN^NuNV/ /9Ї$EщѓАN’/9Ї(N’/9Ї,N’/.N№>$nяьN^NuNV/ $nґьgnJgj* g f*0j°ьo/HjBЂ0*/N№џмЮь BjBj jbBЂ0*/N№…,XЏJЂfBЂ0*/N№ јXЏґьg/ N№—ЂBЂ$nяьN^NuNVHз0$nґьgTJgP* g f<6j¶ьo"/ HjBЂ0*/N№џмJЂl%@`BЄЧк %K BjBjLо яшN^NuNV. /. HЂHА/N№Ћ°N^NuNV/$./HzяЦHn/. N№‘/N№ЎЂ/N№…,ЮьJЂg/N№„X$.яьN^NuNVHз8 &.lp`њr?ІѓmAщ6оJ08g 08WАrАЃ`zHx/B§HxBEщЌ(N’(Hx/HxHxBN’Юь JЂgnrАІЂgrЫ#Б9bB‚`tB§//HxBN№Ќ(r?ІѓmJ‚gAщ6ој8` Aщ6ој8 LоярN^NuNV. /9Ї(HЂHА/N№Ћ°N^NuNVHzяЬHn /.N№‘/9Ї(N№ЎЂ/N№…,ЮьJЂg /9Ї(N№„XN^NuNV#о±ўB№±ћHn/. N№†ІN^NuNV#щЇ$±ўB№±ћHn /.N№†ІN^NuNVB№±ў#о±ћHn/. N№†ІN^NuNVяьHз?<&n(n B‡`nrяІ‚gRr І€m І‚m8rяІ‚g0N№‰ђ$r І‚lк`r%І€g ±Вg `&›Н•КB„HЂ0@r*І€f(:|`r9І€m" гЂз„-Dяь(Ш®яьCрHР( HЂ0@r/І€mШrlІ€fRЉ`rhІ€fHЂ0@pЫР€rS°ЃbљгЂ2;NыЁяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђњњяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђІ њњяђяђяђяђяђяђяђяђ яђяђяђОяђяђяђяђ r%І‚fюв`J„f$\єьf‚R‡N№‰ђ$`Ф$\`rяІ‚g*N№‰ђ$r І‚lм`rяІ‚gєьfВN№‰ђ$S„gr І‚mаBєьfђR‡`Љ4|Рь rxІ€fz` roІ€fz`z B†`r І‚mN№‰ђ$rяІ‚fм//N№‰6&PЏmю2//N№Ќ–PЏ,ЬѓN№‰ђ$//N№‰6&S„PЏgJѓlТєьf \ †R‡`pю`HЂ0@°ьfэЄ°ьf `pяLо<ьяФN^NuNV/ .". t/ґЂl t9ґЂmtРР‚`2tґЃft`ґЂl tfґЂmt©Р‚`tґЃft@ґЂl tFґЂmtЙР‚`pя$.яьN^NuNVJ№±ўg/9±ўN№•њHЂHА` y±ћ°ьgJgHЂHАR№±ћ`pяN^NuNVяФHз 8(n&n ёьftШ`$Hx*/ Eщ‹°N’PЏJЂfHx?/ N’PЏJЂgtЮ#В9bpя`HnяФHxN№Ќ(PЏJЂmHx/ HxNN№Ќ(Юь JЂl #А9bpя`И.яйg0<я`.яйg0<m`0<я6ЂB«Jg* ,:f"HЂAщЇ”0g@яџ`HЂ@яї` HxN№Ќ(7@Bk7| Bk Bk'nяо'| .яоЂяjЂяt д '@BЃ2.ямtеЎBЂ0.як‚Ђ'A 'A$'A.яйH‚7B(BЂLояДN^Nurww+NVHз HzяоB§EщЎ8N’#АЇ$HzяЬHxN’#АЇ(HzяОHxN’#АЇ,/./. /.N№,$Юь$/9Ї$EщѓАN’/9Ї(N’/9Ї,N’ LояшN^NuNV n.°f `JfфBЂN^NuNV n"n °ьf Іьgpя`<Іьf °ьgp`,°ьfІьf BЂ`JfBЂ`ІgтHЂ0@!HЂђА N^NuNV n"n "Аfъ N^NuNVHз>8(nHx*EщЌ(N’$Hx,N’"*| мҐ|К†(к„|И†PЏo| ј„lx|Д†&B&| мЈ|Ж† кЂtДЃг‚EщЌ–Hx<|?А†/N’PЏФЂHx/N’PЏФЂAщЇ0 гЂЦр/<QЂ/ N’PЏФЂ/<б3Ђ/N’Р‚ёьg(ЂLо|яаN^NuNV/././. . ? .?NAЯь N^NuNV .? .?/. .?NAЯь N^NuNV/$.g2". g,ДБ 4.g ". ДБбЉбЉР‚BЃ2. g$.ДБбЉбЉР‚`BЂ$N^NuNVяюBnяю . jDЂRnяю/ .jDЂSnяю/Nєя”PЏJnяюgDЂN^NuNV///BЂ".$. vx fг‹гЉ`цІ‚ge’‚ЂѓJЃgS„вЉв‹fк(&$N^NuNVяюBnяю . lDЂRnяю/ .lDЂSnяю/NєяPЏJnяюgDЂN^NuNVяь//. /.Nєяx /. /Nєя6$".’‚-Aяь .яь$.яшN^NuNVяь//. /.Nєя„ /. /Nєя$".’‚-Aяь .яь$.яшN^NuNVHз . $n ґьgJg *fpя`J jяo / N№„XXЏ0j‚ЁRj2*Іjl5j jяo/ N№„XHЂHАЂяLояшN^NuNVяШHз?<(n-nяШ-nяЬ.. .*L| BЃzєЂmp°‡l.zє‡l~/N№ЈфXЏ///.яЬ/.яШN№ЈfЮьJЂlь-/.яЬ/.яШN№Ј,PЏ-@яШ-AяЬ/.яЬ/.яШN№ЈљPЏ$/N№ЈфXЏ///.яЬ/.яШN№ЈRЮь-@яШ-AяЬ—Л¶ьgJ‚o>//N№ЋzPЏЂиа 3 иаnJlB3иа//N№ЋPЏ$R‹`ДS‹3иа0Е¶ьnо—ЛB3иаR‹zє‹lф—ЛBѓ/EщЈфN’XЏ///.яЬ/.яШN№ЈЮь-@яШ-AяЬ//N№ЈљPЏ$/N’XЏ///.яЬ/.яШN№ЈRЮь-@яШ-AяЬЂиа 3 иаnJlB3иаJ‚o& RѓR‹z є‹lя~zяє‡l&Jѓoь.—Л¶‹o3иа0ЕR‹¶‹nрB Lо<ья°N^Nu0123456789ABCDEF0123456789abcdefNVя€Hз?<&n*n ¶ьg^`T %f8 #f ~-Gяђ`B®яђ™МB† -f|`ф +f8|`р  f ёьfд8|яя`Ю~ -GяЊB… 0f~0-GяЊHЂAщЇ”0g.EщЇ”` гЂ"зЃ @СБHЂCрР* HЂ2fЬ` *f *J…lD…|&<} .f< *f&`.BѓEщЇ”` гЂ"зЃ @СБHЂCрР& HЂ2fЬBЃ lfr` hfrHЂAщЇ”0g~-Gя€r `B®я€ dg og xg uf~І‡g ~І‡gB‡І‡f(` eg gg ff-]я”-]яHЂ0@pЫР€~S°‡bДгЂ>;Nыp¶ёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёё¬ЁВВВёёёёёёёёёёёЂёё4J„lD„t`B‚$NB"Hx /N№ЋDPЏ0Hx /N№ЌМPЏ(fЪJ‚g<-`ёьo<+` ёьl< `ь$NB"0жЊfрJ®яђgаJ*gШ<0`Р$NB"J®я€gAъьи`AъьуpА„0иЊfфJ®яђgЁJ*g SЉJ®я€g<X`<xЂ<0`„$NB"Hx /N№ЋDPЏ0Hx /N№ЌМPЏ(fЪ`V/./`ь/.Hx%`р ѓ}fvя///.я/.я”B§HnяњNєъx$@/ Iщў N”Юь°ѓo / N”&XЏ`$]/ N№ў XЏ¶Ђo&¶…l ђѓJ†g ,~ -GяЊ` ,D†`¶…fB†J†lN -f~0ѕ®яЊf/.HЂHА/"nN‘SѓPЏ/./.яЊ"nN‘R†PЏkИ`/.HЂHА/"nN‘PЏSѓjиJ†g*/./.яЊ"nN‘S†PЏfм`/.HЂHА/"nN‘PЏfыЄLо<ья`N^NuNV/ $nґьgpJ*fjJgf* gX2jІкnR0jСк %H HxHjBЂ0*/N№5@Bj2jІкn|Jjl 2j%I`BЄpя`0j0ЁHЂRjЂя$nяьN^NuNVHз0/. N№–¦&B§//.N№Ў”$Юьn #В9bBЂ`,HxN№–р @1BјB(BЁCBhBhBЁ Lо яшN^NuNV n +g2 ag( rg wf" (+gr`r ` (+gBЃ`r `r N^NuNVHз0 tФ®rшДЃEщЇH R°ьgґЁc $H P°ьfр°ьf2 ‚c&`&</HxHN№Ќ( @°ьnBЂ`&$€!CBђ PЂ°Ёd•ЁСи!B`$ђ PЂLо яфN^NuNV/ "nQ‰EщЇH R°ьgіИc $H P°ьfт Р©°ьg±Аb "(У© P"€ РЄіАb ")УЄ$‘`$‰$nяьN^NuNVHз00&. . &CQ‹tФЂrшДЃґ«dEу("+’‚%AHjNєяf'B`0ґ«c*/NєюД$@"JXЏґьg C +QЂg"ШYЂfъ/Nєя2& Lо ярN^NuNV//. /.N№Ќ–PЏ$/Nєюv @JЂg`BQКяьBBS‚dф$.яьN^NuNVHз<0$.(. *.Bѓ&D/N№…,XЏJЂf"/ //Hx?N№ЌJЂl6#А9bpя`*#Д°>#щЇP°BHxHxEщўёN’ЂPЏ9Ї‡gh9Ї‡g:HЂЂя/HxHxN’Юь  fB№ЇP` o ~nR№ЇPRѓєѓo®HxHxN№ўёPЏJ@gR‹`я|9Ї‡g  fј І9ЇЉf$9Ї‡gHЂHА/N№ќXЏ&DBѓHx `,І9Ї‹f*9Ї‡gHЂHА/N№ќXЏ&DBѓHx N№џ’XЏ9Ї‡g’І9ЇђfHxHxN№ўёЂPЏ9Ї‡gN  f89Ї‡g.Hx HxHxEщўёN’Hx HxHxN’B№ЇPЮь`HЂHА/N№ќXЏRѓHxHxN№ўёPЏJ@g„`ОІ9ЇђfF9Ї‡g&Hx^HxHxEщўёN’HxHxHxN’ЮьHxHxN№ўёЂPЏ`І9ЇЊfH9Ї‡gHЂHА/N№ќ$•№ЇPXЏ`HxHxHxN№ўёЮь S‚rяІ‚mв`Ю  g І9ЇЌf^9Ї‡gL  f8Hx HxHxEщўёN’Юь 9Ї‡g$Hx HxHxN’B№ЇP`HЂHА/N№ќ RЂ`rAщЇ€Іgf$JѓgVS‹9Ї‡gHSѓ/N№ћ>XЏ`8І9Ї‰f"`9Ї‡g /N№ћ>XЏS‹SѓjжBѓ` І9ЇЏfZ`"  g  fB9Ї‡g Sѓ/N№ћ>XЏS‹JѓfШ`$  g"  g9Ї‡g Sѓ/N№ћ>XЏS‹JѓfШR‹`ЁAщЇЋІf~9Ї‡gHЂHА/N№ќXЏHx HxHxEщўёN’Hx HxHxN’B№ЇPB№°BЮь9Ї‡gD$D·Кc>9Ї‡gHЂHА/N№ќXЏRЉ·Кbа`9Ї‡gHЂHА/N№ќXЏRѓєѓnым Lо <яиN^NuNVHз0 . BѓHЂJj,HxMHxHxEщўёN’Hx-HxHxN’vЮь nЉ  fZr‚№ЇP 9ЇPSЂ&–Ђ9Ї‡g($`Hx HxHxN№ўёЮь QКяиBBS‚dа`†Hx HxHxN№ўё`pHx^HxHxEщўёN’HЂ0@p@Р€Ђя/` f&Hx^HxHxEщўёN’Hx?HxHxN’Tѓ`HЂЂя/HxHxN№ўёRѓЧ№ЇP Lо яфN^NuNVHз0 &. y°>08HЂJjt`B‚ o f$  f//9°>N№ћи$9ЇP”ЂPЏ`T‚`R‚•№ЇP`4HxHxHxEщўёN’Hx HxHxN’HxHxHxN’Юь$QКяКBBS‚dВLо яфN^NuNVHз8 n&. $9°B`.HЂJjT‚ o f  fx„„`T‚`R‚QЛяРBCSѓdИ LояфN^NuNV/ .". t°‚gt °‚gt °‚fAщЇ|`AщЇЂ`AщЇX  Ѓ` tа#В9bpя$.яьN^NuNV/".mFt ґЃm@AщЇT еЂ p°ьf tІ‚g t І‚gt І‚f"AHi N№ѓ€` tґ€gB§/Nђ$.яьN^NuNVHз80(.&. $.9Ї‡g/N№…,XЏJЂf///Hx@N№Ќ`€&CJ‚g~  f&Hx HxEщЎN’Hx HxN’B№ЇPЮь`L  fB№ЇP`* o ~nR№ЇP`  fpЂ№ЇPRЂ#АЇPHЂHА/HxN№ЎPЏR‹S‚f‚ Lо ямN^NuNV/$./Hx>N№ЌJЂl#А9bpяJ‚mr?І‚m Aщ6оB0($.яьN^NuNVHxHxN№ўёЂяN^NuNVHnHx/.Hx@N№ЌN^NuNV/ HxN№–р$@5n /. N№–¦@BЄ B*BjBjјBЄ $nяьN^NuNVBЂ n0(N^NuNVHз8 (.6.0@ @g" @g @fКB§/Hx=N№Ќ($`ёB‚B§B§/HxCN№Ќ(ЮьJЂ\АrАЃggJЂg t°`JЂftЯJ‚fzfJЂf?!яяярясяпятяояб!яЯ8585 d^c&L°@(<PxИhX (<dґ, #2ZЊ  Њ яфярямяияиямяряфяъяцясялядядядядяю  яшямяЬяМяјя°я°я°я°я°я°я°я°я°я°яьяцяцяьяьяьяшяфяфяшяьяьяфярямямямямяряфярямяияияияиямярярямяияияияиямяряфярямямямямяряфяьяьяшяфяфяшяьяьяьяцяцяь    $$   $$    cZPF<2((ZP<2((P<( 2F2 (<<( 2F2 (<P((2<PZ((2<FPZc                 ;Zx—µФу0N я (((((((((((((((((((((((((((((((QQQQQQRRRRRRf:\gnu\larg0 §4aet tgnuchessА_pnt.0 °_tempb.1°_tempc.2°_tempsf.°_tempst.°_cnt.5 °_xnode.6° _i.7 °*_alpha.8°,_beta.9 °._score.1°0_tempb.1°2_tempc.1°4_tempsf.°6_tempst.°8_xside.1°:_rpt.16 °_thebuf °>_start_c°B__echochќ__delchaћ>_str_lenћиsignal.oџD_sig_arrЇTtchars.oџмwrite.o џмclose.o  јconsole. ьctype.o Ў8fdopen.oЎ8fileno.oЎЂopen.o Ў”strlen.oў trap-13.ўёflonum.oЈnegdf2_zЈmulsf3_r¦fdivsf3_1¦єdivsf3_2¦Тdivsf3_2¦Юdivsf3_2¦жdivsf3_3¦оdivsf3_4¦ъdivsf3_r§_mycnt1 °F_mycnt2 °J_EditBoao:_emtl °N_open Ў”_trap_1_Ќ_HasKnig°R_map §Hold_aet °V_isatty …,_LinkMov$h_mvstr1 °Z__subsf3Ґ2_mvstr2 °b_ScoreLo<ф_mvstr3 °j__parse_–¦_PromptFЃ __floatsЈф__base °r__mchunkЇH__dosf †І_PawnAdv®ћ_Swag2 °v_Swag3 °z_Swag0 °~_UpdateH2t_Swag1 °‚_access ‚Ф_Swag4 °†_KSFTY °Љ_fileno ЎЂ_HUNGX °Ћ_calloc ^_HUNGP °’_timeout°–__main ‹0_BRscan O€_CopyBoaa4_trap_13ўё_trap_13ўЮ_Terminab„__floatd¤P_Zbmtl °љ_SelectM _CptrFla°ћ_OutputMsp_EnemyKi°Ъ__in_tra°Ю__fixunsЈЋ_ttable °в_ChkFlag°ж_pbishop®_SqAtakd7$__exit >_BlendBo`О_Tscore ±"_ScorePo:L_ATAKD ±^_realloc—д_strcmp ‹Р__flofmtЏ,_Kthreat«ю_PrVar ±b__fixunsЈ”_strchr ‹°__do_sigџ’_strlen ў __printf‘_strcpy Њ,__cmpdf2Јf__sfcp ±ћ__sffp ±ў_BMBLTY «Ж_othersi§<_SetTimeuц__addsf3¤V_ExamineSl_KATAK ±¦_KHOPN ±Є_stage2 ±®_Zwmtl ±І__cmpsf2ҐJ_PAWNSHI±¶___print…д_ScoreKBA_TrPnt ±є_printf †_SelectLЃд_GameLis±ц_trappedQ_evaluatІ_PawnBonАц_KMOVD Аъ_sscanf †Ћ__adddf3Ј>__umodsiЋD_KNIGHTSАю_stderr Ї,_Pscore Б_PEDRNK2Б>_HashCntБB_PBLOK БF__divdf3Ј___ttymoЇ„_PawnStoБJ_OperatoБN_PutInTTО_MbishopБR_stdout Ї(_distanc`__sfget ‰ђ_Pindex ВR_Initialaf_KingScaLT_svalue ВТ_PADVNCMГR_PADVNCIГV_Elapsedtв_OpeningH__muldf3Ј_Dstop ЄК__sfnum ‰6_TimeConГZ_RHOPN Гf__divsi3Ћ_FROMsquГj__divsf3¦n_signal џD_c2 Гn_PV Гr_c1 Гv_ISOLANI«¦_NewGame__mulsf3Ґr_SetCont‚†_ResponsГz_Level Г~_Mking Г‚_KBNKsq Д‚_ETnodesД†_hashkeyДЉ__mulsi3Ќ–_ShowResqp_ChangeX‚°_player ДЋ__extend§*_GiveHinЃz_TOsquarД’_et Д–_ft Дљ_ClrScrev~_HasRookДћ_Threat Дў__modsi3Ћz__udivsiЌМ_Dcode Ёё_HasPawnДЮ_SaveGam|n_DevelopДв_EnPassa+>_Sdepth Дж_PieceCnДк_InChk До_console ь_Zscore Дт_NodeCntДц_ChangeBЃP_historyДъ_Mknightдъ_PDOUBLEеъ_cputimeею_ListGam~А_INCscorж_Bwindowж_UpdateDvД_ExitCheaў__start _computeж __umulsiЌP_search 4__fixdfsЈљ_TCminutж_MoveLis¬_BISHOPSж_GetOpenwЮ_ShowDepq,_ExtraTiж_Xscore ж__fixdfdЈо_ChangeS‚X_KHOPNX ж_KingEnd¬ћ__negdf2Ј,_ZeroTTan_fprintf„д_MakeMov+¦_BACKWAR«¶_UpdateW]Ж_Tree ж"___tcharЇ€_StcolorЄ(_Pdir Єш_Stboard©Ё_HasBish є_write џм_Undo І_hashfla ѕ_ShowCurЃ_month_dЇ0_sweep ЄЁ_hashcod В_fscanf †D_KingOpe¬_malloc –р_KBNK ­_stdin Ї$_stage 5В__negsf2Ґ$_Capture%к_killr0 5Ж_killr1 6_killr2 6>_Dpwn Є¶_killr3 6z_contemp6¶_srand р_rcptr 6є__ctype_Ї”_hashbd 6ѕ_XRAY 6В_VerifyMF_KNIGHTP6Ж_PawnCnt6К_Awindow6к___handl6о_rank7 §B_ChangeAЃ._PieceLi7._consoleЎ_MaxSear7n_parse xЁ_time0 7r_KCASTLD7v_RMBLTY «в_value «J_SqValueBH_TCmoves7z_PassedP«f_PassedP«v_kingmov7~_PassedP«†_PassedP«–_unmap §И_ScoreKP>>_Book 7‚_Kfield 7†_GameCnt8†_evrate 8Љ_ShowSidЂт_wking 8Ћ_ProbeTT$_PC2 8’_xwndw 8–_PC1 8љ_PINVAL 8ћ_UnmakeM/°_ptbl 8ў_quit 8¦_stat ‰Ф_opponen8Є_Mbpawn 8®_Dstart Єј_scanf †h_zwndw 9._UpdateP3T_etext §4_repetit6€_epsquar92_environ96_HasQuee9:_pknight­ћ_Dir ЄШ_pmtl 9>_RHOPNX 9B_time ЊH___col_pЇP_Die aа_read __stksiz9F_GetGamez(_InputCocњ_rand А_post 9J_pbit «<_GenMove!љ_kbhit _reverse9N_RookBon9R_control«X_BishopB9V_ShowMesЂЬ_trap_1_Ќ(_root 9Z_slk 9^_pick 5а_errno 9b_Initial4_fputc Ћ°_atak 9f_locn :f_row :ж_help mF_SearchSrL_PWEAKH ;f_ataks 8т_next Ї_mate ;j_EvalNod;n_castld ;r_exit ѓ€_castle )D_atoi ѓ_TCflag ;v_main ,_bothsid;z_bking ;~_et0 ;‚_free —Ђ_column ;†_lpost <_close  ј_force < __subdf3ЈR_fflush „X_fdopen Ў8_mtl <_fopen –<_edata °_hint <_dither <_easy <_fgetc •њ_end =о_fclose ѓА_atk2 <_beep <"_atk1 <&_color <*__truncd§$_algbr ¤_board <Є_Mwpawn =*_hung =Є_PawnThr=®_Game50 =кL@    F 8     L        p0. H 26     8                                (       @ & @ &  $2:& ,0:      (Љ  $€,  "8&">    " $  * "J &0    (<  ,$$,$0  0&$: * ""hPF<4"," RH  *>"L"    D   ,$( <  2 0.6 6. 8"  &.,.,.,\ F&*, &,B  |,     $ ,0*0`(*&, ,, ,,H,,$8    2D  ,D   ""*"" "*  (      $4&:&:*" >* & X 0 "*   .0  h & &   $    * *  (            6    .L" 0      $,,L T$ 2 F*ш                      D ¬    T 4D°  h * LЦ          "R<<@.&&>xљ F $ f  @Z љ $$$  "   *$    D   $   t P"T@"*&, <RJ ¦ 0B"ђ ѕJ"".Z " 4\FDёH^Ћ0$..0Ll",2 *  $rB",Ђ&еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее`Чt ЌЪ0*o#НаО"mУн#Йiљ$m,Jg"КJfь`фB™&yiљJ“g2([ Afф Rfо Gfи Vfв =fЬBЈ$KXЉ I& –ЉYѓдѓ`L IСьЂBX" $Hv ьЧt&|ЂЧНSmR‹JfІ‰gB БRѓB`  f Rѓ БB" `ШУ`Ф&H—НJ№iЄf #ь iЄЧщiЄ" ТЌЃяяяю.A/ / Bg?<Jщб:NA№б:Яь /9iљ/ /ќО/<t?< ?<щб:NM№б:PЏ#АаІN№єЁ?N№і(/9аІ?< ?<щб:NM№б:PЏ /??<Lщб:NAHзЂЂ0/@ря @`яf( oR€СР f/H oaяfNhXђLЯPЏNsLЯ/yаІяьNпяьNV/B№уЮBykЪByс®XЏrІ‚f/+N№Іґ#АуЮXЏrІ‚f(/+EщІґN’3АgЮ/+N’3Аn3ьkЪPЏN№a`N№Jyi fZJykЮgJykОfHx0yi/N№ PЏ`N№c^Jyi fДJykОfјJylnfґHx0yj/N№ PЏ`ћN№aLо яфN^NuIllegal Move!!Ambiguous Move!NVHз<<&.8.(nBT Df0HyаЂHyа~Hyа|HyаzHyа„:yi/ N№/°`zByа‚Hx:yi/ N№¬3щваxPЏB‚`Љ29аxHБ гЂзЃРЃ&@Чь‚Ryаx0+@4/:k/ :S/ N№¤Hyа¶/Eщ»hN’ЮьJЂg Hyаѕ/N’PЏJЂgHyаЖ/N’PЏJЂfRyа‚"KAща„ УX‰ Щ0‘:9аxєyвmяj yа‚fHyаЂHyа~Hyа|HyаzHyа„:yi/ N№+¦:yj/ 09iHАAщg’лЂ:p/ N№7$Юь JЂg4HyаЂHyа~Hyа|HyаzHyа„:yi/ N№/°Hzю@` Dfp`9аЌg B§HxB§B§`"AщаЊ0@BЃ2/B§:hяъ/ :yа„/ N№{–Юь9аЌf"Cща†0HАAщmгЂ pg)g 3щhкnN09hкHАEщвRйЂBrBrBІ HxN№vТ09hкHАйЂ5№фш09iHАAщуѕ"еЃ*9фц›°AщуєгЂSpAща„0б@CиРQ8ЂB§:Q/ :P/ N№¤p` yа‚o Hzэ3N№†8BЂLо<<яаN^NuNVяьHз?<:EBD2HБ пЂбЃ,ЬЃIъъN”$GщЅzHx Ђ/ N“PЏ @СьQ"0HА"гЃеЂ$AХАСЖ5‚€N”$N”-@яьHx Ђ/ N“PЏ @СьQ"СЖvзЄФ®яь%‚€RD D?oљRG Go‚RE EoяtN№yЂJykЪgN№xЦ`J№уЮfN№Љ*B§HxB§B§N№{–N№4B§N№»а#АgЦHxN№vТN№}lLо<ьяФN^Nuabcdefgh12345678 pnbrqko-oo-o-oNVHз8<6. 8.0.Aща¶2HБEщkкгЃ2rIъя°±ИGщkJ2sKъя§qШCи4HВг‚4r(ІИEи6s(іШKщаѕGщm6sIъяxіИQRB(B-J@g¶DlHzя`/ ` Hzя\HyаѕN№»Д0HАAщmгЂ pf ща¶аЖ`0HАAщmгЂ0pCъяраЖ0HАAщlЋгЂ pgCщаЗј:AщаёXPB)`H0HАAщmгЂ pfAщаЗща№B`$CщаЗAща¶ђhhhB)Lо<ядN^NuNVHз<<6. 8.Byат0HАAщЧ|гЂ3раћ Dg3ГфоJykЪgh4HВAщуѕ еЂGщуєг‚2s(EщЅтHi/0N’PЏ @ђщс®#ИуЪ2s(// N№ЅzPЏ29gЮHБгЃ*AHm/N’PЏС№уЪ` #щуЮуЪ Df #ьзуЪJyхFo( yiѕ2h0yхRђщi’±Йl*9фъ›№уЪ`J№уЪnz#ЕуЪB№vN№SlHyа”4C/ N№:L:9а”DE3ЕсbN№†ђPЏJyхFfpN№n/ N№t\ByаЋXЏ yяаЋn CщхZ0yаЋB0RyаЋ yяаЋoж3ьяяфт3ьяяуКByуТ DgBylvByаЋ yаЋnLIщбѕGщf*EщffCщfўAщfЮ09аЋHАгЂBpBqBrBsBtRyаЋ yаЋoТ3ьЬШађ3ь#(а’Byа EщвBR#ь‚iѕHx:C/ N№¬3ТаЋPЏEщв`0RHhяя:yаЋ/ N№5аPЏRyаЋ:9аЋєRmЪJ№gжgN№HJ№gжg3ьатB№сўB№kТB№фжB№хVByхR3ьi’JyатfGщf*:9хFєygТl‚RyхFHx N№rЮHyа Hyбѕ:yа’/ :yађ/ :yхF/ Hx:C/ N№43Аа”3ьаЋЮь :9аЋєyхFn*Aщбѕ09аЋHАгЂ7°RyаЋ:9аЋєyхFoЬ:9а”єyађlhJyатf`Hx-N№rЮ 9уЪгЂ"9уЪзЃРЃ#АvN№nHyа Hyбѕ:yа’/ HxЬШ:yхF/ Hx:C/ N№43Аа”Юь :9а”єyа’odJyатf\ yiѕ( fNHx+N№rЮB№vN№nHyа HyбѕHx#(:yађ/ :yхF/ Hx:C/ N№43Аа”Юь yiѕ3иа”Jyатf<:9вRE3ЕаЋEщв`0RHhяя:yаЋ/ N№5аPЏRyаЋ:9аЋєRmЪHx.Hyбѕ:yа”/ N№s<3ьаЋЮь :9аЋєyхFn*Aщбѕ09аЋHАгЂ7°RyаЋ:9аЋєyхFoЬ2yа”0yхRђщi’±Йl0yђРьъ±ЙlB№v`<2yа”0yхR09i’Бь‘А±Йl #щуЪv` 9уЪгЂР№уЪ#Аv yiѕ( g3ьат yЬШђl3ьат"9фцеЃ 9уЪгЂР№v°Ѓl3ьатJyатf6Aщб~0№а”JyхRf3РхR`0yхRРща” lRЂвЂ3АхR09хRHАЃь jD@` 09хRHАЃь @3Аi’:9а”Ъyf3Еа’:9хRєyа”l0`09а”ђygNђyi’3АађJyатgьr yiѕ3иа” yа n yС а”l yiѕh Dg®J№gжf 3щбВlvHxN№vТXЏ yШса”oZ yа nPHyањHyаљHyаHyа–/9iѕ:C/ N№+¦ yiѕ0(@BЃ2/:h/ :P/ NєчљЮь$`B9а¶N№ub yШса”g y'а”f3ьkОJykОgBylv yiѕ( f$"yiѕ0)HАAщmгЂ pg) g 3щhкnN09hкHАAщвRйЂ1№а”!№хV 1№фш1№хFJykЪg40HАAщуѕ"еЃ2yс®Ущфц* ›°AщуєгЂSpfN№xЦ yiѕ( gJykЮg3ьi yоhкo3ьi 3щаћфоByхF/9Я€N№ішBЂLо<<яаN^NuNVHз<.6nR№хV0.я¬HАAщЧ|гЂ=pяЄ0G2yхFV‰іИm/. N№6€XЏ`*n BU*n UoBЂ`:n/ :n/ :K/ :G/ :nяЄ/ :nя¬/ N№І=@яёЮь @#(nЬ¶ьopJyхNfb4HВAщn"гЃJpfNJyggа0.яё°noФ°nlМ GoДAщашJpg¶Jpюg®2K0yхF‘ВR€±ЙfњRK`–6.яё¶nm>JyхNf~2HБAщn гЂJpfj0.я¬HАAщnгЂ po 0yхFR€±БgH6.яё¶nnB2G0yхFX€±Йo4 Go. Aщб>гЂJpgCияьJqgKщб:60¶ug6|ByуТ¶ьodJyQg\ GoVHnяёHnHn:K/ :nя¬/ N№$0HАгЂ*n;№уТBuЮь n±аf0.яё`r6.¶no0`b yхFf4<`4< 2G0yхFРВ±Йm¶ьn6.яё¶no0.яё`( Go4¶ьo:G/ :nя¬/ N№¬PЏ`:G/ :nяЄ/ :nя¬/ N№%кЮь 0HАAщвгЂ60¶pf0.яё`РBЃ¶ьn(0HА0yхFR€±АlAщб>гЂJpf JyiВfr=AяЁ¶ьo8<С `8.яёёno=D0HАAщвгЂ=pяў:.яў<HЖ&гѓ-Cя¤`ёnn& GoAщв гЂ0pHhяя:E/ N№5аPЏ2HБ гЂзЃРЃ$@Хь‚0б@Рj=@я  гЂBvЖJnяЁg2nяёТк0n±ЙnВ GfтJyi®g:j/ :R/ :E/ N№‡,Юь єyвoИ4”yхR2D’кёnl"9уЪгЃ 9уЪзЂТЂ#Бv`0B29i’HБ DЂ°€l"0I еЂ°€l 9уЪDЂHx/N№ЅтPЏ`\0B09i’HАDЂ°€lB№v`J0B09i’Бьяэ°€l #щуЪv`.0B09i’Бьяч°€l 9уЪгЂ` 9уЪеЂР№уЪ#Аv* fTHnя°HnяІHnяґHnя¶/ :nя¬/ N№+¦Aщаъ гЂ6*C1ѓAщn6*CЂ1ѓAщб~1ЄHnя®HnяД0.HАDЂ/0.HАDЂ/0KHhяя*FHm:nяЄ/ NєъшD@5@Юь4l 0*HАDЂ`0*HА Ђ#(oj@` nя®f J0*lR@в@1@ nя®n20yhкђщnNvc¶€m 0j <'ђ†°€f>AщбB гЂJpf.jj@6.я¬¶yjf 5yg` 69gDC5CHnя°HnяІHnяґHnя¶/ :nя¬/ N№/°ЮьёjlJyатf¶ьo6*¶no* f6 Чj8*=Eяўёno=D4`0HАгЂ*n;¶ДRB0HАгЂJvДfв*nBu гЂ;®я  Gf¦ёnff2HБ гЂзЃРЃCщ‚УАAояє Щ Щ0‘4SBk(EщЊ2HБ гЂзЃРЃAщ‚САCт"Ш"Ш2ђSBjЮCояє#Щ‚Aщ‚X€ Щ0‘Bnяў yхFo.ёnoHx+`ёnlHx-`Hx&/.:D/ N№s<Юь &9хV¶№фжo B§N№vТXЏJyатgAщб| гЂ00HАDЂ`FREAщв&.я¤єp8mыЦ0.яўHА"гЃзЂТЂ$AХь‚0б@Рj=@я JyQg>ѕyхFn6*n JUf.ёnf(BЂ0.я /:n/ :n/ :K/ :D/ :nя¬/ N№О¶ьoѕ0н@4Фj nя¬fB0BCщхZ 0•b0 гС00j09hкHАCщвRйЂ01@яBЃ2І€g@ёnn0HАAщfЮгЂ1®я `&0HАCщffгЂ6.я ¶qgAщfў1±3ѓ D#(o0HАAщf*гЂ1®я `0HАAщf*гЂBp0HАLо<ьяxN^NuNVHз>88. :.6.4.<.6n0HАAщс`гЂ00D@ђyb2HБAщlrгЃРp2HБгЃђp3АzCщnBiBQBЂ P°fJyi¤g"Jyа¬g y°ltfJyiўgJyаЄfp3АiВgB@`PBЂ CgF¶yхFm>JBf4yz0F2yhъ‘Й±КlAс°±КnJBl2yz0FРьяз±Йl 0KРь±ЙopJ@gђR№kТ0HА"пЃEщiКХБ/ /N№8т0HАAщg’лЂ00HАгЂPЏJrnt0HА"пЃEщiКХБ/ /N№8т0HАAщg’"лЃ20HБгЃPЏJr^БA3БхNHyz/N№:L`n8D/ 0HАAщg’лЂ8p/ N№7$PЏJЂg <'(@Г `°8E/ 4HВAщg’ лЂ8p/ N№7$3АхNPЏJyiВgHyz/N№<ф0HАAщсb$г‚0HАCщlrгЂ8yzс0 2HБгЃРq1Ђ(JyхNgCщб@09фтHАAщтІгЂ3°(`0HАAщб@гЂBp09zHАLо|яаN^NuNVHз 4."nJn f yфк`yяюфк29фкAяHБ еЂзЃРЃ @Сщб>#Иiґh nN$Pµщg"fDR№сў3иуТ(g$n4Ё$n4ј±аp` yi(g 4hґСoSJ2ЉBЂLояшN^NuNVHз>4.8.:.<.6.Jn f yфк`yяюфк29фкAяHБ еЂзЃРЃ @Сщб>#Иi №g"1D 1B1CBhєBoh`јBl yih` yihLо|ямN^NuNV/JyQg(B‚ еЂ"зЃРЃ @Сщб>#ИiBh R‚ ‚яoЪ$.яьN^NuNVHз>0:. 8.0HАAщЧ|гЂ<0JyуТf0HАAщf*гЂ3раЪ` 3щуТаЪ0HАCщffгЂ3саЮAщfў3раТAщfЮ3раЦByав Do3сьав0HАAщвгЂCщв1±AщЪю0HАCщЪцгЂ0±6PRK3ЛЫ AщхJ40m46HГ лЂEщg’ХА6F/ /0HАгЂ6r/ 6D/ N№!љЮьSBjЬ2HБAщgв гЂJpfМAщkЦJpfѕAщg’ лЂ60B§4C$ T‚// /N№)DЮьJЂg<6F/ // 4HВ/N№$hAщвг‚20(HБSЃAщ‚ гЂзЃРЃpЮьB§4C$ U‚// HЕ/N№)DЮьJЂg8HЖ/// 4HВ/N№$hAщвг‚20(HБSЃAщ‚ гЂзЃРЃpLо |ядN^NuNVяшHз?<=n яю>.:.<.0HАAщmгЂ60AщЧ€=pяь0HАAщЪигЂJpg°AщЪь800HАгЂ-@яшKщlЋ`|0HАAщЫгЂ:06.яьЦE4F6G8nяю`R0HАAщШгЂ402HБ гЂ ugјuf4/ // / N№$hЮь`/ HВ// / N№$hЦEЮь0@€g¦RDAщЫ "nяшёq€oяt`О CfFJEfR4G(<lћ$ г‚"B qHf<:F/ Hj/ 8nяю/ Gщ$hN“AщkJЮь p(fr"D q(fh/ Hj`V EfZ4G(<l~$ г‚"B qHfD:F/ Hjяш/ 8nяю/ Gщ$hN“AщkJЮь p(f"D q(рf/ Hjяр/ / N“Юь0HАAщЪьгЂ800HА*г…`d0HАAщЫгЂ6.яьЦp0@€fF0HАAщШгЂ400HАAщlЋгЂјpgґyi–f2F/ HВ/2G/ 2nяю/ N№$hЮьRDAщЫ ёpXoђ`‚0HАAщЪьгЂ800HА$г‚`Z0HАAщЫгЂ6.яьЦp0@€f<0HАAщШгЂ20HБAщlЋ гЂєpg2F/ /2G/ 2nяю/ N№$hЮьRDAщЫ ёp(oљLо<ьяРN^NuNVHз< 8.6.:.0. HАAщвгЂ20HБ$г‚зЃФЃ$BХь‚RpBj4„5C0б@РCBB°yаЪf4<Р`6°yаЮf4<<`(°yаТf4<2`°yаЦf4<(` °yавf4<0HАAщlЋгЂ pg<j¶yфтfBф0HАAщmгЂ00HАCщЫЉгЂ2HБгЃ01ђpФ@0HАAщmгЂ pf\0HАAщkJгЂJpg pf jB `60HАAщkJгЂ pg pf jЂBX`¶yi–fj 0н@2ТCJEfAAщхZB@0Ф@B±а5BLо<ямN^NuNVякHз?<4. =nяю6.0HАCщвгЂAщв3°00HА"гЃзЂТЂ$AХь‚AщЪю0HАCщЪцгЂ0±8PRL3МЫ JBf=|яь=|яъ` =|яь=|яшяъ0HАлЂЂg’-@яцBnяк0HАгЂ-@ятHГ-CяоGщв`Њ0.якHАгЂ(nяц>40HАAщЧ€гЂ=pямIщm<40HАAщЪьгЂ20AщЫ 2pAщЪиJpgд8ІДm,0HАгЂIщЫ642.ямТC*.яог… E`¤0HАгЂIщШ440HАгЂIщlЋ tfТC`z0HАгЂIщlЋ:tєояюfn4‡5B5|0HАгЂIщm04HАгЂIщЫЉKщу2:4Ъu0ђF5@ Ff Bo B7o j5|LФь Rs€` 0@€gяVRDІДlя,`R8ІДm°&.яогѓ0HАгЂIщЫ2.ямТt0@€f„0HАгЂIщШ440HАгЂIщlЋ:tєояюf\4‡5B5|Iщm04HАгЂIщЫЉKщу2:4Ъu0ђF5@ Ff Bo B7o j5|LФь Rs8RDІДlяZ Ff”0HАAщkJгЂ8pёояьf|4Фnяъ0HАгЂIщlЋ tfb4‡5B5|Iщm04HАгЂIщЫЉKщу2:4Ъu0ђF5@ Ff Bo B7o j5|LФь .яогЂRsRnякAщхJ(nят:nякєф€oэbLо<ьяВN^NuNVHз><6. 8n6n2.0HАAщЧ|гЂ<0ёЛl4 VB8 SD:<` 4 YB8 RD:<яяJAfё0 HАAщmгЂ pfњ0HАгЂ pfЊAщlЋ¶pf~0 HАAщlЋгЂ pfj0HАгЂ pf\ Eяяf0EKр° AщlЋгЂ pf>:F/ :L/ N№7$PЏJЂf*:F/ :K/ N№7$PЏJЂfHЖ/0EHpАN№7$JЂgфBЂ`р Af0HАAщkЦгЂ1ј`0HАAщkЦгЂBp Af 0 6L8@0840 HАEщmгЂ5јCщlЋ3ѓAщтІBp< HЖ"гЃBr3ј2HБгЃ5ј3ѓ:HЕ$г‚1°(Br(3ј(HГ$л‚00HАгЂCщg’УВ3‹00HАгЂ3„JyQg":K/ /Hx/Eщ2tN’HД//Hx/N’pLо<|яЬN^NuNV/4. 0.2.°noQ@`P@ AfHАAщmгЂBpAщlЋ1ј`HАAщmгЂ1јAщlЋ1‚N№4$.яьN^NuNVяюHз?<<. (n &n$n4HВAщЧ| гЂ=pяю:8,3ьяяi–3ЕуК3ДфтBybRyhк09hкHАAщвR"йЃ0б@РD1Ђ, gBp1† HxHД/HЕ//Nєэ`n2HБAщlЋ$г‚4°(Aщm6°(0HАAщу2гЂ*n:°*n:°(09hкHАAщвRйЂ1“1’ RgpHx/:R/ N№3TЮь Sf 0HАйЂAщkк20(HБгЃAщg.САSp0HАAщm$г‚ p(fё0HАйЂCщkк21(HБгЃAщg.САSp0HАгЂ21HБгЃRp61(410HАгЂ2p0HАгЂ0pR€±ЙmZ0HАйЂ2HБгЃCщg.УА0q0HАгЂ2qR‰іИo yb`0JBg$ Bg0HАйЂ0BСИђГ"гЃAщg.САJpfyясb0.яюHАAщlr"гЃ0HАCщЫЉгЂ>1џp Sf AщiўpяњJyQg:D/ Hxяя:S/ :nяю/ N№2tЮь*n>Яyb2HБCщlЋгЃ6HГ гЂ3±Aщm1°Eщу25ІEщтІ5І4HВл‚22HБгЃEщg’ХВ5„3јBp2HБ гЂ pf$ ђѓ~ѕЂf>PG`0EђД~ѕ€f >QG3Зi–, gљ0HАAщmгЂ1ј4HВ"йЃAщkк00HАгЂAщg.СБSpAщlr гЂpиAщiўpяњAщiћ1јJyQg(Hxяя4E/ Hx/Gщ2tN“Hxяя/ Hx/N“Юь *n>џyb0HАAщmгЂ pf0HАAщgвгЂRp, gHxHД/HЕ/:nяю/ NєыЖ`*JyQg"0HА/HЕ/AщmгЂ:p/ HЖ/N№2tLо<ьяЦN^NuNVяъHз?<>. (n2HБAщЧ| гЂ=pяъ*n 8<-3ьяяi–Syhк- gHxHЖ/HД//Nєщ@`b0HАAщlЋгЂ:F-Mяь$ г‚1°(Gщm7і(Cщу2*n3•EщтІ5І(6HГ"лЃ02HАгЂEщg’ХБ5„1”(*n7•(*n3•(*n - gx0HАгЂ7ј йЂAщkк20(HБгЃAщg.САRpAщlr гЂpьAщiўpdJyQg*/.яьHxяяHx/Eщ2tN’/.яьHxяяHx/N’Юь TgтHx4HВ/:T/ N№3TЮь *n Uf$0HАйЂAщkк"гЃ20HБгЃAщg.САRp0HАAщm$г‚ p(f20HАйЂ2HБCщkкгЃ21HБгЃAщg.САSp01(HАгЂRp0.яъHАAщlr"гЃ*n0HАCщЫЉгЂ:1Ыp Uf AщiўpdJyQg :F/ Hxяя*n:U/ :nяъ/ N№2tЮь0HАAщmгЂ pf0HАAщgвгЂSp*n - gHxHЖ/HД/:nяъ/ Nєщ`*JyQg"HЖ/0HА/AщmгЂ:p/ HЗ/N№2tLо<ьяТN^NuNVHз?<8. :.6.<.JCm\6DEщQ"IщЅzHx Ђ/ N”PЏ @0HА$п‚бЂФЂAт€0HА"гЃеЂ*AЫАСВ.5€ї№g"Hx Ђ/ N”PЏХАХВ>5ЁїyфкJFmZ6DEщQ"IщЅzHx Ђ/ N”PЏ @0HА$п‚бЂФЂAт€0HА"гЃеЂ*AЫАСВ.5€ї№g"Hx Ђ/ N”ХАХВ>5ЁїyфкLо<ьяШN^NuNVHз<04. 6. nff0HАгЂAщхJСАSP0HАAщтІгЂ20HВGщхJ&гѓ(<g’EщтІ`$ лЂ0A*г… E"DУА1±€00HАгЂ5ЃRAІs8oЦ`:2HБAщхJ гЂRpлЃ40HВг‚Cщg’УБ3ѓ(2HБCщтІгЃ3°Lо <яиN^NuNVHз?<3ьяяi–BAAщg.Eи0HАгЂBrBpRA AoкAщlrCщiўBiBQBhBPAщхJBhBPByфкB№g"BDIщlЋKщm*<тІ,<Q"0HА$г‚ t(g*24(HБгЃ05(HАAщЫЉгЂCщlr>0Яq u(f604(HАAщiўгЂpd04(HАйЂAщkк20(HБгЃAщg.САRp0HАгЂ uf"EBq` 2HБгЃ04HАAщхJгЂRp"E3°0HАгЂ24HБлЃ"E01HАгЂAщg’СБ1„6HГ$г‚0t(GщЅzHx Ђ/N“PЏ @25(HБ пЂбЃРЃСЖеѓ$BХГСА.2€ї№g"0t(Hx Ђ/N“PЏ @25(HБ пЂбЃРЃСЖСА>2€їyфкRD D?oюѕLо<ьяШN^NuNVяцHз> 8. <.0HАAщ‚"гЃзЂТЂ60:4RBјBm$Aщ‚0HА"гЃзЂТЂ00¶@l6:RBјBlвёEgF2HБCщ‚ гЂзЃРЃEсAояц Ъ Ъ0’4HВ"гЃз‚Т‚AсEс$Ш$Ш4ђAояцУБ"Ш"Ш2ђLо|яЮN^NuNVяЂHз0 $nBCBR2yhк0ynNV€±ЙlpBB0HАгЂBvЂRB B?oо49hкґynNoNCщвR0HАйЂ210аHAяHАгЂAцЂRPfSC`RC0HАгЂAцЂSPfSC`RCJCfRRSBґynNnёLо яtN^NuNVяьHз?<6. 4.0HАAщЧ€гЂ<0JBf2Aяс`2A0@€f00HАAщШгЂ00HАAщmгЂ pfAщlЋґpgBJBf2Aяп`2A0@€f00HАAщШгЂ00HАAщmгЂ pfAщlЋґpgш0HАAщg’лЂ:p/ HГ/N№`~ѕЂgФ0HАлЂGщg’ЧА:<0HАгЂ-@яь4FIщЫ8`І0HАгЂ03HАAщmгЂ80 DgђAщЧ€60 JђГ°ьl DЂ`*JљГ AщШшгЂ40g`0HАгЂ2HБAщЫ|гЃ04АpgD Dg:¶FoDB2ТBјAg(CщШAщlЋ0HАгЂ01HАгЂ pfТBјAfдјAfp`REAщхJ..яьєpxoя@BЂLо<ьяФN^NuNVяьHз?<4. $n BA0HАгЂBrRA A?oоAщЪю0HАCщЪц"гЃ0±8PRL3МЫ лЂKщg’ЫАBG0HАгЂ-@яьGщЫCщШ`Ф0HАгЂ05HАAщЧ€гЂ<0Aщm00HАAщЫгЂ:0AщЪь20AщЫ 80AщЪиJpgJ4ёBmzAщlЋ0HАгЂ632`0HАгЂ01HАгЂRr‹r pf ТC0@€gШRBёBlД`64ёBm00HАгЂ2Тs0@€f0HАгЂ01HАгЂRr‹rRBёBlРRGAщхJ(nяьѕt€oяLо<ьяФN^NuNVяъHз?88. $n Aщg’3Рhт3и kвN№]Ж0HАAщЧ|гЂ6pBnяьBnяъByуЦ yуЦnц.<iКIщg.09уЦHАAщЧ|гЂ3руОJyуЦf 3щkвб6` 3щhтб609уЦHА"пЃТ‡#БlЉ29уОHБ$п‚Ф‡#Вl‚йЂРЊ#АhюйЃТЊ#БhцBC*<g’`D29уЦHБлЃ0HАгЂ EСБ402D/ HВ/N№BH29уЦHБгЃСvъAщу2г‚1Ђ(PЏRC09уЦHАAщхJгЂ¶po¦RyуЦ yуЦoя0HАAщnгЂ po <9акЭvъ0 HАAщnгЂ po <9акЭvъ4HВAщlrг‚0 HАгЂ20(’pТv(ъ’vъA 4ЃJylzgNєЕѕ2ylz/ /N№ѕ^СRJRo60HАAщiўгЂJpf$AщаЄ p%nBR` R%n J0lR@в@0ЂJRl>0 HАAщiўгЂJpf,AщаЄ p%nBR`0HАDЂ Ђ%n J0lR@в@0Ђ0 HАAщlrгЂ p°f0HАAщаЄгЂ pcoRИ0HАAщlrгЂ p°f0 HАAщаЄгЂ pcoRя8LоьяЦN^NuNVяюHз?<8n N№]ЖAщlr<јho4|`4|2 HБAщЧ| гЂ=pяюAщg’лЃ>02.яюHБлЃ:0BCAщiўJpoZ4<8 HД,г†&FKщg’`6"лЃ0HАгЂAх2p/ 2E/ 2G/ 2nяю/ /2L/ N№>>Ц@ЮьRB,<хJґshoѕ`p2 HБAщаЄ гЂ pБfHЕ/HЗ//N№A6`F0 HАGщаЄ(г„ scHo04HВ/HЗ/N№`AщЬЮг‚20(гAAю <3HњA2г@6–@ґМf"n `"n DC2ѓLо<ьяЦN^NuNVHз?08. 2.4.6n<.6.0HАAщхJгЂ pf:<2`:<xJAfЁґDf0HАAщkJгЂ40SB`0HАAщkJгЂ402HБEщkJ гЂґrn./8HД/N№`0|ђВ±Аo гЂ22гA02з@Т@ЪA`0HАAщkJгЂ00Бь2:Eф0HАAщkJгЂ pnC`°PC`ЄґDf0HАAщkJгЂ40RB`0HАAщkJгЂ402HБEщkJ гЂґrm0/8HД/N№`0BR€±Аo гЂ><ћr02гAз@Т@ЪA` 0HАAщkJгЂ><ћp0Бь2:Eф0HАAщkJгЂ poCяр`QC0HАCщkк"гЃ0q0HАгЂђс°ьl 41”q`2HБAщkкгЃ0HАгЂ40”p0HАCщkJ"гЃ0q0HАгЂђс°ьl 01ђq`2HБAщkJгЃ0HАгЂ>0ћp08Ш@0 HАCщkк"гЃ0q0HАгЂђс°ьl 41”q`2 HБAщkкгЃ0HАгЂ40”p0 HАCщkJ"гЃ0q0HАгЂђс°ьl 01ђq`2 HБAщkJгЃ0HАгЂ>0ћp0РB@0з@Ъ@0HАLо ьяаN^NuNVHз><<. :.8.0HАAщаЄгЂ60CюФJyфвf0`20HАAщkJгЂ20HБйЃAщkкt*Bљр$ г‚AщjКСБ00(HАAщЭ^гЂЦp0HАCщkк"гЃ0q0HАгЂђс°ьl 41”q`2HБAщkкгЃ0HАгЂ40”p0HАCщkJ"гЃ0q0HАгЂђс°ьl 01ђq`2HБAщkJгЃ0HАгЂ:pљр0 РB–@8D/ 4HВEщg’л‚:r(/ Gщ`N“–@/ :r(/ N“–@0HАLо<|яЬN^NuNVяьHз?<6. :n0HАAщmгЂ<0 ylЉ>0GOя6G yl‚>0GOя4GAщkJ:0Aщkк40Bnяю FfJyуЦfAщmЋ=pяю C g C f0HАAщlћгЂ pg >9сћЯnяюJBg0HАгЂ @СщhюJhяюf, Bg0HАгЂ @СщhюJhf0HАAщЫжгЂ>0`0HА yhюгЂ po >9ZЯnяю¶ь?яnl0HАгЂ @СщlЉ h?яnV0 ЂяAщЫцгЂ2.яюТp=Aяю0HА yhцгЂJpf ТykК=Aяю0HАAщlћгЂ pg >9с¦Яnяю0HА yhцгЂJpfжєьf4SB`4B„29kвHБAщkJ гЂґpn/8C/ N№`0|ђВPЏ±АoxґьgєьfBB`4<2PA A?n@ yl‚CщlЋ0HАгЂ p?яo4<` 0HАгЂJpn qg4<PA A?oМ Bf0HАAщЫЦ`RJDf Bf0HАAщЫЖ`:Jyа¬o0HА`$0HАAщЫ¦гЂ>0`т FfJ yуЦf>0HАAщiгЂ=pяю C3g C4f0HАAщl~гЂ pg >9сћЯnяюJBg0HАгЂ @СщhюJhяюf, Bg0HАгЂ @СщhюJhf0HАAщЫжгЂ>0`0HА yhюгЂ po >9ZЯnяю¶ь?яnl0HАгЂ @СщlЉ h?яярnV0 ЂяAщЫцгЂ2.яюТp=Aяю0HА yhцгЂJpf ТykК=Aяю0HАAщl~гЂ pg >9с¦Яnяю0HА yhцгЂJpfѕєьf4RB`4B„29hтHБAщkJ гЂґpm/8C/ N№`0BR€PЏ±АoxґьgєьfBB`4<2QAk< yl‚CщlЋ0HАгЂ p?яo4<`0HАгЂJpn qg4<QAjР Bfp(@Е AщЫЦ`0JDf Bfp(@Е AщЫЖ`JyаЄo2p(@Е AщЫ¶гЂ>9f&Пр Hx /N№ЅтPЏСnяю`ѕp(@Е AщЫ¦гЂ>0`ў Ff"09уЦHАпЂ2HБгЃAщZСА=pяю`~ FfN29уЦHБпЃ0HА$г‚AщсІСБ=p(яюHnяьHnяю/N№O€0.яьHАAщЬгЂ>0ЯnяюЮь `* Ffb>9i¶ЯnяюHnяьHnяю8C/ N№O€0.яьHАAщЬ"гЂ>0Яnяю0HА yhюгЂЮь Jpf >9уЖЯnяю0HА yhцгЂJpf >9i¦Яnяю09уЦHАAщЧ‚гЂєpf09уОHАAщiўгЂ pdon яю yf&ot8.яюD0HАCщkк"гЃ0q09б6HАгЂђс°ьl 41”q`2HБAщkкгЃ09б6HАгЂ40”p0HАCщkJ"гЃ0q09б6HАгЂђс°ьl 01ђq` 2HБAщkJгЃ09б6HАгЂ>0ћp0РB@=Dяю`В Ffв yf&o°8.яюD0HАCщkк"гЃ0q09б6HАгЂђс°ьl 41”q`2HБAщkкгЃ09б6HАгЂ40”p0HАCщkJ"гЃ0q09б6HАгЂђс°ьl 01ђq` 2HБAщkJгЃ09б6HАгЂ>0ћp0РB@=Dяю8yб6/ 8C/ N№`PЏ~ѕЂmдn яю`Ъ FfТ29уЦHБпЃ0HАгЂAщувСБ=pяюJyажo.09уОHАAщхBгЂJpfJyf&oHnяю8C/ N№LTPЏ09уЦHАAщkЦгЂJpg>9gЪ`09уЦHАAщgвгЂJpg >9сVЯnяю0HА yhюгЂJpf >9вЯnяю0HА yhцгЂJpf >9~Яnяю Bg Bg Bg Bf<0HАгЂ @СщhюJhяюf >9вЯnяю0HАгЂ @СщhцJhяюf >9~Яnяю Bg Bg BgJBf<0HАгЂ @СщhюJhf >9вЯnяю0HАгЂ @СщhцJhf >9~Яnяю Bf( yhюJPf >9вЯnяю yhцJPf >9~Яnяю Bf, yhюJhf >9вЯnяю yhцJhf >9~ЯnяюґьoЉ0HАAщЫгЂ00@Oя¶ьg 2J0@R€±ЙlF>9аоЯnяю09уЦHАEщnгЂRr Fg@HЖ/HГ/N№QJЂg.09уЦHАгЂRr` Ff¶Кl°Jo¶ь?яn >9бєЯnяю0.яюHАLо<ьяФN^NuNVяьHз?<=n яю$n BF0.яюHАAщЧ€гЂ=pяь09уОHАAщQгЂJpfAщiћJpgњ89ЫKщЫIщШGщlЋ`x0HАгЂ:54.яь`\0HАгЂ640HА"yl‚"гЃ01@g,>3ѕyуОg ylЉJpg01@я @oRF`WR0HАгЂ sf ФE0@€gљRDёyЫoЂ09уОHАAщфюгЂJpfAщiћJpgњ89ЫKщЫIщШGщlЋ`x0HАгЂ:54.яь`\0HАгЂ640HА"yl‚"гЃ01@g,>3ѕyуОg ylЉJpg01@я @oRF`WR0HАгЂ sf ФE0@€gљRDёyЫoЂ09уОHАAща®гЂJpg„89ЫKщЫIщШGщlЋ``0HАгЂ4.яьФu0@€fH0HАгЂ04HА"yl‚гЂ1g,>3ѕyуОg ylЉJpg01@я @oRF`WRRDёyЫo"J0HАAщЬ>гЂ>9ажПр l~Р‡иЂСQBFBA0.яюHАAщЧ€гЂ=pяь89ЫKщЫIщШGщm`t0HАгЂ4.яьФu0@€f\0HАгЂ640HАгЂ sf2<0HА yl‚гЂ"ylЉ>0ѕqo$RF0g po qяn 09аже@‘RRDёyЫo„JAf>9ажџR Fo>9ажџRLо<ьяФN^NuNVяъHз?<0. $n (n29уЦHБпЃKщgкЫБBTHАAщЧ€гЂ=pяюAщm<00HАAщЪьгЂ:00HАгЂ-@яъGщm`8<яя0HАAщЫгЂ604.яюФCCщlЋ`в0HАAщШгЂ200HАгЂ>5ЯR qfRTФC`¶JDl"0HАгЂ sg¬ sgў8ФC`ђ0HАгЂ>1ѕyуОf†јsm yl‚Jpfr0HАгЂ>1ѕyуОfL>9iЯR yl‚Jpg" ylЉ0p03HАCщЫгЂ2qR‰іИl*09уОHАAщnгЂRp`>9g&ЯR` 0@€gяREAщЫ ..яъєpxoюаLо<ьяТN^NuNVяьHз?<2. :.0HАAщЧ€гЂ<00HАAщЪигЂJpg¤AщЪь600HАKщЫ гЂ-@яьIщЫGщШEщlЋ yl‚``0HАгЂ844ФDCщm`@0HАгЂ230HАгЂ>2ѕyуЦg,Jpg єqo0HАгЂ>2ѕyуОg ФD0@€gёRC..яь¶uxo–`r EfкJyуЦfPA`QA0HАAщlЋгЂ pf"ylЉ yl‚>1ѕplЄ09уЦHАAщЪцгЂ00HАAщЫгЂ4Фp0@€f&0HАAщШгЂ00HАAщlЋгЂ>0ѕyуОgV09уЦHАAщЪцгЂ00HАAщЫгЂ4Фp0@€f°0HАAщШгЂ00HАAщlЋгЂ>0ѕyуОf€BЂ`„0HАAщЪьгЂ600HАKщЫ "гЃIщЫGщШEщlЋ yl‚Cщm`<0HАгЂ4Фt0@€f&0HАгЂ03HАгЂ>2ѕyуЦg Jpg€єqo‚RC¶uoѕpLо<ьяФN^NuNVяшHз?BhBPAща®BhBPAщQBhBPAщфюBhBPAщiћBhBPBDЮь.<g’IщmGщх>Eща®CщQBB6HГ*г…`n"лЃ0HАгЂ GСБ00HАгЂ0t SЂ|°†bHгЂ<;Nы` (0 гЂRs`* гЂRr` гЂRq`Aщфю`Aщiћ гЂRpRBKщхJґuXo†RD DoяrAщхBJPf.BЂAщm Pg hg hg h gp3АхBAщхDJPf.BЂAщmЂ Pg hg hg h gp3АхDJyсЄfh yf&n^BЃ09hтHАAщkкгЂ pn09kвHАгЂ pn*09hтHАAщkкгЂ po09kвHАгЂ pnr3БсЄHyZHyЭЮEщa4N’HyЪHyЭЮN’HyсІHyЮ^N’Hyт2HyЮ^N’Юь HyувHyЬЮHyЬ^Eщ`ОN’HyфbHyЬЮHyЬ^N’BGЮьIщkк0HАгЂ:4AщkJ=pяь=|яъ=nяъяю4 B?n AщjJ0HАгЂ p?яoBnяюPB B?oж4mAщiК0HАгЂ p?яoBnяъQBjк89уІ2JEg0HАAщg,гЂJpf Eg0HАAщg0гЂJpf29у¶JEg0HАAщg<гЂJpf Eg0HАAщg@гЂJpf89у¶6HГ$г‚GщЮЮ0Бу(EщЅтHx /N’PЏKщmЋ;Ђ(p?ђѓгЂЙу Hx /N’PЏKщi;Ђ(KщmЋ<9сRЭu(Kщi<9сRЭu(JykЦfJygвg> Eo Eoj:yhт/ 4HВ/N№`PЏ|јЂmN гЂKщmЋ<9вЭu`8 nяьn0 Eo Eo$0HА"гЃ$09вlR@в@KщmЋРu(;ЂJykШfJygдg> Eo Eoj:ykв/ 4HВ/N№`PЏ|јЂmN гЂKщi<9вЭu`8 nяьo0 Eo Eo$0HА"гЃ$09вlR@в@KщiРu(;ЂJyсЄg 09hтHАгЂ tn En09hтHАгЂ to* En$4HВг‚KщmЋ25(Aял0.яьг@РnяьТ@;Ѓ(09kвHАгЂ tn En09kвHАгЂ to En2HБгЃ0.яьг@РnяьKщi‘u:ykв/ 6HГ/Eщ`N’$г‚KщZ25(ZA’@;Ѓ(:yhт/ /N’KщZ25(ZA’@;Ѓ(:yhт/ /N’KщЪ25(ZA’@;Ѓ(:ykв/ /N’KщЪ25(ZA’@;Ѓ(KщсІ<9iєЭu(Kщт2<9iєЭu(BBЮь EщgІ8HД&гѓ`.0HАгЂ:r/ /N№`PЏ|јЂmKщZ<9g*Эu8RBґyхLoКBBEщg’8HД&гѓ`.0HАгЂ:r/ /N№`PЏ|јЂmKщЪ<9g*Эu8RBґyхJoКJnяюg0HАгЂKщZ<9с^ЭuJnяъg0HАгЂKщЪ<9с^ЭuJnяюg0HАгЂKщсІ<9rЭuJnяъg0HАгЂKщт2<9rЭu yQf0HАгЂKщсІPu yQf0HАгЂKщт2Pu yа®f0HАгЂKщZZu yа°f0HАгЂKщЪZu0HАAщmгЂ pf62.яьlRAAяю<.яьњA20lR@@яюљ@0°AfByфв`3ьфв0HАAщgк$г‚EиЂBr(Bp(:yhт/ /N№`PЏ|јЂf5№в(:ykв/ 4HВ/N№`PЏ|јЂfAщgк гЂ1№вBnяшBBGщmCщkJ:HЕ,г†$F0HАгЂ sf€AщlЋJpfJ6< qf8PD`8D2PA A?nnAщjJ0HАгЂ p@n sfBCPA A?oа`F6<0HАгЂ qf8QD`8Dяр2QAk"AщiК0HАгЂ p@n sfBCQAjдJCgv0rИ0HАгЂђф°ьl 64–rИ`"гЃ0HАгЂ64–t"гЃ0q0HАгЂђс°ьl 01ђq`"гЃ0HАгЂ<1њq02Т@0е@Т@Уnяш`p"гЃ0t0HАгЂђф°ьl 64–t`"гЃ0HАгЂ64–t"гЃ0q0HАгЂђс°ьl 01ђq`"гЃ0HАгЂ<1њq0РCСnяшRB B?oюbJnяшg00.яшБщв Hx /N№ЅтPЏ2HБAщувгЃ‘pРьЂ‘pRG G?oшFLо<ьяРN^NuNVHз00Aщlr6¶yвf6(¶yацg*Aщlr3Шв3РацAщаЄEщiў09вђZ@ыP0ЂCи09ацђR@ыP2Ђ4ФQ BИoByf&`* Bwn 3ь f&`Hx6|И–В/ N№ЅтPЏ3Аf& BoByв `* Bwn 3ь в `HxЬ6|–В/ N№ЅтPЏ3Ав 3ьяссћ3ьяьс¦3ьятZ3ьяьkК6< –yf&3Гв3ь уІ3ьу¶3щf&сR0yf&HxHhN№ЅтPЏ3Аg*0yf& \ЂjRЂвЂ3Ас^0yf& \ЂjRЂвЂ3Аr29f&гA3Бiє3ь уЖ3ьi¦09f&е@Т@3Бi¶3ьg&3ь i09f&БьvвРѓjRЂвЂ3АвlR@в@3А~6< –yf&3ГgЪ0yf&HhHxяШN№Ѕт3АсVp &@–щf& lRЂвЂ3Ав yf&n09f&г@6<–@3Гаж`Byаж3ьяъбє3ьяшао3ьяфакLо ярN^NuNVHз<6. 8.0HАCщkк"гЃ0q0HАгЂђс°ьl 41”q`2HБAщkкгЃ0HАгЂ40”p0HАCщkJ"гЃ0q0HАгЂђс°ьl 01ђq`2HБAщkJгЃ0HАгЂ:0љp0°Bl0HАLо<ярN^NuNVHз08(n&n $nBѓ$г‚0t(2| ’щf&/ /N№ЅzPЏ @03(Бщf&Hx HpN№ЅтPЏ5Ђ(Rѓr?ІѓlєLо ямN^NuNV/"n n BЃ гЂ1±RЃt?ґЃlо$.яьN^NuNV/ HyaДHx EщПРN’HyaДHx N’N№ђђN№§$nяьN^NuNVN№§0Byi BF3щiфоN№†ђB№фъJylvgЮJyl~fФJ№gжfК/9ЯЊN№ішB§N№»а#АgЦB§29lvAяBЂ0/29lvаIBЂ0/N№¤Hyа¶t°ФЋ/N№»Д89i–v®ЦЋ/Hx/EщFN’Юь(JЂg8N№‡Hx2yj/ N№ /HxHyа¶N’ЮьJyхFoSyхFB§N№»ађ№gЦ#Афъ3Дi–XЏHzэXHx EщПРN’HzэHHx N’ЮьJFfx°ШЋJyi fN№‡/9ЯЊN№іш/Hzэ N№І3щiфоHnя®B§/N№F<Юьg2nя®Іщlvg ByхFB№фъHzэ /N№»hPЏJЂfN№yЂB§HxB§B§N№{–ЮьHzэw/N№»hPЏJЂf3ьi Hzэb/N№»hPЏJЂfJyi®WА@3Аi®HzэC/N№»hPЏJЂfN№j8Hzэ0/N№»hPЏJЂf<<Hzэ/N№»hPЏJЂfN№opHzэ /N№»hPЏJЂfJylnWА@3АlnHzьм/N№»hPЏJЂfB№gжHzьЩ/N№»hPЏJЂfJyhкmN№…Hzьѕ/N№»hPЏJЂfN№HzьЄ/N№»hPЏJЂfN№„ Hzь—/N№»hPЏJЂfN№Љ*Hzь…/N№»hPЏJЂfJyQWА@3АQHzьf/N№»hPЏJЂfJyl†WА@3Аl†HzьG/N№»hPЏJЂfN№‡љHzь7/N№»hPЏJЂfN№‡ЖHzь'/N№»hPЏJЂfN№‡шHzь/N№»hPЏJЂf0JykЮWА@3АkЮByхFHx2yi/ N№ <<PЏHzыЧ/N№»hPЏJЂf,JyiІWА@3АiІN№yЂB§HxB§B§N№{–ЮьHzыЎ/N№»hPЏJЂf:09jHАAщЧ|гЂ3рj09iHАгЂ3рiBylnByхF<<Hzы\/N№»hPЏJЂfByj3ьi<<BylnByхFHzы2/N№»hPЏJЂf3ьjByi<<BylnByхFHzы/N№»hPЏJЂfJyhкo Eщ…N’N’Hzъл/N№»hPЏJЂfN№ІHzъЧ/N№»hPЏJЂfN№ЃјHzъД/N№»hPЏJЂfN№€THzъІ/N№»hPЏJЂf3ьlzHzъџ/N№»hPЏJЂfJyl~WА@3Аl~HzъЂ/N№»hPЏJЂfN№€ЊHzъq/N№»hPЏJЂfN№€АHzъ_/N№»hPЏJЂfzB§N№»а*BѓBBXЏEщвGкяюHx2yi/ N№¬0RђУЦ€PЏRB B'oЮB§N№»ађ…//N№ЅтPЏ$HxHx2N№yZ//HzщмN№±ИN№y ЮьHzщм/N№»hPЏJЂfN№ЊtHzщЦ/N№»hPЏJЂfN№ЋJFgъцN№†^HxN№vТXЏJylng"3щij09jHАAщЧ|гЂ3рiHzшnHx EщПРN’Hzш^Hx N’Lо |я’N^Nu. Exit to main# Clear boardEnter piece & location: NVя°Hз 0N№yЂB§HxB§B§N№{–HxHx2EщyZN’Hzя–Gщ±ИN“HxHx2N’Юь$HzяЌN“HxHx1N’HzяЌN“BBЮьEщmGщlЋHxHxIN№yZN№y /9ЯЊN№ішHnя°HzцоN№ІЮь .#я°f.BA0HАгЂBr7јRA A?oиB§HxB§B§N№{–Юь .cя°g .Cя°f0HАAщЧ|гЂ40.я±HЃAяџ.яІHЂ@яПJAmР AnИJ@mВ @nєHАйЂHБгЃAщjКСА200HАгЂ7‚ .pя°f5ј`~ .nя°f0HАгЂ5ј`h .bя°f0HАгЂ5ј`R .rя°f0HАгЂ5ј`< .qя°f0HАгЂ5ј`& .kя°f0HАгЂ5ј`0HАгЂBr7јHБ/N№yОXЏ ..я°fю€ ymg3ь gв ym†g3ь gд3ьяяhкBynNByхFN№4N№yЂB§HxB§B§N№{–Lо я¤N^NuCHESS command summaryg1f3 move from g1 to f3nf3 move knight to f3o-o castle king sideo-o-o castle queen sideedit edit boardswitch sides with computerwhite computer plays whiteblack computer plays blackreverse board displayboth computer matchrandom randomize playundo undo last movelevel change leveldepth set search depthpost principle variationhint suggest a movebd redraw boardforce enter game moveslist game to chess.lstsave game to fileget game from filenew start new gamequit exit CHESSComputer: WHITEBLACKOpponent: Level: %ldEasy mode: ONOFFDepth: %dRandom: Transposition table: (press ESC to continue)NVHз0N№yЂHxHxEщyZN’HzьрGщ±ИN“HxHxN’HzьрN“HxHxN’Юь HzьщN“HxHxN’HzэN“HxHxN’HzэN“HxHxN’Юь$HzэN“HxHxN’HzэN“Hx HxN’Hzэ+N“Hx HxN’Юь$Hzэ6N“Hx HxN’HzэEN“Hx HxN’HzэMN“Hx HxN’Юь$HzэRN“HxHxN’Hzэ[N“HxHx*N’HzэdN“HxHx*N’Юь$HzэgN“HxHx*N’HzэrN“HxHx*N’HzэЂN“HxHx*N’Юь$Hzэ…N“HxHx*N’HzэЊN“Hx Hx*N’Hzэ—N“Hx Hx*N’Юь$HzэџN“Hx Hx*N’Hzэ¦N“Hx Hx*N’HzэЇN“Hx Hx*N’Юь$HzэґN“HxHx N’Hzэ№N“ЮьJyjfHzэІN“` Hzэ°N№±ИXЏHxHx N№yZHzэњEщ±ИN’Юь JyifHzэxN’` HzэvN№±ИXЏHxHx EщyZN’/9уЮHzэeGщ±ИN“HxHx N’HzэZN“ЮьJyl~gHzэTN“` HzэON№±ИXЏHxHx(EщyZN’0ygТ/Hzэ/Gщ±ИN“HxHx(N’Hzэ#N“ЮьJylzgHzэN“` HzьыN№±ИXЏHxHx(N№yZHzьшEщ±ИN’Юь JyQgHzьЖN’` HzьБN№±ИXЏHxHx(N№yZHzьФN№±И/9сZN№Є4Юь/9сZN№§ЋXЏ fмN№yЂB§HxB§B§N№{–Lо яшN^NuDepth= %d%c NV/. 0yфо°щjf.HxHx2N№yZHЂHА/0yхF/HzяєN№±ИN№y $.яьN^NuScore= %d%5s NVHз>84. (n Jyi®gю0yфо°щjfо<9ljHxHx2GщyZN“HВ/HzяЄN№±ИEщy N’6<HxHx2N“N’4<ЮьB…B„`lB§0HАгЂ24Aя:/04аH8/N№¤Юь Bg B g B g BfRC0C/Hx2N№yZN№y PЏHyа¶Hzя&N№±ИPЏRB0HАгЂJtf€N№y 3Гlj`0C/Hx2N№yZN№y PЏRCјClдLо|яаN^NuNVHз 0HzндHx EщПРN’HzнФHx N’Юь0yфо°щjf>4<0B/Hx2GщyZN“Eщy N’PЏRB B oЮHxHx2N“N’HxHx2N“N’Lо яфN^NuMy move is: %sDraw game!opponent mates!computer mates!opponent will soon mate!computer will soon mate!Nodes= %6ldNodes/Sec= %4ldNVHз8 yiѕ( g B§HxB§B§` yiѕ0(@BЃ2/B§2h/ 2P/ N№{–ЮьHxHx2N№yZHyа¶HzяN№±ИЮьJyl†g/9ЯЊHxN№ѕ”PЏN№y HxHx2N№yZ yiѕPЏ( gHzюЧ`N yiѕ hШсfHzюО`: yiѕ h'fHzюК`& yiѕ hЬШlHzюЖ` yiѕ h#(o HzюЛN№±ИXЏIщy N”Jyi®gN2yфоІщjf@HxHx2EщyZN’/9хVHzю¤Gщ±ИN“N”HxHx2N’/9hоHzю”N“Юь N”LояфN^NuNV/4. B§N№»ађ№gЦ#АфцXЏlB№фцr2У№фж"9фцІ№kжn BfО 9уЪР№v°№фцl yхFo3ьат#щфцkж BfB§N№»а#АgЦB№kжXЏHxd/9фцN№ЅzPЏ#А^J№фцo$"9фцТ№фъ//9хVN№ЅтPЏ#Аhо`B№hоN№JЂg yхFo3ьатBykЮr2Т№хV#БфжN№wш$.яьN^Nu%d:%02d NVHз08GщЅтHx`V6ј`P.яњHЃHБxџТ„.яќH‚HВxПФ„.яћHЂHАxџР„.яџHѓHГxПЦ„AщjКй‚гЃCр(21бAйѓгЂСГТp6ЃpLо я€N^NuFile name: chess.000%d %d %d %d %d %d %d %d %d %ld %ld %d %d %d %d %d %d %ld %d %d %d NVяЦHз88HzяN№†8/9ЯЊN№ішtШФЋ/HzбдN№ІЮьJ.яШfHzяt/N№»ДPЏHzэbHnяШN№ЖИ&PЏg‚HynNHyiHyjHzяH/Eщµ„N’HygдHygвHykШHykЦHzя,/N’Юь,Hyс®HykЪHzя!/N’Aщуј/HyуєHhHhHzя /N’BBЮь(GщmEщlЋHnяЦHzюы/N№µ„0HА"гЃ8.яЦаL7„0.яЦ@я5ЂЮь f5ј` 0HАгЂSrRB B?oІ3ьяяhкEщв\IкяшGщвRRyhк0yhк(й„ DHr€HpЁюHpЁьHpЁHpЁъHt€СьвR/Hzюk/N№µ„"09hкHАйЂЮь$Js f7ј `09hкHАйЂSs xяёЃfђSyhкJ№уѕo3ьkЪSyjSyi/N№і`N№4B§HxB§B§NєщоByхFLояѕN^NuwNVяШHз80HzэЋN№†8/9ЯЊN№ішtШФЋ/HzЯЪN№ІЮьJ.яШgHx/N№ІtPЏrяІЂfHzэVHnяШN№»ДPЏHzя HnяШN№ЖИ(2ynN/ 0yiHh0yjHhHzэ$/Eщґ„N’2ygд/ 2ygв/ 2ykШ/ 2ykЦ/ Hzэ/N’Юь42yс®/ 2ykЪ/ Hzьс/N’2yуј/ Aщує2P/ /(/(HzьЦ/N’BBЮь(EщlЋGщm0HАгЂ rf0|` 0HАгЂ0rRH0HАгЂ03HАбЂ"@HqЂHzь—/N№ґ„Юь RB B?oґBBґyhкnnEщвRBѓ0HАйЂ r f0|` 0HАйЂ0r RH2H/ 0HАйЂ2r/ 2r/ /2 2r/ 2r/ 62/Hzь%/N№ґ„Юь$RBґyhкoљ/N№і`Lо яДN^Nuchess.lst score depth nodes time score depth nodes time %5s %5d %2d %6ld %5d NVHз0 HzэђHzяrN№ЖИ&Hzяp/Eщґ„N’Hzяd/N’Hzя†/N’BBЮь ґyhкnђEщвR0HАйЂ22аI02@яB§HА/HБ/N№¤0lR@@яюЮь °BfHzя`HzяN/N№ґ„PЏ0HАйЂ0r//2 0r/0r/Hyа¶Hzя(/N№ґ„ЮьRBґyhкoяzHzя&/N№ґ„/N№і`Lо яфN^NuNVHз<809hкHАGщвRйЂ63аK83Dя4HВAщm гЂ pf84C/ /N№`PЏzєЂl$Hx// 09hкHАйЂ8s / N№)DЮь`\0HАAщm$г‚0HАгЂ1°(EщlЋ5І(29hкHБCщвRйЃ1±5±  p(f02(HАAщgвгЂSpJykЪg0HАAщlЋгЂ00HАAщуєгЂRpSyhкBykОByхFB§HxB§B§NєхpN№4Lо<ядN^NuNVHxHx2Nєу/.HzЫnN№±ИNєуHN^NuNVHxHx2NєтоNєу0N^Nu%2d: WHITE%2d: BLACKNVHxHx2NєтјPЏJyфоf0yhк RЂjRЂвЂ"@HiHzяґ`0yhк RЂjRЂвЂ"@HiHzяҐN№±ИPЏNєт¶N^NuYour move is? NVHxHx2NєтLHzяЮN№±ИNєт„N^Nu(%2d) %4sNV/4. 2.0.Jyi®g>0yфо°щjf0B§HА/HБ/N№¤HxHx2NєсмHyа¶HВ/Hzя¦N№±И$.яьN^Nuwindow: %hdNVHzямNєю”/9ЯЊN№ішHygNHzяЫN№ІN^NuNVHzяАNєюh/9ЯЊN№ішHyfHzяЇN№ІN^Nutry NVяШ/B§09lv@яHА/09lvаHHА/N№¤HzяРtШФЋ/N№»ДHyа¶/N№»(/Nєэц$.яФN^Nudepth= NVHzятNєэЪ/9ЯЊN№ішHygТHzя!N№ІN^Nucontempt= NVHzяоNєэў/9ЯЊN№ішHygHzюйN№ІN^Nuxwndw= NVHzятNєэn/9ЯЊN№ішHyhъHzюµN№ІN^Nu 1. 60 moves in 5 minutes 2. 60 moves in 15 minutes 3. 60 moves in 30 minutes 4. 40 moves in 30 minutes 5. 40 moves in 60 minutes 6. 40 moves in 120 minutes 7. 40 moves in 240 minutes 8. 1 move in 15 minutes 9. 1 move in 60 minutes10. 1 move in 600 minutesEnter Level: %ldNVHз0NєпLHxHx EъпN’HzрhGщ±ИN“HxHxN’HzюђN“HxHxN’Юь HzюљN“HxHxN’HzюЁN“HxHxN’Hzю¶N“HxHxN’Юь$HzюАN“Hx HxN’HzюОN“Hx HxN’HzюЬN“Hx HxN’Юь$HzюжN“Hx HxN’HzюфN“Hx HxN’HzяN“Byс®3ь<gЮ3ьnHxHxN’Юь$HzюцN“/9сZN№Є4/9ЯЊN№ішHyуЮHzюаN№ІЮь 9уЮSЂr °ЃbЦгЂ2;Nы(<N`r„–Ёє3ь<gЮ3ьn`¤3ь<gЮ3ьn`ђ3ь<gЮ3ьn`|3ь(gЮ3ьn`j3ь(gЮ3ь<n`X3ь(gЮ3ьxn`F3ь(gЮ3ьрn`43ьgЮ3ьn`"3ьgЮ3ь<n`3ьgЮ3ьXn ygЮ^А@3АkЪNємЉNєн0B§HxB§B§Nєп8Lо яшN^Nu %3d NVяюHз<8N№SlBnяюIщkJGщkкEщlЋ*<g.(<iК` JyiІg0.яюHАгЂ4<”t` 0.яюHАгЂ44JyiІg0.яюHАгЂ2<’s` 0.яюHАгЂ23p"@’В гЂ"@Hi0Бь"@HiNємH0.яюHАгЂ3туЦ29уЦHБAщЧ|$г‚3р(уО$й‚Ф…#Вhю49уОHВ&йѓЦ…#ГhцпЃТ„#БlЉп‚Ф„#Вl‚PЏ rfHzюмN№±ИXЏ`$2yi/ 2nяю/ N№BH/HzюМN№±ИЮьRnяю n?яюoюоHnяю2yi/ N№:LHxHx2Nєл‚2nяю/ HzеJN№±ИNєлґLо<явN^NuEnter piece: NVяЦHз?< .pяЩf<<`H .nяЩf<<`: .bяЩf<<`, .rяЩf<<` .qяЩf<<` .kяЩf<<`BFBnяЦKщkкGщmEщlЋIщg.`"JyiІg0.яЦHАгЂCщkJ4<”q`0.яЦHАгЂCщkJ41JyiІg0.яЦHАгЂ2<’u` 0.яЦHАгЂ25p"@’В гЂ"@Hi0Бь"@HiNєк$0.яЦHА"гЃ63427†5‡3ЗуЦ2HБAщЧ|(г„3рHуО(й„ШЊ#Дhю89уОHД*й…ЪЊ#Еhц*<iКпЃТ…#БlЉп„Ъ„#Еl‚2yi/ /N№BH/HzьІN№±И0.яЦ2HБгЃ7ѓ5‚ЮьR@=@яЦ n?яЦoюШHnяЦ2yi/ N№:LHxHx2NєйT2nяЦ/ HzгN№±ИNєй†Lо<ья®N^NuAtariSTAtari ST-series computer, VT52/CURSES modeCopyright, R. van't Veen. All rights reserved. 1987NV/ J9ЯЂg&/9f"N№Є4XЏJ№Я„fLHxяфHxLN№јА`<ьЯЂB§B§B§B§N№’#Аf"ЮьgB§B§B§B§N№’#АсZЮьfr#БЯvB№Яz`xHxHxHxEщјиN’HxEHxHxN’HxHxHxN’Юь$HxwHxHxN’HxHxHxN’HxfHxHxN’B9Я‚B9ЯѓB№Яvr#БЯz$nяьN^NuNV/ J9ЯЂgLB9ЯЂ/9сZEщ“тN’/9f"N’B§/9ЯnN№°lHxHxHxEщјиN’HxeHxHxN’r#БЯvB№Яz$nяьN^NuNVHз>0(.*. $.&.HxN№З|&@XЏ¶ьgBkBSB+B+B+J„f 29Яp’B`2J…f 09ЯtђC`0JAo0A±щЯnnJ@o 0@±щЯro / N№И `В<SF7F<SF7F0A±щЯnf0@±щЯrf7| `Bk J‚mґ№Яnl Jѓm¶№Яrm / N№И `n7B7C 0k RЂеЂ/N№З|'@XЏf / N№И `B0k2k RЂгЂ/HhN№ЅzPЏ/N№З| k Ђ kXЏJђf"/EщИ N’/ N’|#ЖЯvB№ЯzBЂ`Ћ6<¶kn.0HА$k$е‚0kHh/N№ЅzPЏгЂР’%Ђ(RC¶koТBC¶kn4BAІkn$0HА$е‚ k0HА p(гЂ1ј RAІkoдRC¶koМ/ N№”ШB№Яv|#ЖЯz Lо |ядN^NuNVHз0&n¶ьfr#БЯvB№Яz`B+ g/+N№И XЏ` k/EщИ N’/+N’PЏ/ N№И B№Яvr#БЯzLо яшN^NuNVHз0"n$n &nґьm&¶ьm JРйR€±щЯnn KРйR€±щЯror#БЯvB№Яz`3J3K / N№”ШB№Яvr#БЯzLо яшN^NuNVHз8"n i#P0)HА iеЂ2)HБгЃТ°#ABBґin4BAІin$0HА&еѓ i0HА p8гЂpRAІioдRBґioМB№Яvx#ДЯzLояфN^NuNVHз><*n$. &.(.*.»щf"gмHxN№З|(@XЏёьgЦBlBTB,B,B,J‚f 29Яp’D`2Jѓf 09ЯtђE`0J‚o–0mR€±ВmЉJѓo„0mR€±Гmx<SF9F<SF9F0A±щЯnf0@±щЯrf9| `9| 2mіДn>0mСЙ±Дo42m іЕn,0mСЙ±Еo"9D9E 0l RЂеЂ/N№З|)@XЏf/ N№И |#ЖЯvB№ЯzBЂ`†$l&m0lђн2mHi/N№ЅzPЏгЂР“0lђн"гЃРЃ$Ђ6<¶ln.0HА$l$е‚0mHh/N№ЅzPЏгЂР’%Ђ(RC¶loТ/ NєэжB№Яv|#ЖЯz Lо<|яЬN^NuNV nnB№Яvp#АЯzN^NuNV nnB№Яvp#АЯzN^NuNVьЯB№Яvp#АЯzN^NuNVB9ЯB№Яvp#АЯzN^NuNV"n BЂ yЯj`°RЂJ0fтB1N^NuNVHз80&n.B№Яvx#ДЯz o€·щf"f J+ k `„J+ j 2HБ kеЃ0+HА pгЂHЃA`2HБ kеЃ0+HА pгЂHЃA1ЃJ«gК2HБ kеЃ0+HАгЂР°°«eи`к  f./ N№њьXЏJ9Яg B§0SHh`т2k/ 0SHh`в  fB§`Т  f>0kРл "l^ЂxшА„ђЃDЂ6f6<BB¶Bo°Hx / NєюЮPЏRB¶Bnо`љ·щf"fМJ+ j|2HБ kеЃ0+HА pгЂH‚8D1„HxHxHxEщјиN’HxpHxHxN’‚я/HxHxN’Юь$HxHxHxN’HxqHxHxN’Юь`>0HА kеЂ2+HБ pгЃHЂ8D1„Ђя/HxHxN№јиЮь R9Яѓ`ІJ+ j 2HБ kеЃ0+HА pгЂHЃA`2HБ kеЃ0+HА pгЂHЃA1ЃJ«f 0HА kеЂ2+HБгЃТ°'A'A`B2HБ kеЃ0+HАгЂР°°«d'@` 2HБ kеЃ0+HАгЂР°°«c'@0kHh2S/ / N№¤4Lо ямN^NuNVHз 0$.&n B№Яvr#БЯz4|`3 HЂHА//NєььPЏRJJ3 fжLо яфN^NuNVHз8<*n..B№Яvr#БЯzBBґmn@HЂ6HГB§4B/ / Gщ¤4N“// Iъь N”0m// / N“Юь // N”PЏRBґmoЖ4<ґmlBHЂ6HГ4B/ B§/ Gщ¤4N“// IъьTN”/ 0m// N“Юь // N”PЏRBґmmЖLо<ядN^NuNV/ $nB№Яvr#БЯz/ N№ А* g<`*@BjBR$nяьN^NuNVHз8 "nB№Яvx#ДЯz4)ґin"0HА iеЂ2HБ pгЃ1ј RBґioЮ4`,BAІin$0HА&еѓ i0HА p8гЂ1ј RAІioдRBґioМіщf"f$HxHxHxEщјиN’HxJHxHxN’`zJ©f80HА iеЂ2)HБгЃТ°#A0)HА iеЂ2)HБгЃТ°#A`<2HБ iеЃ0)HАгЂР°°©d#@2)HБ iеЃ0)HАгЂР°#@LоярN^NuNVHз0 "nB№Яvv#ГЯz4)ґin"0HА iеЂ2HБ pгЃ1ј RBґioЮіщf"f$HxHxHxEщјиN’HxKHxHxN’`|J©f60HА iеЂ2)HБгЃТ°#A0HА iеЂ2)HБгЃТ°#A`@2HБ iеЃ0)HАгЂР°°©d#@2HБ iеЃ0)HАгЂР°°©c#@Lо яфN^NuNVHз<0&nB№Яvz#ЕЯz8+64RBґkn*0HА"еЃ k0HА pгЂ:0E1…юRBґkoЮ0HА kеЂ2+HБ pгЃ1ј 7D6ѓ·щf"f†HxHxHxEщјиN’HxKHxHxN’4+Юьґkn@0HА kеЂ2HБ pгЃ00@яHА/HxHxN№јиR9ЯѓЮь RBґkoА2k/ 2S/ N№°l`‚J«f60HА kеЂ2+HБгЃТ°'A0HА kеЂ2+HБгЃТ°'A`D0HА k"еЃ0+HАгЂР°°«d'p2HБ kеЃ0+HАгЂР°°«c'@Lо <яиN^NuNVHз88&nB№Яvx#ДЯz6`6BBґkn.0HА"еЃ k0HА"pьгЂ p80D3„RBґkoЪRC¶koВBBґkn$0+HА kеЂ2HБ pгЃ1ј RBґkoЬ·щf"f:HxHxHxEщјиN’HxMHxHxN’B9Яѓ8k/ 8S/ N№°l`jJ«f.0HА kеЂ'p0+HА kеЂ2+HБгЃТ°'A`60HА kеЂ(+ё°c'p2+HБ kеЃ0+HАгЂР°'@LояиN^NuNVHз80"nB№Яvx#ДЯzBBґin4BAІin$0HА&еѓ i0HА p8гЂ1ј RAІioдRBґioМіщf"fFHxHxHxEщјиN’HxEHxHxN’B9Я‚B9Яѓ yf"6h/ 6P/ N№°l`$ i#P0)HА iеЂ2)HБгЃТ°#ALо ямN^NuNVHз>0&n.B№Яv|#ЖЯz6+84+SB¶Bn(0HА"еЃ k0HА pгЂ<0F1†SB¶Boа·щf"f†HxHxHxEщјиN’HxKHxHxN’4+Юьґkn@0HА kеЂ2HБ pгЃ00@яHА/HxHxN№јиR9ЯѓЮь RBґkoА2k/ 2S/ N№°lPЏ`|J«f60HА kеЂ2+HБгЃТ°'A0HА kеЂ2+HБгЃТ°'A`@2HБ kеЃ0+HАгЂР°°«d'@2HБ kеЃ0+HАгЂР°°«c'@HГ/HД// N№¤4HЂHА// NєфўLо |ядN^NuNVHз88&nB№Яvx#ДЯz6+`6BBґkn.0HА"еЃ k0HА"pгЂ p80D3„RBґkoЪSC¶SlДBBґkn"0HА kеЂ2HБ pгЃ1ј RBґkoЮ·щf"f:HxHxHxEщјиN’HxLHxHxN’B9Яѓ8k/ 8S/ N№°l`HJ«f 0HА kеЂ`0HА kеЂ(+ё°c'p2+HБ kеЃ0+HАгЂР°'@LояиN^NuNVHз0 $n&. .B№Яvr#БЯzJЂlBj`0j±Аl5jr#БЯvB№Яz`5@JѓlBR`*0j±Гl2J*g4*` / N№±XЏRB0B¶€nо4Єr#БЯvB№Яz`4ѓµщf"f yf"2h/ 2P/ N№°lLо яфN^NuNVHз<0&n$n BDёjn^ёknXBBґjnH0HА&еѓґkn: k0HА"p8"гЃ01@я @ f j p8:1E1…RBґjoАRDёjoўµщf"f/9f"N№Є4`$ j%P0*HА jеЂ2*HБгЃТ°%ALо <яиN^NuNVHз80&n$n BC¶jnN¶knHBAІjn80HА$е‚Іkn* j0HА p(гЂ"k"q(81D1„RAІjoРRC¶joІµщf"f/9f"N№Є4`$ j%P0*HА jеЂ2*HБгЃТ°%ALо ямN^NuNV nhЂ B№Яvp#АЯzN^NuNV nhя B№Яvp#АЯzN^NuNV 9ЯЃgHy¦дHx&N№ї<ьЯЃN^NuNV 9ЯЃfHy¦ьHx&N№ї<-J9ЯЃf 9Я~f <B9Я~B‚B/ N№Є4XЏ9ЯЃ gШ g° fш/ NєюjXЏ gЦ gО gЖJgА f@J‚g6S‚ EB0(Jg*8U6mS‹/ / / EъъИN’Hx / Nєо8/ / / N’Юь S‚`Њ fB‚Jg~0F/0G// NєъђЮь `j EЂ(Jg`HЂHА// NєнрPЏ`P/ NєэДXЏ g0 g* g$Jg `*/ Nєэ¤XЏ g g gJf EB0(<` EЂ(R‚JgюЬJgьЯ~Lо<ьяШN^NuNVHз?№йb6BEєin,0HАгЂ84"n6GЦй:EЪй  gь¶ьmф4KµщЯnlиєьmа6 HГ¶№ЯrlТ<Fэя9† yf" h еЂ p$г‚00(@я2AяІ@gћ1„(// N№°lPЏgZHxHxHxEщјиN’HxpHxHxN’„я/HxHxN’Юь$HxHxHxN’HxqHxHxN’Юь`„я/HxHxN№јиЮь < ЖЯ‚< RЖЯѓRE"nєioюШRG"nѕioюћ`z"n(i№йbj8 gR"n i ђђjRЂвЂ"n0iHhHА/N№ЅтPЏ6@0 HА"n iеЂ, њ° lRЂвЂ"n:@Ъй Цй¶ьmф: HЕє№ЯnlжєьmЮ6 HГ¶№ЯrlР<Fэя8† yf" h еЂ p$г‚00(@я2AяІ@gћ1„(//N№°lPЏgZHxHxHxEщјиN’HxpHxHxN’„я/HxHxN’Юь$HxHxHxN’HxqHxHxN’Юь`„я/HxHxN№јиЮь < ЖЯ‚< RЖЯѓTЊ"n№йcюљ"nB©B©J)g29ЯѓHЂ<њi 3F9Я‚HЃ<њi2† yf"0Ѓ1@`d yf""n<Ьi0†<)Ьi 1F`2 yf""n<Ьi0†<)Ьi 1F`HxHxHxEщјиN’HxHHxHxN’B9Я‚B9ЯѓBGЮь`ЖBE0HА$е‚`љ"n i0HА p(гЂ80gZHxHxHxEщјиN’HxpHxHxN’„я/HxHxN’Юь$HxHxHxN’HxqHxHxN’Юь`„я/HxHxN№јиЮь R9ЯѓRE0E±щЯrmя^B§0GHhN№°lPЏRG0G±щЯnmя2 yf"2h/ 2P/ N№°lLо<ьяШN^NuNV0n/0n/N№°lN^NuNVHз0 4. 6.9Я‚HЂґ@f 9ЯѓHЂ¶@gbHxHxHxEщјиN’HxYHxHxN’0Bp Р€Ђя/HxHxN’Юь$0Cp Р€Ђя/HxHxN’ВЯ‚ГЯѓLо яфN^NuNVHз8 $nB№Яvx#ДЯzBBґjl8BAІjn(0HА&еѓ j0HА"p8гЂ p83°RAІjoаRBґjmИBBґjn$0*HА jеЂ2HБ pгЃ1ј RBґjoЬµщf"f /9f"Nєшћ`$ j%P0*HА jеЂ2*HБгЃТ°%ALоярN^NuNVя//.,/.(/.$/. /././././. /.$‚яяя/N№№(Юь,//9сZNєиn$.юьN^NuNVя/Nєх.$‚яяя//9сZNєц†/.,/.(/.$/. /././././. /./N№µО$.юьN^NuNVяЦ/$. HnяЦ/.N№№LJЂm0.яЦHАА‚ґЂfBЂ` rЬ#БiЖpя$.яТN^NuNVHз0 "nBЃ`  g  ffр +fv`0 -fvя`&S‰v` /o 9n гЂзЃ$@AтРHЂРА"fЬ//N№ЅzLо яфN^NuNV/ /9Я€Eщі`N’/9ЯЊN’/9ЯђN’/.N№>$nяьN^NuNV/ $nґьgnJgj* g f*0j°ьo/HjBЂ0*/N№РxЮь BjBj jbBЂ0*/N№ґМXЏJЂfBЂ0*/N№СHXЏґьg/ N№И BЂ$nяьN^NuNVHз0$nґьgTJgP* g f<6j¶ьo"/ HjBЂ0*/N№РxJЂl%@`BЄЧк %K BjBjLо яшN^NuNV. /. HЂHА/N№ѕ”N^NuNV/$./HzяЦHn/. N№БЄ/N№Т /N№ґМЮьJЂg/N№іш$.яьN^NuNVHз8 &.lp`њr?ІѓmAщgRJ08g 08WАrАЃ`zHx/B§HxBEщјАN’(Hx/HxHxBN’Юь JЂgnrАІЂgrЫ#БiЖB‚`tB§//HxBN№јАr?ІѓmJ‚gAщgRј8` AщgRј8 LоярN^NuNV#обюB№бъHn/. N№µтN^NuNV#щЯ€бюB№бъHn /.N№µтN^NuNVB№бю#объHn/. N№µтN^NuNVяьHз?<&n(n B‡`nrяІ‚gRr І€m І‚m8rяІ‚g0N№ёР$r І‚lк`r%І€g ±Вg `&›Н•КB„HЂ0@r*І€f(:|`r9І€m" гЂз„-Dяь(Ш®яьCрHР( HЂ0@r/І€mШrlІ€fRЉ`rhІ€fHЂ0@pЫР€rS°ЃbљгЂ2;NыЁяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђњњяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђяђІ њњяђяђяђяђяђяђяђяђ яђяђяђОяђяђяђяђ r%І‚fюв`J„f$\єьf‚R‡N№ёР$`Ф$\`rяІ‚g*N№ёР$r І‚lм`rяІ‚gєьfВN№ёР$S„gr І‚mаBєьfђR‡`Љ4|Рь rxІ€fz` roІ€fz`z B†`r І‚mN№ёР$rяІ‚fм//N№ёv&PЏmю2//N№ЅzPЏ,ЬѓN№ёР$//N№ёv&S„PЏgJѓlТєьf \ †R‡`pю`HЂ0@°ьfэЄ°ьf `pяLо<ьяФN^NuNV/ .". t/ґЂl t9ґЂmtРР‚`2tґЃft`ґЂl tfґЂmt©Р‚`tґЃft@ґЂl tFґЂmtЙР‚`pя$.яьN^NuNVJ№бюg/9бюN№Ж(HЂHА` yбъ°ьgJgHЂHАR№бъ`pяN^NuNV"n Qо "€N^NuNVHnHzявHn/. N№БЄ nBN^NuNVяФHз 8(n&n ёьftШ`$Hx*/ Eщ»HN’PЏJЂfHx?/ N’PЏJЂgtЮ#ВiЖpя`HnяФHxN№јАPЏJЂmHx/ HxNN№јАЮь JЂl #АiЖpя`И.яйg0<я`.яйg0<m`0<я6ЂB«Jg* ,:f"HЂAщЯш0g@яџ`HЂ@яї` HxN№јА7@Bk7| Bk Bk'nяо'| .яоЂяjЂяt д '@BЃ2.ямtеЎBЂ0.як‚Ђ'A 'A$'A.яйH‚7B(BЂLояДN^Nurww+NVHз HzяоB§EщСДN’#АЯ€HzяЬHxN’#АЯЊHzяОHxN’#АЯђ/./. /.N№,$Юь$/9Я€Eщі`N’/9ЯЊN’/9ЯђN’ LояшN^NuNV n"n "JfьS€Аfъ N^NuNV n.°f `JfфBЂN^NuNV n"n °ьf Іьgpя`<Іьf °ьgp`,°ьfІьf BЂ`JfBЂ`ІgтHЂ0@!HЂђА N^NuNV n"n "Аfъ N^NuNVHз>8(nHx*EщјАN’$Hx,N’"*| мҐ|К†(к„|И†PЏo| ј„lx|Д†&B&| мЈ|Ж† кЂtДЃг‚EщЅzHx<|?А†/N’PЏФЂHx/N’PЏФЂAщЯ” гЂЦр/<QЂ/ N’PЏФЂ/<б3Ђ/N’Р‚ёьg(ЂLо|яаN^NuNV/././. . ? .?NAЯь N^NuNV .? .?/. .?NAЯь N^NuNVHз?ь .? . ? .?NM\ЏLЯ?ьN^NuNVHз?ь/. . ? .?NMPЏLЯ?ьN^NuNV/$.g2". g,ДБ 4.g ". ДБбЉбЉР‚BЃ2. g$.ДБбЉбЉР‚`BЂ$N^NuNVяюBnяю . jDЂRnяю/ .jDЂSnяю/Nєя”PЏJnяюgDЂN^NuNV///BЂ".$. vx fг‹гЉ`цІ‚ge’‚ЂѓJЃgS„вЉв‹fк(&$N^NuNVяюBnяю . lDЂRnяю/ .lDЂSnяю/NєяPЏJnяюgDЂN^NuNVяь//. /.Nєяx /. /Nєя6$".’‚-Aяь .яь$.яшN^NuNVяь//. /.Nєя„ /. /Nєя$".’‚-Aяь .яь$.яшN^NuNVHз . $n ґьgJg *fpя`J jяo / N№ішXЏ0j‚ЁRj2*Іjl5j jяo/ N№ішHЂHАЂяLояшN^NuNVHз?ь/./. . ? .?NNЯь LЯ?ьN^NuNVHз?ь .?/./. .?NNЯь LЯ?ьN^NuNVHз?ь/././. .?NNЯьLЯ?ьN^NuNVHз?ь .? . ? .?NN\ЏLЯ?ьN^NuNVяШHз?<(n-nяШ-nяЬ.. .*L| BЃzєЂmp°‡l.zє‡l~/N№Ф4XЏ///.яЬ/.яШN№У¦ЮьJЂlь-/.яЬ/.яШN№УlPЏ-@яШ-AяЬ/.яЬ/.яШN№УЪPЏ$/N№Ф4XЏ///.яЬ/.яШN№У’Юь-@яШ-AяЬ—Л¶ьgJ‚o>//N№ѕ^PЏЂиа 3 иаnJlB3иа//N№ЅтPЏ$R‹`ДS‹3иа0Е¶ьnо—ЛB3иаR‹zє‹lф—ЛBѓ/EщФ4N’XЏ///.яЬ/.яШN№УXЮь-@яШ-AяЬ//N№УЪPЏ$/N’XЏ///.яЬ/.яШN№У’Юь-@яШ-AяЬЂиа 3 иаnJlB3иаJ‚o& RѓR‹z є‹lя~zяє‡l&Jѓoь.—Л¶‹o3иа0ЕR‹¶‹nрB Lо<ья°N^Nu0123456789ABCDEF0123456789abcdefNVя€Hз?<&n*n ¶ьg^`T %f8 #f ~-Gяђ`B®яђ™МB† -f|`ф +f8|`р  f ёьfд8|яя`Ю~ -GяЊB… 0f~0-GяЊHЂAщЯш0g.EщЯш` гЂ"зЃ @СБHЂCрР* HЂ2fЬ` *f *J…lD…|&<} .f< *f&`.BѓEщЯш` гЂ"зЃ @СБHЂCрР& HЂ2fЬBЃ lfr` hfrHЂAщЯш0g~-Gя€r `B®я€ dg og xg uf~І‡g ~І‡gB‡І‡f(` eg gg ff-]я”-]яHЂ0@pЫР€~S°‡bДгЂ>;Nыp¶ёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёё¬ЁВВВёёёёёёёёёёёЂёё4J„lD„t`B‚$NB"Hx /N№ѕ(PЏ0Hx /N№Ѕ°PЏ(fЪJ‚g<-`ёьo<+` ёьl< `ь$NB"0жЊfрJ®яђgаJ*gШ<0`Р$NB"J®я€gAъьи`AъьуpА„0иЊfфJ®яђgЁJ*g SЉJ®я€g<X`<xЂ<0`„$NB"Hx /N№ѕ(PЏ0Hx /N№Ѕ°PЏ(fЪ`V/./`ь/.Hx%`р ѓ}fvя///.я/.я”B§HnяњNєъx$@/ IщУ,N”Юь°ѓo / N”&XЏ`$]/ N№У,XЏ¶Ђo&¶…l ђѓJ†g ,~ -GяЊ` ,D†`¶…fB†J†lN -f~0ѕ®яЊf/.HЂHА/"nN‘SѓPЏ/./.яЊ"nN‘R†PЏkИ`/.HЂHА/"nN‘PЏSѓjиJ†g*/./.яЊ"nN‘S†PЏfм`/.HЂHА/"nN‘PЏfыЄLо<ья`N^NuNV/ $nґьgpJ*fjJgf* gX2jІкnR0jСк %H HxHjBЂ0*/N№Й$5@Bj2jІкn|Jjl 2j%I`BЄpя`0j0ЁHЂRjЂя$nяьN^NuNVHз0/. N№З2&B§//.N№Т $Юьn #ВiЖBЂ`,HxN№З| @1BјB(BЁCBhBhBЁ Lо яшN^NuNV n +g2 ag( rg wf" (+gr`r ` (+gBЃ`r `r N^NuNVHз0 tФ®rшДЃEщЯ¬ R°ьgґЁc $H P°ьfр°ьf2 ‚c&`&</HxHN№јА @°ьnBЂ`&$€!CBђ PЂ°Ёd•ЁСи!B`$ђ PЂLо яфN^NuNV/ "nQ‰EщЯ¬ R°ьgіИc $H P°ьfт Р©°ьg±Аb "(У© P"€ РЄіАb ")УЄ$‘`$‰$nяьN^NuNVHз00&. . &CQ‹tФЂrшДЃґ«dEу("+’‚%AHjNєяf'B`0ґ«c*/NєюД$@"JXЏґьg C +QЂg"ШYЂfъ/Nєя2& Lо ярN^NuNV//. /.N№ЅzPЏ$/Nєюv @JЂg`BQКяьBBS‚dф$.яьN^NuNVHз<0$.(. *.Bѓ&D/N№ґМXЏJЂf"/ //Hx?N№јJЂl6#АiЖpя`*#Даў#щЯґа¦HxHxEщјиN’ЂPЏ9Ялgh9Ялg:HЂЂя/HxHxN’Юь  fB№Яґ` o ~nR№ЯґRѓєѓo®HxHxN№јиPЏJ@gR‹`я|9Ялg  fј І9Яоf$9ЯлgHЂHА/N№НћXЏ&DBѓHx `,І9Япf*9ЯлgHЂHА/N№НћXЏ&DBѓHx N№РXЏ9Ялg’І9ЯфfHxHxN№јиЂPЏ9ЯлgN  f89Ялg.Hx HxHxEщјиN’Hx HxHxN’B№ЯґЮь`HЂHА/N№НћXЏRѓHxHxN№јиPЏJ@g„`ОІ9ЯфfF9Ялg&Hx^HxHxEщјиN’HxHxHxN’ЮьHxHxN№јиЂPЏ`І9ЯрfH9ЯлgHЂHА/N№Нћ$•№ЯґXЏ`HxHxHxN№јиЮь S‚rяІ‚mв`Ю  g І9Ясf^9ЯлgL  f8Hx HxHxEщјиN’Юь 9Ялg$Hx HxHxN’B№Яґ`HЂHА/N№Нћ RЂ`rAщЯмІgf$JѓgVS‹9ЯлgHSѓ/N№ОКXЏ`8І9Янf"`9Ялg /N№ОКXЏS‹SѓjжBѓ` І9ЯуfZ`"  g  fB9Ялg Sѓ/N№ОКXЏS‹JѓfШ`$  g"  g9Ялg Sѓ/N№ОКXЏS‹JѓfШR‹`ЁAщЯтІf~9ЯлgHЂHА/N№НћXЏHx HxHxEщјиN’Hx HxHxN’B№ЯґB№а¦Юь9ЯлgD$D·Кc>9ЯлgHЂHА/N№НћXЏRЉ·Кbа`9ЯлgHЂHА/N№НћXЏRѓєѓnым Lо <яиN^NuNVHз0 . BѓHЂJj,HxMHxHxEщјиN’Hx-HxHxN’vЮь nЉ  fZr‚№Яґ 9ЯґSЂ&–Ђ9Ялg($`Hx HxHxN№јиЮь QКяиBBS‚dа`†Hx HxHxN№ји`pHx^HxHxEщјиN’HЂ0@p@Р€Ђя/` f&Hx^HxHxEщјиN’Hx?HxHxN’Tѓ`HЂЂя/HxHxN№јиRѓЧ№Яґ Lо яфN^NuNVHз0 &. yаў08HЂJjt`B‚ o f$  f//9аўN№Пt$9Яґ”ЂPЏ`T‚`R‚•№Яґ`4HxHxHxEщјиN’Hx HxHxN’HxHxHxN’Юь$QКяКBBS‚dВLо яфN^NuNVHз8 n&. $9а¦`.HЂJjT‚ o f  fx„„`T‚`R‚QЛяРBCSѓdИ LояфN^NuNV/ .". t°‚gt °‚gt °‚fAщЯа`AщЯд`AщЯј  Ѓ` tа#ВiЖpя$.яьN^NuNV/".mFt ґЃm@AщЯё еЂ p°ьf tІ‚g t І‚gt І‚f"AHi N№і(` tґ€gB§/Nђ$.яьN^NuNVHз80(.&. $.9Ялg/N№ґМXЏJЂf///Hx@N№ј`€&CJ‚g~  f&Hx HxEщС¤N’Hx HxN’B№ЯґЮь`L  fB№Яґ`* o ~nR№Яґ`  fpЂ№ЯґRЂ#АЯґHЂHА/HxN№С¤PЏR‹S‚f‚ Lо ямN^NuNV/$./Hx>N№јJЂl#АiЖpяJ‚mr?І‚m AщgRB0($.яьN^NuNVHxHxN№јиЂяN^NuNVHnHx/.Hx@N№јN^NuNV/ HxN№З|$@5n /. N№З2@BЄ B*BjBjјBЄ $nяьN^NuNVBЂ n0(N^NuNVHз8 (.6.0@ @g" @g @fКB§/Hx=N№јА$`ёB‚B§B§/HxCN№јАЮьJЂ\АrАЃggJЂg t°`JЂftЯJ‚fzfJЂf?!яяярясяпятяояб!яЯ8585 d^c&L°@(<PxИhX (<dґ, #2ZЊ  Њ яфярямяияиямяряфяъяцясялядядядядяю  яшямяЬяМяјя°я°я°я°я°я°я°я°я°я°яьяцяцяьяьяьяшяфяфяшяьяьяфярямямямямяряфярямяияияияиямярярямяияияияиямяряфярямямямямяряфяьяьяшяфяфяшяьяьяьяцяцяь    $$   $$    cZPF<2((ZP<2((P<( 2F2 (<<( 2F2 (<P((2<PZ((2<FPZc                 ђ(ђ0Pђ[;Zx—µФу0N я (((((((((((((((((((((((((((((((QQQQQQRRRRRRf:\gnu\larg0 Чtaet tgnuchessА_pnt.0 аx_tempb.1аz_tempc.2а|_tempsf.а~_tempst.аЂ_cnt.5 а‚_xnode.6а„_i.7 аЋ_alpha.8ађ_beta.9 а’_score.1а”_tempb.1а–_tempc.1а_tempsf.аљ_tempst.ањ_xside.1аћ_rpt.16 а uxdsp.o a`curses.oђ(access.oІtatoi.o Іґexit.o і(fclose.oі`fflush.oішfprintf.ґh___fprinґhisatty.oґМsfguts.oµ„sprintf.№stat.o №Lstd-initє strcat.o»(strchr.o»Hstrcmp.o»hstrcpy.o»Дtime.o »аtrap-1.oјtrap-13.јиfixnum.oЅ4umul_zerЅrumul_1 Ѕ\umul_retЅtmuls1 ЅЋmuls2 Ѕњmuls3 Ѕ¬udiv_sl ЅИudiv_sr ЅТudiv_subЅШudiv_s Ѕаudiv_donЅиdivs1 ѕdivs2 ѕdivs3 ѕ$fputc.o ѕ”trap-14.їpfguts.oїёfgetc.o Ж(fopen.o ЖИmemory.oЗ|read.o Й$read.c Й$_Lbss аў_thebuf аў_start_cа¦__echochНћ__delchaОК_str_lenПtsignal.oПР_sig_arrЯёtchars.oРxwrite.o Рxclose.o СHconsole.С€ctype.o СДfdopen.oСДfileno.oТ open.o Т strlen.oУ,flonum.oУDnegdf2_zУ|cmpdf2_pУјcmpdf2_mУВcmpdf2_1УКcmpdf2_zУЖfixdfsi_Ф(fixdfsi_Умfixdfsi_Ф fixdfsi_Ф"fixdfsi_ФfloatsidФ€floatsidФJfloatsidФXfloatsidФdaddsf_reХXaddsf_reХ\addsf_1 Фдaddsf_2 Фшaddsf_3 Хaddsf_4 Хaddsf_z ХTaddsf_5 Хaddsf_6 Х$addsf_7 Х0negsf2_zХpsubsf_bzХ„cmpsf2_pХ cmpsf2_mХ¦cmpsf2_1Х®cmpsf2_zХЄmulsf3_zЦ¤mulsf3_1Цmulsf3_2Цmulsf3_nЦrmulsf3_oЦ~mulsf3_rЦ¦divsf3_1Цъdivsf3_2Чdivsf3_2Чdivsf3_2Ч&divsf3_3Ч.divsf3_4Ч:divsf3_rЧ\_EditBoaj8_emtl аЄ_echo §T_open Т _trap_1_ј_HasKnigа®_map Ч€old_aet аІ_isatty ґМ_LinkMov$h_mvstr1 а¶__subsf3Хr_mvstr2 аѕ_ScoreLo<ф_mvstr3 аЖ_longnam—€_mvwin ”`__parse_З2_trap_14їh_trap_14ї’_PromptF‡__floatsФ4__base аО_trap_14ї<__mchunkЯ¬_endwin ‘ђ__dosf µт_PawnAdvЮЮ_Swag2 аТ_Swag3 аЦ_Swag0 аЪ_UpdateH2t_Swag1 аЮ_access Іt_Swag4 ав_KSFTY аж_fileno Т _HUNGX ак_calloc Ик_HUNGP ао_timeoutат__main єЁ_BRscan O€_CopyBoaa4_trap_13ји_trap_14ї_Def_terЯd_trap_13Ѕ__csrx Яѓ__csry Я‚_TerminabJ__floatdФђ_Zbmtl ац_SelectM _CptrFlaаъ_OutputMub_EnemyKiб6__in_traб:_ClearMe†^__fixunsУО_ttable б>_ChkFlagбB_pbishopЮ^_SqAtakd7$__exit >_BlendBo`О_Tscore б~_ScorePo:L_strcat »(_ATAKD бє_LINES Яn_reallocИp_strcmp »h__flofmtїё_KthreatЬ>_PrVar бѕ__fixunsУФ_strchr »H__do_sigР_strlen У,__printfБЄ_strcpy »Д__cmpdf2У¦__sfcp бъ__sffp бю_BMBLTY Ь__doechoЯ~_othersiЧ|_SetTimexЦ__addsf3Ф–_subwin •\_ExamineSl_KATAK в_KHOPN в_sprintf№(_stage2 в _Zwmtl в__cmpsf2ХЉ_PAWNSHIв_printw ±И_wrefresЄ4__nlmap Я_ScoreKBA_TrPnt в_SelectLЉ*_GameLisвR_trappedQ_evaluatІ_PawnBonсR_KMOVD сV_sscanf µО_stdscr сZ__adddf3У~__umodsiѕ(_initscrђђ_KNIGHTSс^_stderr Яђ_Pscore сb_PEDRNK2сћ_touchwi”Ш_HashCntсў_PBLOK с¦__divdf3УD___ttymoЯи_PawnStoсЄ_Operatoс®_PutInTTО_MbishopсІ_stdout ЯЊ_distanc`_scrollo—.__sfget ёР_Pindex тІ_Initiala`_KingScaLT_svalue у2_PADVNCMуІ_PADVNCIу¶_winsertЈ_ElapsedvТ_wgetch §Ћ_wclrtob›О_My_termЯh_OpeningH_scroll ±__muldf3УX_Dstop Ы _wclrtoeњь__sfnum ёv_TimeConує_RHOPN уЖ__divsi3Ѕт_leaveok—_FROMsquуК__divsf3Ц®_signal ПР_c2 уО_PV уТ_c1 уЦ_ISOLANIЫж_NewGame__mulsf3ХІ_waddch —°_SetCont€Њ_ResponsуЪ_overwriҐЁ_Level уЮ_Mking ув_KBNKsq фв_ETnodesфж_OK Яz_hashkeyфк__mulsi3Ѕz_ShowRess<_ChangeX€А_wclear ›Љ_player фо_wdelch ќф__extendЧj_GiveHin‡ш_TOsquarфт_et фц_ft фъ_wstando¦R_ClrScreyЂ_nl —N_HasRookфю_Threat х_DoDebugЋ__modsi3ѕ^_wstande¦r__udivsiЅ°___sprin№_Dcode Шш_HasPawnх>_SaveGamЃј_DevelopхB_EnPassa+>_Sdepth хF_PieceCnхJ_InChk хN_consoleС€__modinpЯЃ_Zscore хR_NodeCntхV_ChangeB‡Ж_historyхZ_MknightZ_PDOUBLEZ_cputime^_ListGam„ _INCscorb_Bwindowf_UpdateD{–_ExitChea__start _computej__umulsiЅ4_search 4_winsch Ў’_woverla¤о__fixdfsУЪ_TCminutn_MoveLis¬_BISHOPSr_ttytypeЯj_GetOpen}l_ShowDeprЮ_ExtraTiv_COLS Яr_Xscore z__fixdfdФ._ChangeS€T_KHOPNX ~_KingEndЬЮ__negdf2Уl_ZeroTTan_fprintfґ„_MakeMov+¦_BACKWARЫц_UpdateW]Ж_Tree ‚___tcharЯм_StcolorЪh_Pdir Ы8_werase  А_StboardЩи_HasBishQ_write Рx_Undo …_hashflaQ_ShowCur‡,__movcur°l_month_dЯ”_sweep Ъи_ShowPosЊt_hashcodQ"_cpyrid Я„_fscanf µ„_KingOpeЬ^_curscr f"_malloc З|_KBNK Э^_stdin Я€_stage f&__negsf2Хd_Capture%к_killr0 f*_killr1 ff_killr2 fў_Dpwn Ъц_killr3 fЮ__curiniЯЂ_contempg_srand р_rcptr g__ctype_Яш_hashbd g"_XRAY g&_VerifyMF_KNIGHTPg*_PawnCntg._AwindowgN___handlgR_rank7 Ч‚_ChangeA‡љ_PieceLig’_consoleС¤_MaxSeargТ_parse ~6___sshft¦д_time0 gЦ_wgetstrЁА_KCASTLDgЪ_RMBLTY Ь"_value ЫЉ_SqValueBH_TCmovesgЮ_PassedPЫ¦_newwin ’_PassedPЫ¶_kingmovgв_PassedPЫЖ_PassedPЫЦ_unmap Ш_ScoreKP>>_Book gж_wmove ¤4_Kfield gк_GameCnthк_evrate hо_ShowSid†ђ_wking hт_ProbeTT$_PC2 hц_xwndw hъ_PC1 hю_PINVAL i_scanw І_UnmakeM/°_ptbl i_quit i _ERR Яv_UpdateCwш_DrawPieyО_stat №L_opponeni_Mbpawn i_Dstart Ъь_scanf µЁ_waddstrљ‚_zwndw i’_UpdateP3T_etext Чt_repetit6€_epsquari–_environiљ_noraw ¦ј___ushft¦ь_HasQueeiћ_pknightЭЮ_Dir Ы_pmtl iў_noecho §r_RHOPNX i¦_time »а___col_pЯґ_Die aД_read Й$_crmode §__stksiziЄ_GetGameІ_InputCoc^_rand А_post i®_pbit Ы|_GenMove!љ_kbhit _reverseiІ_RookBoni¶_delwin “т_controlЫ_BishopBiє_ShowMes†8_trap_1_јА_raw ¦’_ClrEolny _root iѕ_slk iВ_pick 5а_errno iЖ_Initial4_fputc ѕ”_gotoXY yZ_atak iК_locn jК_row kJ_nonl —l_help op_SearchSt\_PWEAKH kК_ataks 8т_next Я^_mate kО_wdeleteџ‚_EvalNodkТ_castld kЦ_exit і(_castle )D_atoi Іґ_TCflag kЪ_main ,_bothsidkЮ_bking kв_et0 kж_free И _column kк_lpost lj_close СH_force ln_mvcur °R__subdf3У’_fflush іш_fdopen СД_mtl lr_fopen ЖИ_edata аx_nocrmod§<_hint lv_dither lz_easy l~_fgetc Ж(_end nR_box љК_fclose і`_atk2 l‚_beep l†_atk1 lЉ_color lЋ__truncdЧd_algbr ¤_board m_Mwpawn mЋ_hung n_PawnThrn_Game50 nNL@    F 8     L        p0. H 26     8                                (       @ & @ &  $2:& ,0:      (Љ  $€,  "8&">    " $  * "J &0    (<  ,$$,$0  0&$: * ""hPF<4"," RH  *>"L"    D   ,$( <  2 0.6 6. 8"  &.,.,.,\ F&*, &,B  |,     $ ,0*0`(*&, ,, ,,H,,$8    2D  ,D   ""*"" "*  (      $4&:&:*" >* & X 0 "*   .0  h & &   $    * *  (            6    .L" 0      $,,L P  **ф                         ^ 26DЁ   ®      ( .  D, (Ж    (    "  &  ,$  >&(0,2Z0.&&>x– F $   @Z   $$$  "  (R4*(   ( "  hґ 0          8  &P    *t  `   0„ R *(    ,V&8 |,(@ N&< .Ћt>‚ И DLF6jЁ2ЄbL t€BF>Lђ*rn * †њD  @  *6$F $  , * , 8Ђ2^ b@2^ &".F^    Jrr &4 t P"T@"*&,<RJ ¦ 80B"ђ ЮJ"n. " 4\FDёH^Ћ0$..0Ll",2 *  $rB",4&Юеееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее. B–.. B–CHESS C–eGNUCHESSBOO F–њ®GNUCHESSC K–Ar NONDSP C S–„DXUXDSP C W–›hMAKEFILEGT \–¶GNUCHESSH a–ёW GNUCHESSMAN c–»чMAKEFILEMIX f–БџMAKEFILEOLD i–ГЏMAKEFILEST l–Е=CURSES C n–ЗчrCURSES H s–д№PORTAB H v–ифif (test $TERM = "minix") then /user/chess/gnuchess $1 $2 else /user/chess/nchess $1 $2 fi еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее! ! Opening Library for CHESS ! ! Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. ! Copyright (c) 1987 by Stuart Cracraft and John Stanback ! ! This file is part of CHESS. ! ! CHESS is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY. No author or distributor ! accepts responsibility to anyone for the consequences of using it ! or for whether it serves any particular purpose or works at all, ! unless he says so in writing. Refer to the CHESS General Public ! License for full details. ! ! Everyone is granted permission to copy, modify and redistribute ! CHESS, but only under the conditions described in the ! CHESS General Public License. A copy of this license is ! supposed to have been given to you along with CHESS so you ! can know your rights and responsibilities. It should be in a ! file named COPYING. Among other things, the copyright notice ! and this notice must be preserved on all copies. ! ! ! ! Four Knight's Game e2e4 e7e5 g1f3 b8c6 b1c3 g8f6 f1b5 f8b4 o-o o-o d2d3 b4c3 b2c3 d7d6 c1g5 d8e7 f1e1 c6d8 d3d4 d8e6 ! Giuoco Piano e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 c2c3 g8f6 d2d4 e5d4 c3d4 c5b4 b1c3 f6e4 o-o b4c3 ! Giuoco Piano e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 d2d3 g8f6 b1c3 d7d6 c1g5 h7h6 g5f6 d8f6 c3d5 f6d8 ! Two Knights Defence e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 f3g5 d7d5 e4d5 c6a5 c4b5 c7c6 d5c6 b7c6 b5e2 h7h6 ! Two Knights Defence -- Max Lange Attack e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 d2d4 e5d4 o-o f8c5 e4e5 d7d5 e5f6 d5c4 f6g7 h8g8 ! Petrov's Defence e2e4 e7e5 g1f3 g8f6 f3e5 d7d6 e5f3 f6e4 d2d4 d6d5 f1d3 f8d6 o-o o-o c2c4 c8g4 c4d5 f7f5 b1c3 b8d7 ! Petrov's Defence e2e4 e7e5 g1f3 g8f6 d2d4 e5d4 e4e5 f6e4 d1d4 d7d5 ! Vienna Game e2e4 e7e5 b1c3 g8f6 f1c4 b8c6 d2d3 f8b4 c1g5 h7h6 g5f6 b4c3 b2c3 d8f6 g1e2 d7d6 ! Vienna Game e2e4 e7e5 b1c3 f8c5 g1f3 d7d6 d2d4 e5d4 f3d4 g8f6 c1g5 h7h6 g5h4 b1c3 ! Three Knights Game e2e4 e7e5 b1c3 b8c6 g1f3 g7g6 d2d4 e5d4 c3d5 f8g7 c1g5 c6e7 f3d4 c7c6 d5c3 h7h6 ! Bishop's Opening e2e4 e7e5 f1c4 g8f6 d2d4 e5d4 g1f3 f6e4 d1d4 e4c5 o-o c5e6 f1e1 c7c6 b1c3 d7d5 c4d3 f8e7 ! Ruy Lopez -- Classical Defence e2e4 e7e5 g1f3 b8c6 f1b5 f8c5 c2c3 g8f6 d2d4 e5d4 e4e5 f6e4 o-o d7d5 ! Ruy Lopez -- Birds Defence e2e4 e7e5 g1f3 b8c6 f1b5 c6d4 b5a4 f8c5 o-o d4f3 d1f3 g8e7 d2d3 o-o c1e3 c5b6 b1c3 d7d6 ! Ruy Lopez -- Schliemann Defence e2e4 e7e5 g1f3 b8c6 f1b5 f7f5 b1c3 f5e4 c3e4 d7d5 f3e5 d5e4 e5c6 d8d5 c2c4 d5d6 c6a7 c8d7 ! Ruy Lopez -- Old Steinitz Defence e2e4 e7e5 g1f3 b8c6 f1b5 d7d6 d2d4 c8d7 b1c3 g8f6 o-o f8e7 f1e1 e5d4 f3d4 o-o d4f5 f8e8 ! Ruy Lopez -- Old Steinitz Defence e2e4 e7e5 g1f3 b8c6 f1b5 d7d6 d2d4 c8d7 b1c3 g8f6 b5c6 d7c6 d1d3 e5d4 f3d4 f8e7 c1g5 c6d7 ! Ruy Lopez -- Modern Steinitz Defence e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 d7d6 d2d4 b7b5 a4b3 c6d4 f3d4 e5d4 c2c3 d4c3 b1c3 c8b7 ! Ruy Lopez -- Open Defence e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 o-o f6e4 d2d4 b7b5 a4b3 d7d5 d4e5 c8e6 c2c3 f8c5 b1d2 o-o ! Ruy Lopez -- Open Defence e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 o-o f8e7 f1e1 b7b5 a4b3 d7d6 c2c3 o-o h2h3 c6a5 b3c2 c2c4 d2d4 d8c7 ! Ruy Lopez e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5c6 d7c6 d2d4 e5d4 d1d4 d8d4 f3d4 c8d7 c1e3 o-o-o b1d2 g8e7 ! Scotch Game e2e4 e7e5 g1f3 b8c6 d2d4 e5d4 f3d4 f8c5 c1e3 d8f6 c2c3 g8e7 b1d2 d7d6 e3c5 d6c5 ! Philidor's Defence e2e4 e7e5 g1f3 d7d6 d2d4 g8f6 b8c6 b1d2 f8c5 f1e2 o-o o-o d1e2 c7c6 ! Alekhine's Defence e2e4 g8f6 e4e5 f6d5 c2c4 d5b6 d2d4 d7d6 f2f4 d6e5 f4e5 b8c6 c1e3 c8f5 b1c3 e7e6 g1f3 f8e7 ! Alekhine's Defence e2e4 g8f6 e4e5 f6d5 d2d4 d7d6 g1f3 c8g4 f1e2 e7e6 o-o f8e7 h2h3 g4h5 c2c4 d5b6 ! Kings Gambit Accepted e2e4 e7e5 f2f4 e5f4 g1f3 d7d6 f1c4 h7h6 d2d4 g7g5 o-o f8g7 c2c3 b8c6 d1b3 d8e7 ! Ponziani's Opening e2e4 e7e5 g1f3 b8c6 c2c3 d7d5 d1a4 g8f6 f3e5 f8d6 e5c6 b7c6 d2d3 o-o c1g5 h7h6 ! Caro-Kann Defence e2e4 c7c6 d2d4 d7d5 e4d5 c6d5 c2c4 g8f6 b1c3 b8c6 c1g5 e7e6 c4c5 f8e7 f1b5 o-o g1f3 f6e4 ! Caro-Kann Defence e2e4 c7c6 d2d4 d7d5 e4e5 c8f5 f1d3 f5d3 d1d3 e7e6 b1c3 d8b6 b1d2 c6c5 d4c5 f8c5 ! Caro-Kann Defence e2e4 c7c6 b1c3 d7d5 g1f3 c8g4 h2h3 g4f3 d1f3 e7e6 d2d4 g8f6 f1d3 d5e4 c3e4 d8d4 c2c3 d4d8 ! French Defence -- Classical e2e4 e7e6 d2d4 d7d5 b1c3 g8f6 c1g5 f8e7 e4e5 f6d7 g5e7 d8e7 d1d2 o-o f2f4 c7c5 g1f3 b8c6 o-o-o c5c4 ! French Defence -- MacCutcheon e2e4 e7e6 d2d4 d7d5 b1c3 g8f6 c1g5 c8g4 e4e5 h7h6 g5d2 g4f3 g2f3 f6e4 d1g4 e8f8 h2h4 c7c5 ! French Defence -- Rubenstein e2e4 e7e6 d2d4 d7d5 b1c3 d5e4 c3e4 b8d7 g1f3 g8f6 e4f6 d7f6 f1d3 b7b6 d1e2 c8b7 c1g5 f8e7 ! French Defence -- Winawer e2e4 e7e6 d2d4 d7d5 b1c3 f8b4 e4e5 c7c5 a2a3 b4c3 b2c3 g8e7 d1g4 o-o g1f3 b8c6 f1e3 f7f5 ! French Defence -- Tarrasch e2e4 e7e6 d2d4 d7d5 b1d2 b8c6 g1f3 g8f6 e4e5 f6d7 d2b3 f7f6 f1b5 f8e7 c1f4 o-o ! Pirc Defence e2e4 d7d6 d2d4 g8f6 b1c3 g7g6 f2f4 f8g7 g1f3 o-o f1e2 c7c5 ! Sicilian Defence -- Dragon Variation e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1e2 g7g6 c1e3 f8g7 o-o o-o d4b3 c8e6 f2f4 c6a5 f4f5 e6c4 ! Sicilian Defence -- Dragon Variation e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g7g6 b1c3 f8g7 c1e3 g8f6 f1c4 o-o ! Sicilian Defence -- Boleslavsky Variation e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1e2 e7e5 d4b3 f8e7 o-o o-o c1e3 c8e6 ! Sicilian Defence -- Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o ! Sicilian Defence -- Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1e2 e7e5 d4b3 f8e7 o-o o-o f2f4 b7b5 a2a3 c8b7 ! Sicilian Defence -- Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 g2g3 e7e5 d4e2 c8e6 f1g2 b7b5 o-o b8d7 ! Sicilian Defence -- Closed e2e4 c7c5 b1c3 b8c6 g2g3 g7g6 f1g2 f8g7 d2d3 e7e6 c1e3 d7d6 g1e2 c6d4 d1d2 d8h4 o-o g8d7 ! Nimzowitsch Defence e2e4 b8c6 d2d4 d7d5 e4e5 f7f6 g1f3 c1g4 f1e2 e7e6 e5f6 g8f6 c2c3 f8d6 c1g5 d8d7 ! Queens Gambit Accepted d2d4 d7d5 c2c4 d5c4 g1f3 g8f6 e2e3 e7e6 f1c4 c7c5 o-o a7a6 d1e2 b7b5 c4d3 c5d4 e3d4 b8c6 ! Queens Gambit -- Catalan d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o f6d7 d1c2 c7c6 b1d2 b7b6 e2e4 c8b7 b2b3 a8c8 ! Queens Gambit Declined -- Orthodox d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 f8e7 e2e3 o-o g1f3 b8d7 a1c1 c7c6 f8d3 d5c4 f1c4 f6d5 ! Queens Gambit Declined -- Cambridge Springs d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 b8d7 e2e3 c7c6 g1f3 d8a5 f3d2 f8b4 d1c2 o-o g5h4 c6c5 ! Queens Gambit Declined -- Exchange Var. d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 b8d7 c4d5 e6d5 e2e3 c7c6 f1d3 f8e7 d1c2 o-o g1e2 f8e8 ! Queens Gambit Declined -- Semi-Tarrasch d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 g1f3 c7c5 c4d5 c5d4 d1d4 e6d5 e2e4 b8c6 f1b5 f6e4 ! Queens Gambit Declined -- Tarrasch d2d4 d7d5 c2c4 e7e6 b1c3 c7c5 c4d5 e6d5 g1f3 b8c6 g2g3 g8f6 f1g2 f8e7 o-o o-o ! Queens Gambit Declined -- Vienna d2d4 d7d5 c2c4 e7e6 g1f3 g8f6 f1b5 f8b4 b1c3 d5c4 e2e4 c7c5 e4e5 c5d4 d1a4 b8c6 o-o-o c1d2 ! Queens Gambit Declined -- Slav (Marshall Gambit) d2d4 d7d5 c2c4 c7c6 b1c3 e7e6 e2e4 d4e4 c3e4 f8b4 c1d2 d8d4 d2b4 d4e4 f1e2 b8a6 b4d6 b7b6 ! Queens Gambit --Slav (Krause) d2d4 d7d5 c2c4 c7c6 g1f3 g8f6 b1c3 d5c4 a2a4 c8f5 f3e5 e7e6 f2f3 f8b4 c1g5 h7h6 g5f6 d8f6 e2e4 f5h7 ! Modern Benoni Counter Gambit d2d4 g8f6 c2c4 c7c5 d4d5 e7e6 b1c3 e6d5 c4d5 d7d6 e2e4 g7g6 f1d3 f8g7 g1e2 o-o o-o a7a6 a2a4 d8c7 ! Queens Pawn Game d2d4 d7d5 g1f3 g8f6 c1f4 c7c5 e2e3 b8c6 c2c3 d8b6 d1c1 c8f5 d4c5 b6c5 b1d2 a8c8 f3d4 c6d4 e3d4 c5b6 ! Pirc-Robatsch Defence d2d4 d7d6 e2e4 g8f6 b1c3 g7g6 c1g5 f8g7 d1d2 b8d7 o-o-o e7e5 d4e5 d6e5 g1f3 h7h6 g5h4 g6g5 h4g3 d8e7 ! Pirc-Robatsch Defence d2d4 d7d6 e2e4 g8f6 b1c3 g7g6 f1c4 c7c6 d1e2 f8g7 g1f3 o-o c1g5 b7b5 c4d3 d8c7 ! Queens Indian Defence d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 g2g3 c8b7 f1g2 f8e7 o-o o-o b1c3 f6e4 d1c2 e4c3 c2c3 d7d6 c3c2 f7f5 ! Queens Indian Defence d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 e2e3 c8b7 f1d3 f8e7 b1c3 d7d5 o-o o-o d1e2 b8d7 ! Nimzo-Indian Defence d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 d1c2 d7d5 a2a3 b4c3 c2c3 b8c6 g1f3 f6e4 c3b3 c6a5 b3a4 c7c6 ! Nimzo-Indian Defence (Rubenstein) d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 e2e3 o-o f1d3 d7d5 g1f3 c7c5 o-o b8c6 a2a3 b4c3 b2c3 d5c4 d3c4 d8c7 ! Nimzo-Indian Defence -- Samisch d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 a2a3 b4c3 b2c3 o-o f2f3 d7d5 c4d5 e6d5 e2e3 c8f5 g1e2 b8d7 e2g3 f5g6 ! Nimzo-Indian Defence d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 c1d2 o-o e2e3 d7d5 g1f3 c7c5 a2a3 b4c3 d2c3 f6e4 a1c1 e4c3 c1c3 c5d4 ! Grunfeld Defence d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 c4d5 f6d5 e2e4 d5c3 b2c3 c7c5 f1c4 f8g7 g1e2 o-o o-o c5d4 c3d4 b8c6 ! Grunfeld Defence -- Smyslov d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 g1f3 f8g7 d1b3 d5c4 b3c4 o-o e2e4 c8g4 c1e3 f6d7 o-o-o b8c6 ! Grunfeld Defence d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 c1f4 f8g7 d2d3 o-o c4d5 f6d5 c3d5 d8d5 f4c7 b8c6 ! Kings Indian Defence -- Classical d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 g1f3 o-o f1e2 e7e5 o-o b8c6 c1e3 f8e8 d4e5 d6e5 ! Kings Indian Defence -- 4 pawns attack d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 f2f4 c7c5 g1f3 o-o d4d5 e7e6 f1d3 e6d5 c4d5 d8b6 ! Kings Indian Defence -- Samisch d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 f2f3 o-o c1e3 e7e5 d4d5 c7c6 g1e2 c6d5 c3d5 f6d5 ! Kings Indian Defence -- Main Line d2d4 g8f6 c2c4 g7g6 g2g3 f8g7 f1g2 o-o b1c3 d7d6 g1f3 b8d7 o-o e7e5 e2e4 c7c6 h2h3 d8b6 ! Kings Indian Defence d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 g1f3 o-o c1f4 d7d6 h2h3 b8d7 e2e3 c7c6 ! Dutch Defence d2d4 f7f5 g2g3 e7e6 f1g2 g8f6 g1f3 f8e7 o-o o-o c2c4 d7d6 b1c3 d8e8 d1c2 e8h5 b2b3 b8c6 c1a3 a7a5 ! English Opening c2c4 e7e5 b1c3 g8f6 g1f3 b8c6 e2e4 f8b4 d2d3 d7d6 f1e2 o-o o-o b4c3 b2c3 d8e7 ! English Opening c2c4 g8f6 b1c3 d7d5 c4d5 f6d5 e2e4 d5f4 f1c4 c8e6 c4e6 f7e6 ! English Opening c2c4 e7e5 b1c3 g8f6 g1f3 b8c6 g2g3 d7d5 c4d5 f6d5 f1g2 d5b6 o-o f8e7 d2d3 o-o c1e3 f7f5 ! Reti -- Accepted g1f3 d7d5 c2c4 d5c4 e2e3 c7c5 f1c4 e7e6 o-o g8f6 b2b3 b8c6 c1b2 a7a6 a2a4 f8e7 ! Reti -- Neo Catalan g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 f8e7 o-o o-o b2b3 c7c5 c4d5 f6d5 c1b2 b8c6 d2d4 b7b6 b1c3 d5c3 ! Reti -- Barcza g1f3 d7d5 g2g3 g8f6 f1g2 g7g6 o-o f8g7 d2d3 o-o b1d2 b8c6 e2e4 e7e5 c2c3 a7a5 f1e1 d5e4 d3e4 f6d7 ! Sicilian Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 e4e5 d6e5 f4e5 f6d7 c3e4 h7h6 g5h4 a3a2 b1b3 b8c6 d4c6 b7c6 e4d6 f8d6 e5d6 a6a5 f1e2 a5a4 b3c3 a2a1 e2d1 a4a3 o-o a3a2 d2e3 o-o ! # Sicilian Defense col. 2f p. 176 MCO 12. (Incomplete game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 e4e5 d6e5 f4e5 f6d7 f1c4 f8b4 b1b3 a3a5 o-o o-o g5f6 d7f6 e5f6 f8d8 b3b4 a5b4 d2g5 g7g6 f1f4 b7b6 f4h4 b4f8 g1f1 a8a7 ! # Sicilian Defense col. 3g p. 176 MCO (Incomplete Game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 e4e5 d6e5 f4e5 f6d7 f1c4 a3a5 c4e6 f7e6 d4e6 d7e5 c3d5 a5d2 e1d2 e8d7 e6c7 a8a7 h1e1 e5c4 ! # Parma vs. Fischer, Havana 1965. Sicilian Defense col. 4j p. 176 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 g5f6 g7f6 f1e2 f8g7 o-o f6f5 f1d1 b8c6 d4c6 g7c3 d2e3 b7c6 b1b3 a3c5 e3c5 d6c5 b3c3 f5e4 c3c5 c8d7 c5e5 f7f5 g2g4 h8g8 g1g2 f5g4 e5e4 h7h5 g2g3 e8e7 ! # Matanovic, Sicilian Defense col. 5k p. 176 MCO (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 g5f6 g7f6 f1e2 b8c6 d4c6 b7c6 o-o a3a5 g1h1 f8e7 f4f5 e6f5 e4f5 c8f5 e2a6 a5a6 f1f5 d6d5 b1e1 a6b7 d2h6 o-o-o h6h3 b7d7 c3a4 ! # col. 6a e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 f4f5 b8c6 f5e6 f7e6 d4c6 b7c6 e4e5 d6e5 g5f6 g7f6 c3e4 f8e7 f1e2 h7h6 c2c4 f6f5 b1b3 a3a4 o-o f5e4 g1h1 c6c5 d2c3 a4c6 c3e5 h8f8 ! # col. 7d e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 f4f5 b8c6 f5e6 f7e6 d4c6 b7c6 e4e5 f6d5 c3d5 c6d5 f1e2 d6e5 o-o a8a7 g1h1 a3c5 c2c4 d5d4 e2h5 g7g6 h5d1 f8e7 d1a4 e8d8 f1f7 h7h6 g5h6 e5e4 ! # col. 8 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 d4b3 b8d7 g5f6 g7f6 f1e2 h7h5 o-o b2a3 a1d1 f8e7 g1h1 d7c5 e2f3 a8a7 b3c5 a3c5 ! # col. 9g; Minic-Barczay, Varna 1967 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 d4b3 b8c6 f1d3 d6d5 g5f6 g7f6 c3a4 b2a3 a4b6 d5d4 o-o a8b8 f4f5 a3b4 d2b4 f8b4 b6c8 b8c8 f5e6 f7e6 f1f6 e8e7 a1f1 c6e5 ! # col. 10i; Matulovic-Kavalek, Sousse 1967 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 d4b3 b8c6 a1b1 b2a3 g5f6 g7f6 f1d3 f8g7 o-o o-o f1f3 g8h8 f3h3 c6e7 f4f5 e6f5 e4f5 c8f5 d3f5 e7f5 c3d5 ! # col. 11b; Joppen-Bronstein, Belgrade 1954 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d4b3 b6e3 d1e2 e3e2 f1e2 b8d7 a2a4 f8e7 o-o-o h7h6 g5h4 e6e5 f4f5 b7b6 e2f3 c8b7 ! # col. 12e; Rajkovic-Udovcic, Yugoslav Chp. 1962 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d4b3 b8d7 d1f3 f8e7 o-o-o b6c7 f1d3 h7h6 g5h4 g7g5 f4g5 d7e5 f3e2 f6g4 b3d4 h6g5 h4g3 c8d7 d4f3 c7c5 ! # col. 13i; Fischer-Vukovic (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 f8e7 d1f3 d8c7 o-o-o b8d7 g2g4 b7b5 g5f6 d7f6 g4g5 f6d7 a2a3 a8b8 h2h4 b5b4 a3b4 b8b4 f1h3 o-o d4e6 f7e6 h3e6 g8h8 c3d5 c7c4 e6f5 f8f5 e4f5 c8b7 h1e1 e7f8 ! # col. 14m Parma-Tatai, Athens 1968 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 b7b5 e4e5 d6e5 f4e5 d8c7 e5f6 c7e5 f1e2 e5g5 d1d3 a8a7 c3e4 g5e5 d4f3 e5b2 o-o a7d7 d3e3 c8b7 a1b1 b2c2 f3g5 c2c6 f6g7 f8g7 ! # col. 15; slight advantage for white. e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 h7h6 g5h4 d8b6 d1d3 b6b2 a1b1 b2a3 e4e5 f6d5 c3d5 a3d3 f1d3 e6d5 e5e6 ! # col. 16c; Fichtl-Dolezal, CSSR 1954 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 d1f3 b8d7 o-o-o d8c7 f3g3 b7b5 f1b5 a6b5 d4b5 c7b8 b5d6 f8d6 g3d6 b8d6 d1d6 h7h6 g5f6 d7f6 h1d1 c8b7 f2f3 ! # col. 17e; Vasyukov-Zukharov, USSR 1960 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 d1d2 b8c6 o-o-o h7h6 g5h4 f6e4 d2f4 e4g5 d4c6 b7c6 f4a4 d8b6 f2f4 g5h7 f4f5 a8b8 f5e6 c8e6 f1c4 ! # col. 18g (somewhat questionable) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 b8d7 f1c4 d8a5 d1d2 e7e6 o-o-o b7b5 c4b3 c8b7 h1e1 a8c8 e4e5 d7e5 d4e6 f7e6 e1e5 d6e5 g5f6 ! # col. 19m; Yanofsky-Bolbochan, Stockholm 1962 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1e2 e7e5 d4b3 f8e7 o-o o-o f2f4 b7b5 a2a3 c8b7 e2f3 b8d7 g2g3 a8c8 d1e1 d7b6 g1h1 b6c4 b3d2 d8d7 d2c4 c8c4 c1d2 d6d5 ! # col. 20p e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1e2 e7e5 d4b3 f8e7 o-o o-o c1e3 b8d7 a2a4 b7b6 d1d2 c8b7 f2f3 d8c7 f1d1 f8c8 b3c1 ! # col. 21b e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 g2g3 e7e5 d4e2 f8e7 f1g2 o-o o-o b7b5 h2h3 c8b7 c3d5 f6d5 e4d5 b8d7 a2a4 d7c5 e2c3 d8d7 a4b5 a6b5 a1a8 f8a8 ! # col. 22 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f2f4 e7e6 d1f3 d8b6 d4b3 b8c6 f1d3 f8e7 c1e3 b6c7 o-o o-o a1e1 c6b4 ! # col. 23f e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1e3 e7e5 d4b3 c8e6 d1d2 b8d7 f2f3 f8e7 g2g4 b7b5 g4g5 f6h5 o-o-o o-o h1g1 a8c8 c3e2 ! # col. 24k; Kotkov-Polugayevski, USSR 1959 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1c4 e7e6 o-o f8e7 c4b3 o-o f2f4 b7b5 a2a3 c8b7 f4f5 e6e5 d4e2 b8d7 e2g3 d7c5 b3d5 b7d5 e4d5 a8c8 c1g5 c5d7 g5f6 d7f6 c3e4 c8c4 ! # col. 25o; Ciocaltea-Minic, Bucharest 1966 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1c4 e7e6 c4b3 b7b5 f2f4 c8b7 f4f5 e6e5 d4e2 b8d7 o-o f8e7 e2g3 a8c8 c1g5 o-o ! # col. 26e e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 o-o-o d6d5 e4d5 f6d5 d4c6 b7c6 c3d5 c6d5 d2d5 d8c7 d5a8 c8f5 a8f8 g8f8 d1d2 h7h5 f1e2 f8g8 a2a3 c7b8 ! # col. 27i; Bikhovski-Gik, Moscow 1968 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 o-o-o d8a5 c4b3 f8c8 g2g4 c6e5 h2h4 e5c4 b3c4 c8c4 d4b3 a5a6 h4h5 c4c3 b2c3 d7e6 c1b1 a8c8 e3d4 c8c4 h5g6 h7g6 ! # col. 28k e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 o-o-o d8a5 c4b3 f8c8 h2h4 c6e5 h4h5 f6h5 e3h6 e5d3 c1b1 d3b2 b1b2 g7h6 d2h6 c8c3 g2g4 h5f6 g4g5 f6h5 ! # col. 29m; Ostojic-Honfi, Monte Carlo 1968 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 o-o-o d8a5 c4b3 f8c8 c1b1 c6e5 h2h4 e5c4 b3c4 c8c4 d4b3 a5c7 h4h5 c4c3 d2c3 c7c3 b2c3 f6h5 e3d4 d7e6 h1e1 h5f6 e4e5 d6e5 d4e5 f6d5 b1b2 a8c8 ! # col. 30p; Karpov-Korchnoi, 2nd match game 1974. e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 h2h4 a8c8 c4b3 c6e5 h4h5 f6h5 o-o-o e5c4 b3c4 c8c4 g2g4 h5f6 d4e2 d8a5 e3h6 g7h6 d2h6 f8c8 d1d3 c4c5 g4g5 c5g5 d3d5 g5d5 c3d5 c8e8 e2c3 d7c6 e4e5 c6d5 e5f6 e7f6 h6h7 g8f8 h7h8 f8e7 c3d5 ! # col. 31 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 g2g3 b8c6 f1g2 c6d4 d1d4 f8g7 o-o o-o d4d3 c8e6 c3d5 f6d5 e4d5 e6f5 ! # col. 32c; Pulsen-Cortlever, Buenos Aires 1939. e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1g5 f8g7 d1d2 b8c6 o-o-o o-o d4b3 f8e8 f2f3 a7a6 c1b1 b7b5 h2h4 c8e6 g2g4 c6e5 ! # col. 33h e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f2f4 b8c6 d4c6 b7c6 e4e5 d6e5 d1d8 e8d8 f4e5 f6g4 c1f4 c8e6 c3e4 f8g7 e4g5 g7e5 o-o-o d8c7 g5e6 f7e6 f4e5 g4e5 d1e1 c7d6 g2g3 e5g4 f1c4 e6e5 e1e2 ! # col. 34j e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f2f4 b8c6 f1b5 d8c7 c3d5 f6d5 e4d5 a7a6 b5c6 b7c6 d4c6 c8b7 c1e3 f8g7 e3d4 g7d4 d1d4 o-o o-o b7c6 ! # col. 35l e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f2f4 b8d7 f1e2 f8g7 c1e3 o-o e2f3 d7b6 d1e2 e7e5 d4b3 f6g4 f3g4 d8h4 g2g3 h4g4 e2g4 c8g4 ! # col. 36a e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o d4b3 c8e6 f2f4 c6a5 f4f5 e6c4 b3a5 c4e2 d1e2 d8a5 g2g4 a8c8 g4g5 c8c3 g5f6 c3e3 e2e3 g7f6 c2c3 f8c8 a2a3 c8c4 a1e1 b7b5 ! # col. 37c; Domnitz-Kraidman, Tel Aviv 1964 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o d4b3 c8e6 f2f4 d8c8 d1e1 f6g4 e2g4 e6g4 f4f5 g6f5 h2h3 g4h3 g2h3 f5e4 e1h4 f7f5 g1h1 f8f7 f1g1 c6e5 c3d5 c8d7 b3d4 e5g6 g1g6 h7g6 a1g1 e7e5 g1g6 d7d8 e3g5 d8a5 d5f6 g8f8 d4e6 ! # col. 38f; Unzicker-Geller, W. Germany-USSR 1960 (drawn) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o d1d2 f6g4 e2g4 c8g4 f2f4 c6d4 e3d4 e7e5 d4e3 e5f4 f1f4 g4e6 f4f2 g7e5 e3d4 a8c8 a1d1 d8a5 a2a3 c8c4 c3e2 a5d2 d1d2 ! # col. 39 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o f2f4 d8b6 d1d3 f6g4 c3d5 g7d4 e2g4 d4e3 d3e3 b6b2 g4c8 a8c8 a1b1 b2a2 b1b7 e7e6 ! # col. 40h e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o f2f4 d8b6 e4e5 d6e5 f4e5 c6e5 d4f5 b6b2 f5e7 g8h8 e3d4 b2b4 d4e5 b4e7 d1d4 f6e8 e5g7 e8g7 e2d3 c8e6 ! # col. 41b; Smyslov-Botvinnik, match 1958 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 h2h4 h7h5 f2f3 o-o d1d2 d6d5 d4c6 b7c6 e4e5 f6e8 f3f4 f7f6 o-o-o f6e5 f4e5 g7e5 g2g4 c8g4 e2g4 h5g4 h4h5 g6g5 ! # col. 42d; Van den Burg-Rajkovic, Orebro 1966 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 d4b3 o-o f2f4 c6a5 g2g4 b7b6 g4g5 f6d7 o-o c8b7 e2d3 a8c8 b3a5 b6a5 d1e1 d7c5 f4f5 g7e5 e1h4 e7e6 f5f6 h7h5 d3e2 g8h7 e2h5 f8h8 ! # col. 43f e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 d4b3 o-o f2f4 c6a5 g2g4 c8e6 g4g5 f6d7 e3d4 f7f6 h2h4 f6g5 d4g7 g8g7 b3d4 e6g8 f4f5 d8b6 ! # col. 44 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 o-o b8c6 d4b3 o-o f2f4 b7b5 e2f3 b5b4 c3d5 f6d5 e4d5 c6a5 b3a5 d8a5 f1e1 f8e8 ! # col. 45i; Smyslov-Korchnoi, Moscow 1960 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 d4b3 b8c6 g2g4 b7b6 f2f4 c8b7 e2f3 o-o h2h4 a7a5 a2a4 c6b4 h4h5 d6d5 e4e5 f6g4 b3d4 g4h6 h5g6 f7g6 d4e6 d8d7 e6f8 a8f8 c3b5 d5d4 ! # col. 46 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 f2f3 e7e5 f1b5 c8d7 b5d7 b8d7 d4f5 d6d5 e4d5 d8a5 b1c3 d7b6 ! # col. 47h; Schweber-Najdorf, Buenos Aires 1970 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 d1d4 b8c6 f1b5 c8d7 b5c6 d7c6 c2c4 g8f6 b1c3 e7e6 c1g5 f8e7 o-o o-o f1e1 h7h6 g5h4 a7a6 a1d1 d8a5 d4d2 a5b6 f3d4 a8c8 e1e3 f8e8 ! # col. 48i e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 d1d4 a7a6 c1e3 g8f6 b1c3 b8c6 d4b6 d8b6 e3b6 g7g6 o-o-o f8h6 c1b1 o-o f3d4 c8d7 f2f3 c6e5 d4b3 f8c8 b3a5 d7c6 c3d5 c6d5 e4d5 f6d7 b6d4 b7b6 ! # col. 49m; Fischer-Korchnoi, Buenos-Aires 1960 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 c2c3 d4c3 b1c3 b8c6 f1c4 e7e6 o-o a7a6 d1e2 g8f6 f1d1 d8c7 c1g5 f8e7 a1c1 o-o c4b3 h7h6 g5f4 e6e5 f4e3 c7d8 c3d5 f6d5 b3d5 c8d7 ! # col. 50 e2e4 c7c5 g1f3 d7d6 d2d4 g8f6 d4c5 f6e4 c5d6 e7e6 d1d3 e4d6 b1c3 b8c6 c1f4 f7f6 o-o-o e6e5 c3b5 ! # col. 51c; Pfeiffer-Kottnauer, Helsinki 1952 e2e4 c7c5 g1f3 d7d6 c2c3 g8f6 f1d3 b8c6 d3c2 c8g4 h2h3 g4h5 d2d3 d6d5 d1e2 e7e6 b1d2 f8e7 d2f1 d8a5 ! # col. 52d; Brasket-Evans, U.S. Open Chp. 1960 e2e4 c7c5 g1f3 d7d6 c2c3 g8f6 d2d3 g7g6 g2g3 f8g7 b1d2 o-o f1g2 e7e5 o-o b8c6 a2a4 h7h6 d2b1 d8a5 ! # col. 53h; Ciocaltea-Fischer, Varna 1962 e2e4 c7c5 g1f3 d7d6 g2g3 g7g6 f1g2 f8g7 o-o b8c6 c2c3 e7e5 d2d3 g8e7 f3h4 o-o f2f4 e5f4 g3f4 f7f5 b1d2 g8h8 d2f3 ! # col. 54k; Tarjan-Mednis, U.S. Chp. 1973 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 e7e6 f1e2 g7g6 d4b3 ! e2e4 c7c5 g1f3 d7d6 b1c3 g8f6 e4e5 d6e5 f3e5 a7a6 f1e2 e7e6 o-o d8c7 e5c4 b7b5 c4e3 f8d6 h2h3 b8c6 a2a4 b5b4 c3b1 c8b7 d2d3 c6d4 b1d2 o-o d2f3 d4e2 d1e2 f8e8 e3c4 e6e5 f3g5 e5e4 c4d6 c7d6 g5e4 f6e4 d3e4 b7e4 c1e3 d6c6 ! # col. 55o; Medina-Pomar, Santander 1947 e2e4 c7c5 g1f3 d7d6 b2b4 c5b4 d2d4 g8f6 f1d3 d6d5 b1d2 d5e4 d2e4 b8d7 e4g5 d8c7 c2c4 h7h6 g5h3 g7g5 h3g1 f8g7 g1e2 e7e5 e2g3 e5e4 d1e2 o-o ! # col. 56e; del Corral-Benko, Mallorca 1968 e2e4 c7c5 g1f3 d7d6 f1b5 c8d7 b5d7 d8d7 o-o b8c6 f1e1 g8f6 c2c3 e7e6 d2d3 f8e7 a2a4 o-o b1d2 d7c7 ! # col. 57g; Radovich-Lombardy, Leipzig 1960 e2e4 c7c5 g1f3 d7d6 f1b5 b8c6 o-o a7a6 b5c6 b7c6 d2d4 c5d4 d1d4 e7e5 d4d3 f7f6 c2c4 c8e6 b1c3 d8c7 ! # col. 58j; Gurgenidze-Osnos, Alma Ata 1969 e2e4 c7c5 g1f3 b8c6 f1b5 e7e6 b1c3 g8e7 o-o a7a6 b5c6 e7c6 d2d4 c5d4 f3d4 d7d6 d4c6 b7c6 d1g4 g7g6 e4e5 d6d5 c1g5 f8e7 ! # col. 59m e2e4 c7c5 g1f3 b8c6 f1b5 g7g6 o-o f8g7 c2c3 g8f6 f1e1 o-o d2d4 c5d4 c3d4 d7d5 e4e5 f6e4 b1c3 e4c3 b2c3 c6a5 c1g5 c8f5 f3d2 f8e8 ! # col. 60o e2e4 c7c5 g1f3 b8c6 f1b5 g7g6 o-o f8g7 f1e1 e7e5 f1e1 o-o d2d4 c5d4 c3d4 d7d5 e4e5 f6e4 b1c3 e4c3 b2c3 c6a5 c1g5 c8f5 f3d2 f8e8 ! # col. 61c; Barczay-Szilagyi, Hungarian Chp. 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 g5f6 g7f6 d4b3 h8g8 g2g3 f6f5 d1d2 f8g7 e4f5 d7f5 f1g2 d8d7 o-o g7c3 b2c3 f5h3 g2h3 d7h3 ! # col. 62e e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d4b3 h7h6 g5h4 a8c8 f1e2 g7g5 h4g3 h6h5 h2h4 g5g4 g3f4 c6e5 d1d4 e5g6 f4g5 f8g7 o-o ! # col. 63g; Matulovic-Masic, Sombor 1968 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 f2f4 d8b6 d4b3 f6g4 d1e2 c6d4 c3d5 d4e2 d5b6 a7b6 e1e2 h7h6 g5h4 g7g5 h4g3 g5f4 g3f4 f8g7 c2c3 d7c6 ! # col. 64j; Liberzo-Stein, USSR Chp. 1969-70. Complete game (draw). e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d3 c6d4 d3d4 d8a5 f2f4 e7e5 d4d3 f8e7 o-o-o d7c6 c1b1 e5f4 g5f4 o-o f1e2 f8e8 e2f3 e7f8 c3d5 f6d7 d3d2 a5d2 d1d2 a8c8 h1d1 d7e5 b2b3 ! # col. 65m; Bronstein-Stein, USSR 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d3 c6d4 d3d4 d8a5 f1e2 e7e5 d4d3 a5c7 e2g4 f8e7 g5f6 e7f6 o-o-o f6e7 c3b5 d7b5 d3b5 c7c6 b5d5 c6d5 d1d5 ! # col. 66b; Benko-R. Byrne, US Open Chp. 1968 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 g5d2 a7a6 f1c4 a5c5 d4c5 c8c5 c4b3 g7g6 d2e3 c5c8 e3d4 f8g7 c3d5 f6h5 d4g7 h5g7 e4e5 c8c6 d5b4 c6b6 ! # col. 66b alternate; Polgar-Nagy, Hungarian Chp. 1972 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 g5d2 e7e5 d4d3 a7a6 c1b1 h7h6 f2f3 a5c7 g2g3 f8e7 h2h4 b7b5 ! # col. 67c; Suetin-Gheorghiu, Hastings 1967/8. Draw. e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 g5e3 a7a6 f2f3 e7e6 d4b6 a5b6 e3b6 d7c6 f1c4 c6e4 c4e6 f7e6 c3e4 f6e4 f3e4 f8e7 h1f1 e7g5 c1b1 e8e7 c2c3 h8f8 b1c2 f8f1 d1f1 c8f8 ! # col. 68d e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 f2f4 e7e6 e4e5 d6e5 f4e5 c8c3 g5d2 a5a2 d2c3 g7g6 ! # col. 69fA1; Janosevic-Larsen, Belgrade 1964 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 f2f4 c8c3 b2c3 e7e5 d4b4 a5b4 c3b4 f6e4 f1c4 b7b5 c4d5 e4c3 f4e5 h7h6 g5h4 g7g5 h4g3 c3e2 c1b2 e2g3 h2g3 f8g7 ! # col. 70g; Bednarski-Simagin, Polanica Zdroj 1968 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 c8c3 d4c3 f6e4 c3e3 e4g5 e3g5 d8b6 f1c4 e7e6 g5g3 g7g6 c4b3 f8e7 h2h4 h7h5 h1e1 b6b4 g3e3 a7a5 e3d4 ! # col. 71d e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o c6d4 d2d4 o-o f2f4 h7h6 g5h4 d8a5 f1c4 e6e5 f4e5 d6e5 d4d3 a5c5 h4f6 e7f6 ! # col. 72g e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o c6d4 d2d4 o-o f2f4 d8a5 f1c4 c8d7 c4b3 d7c6 h1f1 b7b5 g5f6 e7f6 d4d6 f6c3 d6c6 a8c8 c6d7 c8d8 d7e7 c3d2 c1b1 d2f4 d1d8 a5d8 ! # col. 73i e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o d4b3 d8b6 f2f3 a7a6 g2g4 f8d8 g5e3 b6c7 h2h4 b7b5 g4g5 f6d7 g5g6 f7g6 h4h5 g6h5 h1h5 d7f6 h5g5 c6e5 d2g2 e7f8 f3f4 e5c4 f1c4 b5c4 b3d4 a8b8 d1g1 b8b7 ! # col. 74; Tal-Larsen, match 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o d4b3 a7a6 g5f6 g7f6 f1e2 g8h8 e2h5 c8d7 f2f4 b7b5 c1b1 ! # col. 75k e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o d4b5 d8a5 g5f6 e7f6 b5d6 f8d8 f2f4 e6e5 d2d5 a5c7 f4f5 c6d4 d6b5 c7a5 d5c4 c8f5 b2b4 a5a6 ! # col. 76b; Spasski-Larsen, Santa Monica 1966 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o f2f4 h7h6 g5h4 e6e5 d4f5 c8f5 e4f5 d8a5 c1b1 a8d8 h4f6 e7f6 c3d5 a5d2 d5f6 g7f6 d1d2 e5f4 ! # col. 77e; Kujpers-Minev, Halle 1967 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o f2f4 d6d5 e4e5 f6d7 h2h4 d7b6 d2e3 c8d7 g5e7 d8e7 h4h5 c6a5 d4b3 a5c4 e3d4 f8c8 c1b1 a7a5 f4f5 a5a4 f5f6 e7f8 h1h3 c4b2 b1b2 b6c4 f1c4 c8c4 d4d2 ! # col. 78h e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 a7a6 o-o-o c8d7 f2f4 h7h6 g5h4 f6e4 d2e1 e4f6 d4f5 d8a5 f5d6 f8d6 d1d6 o-o-o d6d1 e6e5 f1c4 e5f4 c3e4 d7e6 c4e6 f7e6 e4d6 c8b8 e1e6 h8f8 ! # col. 79j; O'Kelly-Simagin corr. 1964 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 a7a6 o-o-o h7h6 g5h4 f6e4 d2f4 e4g5 d4c6 b7c6 f4a4 d8b6 f2f4 g5h7 f4f5 f8e7 c3e4 a8b8 a4a3 b6b5 ! # col. 80k; Di Camillo-R. Byrne, US Open Chp. 1958 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 h7h6 g5f6 g7f6 o-o-o a7a6 f2f4 c8d7 f1e2 h6h5 c1b1 d8b6 d4b3 o-o-o h1f1 f8e7 c3a4 b6a7 c2c4 c6d4 ! # col. 81b e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d4c6 b7c6 e4e5 d6e5 d1f3 f8e7 f3c6 c8d7 c6f3 e5e4 c3e4 f6e4 g5e7 d8a5 ! # col. 82e e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d3 f8e7 a1d1 o-o f1e2 c8d7 o-o c6d4 d3d4 d7c6 g1h1 d8a5 f2f4 f8e8 ! # col. 83 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 h2h3 g7g6 c1e3 f8g7 d1d2 o-o o-o-o c6d4 e3d4 d8a5 c1b1 e7e5 d4e3 c8e6 ! # BAD! -- col. 84i; Karaklajic-Taimanov, Yugoslavia-USSR, match 1956 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1e3 f6g4 f1b5 g4e3 f2e3 c8d7 o-o e7e6 5c6 b7c6 e4e5 f8e7 d1h5 o-o e5d6 e7d6 c3e4 d6e7 a1d1 d8c7 d4b3 h7h6 ! # col. 85 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 d4e2 e7e6 g2g3 d6d5 e4d5 f6d5 f1g2 d5c3 d1d8 e8d8 e2c3 c8d7 c1d2 f8e7 ! # col. 86c; Carcia-Pomar, Havana 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e5 d4e2 c8e6 c4e6 f7e6 o-o f8e7 f2f4 o-o e2g3 e5f4 f1f4 d8b6 g1h1 a8d8 b2b3 d6d5 e4d5 f6d5 f4f8 e7f8 c3d5 d8d5 d1e1 c6d4 c1e3 f8c5 ! # col. 87 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 d8b6 d4b3 e7e6 o-o f8e7 c1e3 b6c7 f2f4 o-o c4d3 a7a6 d1f3 ! # col. 88 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e6 c1e3 d8c7 d1e2 a7a6 c4b3 c6a5 g2g4 b7b5 g4g5 f6d7 o-o-o d7c5 ! # col. 89mA; Spasjevic-Ostojic, Belgrade 1966 (draw) e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e6 c1e3 f8e7 d1e2 a7a6 o-o-o o-o c4b3 d8c7 g2g4 c6d4 d1d4 e6e5 d4c4 c7d8 g4g5 f6e8 h1g1 c8d7 c3d5 d7b5 e3b6 d8d7 e2g4 e7d8 g4d7 b5d7 c4c3 d7e6 b6d8 a8d8 d5e3 d8d7 b3a4 d7c7 ! # col. 90o; Bogdanovic-Shamkovich, Sarajevo 1963 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e6 c1e3 f8e7 d1e2 o-o o-o-o c6d4 e3d4 d8a5 e4e5 d6e5 d4e5 b7b6 c3b5 c8a6 e5c3 a5a4 d1d4 a6b5 c4b5 a4a2 h1d1 f8d8 d4a4 d8d1 e2d1 a2d5 d1d5 f6d5 c3d4 e7g5 c1b1 h7h5 b5c6 a8d8 a4a7 d5b4 c6d7 b4c6 ! # Queen's Catalan, col. 1c; Kramer-Fichtl, Varna Olympics 1962 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 b1c3 c7c6 b2b3 b7b6 c1b2 c8b7 d1c2 a8c8 a1d1 d8c7 e2e4 d5e4 c3e4 f6e4 c2e4 c6c5 d4d5 e7f6 e4c2 e6d5 c4d5 f6b2 c2b2 c8d8 ! # col. 2f d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 b1c3 d5c4 e2e4 c7c6 a2a4 a7a5 d1e2 d7b6 f1d1 e7b4 f3e5 d8e7 c1e3 c8d7 e5c4 b6c4 e2c4 e6e5 d4e5 f6g4 ! # col. 3i; Geller-Medina, Beverwijk 1965 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 d1c2 b7b6 c4d5 f6d5 b1c3 c8b7 c3d5 b7d5 e2e4 d5b7 f1d1 c7c5 d4d5 e6d5 e4d5 e7f6 h2h4 h7h6 ! # col. 4k; Geller-Bisguier, Bled 1961 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 d1c2 c7c6 b2b3 b7b6 c1b2 c8b7 b1c3 a8c8 a1d1 b6b5 c4c5 b5b4 c3b1 f6e4 f3e1 f7f5 e1d3 a7a5 d3f4 f8f6 f2f3 e4g5 ! # col. 5m; Benko-Pachman, Budapest 1948 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 d1c2 c7c6 b1d2 b7b6 e2e4 c8b7 b2b3 a8c8 f1d1 d8c7 c1b2 f8d8 a1c1 c7b8 c2b1 a7a5 f3e5 b8a8 ! # col. 6 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o c7c6 b1c3 b7b6 f3e5 a7a5 d1c2 c8a6 f1d1 b6b5 ! # col. 7d; Evans-Poschel, US Jr. Chp. 1947 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 c7c5 c4d5 f6d5 f1g2 c5d4 o-o f8c5 f3d4 o-o a2a3 b8c6 d4c6 b7c6 b2b4 c5e7 c1b2 e7f6 d1c2 f6b2 c2b2 a7a5 ! # col. 8g; O'Kelly-Euwe, New York 1951 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 d5c4 f1g2 c7c5 o-o b8c6 d1a4 f6d7 d4c5 f8c5 a4c4 o-o b1c3 a7a6 c3e4 c5e7 c1e3 d7b6 c4b3 b6d5 f1d1 d8c7 ! # col. 9 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 d5c4 f1g2 b7b5 a2a4 c7c6 o-o c8b7 f3e5 d8c8 b2b3 c4b3 d1b3 b5b4 a4a5 f6d7 ! # col. 10l; Keres-Korchnoi, Curacao 1962 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 d5c4 d1a4 b8d7 f1g2 a7a6 a4c4 c7c5 d4c5 f8c5 o-o b7b5 c4h4 c8b7 b1d2 c5e7 d2b3 a8c8 h4d4 o-o c1d2 d7c5 ! # col. -- Accelerated Catalan d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 b8d7 b1d2 c7c6 a4c4 e6e5 g1f3 d7b6 c4d3 e5d4 f3d4 f8e7 o-o o-o ! # col. 12e; Muller-Ratzek, Vienna 1951 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 c8d7 a4c4 d7c6 g1f3 c6d5 c4d3 c7c5 b1c3 d5c6 o-o b8d7 f1d1 d8b6 e2e4 c5d4 f3d4 f8c5 d4c6 c5f2 g1f1 b7c6 c3a4 b6a5 f1f2 a5a4 d3d6 ! # col. 13f; Smyslov-Kere, USSR Chp. 1948 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 c8d7 a4c4 d7c6 g1f3 b8d7 b1c3 d7b6 c4d3 f8b4 o-o o-o f1d1 h7h6 c1d2 d8e7 a2a3 b4c3 d3c3 f8d8 ! # col. 14g d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 b1c3 d5c4 d1a4 b8c6 f1g2 c8d7 a4c4 c6b4 c4b3 c7c5 g1f3 c5d4 f3d4 e6e5 d4f3 d7e6 b3a4 e6d7 ! # col. 15; Stoltz-Vidmar, Groningen 1946 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 b1c3 f8e7 f1g2 o-o g1f3 d5c4 d1a4 a7a6 a4c4 b7b5 c4d3 c8b7 ! # col. 16 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 b1d2 c7c5 d4c5 f8c5 f1g2 b8c6 g1f3 o-o o-o a7a5 c4d5 e6d5 d2b3 c5b6 ! # col. 17d; Mikenas-Aronin, USSR Chp. 1963 d2d4 d7d5 c2c4 e7e6 g2g3 c7c5 c4d5 e6d5 g1f3 b8c6 f1g2 g8f6 o-o f8e7 d4c5 e7c5 b1d2 o-o d2b3 c5b6 b3d4 f8e8 b2b3 c6d4 f3d4 b6d4 d1d4 e8e2 ! # col. 18e d2d4 d7d5 c2c4 e7e6 g2g3 d5c4 d1a4 c8d7 a4c4 c7c5 d4c5 d7c6 g1f3 b8d7 c1e3 g8f6 f1g2 d8c7 o-o c6d5 c4a4 f8c5 e3c5 c7c5 b1c3 d5c6 ! # col. 19 d2d4 d7d5 c2c4 e7e6 g2g3 f8b4 c1d2 b4d2 d1d2 g8f6 g1f3 o-o f1g2 d8e7 o-o b8c6 f1c1 ! # col. 20 d2d4 d7d5 c2c4 e7e6 g2g3 f8b4 c1d2 b4e7 f1g2 g8f6 g1f3 o-o d1b3 b7b6 c4d5 e6d5 b1c3 c8b7 o-o ! # col. 21 d2d4 g8f6 c2c4 e7e6 g2g3 e6e5 g1f3 e5d4 f3d4 d7d5 f1g2 d5c4 d1a4 c7c6 a4c4 f8e7 o-o o-o f1d1 ! # col. 22 d2d4 g8f6 c2c4 e7e6 g2g3 c7c5 g1f3 c5d4 f3d4 d7d5 f1g2 e6e5 d4f3 d5d4 o-o b8c6 e2e3 f8e7 e3d4 e5d4 ! # col. 23g d2d4 g8f6 c2c4 e7e6 g2g3 c7c5 g1f3 c5d4 f3d4 b8c6 f1g2 d8b6 d4c2 f8c5 e2e3 o-o b1c3 b6a6 d1d2 f8d8 a2a3 d7d5 b2b4 d5d4 c3e4 ! # col. 24j; Smyslov-Petrosian, Moscow 1967 d2d4 g8f6 c2c4 e7e6 g2g3 f8b4 b1d2 c7c5 d4c5 b4c5 f1g2 b8c6 g1f3 b7b6 o-o c8b7 a2a3 o-o b2b4 c5e7 c1b2 a8c8 d1b1 ! # col. 25 d2d4 g8f6 c2c4 e7e6 g2g3 f8b4 c1d2 b4d2 d1d2 f6e4 d2c2 f7f5 f2f3 e4f6 e2e4 f5e4 f3e4 e6e5 ! # Alternate openings leading to the Catalan, line C g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 d2d4 ! # line D c2c4 g8f6 d2d4 e7e6 g2g3 d7d5 ! # line E d2d4 g8f6 c2c4 e7e6 g2g3 d7d5 ! # The Reti Opening, col. 1c; Muller-Lilenthal, Budapest 1933 g1f3 d7d5 c2c4 c7c6 b2b3 g8f6 g2g3 c8f5 c1b2 e7e6 f1g2 b8d7 o-o f8d6 d2d3 o-o b1c3 d8e7 f1e1 e6e5 c4d5 c6d5 e2e4 d5e4 d3e4 f5g6 ! # col. 2g; Bilek-Geller, Sousse 1967 g1f3 d7d5 c2c4 c7c6 b2b3 g8f6 g2g3 c8g4 f1g2 e7e6 c1b2 b8d7 o-o f8e7 d2d3 o-o b1d2 a7a5 a2a3 d8b6 d1c2 h7h6 b2c3 f8c8 f1e1 b6d8 e2e4 d8f8 ! # col. 3k; Botvinnik-Fine, Nottingham 1936 g1f3 d7d5 c2c4 d5c4 b1a3 c7c5 a3c4 b8c6 g2g3 e7e5 f1g2 f7f6 b2b3 g8e7 c1b2 e7d5 o-o f8e7 f3h4 o-o d1b1 f8f7 h4f5 c8e6 f2f4 e5f4 g3f4 d5b6 g2e4 e6c4 ! # col. 4n; Katetov-Alekhin, Prague 1943 g1f3 d7d5 c2c4 d5d4 e2e3 b8c6 e3d4 c6d4 f3d4 d8d4 b1c3 e7e5 d2d3 f8c5 c1e3 d4d6 c3b5 d6e7 e3c5 e7c5 d3d4 e5d4 d1d4 c5d4 b5d4 c8g4 ! # col. 5o g1f3 d7d5 c2c4 d5d4 e2e3 c7c5 e3d4 c5d4 g2g3 b8c6 f1g2 g7g6 d2d3 f8g7 o-o e7e5 f1e1 f7f6 b2b4 c6b4 d1a4 b4c6 f3d4 d8d4 g2c6 c8d7 ! # col. 6 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 f8e7 o-o o-o b2b3 c7c5 c4d5 f6d5 c1b2 b8c6 d2d4 d5b4 a2a3 b4a6 d4c5 d8d1 ! # col. 7 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 f8e7 b1c3 o-o b2b3 c7c5 c1b2 b8c6 c4d5 e6d5 a1c1 c8e6 o-o a8c8 d2d4 f8e8 ! # col. 8g; Kashdan-Horowitz, New York 1931 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 b8d7 b2b3 c7c6 o-o f8d6 c1b2 o-o b1c3 b7b6 d2d3 c8b7 e2e4 d5e4 d3e4 d8c7 d1e2 f8d8 f1d1 ! # col. 9h; Abroshin-Krykov corr. 1960 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 c8d7 a4c4 d7c6 o-o c6d5 c4a4 d8d7 a4c2 b8c6 b1c3 d5f3 g2f3 c6d4 c2d3 c7c6 ! # col. 10m; Teti-Tartakover, Semmering 1926 g1f3 d7d5 c2c4 e7e6 g2g3 d5c4 d1a4 c8d7 a4c4 c7c5 f3e5 b8c6 e5d7 d8d7 f1g2 g8f6 d2d3 f8e7 o-o c6d4 b1c3 a8d8 a2a4 f6d5 ! # Barcza System, col. 11 g1f3 d7d5 g2g3 g8f6 f1g2 c8f5 o-o c7c6 c2c4 d5c4 b1a3 e7e5 a3c4 e5e4 f3e1 f8c5 d2d3 o-o c1e3 b8d7 ! # col. 12d; Benko-Petrosian, Curacao 1962 g1f3 d7d5 g2g3 g8f6 f1g2 c8f5 o-o c7c6 d2d3 b8d7 b1d2 h7h6 d1e1 e7e6 e2e4 f5h7 e1e2 f8e7 e4e5 f6g8 d2b3 e7f8 c2c4 g8e7 b3d4 e7f5 d4f5 h7f5 c4d5 c6d5 d3d4 a7a5 c1e3 f8e7 f1c1 o-o ! # col. 13f; Bronstein-O'Kelly, Beverwijk 1963 g1f3 d7d5 g2g3 g8f6 f1g2 c7c5 o-o e7e6 d2d3 b8c6 b1d2 f8e7 e2e4 o-o f1e1 d8c7 e4e5 f6d7 d1e2 b7b5 h2h4 a7a5 d2f1 c8a6 f1h2 c6b4 h4h5 ! # col. 14i; Evans-Olafsson, Dallas 1957 g1f3 d7d5 g2g3 g8f6 f1g2 g7g6 o-o f8g7 d2d3 o-o b1d2 b8c6 e2e4 e7e5 c2c3 a7a5 f1e1 d5e4 d3e4 f6d7 d1e2 b7b6 d2c4 c8a6 g2f1 d8f6 ! # col. 15 g1f3 d7d5 g2g3 g8f6 f1g2 g7g6 d2d4 f8g7 o-o c7c6 b2b3 b8d7 c1b2 e7e5 d4e5 f6g4 b1d2 d7e5 f3e5 g4e5 ! # col. 16d; Larsen-Mecking, Mallorca 1969 g1f3 d7d5 g2g3 c7c5 f1g2 b8c6 o-o e7e6 d2d3 g7g6 b1c3 f8g7 a2a3 g8e7 a1b1 o-o c1d2 a8b8 b2b4 c5b4 a3b4 b7b5 e2e4 a7a5 ! # col. 17h; Benko-Bisguier, US Chp. 1963 g1f3 d7d5 g2g3 c8g4 f1g2 b8d7 c2c4 c7c6 c4d5 c6d5 b1c3 e7e6 d1b3 d8b6 b3b6 d7b6 d2d3 a8c8 c1e3 f8d6 c3b5 d6b8 o-o g8e7 f1c1 c8c1 a1c1 e7c6 f3d4 e8d7 ! # col. 18j; Keene-Basman, Hastings 1966-7 g1f3 d7d5 g2g3 c8g4 f1g2 g8f6 c2c4 c7c6 c4d5 g4f3 g2f3 c6d5 d1b3 d8d7 b1c3 e7e6 o-o b8c6 f3g2 f8e7 d2d3 o-o ! # col. 19k g1f3 d7d5 g2g3 c8g4 f1g2 g8f6 c2c4 c7c6 d1c2 e7e6 o-o f8e7 b2b3 b8d7 c1b2 o-o d2d3 a7a5 b1d2 a5a4 b2c3 a4b3 a2b3 d8b6 ! # col. 20m g1f3 d7d5 g2g3 c8g4 f1g2 g8f6 o-o c7c6 c2c4 e7e6 c4d5 g4f3 g2f3 c6d5 b1c3 b8c6 d2d3 f8e7 f3g2 ! # col. 21b; Savon-Aronin, USSR 1963 g1f3 d7d5 g2g3 b8c6 d2d4 c8f5 f1g2 c6b4 b1a3 e7e6 o-o g8f6 f3h4 f5g4 c2c4 c7c6 a3c2 b4c2 d1c2 f8e7 h2h3 g4h5 f2f3 h5g6 h4g6 h7g6 ! # col. 22d; Fischer-Ivkov, Santa Monica 1966 g1f3 d7d5 g2g3 e7e6 f1g2 c7c5 o-o b8c6 d2d3 f8d6 e2e4 g8e7 b1d2 o-o f3h4 b7b6 f2f4 d5e4 d3e4 c8a6 f1e1 c5c4 c2c3 ! # col. 23 g1f3 d7d5 g2g3 b8d7 c2c4 e7e6 f1g2 g8f6 b1c3 f8e7 o-o o-o d2d3 c7c5 c4d5 e6d5 c1g5 b7b6 ! # col. 24g; Benko-Bisguier, US Chp. 1976-7 g1f3 d7d5 g2g3 g8f6 f1g2 b7b6 c2c4 e7e6 c4d5 e6d5 o-o f8d6 d2d4 o-o b1c3 c7c6 f3e5 c8b7 c1g5 h7h6 g5f6 d8f6 f2f4 f8d8 e2e4 ! # col. 25; Rabinovich-Rauser, Moscow 1934 g1f3 d7d5 b2b3 c8g4 c1b2 b8d7 c2c4 e7e6 e2e3 g8f6 f1e2 c7c6 f3d4 g4e2 d1e2 f8d6 f2f4 o-o ! # col. 26e; Evans-Najdorf, Dallas 1967 g1f3 c7c5 g2g3 b8c6 f1g2 g7g6 o-o f8g7 e2e4 d7d6 c2c3 e7e5 d2d3 g8h6 f3e1 o-o f2f4 e5f4 c1f4 h6g4 b1a3 g4e5 g1h1 d8b6 d1d2 c8e6 ! # col. 27h; Van den Pol-Barden, Holland v. England 1960 g1f3 f7f5 g2g3 g8f6 f1g2 g7g6 d2d3 f8g7 b1d2 d7d6 e2e4 e7e5 d2c4 o-o e4f5 g6f5 c1e3 b8c6 d3d4 e5e4 ! # col. 28m; Gufeld-Bokuchava, USSR Chp. prelims 1968 g1f3 f7f5 g2g3 g8f6 f1g2 e7e6 c2c4 f8e7 o-o o-o d2d3 d7d6 b1c3 b8c6 a1b1 a7a5 a2a3 d8e8 b2b4 a5b4 a3b4 e6e5 ! # col. 29p; Lundin-Tartakover, Groningen 1946 g1f3 f7f5 g2g3 g8f6 f1g2 e7e6 c2c4 f8e7 o-o o-o b2b3 c7c5 c1b2 b8c6 b1c3 e6e5 e2e3 d7d6 d2d4 ! # col. 30 g1f3 g7g6 g2g3 f8g7 f1g2 e7e5 d2d3 b8c6 e2e4 d7d6 b1c3 g8e7 c1e3 o-o d1d2 c6d4 o-o ! # King's Indian attack, col. 31a g1f3 g8f6 g2g3 b7b5 h2h4 b5b4 d2d3 c8b7 e2e4 d7d6 f1g2 b8d7 o-o e7e6 h4h5 a8b8 b1d2 f8e7 d2c4 o-o ! # col. 32d g1f3 g8f6 g2g3 g7g6 b2b4 f8g7 c1b2 o-o f1g2 d7d5 o-o c8g4 c2c4 c7c6 b1a3 b8d7 a1c1 a7a5 b4b5 a5a4 d2d3 e7e5 ! # col. 33e; Olafsson-Kavalek, Wijik aan Zee 1969 g1f3 g8f6 g2g3 g7g6 b2b3 f8g7 c1b2 o-o f1g2 d7d6 d2d4 f6d7 b1c3 e7e5 d1d2 f8e8 d4e5 d7e5 f3e5 g7e5 ! # col. 34h g1f3 g8f6 g2g3 g7g6 c2c4 d7d6 f1g2 f8g7 o-o o-o b1c3 b8d7 d2d3 e7e5 c1d2 d7c5 b2b4 c5e6 a1b1 f6e8 a2a4 c7c6 a4a5 e8c7 ! # col. 35 g1f3 g8f6 c2c4 g7g6 b2b3 f8g7 c1b2 o-o e2e3 d7d6 f1e2 e7e5 o-o f8e8 b1c3 b8d7 d2d3 c7c6 ! # col. 36d g1f3 g8f6 c2c4 g7g6 b1c3 d7d5 c4d5 f6d5 d1a4 c8d7 a4b3 d5b6 d2d4 f8g7 c1f4 d7e6 b3c2 b8c6 a1d1 ! # col. 37f g1f3 g8f6 c2c4 b7b6 g2g3 c8b7 f1g2 c7c5 o-o g7g6 b2b3 f8g7 c1b2 o-o b1c3 d7d5 c3d5 f6d5 b2g7 g8g7 c4d5 d8d5 d2d4 b8a6 ! # col. 38h; Geller-Kholmov, Moscow 1969 g1f3 g8f6 c2c4 b7b6 g2g3 c8b7 f1g2 e7e6 o-o f8e7 b2b3 o-o c1b2 d7d5 e2e3 b8d7 b1c3 f6e4 c4d5 e4c3 b2c3 e6d5 ! # col. 39 g1f3 g8f6 b2b3 g7g6 c2c4 f8g7 c1b2 o-o g2g3 c7c5 f1g2 b7b6 o-o c8b7 b1c3 e7e6 a1b1 d8e7 ! # col. 40o; Lombardy-Burger, US Chp. 1969-70 g1f3 g8f6 b2b3 d7d5 c1b2 e7e6 e2e3 f8e7 c2c4 o-o d2d4 b7b6 f1d3 c8b7 o-o b8d7 b1d2 c7c5 d1e2 f6e4 a1c1 a8c8 ! ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее/* C source for CHESS. Revision: 5-23-88 Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. Copyright (c) 1988 John Stanback This file is part of CHESS. CHESS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. No author or distributor accepts responsibility to anyone for the consequences of using it or for whether it serves any particular purpose or works at all, unless he says so in writing. Refer to the CHESS General Public License for full details. Everyone is granted permission to copy, modify and redistribute CHESS, but only under the conditions described in the CHESS General Public License. A copy of this license is supposed to have been given to you along with CHESS so you can know your rights and responsibilities. It should be in a file named COPYING. Among other things, the copyright notice and this notice must be preserved on all copies. */ /* modified to compile under Megamax Laser C by Eric R. Smith */ /* Aug. 9, 1988 */ /* modified by Chris Page 24/3/91 to work under GNU C on Mkernel and GNU C ** on Tos */ #include #include #ifdef MSDOS # include # include # include # define ttblsz 4096 #else # ifdef MEGAMAX # define ttblsz 4096 # define huge # include extern long time(); # else # ifdef minix # include # define ttblsz 16384 # define huge # else #ifdef gcctos # include # include # include # define ttblsz 4096 # define huge # else # include # include # define ttblsz 16384 # define huge #endif minix #endif gcctos # endif MEGAMAX #endif MSDOS #define neutral 2 #define white 0 #define black 1 #define no_piece 0 #define pawn 1 #define knight 2 #define bishop 3 #define rook 4 #define queen 5 #define king 6 #define valueP 100 #define valueN 350 #define valueB 355 #define valueR 550 #define valueQ 1100 #define valueK 1200 #define ctlP 0x4000 #define ctlN 0x2800 #define ctlB 0x1800 #define ctlR 0x0400 #define ctlQ 0x0200 #define ctlK 0x0100 #define ctlBQ 0x1200 #define ctlRQ 0x0600 #define ctlNN 0x2000 #define pxx " PNBRQK" #define qxx " pnbrqk" #define rxx "12345678" #define cxx "abcdefgh" #define check 0x0001 #define capture 0x0002 #define draw 0x0004 #define promote 0x0008 #define cstlmask 0x0010 #define epmask 0x0020 #define exact 0x0040 #define pwnthrt 0x0080 #define truescore 0x0001 #define lowerbound 0x0002 #define upperbound 0x0004 #define maxdepth 30 #define true 1 #define false 0 #define absv(x) ((x) < 0 ? -(x) : (x)) #define taxicab(a,b) (abs(column[a]-column[b]) + abs(row[a]-row[b])) struct leaf { short f,t,score,reply; unsigned short flags; }; struct GameRec { unsigned short gmove; short score,depth,time,piece,color; long nodes; }; struct TimeControlRec { short moves[2]; long clock[2]; }; struct BookEntry { struct BookEntry *next; unsigned short *mv; }; struct hashval { unsigned long bd; unsigned short key; }; struct hashentry { unsigned long hashbd; unsigned short mv,flags; short score,depth; }; char mvstr1[5],mvstr2[5],mvstr3[6]; struct leaf Tree[1500],*root; short TrPnt[maxdepth],board[64],color[64]; short row[64],column[64],locn[8][8],Pindex[64],svalue[64]; short PieceList[2][16],PieceCnt[2],atak[2][64],PawnCnt[2][8]; short castld[2],kingmoved[2],mtl[2],pmtl[2],emtl[2],hung[2]; short c1,c2,*atk1,*atk2,*PC1,*PC2,EnemyKing; short mate,post,opponent,computer,Sdepth,Awindow,Bwindow,dither; long ResponseTime,ExtraTime,Level,et,et0,time0,cputimer,ft; long NodeCnt,evrate,ETnodes,EvalNodes,HashCnt; short quit,reverse,bothsides,hashflag,InChk,player,force,easy,beep; short wking,bking,FROMsquare,TOsquare,timeout,Zscore,zwndw,xwndw,slk; short INCscore; short HasPawn[2],HasKnight[2],HasBishop[2],HasRook[2],HasQueen[2]; short ChkFlag[maxdepth],CptrFlag[maxdepth],PawnThreat[maxdepth]; short Pscore[maxdepth],Tscore[maxdepth],Threat[maxdepth]; struct GameRec GameList[240]; short GameCnt,Game50,epsquare,lpost,rcptr,contempt; short MaxSearchDepth,Xscore; struct BookEntry *Book; struct TimeControlRec TimeControl; short TCflag,TCmoves,TCminutes,OperatorTime; short otherside[3]={1,0,2}; short rank7[3]={6,1,0}; short map[64]= {0,1,2,3,4,5,6,7, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47, 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57, 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67, 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77}; short unmap[120]= {0,1,2,3,4,5,6,7,-1,-1,-1,-1,-1,-1,-1,-1, 8,9,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1, 16,17,18,19,20,21,22,23,-1,-1,-1,-1,-1,-1,-1,-1, 24,25,26,27,28,29,30,31,-1,-1,-1,-1,-1,-1,-1,-1, 32,33,34,35,36,37,38,39,-1,-1,-1,-1,-1,-1,-1,-1, 40,41,42,43,44,45,46,47,-1,-1,-1,-1,-1,-1,-1,-1, 48,49,50,51,52,53,54,55,-1,-1,-1,-1,-1,-1,-1,-1, 56,57,58,59,60,61,62,63}; short Dcode[120]= {0,1,1,1,1,1,1,1,0,0,0,0,0,0,0x0E,0x0F, 0x10,0x11,0x12,0,0,0,0,0,0,0,0,0,0,0,0x0F,0x1F, 0x10,0x21,0x11,0,0,0,0,0,0,0,0,0,0,0x0F,0,0, 0x10,0,0,0x11,0,0,0,0,0,0,0,0,0x0F,0,0,0, 0x10,0,0,0,0x11,0,0,0,0,0,0,0x0F,0,0,0,0, 0x10,0,0,0,0,0x11,0,0,0,0,0x0F,0,0,0,0,0, 0x10,0,0,0,0,0,0x11,0,0,0x0F,0,0,0,0,0,0, 0x10,0,0,0,0,0,0,0x11}; short Stboard[64]= {rook,knight,bishop,queen,king,bishop,knight,rook, pawn,pawn,pawn,pawn,pawn,pawn,pawn,pawn, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, pawn,pawn,pawn,pawn,pawn,pawn,pawn,pawn, rook,knight,bishop,queen,king,bishop,knight,rook}; short Stcolor[64]= {white,white,white,white,white,white,white,white, white,white,white,white,white,white,white,white, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, black,black,black,black,black,black,black,black, black,black,black,black,black,black,black,black}; short sweep[7]= {false,false,false,true,true,true,false}; short Dpwn[3]={4,6,0}; short Dstart[7]={6,4,8,4,0,0,0}; short Dstop[7]={7,5,15,7,3,7,7}; short Dir[16]={1,0x10,-1,-0x10,0x0F,0x11,-0x0F,-0x11, 0x0E,-0x0E,0x12,-0x12,0x1F,-0x1F,0x21,-0x21}; short Pdir[34]={0,0x38,0,0,0,0,0,0,0,0,0,0,0,0,0x02,0x35, 0x38,0x35,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0x02, 0,0x02}; short pbit[7]={0,0x01,0x02,0x04,0x08,0x10,0x20}; unsigned short killr0[maxdepth],killr1[maxdepth],killr2[maxdepth]; unsigned short killr3[maxdepth],PrVar[maxdepth]; unsigned short PV,hint,Swag0,Swag1,Swag2,Swag3,Swag4; unsigned short hashkey; unsigned long hashbd; struct hashval hashcode[2][7][64]; struct hashentry huge *ttable,*ptbl; unsigned char history[8192]; short Mwpawn[64],Mbpawn[64],Mknight[2][64],Mbishop[2][64]; short Mking[2][64],Kfield[2][64]; short value[7]={0,valueP,valueN,valueB,valueR,valueQ,valueK}; short control[7]={0,ctlP,ctlN,ctlB,ctlR,ctlQ,ctlK}; short PassedPawn0[8]={0,60,80,120,200,360,600,800}; short PassedPawn1[8]={0,30,40,60,100,180,300,800}; short PassedPawn2[8]={0,15,25,35,50,90,140,800}; short PassedPawn3[8]={0,5,10,15,20,30,140,800}; short ISOLANI[8] = {-12,-16,-20,-24,-24,-20,-16,-12}; short BACKWARD[8] = {-6,-10,-15,-21,-28,-28,-28,-28}; short BMBLTY[14] = {-2,0,2,4,6,8,10,12,13,14,15,16,16,16}; short RMBLTY[14] = {0,2,4,6,8,10,11,12,13,14,14,14,14,14}; short Kthreat[16] = {0,-8,-20,-36,-52,-68,-80,-80,-80,-80,-80,-80, -80,-80,-80,-80}; short KNIGHTPOST,KNIGHTSTRONG,BISHOPSTRONG,KATAK,KBNKsq; short PEDRNK2B,PWEAKH,PADVNCM,PADVNCI,PAWNSHIELD,PDOUBLED,PBLOK; short RHOPN,RHOPNX,KHOPN,KHOPNX,KSFTY; short ATAKD,HUNGP,HUNGX,KCASTLD,KMOVD,XRAY,PINVAL; short stage,stage2,Zwmtl,Zbmtl,Developed[2],PawnStorm; short PawnBonus,BishopBonus,RookBonus; short KingOpening[64]= { 0, 0, -4,-10,-10, -4, 0, 0, -4, -4, -8,-12,-12, -8, -4, -4, -12,-16,-20,-20,-20,-20,-16,-12, -16,-20,-24,-24,-24,-24,-20,-16, -16,-20,-24,-24,-24,-24,-20,-16, -12,-16,-20,-20,-20,-20,-16,-12, -4, -4, -8,-12,-12, -8, -4, -4, 0, 0, -4,-10,-10, -4, 0, 0}; short KingEnding[64]= { 0, 4, 8,12,12, 8, 4, 0, 4,16,20,24,24,20,16, 4, 8,20,28,32,32,28,20, 8, 12,24,32,36,36,32,24,12, 12,24,32,36,36,32,24,12, 8,20,28,32,32,28,20, 8, 4,16,20,24,24,20,16, 4, 0, 4, 8,12,12, 8, 4, 0}; short KBNK[64]= {99,90,80,70,60,50,40,40, 90,80,60,50,40,30,20,40, 80,60,40,30,20,10,30,50, 70,50,30,10, 0,20,40,60, 60,40,20, 0,10,30,50,70, 50,30,10,20,30,40,60,80, 40,20,30,40,50,60,80,90, 40,40,50,60,70,80,90,99}; short pknight[64]= { 0, 4, 8,10,10, 8, 4, 0, 4, 8,16,20,20,16, 8, 4, 8,16,24,28,28,24,16, 8, 10,20,28,32,32,28,20,10, 10,20,28,32,32,28,20,10, 8,16,24,28,28,24,16, 8, 4, 8,16,20,20,16, 8, 4, 0, 4, 8,10,10, 8, 4, 0}; short pbishop[64]= {14,14,14,14,14,14,14,14, 14,22,18,18,18,18,22,14, 14,18,22,22,22,22,18,14, 14,18,22,22,22,22,18,14, 14,18,22,22,22,22,18,14, 14,18,22,22,22,22,18,14, 14,22,18,18,18,18,22,14, 14,14,14,14,14,14,14,14}; short PawnAdvance[64]= { 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 6, 8, 2,10,10, 2, 8, 6, 6, 8,12,16,16,12, 8, 6, 8,12,16,24,24,16,12, 8, 12,16,24,32,32,24,16,12, 12,16,24,32,32,24,16,12, 0, 0, 0, 0, 0, 0, 0, 0}; #ifdef gcctos #define abs absv unsigned long int next = 1; int rand(void) { next = next * 1103515245 + 12345; return(unsigned int)(next/65536) % 32768; } void srand(unsigned int seed) { next = seed; } int kbhit() { if (Cconis()) { Cconin(); return 1; } return 0; } #endif main(argc,argv) int argc; char *argv[]; { #ifdef MSDOS ttable = (struct hashentry huge *)farmalloc(ttblsz * (unsigned long)sizeof(struct hashentry)); #else ttable = (struct hashentry *)malloc(ttblsz * (unsigned int)sizeof(struct hashentry)); #endif Level = 0; TCflag = false; OperatorTime = 0; if (argc == 2) Level = atoi(argv[1]); if (argc == 3) { TCmoves = atoi(argv[1]); TCminutes = atoi(argv[2]); TCflag = true; } Initialize(); NewGame(); while (!(quit)) { if (bothsides && !mate) SelectMove(opponent,1); else InputCommand(); if (!(quit || mate || force)) SelectMove(computer,1); } ExitChess(); } /* ............ INTERFACE ROUTINES ........................... */ int VerifyMove(s,iop,mv) char s[]; short iop; unsigned short *mv; /* Compare the string 's' to the list of legal moves available for the opponent. If a match is found, make the move on the board. */ { static short pnt,tempb,tempc,tempsf,tempst,cnt; static struct leaf xnode; struct leaf *node; *mv = 0; if (iop == 2) { UnmakeMove(opponent,&xnode,&tempb,&tempc,&tempsf,&tempst); return(false); } cnt = 0; MoveList(opponent,2); pnt = TrPnt[2]; while (pnt < TrPnt[3]) { node = &Tree[pnt++]; algbr(node->f,node->t,node->flags & cstlmask); if (strcmp(s,mvstr1) == 0 || strcmp(s,mvstr2) == 0 || strcmp(s,mvstr3) == 0) { cnt++; xnode = *node; } } if (cnt == 1) { MakeMove(opponent,&xnode,&tempb,&tempc,&tempsf,&tempst); if (SqAtakd(PieceList[opponent][0],computer)) { UnmakeMove(opponent,&xnode,&tempb,&tempc,&tempsf,&tempst); ShowMessage("Illegal Move!!"); return(false); } else { if (iop == 1) return(true); if (xnode.flags & epmask) UpdateDisplay(0,0,1,0); else UpdateDisplay(xnode.f,xnode.t,0,xnode.flags & cstlmask); if (xnode.flags & cstlmask) Game50 = GameCnt; else if (board[xnode.t] == pawn || (xnode.flags & capture)) Game50 = GameCnt; GameList[GameCnt].depth = GameList[GameCnt].score = 0; GameList[GameCnt].nodes = 0; ElapsedTime(1); GameList[GameCnt].time = (short)et; TimeControl.clock[opponent] -= et; --TimeControl.moves[opponent]; *mv = (xnode.f << 8) + xnode.t; algbr(xnode.f,xnode.t,false); return(true); } } if (cnt > 1) ShowMessage("Ambiguous Move!"); return(false); } NewGame() /* Reset the board and other variables to start a new game. */ { short l,r,c,p; mate = quit = reverse = bothsides = post = false; hashflag = force = PawnStorm = false; easy = beep = rcptr = true; lpost = NodeCnt = epsquare = et0 = 0; dither = 0; Awindow = 90; Bwindow = 90; xwndw = 90; MaxSearchDepth = 29; contempt = 0; GameCnt = -1; Game50 = 0; Zwmtl = Zbmtl = 0; Developed[white] = Developed[black] = false; castld[white] = castld[black] = false; kingmoved[white] = kingmoved[black] = 0; PawnThreat[0] = CptrFlag[0] = Threat[0] = false; Pscore[0] = 12000; Tscore[0] = 12000; opponent = white; computer = black; for (r = 0; r < 8; r++) for (c = 0; c < 8; c++) { l = 8*r+c; locn[r][c] = l; row[l] = r; column[l] = c; board[l] = Stboard[l]; color[l] = Stcolor[l]; } for (c = white; c <= black; c++) for (p = pawn; p <= king; p++) for (l = 0; l < 64; l++) { hashcode[c][p][l].key = (unsigned short)rand(); hashcode[c][p][l].bd = ((unsigned long)rand() << 16) + (unsigned long)rand(); } ClrScreen(); if (TCflag) SetTimeControl(); else if (Level == 0) SelectLevel(); UpdateDisplay(0,0,1,0); InitializeStats(); time0 = time((long *)0); ElapsedTime(1); GetOpenings(); } algbr(f,t,flag) short f,t,flag; { mvstr1[0] = cxx[column[f]]; mvstr1[1] = rxx[row[f]]; mvstr1[2] = cxx[column[t]]; mvstr1[3] = rxx[row[t]]; mvstr2[0] = qxx[board[f]]; mvstr2[1] = mvstr1[2]; mvstr2[2] = mvstr1[3]; mvstr1[4] = '\0'; mvstr2[3] = '\0'; if (flag) if (t > f) strcpy(mvstr2,"o-o"); else strcpy(mvstr2,"o-o-o"); if (board[f] == pawn) mvstr3[0] = mvstr1[0]; else mvstr3[0] = qxx[board[f]]; if (color[t] != neutral) { mvstr3[1] = ':'; mvstr3[2] = mvstr1[2]; mvstr3[3] = mvstr1[3]; mvstr3[4] = '\0'; } else if (board[f] == pawn) { mvstr3[1] = mvstr1[3]; mvstr3[2] = '\0'; } else { mvstr3[1] = mvstr1[0]; mvstr3[2] = mvstr1[1]; mvstr3[3] = mvstr1[2]; mvstr3[4] = mvstr1[3]; mvstr3[5] = '\0'; } } /* ............ MOVE GENERATION & SEARCH ROUTINES .............. */ SelectMove(side,iop) short side,iop; /* Select a move by calling function search() at progressively deeper ply until time is up or a mate or draw is reached. An alpha-beta window of -90 to +90 points is set around the score returned from the previous iteration. If Sdepth != 0 then the program has correctly predicted the opponents move and the search will start at a depth of Sdepth+1 rather than a depth of 1. */ { static short i,alpha,beta,score,tempb,tempc,tempsf,tempst,xside,rpt; timeout = false; xside = otherside[side]; if (iop != 2) player = side; if (TCflag) { ResponseTime = (TimeControl.clock[side]) / (TimeControl.moves[side] + 3) - OperatorTime; ResponseTime += (RespseTime*TimeConnntrol.moves[side])/(2*TCmoves+1); } else ResponseTime = Level; if (iop == 2) ResponseTime = 999; if (Sdepth > 0 && root->score > Zscore-zwndw) ResponseTime -= ft; else if (ResponseTime < 1) ResponseTime = 1; ExtraTime = 0; ExaminePosition(); ScorePosition(side,&score); Pscore[0] = -score; ShowSidetomove(); if (Sdepth == 0) { ZeroTTable(); SearchStartStuff(side); for (i = 0; i < 8192; i++) history[i] = 0; FROMsquare = TOsquare = -1; PV = 0; if (iop != 2) hint = 0; for (i = 0; i < maxdepth; i++) PrVar[i] = killr0[i] = killr1[i] = killr2[i] = killr3[i] = 0; alpha = -9000; beta = 9000; rpt = 0; TrPnt[1] = 0; root = &Tree[0]; MoveList(side,1); for (i = TrPnt[1]; i < TrPnt[2]; i++) pick(i,TrPnt[2]-1); if (Book != NULL) OpeningBook(); if (Book != NULL) timeout = true; NodeCnt = ETnodes = EvalNodes = HashCnt = 0; Zscore = 0; zwndw = 20; } while (!timeout && Sdepth < MaxSearchDepth) { Sdepth++; ShowDepth(' '); score = search(side,1,Sdepth,alpha,beta,PrVar,&rpt); for (i = 1; i <= Sdepth; i++) killr0[i] = PrVar[i]; if (score < alpha && !timeout) { ShowDepth('-'); ExtraTime = 10*ResponseTime; ZeroTTable(); score = search(side,1,Sdepth,-9000,beta,PrVar,&rpt); } if (score > beta && !timeout && !(root->flags & exact)) { ShowDepth('+'); ExtraTime = 0; ZeroTTable(); score = search(side,1,Sdepth,alpha,9000,PrVar,&rpt); } score = root->score; if (!timeout) for (i = TrPnt[1]+1; i < TrPnt[2]; i++) pick(i,TrPnt[2]-1); ShowResults(score,PrVar,'.'); for (i = 1; i <= Sdepth; i++) killr0[i] = PrVar[i]; if (score > Zscore-zwndw && score > Tree[1].score+250) ExtraTime = 0; else if (score > Zscore-3*zwndw) ExtraTime = ResponseTime; else ExtraTime = 3*ResponseTime; if (root->flags & exact) timeout = true; if (Tree[1].score < -9000) timeout = true; if (4*et > 2*ResponseTime + ExtraTime) timeout = true; if (!timeout) { Tscore[0] = score; if (Zscore == 0) Zscore = score; else Zscore = (Zscore+score)/2; } zwndw = 20+abs(Zscore/12); beta = score + Bwindow; if (Zscore < score) alpha = Zscore - Awindow - zwndw; else alpha = score - Awindow - zwndw; } score = root->score; if (rpt >= 2 || score < -12000) root->flags |= draw; if (iop == 2) return(0); if (Book == NULL) hint = PrVar[2]; ElapsedTime(1); if (score > -9999 && rpt <= 2) { MakeMove(side,root,&tempb,&tempc,&tempsf,&tempst); algbr(root->f,root->t,root->flags & cstlmask); } else mvstr1[0] = '\0'; OutputMove(); if (score == -9999 || score == 9998) mate = true; if (mate) hint = 0; if (root->flags & cstlmask) Game50 = GameCnt; else if (board[root->t] == pawn || (root->flags & capture)) Game50 = GameCnt; GameList[GameCnt].score = score; GameList[GameCnt].nodes = NodeCnt; GameList[GameCnt].time = (short)et; GameList[GameCnt].depth = Sdepth; if (TCflag) { TimeControl.clock[side] -= (et + OperatorTime); if (--TimeControl.moves[side] == 0) SetTimeControl(); } if ((root->flags & draw) && bothsides) quit = true; if (GameCnt > 238) quit = true; player = xside; Sdepth = 0; fflush(stdin); return(0); } OpeningBook() /* Go thru each of the opening lines of play and check for a match with the current game listing. If a match occurs, generate a random number. If this number is the largest generated so far then the next move in this line becomes the current "candidate". After all lines are checked, the candidate move is put at the top of the Tree[] array and will be played by the program. Note that the program does not handle book transpositions. */ { short j,pnt; unsigned short m,*mp; unsigned r,r0; struct BookEntry *p; srand((unsigned)time0); r0 = m = 0; p = Book; while (p != NULL) { mp = p->mv; for (j = 0; j <= GameCnt; j++) if (GameList[j].gmove != *(mp++)) break; if (j > GameCnt) if ((r=rand()) > r0) { r0 = r; m = *mp; hint = *(++mp); } p = p->next; } for (pnt = TrPnt[1]; pnt < TrPnt[2]; pnt++) if ((Tree[pnt].f<<8) + Tree[pnt].t == m) Tree[pnt].score = 0; pick(TrPnt[1],TrPnt[2]-1); if (Tree[TrPnt[1]].score < 0) Book = NULL; } #define UpdateSearchStatus\ {\ if (post) ShowCurrentMove(pnt,node->f,node->t);\ if (pnt > TrPnt[1])\ {\ d = best-Zscore; e = best-node->score;\ if (best < alpha) ExtraTime = 10*ResponseTime;\ else if (d > -zwndw && e > 4*zwndw) ExtraTime = -ResponseTime/3;\ else if (d > -zwndw) ExtraTime = 0;\ else if (d > -3*zwndw) ExtraTime = ResponseTime;\ else if (d > -9*zwndw) ExtraTime = 3*ResponseTime;\ else ExtraTime = 5*ResponseTime;\ }\ } int search(side,ply,depth,alpha,beta,bstline,rpt) short side,ply,depth,alpha,beta,*rpt; unsigned short bstline[]; /* Perform an alpha-beta search to determine the score for the current board position. If depth <= 0 only capturing moves, pawn promotions and responses to check are generated and searched, otherwise all moves are processed. The search depth is modified for check evasions, certain re-captures and threats. Extensions may continue for up to 11 ply beyond the nominal search depth. */ #define prune (cf && score+node->score < alpha) #define ReCapture (rcptr && score > alpha && score < beta &&\ ply > 2 && CptrFlag[ply-1] && CptrFlag[ply-2] &&\ depth == Sdepth-ply+1) #define Parry (hung[side] > 1 && ply == Sdepth+1) #define MateThreat (ply < Sdepth+4 && ply > 4 &&\ ChkFlag[ply-2] && ChkFlag[ply-4] &&\ ChkFlag[ply-2] != ChkFlag[ply-4]) { register short j,pnt; short best,tempb,tempc,tempsf,tempst; short xside,pbst,d,e,cf,score,rcnt; unsigned short mv,nxtline[maxdepth]; struct leaf *node,tmp; NodeCnt++; xside = otherside[side]; if (ply <= Sdepth+3) repetition(rpt); else *rpt = 0; if (*rpt >= 2) return(0); score = evaluate(side,xside,ply,depth,alpha,beta); if (score > 9000) return(score); if (depth > 0) { if (InChk || PawnThreat[ply-1] || ReCapture) ++depth; } else { if (score >= alpha && (InChk || PawnThreat[ply-1] || Parry)) depth = 1; else if (score <= beta && MateThreat) depth = 1; } PV = 0; if (depth > 0 && hashflag && ply > 1) { ProbeTTable(side,depth,&alpha,&beta,&score); bstline[ply] = PV; bstline[ply+1] = 0; if (beta == -20000) return(score); if (alpha > beta) return(alpha); } if (Sdepth == 1) d = 7; else d = 11; if (ply > Sdepth+d || (depth <= 0 && score > beta)) return(score); if (ply > 1) if (depth > 0) MoveList(side,ply); else CaptureList(side,xside,ply); if (TrPnt[ply] == TrPnt[ply+1]) return(score); cf = (depth < 1 && ply > Sdepth+1 && !ChkFlag[ply-2] && !slk); if (depth > 0) best = -12000; else best = score; if (best > alpha) alpha = best; for (pnt = pbst = TrPnt[ply]; pnt < TrPnt[ply+1] && best <= beta; pnt++) { if (ply > 1) pick(pnt,TrPnt[ply+1]-1); node = &Tree[pnt]; mv = (node->f << 8) + node->t; nxtline[ply+1] = 0; if (prune) break; if (ply == 1) UpdateSearchStatus; if (!(node->flags & exact)) { MakeMove(side,node,&tempb,&tempc,&tempsf,&tempst); CptrFlag[ply] = (node->flags & capture); PawnThreat[ply] = (node->flags & pwnthrt); Tscore[ply] = node->score; node->score = -search(xside,ply+1,depth-1,-beta,-alpha, nxtline,&rcnt); if (abs(node->score) > 9000) node->flags |= exact; else if (rcnt == 1) node->score /= 2; if (rcnt >= 2 || GameCnt-Game50 > 99 || (node->score == 9999-ply && !ChkFlag[ply])) { node->flags |= draw; node->flags |= exact; if (side == computer) node->score = contempt; else node->score = -contempt; } UnmakeMove(side,node,&tempb,&tempc,&tempsf,&tempst); } if (node->score > best && !timeout) { if (depth > 0) if (node->score > alpha && !(node->flags & exact)) node->score += depth; best = node->score; pbst = pnt; if (best > alpha) alpha = best; for (j = ply+1; nxtline[j] > 0; j++) bstline[j] = nxtline[j]; bstline[j] = 0; bstline[ply] = mv; if (ply == 1) { if (best == alpha) { tttmp = Tree[pnt]; for (j = pnt-1; j >= 0; j--) Tree[j+1] = Tree[j]; Tree[0] = tmp; pbst = 0; } if (Sdepth > 2) if (best > beta) ShowResults(best,bstline,'+'); else if (best < alpha) ShowResults(best,bstline,'-'); else ShowResults(best,bstline,'&'); } } if (NodeCnt > ETnodes) ElapsedTime(0); if (timeout) return(-Tscore[pl1]); } node = &Tree[pbst]; mv = (node->f<<8) + node->t; if (hashflag && ply <= Sdepth && *rpt == 0 && best == alpha) PutInTTable(side,best,depth,alpha,beta,mv); if (depth > 0) { j = (node->f<<6) + node->t; if (side == black) j |= 0x1000; if (history[j] < 150) history[j] += 2*depth; if (node->t != (GameList[GameCnt].gmove & 0xFF)) if (best <= beta) killr3[ply] = mv; else if (mv != killr1[ply]) { killr2[ply] = killr1[ply]; killr1[ply] = mv; } if (best > 9000) killr0[ply] = mv; else killr0[ply] = 0; } return(best); } int evaluate(side,xside,ply,depth,alpha,beta) short side,xside,ply,depth,alpha,beta; /* Compute an estimate of the score by adding the positional score from the previous ply to the material difference. If this score falls inside a window which is 180 points wider than the alpha-beta window (or within a 50 point window during quiescence search) call ScorePosition() to determine a score, otherwise return the estimated score. If one side has only a king and the other either has no pawns or no pieces then the function ScoreLoneKing() is called. */ { register short evflag; Xscore = -Pscore[ply-1] - INCscore + mtl[side] - mtl[xside]; hung[white] = hung[black] = 0; slk = ((mtl[white] == valueK && (pmtl[black] == 0 || emtl[black] == 0)) || (mtl[black] == valueK && (pmtl[white] == 0 || emtl[white] == 0))); if (slk) evflag = false; else evflag = (ply == 1 || ply < Sdepth || (depth == 0 && Xscore > alpha-xwndw && Xscore < beta+xwndw) || (depth < 0 && Xscore > alpha-25 && Xscore < beta+25)); if (evflag) { EvalNodes++; ataks(side,atak[side]); if (atak[side][PieceList[xside][0]] > 0) return(10001-ply); ataks(xside,atak[xside]); InChk = (atak[xside][PieceList[side][0]] > 0); ScorePosition(side,&Xscore); } else { if (SqAtakd(PieceList[xside][0],side)) return(10001-ply); InChk = SqAtakd(PieceList[side][0],xside); if (slk) ScoreLoneKing(side,&Xscore); } Pscore[ply] = Xscore - mtl[side] + mtl[xside]; if (InChk) ChkFlag[ply-1] = Pindex[TOsquare]; else ChkFlag[ply-1] = 0; return(Xscore); } ProbeTTable(side,depth,alpha,beta,score) short side,depth,*alpha,*beta,*score; /* Look for the current board position in the transposition table. */ { short hindx; if (side == white) hashkey |= 1; else hashkey &= 0xFFFE; hindx = (hashkey & (ttblsz-1)); ptbl = (ttable + hindx); if (ptbl->depth >= depth && ptbl->hashbd == hashbd) { HashCnt++; PV = ptbl->mv; if (ptbl->flags & truescore) { *score = ptbl->score; *beta = -20000; return(true); } /* else if (ptbl->flags & upperbound) { if (ptbl->score < *beta) *beta = ptbl->score+1; } */ else if (ptbl->flags & lowerbound) { if (ptbl->score > *alpha) *alpha = ptbl->score-1; } } return(false); } PutInTTable(side,score,depth,alpha,beta,mv) short side,score,depth,alpha,beta; unsigned short mv; /* Store the current board position in the transposition table. */ { short hindx; if (side == white) hashkey |= 1; else hashkey &= 0xFFFE; hindx = (hashkey & (ttblsz-1)); ptbl = (ttable + hindx); ptbl->hashbd = hashbd; ptbl->depth = depth; ptbl->score = score; ptbl->mv = mv; ptbl->flags = 0; if (score < alpha) ptbl->flags |= upperbound; else if (score > beta) ptbl->flags |= lowerbound; else ptbl->flags |= truescore; } ZeroTTable() { int i; if (hashflag) for (i = 0; i < ttblsz; i++) { ptbl = (ttable + i); ptbl->depth = 0; } } MoveList(side,ply) short side,ply; /* Fill the array Tree[] with all available moves for side to play. Array TrPnt[ply] contains the index into Tree[] of the first move at a ply. */ { register short i,xside,f; xside = otherside[side]; if (PV == 0) Swag0 = killr0[ply]; else Swag0 = PV; Swag1 = killr1[ply]; Swag2 = killr2[ply]; Swag3 = killr3[ply]; Swag4 = 0; if (ply > 2) Swag4 = killr1[ply-2]; TrPnt[ply+1] = TrPnt[ply]; Dstart[pawn] = Dpwn[side]; Dstop[pawn] = Dstart[pawn] + 1; for (i = PieceCnt[side]; i >= 0; i--) GenMoves(ply,PieceList[side][i],side,xside); if (kingmoved[side] == 0 && !castld[side]) { f = PieceList[side][0]; if (castle(side,f,f+2,0)) { LinkMove(ply,f,f+2,xside); Tree[TrPnt[ply+1]-1].flags |= cstlmask; } if (castle(side,f,f-2,0)) { LinkMove(ply,f,f-2,xside); Tree[TrPnt[ply+1]-1].flags |= cstlmask; } } } GenMoves(ply,sq,side,xside) short ply,sq,side,xside; /* Generate moves for a piece. The from square is mapped onto a special board and offsets (taken from array Dir[]) are added to the mapped location. The newly generated square is tested to see if it falls off the board by ANDing the square with 88 HEX. Legal moves are linked into the tree. */ { register short m,u,d,i,m0,piece; piece = board[sq]; m0 = map[sq]; if (sweep[piece]) for (i = Dstart[piece]; i <= Dstop[piece]; i++) { d = Dir[i]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; if (color[u] == neutral) { LinkMove(ply,sq,u,xside); m += d; } else if (color[u] == xside) { LinkMove(ply,sq,u,xside); break; } else break; } } else if (piece == pawn) { if (side == white && color[sq+8] == neutral) { LinkMove(ply,sq,sq+8,xside); if (row[sq] == 1) if (color[sq+16] == neutral) LinkMove(ply,sq,sq+16,xside); } else if (side == black && color[sq-8] == neutral) { LinkMove(ply,sq,sq-8,xside); if (row[sq] == 6) if (color[sq-16] == neutral) LinkMove(ply,sq,sq-16,xside); } for (i = Dstart[piece]; i <= Dstop[piece]; i++) if (!((m = m0+Dir[i]) & 0x88)) { u = unmap[m]; if (color[u] == xside || u == epsquare) LinkMove(ply,sq,u,xside); } } else { for (i = Dstart[piece]; i <= Dstop[piece]; i++) if (!((m = m0+Dir[i]) & 0x88)) { u = unmap[m]; if (color[u] != side) LinkMove(ply,sq,u,xside); } } } LinkMove(ply,f,t,xside) short ply,f,t,xside; /* Add a move to the tree. Assign a bonus to order the moves as follows: 1. Principle variation 2. Capture of last moved piece 3. Other captures (major pieces first) 4. Killer moves 5. "history" killers */ { register short s,z; register unsigned short mv; struct leaf *node; node = &Tree[TrPnt[ply+1]]; ++TrPnt[ply+1]; node->flags = 0; node->f = f; node->t = t; mv = (f<<8) + t; s = 0; if (mv == Swag0) s = 2000; else if (mv == Swag1) s = 60; else if (mv == Swag2) s = 50; else if (mv == Swag3) s = 40; else if (mv == Swag4) s = 30; if (color[t] != neutral) { node->flags |= capture; if (t == TOsquare) s += 500; s += value[board[t]] - board[f]; } if (board[f] == pawn) if (row[t] == 0 || row[t] == 7) { node->flags |= promote; s += 800; } else if (row[t] == 1 || row[t] == 6) { node->flags |= pwnthrt; s += 600; } else if (t == epsquare) node->flags |= epmask; z = (f<<6) + t; if (xside == white) z |= 0x1000; s += history[z]; node->score = s - 20000; } CaptureList(side,xside,ply) short side,xside,ply; /* Generate captures and Pawn promotions only. */ #define LinkCapture\ {\ node->f = sq; node->t = u;\ node->flags = capture;\ node->score = value[board[u]] + svalue[board[u]] - piece;\ if (piece == pawn && (u < 8 || u > 55))\ {\ node->flags |= promote;\ node->score = valueQ;\ }\ ++node;\ ++TrPnt[ply+1];\ } { register short m,u,d,sq,m0; short i,j,j1,j2,r7,d0,piece,*PL; struct leaf *node; TrPnt[ply+1] = TrPnt[ply]; node = &Tree[TrPnt[ply]]; Dstart[pawn] = Dpwn[side]; Dstop[pawn] = Dstart[pawn] + 1; if (side == white) { r7 = 6; d0 = 8; } else { r7 = 1; d0 = -8; } PL = PieceList[side]; for (i = 0; i <= PieceCnt[side]; i++) { sq = PL[i]; m0 = map[sq]; piece = board[sq]; j1 = Dstart[piece]; j2 = Dstop[piece]; if (sweep[piece]) for (j = j1; j <= j2; j++) { d = Dir[j]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; if (color[u] == neutral) m += d; else { if (color[u] == xside) LinkCapture; break; } } } else { for (j = j1; j <= j2; j++) if (!((m = m0+Dir[j]) & 0x88)) { u = unmap[m]; if (color[u] == xside) LinkCapture; } if (piece == pawn && row[sq] == r7) { u = sq+d0; if (color[u] == neutral) LinkCapture; } } } } int castle(side,kf,kt,iop) short side,kf,kt,iop; /* Make or Unmake a castling move. */ { register short rf,rt,d,t0,xside; xside = otherside[side]; if (kt > kf) { rf = kf+3; rt = kt-1; d = 1; } else { rf = kf-4; rt = kt+1; d = -1; } if (iop == 0) { if (board[kf] != king || board[rf] != rook || color[rf] != side) return(false); if (color[kt] != neutral || color[rt] != neutral) return(false); if (d == -1 && color[kt+d] != neutral) return(false); if (SqAtakd(kf,xside)) return(false); if (SqAtakd(kt,xside)) return(false); if (SqAtakd(kf+d,xside)) return(false); } else { if (iop == 1) castld[side] = true; else castld[side] = false; if (iop == 2) { t0 = kt; kt = kf; kf = t0; t0 = rt; rt = rf; rf = t0; } board[kt] = king; color[kt] = side; Pindex[kt] = 0; board[kf] = no_piece; color[kf] = neutral; board[rt] = rook; color[rt] = side; Pindex[rt] = Pindex[rf]; board[rf] = no_piece; color[rf] = neutral; PieceList[side][Pindex[kt]] = kt; PieceList[side][Pindex[rt]] = rt; if (hashflag) { UpdateHashbd(side,king,kf,kt); UpdateHashbd(side,rook,rf,rt); } } return(true); } EnPassant(xside,f,t,iop) short xside,f,t,iop; /* Make or unmake an en passant move. */ { register short l; if (t > f) l = t-8; else l = t+8; if (iop == 1) { board[l] = no_piece; color[l] = neutral; } else { board[l] = pawn; color[l] = xside; } InitializeStats(); } MakeMove(side,node,tempb,tempc,tempsf,tempst) short side,*tempc,*tempb,*tempsf,*tempst; struct leaf *node; /* Update Arrays board[], color[], and Pindex[] to reflect the new board position obtained after making the move pointed to by node. Also update miscellaneous stuff that changes when a move is made. */ { register short f,t,xside,ct,cf; xside = otherside[side]; f = node->f; t = node->t; epsquare = -1; FROMsquare = f; TOsquare = t; INCscore = 0; GameList[++GameCnt].gmove = (f<<8) + t; if (node->flags & cstlmask) { GameList[GameCnt].piece = no_piece; GameList[GameCnt].color = side; castle(side,f,t,1); } else { *tempc = color[t]; *tempb = board[t]; *tempsf = svalue[f]; *tempst = svalue[t]; GameList[GameCnt].piece = *tempb; GameList[GameCnt].color = *tempc; if (*tempc != neutral) { UpdatePieceList(*tempc,t,1); if (*tempb == pawn) --PawnCnt[*tempc][column[t]]; if (board[f] == pawn) { --PawnCnt[side][column[f]]; ++PawnCnt[side][column[t]]; cf = column[f]; ct = column[t]; if (PawnCnt[side][ct] > 1+PawnCnt[side][cf]) INCscore -= 15; else if (PawnCnt[side][ct] < 1+PawnCnt[side][cf]) INCscore += 15; else if (ct == 0 || ct == 7 || PawnCnt[side][ct+ct-cf] == 0) INCscore -= 15; } mtl[xside] -= value[*tempb]; if (*tempb == pawn) pmtl[xside] -= valueP; if (hashflag) UpdateHashbd(xside,*tempb,-1,t); INCscore += *tempst; } color[t] = color[f]; board[t] = board[f]; svalue[t] = svalue[f]; Pindex[t] = Pindex[f]; PieceList[side][Pindex[t]] = t; color[f] = neutral; board[f] = no_piece; if (board[t] == pawn) if (t-f == 16) epsquare = f+8; else if (f-t == 16) epsquare = f-8; if (node->flags & promote) { board[t] = queen; --PawnCnt[side][column[t]]; mtl[side] += valueQ - valueP; pmtl[side] -= valueP; HasQueen[side] = true; if (hashflag) { UpdateHashbd(side,pawn,f,-1); UpdateHashbd(side,queen,f,-1); } INCscore -= *tempsf; } if (board[t] == king) ++kingmoved[side]; if (node->flags & epmask) EnPassant(xside,f,t,1); else if (hashflag) UpdateHashbd(side,board[t],f,t); } } UnmakeMove(side,node,tempb,tempc,tempsf,tempst) short side,*tempc,*tempb,*tempsf,*tempst; struct leaf *node; /* Take back a move. */ { register short f,t,xside; xside = otherside[side]; f = node->f; t = node->t; epsquare = -1; GameCnt--; if (node->flags & cstlmask) castle(side,f,t,2); else { color[f] = color[t]; board[f] = board[t]; svalue[f] = *tempsf; Pindex[f] = Pindex[t]; PieceList[side][Pindex[f]] = f; color[t] = *tempc; board[t] = *tempb; svalue[t] = *tempst; if (node->flags & promote) { board[f] = pawn; ++PawnCnt[side][column[t]]; mtl[side] += valueP - valueQ; pmtl[side] += valueP; if (hashflag) { UpdateHashbd(side,queen,-1,t); UpdateHashbd(side,pawn,-1,t); } } if (*tempc != neutral) { UpdatePieceList(*tempc,t,2); if (*tempb == pawn) ++PawnCnt[*tempc][column[t]]; if (board[f] == pawn) { --PawnCnt[side][column[t]]; ++PawnCnt[side][column[f]]; } mtl[xside] += value[*tempb]; if (*tempb == pawn) pmtl[xside] += valueP; if (hashflag) UpdateHashbd(xside,*tempb,-1,t); } if (board[f] == king) --kingmoved[side]; if (node->flags & epmask) EnPassant(xside,f,t,2); else if (hashflag) UpdateHashbd(side,board[f],f,t); } } UpdateHashbd(side,piece,f,t) short side,piece,f,t; /* hashbd contains a 32 bit "signature" of the board position. hashkey contains a 16 bit code used to address the hash table. When a move is made, XOR'ing the hashcode of moved piece on the from and to squares with the hashbd and hashkey values keeps things current. */ { if (f >= 0) { hashbd ^= hashcode[side][piece][f].bd; hashkey ^= hashcode[side][piece][f].key; } if (t >= 0) { hashbd ^= hashcode[side][piece][t].bd; hashkey ^= hashcode[side][piece][t].key; } } UpdatePieceList(side,sq,iop) short side,sq,iop; /* Update the PieceList and Pindex arrays when a piece is captured or when a capture is unmade. */ { register short i; if (iop == 1) { PieceCnt[side]--; for (i = Pindex[sq]; i <= PieceCnt[side]; i++) { PieceList[side][i] = PieceList[side][i+1]; Pindex[PieceList[side][i]] = i; } } else { PieceCnt[side]++; PieceList[side][PieceCnt[side]] = sq; Pindex[sq] = PieceCnt[side]; } } InitializeStats() /* Scan thru the board seeing what's on each square. If a piece is found, update the variables PieceCnt, PawnCnt, Pindex and PieceList. Also determine the material for each side and set the hashkey and hashbd variables to represent the current board position. Array PieceList[side][indx] contains the location of all the pieces of either side. Array Pindex[sq] contains the indx into PieceList for a given square. */ { register short i,sq; epsquare = -1; for (i = 0; i < 8; i++) PawnCnt[white][i] = PawnCnt[black][i] = 0; mtl[white] = mtl[black] = pmtl[white] = pmtl[black] = 0; PieceCnt[white] = PieceCnt[black] = 0; hashbd = hashkey = 0; for (sq = 0; sq < 64; sq++) if (color[sq] != neutral) { mtl[color[sq]] += value[board[sq]]; if (board[sq] == pawn) { pmtl[color[sq]] += valueP; ++PawnCnt[color[sq]][column[sq]]; } if (board[sq] == king) Pindex[sq] = 0; else Pindex[sq] = ++PieceCnt[color[sq]]; PieceList[color[sq]][Pindex[sq]] = sq; hashbd ^= hashcode[color[sq]][board[sq]][sq].bd; hashkey ^= hashcode[color[sq]][board[sq]][sq].key; } } pick(p1,p2) short p1,p2; /* Find the best move in the tree between indexes p1 and p2. Swap the best move into the p1 element. */ { register short p,s,p0,s0; struct leaf temp; s0 = Tree[p1].score; p0 = p1; for (p = p1+1; p <= p2; p++) if ((s = Tree[p].score) > s0) { s0 = s; p0 = p; } if (p0 != p1) { temp = Tree[p1]; Tree[p1] = Tree[p0]; Tree[p0] = temp; } } repetition(cnt) short *cnt; /* Check for draw by threefold repetition. */ { register short i,c,f,t; short b[64]; unsigned short m; *cnt = c = 0; if (GameCnt > Game50+3) { for (i = 0; i < 64; b[i++] = 0); for (i = GameCnt; i > Game50; i--) { m = GameList[i].gmove; f = m>>8; t = m & 0xFF; if (++b[f] == 0) c--; else c++; if (--b[t] == 0) c--; else c++; if (c == 0) (*cnt)++; } } } int SqAtakd(sq,side) short sq,side; /* See if any piece with color 'side' ataks sq. First check for pawns or king, then try other pieces. Array Dcode is used to check for knight attacks or R,B,Q co-linearity. */ { register short m,d,m0,m1,i,loc,piece,*PL; m1 = map[sq]; if (side == white) m = m1-0x0F; else m = m1+0x0F; if (!(m & 0x88)) if (board[unmap[m]] == pawn && color[unmap[m]] == side) return(true); if (side == white) m = m1-0x11; else m = m1+0x11; if (!(m & 0x88)) if (board[unmap[m]] == pawn && color[unmap[m]] == side) return(true); if (distance(sq,PieceList[side][0]) == 1) return(true); PL = PieceList[side]; for (i = 1; i <= PieceCnt[side]; i++) { loc = PL[i]; piece = board[loc]; if (piece == pawn) continue; m0 = map[loc]; d = Dcode[abs(m1-m0)]; if (d == 0 || (Pdir[d] & pbit[piece]) == 0) continue; if (piece == knight) return(true); else { if (m1 < m0) d = -d; for (m = m0+d; m != m1; m += d) if (color[unmap[m]] != neutral) break; if (m == m1) return(true); } } return(false); } ataks(side,a) short side,*a; /* Fill array atak[][] with info about ataks to a square. Bits 8-15 are set if the piece (king..pawn) ataks the square. Bits 0-7 contain a count of total ataks to the square. */ { register short u,m,d,c,m0; short j,j1,j2,piece,i,sq,*PL; for (u = 0; u < 64; a[u++] = 0); Dstart[pawn] = Dpwn[side]; Dstop[pawn] = Dstart[pawn] + 1; PL = PieceList[side]; for (i = 0; i <= PieceCnt[side]; i++) { sq = PL[i]; m0 = map[sq]; piece = board[sq]; c = control[piece]; j1 = Dstart[piece]; j2 = Dstop[piece]; if (sweep[piece]) for (j = j1; j <= j2; j++) { d = Dir[j]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; a[u] = ++a[u] | c; if (color[u] == neutral) m += d; else break; } } else for (j = j1; j <= j2; j++) if (!((m = m0+Dir[j]) & 0x88)) { u = unmap[m]; a[u] = ++a[u] | c; } } } /* ............ POSITIONAL EVALUATION ROUTINES ............ */ ScorePosition(side,score) short side,*score; /* Perform normal static evaluation of board position. A score is generated for each piece and these are summed to get a score for each side. */ { register short sq,s,i,xside; short pscore[3]; wking = PieceList[white][0]; bking = PieceList[black][0]; UpdateWeights(); xside = otherside[side]; pscore[white] = pscore[black] = 0; for (c1 = white; c1 <= black; c1++) { c2 = otherside[c1]; if (c1 == white) EnemyKing = bking; else EnemyKing = wking; atk1 = atak[c1]; atk2 = atak[c2]; PC1 = PawnCnt[c1]; PC2 = PawnCnt[c2]; for (i = 0; i <= PieceCnt[c1]; i++) { sq = PieceList[c1][i]; s = SqValue(sq,side); pscore[c1] += s; svalue[sq] = s; } } if (hung[side] > 1) pscore[side] += HUNGX; if (hung[xside] > 1) pscore[xside] += HUNGX; *score = mtl[side] - mtl[xside] + pscore[side] - pscore[xside] + 10; if (dither) *score += rand() % dither; if (*score > 0 && pmtl[side] == 0) if (emtl[side] < valueR) *score = 0; else if (*score < valueR) *score /= 2; if (*score < 0 && pmtl[xside] == 0) if (emtl[xside] < valueR) *score = 0; else if (-*score < valueR) *score /= 2; if (mtl[xside] == valueK && emtl[side] > valueB) *score += 200; if (mtl[side] == valueK && emtl[xside] > valueB) *score -= 200; } ScoreLoneKing(side,score) short side,*score; /* Static evaluation when loser has only a king and winner has no pawns or no pieces. */ { register short winner,loser,king1,king2,s,i; UpdateWeights(); if (mtl[white] > mtl[black]) winner = white; else winner = black; loser = otherside[winner]; king1 = PieceList[winner][0]; king2 = PieceList[loser][0]; s = 0; if (pmtl[winner] > 0) for (i = 1; i <= PieceCnt[winner]; i++) s += ScoreKPK(side,winner,loser,king1,king2,PieceList[winner][i]); else if (emtl[winner] == valueB+valueN) s = ScoreKBNK(winner,king1,king2); else if (emtl[winner] > valueB) s = 500 + emtl[winner] - 2*KingEnding[king2] - 2*distance(king1,king2); if (side == winner) *score = s; else *score = -s; } int ScoreKPK(side,winner,loser,king1,king2,sq) short side,winner,loser,king1,king2,sq; /* Score King and Pawns versus King endings. */ { register short s,r; if (PieceCnt[winner] == 1) s = 50; else s = 120; if (winner == white) { if (side == loser) r = row[sq]-1; else r = row[sq]; if (row[king2] >= r && distance(sq,king2) < 8-r) s += 10*row[sq]; else s = 500+50*row[sq]; if (row[sq] < 6) sq += 16; else sq += 8; } else { if (side == loser) r = row[sq]+1; else r = row[sq]; if (row[king2] <= r && distance(sq,king2) < r+1) s += 10*(7-row[sq]); else s = 500+50*(7-row[sq]); if (row[sq] > 1) sq -= 16; else sq -= 8; } s += 8*(taxicab(king2,sq) - taxicab(king1,sq)); return(s); } int ScoreKBNK(winner,king1,king2) short winner,king1,king2; /* Score King+Bishop+Knight versus King endings. This doesn't work all that well but it's better than nothing. */ { register short s; s = emtl[winner] - 300; if (KBNKsq == 0) s += KBNK[king2]; else s += KBNK[locn[row[king2]][7-column[king2]]]; s -= taxicab(king1,king2); s -= distance(PieceList[winner][1],king2); s -= distance(PieceList[winner][2],king2); return(s); } SqValue(sq,side) short sq,side; /* Calculate the positional value for the piece on 'sq'. */ { register short j,fyle,rank,a1,a2; short s,piece,in_square,r,mob,e,c; piece = board[sq]; a1 = (atk1[sq] & 0x4FFF); a2 = (atk2[sq] & 0x4FFF); rank = row[sq]; fyle = column[sq]; s = 0; if (piece == pawn && c1 == white) { s = Mwpawn[sq]; if (sq == 11 || sq == 12) if (color[sq+8] != neutral) s += PEDRNK2B; if ((fyle == 0 || PC1[fyle-1] == 0) && (fyle == 7 || PC1[fyle+1] == 0)) s += ISOLANI[fyle]; else if (PC1[fyle] > 1) s += PDOUBLED; if (a1 < ctlP && atk1[sq+8] < ctlP) { s += BACKWARD[a2 & 0xFF]; if (PC2[fyle] == 0) s += PWEAKH; if (color[sq+8] != neutral) s += PBLOK; } if (PC2[fyle] == 0) { if (side == black) r = rank-1; else r = rank; in_square = (row[bking] >= r && distance(sq,bking) < 8-r); if (a2 == 0 || side == white) e = 0; else e = 1; for (j = sq+8; j < 64; j += 8) if (atk2[j] >= ctlP) { e = 2; break; } else if (atk2[j] > 0 || color[j] != neutral) e = 1; if (e == 2) s += (stage*PassedPawn3[rank]) / 10; else if (in_square || e == 1) s += (stage*PassedPawn2[rank]) / 10; else if (emtl[black] > 0) s += (stage*PassedPawn1[rank]) / 10; else s += PassedPawn0[rank]; } } else if (piece == pawn && c1 == black) { s = Mbpawn[sq]; if (sq == 51 || sq == 52) if (color[sq-8] != neutral) s += PEDRNK2B; if ((fyle == 0 || PC1[fyle-1] == 0) && (fyle == 7 || PC1[fyle+1] == 0)) s += ISOLANI[fyle]; else if (PC1[fyle] > 1) s += PDOUBLED; if (a1 < ctlP && atk1[sq-8] < ctlP) { s += BACKWARD[a2 & 0xFF]; if (PC2[fyle] == 0) s += PWEAKH; if (color[sq-8] != neutral) s += PBLOK; } if (PC2[fyle] == 0) { if (side == white) r = rank+1; else r = rank; in_square = (row[wking] <= r && distance(sq,wking) < r+1); if (a2 == 0 || side == black) e = 0; else e = 1; for (j = sq-8; j >= 0; j -= 8) if (atk2[j] >= ctlP) { e = 2; break; } else if (atk2[j] > 0 || color[j] != neutral) e = 1; if (e == 2) s += (stage*PassedPawn3[7-rank]) / 10; else if (in_square || e == 1) s += (stage*PassedPawn2[7-rank]) / 10; else if (emtl[white] > 0) s += (stage*PassedPawn1[7-rank]) / 10; else s += PassedPawn0[7-rank]; } } else if (piece == knight) { s = Mknight[c1][sq]; } else if (piece == bishop) { s = Mbishop[c1][sq]; BRscan(sq,&s,&mob); s += BMBLTY[mob]; } else if (piece == rook) { s += RookBonus; BRscan(sq,&s,&mob); s += RMBLTY[mob]; if (PC1[fyle] == 0) s += RHOPN; if (PC2[fyle] == 0) s += RHOPNX; if (rank == rank7[c1] && pmtl[c2] > 100) s += 10; if (stage > 2) s += 14 - taxicab(sq,EnemyKing); } else if (piece == queen) { if (stage > 2) s += 14 - taxicab(sq,EnemyKing); if (distance(sq,EnemyKing) < 3) s += 12; } else if (piece == king) { s = Mking[c1][sq]; if (KSFTY > 0) if (Developed[c2] || stage > 0) KingScan(sq,&s); if (castld[c1]) s += KCASTLD; else if (kingmoved[c1]) s += KMOVD; if (PC1[fyle] == 0) s += KHOPN; if (PC2[fyle] == 0) s += KHOPNX; if (fyle == 1 || fyle == 2 || fyle == 3 || fyle == 7) { if (PC1[fyle-1] == 0) s += KHOPN; if (PC2[fyle-1] == 0) s += KHOPNX; } if (fyle == 4 || fyle == 5 || fyle == 6 || fyle == 0) { if (PC1[fyle+1] == 0) s += KHOPN; if (PC2[fyle+1] == 0) s += KHOPNX; } if (fyle == 2) { if (PC1[0] == 0) s += KHOPN; if (PC2[0] == 0) s += KHOPNX; } if (fyle == 5) { if (PC1[7] == 0) s += KHOPN; if (PC2[7] == 0) s += KHOPNX; } } if (a2 > 0) { c = (control[piece] & 0x4FFF); if (a1 == 0 || a2 > c+1) { s += HUNGP; ++hung[c1]; if (piece != king && trapped(sq,piece)) ++hung[c1]; } else if (piece != pawn || a2 > a1) if (a2 >= c || a1 < ctlP) s += ATAKD; } return(s); } KingScan(sq,s) short sq,*s; /* Assign penalties if king can be threatened by checks, if squares near the king are controlled by the enemy (especially the queen), or if there are no pawns near the king. */ #define ScoreThreat\ if (color[u] != c2)\ if (atk1[u] == 0 || (atk2[u] & 0xFF) > 1) ++cnt;\ else *s -= 3 { register short m,u,d,i,m0,cnt,ok; cnt = 0; m0 = map[sq]; if (HasBishop[c2] || HasQueen[c2]) for (i = Dstart[bishop]; i <= Dstop[bishop]; i++) { d = Dir[i]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; if (atk2[u] & ctlBQ) ScoreThreat; if (color[u] != neutral) break; m += d; } } if (HasRook[c2] || HasQueen[c2]) for (i = Dstart[rook]; i <= Dstop[rook]; i++) { d = Dir[i]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; if (atk2[u] & ctlRQ) ScoreThreat; if (color[u] != neutral) break; m += d; } } if (HasKnight[c2]) for (i = Dstart[knight]; i <= Dstop[knight]; i++) if (!((m = m0+Dir[i]) & 0x88)) { u = unmap[m]; if (atk2[u] & ctlNN) ScoreThreat; } *s += (KSFTY*Kthreat[cnt]) / 16; cnt = 0; ok = false; m0 = map[sq]; for (i = Dstart[king]; i <= Dstop[king]; i++) if (!((m = m0+Dir[i]) & 0x88)) { u = unmap[m]; if (board[u] == pawn) ok = true; if (atk2[u] > atk1[u]) { ++cnt; if (atk2[u] & ctlQ) if (atk2[u] > ctlQ+1 && atk1[u] < ctlQ) *s -= 4*KSFTY; } } if (!ok) *s -= KSFTY; if (cnt > 1) *s -= KSFTY; } BRscan(sq,s,mob) short sq,*s,*mob; /* Find Bishop and Rook mobility, XRAY attacks, and pins. Increment the hung[] array if a pin is found. */ { register short m,u,d,m0,j,piece,pin; short *Kf; Kf = Kfield[c1]; *mob = 0; m0 = map[sq]; piece = board[sq]; for (j = Dstart[piece]; j <= Dstop[piece]; j++) { pin = -1; d = Dir[j]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; *s += Kf[u]; if (color[u] == neutral) { (*mob)++; m += d; } else if (pin < 0) { if (board[u] == pawn || board[u] == king) break; pin = u; m += d; } else if (color[u] == c2 && (board[u] > piece || atk2[u] == 0)) { if (color[pin] == c2) { *s += PINVAL; if (atk2[pin] == 0 || atk1[pin] > control[board[pin]]+1) ++hung[c2]; } else *s += XRAY; break; } else break; } } } int trapped(sq,piece) short sq,piece; /* See if the attacked piece has unattacked squares to move to. */ { register short u,m,d,i,m0; m0 = map[sq]; if (sweep[piece]) for (i = Dstart[piece]; i <= Dstop[piece]; i++) { d = Dir[i]; m = m0+d; while (!(m & 0x88)) { u = unmap[m]; if (color[u] == c1) break; if (atk2[u] == 0 || board[u] >= piece) return(false); if (color[u] == c2) break; m += d; } } else if (piece == pawn) { if (c1 == white) u = sq+8; else u = sq-8; if (color[u] == neutral && atk1[u] >= atk2[u]) return(false); if (!((m = m0+Dir[Dpwn[c1]]) & 0x88)) if (color[unmap[m]] == c2) return(false); if (!((m = m0+Dir[Dpwn[c1]+1]) & 0x88)) if (color[unmap[m]] == c2) return(false); } else { for (i = Dstart[piece]; i <= Dstop[piece]; i++) if (!((m = m0+Dir[i]) & 0x88)) { u = unmap[m]; if (color[u] != c1) if (atk2[u] == 0 || board[u] >= piece) return(false); } } return(true); } ExaminePosition() /* This is done one time before the search is started. Set up arrays Mwpawn, Mbpawn, Mknight, Mbishop, Mking which are used in the SqValue() function to determine the positional value of each piece. */ { register short i,sq; short wpadv,bpadv,wstrong,bstrong,z,side,pp,j,val,Pd,fyle,rank; wking = PieceList[white][0]; bking = PieceList[black][0]; ataks(white,atak[white]); ataks(black,atak[black]); Zwmtl = Zbmtl = 0; UpdateWeights(); HasPawn[white] = HasPawn[black] = 0; HasKnight[white] = HasKnight[black] = 0; HasBishop[white] = HasBishop[black] = 0; HasRook[white] = HasRook[black] = 0; HasQueen[white] = HasQueen[black] = 0; for (side = white; side <= black; side++) for (i = 0; i <= PieceCnt[side]; i++) switch (board[PieceList[side][i]]) { case pawn : ++HasPawn[side]; break; case knight : ++HasKnight[side]; break; case bishop : ++HasBishop[side]; break; case rook : ++HasRook[side]; break; case queen : ++HasQueen[side]; break; } if (!Developed[white]) Developed[white] = (board[1] != knight && board[2] != bishop && board[5] != bishop && board[6] != knight); if (!Developed[black]) Developed[black] = (board[57] != knight && board[58] != bishop && board[61] != bishop && board[62] != knight); if (!PawnStorm && stage < 5) PawnStorm = ((column[wking] < 3 && column[bking] > 4) || (column[wking] > 4 && column[bking] < 3)); CopyBoard(pknight,Mknight[white]); CopyBoard(pknight,Mknight[black]); CopyBoard(pbishop,Mbishop[white]); CopyBoard(pbishop,Mbishop[black]); BlendBoard(KingOpening,KingEnding,Mking[white]); BlendBoard(KingOpening,KingEnding,Mking[black]); for (sq = 0; sq < 64; sq++) { fyle = column[sq]; rank = row[sq]; wstrong = bstrong = true; for (i = sq; i < 64; i += 8) if (atak[black][i] >= ctlP) wstrong = false; for (i = sq; i >= 0; i -= 8) if (atak[white][i] >= ctlP) bstrong = false; wpadv = bpadv = PADVNCM; if ((fyle == 0 || PawnCnt[white][fyle-1] == 0) && (fyle == 7 || PawnCnt[white][fyle+1] == 0)) wpadv = PADVNCI; if ((fyle == 0 || PawnCnt[black][fyle-1] == 0) && (fyle == 7 || PawnCnt[black][fyle+1] == 0)) bpadv = PADVNCI; Mwpawn[sq] = (wpadv*PawnAdvance[sq]) / 10; Mbpawn[sq] = (bpadv*PawnAdvance[63-sq]) / 10; Mwpawn[sq] += PawnBonus; Mbpawn[sq] += PawnBonus; if (castld[white] || kingmoved[white]) { if ((fyle < 3 || fyle > 4) && distance(sq,wking) < 3) Mwpawn[sq] += PAWNSHIELD; } else if (rank < 3 && (fyle < 2 || fyle > 5)) Mwpawn[sq] += PAWNSHIELD / 2; if (castld[black] || kingmoved[black]) { if ((fyle < 3 || fyle > 4) && distance(sq,bking) < 3) Mbpawn[sq] += PAWNSHIELD; } else if (rank > 4 && (fyle < 2 || fyle > 5)) Mbpawn[sq] += PAWNSHIELD / 2; if (PawnStorm) { if ((column[wking] < 4 && fyle > 4) || (column[wking] > 3 && fyle < 3)) Mwpawn[sq] += 3*rank - 21; if ((column[bking] < 4 && fyle > 4) || (column[bking] > 3 && fyle < 3)) Mbpawn[sq] -= 3*rank; } Mknight[white][sq] += 5 - distance(sq,bking); Mknight[white][sq] += 5 - distance(sq,wking); Mknight[black][sq] += 5 - distance(sq,wking); Mknight[black][sq] += 5 - distance(sq,bking); Mbishop[white][sq] += BishopBonus; Mbishop[black][sq] += BishopBonus; for (i = 0; i <= PieceCnt[black]; i++) if (distance(sq,PieceList[black][i]) < 3) Mknight[white][sq] += KNIGHTPOST; for (i = 0; i <= PieceCnt[white]; i++) if (distance(sq,PieceList[white][i]) < 3) Mknight[black][sq] += KNIGHTPOST; if (wstrong) Mknight[white][sq] += KNIGHTSTRONG; if (bstrong) Mknight[black][sq] += KNIGHTSTRONG; if (wstrong) Mbishop[white][sq] += BISHOPSTRONG; if (bstrong) Mbishop[black][sq] += BISHOPSTRONG; if (HasBishop[white] == 2) Mbishop[white][sq] += 8; if (HasBishop[black] == 2) Mbishop[black][sq] += 8; if (HasKnight[white] == 2) Mknight[white][sq] += 5; if (HasKnight[black] == 2) Mknight[black][sq] += 5; if (board[sq] == bishop) if (rank % 2 == fyle % 2) KBNKsq = 0; else KBNKsq = 7; Kfield[white][sq] = Kfield[black][sq] = 0; if (distance(sq,wking) == 1) Kfield[black][sq] = KATAK; if (distance(sq,bking) == 1) Kfield[white][sq] = KATAK; Pd = 0; for (i = 0; i < 64; i++) if (board[i] == pawn) { if (color[i] == white) { pp = true; if (row[i] == 6) z = i+8; else z = i+16; for (j = i+8; j < 64; j += 8) if (atak[black][j] > ctlP || board[j] == pawn) pp = false; } else { pp = true; if (row[i] == 1) z = i-8; else z = i-16; for (j = i-8; j >= 0; j -= 8) if (atak[white][j] > ctlP || board[j] == pawn) pp = false; } if (pp) Pd += 5*taxicab(sq,z); else Pd += taxicab(sq,z); } if (Pd != 0) { val = (Pd*stage2) / 10; Mking[white][sq] -= val; Mking[black][sq] -= val; } } } UpdateWeights() /* If material balance has changed, determine the values for the positional evaluation terms. */ { register short tmtl; if (mtl[white] != Zwmtl || mtl[black] != Zbmtl) { Zwmtl = mtl[white]; Zbmtl = mtl[black]; emtl[white] = Zwmtl - pmtl[white] - valueK; emtl[black] = Zbmtl - pmtl[black] - valueK; tmtl = emtl[white] + emtl[black]; if (tmtl > 6600) stage = 0; else if (tmtl < 1400) stage = 10; else stage = (6600-tmtl) / 520; if (tmtl > 3600) stage2 = 0; else if (tmtl < 1400) stage2 = 10; else stage2 = (3600-tmtl) / 220; PEDRNK2B = -15; /* centre pawn on 2nd rank & blocked */ PBLOK = -4; /* blocked backward pawn */ PDOUBLED = -14; /* doubled pawn */ PWEAKH = -4; /* weak pawn on half open file */ PAWNSHIELD = 10-stage; /* pawn near friendly king */ PADVNCM = 10; /* advanced pawn multiplier */ PADVNCI = 7; /* muliplier for isolated pawn */ PawnBonus = stage; KNIGHTPOST = (stage+2)/3; /* knight near enemy pieces */ KNIGHTSTRONG = (stage+6)/2; /* occupies pawn hole */ BISHOPSTRONG = (stage+6)/2; /* occupies pawn hole */ BishopBonus = 2*stage; RHOPN = 10; /* rook on half open file */ RHOPNX = 4; RookBonus = 6*stage; XRAY = 8; /* Xray attack on piece */ PINVAL = 10; /* Pin */ KHOPN = (3*stage-30) / 2; /* king on half open file */ KHOPNX = KHOPN / 2; KCASTLD = 10 - stage; KMOVD = -40 / (stage+1); /* king moved before castling */ KATAK = (10-stage) / 2; /* B,R attacks near enemy king */ if (stage < 8) KSFTY = 16-2*stage; else KSFTY = 0; ATAKD = -6; /* defender > attacker */ HUNGP = -8; /* each hung piece */ HUNGX = -12; /* extra for >1 hung piece */ } } int distance(a,b) short a,b; { register short d1,d2; d1 = abs(column[a]-column[b]); d2 = abs(row[a]-row[b]); if (d1 > d2) return(d1); else return(d2); } BlendBoard(a,b,c) short a[64],b[64],c[64]; { register int sq; for (sq = 0; sq < 64; sq++) c[sq] = (a[sq]*(10-stage) + b[sq]*stage) / 10; } CopyBoard(a,b) short a[64],b[64]; { register int sq; for (sq = 0; sq < 64; sq++) b[sq] = a[sq]; } #ifdef MEGAMAX /* All this time() does is read the 200Hz clock. That's good enough for what we need (keeping track of elapsed time). */ static long ticks; static getticks() { ticks = *((long *) 0x4ba); } long time() { Supexec(getticks); return ticks/200L; } int kbhit() { if (Cconis) { Cconin(); return 1; } return 0; } access(filnam) char *filnam; { FILE *f; if (!(f = fopen(filnam, "w"))) return -1; fclose(f); return 1; } #endif ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее/* UNIX & MSDOS NON-DISPLAY, AND CHESSTOOL interface for Chess Revision: 4-25-88 Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. Copyright (c) 1988 John Stanback This file is part of CHESS. CHESS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. No author or distributor accepts responsibility to anyone for the consequences of using it or for whether it serves any particular purpose or works at all, unless he says so in writing. Refer to the CHESS General Public License for full details. Everyone is granted permission to copy, modify and redistribute CHESS, but only under the conditions described in the CHESS General Public License. A copy of this license is supposed to have been given to you along with CHESS so you can know your rights and responsibilities. It should be in a file named COPYING. Among other things, the copyright notice and this notice must be preserved on all copies. */ /* modified by Eric R. Smith to compile under MEGAMAX Laser C (I haven't actually tested it, though; I used the 'curses' version) Aug 9, 1988 */ /* modified by Chris Page to compile using GNU C under Minix Mkernel and ** GNU C under TOS on the ST - 24/3/91 */ #include #include #ifndef gcctos #include #endif #ifdef MSDOS # include # include # include #else # ifdef MEGAMAX # define MSDOS extern long time(); # define W_OK 1 # else # ifdef minix # include # include struct tms tmbuf1,tmbuf2; int TerminateSearch(),Die(); # else #ifdef gcctos #include # include # include # include # include int TerminateSearch(),Die(); #else # include # include # include # include struct tms tmbuf1,tmbuf2; int TerminateSearch(),Die(); #endif gcctos #endif minix # endif MEGAMAX #endif MSDOS #include "gnuchess.h" #define printz printf #define scanz scanf int mycnt1,mycnt2; Initialize() { mycnt1 = mycnt2 = 0; #ifdef minix system("clear"); #else #ifdef gcctos printf ("%c%c",27,'E'); #endif #endif #ifndef MSDOS #ifndef gcctos signal(SIGINT,Die); signal(SIGQUIT,Die); #endif #endif #ifdef CHESSTOOL /* setlinebuf(stdout); */ #endif #ifndef minix /* speeds it up */ #ifndef gcctos setvbuf(stdout,NULL,_IOLBF,BUFSIZ); #endif #endif #ifdef CHESSTOOL printf("Chess\n"); if (Level == 0 && !TCflag) Level = 15; #endif } ExitChess() { ListGame(); #ifdef minix fprintf (stdout, "\n\nGNU Chess Exited\n\n"); #endif #ifdef gcctos fprintf (stdout, "\n\nGNU Chesss Exited\n\n"); #endif exit(0); } #ifndef MSDOS Die() { char s[80]; signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); printz("\nAbort? "); scanz("%s",s); if ((strcmp(s,"yes") == 0) || (strcmp(s,"y") == 0) || (strcmp(s, "Y") == 0) || (strcmp(s,"YES") ==0)) { ExitChess(); } signal(SIGINT,Die); signal(SIGQUIT,Die); } TerminateSearch() { signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); timeout = true; bothsides = false; signal(SIGINT,Die); signal(SIGQUIT,Die); } #endif MSDOS InputCommand() /* Process the users command. If easy mode is OFF (the computer is thinking on opponents time) and the program is out of book, then make the 'hint' move on the board and call SelectMove() to find a response. The user terminates the search by entering ^C (quit siqnal) before entering a command. If the opponent does not make the hint move, then set Sdepth to zero. */ { int i; short ok,tmp; long cnt,rate,t1,t2; unsigned short mv; char s[80]; ok = quit = false; player = opponent; ft = 0; if (hint > 0 && !easy && Book == NULL) { fflush(stdout); time0 = time((long *)0); algbr(hint>>8,hint & 0xFF,false); strcpy(s,mvstr1); tmp = epsquare; if (VerifyMove(s,1,&mv)) { SelectMove(computer,2); VerifyMove(mvstr1,2,&mv); if (Sdepth > 0) Sdepth--; } ft = time((long *)0) - time0; epsquare = tmp; } #ifndef MSDOS signal(SIGINT,Die); signal(SIGQUIT,Die); #endif while (!(ok || quit)) { PromptForMove(); i = scanz("%s",s); if (i == EOF || s[0] == 0) ExitChess(); player = opponent; ok = VerifyMove(s,0,&mv); if (ok && mv != hint) { Sdepth = 0; ft = 0; } if (strcmp(s,"bd") == 0) { ClrScreen(); UpdateDisplay(0,0,1,0); } if (strcmp(s,"quit") == 0) quit = true; if (strcmp(s,"post") == 0) post = !post; if (strcmp(s,"edit") == 0) EditBoard(); if (strcmp(s,"go") == 0) ok = true; if (strcmp(s,"help") == 0) help(); if (strcmp(s,"force") == 0) force = !force; if (strcmp(s,"book") == 0) Book = NULL; if (strcmp(s,"new") == 0) NewGame(); if (strcmp(s,"list") == 0) ListGame(); if (strcmp(s,"level") == 0) SelectLevel(); if (strcmp(s,"hash") == 0) hashflag = !hashflag; if (strcmp(s,"beep") == 0) beep = !beep; if (strcmp(s,"Awindow") == 0) ChangeAlphaWindow(); if (strcmp(s,"Bwindow") == 0) ChangeBetaWindow(); if (strcmp(s,"rcptr") == 0) rcptr = !rcptr; if (strcmp(s,"hint") == 0) GiveHint(); if (strcmp(s,"zero") == 0) ZeroTTable(); if (strcmp(s,"both") == 0) { bothsides = !bothsides; Sdepth = 0; SelectMove(opponent,1); ok = true; } if (strcmp(s,"reverse") == 0) { reverse = !reverse; ClrScreen(); UpdateDisplay(0,0,1,0); } if (strcmp(s,"switch") == 0) { computer = otherside[computer]; opponent = otherside[opponent]; force = false; Sdepth = 0; ok = true; } if (strcmp(s,"white") == 0) { computer = white; opponent = black; ok = true; force = false; Sdepth = 0; } if (strcmp(s,"black") == 0) { computer = black; opponent = white; ok = true; force = false; Sdepth = 0; } if (strcmp(s,"undo") == 0 && GameCnt >= 0) Undo(); if (strcmp(s,"remove") == 0 && GameCnt >= 1) { Undo(); Undo(); } if (strcmp(s,"get") == 0) GetGame(); if (strcmp(s,"save") == 0) SaveGame(); if (strcmp(s,"depth") == 0) ChangeSearchDepth(); if (strcmp(s,"random") == 0) dither = 6; if (strcmp(s,"easy") == 0) easy = !easy; if (strcmp(s,"contempt") == 0) SetContempt(); if (strcmp(s,"xwndw") == 0) ChangeXwindow(); if (strcmp(s,"test") == 0) { t1 = time(0); cnt = 0; for (i = 0; i < 10000; i++) { MoveList(opponent,2); cnt += TrPnt[3] - TrPnt[2]; } t2 = time(0); rate = cnt / (t2-t1); printz("cnt= %ld rate= %ld\n",cnt,rate); } } ElapsedTime(1); if (force) { computer = opponent; opponent = otherside[computer]; } #ifndef MSDOS #ifndef gcctos (void) times(&tmbuf1); #endif #ifdef CHESSTOOL printf("%d. %s\n",++mycnt2,s); #endif CHESSTOOL signal(SIGINT,TerminateSearch); signal(SIGQUIT,TerminateSearch); #endif MSDOS } help() { ClrScreen(); printz("CHESS command summary\n"); printz("g1f3 move from g1 to f3\n"); printz("nf3 move knight to f3\n"); printz("o-o castle king side\n"); printz("o-o-o castle queen side\n"); printz("edit edit board\n"); printz("switch sides with computer\n"); printz("white computer plays white\n"); printz("black computer plays black\n"); printz("reverse board display\n"); printz("both computer match\n"); printz("random randomize play\n"); printz("undo undo last move\n"); printz("time change level\n"); printz("depth set search depth\n"); printz("post principle variation\n"); printz("hint suggest a move\n"); printz("bd redraw board\n"); printz("clock set time control\n"); printz("force enter game moves\n"); printz("list game to chess.lst\n"); printz("save game to file\n"); printz("get game from file\n"); printz("new start new game\n"); printz("quit exit CHESS\n"); printz("Computer: "); if (computer == white) printz("WHITE\n"); else printz("BLACK\n"); printz("Opponent: "); if (opponent == white) printz("WHITE\n"); else printz("BLACK\n"); printz("Response time: %ld \n",Level); printz("Easy mode: "); if (easy) printz("ON\n"); else printz("OFF\n"); printz("Depth: %d\n",MaxSearchDepth); printz("Random: "); if (dither) printz("ON\n"); else printz("OFF\n"); printz("Transposition table: "); if (hashflag) printz("ON\n"); else printz("OFF\n"); UpdateDisplay(0,0,1,0); } EditBoard() /* Set up a board position. Pieces are entered by typing the piece followed by the location. For example, Nf3 will place a knight on square f3. */ { short a,r,c,sq; char s[80]; ClrScreen(); UpdateDisplay(0,0,1,0); printz(". exit to main\n"); printz("# clear board\n"); printz("enter piece & location: \n"); a = white; do { scanz("%s",s); if (s[0] == '#') { for (sq = 0; sq < 64; sq++) { board[sq] = no_piece; color[sq] = neutral; } UpdateDisplay(0,0,1,0); } if (s[0] == 'c' || s[0] == 'C') a = otherside[a]; c = s[1]-'a'; r = s[2]-'1'; if ((c >= 0) && (c < 8) && (r >= 0) && (r < 8)) { sq = locn[r][c]; color[sq] = a; if (s[0] == 'p') board[sq] = pawn; else if (s[0] == 'n') board[sq] = knight; else if (s[0] == 'b') board[sq] = bishop; else if (s[0] == 'r') board[sq] = rook; else if (s[0] == 'q') board[sq] = queen; else if (s[0] == 'k') board[sq] = king; else { board[sq] = no_piece; color[sq] = neutral; } } } while (s[0] != '.'); if (board[4] != king) kingmoved[white] = 10; if (board[60] != king) kingmoved[black] = 10; GameCnt = -1; Game50 = 0; Sdepth = 0; InitializeStats(); ClrScreen(); UpdateDisplay(0,0,1,0); } ShowDepth(ch) char ch; { } ShowResults(score,bstline,ch) short score; unsigned short bstline[]; char ch; { #ifndef CHESSTOOL register int i; printz("%2d%c %5d %4ld %7ld ",Sdepth,ch,score,et,NodeCnt); for (i = 1; bstline[i] > 0; i++) { algbr((short)(bstline[i] >> 8),(short)(bstline[i] & 0xFF),false); if (i == 9 || i == 17) printz("\n "); printz("%5s ",mvstr1); } printz("\n"); #endif } SearchStartStuff(side) short side; { #ifndef MSDOS signal(SIGINT,TerminateSearch); signal(SIGQUIT,TerminateSearch); #endif MSDOS #ifndef CHESSTOOL printz("\nMove# %d Target= %ld Clock: %ld\n", TCmoves-TimeControl.moves[side]+1, ResponseTime,TimeControl.clock[side]); #endif } OutputMove() { #ifdef CHESSTOOL printz("%d. ... %s\n",++mycnt1,mvstr1); if (root->flags & draw) { printz("Draw\n"); ListGame(); exit(0); } if (root->score == -9999) { if (opponent == white) printz("White\n"); else printz("Black\n"); ListGame(); exit(0); } if (root->score == 9998) { if (computer == white) printz("White\n"); else printz("Black\n"); ListGame(); exit(0); } #else printz("Nodes= %ld Eval= %ld Hash= %ld Rate= %ld ", NodeCnt,EvalNodes,HashCnt,evrate); printz("CPU= %.2ld:%.2ld.%.2ld\n\n", cputimer/6000,(cputimer % 6000)/100,cputimer % 100); if (root->flags & epmask) UpdateDisplay(0,0,1,0); else UpdateDisplay(root->f,root->t,0,root->flags & cstlmask); printz("My move is: %s\n\n",mvstr1); if (beep) printz("%c",7); if (root->flags & draw) printz("Draw game!\n"); else if (root->score == -9999) printz("opponent mates!\n"); else if (root->score == 9998) printz("computer mates!\n"); else if (root->score < -9000) printz("opponent will soon mate!\n"); else if (root->score > 9000) printz("computer will soon mate!\n"); #ifdef gcctos ClrScreen(); UpdateDisplay(0,0,1,0); #else #ifdef minix ClrScreen(); UpdateDisplay(0,0,1,0); #endif #endif #endif CHESSTOOL } ElapsedTime(iop) short iop; /* Determine the time that has passed since the search was started. If the elapsed time exceeds the target (ResponseTime+ExtraTime) then set timeout to true which will terminate the search. */ { et = time((long *)0) - time0; if (et < 0) et = 0; ETnodes += 50; if (et > et0 || iop == 1) { if (et > ResponseTime+ExtraTime && Sdepth > 1) timeout = true; et0 = et; if (iop == 1) { time0 = time((long *)0); et0 = 0; } #ifdef MSDOS cputimer = 100*et; if (et > 0) evrate = NodeCnt/(et+ft); else evrate = 0; if (kbhit() && Sdepth > 1) { timeout = true; bothsides = false; } #endif #ifdef gcctos cputimer = 100*et; if (et > 0) evrate = NodeCnt/(et+ft); else evrate = 0; if (kbhit() && Sdepth > 1) { timeout = true; bothsides = false; } #else (void) times(&tmbuf2); cputimer = 100*(tmbuf2.tms_utime - tmbuf1.tms_utime) / HZ; if (cputimer > 0) evrate = (100*NodeCnt)/(cputimer+100*ft); else evrate = 0; #endif gcctos ETnodes = NodeCnt + 50; } } SetTimeControl() { if (TCflag) { TimeControl.moves[white] = TimeControl.moves[black] = TCmoves; TimeControl.clock[white] = TimeControl.clock[black] = 60*(long)TCminutes; } else { TimeControl.moves[white] = TimeControl.moves[black] = 0; TimeControl.clock[white] = TimeControl.clock[black] = 0; Level = 60*(long)TCminutes; } et = 0; ElapsedTime(1); } ClrScreen() { #ifndef CHESSTOOL printz("\n\n"); #endif } /* modified by Chris Page to print row and column data for ** user friendliness */ UpdateDisplay(f,t,flag,iscastle) short f,t,flag,iscastle; { #ifndef CHESSTOOL short r,c,l; if (flag) { printz("\n"); /* text titles added Chris Page 27/3/90 */ if (reverse) { printf (" H G F E D C B A\n\n"); } else { printf (" A B C D E F G H\n\n"); } for (r = 7; r >= 0; r--) { if(reverse) { printf (" %d ", 9 - (r+1)); } else { printf (" %d ", r+1); } for (c = 0; c <= 7; c++) { if (reverse) l = locn[7-r][7-c]; else l = locn[r][c]; if (color[l] == neutral) printz(" -"); else if (color[l] == white) printz(" %c",qxx[board[l]]); else printz(" %c",pxx[board[l]]); } printz("\n"); } printz("\n"); } #endif CHESSTOOL } GetOpenings() /* Read in the Opening Book file and parse the algebraic notation for a move into an unsigned integer format indicating the from and to square. Create a linked list of opening lines of play, with entry->next pointing to the next line and entry->move pointing to a chunk of memory containing the moves. More Opening lines of up to 256 half moves may be added to gnuchess.book. */ { FILE *fd; int c,i,j,side; char buffr[2048]; struct BookEntry *entry; unsigned short mv,*mp,tmp[100]; #ifdef gcctos /* get rid of the 'k' to make filename short enough */ if ((fd = fopen("gnuchess.boo","r")) != NULL) #else if ((fd = fopen("gnuchess.book","r")) != NULL) #endif gcctos { #ifndef MEGAMAX #ifdef minix setbuf(fd,buffr); #else #ifndef gcctos setvbuf(fd,buffr,_IOFBF,2048); #endif #endif #endif Book = NULL; i = 0; side = white; while ((c = parse(fd,&mv,side)) >= 0) if (c == 1) { tmp[++i] = mv; side = otherside[side]; } else if (c == 0 && i > 0) { entry = (struct BookEntry *)malloc(sizeof(struct BookEntry)); mp = (unsigned short *)malloc((i+1)*sizeof(unsigned short)); entry->mv = mp; entry->next = Book; Book = entry; for (j = 1; j <= i; j++) *(mp++) = tmp[j]; *mp = 0; i = 0; side = white; } fclose(fd); } } int parse(fd,mv,side) FILE *fd; unsigned short *mv; short side; { int c,i,r1,r2,c1,c2; char s[100]; while ((c = getc(fd)) == ' '); i = 0; s[0] = c; while (c != ' ' && c != '\n' && c != EOF) s[++i] = c = getc(fd); s[++i] = '\0'; if (c == EOF) return(-1); if (s[0] == '!' || i < 3) { while (c != '\n' && c != EOF) c = getc(fd); return(0); } if (s[4] == 'o') if (side == black) *mv = 0x3C3A; else *mv = 0x0402; else if (s[0] == 'o') if (side == black) *mv = 0x3C3E; else *mv = 0x0406; else { c1 = s[0] - 'a'; r1 = s[1] - '1'; c2 = s[2] - 'a'; r2 = s[3] - '1'; *mv = (locn[r1][c1]<<8) + locn[r2][c2]; } return(1); } GetGame() { FILE *fd; char fname[40]; int c; short sq; unsigned short m; printz("Enter file name: "); scanz("%s",fname); if (fname[0] == '\0') strcpy(fname,"chess.000"); if ((fd = fopen(fname,"r")) != NULL) { fscanf(fd,"%hd%hd%hd",&computer,&opponent,&Game50); fscanf(fd,"%hd%hd%hd%hd", &castld[white],&castld[black], &kingmoved[white],&kingmoved[black]); fscanf(fd,"%hd%hd",&TCflag,&OperatorTime); fscanf(fd,"%ld%ld%hd%hd", &TimeControl.clock[white],&TimeControl.clock[black], &TimeControl.moves[white],&TimeControl.moves[black]); for (sq = 0; sq < 64; sq++) { fscanf(fd,"%hd",&m); board[sq] = (m >> 8); color[sq] = (m & 0xFF); if (color[sq] == 0) color[sq] = neutral; else --color[sq]; } GameCnt = -1; c = '?'; while (c != EOF) { ++GameCnt; c = fscanf(fd,"%hd%hd%hd%ld%hd%hd%hd",&GameList[GameCnt].gmove, &GameList[GameCnt].score,&GameList[GameCnt].depth, &GameList[GameCnt].nodes,&GameList[GameCnt].time, &GameList[GameCnt].piece,&GameList[GameCnt].color); if (GameList[GameCnt].color == 0) GameList[GameCnt].color = neutral; else --GameList[GameCnt].color; } GameCnt--; if (TimeControl.clock[white] > 0) TCflag = true; computer--; opponent--; } fclose(fd); InitializeStats(); UpdateDisplay(0,0,1,0); Sdepth = 0; } SaveGame() { FILE *fd; char fname[40]; short sq,i,c; printz("Enter file name: "); scanz("%s",fname); /* W_OK in access changed to 2 for write to make it work with a real compiler not megamax */ if (fname[0] == '\0' || access(fname,2) == -1) strcpy(fname,"chess.000"); fd = fopen(fname,"w"); fprintf(fd,"%d %d %d\n",computer+1,opponent+1,Game50); fprintf(fd,"%d %d %d %d\n", castld[white],castld[black],kingmoved[white],kingmoved[black]); fprintf(fd,"%d %d\n",TCflag,OperatorTime); fprintf(fd,"%ld %ld %d %d\n", TimeControl.clock[white],TimeControl.clock[black], TimeControl.moves[white],TimeControl.moves[black]); for (sq = 0; sq < 64; sq++) { if (color[sq] == neutral) c = 0; else c = color[sq]+1; fprintf(fd,"%d\n",256*board[sq] + c); } for (i = 0; i <= GameCnt; i++) { if (GameList[i].color == neutral) c = 0; else c = GameList[i].color + 1; fprintf(fd,"%d %d %d %ld %d %d %d\n", GameList[i].gmove,GameList[i].score,GameList[i].depth, GameList[i].nodes,GameList[i].time, GameList[i].piece,c); } fclose(fd); } ListGame() { FILE *fd; short i,f,t; fd = fopen("chess.lst","w"); fprintf(fd,"\n"); fprintf(fd," score depth nodes time "); fprintf(fd," score depth nodes time\n"); for (i = 0; i <= GameCnt; i++) { f = GameList[i].gmove>>8; t = (GameList[i].gmove & 0xFF); algbr(f,t,false); if ((i % 2) == 0) fprintf(fd,"\n"); else fprintf(fd," "); fprintf(fd,"%5s %5d %2d %6ld %5d",mvstr1, GameList[i].score,GameList[i].depth, GameList[i].nodes,GameList[i].time); } fprintf(fd,"\n\n"); fclose(fd); } Undo() /* Undo the most recent half-move. */ { short f,t; f = GameList[GameCnt].gmove>>8; t = GameList[GameCnt].gmove & 0xFF; if (board[t] == king && distance(t,f) > 1) castle(GameList[GameCnt].color,f,t,2); else { board[f] = board[t]; color[f] = color[t]; board[t] = GameList[GameCnt].piece; color[t] = GameList[GameCnt].color; if (board[f] == king) --kingmoved[color[f]]; } if (TCflag) ++TimeControl.moves[color[f]]; GameCnt--; mate = false; Sdepth = 0; UpdateDisplay(0,0,1,0); InitializeStats(); } ShowMessage(s) char *s; { #ifndef CHESSTOOL printz("%s\n",s); #endif CHESSTOOL } ShowSidetomove() { } PromptForMove() { #ifndef CHESSTOOL printz("\nYour move is? "); #endif CHESSTOOL } ShowCurrentMove(pnt,f,t) short pnt,f,t; { } ChangeAlphaWindow() { printz("window: "); scanz("%hd",&Awindow); } ChangeBetaWindow() { printz("window: "); scanz("%hd",&Bwindow); } GiveHint() { algbr((short)(hint>>8),(short)(hint & 0xFF),false); printz("try %s\n",mvstr1); } SelectLevel() { OperatorTime = 30000; printz("Enter #moves #minutes: "); scanz("%hd %hd",&TCmoves,&TCminutes); printz("Operator time= "); scanz("%hd",&OperatorTime); TCflag = (TCmoves > 1); SetTimeControl(); } ChangeSearchDepth() { printz("depth= "); scanz("%hd",&MaxSearchDepth); } SetContempt() { printz("contempt= "); scanz("%hd",&contempt); } ChangeXwindow() { printz("xwndw= "); scanz("%hd",&xwndw); } ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее/* ALPHA interface for CHESS Revision: 4-25-88 Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. Copyright (c) 1988 John Stanback This file is part of CHESS. CHESS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. No author or distributor accepts responsibility to anyone for the consequences of using it or for whether it serves any particular purpose or works at all, unless he says so in writing. Refer to the CHESS General Public License for full details. Everyone is granted permission to copy, modify and redistribute CHESS, but only under the conditions described in the CHESS General Public License. A copy of this license is supposed to have been given to you along with CHESS so you can know your rights and responsibilities. It should be in a file named COPYING. Among other things, the copyright notice and this notice must be preserved on all copies. */ /* minor addition to the help screen by Bill Randle, 6-10-88 */ /* modified to compile on the Atari ST under Megamax Laser C by Eric R. Smith Aug 9, 1988 */ /* modified to compile using GNU C on Minix Mkernel or GNU C on TOS by Chris Page - 24/3/91 */ #include #include /* must include types.h to remove error in times.h*/ #ifndef gcctos #include #endif #ifdef MEGAMAX # include "curses.h" # define W_OK 0 # define signal(x,y) extern long time(); #else #ifdef minix # include # include # include #else #ifdef gcctos # include # include # include # include # include "curses.h" # include #else # include # include # include # include # include #endif gcctos #endif minix #endif MEGAMAX #include "gnuchess.h" #ifndef MEGAMAX #ifndef gcctos struct tms tmbuf1,tmbuf2; #endif #endif int TerminateSearch(),Die(); #define scanz fflush(stdout),scanw #define printz printw Initialize() { signal(SIGINT,Die); signal(SIGQUIT,Die); initscr(); crmode(); #ifdef MEGAMAX nocrmode(); echo(); #endif } ExitChess() { nocrmode(); endwin(); #ifdef minix ClrScreen(); fprintf (stdout, "\n\nGNU Chess Exited\n\n"); #endif exit(0); } #ifndef MEGAMAX Die() { char s[80]; signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); ShowMessage("Abort? "); scanz("%s",s); if (strcmp(s,"yes") == 0) ExitChess(); signal(SIGINT,Die); signal(SIGQUIT,Die); } TerminateSearch() { signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); timeout = true; bothsides = false; signal(SIGINT,Die); signal(SIGQUIT,Die); } #endif InputCommand() /* Process the users command. If easy mode is OFF (the computer is thinking on opponents time) and the program is out of book, then make the 'hint' move on the board and call SelectMove() to find a response. The user terminates the search by entering ^C (quit siqnal) before entering a command. If the opponent does not make the hint move, then set Sdepth to zero. */ { short ok,i,tmp; long cnt,rate,t1,t2; unsigned short mv; char s[80]; ok = quit = false; player = opponent; ShowSidetomove(); ft = 0; if (hint > 0 && !easy && Book == NULL) { fflush(stdout); time0 = time((long *)0); algbr(hint>>8,hint & 0xFF,false); strcpy(s,mvstr1); tmp = epsquare; if (VerifyMove(s,1,&mv)) { PromptForMove(); SelectMove(computer,2); VerifyMove(mvstr1,2,&mv); if (Sdepth > 0) Sdepth--; } ft = time((long *)0) - time0; epsquare = tmp; } signal(SIGINT,Die); signal(SIGQUIT,Die); while (!(ok || quit)) { PromptForMove(); scanz("%s",s); player = opponent; ok = VerifyMove(s,0,&mv); if (ok && mv != hint) { Sdepth = 0; ft = 0; } if (strcmp(s,"bd") == 0) { ClrScreen(); UpdateDisplay(0,0,1,0); } if (strcmp(s,"quit") == 0) quit = true; if (strcmp(s,"post") == 0) post = !post; if (strcmp(s,"edit") == 0) EditBoard(); if (strcmp(s,"go") == 0) ok = true; if (strcmp(s,"help") == 0) help(); if (strcmp(s,"force") == 0) force = !force; if (strcmp(s,"book") == 0) Book = NULL; if (strcmp(s,"undo") == 0 && GameCnt >= 0) Undo(); if (strcmp(s,"new") == 0) NewGame(); if (strcmp(s,"list") == 0) ListGame(); if (strcmp(s,"level") == 0) SelectLevel(); if (strcmp(s,"hash") == 0) hashflag = !hashflag; if (strcmp(s,"beep") == 0) beep = !beep; if (strcmp(s,"Awindow") == 0) ChangeAlphaWindow(); if (strcmp(s,"Bwindow") == 0) ChangeBetaWindow(); if (strcmp(s,"hint") == 0) GiveHint(); if (strcmp(s,"both") == 0) { bothsides = !bothsides; Sdepth = 0; SelectMove(opponent,1); ok = true; } if (strcmp(s,"reverse") == 0) { reverse = !reverse; ClrScreen(); UpdateDisplay(0,0,1,0); } if (strcmp(s,"switch") == 0) { computer = otherside[computer]; opponent = otherside[opponent]; force = false; Sdepth = 0; ok = true; } if (strcmp(s,"white") == 0) { computer = white; opponent = black; ok = true; force = false; Sdepth = 0; } if (strcmp(s,"black") == 0) { computer = black; opponent = white; ok = true; force = false; Sdepth = 0; } if (strcmp(s,"remove") == 0 && GameCnt >= 1) { Undo(); Undo(); } if (strcmp(s,"get") == 0) GetGame(); if (strcmp(s,"save") == 0) SaveGame(); if (strcmp(s,"depth") == 0) ChangeSearchDepth(); if (strcmp(s,"random") == 0) dither = 6; if (strcmp(s,"easy") == 0) easy = !easy; if (strcmp(s,"contempt") == 0) SetContempt(); if (strcmp(s,"xwndw") == 0) ChangeXwindow(); if (strcmp(s,"test") == 0) { t1 = time((long *)0); cnt = 0; for (i = 0; i < 10000; i++) { MoveList(opponent,2); cnt += TrPnt[3] - TrPnt[2]; } t2 = time((long *)0); rate = cnt / (t2-t1); gotoXY(50,24); printz("cnt= %ld rate= %ld", cnt, rate); ClrEoln(); } if (strcmp(s,"p") == 0) ShowPostnValues(); if (strcmp(s,"debug") == 0) DoDebug(); } ClearMessage(); ElapsedTime(1); if (force) { computer = opponent; opponent = otherside[computer]; } #ifndef MEGAMAX #ifndef gcctos (void) times(&tmbuf1); #endif gcctos #endif signal(SIGINT,TerminateSearch); signal(SIGQUIT,TerminateSearch); } EditBoard() /* Set up a board position. Pieces are entered by typing the piece followed by the location. For example, Nf3 will place a knight on square f3. */ { short a,r,c,sq; char s[80]; ClrScreen(); UpdateDisplay(0,0,1,0); gotoXY(50,2); printz(". Exit to main"); gotoXY(50,3); printz("# Clear board"); gotoXY(49,5); printz("Enter piece & location: "); a = white; do { gotoXY(73,5); ClrEoln(); scanz("%s",s); if (s[0] == '#') { for (sq = 0; sq < 64; sq++) { board[sq] = no_piece; color[sq] = neutral; } UpdateDisplay(0,0,1,0); } if (s[0] == 'c' || s[0] == 'C') a = otherside[a]; c = s[1]-'a'; r = s[2]-'1'; if ((c >= 0) && (c < 8) && (r >= 0) && (r < 8)) { sq = locn[r][c]; color[sq] = a; if (s[0] == 'p') board[sq] = pawn; else if (s[0] == 'n') board[sq] = knight; else if (s[0] == 'b') board[sq] = bishop; else if (s[0] == 'r') board[sq] = rook; else if (s[0] == 'q') board[sq] = queen; else if (s[0] == 'k') board[sq] = king; else { board[sq] = no_piece; color[sq] = neutral; } DrawPiece(sq); } } while (s[0] != '.'); if (board[4] != king) kingmoved[white] = 10; if (board[60] != king) kingmoved[black] = 10; GameCnt = -1; Game50 = 0; Sdepth = 0; InitializeStats(); ClrScreen(); UpdateDisplay(0,0,1,0); } help() { ClrScreen(); gotoXY(28,1); printz("CHESS command summary"); gotoXY(1,3); printz("g1f3 move from g1 to f3"); gotoXY(1,4); printz("nf3 move knight to f3"); gotoXY(1,5); printz("o-o castle king side"); gotoXY(1,6); printz("o-o-o castle queen side"); gotoXY(1,7); printz("edit edit board"); gotoXY(1,8); printz("switch sides with computer"); gotoXY(1,9); printz("white computer plays white"); gotoXY(1,10); printz("black computer plays black"); gotoXY(1,11); printz("reverse board display"); gotoXY(1,12); printz("both computer match"); gotoXY(1,13); printz("random randomize play"); gotoXY(1,14); printz("undo undo last move"); gotoXY(42,3); printz("level change level"); gotoXY(42,4); printz("depth set search depth"); gotoXY(42,5); printz("post principle variation"); gotoXY(42,6); printz("hint suggest a move"); gotoXY(42,7); printz("bd redraw board"); gotoXY(42,8); printz("force enter game moves"); gotoXY(42,9); printz("list game to chess.lst"); gotoXY(42,10); printz("save game to file"); gotoXY(42,11); printz("get game from file"); gotoXY(42,12); printz("new start new game"); gotoXY(42,13); printz("quit exit CHESS"); gotoXY(10,21); printz("Computer: "); if (computer == white) printz("WHITE"); else printz("BLACK"); gotoXY(10,22); printz("Opponent: "); if (opponent == white) printz("WHITE"); else printz("BLACK"); gotoXY(10,23); printz("Level: %ld",Level); gotoXY(10,24); printz("Easy mode: "); if (easy) printz("ON"); else printz("OFF"); gotoXY(40,21); printz("Depth: %d",MaxSearchDepth); gotoXY(40,22); printz("Random: "); if (dither) printz("ON"); else printz("OFF"); gotoXY(40,23); printz("Transposition table: "); if (hashflag) printz("ON"); else printz("OFF"); gotoXY(40,24); printz("(press ESC to continue)"); refresh(); #ifdef gcctos while ((char)getch() != 27); #else while (getch() != 27); #endif ClrScreen(); UpdateDisplay(0,0,1,0); } ShowDepth(ch) char ch; { if (player == computer) { gotoXY(50,4); printz("Depth= %d%c ",Sdepth,ch); ClrEoln(); } } ShowResults(score,bstline,ch) short score; unsigned short bstline[]; char ch; { short d,e,ply; if (post && player == computer) { e = lpost; gotoXY(50,5); printz("Score= %d",score); ClrEoln(); d = 8; gotoXY(50,d); ClrEoln(); for (ply = 1; bstline[ply] > 0; ply++) { algbr(bstline[ply] >> 8,bstline[ply] & 0xFF,false); if (ply == 5 || ply == 9 || ply == 13 || ply == 17) { gotoXY(50,++d); ClrEoln(); } printz("%5s ",mvstr1); } ClrEoln(); lpost = d; while (++d <= e) { gotoXY(50,d); ClrEoln(); } } } SearchStartStuff(side) short side; { short i; signal(SIGINT,TerminateSearch); signal(SIGQUIT,TerminateSearch); if (player == computer) { for (i = 5; i < 14; i++) { gotoXY(50,i); ClrEoln(); } gotoXY(50,22); ClrEoln(); gotoXY(50,23); ClrEoln(); } } OutputMove() { if (root->flags & epmask) UpdateDisplay(0,0,1,0); else UpdateDisplay(root->f,root->t,0,root->flags & cstlmask); gotoXY(50,17); printz("My move is: %s",mvstr1); if (beep) putchar(7); ClrEoln(); gotoXY(50,24); if (root->flags & draw) printz("Draw game!"); else if (root->score == -9999) printz("opponent mates!"); else if (root->score == 9998) printz("computer mates!"); else if (root->score < -9000) printz("opponent will soon mate!"); else if (root->score > 9000) printz("computer will soon mate!"); ClrEoln(); if (post && player == computer) { gotoXY(50,22); printz("Nodes= %6ld",NodeCnt); ClrEoln(); gotoXY(50,23); printz("Nodes/Sec= %4ld",evrate); ClrEoln(); } } ElapsedTime(iop) /* Determine the time that has passed since the search was started. If the elapsed time exceeds the target (ResponseTime+ExtraTime) then set timeout to true which will terminate the search. */ short iop; { et = time((long *)0) - time0; if (et < 0) et = 0; ETnodes += 50; if (et > et0 || iop == 1) { if (et > ResponseTime+ExtraTime && Sdepth > 1) timeout = true; et0 = et; if (iop == 1) { time0 = time((long *)0); et0 = 0; } #ifdef MEGAMAX cputimer = 100*et; if (et > 0) evrate = NodeCnt/(et+ft); else evrate = 0; if (kbhit() && Sdepth > 1) { timeout = true; bothsides = false; } #else #ifdef gcctos cputimer = 100*et; if (et > 0) evrate = NodeCnt/(et+ft); else evrate = 0; if (kbhit() && Sdepth > 1) { timeout = true; bothsides = false; } #else (void) times(&tmbuf2); cputimer = 100*(tmbuf2.tms_utime - tmbuf1.tms_utime) / HZ; if (cputimer > 0) evrate = (100*NodeCnt)/(cputimer+100*ft); else evrate = 0; #endif gcctos #endif MEGAMAX ETnodes = NodeCnt + 50; UpdateClocks(); } } UpdateClocks() { short m,s; m = et/60; s = (et - 60*m); if (TCflag) { m = (TimeControl.clock[player] - et) / 60; s = TimeControl.clock[player] - et - 60*m; } if (m < 0) m = 0; if (s < 0) s = 0; if (player == white) if (reverse) gotoXY(20,2); else gotoXY(20,23); else if (reverse) gotoXY(20,23); else gotoXY(20,2); printz("%d:%02d ",m,s); refresh(); } SetTimeControl() { if (TCflag) { TimeControl.moves[white] = TimeControl.moves[black] = TCmoves; TimeControl.clock[white] = TimeControl.clock[black] = 60*(long)TCminutes; } else { TimeControl.moves[white] = TimeControl.moves[black] = 0; TimeControl.clock[white] = TimeControl.clock[black] = 0; Level = 60*(long)TCminutes; } et = 0; ElapsedTime(1); } gotoXY(x,y) short x,y; { move(y-1,x-1); } ClrScreen() { #ifdef minix printf (FORM_FEED); #endif clear(); refresh(); } ClrEoln() { clrtoeol(); refresh(); } DrawPiece(sq) short sq; { short r,c; char x; if (reverse) r = 7-row[sq]; else r = row[sq]; if (reverse) c = 7-column[sq]; else c = column[sq]; if (color[sq] == black) x = '*'; else x = ' '; gotoXY(5+5*c,5+2*(7-r)); printz("%c%c",x,pxx[board[sq]]); } UpdateDisplay(f,t,flag,iscastle) short f,t,flag,iscastle; { short i,l,z; if (flag) { gotoXY(56,2); printz("CHESS"); i = 3; gotoXY(3,++i); printz("|----|----|----|----|----|----|----|----|"); while (i<19) { gotoXY(1,++i); if (reverse) z = (i/2)-1; else z = 10-(i/2); printz("%d | | | | | | | | |",z); gotoXY(3,++i); if (i < 19) printz("+----+----+----+----+----+----+----+----+"); } printz("|----|----|----|----|----|----|----|----|"); gotoXY(3,21); if (reverse) printz(" h g f e d c b a"); else printz(" a b c d e f g h"); if (reverse) gotoXY(5,23); else gotoXY(5,2); if (computer == black) printz("Computer"); else printz("Human "); if (reverse) gotoXY(5,2); else gotoXY(5,23); if (computer == white) printz("Computer"); else printz("Human "); for (l = 0; l < 64; l++) DrawPiece(l); } else { DrawPiece(f); DrawPiece(t); if (iscastle) if (t > f) { DrawPiece(f+3); DrawPiece(t-1); } else { DrawPiece(f-4); DrawPiece(t+1); } } refresh(); } GetOpenings() /* Read in the Opening Book file and parse the algebraic notation for a move into an unsigned integer format indicating the from and to square. Create a linked list of opening lines of play, with entry->next pointing to the next line and entry->move pointing to a chunk of memory containing the moves. More Opening lines of up to 256 half moves may be added to gnuchess.book. */ { FILE *fd; int c,i,j,side; struct BookEntry *entry; unsigned short mv,*mp,tmp[100]; if ((fd = fopen("gnuchess.book","r")) != NULL) { Book = NULL; i = 0; side = white; while ((c = parse(fd,&mv,side)) >= 0) if (c == 1) { tmp[++i] = mv; side = otherside[side]; } else if (c == 0 && i > 0) { entry = (struct BookEntry *)malloc(sizeof(struct BookEntry)); mp = (unsigned short *)malloc((i+1)*sizeof(unsigned short)); entry->mv = mp; entry->next = Book; Book = entry; for (j = 1; j <= i; j++) *(mp++) = tmp[j]; *mp = 0; i = 0; side = white; } fclose(fd); } } int parse(fd,mv,side) FILE *fd; unsigned short *mv; short side; { int c,i,r1,r2,c1,c2; char s[100]; while ((c = getc(fd)) == ' '); i = 0; s[0] = c; while (c != ' ' && c != '\n' && c != EOF) s[++i] = c = getc(fd); s[++i] = '\0'; if (c == EOF) return(-1); if (s[0] == '!' || i < 3) { while (c != '\n' && c != EOF) c = getc(fd); return(0); } if (s[4] == 'o') if (side == black) *mv = 0x3C3A; else *mv = 0x0402; else if (s[0] == 'o') if (side == black) *mv = 0x3C3E; else *mv = 0x0406; else { c1 = s[0] - 'a'; r1 = s[1] - '1'; c2 = s[2] - 'a'; r2 = s[3] - '1'; *mv = (locn[r1][c1]<<8) + locn[r2][c2]; } return(1); } GetGame() { FILE *fd; char fname[40]; int c; short sq; unsigned short m; ShowMessage("File name: "); scanz("%s",fname); if (fname[0] == '\0') strcpy(fname,"chess.000"); if ((fd = fopen(fname,"r")) != NULL) { /* modified for Laser C by ERS (%d in place of %hd, and spaces and newlines added) */ fscanf(fd,"%d %d %d\n",&computer,&opponent,&Game50); fscanf(fd,"%d %d %d %d\n", &castld[white],&castld[black], &kingmoved[white],&kingmoved[black]); fscanf(fd,"%d %d\n",&TCflag,&OperatorTime); fscanf(fd,"%ld %ld %d %d\n", &TimeControl.clock[white],&TimeControl.clock[black], &TimeControl.moves[white],&TimeControl.moves[black]); for (sq = 0; sq < 64; sq++) { fscanf(fd,"%d\n",&m); board[sq] = (m >> 8); color[sq] = (m & 0xFF); if (color[sq] == 0) color[sq] = neutral; else --color[sq]; } GameCnt = -1; c = '?'; while (c != EOF) { ++GameCnt; c = fscanf(fd,"%d %d %d %ld %d %d %d\n",&GameList[GameCnt].gmove, &GameList[GameCnt].score,&GameList[GameCnt].depth, &GameList[GameCnt].nodes,&GameList[GameCnt].time, &GameList[GameCnt].piece,&GameList[GameCnt].color); if (GameList[GameCnt].color == 0) GameList[GameCnt].color = neutral; else --GameList[GameCnt].color; } GameCnt--; if (TimeControl.clock[white] > 0) TCflag = true; computer--; opponent--; } fclose(fd); InitializeStats(); UpdateDisplay(0,0,1,0); Sdepth = 0; } SaveGame() { FILE *fd; char fname[40]; short sq,i,c; ShowMessage("File name: "); scanz("%s",fname); /* taken out W_OK after fname ie access(fname,W_OK) to become access(fname, 2) ie write*/ if (fname[0] == '\0' || access(fname,2) == -1) strcpy(fname,"chess.000"); fd = fopen(fname,"w"); fprintf(fd,"%d %d %d\n",computer+1,opponent+1,Game50); fprintf(fd,"%d %d %d %d\n", castld[white],castld[black],kingmoved[white],kingmoved[black]); fprintf(fd,"%d %d\n",TCflag,OperatorTime); fprintf(fd,"%ld %ld %d %d\n", TimeControl.clock[white],TimeControl.clock[black], TimeControl.moves[white],TimeControl.moves[black]); for (sq = 0; sq < 64; sq++) { if (color[sq] == neutral) c = 0; else c = color[sq]+1; fprintf(fd,"%d\n",256*board[sq] + c); } for (i = 0; i <= GameCnt; i++) { if (GameList[i].color == neutral) c = 0; else c = GameList[i].color + 1; fprintf(fd,"%d %d %d %ld %d %d %d\n", GameList[i].gmove,GameList[i].score,GameList[i].depth, GameList[i].nodes,GameList[i].time, GameList[i].piece,c); } fclose(fd); } ListGame() { FILE *fd; short i,f,t; fd = fopen("chess.lst","w"); fprintf(fd,"\n"); fprintf(fd," score depth nodes time "); fprintf(fd," score depth nodes time\n"); for (i = 0; i <= GameCnt; i++) { f = GameList[i].gmove>>8; t = (GameList[i].gmove & 0xFF); algbr(f,t,false); if ((i % 2) == 0) fprintf(fd,"\n"); else fprintf(fd," "); fprintf(fd,"%5s %5d %2d %6ld %5d",mvstr1, GameList[i].score,GameList[i].depth, GameList[i].nodes,GameList[i].time); } fprintf(fd,"\n\n"); fclose(fd); } Undo() /* Undo the most recent half-move. */ { short f,t; f = GameList[GameCnt].gmove>>8; t = GameList[GameCnt].gmove & 0xFF; if (board[t] == king && distance(t,f) > 1) castle(GameList[GameCnt].color,f,t,2); else { board[f] = board[t]; color[f] = color[t]; board[t] = GameList[GameCnt].piece; color[t] = GameList[GameCnt].color; if (board[f] == king) --kingmoved[color[f]]; } if (TCflag) ++TimeControl.moves[color[f]]; GameCnt--; mate = false; Sdepth = 0; UpdateDisplay(0,0,1,0); InitializeStats(); } ShowMessage(s) char *s; { gotoXY(50,24); printz("%s",s); ClrEoln(); } ClearMessage() { gotoXY(50,24); ClrEoln(); } ShowSidetomove() { gotoXY(50,14); if (player == white) printz("%2d: WHITE",1+(GameCnt+1)/2); else printz("%2d: BLACK",1+(GameCnt+1)/2); ClrEoln(); } PromptForMove() { gotoXY(50,19); printz("Your move is? "); ClrEoln(); } ShowCurrentMove(pnt,f,t) short pnt,f,t; { if (post && player == computer) { algbr(f,t,false); gotoXY(50,7); printz("(%2d) %4s",pnt,mvstr1); } } ChangeAlphaWindow() { ShowMessage("window: "); scanz("%hd",&Awindow); } ChangeBetaWindow() { ShowMessage("window: "); scanz("%hd",&Bwindow); } GiveHint() { char s[40]; algbr((short)(hint>>8),(short)(hint & 0xFF),false); strcpy(s,"try "); strcat(s,mvstr1); ShowMessage(s); } ChangeSearchDepth() { ShowMessage("depth= "); scanz("%hd",&MaxSearchDepth); } SetContempt() { ShowMessage("contempt= "); scanz("%hd",&contempt); } ChangeXwindow() { ShowMessage("xwndw= "); scanz("%hd",&xwndw); } SelectLevel() { ClrScreen(); gotoXY(32,2); printz("CHESS"); gotoXY(20,4); printz(" 1. 60 moves in 5 minutes"); gotoXY(20,5); printz(" 2. 60 moves in 15 minutes"); gotoXY(20,6); printz(" 3. 60 moves in 30 minutes"); gotoXY(20,7); printz(" 4. 40 moves in 30 minutes"); gotoXY(20,8); printz(" 5. 40 moves in 60 minutes"); gotoXY(20,9); printz(" 6. 40 moves in 120 minutes"); gotoXY(20,10); printz(" 7. 40 moves in 240 minutes"); gotoXY(20,11); printz(" 8. 1 move in 15 minutes"); gotoXY(20,12); printz(" 9. 1 move in 60 minutes"); gotoXY(20,13); printz("10. 1 move in 600 minutes"); OperatorTime = 0; TCmoves = 60; TCminutes = 5; gotoXY(20,17); printz("Enter Level: "); refresh(); scanz("%ld",&Level); switch (Level) { case 1 : TCmoves = 60; TCminutes = 5; break; case 2 : TCmoves = 60; TCminutes = 15; break; case 3 : TCmoves = 60; TCminutes = 30; break; case 4 : TCmoves = 40; TCminutes = 30; break; case 5 : TCmoves = 40; TCminutes = 60; break; case 6 : TCmoves = 40; TCminutes = 120; break; case 7 : TCmoves = 40; TCminutes = 240; break; case 8 : TCmoves = 1; TCminutes = 15; break; case 9 : TCmoves = 1; TCminutes = 60; break; case 10 : TCmoves = 1; TCminutes = 600; break; } TCflag = (TCmoves > 1); SetTimeControl(); ClrScreen(); UpdateDisplay(0,0,1,0); } ShowPostnValues() { short i,r,c; ExaminePosition(); for (i = 0; i < 64; i++) { if (reverse) r = 7-row[i]; else r = row[i]; if (reverse) c = 7-column[i]; else c = column[i]; gotoXY(4+5*c,5+2*(7-r)); c1 = color[i]; c2 = otherside[c1]; PC1 = PawnCnt[c1]; PC2 = PawnCnt[c2]; atk1 = atak[c1]; atk2 = atak[c2]; if (color[i] == neutral) printz(" "); else printz("%3d ",SqValue(i,opponent)); } ScorePosition(opponent,&i); gotoXY(50,24); printz("Score= %d",i); ClrEoln(); } DoDebug() { short k,p,i,r,c,tp,tc; char s[40]; ExaminePosition(); ShowMessage("Enter piece: "); scanz("%s",s); if (s[0] == 'w') k = white; else k = black; if (s[1] == 'p') p = pawn; else if (s[1] == 'n') p = knight; else if (s[1] == 'b') p = bishop; else if (s[1] == 'r') p = rook; else if (s[1] == 'q') p = queen; else if (s[1] == 'k') p = king; else p = no_piece; for (i = 0; i < 64; i++) { if (reverse) r = 7-row[i]; else r = row[i]; if (reverse) c = 7-column[i]; else c = column[i]; gotoXY(4+5*c,5+2*(7-r)); tp = board[i]; tc = color[i]; board[i] = p; color[i] = k; c1 = k; c2 = otherside[c1]; PC1 = PawnCnt[c1]; PC2 = PawnCnt[c2]; atk1 = atak[c1]; atk2 = atak[c2]; printz("%3d ",SqValue(i,opponent)); board[i] = tp; color[i] = tc; } ScorePosition(opponent,&i); gotoXY(50,24); printz("Score= %d",i); ClrEoln(); } ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее# # Makefile for CHESS # # Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. # # This file is part of CHESS. # # CHESS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY. No author or distributor # accepts responsibility to anyone for the consequences of using it # or for whether it serves any particular purpose or works at all, # unless he says so in writing. Refer to the CHESS General Public # License for full details. # # Everyone is granted permission to copy, modify and redistribute # CHESS, but only under the conditions described in the # CHESS General Public License. A copy of this license is # supposed to have been given to you along with CHESS so you # can know your rights and responsibilities. It should be in a # file named COPYING. Among other things, the copyright notice # and this notice must be preserved on all copies. # # # gnuchess is the alpha-display version # nchess is the CHESSTOOL version # # # for gnu cc on tos - only creates the non display version but it aint that bad CFLAGS = -O -Dgcctos -traditional all : gnuchess nchess gnuchess : gnuchess.o uxdsp.o curses.o gcc $(CFLAGS) gnuchess.o uxdsp.o curses.o -o gnuchess nchess: gnuchess.o nondsp.o gcc $(CFLAGS) -o nchess gnuchess.o nondsp.o gnuchess.o : gnuchess.c gnuchess.h gcc $(CFLAGS) -c gnuchess.c -o gnuchess.o nondsp.o: nondsp.c gcc $(CFLAGS) -c nondsp.c uxdsp.o : uxdsp.c gcc $(CFLAGS) -c uxdsp.c curses.o : curses.c gcc -O -c curses.c еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее/* This file contains code for CHESS. Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. This file is part of CHESS. CHESS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. No author or distributor accepts responsibility to anyone for the consequences of using it or for whether it serves any particular purpose or works at all, unless he says so in writing. Refer to the CHESS General Public License for full details. Everyone is granted permission to copy, modify and redistribute CHESS, but only under the conditions described in the CHESS General Public License. A copy of this license is supposed to have been given to you along with CHESS so you can know your rights and responsibilities. It should be in a file named COPYING. Among other things, the copyright notice and this notice must be preserved on all copies. */ /* Header file for GNU CHESS */ #ifdef minix #define FORM_FEED "\033[H\033[J" #endif #define neutral 2 #define white 0 #define black 1 #define no_piece 0 #define pawn 1 #define knight 2 #define bishop 3 #define rook 4 #define queen 5 #define king 6 #define pxx " PNBRQK" #define qxx " pnbrqk" #define rxx "12345678" #define cxx "abcdefgh" #define check 0x0001 #define capture 0x0002 #define draw 0x0004 #define promote 0x0008 #define cstlmask 0x0010 #define epmask 0x0020 #define exact 0x0040 #define pwnthrt 0x0080 #define maxdepth 30 #define true 1 #define false 0 #ifndef HZ #define HZ 60 #endif struct leaf { short f,t,score,reply; unsigned short flags; }; struct GameRec { unsigned short gmove; short score,depth,time,piece,color; long nodes; }; struct TimeControlRec { short moves[2]; long clock[2]; }; struct BookEntry { struct BookEntry *next; unsigned short *mv; }; extern char mvstr1[5],mvstr2[5]; extern struct leaf Tree[2000],*root; extern short TrPnt[maxdepth],board[64],color[64]; extern short row[64],column[64],locn[8][8]; extern short atak[2][64],PawnCnt[2][8]; extern short castld[2],kingmoved[2]; extern short c1,c2,*atk1,*atk2,*PC1,*PC2; extern short mate,post,opponent,computer,Sdepth,Awindow,Bwindow,dither; extern long ResponseTime,ExtraTime,Level,et,et0,time0,cputimer,ft; extern long NodeCnt,evrate,ETnodes,EvalNodes,HashCnt; extern short quit,reverse,bothsides,hashflag,InChk,player,force,easy,beep,meter; extern short timeout,xwndw; extern struct GameRec GameList[240]; extern short GameCnt,Game50,epsquare,lpost,rcptr,contempt; extern short MaxSearchDepth; extern struct BookEntry *Book; extern struct TimeControlRec TimeControl; extern short TCflag,TCmoves,TCminutes,OperatorTime; extern short otherside[3]; extern short Stboard[64]; extern short Stcolor[64]; extern unsigned short hint,PrVar[maxdepth]; еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее.TH Chess GNU .SH NAME Chess \- GNU Chess .SH SYNOPSIS .B Chess [ .B arg1 arg2 ] .SH DESCRIPTION .I Chess plays a game of chess against the user or it plays against itself. .PP .I Chess has a simple alpha-numeric board display or it can be compiled for use with the CHESSTOOL program on a SUN workstation. The program gets its opening moves from the file gnuchess.book which should be located in the same directory as gnuchess. To invoke the prgram, type 'gnuchess' or type 'chesstool nchess' on a SUN workstation where 'CHESSTOOL' is installed. The 'gnuchess' command can be followed by up to 2 command line arguments. If one argument is given it determines the programs search time in seconds. If two arguments are given, they will be used to set tournament time controls with the first argument being the number of moves and the second being the total clock time in minutes. Thus, entering 'chess 60 5' will set the clocks for 5 minutes (300 seconds) for the first 60 moves. If no argument is given the program will prompt the user for level of play. For use with CHESSTOOL, see the documentation on that program. .PP Once .I Chess is invoked, the program will display the board and prompt the user for a move. To enter a move, use the notation 'e2e4' where the first letter-number pair indicates the origination square and the second letter-number pair indicates the destination square. An alternative is to use the notation 'nf3' where the first letter indicates the piece type (p,n,b,r,q,k). To castle, type the origin and stination squaaares of the king just as you would do for a regular move, or type "o-o" for kingside castling and "o-o-o" for queenside. .SH COMMANDS .PP In addition to legal moves, the following commands are available as responses. .PP .I beep -- causes the program to beep after each move. .PP .I bd -- updates the current board position on the display. .PP .I book -- turns off use of the opening library. .PP .I both -- causes the computer to play both sides of a chess game. .PP .I black -- causes the computer to take the black pieces with the move and begin searching. .PP .I level -- allows the user to set time controls such as 60 moves in 5 minutes etc. In tournament mode, the program will vary the time it takes for each move depending on the situation. If easy mode is disabled (using the 'easy' command), the program will often respond with its move immediately, saving time on its clock for use later on. .PP .I depth -- allows the user to change the search depth of the program. The maximum depth is 29 ply. Normally the depth is set to 29 and the computer terminates its search based on elapsed time rather than depth. Using the depth command allows setting depth to say 4 ply and setting response time to a large number such as 9999 seconds. The program will then search until all moves have been examined to a depth of 4 ply (with extensions up to 11 additional ply for sequences of checks and captures). .PP .I easy -- toggles easy mode (thinking on opponents time) on and off. The default is easy mode ON. If easy mode is disabled, the user must enter a 'break' or '^C' to get the programs attention before entering each move. .PP .I edit -- allows the user to set up a board position. In this mode, the '#' command will clear the board, the 'c' command will toggle piece color, and the '.' command will exit setup mode. Pieces are entered by typing a letter (p,n,b,r,q,k) for the piece followed by the coordinate. For example "pb3" would place a pawn on square b3. .PP .I force -- allows the user to enter moves for both sides. To get the program to play after a sequence of moves has been entered use the 'white' or 'black' commands. .PP .I get -- retrieves a game from disk. The program will prompt the user for a file name. .PP .I help -- displays a short description of the commands. .PP .I hint -- causes the program to supply the user with its predicted move. .PP .I list -- writes the game moves and some statistics on search depth, nodes, and time to the file 'chess.lst'. .PP .I new -- starts a new game. .PP .I post -- causes the program to display the principle variation and the score during the search. A score of 100 is equivalent to a 1 pawn advantage for the computer. .PP .I random -- causes the program to randomize its move selection slightly. .PP .I reverse -- causes the board display to be reversed. That is, the white pieces will now appear at the top of the board. .PP .I quit -- exits the game. .PP .I save -- saves a game to disk. The program will prompt the user for a file name. .PP .I switch -- causes the program to switch places with the opponent and begin searching. .PP .I undo -- undoes the last move whether it was the computer's or the human's. You may also type "remove". This is equivalent to two "undo's" (e.g. retract one move for each side). .PP .I white -- causes the computer to take the white pieces with the move and begin searching. .SH BUGS .PP Pawn promotion to pieces other than a queen is not allowed. En-Passant does not work properly with CHESSTOOOL. The transposition table may not work properly in some positions so the default is to turn this off. .fi .SH SEE ALSO .nf chesstool(6) .fi еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее# # Makefile for CHESS # # Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. # # This file is part of CHESS. # # CHESS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY. No author or distributor # accepts responsibility to anyone for the consequences of using it # or for whether it serves any particular purpose or works at all, # unless he says so in writing. Refer to the CHESS General Public # License for full details. # # Everyone is granted permission to copy, modify and redistribute # CHESS, but only under the conditions described in the # CHESS General Public License. A copy of this license is # supposed to have been given to you along with CHESS so you # can know your rights and responsibilities. It should be in a # file named COPYING. Among other things, the copyright notice # and this notice must be preserved on all copies. # # # gnuchess is the alpha-display version # nchess is the CHESSTOOL version # # CFLAGS = -O -Wunused -Dminix -traditional all : gnuchess nchess gnuchess: gnuchess.o uxdsp.o gcc $(CFLAGS) -o gnuchess gnuchess.o uxdsp.o -lcurses32 chmem +50000 gnuchess nchess: gnuchess.o nondsp.o gcc $(CFLAGS) -o nchess gnuchess.o nondsp.o chmem +50000 nchess gnuchess.o: gnuchess.c gcc $(CFLAGS) -c gnuchess.c uxdsp.o: uxdsp.c gcc $(CFLAGS) -c uxdsp.c nondsp.o: nondsp.c gcc $(CFLAGS) -c nondsp.c еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее# # Makefile for CHESS # # Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. # # This file is part of CHESS. # # CHESS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY. No author or distributor # accepts responsibility to anyone for the consequences of using it # or for whether it serves any particular purpose or works at all, # unless he says so in writing. Refer to the CHESS General Public # License for full details. # # Everyone is granted permission to copy, modify and redistribute # CHESS, but only under the conditions described in the # CHESS General Public License. A copy of this license is # supposed to have been given to you along with CHESS so you # can know your rights and responsibilities. It should be in a # file named COPYING. Among other things, the copyright notice # and this notice must be preserved on all copies. # # # gnuchess is the alpha-display version # nchess is the CHESSTOOL version # # all : gnuchess nchess gnuchess: gnuchess.o uxdsp.o gcc -o gnuchess gnuchess.o uxdsp.o -lcurses -ltermlib nchess: gnuchess.o nondsp.o gcc -o nchess gnuchess.o nondsp.o gnuchess.o: gnuchess.c gcc -c gnuchess.c uxdsp.o: uxdsp.c gcc -c uxdsp.c nondsp.o: nondsp.c gcc -DCHESSTOOL -c nondsp.c # gnuchess.c: src-catted src-catted: cat gnuchess.c1 gnuchess.c2 >gnuchess.c touch src-catted еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее# # Makefile for CHESS # # Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. # # This file is part of CHESS. # # CHESS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY. No author or distributor # accepts responsibility to anyone for the consequences of using it # or for whether it serves any particular purpose or works at all, # unless he says so in writing. Refer to the CHESS General Public # License for full details. # # Everyone is granted permission to copy, modify and redistribute # CHESS, but only under the conditions described in the # CHESS General Public License. A copy of this license is # supposed to have been given to you along with CHESS so you # can know your rights and responsibilities. It should be in a # file named COPYING. Among other things, the copyright notice # and this notice must be preserved on all copies. # # # Makefile for Megamax Laser C: # gnuchess is the curses version # nchess is the 'dumb tty' version # # all : gnuchess nchess gnuchess: gnuchess.o uxdsp.o $(CC) -o gnuchess.tos gnuchess.o uxdsp.o curses.o nchess: gnuchess.o nondsp.o $(CC) -o nchess.tos gnuchess.o nondsp.o gnuchess.o: gnuchess.c $(CC) -c gnuchess.c uxdsp.o: uxdsp.c $(CC) -c uxdsp.c nondsp.o: nondsp.c $(CC) -c nondsp.c еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее/* #[curses: simple-minded implementation of the curses package */ /* #[intro: introduction */ /* */ /* This source and resulting object may be modified, used or distributed by */ /* anyone who so desires under the following conditions : */ /* */ /* 1) This notice and the copyright notice shall not be removed or */ /* changed. */ /* 2) No credit shall be taken for this source and resulting objects */ /* 3) This source or resulting objects is not to be traded, sold or */ /* used for personal gain or profit. */ /* 4) Inclusion of this source or resulting objects in commercially */ /* available packages is forbidden without written consent of the */ /* author of this source. */ /* GNU C version, RMG 16/06/91 */ /* */ /* #]intro: */ /* #[include: include files */ #include "portab.h" #ifndef __GNUC__ #include "osbind.h" #else #include #endif #include "curses.h" #ifndef __GNUC__ /* #]include: */ /* define supervisor mode entry forgotten in osbind.h */ #define Supexec(a) xbios(38,a) #endif /* terminal states : cooked, cbreak and raw */ #define COOKED 0 #define CBREAK 1 #define RAW 2 /* define address of system-variable _conterm for kbshift return value */ #define CONTERM (*((char *)0x484)) /* #[globals: definition of global variables */ /* #[curglob: define the following variables as external in curses.h */ WINDOW *curscr ; WINDOW *stdscr ; char *Def_term = "AtariST" ; bool My_term = FALSE ; char *ttytype = "Atari ST-series computer, VT52/CURSES mode" ; int LINES = 25 ; int COLS = 80 ; int ERR = 0 ; int OK = 1 ; /* #]curglob: */ bool _doecho = FALSE ; bool _nlmap = FALSE ; bool _curini = FALSE ; BYTE _modinp = 0 ; /* set input to Un*x compatability, i.e only char's */ BYTE _csry = 0 ; BYTE _csrx = 0 ; char *cpyrid = "Copyright, R. van't Veen. All rights reserved. 1987" ; #ifndef __GNUC__ overlay "curses" /* put in separate segment */ #endif /* #]globals: */ /* #[miscel: miscellaneous curses functions */ /* #[initscr: initialize the curses package */ initscr() { WORD i,j ; WINDOW *newwin() ; if ( _curini ) { wrefresh(curscr) ; if ( cpyrid == NULL ) Pterm(-12L) ; ERR = 1 ; OK = 0 ; return ; } ; _curini = 1 ; curscr = newwin(0,0,0,0) ; if ( curscr == NULL ) { ERR = 1 ; OK = 0 ; return ; } ; stdscr = newwin(0,0,0,0) ; if ( stdscr == NULL ) { ERR = 1 ; OK = 0 ; return ; } ; Bconout(2,'\033') ; Bconout(2,'E') ; Bconout(2,'\033') ; Bconout(2,'w') ; Bconout(2,'\033') ; Bconout(2,'f') ; _csry = 0 ; _csrx = 0 ; ERR = 0 ; OK = 1 ; } /* #]initscr: */ /* #[endwin: end of curses package */ endwin() { if ( !_curini ) { ERR = 1 ; OK = 0 ; return ; } ; _curini = 0 ; delwin(stdscr) ; delwin(curscr) ; _movcur(LINES,0) ; Bconout(2,'\033') ; Bconout(2,'e') ; ERR = 1 ; OK = 0 ; } /* #]endwin: */ /* #[newwin: create a new window for the user */ WINDOW *newwin(l,c,by,bx) int l,c,bx,by ; { WINDOW *tmp ; WORD i, j, nl, nc ; char *malloc() ; tmp = ( WINDOW * ) malloc(sizeof(WINDOW)) ; if ( tmp == NULL ) { ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_curx = 0 ; tmp->_cury = 0 ; tmp->_clear = 0 ; tmp->_leave = 0 ; tmp->_scroll = 0 ; if ( l == 0 ) nl = LINES - by ; else nl = l ; if ( c == 0 ) nc = COLS - bx ; else nc = c ; if ( nl < 1 || nl > LINES || nc < 1 || nc > COLS ) { free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_maxy = nl - 1 ; tmp->_maxx = nc - 1 ; if ( nl == LINES && nc == COLS ) tmp->_flags = _FULLWIN ; else tmp->_flags = 0 ; if ( by < 0 || by >= LINES || bx < 0 || bx >= COLS ) { free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_begy = by ; tmp->_begx = bx ; tmp->_y = ( WORD ** ) malloc(sizeof(WORD *)*(tmp->_maxy+1)) ; if ( tmp->_y == NULL ) { free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_y[0] = ( WORD * ) malloc(sizeof(WORD)*(tmp->_maxy+1)*(tmp->_maxx+1)) ; if ( tmp->_y[0] == NULL ) { free(tmp->_y) ; free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; for ( i = 1 ; i <= tmp->_maxy ; i++ ) tmp->_y[i] = tmp->_y[0] + i * ( tmp->_maxx + 1 ) ; for ( i = 0 ; i <= tmp->_maxy ; i++ ) { for ( j = 0 ; j <= tmp->_maxx ; j++ ) tmp->_y[i][j] = ' ' ; } ; /* make everything changed on first update of tmp */ touchwin(tmp) ; ERR = 0 ; OK = 1 ; return(tmp) ; } /* #]newwin: */ /* #[delwin: delete a window */ delwin(w) WINDOW *w ; { if ( w == NULL ) { ERR = 1 ; OK = 0 ; return ; } ; if ( w->_flags & _SUBWIN ) free(w->_y) ; else { free(w->_y[0]) ; free(w->_y) ; } ; free(w) ; ERR = 0 ; OK = 1 ; } /* #]delwin: */ /* #[mvwin: move window */ mvwin(w,y,x) WINDOW *w ; int y,x ; { if ( y < 0 || x < 0 || ( y + w->_maxy + 1 ) > LINES || ( x + w->_maxx + 1 ) > COLS ) { ERR = 1 ; OK = 0 ; return ; } ; w->_begy = y ; w->_begx = x ; touchwin(w) ; ERR = 0 ; OK = 1 ; } /* #]mvwin: */ /* #[touchwin: touch a window */ touchwin(w) WINDOW *w ; { WORD i,j ; w->_firstch = w->_y[0] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; for ( i = 0 ; i <= w->_maxy ; i++ ) for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[i][j] = w->_y[i][j] | TOUCHED ; ERR = 0 ; OK = 1 ; } /* #]touchwin: */ /* #[subwin: create a sub-window */ WINDOW *subwin(w,l,c,by,bx) WINDOW *w ; int l,c,by,bx ; { WINDOW *tmp ; WORD i, nl, nc ; char *malloc() ; /* cannot take subwindows of curscr */ if ( w == curscr ) { ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp = ( WINDOW * ) malloc(sizeof(WINDOW)) ; if ( tmp == NULL ) { ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_curx = 0 ; tmp->_cury = 0 ; tmp->_clear = 0 ; tmp->_leave = 0 ; tmp->_scroll = 0 ; if ( l == 0 ) nl = LINES - by ; else nl = l ; if ( c == 0 ) nc = COLS - bx ; else nc = c ; if ( l < 1 || l > (w->_maxy+1) || c < 1 || c > (w->_maxx+1) ) { free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_maxy = nl - 1 ; tmp->_maxx = nc - 1 ; if ( nl == LINES && nc == COLS ) tmp->_flags = _FULLWIN | _SUBWIN ; else tmp->_flags = _SUBWIN ; if ( by < w->_begy || by >= (w->_maxy+w->_begy) || bx < w->_begx || bx >= (w->_maxx+w->_begx) ) { free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_begy = by ; tmp->_begx = bx ; tmp->_y = ( WORD ** ) malloc(sizeof(WORD *)*(tmp->_maxy+1)) ; if ( tmp->_y == NULL ) { free(tmp) ; ERR = 1 ; OK = 0 ; return(NULL) ; } ; tmp->_y[0] = w->_y[0] + ( tmp->_begy - w->_begy ) * ( w->_maxx + 2 ) + ( tmp->_maxx - w->_maxx ) ; for ( i = 1 ; i <= tmp->_maxy ; i++ ) tmp->_y[i] = tmp->_y[0] + i * ( w->_maxx + 2 ) ; /* make everything changed on first update of tmp */ touchwin(tmp) ; ERR = 0 ; OK = 1 ; return(tmp) ; } /* #]subwin: */ /* #[leaveok: tell curses where to leave the cursor after updating */ leaveok(w,f) WINDOW *w ; bool f ; { w->_leave = f ; ERR = 0 ; OK = 1 ; } /* #]leaveok: */ /* #[scrollok: tell curses it is ok to scroll the window */ scrollok(w,f) WINDOW *w ; bool f ; { w->_scroll = f ; ERR = 0 ; OK = 1 ; } /* #]scrollok: */ /* #[nl: tell curses to map CR to CR,LF */ nl() { _nlmap = 1 ; ERR = 0 ; OK = 1 ; } /* #]nl: */ /* #[nonl: tell curses not to map CR to CR,LF */ nonl() { _nlmap = 0 ; ERR = 0 ; OK = 1 ; } /* #]nonl: */ /* #[longname: return the full name of the terminal */ /* always returns the contents of ttytype in name */ longname(termbuf,name) char *termbuf, *name ; { int i ; for ( i = 0 ; ttytype[i] != '\0' ; i++ ) name[i] = ttytype[i] ; name[i] = '\0' ; } /* #]longname: */ /* #]miscel: */ /* #[output: output functions */ /* #[waddch: add a character to a window */ waddch(w,c) WINDOW *w ; char c ; { WORD i, tpos ; ERR = 0 ; OK = 1 ; if ( c >= 0x20 ) { if ( w == curscr ) { if ( ( w->_flags & _STANDOUT )) { w->_y[w->_cury][w->_curx] = c | STANDOUT | TOUCHED ; Bconout(2,'\033') ; Bconout(2,'p') ; Bconout(5,c) ; Bconout(2,'\033') ; Bconout(2,'q') ; } else { w->_y[w->_cury][w->_curx] = c | TOUCHED ; Bconout(5,c) ; } ; _csrx++ ; } else { if ( (w->_flags & _STANDOUT )) w->_y[w->_cury][w->_curx] = c | STANDOUT | TOUCHED ; else w->_y[w->_cury][w->_curx] = c | TOUCHED ; if ( w->_firstch == 0 ) { w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = w->_firstch ; } else { if ( w->_firstch > &(w->_y[w->_cury][w->_curx]) ) w->_firstch = &(w->_y[w->_cury][w->_curx]) ; else { if ( w->_lastch < &(w->_y[w->_cury][w->_curx]) ) w->_lastch = &(w->_y[w->_cury][w->_curx]) ; } ; } ; } ; wmove(w,w->_cury,w->_curx+1) ; } else if ( c == '\n' ) { wclrtoeol(w) ; if ( _nlmap ) wmove(w,w->_cury+1,0) ; else wmove(w,w->_cury+1,w->_curx) ; } else if ( c == '\r' ) { wmove(w,w->_cury,0) ; } else if ( c == '\t' ) { tpos = ( w->_curx + w->_begx ) % 8 ; tpos = ( tpos == 0 ) ? 8 : tpos ; for ( i = 0 ; i < tpos ; i++ ) waddch(w,' ') ; } else { if ( w == curscr ) { if ( ( w->_flags & _STANDOUT )) { w->_y[w->_cury][w->_curx] = c | STANDOUT | TOUCHED ; Bconout(2,'\033') ; Bconout(2,'p') ; Bconout(5,c) ; Bconout(2,'\033') ; Bconout(2,'q') ; } else { w->_y[w->_cury][w->_curx] = c | TOUCHED ; Bconout(5,c) ; } ; _csrx++ ; } else { if ( (w->_flags & _STANDOUT )) w->_y[w->_cury][w->_curx] = c | STANDOUT | TOUCHED ; else w->_y[w->_cury][w->_curx] = c | TOUCHED ; if ( w->_firstch == 0 ) { w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = w->_firstch ; } else { if ( w->_firstch > &(w->_y[w->_cury][w->_curx]) ) w->_firstch = &(w->_y[w->_cury][w->_curx]) ; else { if ( w->_lastch < &(w->_y[w->_cury][w->_curx]) ) w->_lastch = &(w->_y[w->_cury][w->_curx]) ; } ; } ; } ; wmove(w,w->_cury,w->_curx+1) ; } ; } /* #]waddch: */ /* #[waddstr: add a string of characters to a window */ waddstr(w,s) WINDOW *w ; char *s ; { WORD i ; ERR = 0 ; OK = 1 ; for ( i = 0 ; s[i] != '\0' ; i++ ) waddch(w,s[i]) ; } /* #]waddstr: */ /* #[box: draw a box around a window */ box(w,v,h) WINDOW *w ; char v,h ; { WORD i ; ERR = 0 ; OK = 1 ; for ( i = 0 ; i <= w->_maxy ; i++ ) { mvwaddch(w,i,0,v) ; mvwaddch(w,i,w->_maxx,v) ; } ; for ( i = 1 ; i < w->_maxx ; i++ ) { mvwaddch(w,0,i,h) ; mvwaddch(w,w->_maxy,i,h) ; } ; } /* #]box: */ /* #[wclear: clear a window */ wclear(w) WINDOW *w ; { ERR = 0 ; OK = 1 ; werase(w) ; clearok(w,TRUE) ; w->_curx = 0 ; w->_cury = 0 ; } /* #]wclear: */ /* #[wclrtobo: clear a window to the bottom */ wclrtobot(w) WINDOW *w ; { WORD i,j ; ERR = 0 ; OK = 1 ; for ( i = w->_curx ; i <= w->_maxx ; i++ ) w->_y[w->_cury][i] = ' ' | TOUCHED ; for ( i = w->_cury + 1 ; i <= w->_maxy ; i++ ) { for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[i][j] = ' ' | TOUCHED ; } ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'J') ; } else { if ( w->_firstch == 0 ) { w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } else { if ( w->_firstch > &(w->_y[w->_cury][w->_curx]) ) w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } ; } /* #]wclrtobo: */ /* #[wclrtoeo: clear a window to the end of the line */ wclrtoeol(w) WINDOW *w ; { WORD i ; ERR = 0 ; OK = 1 ; for ( i = w->_curx ; i <= w->_maxx ; i++ ) w->_y[w->_cury][i] = ' ' | TOUCHED ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'K') ; } else { if ( w->_firstch == 0 ) { w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = &(w->_y[w->_cury][w->_maxx]) ; } else { if ( w->_firstch > &(w->_y[w->_cury][w->_curx]) ) w->_firstch = &(w->_y[w->_cury][w->_curx]) ; if ( w->_lastch < &(w->_y[w->_cury][w->_maxx]) ) w->_lastch = &(w->_y[w->_cury][w->_maxx]) ; } ; } ; } /* #]wclrtoeo: */ /* #[wdelch: delete a character on a window */ wdelch(w) WINDOW *w ; { WORD ox, oy, i ; ERR = 0 ; OK = 1 ; ox = w->_curx ; oy = w->_cury ; for ( i = ox + 1 ; i <= w->_maxx ; i++ ) { w->_y[oy][i-1] = w->_y[oy][i] | TOUCHED ; } ; w->_y[oy][w->_maxx] = ' ' | TOUCHED ; w->_curx = ox ; w->_cury = oy ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'K') ; for ( i = w->_curx ; i <= w->_maxx ; i++ ) { Bconout(5,(w->_y[w->_cury][i] & 0xff )) ; _csrx++ ; } ; _movcur(w->_cury,w->_curx) ; } else { if ( w->_firstch == 0 ) { w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = &(w->_y[w->_cury][w->_maxx]) ; } else { if ( w->_firstch > &(w->_y[w->_cury][w->_curx]) ) w->_firstch = w->_y[w->_cury] ; if ( w->_lastch < &(w->_y[w->_cury][w->_maxx]) ) w->_lastch = &(w->_y[w->_cury][w->_maxx]) ; } ; } ; } /* #]wdelch: */ /* #[wdeletel: delete a line from a window */ wdeleteln(w) WINDOW *w ; { WORD i,j ; ERR = 0 ; OK = 1 ; for ( i = w->_cury + 1 ; i <= w->_maxy ; i++ ) { for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[i-1][j] = w->_y[i][j] | TOUCHED ; } ; for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[w->_maxy][j] = ' ' | TOUCHED ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'M') ; _csrx = 0 ; _movcur(w->_cury,w->_curx) ; } else { if ( w->_firstch == 0 ) { w->_firstch = w->_y[w->_cury] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } else { if ( w->_firstch > w->_y[w->_cury] ) w->_firstch = w->_y[w->_cury] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } ; } /* #]wdeletel: */ /* #[werase: erase a window */ werase(w) WINDOW *w ; { WORD i,j ; ERR = 0 ; OK = 1 ; for ( i = 0 ; i <= w->_maxy ; i++ ) { for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[i][j] = ' ' | TOUCHED ; } ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'E') ; _csry = 0 ; _csrx = 0 ; _movcur(curscr->_cury,curscr->_curx) ; } else { w->_firstch = w->_y[0] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } /* #]werase: */ /* #[winsch: insert a character */ winsch(w,c) WINDOW *w ; char c ; { WORD ox,oy,i ; BYTE tstr[2] ; ERR = 0 ; OK = 1 ; ox = w->_curx ; oy = w->_cury ; for ( i = w->_maxx - 1 ; i >= ox ; --i ) { w->_y[oy][i+1] = w->_y[oy][i] | TOUCHED ; } ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'K') ; for ( i = w->_curx ; i <= w->_maxx ; i++ ) { Bconout(5,(w->_y[w->_cury][i] & 0xff )) ; _csrx++ ; } ; _movcur(w->_cury,w->_curx) ; } else { if ( w->_firstch == 0 ) { w->_firstch = &(w->_y[w->_cury][w->_curx]) ; w->_lastch = &(w->_y[w->_cury][w->_maxx]) ; } else { if ( w->_firstch > &(w->_y[w->_cury][w->_curx]) ) w->_firstch = &(w->_y[w->_cury][w->_curx]) ; if ( w->_lastch < &(w->_y[w->_cury][w->_maxx]) ) w->_lastch = &(w->_y[w->_cury][w->_maxx]) ; } ; } ; mvwaddch(w,oy,ox,c) ; } /* #]winsch: */ /* #[winsertl: insert a line in a window */ winsertln(w) WINDOW *w ; { WORD ox,oy,i,j ; ERR = 0 ; OK = 1 ; for ( i = w->_maxy - 1 ; i >= w->_cury ; --i ) { for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[i+1][j] = w->_y[i][j] | TOUCHED ; } ; for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[w->_cury][j] = ' ' | TOUCHED ; if ( w == curscr ) { Bconout(2,'\033') ; Bconout(2,'L') ; _csrx = 0 ; _movcur(w->_cury,w->_curx) ; } else { if ( w->_firstch == 0 ) w->_firstch = w->_y[w->_cury] ; else { if ( w->_firstch > w->_y[w->_cury] ) w->_firstch = w->_y[w->_cury] ; } ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } /* #]winsertl: */ /* #[wmove: move the cursor of the window to a location */ wmove(w,y,x) WINDOW *w ; int y,x ; { WORD i ; ERR = 0 ; OK = 1 ; if ( x < 0 ) { w->_curx = 0 ; ERR = 1 ; OK = 0 ; } else { if ( x > w->_maxx ) { w->_curx = w->_maxx ; ERR = 1 ; OK = 0 ; } else w->_curx = x ; } ; if ( y < 0 ) { w->_cury = 0 ; ERR = 1 ; OK = 0 ; } else { if ( y > w->_maxy ) { if ( w->_scroll ) { for ( i = w->_maxy ; i < y ; i++ ) scroll(w) ; } ; w->_cury = w->_maxy ; ERR = 1 ; OK = 0 ; } else w->_cury = y ; } ; if ( w == curscr ) { _movcur(curscr->_cury,curscr->_curx) ; } ; } /* #]wmove: */ /* #[woverlay: overlay two windows. */ woverlay(v,w) WINDOW *v, *w ; { WORD i, j ; for ( i = 0 ; i <= w->_maxy && i <= v->_maxy ; i++ ) { for ( j = 0 ; j <= w->_maxx && j <= v->_maxx ; j++ ) { if ( ( v->_y[i][j] & 0xff ) == 0x20 ) w->_y[i][j] = v->_y[i][j] | TOUCHED ; } ; } ; if ( w == curscr ) wrefresh(curscr) ; else { w->_firstch = w->_y[0] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } /* #]woverlay: */ /* #[overwrit: overwrite two windows. */ overwrite(v,w) WINDOW *v, *w ; { WORD i, j ; for ( i = 0 ; i <= w->_maxy && i <= v->_maxy ; i++ ) { for ( j = 0 ; j <= w->_maxx && j <= v->_maxx ; j++ ) { w->_y[i][j] = v->_y[i][j] | TOUCHED ; } ; } ; if ( w == curscr ) wrefresh(curscr) ; else { w->_firstch = w->_y[0] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } /* #]overwrit: */ /* #[wstandou: set the standout flag for a window */ wstandout(w) WINDOW *w ; { w->_flags = w->_flags | _STANDOUT ; ERR = 0 ; OK = 1 ; } /* #]wstandou: */ /* #[wstanden: end standout mode */ wstandend(w) WINDOW *w ; { w->_flags = w->_flags & ( ~_STANDOUT) ; ERR = 0 ; OK = 1 ; } /* #]wstanden: */ /* #]output: */ /* #[input: input functions */ /* #[raw: set terminal in raw mode */ raw() { /* * raw mode means : * when getting a character from the keyboard, return everything * including keyboard shift state. */ int __sshft() ; if ( _modinp == RAW ) return ; Supexec(__sshft) ; _modinp = RAW ; } /* #]raw: */ /* #[noraw: reset terminal from raw mode into cooked mode */ noraw() { int __ushft() ; if ( _modinp != RAW ) return ; Supexec(__ushft) ; _modinp = COOKED ; } /* #]noraw: */ /* #[__sshft: set terminal to return keyboard shift state */ /* execute in supervisor mode only */ __sshft() { int ov, nv ; ov = CONTERM ; nv = ov | 0x08 ; CONTERM = nv ; } /* #]__sshft: */ /* #[__ushft: set terminal to not return keyboard shift state */ /* execute in supervisor mode only */ __ushft() { int ov, nv ; ov = CONTERM ; nv = ov & ~0x08 ; CONTERM = nv ; } /* #]__ushft: */ /* #[crmode: set terminal in cbreak mode */ /* * cbreak mode means for the atari ; * return both keyboard scan code as well as the character value. * kill the process with a process terminate -1 as soons as a control C is met * control D is also recognized to be the EOF. */ crmode() { if ( _modinp == CBREAK ) return ; if ( _modinp == RAW ) noraw() ; _modinp = CBREAK ; } /* #]crmode: */ /* #[nocrmode: reset terminal from cbreak into cooked mode */ nocrmode() { if ( _modinp != CBREAK ) return ; _modinp = COOKED ; } /* #]nocrmode: */ /* #[echo: set curses to echo characters on input */ echo() { _doecho = TRUE ; ERR = 0 ; OK = 1 ; } /* #]echo: */ /* #[noecho: set curses not to echo characters on input */ noecho() { _doecho = FALSE ; ERR = 0 ; OK = 1 ; } /* #]noecho: */ /* #[wgetch: get a character from the terminal */ /* WARNING : wgetch returns a 32-bit value, not a char although only */ /* the lowest 8 bits may actually be transmitted. */ wgetch(w) WINDOW *w ; { bool reset ; LONG retval ; reset = FALSE ; if ( _modinp == COOKED && _doecho == TRUE ) { reset = TRUE ; crmode() ; } ; Bconout(2,'\033') ; Bconout(2,'e') ; switch ( _modinp ) { case COOKED: while ( !Cconis() ) ; retval = Cnecin() ; retval = retval & 0x00ff ; /* kill process on control C */ if ( retval == 0x03 ) Pterm(-1L) ; break ; case CBREAK: while ( !Cconis() ) ; retval = Cnecin() ; /* kill process on control C */ if ( ( retval & 0x00ff ) == 0x03 ) Pterm(-1L) ; break ; case RAW: while ( !Cconis() ) ; retval = Cnecin() ; break ; } ; Bconout(2,'\033') ; Bconout(2,'f') ; if ( _doecho ) waddch(w,(char ) ( 0x00ff & retval )) ; if ( reset ) nocrmode() ; return(retval) ; } /* #]wgetch: */ /* #[wgetstr: get a string from the terminal */ wgetstr(w,s) WINDOW *w ; char *s ; { WORD ox, oy ; bool reset, end ; char c ; int i ; LONG wgetch() ; reset = FALSE ; getyx(w,oy,ox) ; if ( _modinp == COOKED && _doecho == TRUE ) { reset = TRUE ; _doecho = FALSE ; } ; i = 0 ; for ( end = FALSE ; !end ; i++ ) { wrefresh(w); switch ( _modinp ) { case COOKED: c = ( char ) wgetch(w) ; if ( c == 0x0d || c == 0x0a || c == 0x04 || c == 0 ) { s[i] = '\0' ; end = TRUE ; break ; } ; /* receive a backspace */ if ( c == 0x08 ) { if ( i != 0 ) { --i ; s[i] = 0 ; if ( reset ) { int x, y; getyx(w, y, x); mvwaddch(w,y,x-1,' '); wmove(w, y, x-1); /* mvwaddstr(w,oy,ox,s) ; */ } } i--; break; } /* receive control U or line kill */ if ( c == 0x13 ) { i = 0 ; if ( reset ) wmove(w,oy,ox) ; break ; } ; s[i] = c ; if (reset) waddch(w,c) ; break ; case CBREAK: c = ( char ) wgetch(w) ; if ( c == 0x0d || c == 0x0a || c == 0x04 || c == 0 ) { s[i] = '\0' ; end = TRUE ; break ; } ; s[i] = c ; break ; case RAW: c = ( char ) wgetch(w) ; if ( c == 0x0d || c == 0x0a || c == 0x04 || c == 0 ) { s[i] = '\0' ; end = TRUE ; break ; } ; s[i] = c ; break ; } ; } ; if ( reset ) _doecho = TRUE ; } /* #]wgetstr: */ /* #]input: */ /* #[wrefresh: refresh a window on the screen */ wrefresh(w) WINDOW *w ; { WORD i,j,k,l ; WORD c, *ptr ; ERR = 0 ; OK = 1 ; if ( w != curscr && curscr->_clear ) { Bconout(2,'\033') ; Bconout(2,'E') ; _csry = 0 ; _csrx = 0 ; for ( i = 0 ; i < LINES ; i++ ) { for ( j = 0 ; j < COLS ; j++ ) curscr->_y[i][j] = ' ' ; } ; curscr->_clear = 0 ; } ; if ( w->_clear ) { if ( ( w->_flags & _FULLWIN ) ) { Bconout(2,'\033') ; Bconout(2,'E') ; _csry = 0 ; _csrx = 0 ; for ( i = 0 ; i < LINES ; i++ ) { for ( j = 0 ; j < COLS ; j++ ) curscr->_y[i][j] = ' ' ; } ; } ; w->_firstch = w->_y[0] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; w->_clear = 0 ; } ; if ( w != curscr ) { if ( w->_firstch != 0 ) { if ( w->_flags & _SUBWIN ) { for ( i = 0 ; i <= w->_maxy ; i++ ) { ptr = w->_y[i] ; if ( ptr >= w->_firstch && ptr <= w->_lastch ) { for ( j = 0 ; j <= w->_maxx ; j++ ) { c = ptr[j] ; k = i + w->_begy ; l = j + w->_begx ; if ( ( c & TOUCHED ) && ( k >= 0 && k < LINES && l >= 0 && l < COLS ) ) { ptr[j] = c & ~TOUCHED ; if ( ( curscr->_y[k][l] & 0x01ff ) != ( c & 0x01ff ) ) { curscr->_y[k][l] = c ; _movcur(k,l) ; if ( ( c & STANDOUT ) ) { Bconout(2,'\033') ; Bconout(2,'p') ; Bconout(5,(c & 0xff)) ; Bconout(2,'\033') ; Bconout(2,'q') ; } else { Bconout(5,( c & 0xff )) ; } ; _csry = k ; _csrx = l + 1 ; } ; } ; } ; } ; } ; } else { for ( ptr = w->_firstch ; ptr <= w->_lastch ; ptr++ ) { c = *ptr ; if ( c & TOUCHED ) { k = ( WORD ) ( ptr - w->_y[0] ) ; k = k / ( w->_maxx + 1 ) ; l = ( WORD ) ( ptr - w->_y[k] ) + w->_begx ; k = k + w->_begy ; if ( k >= 0 && k < LINES && l >= 0 && l < COLS ) { *ptr = c & ~TOUCHED ; if ( ( curscr->_y[k][l] & 0x01ff ) != ( c & 0x01ff ) ) { curscr->_y[k][l] = c ; _movcur(k,l) ; if ( ( c & STANDOUT ) ) { Bconout(2,'\033') ; Bconout(2,'p') ; Bconout(5,(c & 0xff)) ; Bconout(2,'\033') ; Bconout(2,'q') ; } else { Bconout(5,( c & 0xff )) ; } ; _csry = k ; _csrx = l + 1 ; } ; } ; } ; } ; } ; w->_firstch = 0 ; w->_lastch = 0 ; if ( w->_leave ) { w->_curx = _csrx - w->_begx ; w->_cury = _csry - w->_begy ; curscr->_cury = _csry ; curscr->_curx = _csrx ; } else { curscr->_cury = w->_cury + w->_begy ; curscr->_curx = w->_curx + w->_begx ; _movcur(curscr->_cury, curscr->_curx) ; } ; } else { curscr->_cury = w->_cury + w->_begy ; curscr->_curx = w->_curx + w->_begx ; _movcur(curscr->_cury, curscr->_curx) ; } ; } else { Bconout(2,'\033') ; Bconout(2,'H') ; _csry = 0 ; _csrx = 0 ; for ( i = 0 ; i < LINES ; i++ ) { for ( j = 0 ; j < COLS ; j++ ) { c = w->_y[i][j] ; if ( ( c & STANDOUT ) ) { Bconout(2,'\033') ; Bconout(2,'p') ; Bconout(5,(c & 0xff)) ; Bconout(2,'\033') ; Bconout(2,'q') ; } else { Bconout(5,(c & 0xff)) ; } ; _csrx++ ; } ; _movcur(i+1,0) ; } ; _movcur( curscr->_cury, curscr->_curx) ; } ; } /* #]wrefresh: */ /* #[detail: detail functions of curses */ /* #[mvcur: move cursor in standard curses manner */ mvcur(ly,lx,ny,nx) int ly,lx,ny,nx ; { _movcur((WORD) ny,( WORD) nx) ; } /* #]mvcur: */ /* #[_movcur: move cursor */ _movcur(y,x) WORD y,x ; { if ( _csry == y && _csrx == x ) return ; Bconout(2,'\033') ; Bconout(2,'Y') ; Bconout(2,y+' ') ; Bconout(2,x+' ') ; _csry = y ; _csrx = x ; } /* #]_movcur: */ /* #[scroll: scroll a window upward one line */ scroll(w) WINDOW *w ; { WORD i,j ; ERR = 0 ; OK = 1 ; for ( i = 0 ; i < w->_maxy ; i++ ) for ( j = 0 ; j <= w->_maxx ; j++ ) w->_y[i][j] = w->_y[i+1][j] ; for ( i = 0 ; i <= w->_maxx ; i++ ) w->_y[w->_maxy][i] = ' ' ; if ( w == curscr ) wrefresh(curscr) ; else { w->_firstch = w->_y[0] ; w->_lastch = &(w->_y[w->_maxy][w->_maxx]) ; } ; } /* #]scroll: */ /* #]detail: */ /* #]curses: */ /* * Extra stuff added - tony */ printw(format, a1, a2, a3, a4, a5, a6, a7, a8, a9) char *format; int a1, a2, a3, a4, a5, a6, a7, a8, a9; { char lbuf[256]; sprintf(lbuf, format, a1, a2, a3, a4, a5, a6, a7, a8, a9); addstr(lbuf); } scanw(format, a1, a2, a3, a4, a5, a6, a7, a8, a9) char *format; int a1, a2, a3, a4, a5, a6, a7, a8, a9; { char lbuf[256]; echo(); getstr(lbuf); sscanf(lbuf, format, a1, a2, a3, a4, a5, a6, a7, a8, a9); } еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее/* ************************************************************************ */ /* */ /* CURSES.H include file for programs using CURSES */ /* */ /* ************************************************************************ */ /* */ /* This source and resulting object may be modified, used or distributed by */ /* anyone who so desires under the following conditions : */ /* */ /* 1) This notice and the copyright notice shall not be removed or */ /* changed. */ /* 2) No credit shall be taken for this source and resulting objects */ /* 3) This source or resulting objects is not to be traded, sold or */ /* used for personal gain or profit. */ /* 4) Inclusion of this source or resulting objects in commercially */ /* available packages is forbidden without written consent of the */ /* author of this source. */ /* */ /* ************************************************************************ */ #include "portab.h" #include "stdio.h" #define reg register #define bool BYTE #define TRUE 1 #define FALSE 0 #define _SUBWIN 01 #define _ENDLINE 02 #define _FULLWIN 04 #define _SCROLLWIN 010 #define _STANDOUT 0200 #define WINDOW struct _win_st #define TOUCHED 0x0200 #define STANDOUT 0x0100 #define addch(c) waddch(stdscr, c) #define mvaddch(y,x,c) { wmove(stdscr,y,x) ; waddch(stdscr,c) ; } #define mvwaddch(w,y,x,c) { wmove(w,y,x) ; waddch(w,c) ; } #define addstr(s) waddstr(stdscr,s) #define mvaddstr(y,x,s) { wmove(stdscr,y,x) ; waddstr(stdscr,s) ; } #define mvwaddstr(w,y,x,s) { wmove(w,y,x) ; waddstr(w,s) ; } #define clear() wclear(stdscr) #define clearok(w,f) { w->_clear = (w->_flags & _FULLWIN) ? f : w->_clear ; } #define clrtobot() wclrtobot(stdscr) #define clrtoeol() wclrtoeol(stdscr) #define delch() wdelch(stdscr) #define mvdelch(y,x) { wmove(stdscr,y,x) ; wdelch(stdscr) ; } #define mvwdelch(w,y,x) { wmove(w,y,x) ; wdelch(w) ; } #define deleteln() wdeleteln(stdscr) #define mvdeleteln(y,x) { wmove(stdscr,y,x) ; wdeleteln(stdscr) ; } #define mvwdeleteln(w,y,x) { wmove(w,y,x) ; wdeleteln(w) ; } #define erase() werase(stdscr) #define insch(c) winsch(stdscr,c) #define mvinsch(y,x,c) { wmove(stdscr,y,x) ; winsch(stdscr,c) ; } #define mvwinsch(w,y,x,c) { wmove(w,y,x) ; winsch(w,c) ; } #define insertln() winsertln(stdscr) #define mvinsertln(y,x) { wmove(stdscr,y,x) ; winsertln(stdscr) ; } #define mvwinsertln(w,y,x) { wmove(w,y,x) ; winsertln(w) ; } #define move(y,x) wmove(stdscr,y,x) #define refresh() wrefresh(stdscr) #define standout() wstandout(stdscr) #define standend() wstandend(stdscr) #define getch() wgetch(stdscr) #define mvgetch(y,x) ( wmove(stdscr,y,x) , wgetch(stdscr) ) #define mvwgetch(w,y,x) ( wmove(w,y,x) , wgetch(w) ) #define getstr(s) wgetstr(stdscr,s) #define mvgetstr(y,x,s) { wmove(stdscr,y,x) ; wgetstr(stdscr,s) ; } #define mvwgetstr(w,y,x,s) { wmove(w,y,x) ; wgetstr(w,s) ; } #define getyx(w,y,x) { y = w->_cury ; x = w->_curx ; } #define inch() (stdscr->_y[stdscr->_cury][stdscr->_curx]) #define mvinch(y,x) ( wmove(stdscr,y,x) , stdscr->_y[stdscr->_cury][stdscr->_curx]) #define mvwinch(w,y,x) ( wmove(w,y,x) , w4->_y[w->_cury][w->_curx]) #define winch(w) (w->_y[w->_cury][w->_curx]) struct _win_st { WORD _cury, _curx ; WORD _maxy, _maxx ; WORD _begy, _begx ; WORD _flags ; BYTE _clear ; BYTE _leave ; BYTE _scroll ; WORD **_y ; WORD *_firstch ; WORD *_lastch ; } ; extern WINDOW *curscr ; extern WINDOW *stdscr ; extern char *Def_term ; extern bool My_term ; extern char *ttytype ; extern int LINES ; extern int COLS ; extern int ERR ; extern int OK ; еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее/* * This file re-implements portions of the Alcyon portab.h needed * by curses. If you have a more complete portab.h that contains * the following definitions, use it. */ #define BYTE char #define WORD short int #define LONG int ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее GNU GENERAL PUBLIC LICENSE Version 1, February 1989 Copyright (C) 1989 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The license agreements of most software companies try to keep users at the mercy of those companies. By contrast, our General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. The General Public License applies to the Free Software Foundation's software and to any other program whose authors commit to using it. You can use it for your programs, too. When we speak of free software, we are referring to freedom, not price. Specifically, the General Public License is designed to make sure that you have the freedom to give away or sell copies of free software, that you receive source code or can get it if you want it that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of a such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any work containing the Program or a portion of it, either verbatim or with modifications. Each licensee is addressed as "you". 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this General Public License and to the absence of any warranty; and give any other recipients of the Program a copy of this General Public License along with the Program. You may charge a fee for the physical act of transferring a copy. 2. You may modify your copy or copies of the Program or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above, provided that you also do the following: a) cause the modified files to carry prominent notices stating that you changed the files and the date of any change; and b) cause the whole of any work that you distribute or publish, that in whole or in part contains the Program or any part thereof, either with or without modifications, to be licensed at no charge to all third parties under the terms of this General Public License (except that you may choose to grant warranty protection to some or all third parties, at your option). c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the simplest and most usual way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this General Public License. d) You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. Mere aggregation of another independent work with the Program (or its derivative) on a volume of a storage or distribution medium does not bring the other work under the scope of these terms. 3. You may copy and distribute the Program (or a portion or derivative of it, under Paragraph 2) in object code or executable form under the terms of Paragraphs 1 and 2 above provided that you also do one of the following: a) accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Paragraphs 1 and 2 above; or, b) accompany it with a written offer, valid for at least three years, to give any third party free (except for a nominal charge for the cost of distribution) a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Paragraphs 1 and 2 above; or, c) accompany it with the information you received as to where the corresponding source code may be obtained. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form alone.) Source code for a work means the preferred form of the work for making modifications to it. For an executable file, complete source code means all the source code for all modules it contains; but, as a special exception, it need not include source code for modules which are standard libraries that accompany the operating system on which the executable file runs, or for standard header files or definitions files that accompany that operating system. 4. You may not copy, modify, sublicense, distribute or transfer the Program except as expressly provided under this General Public License. Any attempt otherwise to copy, modify, sublicense, distribute or transfer the Program is void, and will automatically terminate your rights to use the Program under this License. However, parties who have received copies, or rights to use copies, from you under this General Public License will not have their licenses terminated so long as such parties remain in full compliance. 5. By copying, distributing or modifying the Program (or any work based on the Program) you indicate your acceptance of this license to do so, and all its terms and conditions. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. 7. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of the license which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the license, you may choose any version ever published by the Free Software Foundation. 8. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to humanity, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19xx name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (a program to direct compilers to make passes at assemblers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice That's all there is to it! еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее! ! Opening Library for CHESS ! ! Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. ! Copyright (c) 1987 by Stuart Cracraft and John Stanback ! ! This file is part of CHESS. ! ! CHESS is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY. No author or distributor ! accepts responsibility to anyone for the consequences of using it ! or for whether it serves any particular purpose or works at all, ! unless he says so in writing. Refer to the CHESS General Public ! License for full details. ! ! Everyone is granted permission to copy, modify and redistribute ! CHESS, but only under the conditions described in the ! CHESS General Public License. A copy of this license is ! supposed to have been given to you along with CHESS so you ! can know your rights and responsibilities. It should be in a ! file named COPYING. Among other things, the copyright notice ! and this notice must be preserved on all copies. ! ! ! ! Four Knight's Game e2e4 e7e5 g1f3 b8c6 b1c3 g8f6 f1b5 f8b4 o-o o-o d2d3 b4c3 b2c3 d7d6 c1g5 d8e7 f1e1 c6d8 d3d4 d8e6 ! Giuoco Piano e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 c2c3 g8f6 d2d4 e5d4 c3d4 c5b4 b1c3 f6e4 o-o b4c3 ! Giuoco Piano e2e4 e7e5 g1f3 b8c6 f1c4 f8c5 d2d3 g8f6 b1c3 d7d6 c1g5 h7h6 g5f6 d8f6 c3d5 f6d8 ! Two Knights Defence e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 f3g5 d7d5 e4d5 c6a5 c4b5 c7c6 d5c6 b7c6 b5e2 h7h6 ! Two Knights Defence -- Max Lange Attack e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 d2d4 e5d4 o-o f8c5 e4e5 d7d5 e5f6 d5c4 f6g7 h8g8 ! Petrov's Defence e2e4 e7e5 g1f3 g8f6 f3e5 d7d6 e5f3 f6e4 d2d4 d6d5 f1d3 f8d6 o-o o-o c2c4 c8g4 c4d5 f7f5 b1c3 b8d7 ! Petrov's Defence e2e4 e7e5 g1f3 g8f6 d2d4 e5d4 e4e5 f6e4 d1d4 d7d5 ! Vienna Game e2e4 e7e5 b1c3 g8f6 f1c4 b8c6 d2d3 f8b4 c1g5 h7h6 g5f6 b4c3 b2c3 d8f6 g1e2 d7d6 ! Vienna Game e2e4 e7e5 b1c3 f8c5 g1f3 d7d6 d2d4 e5d4 f3d4 g8f6 c1g5 h7h6 g5h4 b1c3 ! Three Knights Game e2e4 e7e5 b1c3 b8c6 g1f3 g7g6 d2d4 e5d4 c3d5 f8g7 c1g5 c6e7 f3d4 c7c6 d5c3 h7h6 ! Bishop's Opening e2e4 e7e5 f1c4 g8f6 d2d4 e5d4 g1f3 f6e4 d1d4 e4c5 o-o c5e6 f1e1 c7c6 b1c3 d7d5 c4d3 f8e7 ! Ruy Lopez -- Classical Defence e2e4 e7e5 g1f3 b8c6 f1b5 f8c5 c2c3 g8f6 d2d4 e5d4 e4e5 f6e4 o-o d7d5 ! Ruy Lopez -- Birds Defence e2e4 e7e5 g1f3 b8c6 f1b5 c6d4 b5a4 f8c5 o-o d4f3 d1f3 g8e7 d2d3 o-o c1e3 c5b6 b1c3 d7d6 ! Ruy Lopez -- Schliemann Defence e2e4 e7e5 g1f3 b8c6 f1b5 f7f5 b1c3 f5e4 c3e4 d7d5 f3e5 d5e4 e5c6 d8d5 c2c4 d5d6 c6a7 c8d7 ! Ruy Lopez -- Old Steinitz Defence e2e4 e7e5 g1f3 b8c6 f1b5 d7d6 d2d4 c8d7 b1c3 g8f6 o-o f8e7 f1e1 e5d4 f3d4 o-o d4f5 f8e8 ! Ruy Lopez -- Old Steinitz Defence e2e4 e7e5 g1f3 b8c6 f1b5 d7d6 d2d4 c8d7 b1c3 g8f6 b5c6 d7c6 d1d3 e5d4 f3d4 f8e7 c1g5 c6d7 ! Ruy Lopez -- Modern Steinitz Defence e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 d7d6 d2d4 b7b5 a4b3 c6d4 f3d4 e5d4 c2c3 d4c3 b1c3 c8b7 ! Ruy Lopez -- Open Defence e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 o-o f6e4 d2d4 b7b5 a4b3 d7d5 d4e5 c8e6 c2c3 f8c5 b1d2 o-o ! Ruy Lopez -- Open Defence e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 o-o f8e7 f1e1 b7b5 a4b3 d7d6 c2c3 o-o h2h3 c6a5 b3c2 c2c4 d2d4 d8c7 ! Ruy Lopez e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5c6 d7c6 d2d4 e5d4 d1d4 d8d4 f3d4 c8d7 c1e3 o-o-o b1d2 g8e7 ! Scotch Game e2e4 e7e5 g1f3 b8c6 d2d4 e5d4 f3d4 f8c5 c1e3 d8f6 c2c3 g8e7 b1d2 d7d6 e3c5 d6c5 ! Philidor's Defence e2e4 e7e5 g1f3 d7d6 d2d4 g8f6 b8c6 b1d2 f8c5 f1e2 o-o o-o d1e2 c7c6 ! Alekhine's Defence e2e4 g8f6 e4e5 f6d5 c2c4 d5b6 d2d4 d7d6 f2f4 d6e5 f4e5 b8c6 c1e3 c8f5 b1c3 e7e6 g1f3 f8e7 ! Alekhine's Defence e2e4 g8f6 e4e5 f6d5 d2d4 d7d6 g1f3 c8g4 f1e2 e7e6 o-o f8e7 h2h3 g4h5 c2c4 d5b6 ! Kings Gambit Accepted e2e4 e7e5 f2f4 e5f4 g1f3 d7d6 f1c4 h7h6 d2d4 g7g5 o-o f8g7 c2c3 b8c6 d1b3 d8e7 ! Ponziani's Opening e2e4 e7e5 g1f3 b8c6 c2c3 d7d5 d1a4 g8f6 f3e5 f8d6 e5c6 b7c6 d2d3 o-o c1g5 h7h6 ! Caro-Kann Defence e2e4 c7c6 d2d4 d7d5 e4d5 c6d5 c2c4 g8f6 b1c3 b8c6 c1g5 e7e6 c4c5 f8e7 f1b5 o-o g1f3 f6e4 ! Caro-Kann Defence e2e4 c7c6 d2d4 d7d5 e4e5 c8f5 f1d3 f5d3 d1d3 e7e6 b1c3 d8b6 b1d2 c6c5 d4c5 f8c5 ! Caro-Kann Defence e2e4 c7c6 b1c3 d7d5 g1f3 c8g4 h2h3 g4f3 d1f3 e7e6 d2d4 g8f6 f1d3 d5e4 c3e4 d8d4 c2c3 d4d8 ! French Defence -- Classical e2e4 e7e6 d2d4 d7d5 b1c3 g8f6 c1g5 f8e7 e4e5 f6d7 g5e7 d8e7 d1d2 o-o f2f4 c7c5 g1f3 b8c6 o-o-o c5c4 ! French Defence -- MacCutcheon e2e4 e7e6 d2d4 d7d5 b1c3 g8f6 c1g5 c8g4 e4e5 h7h6 g5d2 g4f3 g2f3 f6e4 d1g4 e8f8 h2h4 c7c5 ! French Defence -- Rubenstein e2e4 e7e6 d2d4 d7d5 b1c3 d5e4 c3e4 b8d7 g1f3 g8f6 e4f6 d7f6 f1d3 b7b6 d1e2 c8b7 c1g5 f8e7 ! French Defence -- Winawer e2e4 e7e6 d2d4 d7d5 b1c3 f8b4 e4e5 c7c5 a2a3 b4c3 b2c3 g8e7 d1g4 o-o g1f3 b8c6 f1e3 f7f5 ! French Defence -- Tarrasch e2e4 e7e6 d2d4 d7d5 b1d2 b8c6 g1f3 g8f6 e4e5 f6d7 d2b3 f7f6 f1b5 f8e7 c1f4 o-o ! Pirc Defence e2e4 d7d6 d2d4 g8f6 b1c3 g7g6 f2f4 f8g7 g1f3 o-o f1e2 c7c5 ! Sicilian Defence -- Dragon Variation e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1e2 g7g6 c1e3 f8g7 o-o o-o d4b3 c8e6 f2f4 c6a5 f4f5 e6c4 ! Sicilian Defence -- Dragon Variation e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g7g6 b1c3 f8g7 c1e3 g8f6 f1c4 o-o ! Sicilian Defence -- Boleslavsky Variation e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1e2 e7e5 d4b3 f8e7 o-o o-o c1e3 c8e6 ! Sicilian Defence -- Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o ! Sicilian Defence -- Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1e2 e7e5 d4b3 f8e7 o-o o-o f2f4 b7b5 a2a3 c8b7 ! Sicilian Defence -- Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 g2g3 e7e5 d4e2 c8e6 f1g2 b7b5 o-o b8d7 ! Sicilian Defence -- Closed e2e4 c7c5 b1c3 b8c6 g2g3 g7g6 f1g2 f8g7 d2d3 e7e6 c1e3 d7d6 g1e2 c6d4 d1d2 d8h4 o-o g8d7 ! Nimzowitsch Defence e2e4 b8c6 d2d4 d7d5 e4e5 f7f6 g1f3 c1g4 f1e2 e7e6 e5f6 g8f6 c2c3 f8d6 c1g5 d8d7 ! Queens Gambit Accepted d2d4 d7d5 c2c4 d5c4 g1f3 g8f6 e2e3 e7e6 f1c4 c7c5 o-o a7a6 d1e2 b7b5 c4d3 c5d4 e3d4 b8c6 ! Queens Gambit -- Catalan d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o f6d7 d1c2 c7c6 b1d2 b7b6 e2e4 c8b7 b2b3 a8c8 ! Queens Gambit Declined -- Orthodox d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 f8e7 e2e3 o-o g1f3 b8d7 a1c1 c7c6 f8d3 d5c4 f1c4 f6d5 ! Queens Gambit Declined -- Cambridge Springs d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 b8d7 e2e3 c7c6 g1f3 d8a5 f3d2 f8b4 d1c2 o-o g5h4 c6c5 ! Queens Gambit Declined -- Exchange Var. d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 c1g5 b8d7 c4d5 e6d5 e2e3 c7c6 f1d3 f8e7 d1c2 o-o g1e2 f8e8 ! Queens Gambit Declined -- Semi-Tarrasch d2d4 d7d5 c2c4 e7e6 b1c3 g8f6 g1f3 c7c5 c4d5 c5d4 d1d4 e6d5 e2e4 b8c6 f1b5 f6e4 ! Queens Gambit Declined -- Tarrasch d2d4 d7d5 c2c4 e7e6 b1c3 c7c5 c4d5 e6d5 g1f3 b8c6 g2g3 g8f6 f1g2 f8e7 o-o o-o ! Queens Gambit Declined -- Vienna d2d4 d7d5 c2c4 e7e6 g1f3 g8f6 f1b5 f8b4 b1c3 d5c4 e2e4 c7c5 e4e5 c5d4 d1a4 b8c6 o-o-o c1d2 ! Queens Gambit Declined -- Slav (Marshall Gambit) d2d4 d7d5 c2c4 c7c6 b1c3 e7e6 e2e4 d4e4 c3e4 f8b4 c1d2 d8d4 d2b4 d4e4 f1e2 b8a6 b4d6 b7b6 ! Queens Gambit --Slav (Krause) d2d4 d7d5 c2c4 c7c6 g1f3 g8f6 b1c3 d5c4 a2a4 c8f5 f3e5 e7e6 f2f3 f8b4 c1g5 h7h6 g5f6 d8f6 e2e4 f5h7 ! Modern Benoni Counter Gambit d2d4 g8f6 c2c4 c7c5 d4d5 e7e6 b1c3 e6d5 c4d5 d7d6 e2e4 g7g6 f1d3 f8g7 g1e2 o-o o-o a7a6 a2a4 d8c7 ! Queens Pawn Game d2d4 d7d5 g1f3 g8f6 c1f4 c7c5 e2e3 b8c6 c2c3 d8b6 d1c1 c8f5 d4c5 b6c5 b1d2 a8c8 f3d4 c6d4 e3d4 c5b6 ! Pirc-Robatsch Defence d2d4 d7d6 e2e4 g8f6 b1c3 g7g6 c1g5 f8g7 d1d2 b8d7 o-o-o e7e5 d4e5 d6e5 g1f3 h7h6 g5h4 g6g5 h4g3 d8e7 ! Pirc-Robatsch Defence d2d4 d7d6 e2e4 g8f6 b1c3 g7g6 f1c4 c7c6 d1e2 f8g7 g1f3 o-o c1g5 b7b5 c4d3 d8c7 ! Queens Indian Defence d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 g2g3 c8b7 f1g2 f8e7 o-o o-o b1c3 f6e4 d1c2 e4c3 c2c3 d7d6 c3c2 f7f5 ! Queens Indian Defence d2d4 g8f6 c2c4 e7e6 g1f3 b7b6 e2e3 c8b7 f1d3 f8e7 b1c3 d7d5 o-o o-o d1e2 b8d7 ! Nimzo-Indian Defence d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 d1c2 d7d5 a2a3 b4c3 c2c3 b8c6 g1f3 f6e4 c3b3 c6a5 b3a4 c7c6 ! Nimzo-Indian Defence (Rubenstein) d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 e2e3 o-o f1d3 d7d5 g1f3 c7c5 o-o b8c6 a2a3 b4c3 b2c3 d5c4 d3c4 d8c7 ! Nimzo-Indian Defence -- Samisch d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 a2a3 b4c3 b2c3 o-o f2f3 d7d5 c4d5 e6d5 e2e3 c8f5 g1e2 b8d7 e2g3 f5g6 ! Nimzo-Indian Defence d2d4 g8f6 c2c4 e7e6 b1c3 f8b4 c1d2 o-o e2e3 d7d5 g1f3 c7c5 a2a3 b4c3 d2c3 f6e4 a1c1 e4c3 c1c3 c5d4 ! Grunfeld Defence d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 c4d5 f6d5 e2e4 d5c3 b2c3 c7c5 f1c4 f8g7 g1e2 o-o o-o c5d4 c3d4 b8c6 ! Grunfeld Defence -- Smyslov d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 g1f3 f8g7 d1b3 d5c4 b3c4 o-o e2e4 c8g4 c1e3 f6d7 o-o-o b8c6 ! Grunfeld Defence d2d4 g8f6 c2c4 g7g6 b1c3 d7d5 c1f4 f8g7 d2d3 o-o c4d5 f6d5 c3d5 d8d5 f4c7 b8c6 ! Kings Indian Defence -- Classical d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 g1f3 o-o f1e2 e7e5 o-o b8c6 c1e3 f8e8 d4e5 d6e5 ! Kings Indian Defence -- 4 pawns attack d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 f2f4 c7c5 g1f3 o-o d4d5 e7e6 f1d3 e6d5 c4d5 d8b6 ! Kings Indian Defence -- Samisch d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 e2e4 d7d6 f2f3 o-o c1e3 e7e5 d4d5 c7c6 g1e2 c6d5 c3d5 f6d5 ! Kings Indian Defence -- Main Line d2d4 g8f6 c2c4 g7g6 g2g3 f8g7 f1g2 o-o b1c3 d7d6 g1f3 b8d7 o-o e7e5 e2e4 c7c6 h2h3 d8b6 ! Kings Indian Defence d2d4 g8f6 c2c4 g7g6 b1c3 f8g7 g1f3 o-o c1f4 d7d6 h2h3 b8d7 e2e3 c7c6 ! Dutch Defence d2d4 f7f5 g2g3 e7e6 f1g2 g8f6 g1f3 f8e7 o-o o-o c2c4 d7d6 b1c3 d8e8 d1c2 e8h5 b2b3 b8c6 c1a3 a7a5 ! English Opening c2c4 e7e5 b1c3 g8f6 g1f3 b8c6 e2e4 f8b4 d2d3 d7d6 f1e2 o-o o-o b4c3 b2c3 d8e7 ! English Opening c2c4 g8f6 b1c3 d7d5 c4d5 f6d5 e2e4 d5f4 f1c4 c8e6 c4e6 f7e6 ! English Opening c2c4 e7e5 b1c3 g8f6 g1f3 b8c6 g2g3 d7d5 c4d5 f6d5 f1g2 d5b6 o-o f8e7 d2d3 o-o c1e3 f7f5 ! Reti -- Accepted g1f3 d7d5 c2c4 d5c4 e2e3 c7c5 f1c4 e7e6 o-o g8f6 b2b3 b8c6 c1b2 a7a6 a2a4 f8e7 ! Reti -- Neo Catalan g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 f8e7 o-o o-o b2b3 c7c5 c4d5 f6d5 c1b2 b8c6 d2d4 b7b6 b1c3 d5c3 ! Reti -- Barcza g1f3 d7d5 g2g3 g8f6 f1g2 g7g6 o-o f8g7 d2d3 o-o b1d2 b8c6 e2e4 e7e5 c2c3 a7a5 f1e1 d5e4 d3e4 f6d7 ! Sicilian Najdorf e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 e4e5 d6e5 f4e5 f6d7 c3e4 h7h6 g5h4 a3a2 b1b3 b8c6 d4c6 b7c6 e4d6 f8d6 e5d6 a6a5 f1e2 a5a4 b3c3 a2a1 e2d1 a4a3 o-o a3a2 d2e3 o-o ! # Sicilian Defense col. 2f p. 176 MCO 12. (Incomplete game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 e4e5 d6e5 f4e5 f6d7 f1c4 f8b4 b1b3 a3a5 o-o o-o g5f6 d7f6 e5f6 f8d8 b3b4 a5b4 d2g5 g7g6 f1f4 b7b6 f4h4 b4f8 g1f1 a8a7 ! # Sicilian Defense col. 3g p. 176 MCO (Incomplete Game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 e4e5 d6e5 f4e5 f6d7 f1c4 a3a5 c4e6 f7e6 d4e6 d7e5 c3d5 a5d2 e1d2 e8d7 e6c7 a8a7 h1e1 e5c4 ! # Parma vs. Fischer, Havana 1965. Sicilian Defense col. 4j p. 176 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 g5f6 g7f6 f1e2 f8g7 o-o f6f5 f1d1 b8c6 d4c6 g7c3 d2e3 b7c6 b1b3 a3c5 e3c5 d6c5 b3c3 f5e4 c3c5 c8d7 c5e5 f7f5 g2g4 h8g8 g1g2 f5g4 e5e4 h7h5 g2g3 e8e7 ! # Matanovic, Sicilian Defense col. 5k p. 176 MCO (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 g5f6 g7f6 f1e2 b8c6 d4c6 b7c6 o-o a3a5 g1h1 f8e7 f4f5 e6f5 e4f5 c8f5 e2a6 a5a6 f1f5 d6d5 b1e1 a6b7 d2h6 o-o-o h6h3 b7d7 c3a4 ! # col. 6a e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 f4f5 b8c6 f5e6 f7e6 d4c6 b7c6 e4e5 d6e5 g5f6 g7f6 c3e4 f8e7 f1e2 h7h6 c2c4 f6f5 b1b3 a3a4 o-o f5e4 g1h1 c6c5 d2c3 a4c6 c3e5 h8f8 ! # col. 7d e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 a1b1 b2a3 f4f5 b8c6 f5e6 f7e6 d4c6 b7c6 e4e5 f6d5 c3d5 c6d5 f1e2 d6e5 o-o a8a7 g1h1 a3c5 c2c4 d5d4 e2h5 g7g6 h5d1 f8e7 d1a4 e8d8 f1f7 h7h6 g5h6 e5e4 ! # col. 8 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 d4b3 b8d7 g5f6 g7f6 f1e2 h7h5 o-o b2a3 a1d1 f8e7 g1h1 d7c5 e2f3 a8a7 b3c5 a3c5 ! # col. 9g; Minic-Barczay, Varna 1967 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 d4b3 b8c6 f1d3 d6d5 g5f6 g7f6 c3a4 b2a3 a4b6 d5d4 o-o a8b8 f4f5 a3b4 d2b4 f8b4 b6c8 b8c8 f5e6 f7e6 f1f6 e8e7 a1f1 c6e5 ! # col. 10i; Matulovic-Kavalek, Sousse 1967 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d1d2 b6b2 d4b3 b8c6 a1b1 b2a3 g5f6 g7f6 f1d3 f8g7 o-o o-o f1f3 g8h8 f3h3 c6e7 f4f5 e6f5 e4f5 c8f5 d3f5 e7f5 c3d5 ! # col. 11b; Joppen-Bronstein, Belgrade 1954 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d4b3 b6e3 d1e2 e3e2 f1e2 b8d7 a2a4 f8e7 o-o-o h7h6 g5h4 e6e5 f4f5 b7b6 e2f3 c8b7 ! # col. 12e; Rajkovic-Udovcic, Yugoslav Chp. 1962 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 d8b6 d4b3 b8d7 d1f3 f8e7 o-o-o b6c7 f1d3 h7h6 g5h4 g7g5 f4g5 d7e5 f3e2 f6g4 b3d4 h6g5 h4g3 c8d7 d4f3 c7c5 ! # col. 13i; Fischer-Vukovic (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 f8e7 d1f3 d8c7 o-o-o b8d7 g2g4 b7b5 g5f6 d7f6 g4g5 f6d7 a2a3 a8b8 h2h4 b5b4 a3b4 b8b4 f1h3 o-o d4e6 f7e6 h3e6 g8h8 c3d5 c7c4 e6f5 f8f5 e4f5 c8b7 h1e1 e7f8 ! # col. 14m Parma-Tatai, Athens 1968 (partial game) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 b7b5 e4e5 d6e5 f4e5 d8c7 e5f6 c7e5 f1e2 e5g5 d1d3 a8a7 c3e4 g5e5 d4f3 e5b2 o-o a7d7 d3e3 c8b7 a1b1 b2c2 f3g5 c2c6 f6g7 f8g7 ! # col. 15; slight advantage for white. e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 f2f4 h7h6 g5h4 d8b6 d1d3 b6b2 a1b1 b2a3 e4e5 f6d5 c3d5 a3d3 f1d3 e6d5 e5e6 ! # col. 16c; Fichtl-Dolezal, CSSR 1954 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 d1f3 b8d7 o-o-o d8c7 f3g3 b7b5 f1b5 a6b5 d4b5 c7b8 b5d6 f8d6 g3d6 b8d6 d1d6 h7h6 g5f6 d7f6 h1d1 c8b7 f2f3 ! # col. 17e; Vasyukov-Zukharov, USSR 1960 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 e7e6 d1d2 b8c6 o-o-o h7h6 g5h4 f6e4 d2f4 e4g5 d4c6 b7c6 f4a4 d8b6 f2f4 g5h7 f4f5 a8b8 f5e6 c8e6 f1c4 ! # col. 18g (somewhat questionable) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1g5 b8d7 f1c4 d8a5 d1d2 e7e6 o-o-o b7b5 c4b3 c8b7 h1e1 a8c8 e4e5 d7e5 d4e6 f7e6 e1e5 d6e5 g5f6 ! # col. 19m; Yanofsky-Bolbochan, Stockholm 1962 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1e2 e7e5 d4b3 f8e7 o-o o-o f2f4 b7b5 a2a3 c8b7 e2f3 b8d7 g2g3 a8c8 d1e1 d7b6 g1h1 b6c4 b3d2 d8d7 d2c4 c8c4 c1d2 d6d5 ! # col. 20p e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1e2 e7e5 d4b3 f8e7 o-o o-o c1e3 b8d7 a2a4 b7b6 d1d2 c8b7 f2f3 d8c7 f1d1 f8c8 b3c1 ! # col. 21b e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 g2g3 e7e5 d4e2 f8e7 f1g2 o-o o-o b7b5 h2h3 c8b7 c3d5 f6d5 e4d5 b8d7 a2a4 d7c5 e2c3 d8d7 a4b5 a6b5 a1a8 f8a8 ! # col. 22 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f2f4 e7e6 d1f3 d8b6 d4b3 b8c6 f1d3 f8e7 c1e3 b6c7 o-o o-o a1e1 c6b4 ! # col. 23f e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 c1e3 e7e5 d4b3 c8e6 d1d2 b8d7 f2f3 f8e7 g2g4 b7b5 g4g5 f6h5 o-o-o o-o h1g1 a8c8 c3e2 ! # col. 24k; Kotkov-Polugayevski, USSR 1959 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1c4 e7e6 o-o f8e7 c4b3 o-o f2f4 b7b5 a2a3 c8b7 f4f5 e6e5 d4e2 b8d7 e2g3 d7c5 b3d5 b7d5 e4d5 a8c8 c1g5 c5d7 g5f6 d7f6 c3e4 c8c4 ! # col. 25o; Ciocaltea-Minic, Bucharest 1966 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6 f1c4 e7e6 c4b3 b7b5 f2f4 c8b7 f4f5 e6e5 d4e2 b8d7 o-o f8e7 e2g3 a8c8 c1g5 o-o ! # col. 26e e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 o-o-o d6d5 e4d5 f6d5 d4c6 b7c6 c3d5 c6d5 d2d5 d8c7 d5a8 c8f5 a8f8 g8f8 d1d2 h7h5 f1e2 f8g8 a2a3 c7b8 ! # col. 27i; Bikhovski-Gik, Moscow 1968 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 o-o-o d8a5 c4b3 f8c8 g2g4 c6e5 h2h4 e5c4 b3c4 c8c4 d4b3 a5a6 h4h5 c4c3 b2c3 d7e6 c1b1 a8c8 e3d4 c8c4 h5g6 h7g6 ! # col. 28k e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 o-o-o d8a5 c4b3 f8c8 h2h4 c6e5 h4h5 f6h5 e3h6 e5d3 c1b1 d3b2 b1b2 g7h6 d2h6 c8c3 g2g4 h5f6 g4g5 f6h5 ! # col. 29m; Ostojic-Honfi, Monte Carlo 1968 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 o-o-o d8a5 c4b3 f8c8 c1b1 c6e5 h2h4 e5c4 b3c4 c8c4 d4b3 a5c7 h4h5 c4c3 d2c3 c7c3 b2c3 f6h5 e3d4 d7e6 h1e1 h5f6 e4e5 d6e5 d4e5 f6d5 b1b2 a8c8 ! # col. 30p; Karpov-Korchnoi, 2nd match game 1974. e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1e3 f8g7 f2f3 o-o d1d2 b8c6 f1c4 c8d7 h2h4 a8c8 c4b3 c6e5 h4h5 f6h5 o-o-o e5c4 b3c4 c8c4 g2g4 h5f6 d4e2 d8a5 e3h6 g7h6 d2h6 f8c8 d1d3 c4c5 g4g5 c5g5 d3d5 g5d5 c3d5 c8e8 e2c3 d7c6 e4e5 c6d5 e5f6 e7f6 h6h7 g8f8 h7h8 f8e7 c3d5 ! # col. 31 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 g2g3 b8c6 f1g2 c6d4 d1d4 f8g7 o-o o-o d4d3 c8e6 c3d5 f6d5 e4d5 e6f5 ! # col. 32c; Pulsen-Cortlever, Buenos Aires 1939. e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 c1g5 f8g7 d1d2 b8c6 o-o-o o-o d4b3 f8e8 f2f3 a7a6 c1b1 b7b5 h2h4 c8e6 g2g4 c6e5 ! # col. 33h e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f2f4 b8c6 d4c6 b7c6 e4e5 d6e5 d1d8 e8d8 f4e5 f6g4 c1f4 c8e6 c3e4 f8g7 e4g5 g7e5 o-o-o d8c7 g5e6 f7e6 f4e5 g4e5 d1e1 c7d6 g2g3 e5g4 f1c4 e6e5 e1e2 ! # col. 34j e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f2f4 b8c6 f1b5 d8c7 c3d5 f6d5 e4d5 a7a6 b5c6 b7c6 d4c6 c8b7 c1e3 f8g7 e3d4 g7d4 d1d4 o-o o-o b7c6 ! # col. 35l e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f2f4 b8d7 f1e2 f8g7 c1e3 o-o e2f3 d7b6 d1e2 e7e5 d4b3 f6g4 f3g4 d8h4 g2g3 h4g4 e2g4 c8g4 ! # col. 36a e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o d4b3 c8e6 f2f4 c6a5 f4f5 e6c4 b3a5 c4e2 d1e2 d8a5 g2g4 a8c8 g4g5 c8c3 g5f6 c3e3 e2e3 g7f6 c2c3 f8c8 a2a3 c8c4 a1e1 b7b5 ! # col. 37c; Domnitz-Kraidman, Tel Aviv 1964 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o d4b3 c8e6 f2f4 d8c8 d1e1 f6g4 e2g4 e6g4 f4f5 g6f5 h2h3 g4h3 g2h3 f5e4 e1h4 f7f5 g1h1 f8f7 f1g1 c6e5 c3d5 c8d7 b3d4 e5g6 g1g6 h7g6 a1g1 e7e5 g1g6 d7d8 e3g5 d8a5 d5f6 g8f8 d4e6 ! # col. 38f; Unzicker-Geller, W. Germany-USSR 1960 (drawn) e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o d1d2 f6g4 e2g4 c8g4 f2f4 c6d4 e3d4 e7e5 d4e3 e5f4 f1f4 g4e6 f4f2 g7e5 e3d4 a8c8 a1d1 d8a5 a2a3 c8c4 c3e2 a5d2 d1d2 ! # col. 39 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o f2f4 d8b6 d1d3 f6g4 c3d5 g7d4 e2g4 d4e3 d3e3 b6b2 g4c8 a8c8 a1b1 b2a2 b1b7 e7e6 ! # col. 40h e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 o-o o-o f2f4 d8b6 e4e5 d6e5 f4e5 c6e5 d4f5 b6b2 f5e7 g8h8 e3d4 b2b4 d4e5 b4e7 d1d4 f6e8 e5g7 e8g7 e2d3 c8e6 ! # col. 41b; Smyslov-Botvinnik, match 1958 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 h2h4 h7h5 f2f3 o-o d1d2 d6d5 d4c6 b7c6 e4e5 f6e8 f3f4 f7f6 o-o-o f6e5 f4e5 g7e5 g2g4 c8g4 e2g4 h5g4 h4h5 g6g5 ! # col. 42d; Van den Burg-Rajkovic, Orebro 1966 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 d4b3 o-o f2f4 c6a5 g2g4 b7b6 g4g5 f6d7 o-o c8b7 e2d3 a8c8 b3a5 b6a5 d1e1 d7c5 f4f5 g7e5 e1h4 e7e6 f5f6 h7h5 d3e2 g8h7 e2h5 f8h8 ! # col. 43f e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 c1e3 b8c6 d4b3 o-o f2f4 c6a5 g2g4 c8e6 g4g5 f6d7 e3d4 f7f6 h2h4 f6g5 d4g7 g8g7 b3d4 e6g8 f4f5 d8b6 ! # col. 44 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 o-o b8c6 d4b3 o-o f2f4 b7b5 e2f3 b5b4 c3d5 f6d5 e4d5 c6a5 b3a5 d8a5 f1e1 f8e8 ! # col. 45i; Smyslov-Korchnoi, Moscow 1960 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6 f1e2 f8g7 d4b3 b8c6 g2g4 b7b6 f2f4 c8b7 e2f3 o-o h2h4 a7a5 a2a4 c6b4 h4h5 d6d5 e4e5 f6g4 b3d4 g4h6 h5g6 f7g6 d4e6 d8d7 e6f8 a8f8 c3b5 d5d4 ! # col. 46 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 f2f3 e7e5 f1b5 c8d7 b5d7 b8d7 d4f5 d6d5 e4d5 d8a5 b1c3 d7b6 ! # col. 47h; Schweber-Najdorf, Buenos Aires 1970 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 d1d4 b8c6 f1b5 c8d7 b5c6 d7c6 c2c4 g8f6 b1c3 e7e6 c1g5 f8e7 o-o o-o f1e1 h7h6 g5h4 a7a6 a1d1 d8a5 d4d2 a5b6 f3d4 a8c8 e1e3 f8e8 ! # col. 48i e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 d1d4 a7a6 c1e3 g8f6 b1c3 b8c6 d4b6 d8b6 e3b6 g7g6 o-o-o f8h6 c1b1 o-o f3d4 c8d7 f2f3 c6e5 d4b3 f8c8 b3a5 d7c6 c3d5 c6d5 e4d5 f6d7 b6d4 b7b6 ! # col. 49m; Fischer-Korchnoi, Buenos-Aires 1960 e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 c2c3 d4c3 b1c3 b8c6 f1c4 e7e6 o-o a7a6 d1e2 g8f6 f1d1 d8c7 c1g5 f8e7 a1c1 o-o c4b3 h7h6 g5f4 e6e5 f4e3 c7d8 c3d5 f6d5 b3d5 c8d7 ! # col. 50 e2e4 c7c5 g1f3 d7d6 d2d4 g8f6 d4c5 f6e4 c5d6 e7e6 d1d3 e4d6 b1c3 b8c6 c1f4 f7f6 o-o-o e6e5 c3b5 ! # col. 51c; Pfeiffer-Kottnauer, Helsinki 1952 e2e4 c7c5 g1f3 d7d6 c2c3 g8f6 f1d3 b8c6 d3c2 c8g4 h2h3 g4h5 d2d3 d6d5 d1e2 e7e6 b1d2 f8e7 d2f1 d8a5 ! # col. 52d; Brasket-Evans, U.S. Open Chp. 1960 e2e4 c7c5 g1f3 d7d6 c2c3 g8f6 d2d3 g7g6 g2g3 f8g7 b1d2 o-o f1g2 e7e5 o-o b8c6 a2a4 h7h6 d2b1 d8a5 ! # col. 53h; Ciocaltea-Fischer, Varna 1962 e2e4 c7c5 g1f3 d7d6 g2g3 g7g6 f1g2 f8g7 o-o b8c6 c2c3 e7e5 d2d3 g8e7 f3h4 o-o f2f4 e5f4 g3f4 f7f5 b1d2 g8h8 d2f3 ! # col. 54k; Tarjan-Mednis, U.S. Chp. 1973 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 e7e6 f1e2 g7g6 d4b3 ! e2e4 c7c5 g1f3 d7d6 b1c3 g8f6 e4e5 d6e5 f3e5 a7a6 f1e2 e7e6 o-o d8c7 e5c4 b7b5 c4e3 f8d6 h2h3 b8c6 a2a4 b5b4 c3b1 c8b7 d2d3 c6d4 b1d2 o-o d2f3 d4e2 d1e2 f8e8 e3c4 e6e5 f3g5 e5e4 c4d6 c7d6 g5e4 f6e4 d3e4 b7e4 c1e3 d6c6 ! # col. 55o; Medina-Pomar, Santander 1947 e2e4 c7c5 g1f3 d7d6 b2b4 c5b4 d2d4 g8f6 f1d3 d6d5 b1d2 d5e4 d2e4 b8d7 e4g5 d8c7 c2c4 h7h6 g5h3 g7g5 h3g1 f8g7 g1e2 e7e5 e2g3 e5e4 d1e2 o-o ! # col. 56e; del Corral-Benko, Mallorca 1968 e2e4 c7c5 g1f3 d7d6 f1b5 c8d7 b5d7 d8d7 o-o b8c6 f1e1 g8f6 c2c3 e7e6 d2d3 f8e7 a2a4 o-o b1d2 d7c7 ! # col. 57g; Radovich-Lombardy, Leipzig 1960 e2e4 c7c5 g1f3 d7d6 f1b5 b8c6 o-o a7a6 b5c6 b7c6 d2d4 c5d4 d1d4 e7e5 d4d3 f7f6 c2c4 c8e6 b1c3 d8c7 ! # col. 58j; Gurgenidze-Osnos, Alma Ata 1969 e2e4 c7c5 g1f3 b8c6 f1b5 e7e6 b1c3 g8e7 o-o a7a6 b5c6 e7c6 d2d4 c5d4 f3d4 d7d6 d4c6 b7c6 d1g4 g7g6 e4e5 d6d5 c1g5 f8e7 ! # col. 59m e2e4 c7c5 g1f3 b8c6 f1b5 g7g6 o-o f8g7 c2c3 g8f6 f1e1 o-o d2d4 c5d4 c3d4 d7d5 e4e5 f6e4 b1c3 e4c3 b2c3 c6a5 c1g5 c8f5 f3d2 f8e8 ! # col. 60o e2e4 c7c5 g1f3 b8c6 f1b5 g7g6 o-o f8g7 f1e1 e7e5 f1e1 o-o d2d4 c5d4 c3d4 d7d5 e4e5 f6e4 b1c3 e4c3 b2c3 c6a5 c1g5 c8f5 f3d2 f8e8 ! # col. 61c; Barczay-Szilagyi, Hungarian Chp. 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 g5f6 g7f6 d4b3 h8g8 g2g3 f6f5 d1d2 f8g7 e4f5 d7f5 f1g2 d8d7 o-o g7c3 b2c3 f5h3 g2h3 d7h3 ! # col. 62e e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d4b3 h7h6 g5h4 a8c8 f1e2 g7g5 h4g3 h6h5 h2h4 g5g4 g3f4 c6e5 d1d4 e5g6 f4g5 f8g7 o-o ! # col. 63g; Matulovic-Masic, Sombor 1968 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 f2f4 d8b6 d4b3 f6g4 d1e2 c6d4 c3d5 d4e2 d5b6 a7b6 e1e2 h7h6 g5h4 g7g5 h4g3 g5f4 g3f4 f8g7 c2c3 d7c6 ! # col. 64j; Liberzo-Stein, USSR Chp. 1969-70. Complete game (draw). e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d3 c6d4 d3d4 d8a5 f2f4 e7e5 d4d3 f8e7 o-o-o d7c6 c1b1 e5f4 g5f4 o-o f1e2 f8e8 e2f3 e7f8 c3d5 f6d7 d3d2 a5d2 d1d2 a8c8 h1d1 d7e5 b2b3 ! # col. 65m; Bronstein-Stein, USSR 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d3 c6d4 d3d4 d8a5 f1e2 e7e5 d4d3 a5c7 e2g4 f8e7 g5f6 e7f6 o-o-o f6e7 c3b5 d7b5 d3b5 c7c6 b5d5 c6d5 d1d5 ! # col. 66b; Benko-R. Byrne, US Open Chp. 1968 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 g5d2 a7a6 f1c4 a5c5 d4c5 c8c5 c4b3 g7g6 d2e3 c5c8 e3d4 f8g7 c3d5 f6h5 d4g7 h5g7 e4e5 c8c6 d5b4 c6b6 ! # col. 66b alternate; Polgar-Nagy, Hungarian Chp. 1972 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 g5d2 e7e5 d4d3 a7a6 c1b1 h7h6 f2f3 a5c7 g2g3 f8e7 h2h4 b7b5 ! # col. 67c; Suetin-Gheorghiu, Hastings 1967/8. Draw. e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 g5e3 a7a6 f2f3 e7e6 d4b6 a5b6 e3b6 d7c6 f1c4 c6e4 c4e6 f7e6 c3e4 f6e4 f3e4 f8e7 h1f1 e7g5 c1b1 e8e7 c2c3 h8f8 b1c2 f8f1 d1f1 c8f8 ! # col. 68d e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 f2f4 e7e6 e4e5 d6e5 f4e5 c8c3 g5d2 a5a2 d2c3 g7g6 ! # col. 69fA1; Janosevic-Larsen, Belgrade 1964 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 d8a5 f2f4 c8c3 b2c3 e7e5 d4b4 a5b4 c3b4 f6e4 f1c4 b7b5 c4d5 e4c3 f4e5 h7h6 g5h4 g7g5 h4g3 c3e2 c1b2 e2g3 h2g3 f8g7 ! # col. 70g; Bednarski-Simagin, Polanica Zdroj 1968 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 c8d7 d1d2 a8c8 o-o-o c6d4 d2d4 c8c3 d4c3 f6e4 c3e3 e4g5 e3g5 d8b6 f1c4 e7e6 g5g3 g7g6 c4b3 f8e7 h2h4 h7h5 h1e1 b6b4 g3e3 a7a5 e3d4 ! # col. 71d e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o c6d4 d2d4 o-o f2f4 h7h6 g5h4 d8a5 f1c4 e6e5 f4e5 d6e5 d4d3 a5c5 h4f6 e7f6 ! # col. 72g e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o c6d4 d2d4 o-o f2f4 d8a5 f1c4 c8d7 c4b3 d7c6 h1f1 b7b5 g5f6 e7f6 d4d6 f6c3 d6c6 a8c8 c6d7 c8d8 d7e7 c3d2 c1b1 d2f4 d1d8 a5d8 ! # col. 73i e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o d4b3 d8b6 f2f3 a7a6 g2g4 f8d8 g5e3 b6c7 h2h4 b7b5 g4g5 f6d7 g5g6 f7g6 h4h5 g6h5 h1h5 d7f6 h5g5 c6e5 d2g2 e7f8 f3f4 e5c4 f1c4 b5c4 b3d4 a8b8 d1g1 b8b7 ! # col. 74; Tal-Larsen, match 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o d4b3 a7a6 g5f6 g7f6 f1e2 g8h8 e2h5 c8d7 f2f4 b7b5 c1b1 ! # col. 75k e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o d4b5 d8a5 g5f6 e7f6 b5d6 f8d8 f2f4 e6e5 d2d5 a5c7 f4f5 c6d4 d6b5 c7a5 d5c4 c8f5 b2b4 a5a6 ! # col. 76b; Spasski-Larsen, Santa Monica 1966 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o f2f4 h7h6 g5h4 e6e5 d4f5 c8f5 e4f5 d8a5 c1b1 a8d8 h4f6 e7f6 c3d5 a5d2 d5f6 g7f6 d1d2 e5f4 ! # col. 77e; Kujpers-Minev, Halle 1967 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 f8e7 o-o-o o-o f2f4 d6d5 e4e5 f6d7 h2h4 d7b6 d2e3 c8d7 g5e7 d8e7 h4h5 c6a5 d4b3 a5c4 e3d4 f8c8 c1b1 a7a5 f4f5 a5a4 f5f6 e7f8 h1h3 c4b2 b1b2 b6c4 f1c4 c8c4 d4d2 ! # col. 78h e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 a7a6 o-o-o c8d7 f2f4 h7h6 g5h4 f6e4 d2e1 e4f6 d4f5 d8a5 f5d6 f8d6 d1d6 o-o-o d6d1 e6e5 f1c4 e5f4 c3e4 d7e6 c4e6 f7e6 e4d6 c8b8 e1e6 h8f8 ! # col. 79j; O'Kelly-Simagin corr. 1964 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 a7a6 o-o-o h7h6 g5h4 f6e4 d2f4 e4g5 d4c6 b7c6 f4a4 d8b6 f2f4 g5h7 f4f5 f8e7 c3e4 a8b8 a4a3 b6b5 ! # col. 80k; Di Camillo-R. Byrne, US Open Chp. 1958 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d2 h7h6 g5f6 g7f6 o-o-o a7a6 f2f4 c8d7 f1e2 h6h5 c1b1 d8b6 d4b3 o-o-o h1f1 f8e7 c3a4 b6a7 c2c4 c6d4 ! # col. 81b e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d4c6 b7c6 e4e5 d6e5 d1f3 f8e7 f3c6 c8d7 c6f3 e5e4 c3e4 f6e4 g5e7 d8a5 ! # col. 82e e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1g5 e7e6 d1d3 f8e7 a1d1 o-o f1e2 c8d7 o-o c6d4 d3d4 d7c6 g1h1 d8a5 f2f4 f8e8 ! # col. 83 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 h2h3 g7g6 c1e3 f8g7 d1d2 o-o o-o-o c6d4 e3d4 d8a5 c1b1 e7e5 d4e3 c8e6 ! # BAD! -- col. 84i; Karaklajic-Taimanov, Yugoslavia-USSR, match 1956 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 c1e3 f6g4 f1b5 g4e3 f2e3 c8d7 o-o e7e6 5c6 b7c6 e4e5 f8e7 d1h5 o-o e5d6 e7d6 c3e4 d6e7 a1d1 d8c7 d4b3 h7h6 ! # col. 85 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 d4e2 e7e6 g2g3 d6d5 e4d5 f6d5 f1g2 d5c3 d1d8 e8d8 e2c3 c8d7 c1d2 f8e7 ! # col. 86c; Carcia-Pomar, Havana 1969 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e5 d4e2 c8e6 c4e6 f7e6 o-o f8e7 f2f4 o-o e2g3 e5f4 f1f4 d8b6 g1h1 a8d8 b2b3 d6d5 e4d5 f6d5 f4f8 e7f8 c3d5 d8d5 d1e1 c6d4 c1e3 f8c5 ! # col. 87 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 d8b6 d4b3 e7e6 o-o f8e7 c1e3 b6c7 f2f4 o-o c4d3 a7a6 d1f3 ! # col. 88 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4e7e6 c1e3 d888c7 d1e2 a7a6 c4b3 c6a5 g2g4 b7b5 g4g5 f6d7 o-o-o d7c5 ! # col. 89mA; Spasjevic-Ostojic, Belgrade 1966 (draw) e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e6 c1e3 f8e7 d1e2 a7a6 o-o-o o-o c4b3 d8c7 g2g4 c6d4 d1d4 e6e5 d4c4 c7d8 g4g5 f6e8 h1g1 c8d7 c3d5 d7b5 e3b6 d8d7 e2g4 e7d8 g4d7 b5d7 c4c3 d7e6 b6d8 a8d8 d5e3 d8d7 b3a4 d7c7 ! # col. 90o; Bogdanovic-Shamkovich, Sarajevo 1963 e2e4 c7c5 g1f3 b8c6 d2d4 c5d4 f3d4 g8f6 b1c3 d7d6 f1c4 e7e6 c1e3 f8e7 d1e2 o-o o-o-o c6d4 e3d4 d8a5 e4e5 d6e5 d4e5 b7b6 c3b5 c8a6 e5c3 a5a4 d1d4 a6b5 c4b5 a4a2 h1d1 f8d8 d4a4 d8d1 e2d1 a2d5 d1d5 f6d5 c3d4 e7g5 c1b1 h7h5 b5c6 a8d8 a4a7 d5b4 c6d7 b4c6 ! # Queen's Catalan, col. 1c; Kramer-Fichtl, Varna Olympics 1962 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 b1c3 c7c6 b2b3 b7b6 c1b2 c8b7 d1c2 a8c8 a1d1 d8c7 e2e4 d5e4 c3e4 f6e4 c2e4 c6c5 d4d5 e7f6 e4c2 e6d5 c4d5 f6b2 c2b2 c8d8 ! # col. 2f d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 b1c3 d5c4 e2e4 c7c6 a2a4 a7a5 d1e2 d7b6 f1d1 e7b4 f3e5 d8e7 c1e3 c8d7 e5c4 b6c4 e2c4 e6e5 d4e5 f6g4 ! # col. 3i; Geller-Medina, Beverwijk 1965 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 d1c2 b7b6 c4d5 f6d5 b1c3 c8b7 c3d5 b7d5 e2e4 d5b7 f1d1 c7c5 d4d5 e6d5 e4d5 e7f6 h2h4 h7h6 ! # col. 4k; Geller-Bisguier, Bled 1961 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 d1c2 c7c6 b2b3 b7b6 c1b2 c8b7 b1c3 a8c8 a1d1 b6b5 c4c5 b5b4 c3b1 f6e4 f3e1 f7f5 e1d3 a7a5 d3f4 f8f6 f2f3 e4g5 ! # col. 5m; Benko-Pachman, Budapest 1948 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o b8d7 d1c2 c7c6 b1d2 b7b6 e2e4 c8b7 b2b3 a8c8 f1d1 d8c7 c1b2 f8d8 a1c1 c7b8 c2b1 a7a5 f3e5 b8a8 ! # col. 6 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 f8e7 f1g2 o-o o-o c7c6 b1c3 b7b6 f3e5 a7a5 d1c2 c8a6 f1d1 b6b5 ! # col. 7d; Evans-Poschel, US Jr. Chp. 1947 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 c7c5 c4d5 f6d5 f1g2 c5d4 o-o f8c5 f3d4 o-o a2a3 b8c6 d4c6 b7c6 b2b4 c5e7 c1b2 e7f6 d1c2 f6b2 c2b2 a7a5 ! # col. 8g; O'Kelly-Euwe, New York 1951 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 d5c4 f1g2 c7c5 o-o b8c6 d1a4 f6d7 d4c5 f8c5 a4c4 o-o b1c3 a7a6 c3e4 c5e7 c1e3 d7b6 c4b3 b6d5 f1d1 d8c7 ! # col. 9 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 d5c4 f1g2 b7b5 a2a4 c7c6 o-o c8b7 f3e5 d8c8 b2b3 c4b3 d1b3 b5b4 a4a5 f6d7 ! # col. 10l; Keres-Korchnoi, Curacao 1962 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 g1f3 d5c4 d1a4 b8d7 f1g2 a7a6 a4c4 c7c5 d4c5 f8c5 o-o b7b5 c4h4 c8b7 b1d2 c5e7 d2b3 a8c8 h4d4 o-o c1d2 d7c5 ! # col. -- Accelerated Catalan d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 b8d7 b1d2 c7c6 a4c4 e6e5 g1f3 d7b6 c4d3 e5d4 f3d4 f8e7 o-o o-o ! # col. 12e; Muller-Ratzek, Vienna 1951 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 c8d7 a4c4 d7c6 g1f3 c6d5 c4d3 c7c5 b1c3 d5c6 o-o b8d7 f1d1 d8b6 e2e4 c5d4 f3d4 f8c5 d4c6 c5f2 g1f1 b7c6 c3a4 b6a5 f1f2 a5a4 d3d6 ! # col. 13f; Smyslov-Kere, USSR Chp. 1948 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 c8d7 a4c4 d7c6 g1f3 b8d7 b1c3 d7b6 c4d3 f8b4 o-o o-o f1d1 h7h6 c1d2 d8e7 a2a3 b4c3 d3c3 f8d8 ! # col. 14g d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 b1c3 d5c4 d1a4 b8c6 f1g2 c8d7 a4c4 c6b4 c4b3 c7c5 g1f3 c5d4 f3d4 e6e5 d4f3 d7e6 b3a4 e6d7 ! # col. 15; Stoltz-Vidmar, Groningen 1946 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 b1c3 f8e7 f1g2 o-o g1f3 d5c4 d1a4 a7a6 a4c4 b7b5 c4d3 c8b7 ! # col. 16 d2d4 d7d5 c2c4 e7e6 g2g3 g8f6 b1d2 c7c5 d4c5 f8c5 f1g2 b8c6 g1f3 o-o o-o a7a5 c4d5 e6d5 d2b3 c5b6 ! # col. 17d; Mikenas-Aronin, USSR Chp. 1963 d2d4 d7d5 c2c4 e7e6 g2g3 c7c5 c4d5 e6d5 g1f3 b8c6 f1g2 g8f6 o-o f8e7 d4c5 e7c5 b1d2 o-o d2b3 c5b6 b3d4 f8e8 b2b3 c6d4 f3d4 b6d4 d1d4 e8e2 ! # col. 18e d2d4 d7d5 c2c4 e7e6 g2g3 d5c4 d1a4 c8d7 a4c4 c7c5 d4c5 d7c6 g1f3 b8d7 c1e3 g8f6 f1g2 d8c7 o-o c6d5 c4a4 f8c5 e3c5 c7c5 b1c3 d5c6 ! # col. 19 d2d4 d7d5 c2c4 e7e6 g2g3 f8b4 c1d2 b4d2 d1d2 g8f6 g1f3 o-o f1g2 d8e7 o-o b8c6 f1c1 ! # col. 20 d2d4 d7d5 c2c4 e7e6 g2g3 f8b4 c1d2 b4e7 f1g2 g8f6 g1f3 o-o d1b3 b7b6 c4d5 e6d5 b1c3 c8b7 o-o ! # col. 21 d2d4 g8f6 c2c4 e7e6 g2g3 e6e5 g1f3 e5d4 f3d4 d7d5 f1g2 d5c4 d1a4 c7c6 a4c4 f8e7 o-o o-o f1d1 ! # col. 22 d2d4 g8f6 c2c4 e7e6 g2g3 c7c5 g1f3 c5d4 f3d4 d7d5 f1g2 e6e5 d4f3 d5d4 o-o b8c6 e2e3 f8e7 e3d4 e5d4 ! # col. 23g d2d4 g8f6 c2c4 e7e6 g2g3 c7c5 g1f3 c5d4 f3d4 b8c6 f1g2 d8b6 d4c2 f8c5 e2e3 o-o b1c3 b6a6 d1d2 f8d8 a2a3 d7d5 b2b4 d5d4 c3e4 ! # col. 24j; Smyslov-Petrosian, Moscow 1967 d2d4 g8f6 c2c4 e7e6 g2g3 f8b4 b1d2 c7c5 d4c5 b4c5 f1g2 b8c6 g1f3 b7b6 o-o c8b7 a2a3 o-o b2b4 c5e7 c1b2 a8c8 d1b1 ! # col. 25 d2d4 g8f6 c2c4 e7e6 g2g3 f8b4 c1d2 b4d2 d1d2 f6e4 d2c2 f7f5 f2f3 e4f6 e2e4 f5e4 f3e4 e6e5 ! # Alternate openings leading to the Catalan, line C g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 d2d4 ! # line D c2c4 g8f6 d2d4 e7e6 g2g3 d7d5 ! # line E d2d4 g8f6 c2c4 e7e6 g2g3 d7d5 ! # The Reti Opening, col. 1c; Muller-Lilenthal, Budapest 1933 g1f3 d7d5 c2c4 c7c6 b2b3 g8f6 g2g3 c8f5 c1b2 e7e6 f1g2 b8d7 o-o f8d6 d2d3 o-o b1c3 d8e7 f1e1 e6e5 c4d5 c6d5 e2e4 d5e4 d3e4 f5g6 ! # col. 2g; Bilek-Geller, Sousse 1967 g1f3 d7d5 c2c4 c7c6 b2b3 g8f6 g2g3 c8g4 f1g2 e7e6 c1b2 b8d7 o-o f8e7 d2d3 o-o b1d2 a7a5 a2a3 d8b6 d1c2 h7h6 b2c3 f8c8 f1e1 b6d8 e2e4 d8f8 ! # col. 3k; Botvinnik-Fine, Nottingham 1936 g1f3 d7d5 c2c4 d5c4 b1a3 c7c5 a3c4 b8c6 g2g3 e7e5 f1g2 f7f6 b2b3 g8e7 c1b2 e7d5 o-o f8e7 f3h4 o-o d1b1 f8f7 h4f5 c8e6 f2f4 e5f4 g3f4 d5b6 g2e4 e6c4 ! # col. 4n; Katetov-Alekhin, Prague 1943 g1f3 d7d5 c2c4 d5d4 e2e3 b8c6 e3d4 c6d4 f3d4 d8d4 b1c3 e7e5 d2d3 f8c5 c1e3 d4d6 c3b5 d6e7 e3c5 e7c5 d3d4 e5d4 d1d4 c5d4 b5d4 c8g4 ! # col. 5o g1f3 d7d5 c2c4 d5d4 e2e3 c7c5 e3d4 c5d4 g2g3 b8c6 f1g2 g7g6 d2d3 f8g7 o-o e7e5 f1e1 f7f6 b2b4 c6b4 d1a4 b4c6 f3d4 d8d4 g2c6 c8d7 ! # col. 6 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 f8e7 o-o o-o b2b3 c7c5 c4d5 f6d5 c1b2 b8c6 d2d4 d5b4 a2a3 b4a6 d4c5 d8d1 ! # col. 7 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 f8e7 b1c3 o-o b2b3 c7c5 c1b2 b8c6 c4d5 e6d5 a1c1 c8e6 o-o a8c8 d2d4 f8e8 ! # col. 8g; Kashdan-Horowitz, New York 1931 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 b8d7 b2b3 c7c6 o-o f8d6 c1b2 o-o b1c3 b7b6 d2d3 c8b7 e2e4 d5e4 d3e4 d8c7 d1e2 f8d8 f1d1 ! # col. 9h; Abroshin-Krykov corr. 1960 g1f3 d7d5 c2c4 e7e6 g2g3 g8f6 f1g2 d5c4 d1a4 c8d7 a4c4 d7c6 o-o c6d5 c4a4 d8d7 a4c2 b8c6 b1c3 d5f3 g2f3 c6d4 c2d3 c7c6 ! # col. 10m; Teti-Tartakover, Semmering 1926 g1f3 d7d5 c2c4 e7e6 g2g3 d5c4 d1a4 c8d7 a4c4 c7c5 f3e5 b8c6 e5d7 d8d7 f1g2 g8f6 d2d3 f8e7 o-o c6d4 b1c3 a8d8 a2a4 f6d5 ! # Barcza System, col. 11 g1f3 d7d5 g2g3 g8f6 f1g2 c8f5 o-o c7c6 c2c4 d5c4 b1a3 e7e5 a3c4 e5e4 f3e1 f8c5 d2d3 o-o c1e3 b8d7 ! # col. 12d; Benko-Petrosian, Curacao 1962 g1f3 d7d5 g2g3 g8f6 f1g2 c8f5 o-o c7c6 d2d3 b8d7 b1d2 h7h6 d1e1 e7e6 e2e4 f5h7 e1e2 f8e7 e4e5 f6g8 d2b3 e7f8 c2c4 g8e7 b3d4 e7f5 d4f5 h7f5 c4d5 c6d5 d3d4 a7a5 c1e3 f8e7 f1c1 o-o ! # col. 13f; Bronstein-O'Kelly, Beverwijk 1963 g1f3 d7d5 g2g3 g8f6 f1g2 c7c5 o-o e7e6 d2d3 b8c6 b1d2 f8e7 e2e4 o-o f1e1 d8c7 e4e5 f6d7 d1e2 b7b5 h2h4 a7a5 d2f1 c8a6 f1h2 c6b4 h4h5 ! # col. 14i; Evans-Olafsson, Dallas 1957 g1f3 d7d5 g2g3 g8f6 f1g2 g7g6 o-o f8g7 d2d3 o-o b1d2 b8c6 e2e4 e7e5 c2c3 a7a5 f1e1 d5e4 d3e4 f6d7 d1e2 b7b6 d2c4 c8a6 g2f1 d8f6 ! # col. 15 g1f3 d7d5 g2g3 g8f6 f1g2 g7g6 d2d4 f8g7 o-o c7c6 b2b3 b8d7 c1b2 e7e5 d4e5 f6g4 b1d2 d7e5 f3e5 g4e5 ! # col. 16d; Larsen-Mecking, Mallorca 1969 g1f3 d7d5 g2g3 c7c5 f1g2 b8c6 o-o e7e6 d2d3 g7g6 b1c3 f8g7 a2a3 g8e7 a1b1 o-o c1d2 a8b8 b2b4 c5b4 a3b4 b7b5 e2e4 a7a5 ! # col. 17h; Benko-Bisguier, US Chp. 1963 g1f3 d7d5 g2g3 c8g4 f1g2 b8d7 c2c4 c7c6 c4d5 c6d5 b1c3 e7e6 d1b3 d8b6 b3b6 d7b6 d2d3 a8c8 c1e3 f8d6 c3b5 d6b8 o-o g8e7 f1c1 c8c1 a1c1 e7c6 f3d4 e8d7 ! # col. 18j; Keene-Basman, Hastings 1966-7 g1f3 d7d5 g2g3 c8g4 f1g2 g8f6 c2c4 c7c6 c4d5 g4f3 g2f3 c6d5 d1b3 d8d7 b1c3 e7e6 o-o b8c6 f3g2 f8e7 d2d3 o-o ! # col. 19k g1f3 d7d5 g2g3 c8g4 f1g2 g8f6 c2c4 c7c6 d1c2 e7e6 o-o f8e7 b2b3 b8d7 c1b2 o-o d2d3 a7a5 b1d2 a5a4 b2c3 a4b3 a2b3 d8b6 ! # col. 20m g1f3 d7d5 g2g3 c8g4 f1g2 g8f6 o-o c7c6 c2c4 e7e6 c4d5 g4f3 g2f3 c6d5 b1c3 b8c6 d2d3 f8e7 f3g2 ! # col. 21b; Savon-Aronin, USSR 1963 g1f3 d7d5 g2g3 b8c6 d2d4 c8f5 f1g2 c6b4 b1a3 e7e6 o-o g8f6 f3h4 f5g4 c2c4 c7c6 a3c2 b4c2 d1c2 f8e7 h2h3 g4h5 f2f3 h5g6 h4g6 h7g6 ! # col. 22d; Fischer-Ivkov, Santa Monica 1966 g1f3 d7d5 g2g3 e7e6 f1g2 c7c5 o-o b8c6 d2d3 f8d6 e2e4 g8e7 b1d2 o-o f3h4 b7b6 f2f4 d5e4 d3e4 c8a6 f1e1 c5c4 c2c3 ! # col. 23 g1f3 d7d5 g2g3 b8d7 c2c4 e7e6 f1g2 g8f6 b1c3 f8e7 o-o o-o d2d3 c7c5 c4d5 e6d5 c1g5 b7b6 ! # col. 24g; Benko-Bisguier, US Chp. 1976-7 g1f3 d7d5 g2g3 g8f6 f1g2 b7b6 c2c4 e7e6 c4d5 e6d5 o-o f8d6 d2d4 o-o b1c3 c7c6 f3e5 c8b7 c1g5 h7h6 g5f6 d8f6 f2f4 f8d8 e2e4 ! # col. 25; Rabinovich-Rauser, Moscow 1934 g1f3 d7d5 b2b3 c8g4 c1b2 b8d7 c2c4 e7e6 e2e3 g8f6 f1e2 c7c6 f3d4 g4e2 d1e2 f8d6 f2f4 o-o ! # col. 26e; Evans-Najdorf, Dallas 1967 g1f3 c7c5 g2g3 b8c6 f1g2 g7g6 o-o f8g7 e2e4 d7d6 c2c3 e7e5 d2d3 g8h6 f3e1 o-o f2f4 e5f4 c1f4 h6g4 b1a3 g4e5 g1h1 d8b6 d1d2 c8e6 ! # col. 27h; Van den Pol-Barden, Holland v. England 1960 g1f3 f7f5 g2g3 g8f6 f1g2 g7g6 d2d3 f8g7 b1d2 d7d6 e2e4 e7e5 d2c4 o-o e4f5 g6f5 c1e3 b8c6 d3d4 e5e4 ! # col. 28m; Gufeld-Bokuchava, USSR Chp. prelims 1968 g1f3 f7f5 g2g3 g8f6 f1g2 e7e6 c2c4 f8e7 o-o o-o d2d3 d7d6 b1c3 b8c6 a1b1 a7a5 a2a3 d8e8 b2b4 a5b4 a3b4 e6e5 ! # col. 29p; Lundin-Tartakover, Groningen 1946 g1f3 f7f5 g2g3 g8f6 f1g2 e7e6 c2c4 f8e7 o-o o-o b2b3 c7c5 c1b2 b8c6 b1c3 e6e5 e2e3 d7d6 d2d4 ! # col. 30 g1f3 g7g6 g2g3 f8g7 f1g2 e7e5 d2d3 b8c6 e2e4 d7d6 b1c3 g8e7 c1e3 o-o d1d2 c6d4 o-o ! # King's Indian attack, col. 31a g1f3 g8f6 g2g3 b7b5 h2h4 b5b4 d2d3 c8b7 e2e4 d7d6 f1g2 b8d7 o-o e7e6 h4h5 a8b8 b1d2 f8e7 d2c4 o-o ! # col. 32d g1f3 g8f6 g2g3 g7g6 b2b4 f8g7 c1b2 o-o f1g2 d7d5 o-o c8g4 c2c4 c7c6 b1a3 b8d7 a1c1 a7a5 b4b5 a5a4 d2d3 e7e5 ! # col. 33e; Olafsson-Kavalek, Wijik aan Zee 1969 g1f3 g8f6 g2g3 g7g6 b2b3 f8g7 c1b2 o-o f1g2 d7d6 d2d4 f6d7 b1c3 e7e5 d1d2 f8e8 d4e5 d7e5 f3e5 g7e5 ! # col. 34h g1f3 g8f6 g2g3 g7g6 c2c4 d7d6 f1g2 f8g7 o-o o-o b1c3 b8d7 d2d3 e7e5 c1d2 d7c5 b2b4 c5e6 a1b1 f6e8 a2a4 c7c6 a4a5 e8c7 ! # col. 35 g1f3 g8f6 c2c4 g7g6 b2b3 f8g7 c1b2 o-o e2e3 d7d6 f1e2 e7e5 o-o f8e8 b1c3 b8d7 d2d3 c7c6 ! # col. 36d g1f3 g8f6 c2c4 g7g6 b1c3 d7d5 c4d5 f6d5 d1a4 c8d7 a4b3 d5b6 d2d4 f8g7 c1f4 d7e6 b3c2 b8c6 a1d1 ! # col. 37f g1f3 g8f6 c2c4 b7b6 g2g3 c8b7 f1g2 c7c5 o-o g7g6 b2b3 f8g7 c1b2 o-o b1c3 d7d5 c3d5 f6d5 b2g7 g8g7 c4d5 d8d5 d2d4 b8a6 ! # col. 38h; Geller-Kholmov, Moscow 1969 g1f3 g8f6 c2c4 b7b6 g2g3 c8b7 f1g2 e7e6 o-o f8e7 b2b3 o-o c1b2 d7d5 e2e3 b8d7 b1c3 f6e4 c4d5 e4c3 b2c3 e6d5 ! # col. 39 g1f3 g8f6 b2b3 g7g6 c2c4 f8g7 c1b2 o-o g2g3 c7c5 f1g2 b7b6 o-o c8b7 b1c3 e7e6 a1b1 d8e7 ! # col. 40o; Lombardy-Burger, US Chp. 1969-70 g1f3 g8f6 b2b3 d7d5 c1b2 e7e6 e2e3 f8e7 c2c4 o-o d2d4 b7b6 f1d3 c8b7 o-o b8d7 b1d2 c7c5 d1e2 f6e4 a1c1 a8c8 ! ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееset gulam_help_file gulam.hlp alias gnuchess '\execs\gnuchess' alias chess '\execs\gnuchess' alias nchess '\execs\nchess' set history 10 set baud_rate 2400 unset pr_bof set pr_eof '214' set pr_eop '214n' set pr_eol 'rn' rehash еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее gulam.hlp -- help file for Gulam #1 keycode (in hex) to keyname (rest of line) table 000 NUL 029 ) 05d ] 07d } 07f DEL 081 F1 082 F2 083 F3 084 F4 085 F5 086 F6 087 F7 088 F8 089 F9 08a F10 08b HELP 08c UNDO 08d INSERT 08e HOME 0ab SHIFT-HELP 0b0 K0 0b1 K1 0b2 K2 0b3 K3 0b4 K4 0b5 K5 0b6 K6 0b7 K7 0b8 K8 0b9 K9 0bb UPARRO 0bc DNARRO 0bd LTARRO 0be RTARRO 0c0 KLP 0c1 KRP 0c2 KSTAR 0c3 KPLUS 0c4 KENTER 0c5 KMINUS 0c6 KDOT 0c7 KSLASH 140 C-@ 141 C-A 142 C-B 143 C-C 144 C-D 145 C-E 146 C-F 147 C-G 148 C-H 149 TAB 14a LFD 14b C-K 14c C-L 14d RET 14e C-N 14f C-O 150 C-P 151 C-Q 152 C-R 153 C-S 154 C-T 156 C-V 157 C-W 159 C-Y 15a C-Z 15f C-_ 220 ESC SPC 221 ESC ! 225 ESC % 22e ESC . 23c ESC < 23e ESC > 242 ESC B 243 ESC C 244 ESC D 246 ESC F 247 ESC G 24c ESC L 252 ESC R 253 ESC S 255 ESC U 256 ESC V 257 ESC W 27f ESC DEL 346 ESC C-F 348 ESC C-H 35b ESC ESC 421 C-X ! 421 C-X ! 428 C-X ( 429 C-X ) 431 C-X 1 432 C-X 2 43d C-X = 442 C-X B 445 C-X E 446 C-X F 44b C-X K 44e C-X N 44f C-X O 450 C-X P 45a C-X Z 541 C-X C-A 542 C-X C-B 543 C-X C-C 546 C-X C-F 549 C-X TAB 54e C-X C-N 54f C-X C-O 550 C-X C-P 552 C-X C-R 553 C-X C-S 556 C-X C-V 557 C-X C-W 558 C-X C-X 55a C-X C-Z #2 function-code (hex) to function name etc 000 no-op 001 show-possible-expansions 002 expand-name 003 terminate-mini-buffer 004 file-name 005 expand-name-gulam-style 006 switch-to-gulam-buffer 007 execute-buffer 008 read-file 009 show-key-board-macro 00a terminal-emulator 00b move-window-up 00c move-window-dn 00d quick-exit 00e temporary-exit 00f gulam-forward-line 010 gulam-do-newline 011 goto-next-tab 012 save-buffers-kill-emacs 013 keyboard-quit 014 help 015 start-kbd-macro 016 end-kbd-macro 017 call-last-kbd-macro 018 no-op 019 redraw-display 01a backward-char 01b forward-char 01c backward-delete-char 01d delete-char 01e beginning-of-line 01f goto-end-of-line 020 kill-line 021 next-line 022 open-line 023 previous-line 024 insert-newline 025 newline-and-indent 026 goto-line 027 execute-one-Gulam-cmd 028 no-op 029 no-op 02a no-op 02b search-backward 02c search-forward 02d no-op 02e no-op 02f query-replace 030 set-mark-command 031 self-insert 032 recenter 033 quoted-insert 034 transpose-chars 035 copy-region-as-kill 036 kill-region 037 keys-reset 038 no-op 039 no-op 03a no-op 03b yank 03c no-op 03d find-file 03e save-buffer 03f write-file 040 no-op 041 delete-blank-lines 042 exchange-point-and-mark 043 what-cursor-position 044 next-window 045 previous-window 046 shrink-window 047 enlarge-window 048 no-op 049 delete-other-windows 04a split-window-vertically 04b ctrlx-four-hack 04c no-op 04d insert-buffer 04e switch-to-buffer 04f no-op 050 list-buffers 051 kill-buffer 052 save-some-buffers 053 no-op 054 end-of-buffer 055 beginning-of-buffer 056 no-op 057 no-op 058 no-op 059 just-one-space 05a backward-word 05b capitalize-word 05c kill-backward-word 05d kill-word 05e forward-word 05f downcase-word 060 upcase-word 061 scroll-up 062 scroll-down 063 no-op 064 no-op 065 no-op 066 no-op 067 no-op 068 no-op 069 no-op 06a no-op 06b blink-matching-paren-hack 06c no-op 06d no-op 06e describe-key-briefly 06f produce-wall-chart-describe-bindings 070 NUL # -eof- ееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееgnuchess (second release) Source code on disc is modified from the form in which I received it, originally it would allegedly compile on a PC, or on an ST (using LASER C). Since I don't have either, I made it work with GNU C, on the ST (TOS) and Minix Mkernel. Tos modifications are #ifdef'ed as gcctos and minix is as minix. Both the nondisplay version and curses version work. A bug remains in the curses version for TOS in that delete and backspace do funny things on the screen (its inherited from curses) just press return to clear the line. See the copyrights messages for Gnuchess if you're going to do anything with this. As would be expected I have no liability for disasters happening during the use of this code, your using it at your own risk. The file gnuchess.txt is the formatted manual page whilst gnuchess.man is the unformatted version. Under TOS the gnuchess.book file is named gnuchess.boo and under minix is should have the full name gnuchess.book. Also under TOS you will need a copy of GULAM (there is one on the disc). If the program is executed from somewhere other than its own directory then the gnuchess.book file is not loaded in. makefile.mix is for minix(using GCC only) makefile.gt is for Tos. other makefiles are as supplied to me so I don't know about them. In compiled versions (see Execs directory) the gnuchess version is the curses version and nchess is the nondisplay version(ie for TOS users). The script 'chess' is supplied for unix machines where it will pick the terminals with graphical capability (ok vt52 will do) and call gnuchess other- wise it will call nchess. This will have to be hacked for your machine. I have no idea what the other readme files say. The file chess.lst is an output file from the game. Also on the disc is a copy of curses modified to compile with Gnu C for TOS and if you don't believe it works try it with gnuchess. As a note if you use getch() then you may have to cast the output as char - it seems to work better that way (ie (char)getch()). Have fun, Chris Page 70 Eldred Avenue Brighton Sussex еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее` њ$шb*o mСн$m,BЂ"HJgP"Љ&J$YJfь"ЉJg< Afм Rfж Gfа VfЪ =f Jg#ЛEpB™ "Љ&J$YJfь"ЉJfт&f2B™ "ьE’EнЂH‚B2 r gґgшSJ"Кg ґfшB*яя`жB™" Ущ#ъ#Б#ъ.I+I/ #И"є//’ЂдЃSA?“Н/ / Bg?<JNAЮь Jѓf.?<?<N№І>ЂN№?|BWN№І>ЂN№XOњОN№%КЮь ?N№?<LNANVяфHЧ0Ђ/.N№дXOгHV@?N№ lTO*@(@ f `Rp^А nR®g:HЂ @*fp.А`$HЂ @.g HЂ @+fp\`дHЂ @?f~.HЂ`ёp$АB LЧ0ЂN^NuNVямHЧ8Ђ~(n *@ fB@`€/. N№"XO&@ gи/ N№ЋґXO-@яь/ N№ њXOJ®яьg6Jg. fB@`а/ N№дXO<JGg0FСМp*Ђ0R@0@СМBp?/ / N№ЄЮь :0FСМB Ef JGf/ N№TXOJЂg/ / N№ФPO`z EotJGgp0FСМp*Ђx0DСНHЃ0DСМHЂ°AfRD`и0R@6¶Dm0R@0@СМ2CУМ‘SC`к0DСМ2DУН‘RF0DСМJgBg/ / N№ЄЮь °Egў0S@0@СМB0LЧ0шN^NuNVярHЧ8Ђ*n/<"Ы/ N№3$PO&@ gV+Jg B@ @\fHk/ N№ФPO`0B@ @.f$Bp\?/ N№4\O(@ gHk/ `Оp\А`R‹*K`”LЧ8ЂN^NuNVярHЧ8Ђ/.N№3єXO*@ gљ/ N№дXO> GfB/<"Ю/ N№јPOJ@g:/<"г/ N№јPOJ@g$/<"и/ N№јPOJ@g GoZp:?HmN№n\O(@ gSЊ`./<"н/ N№3$PO(@ f/<"р/ N№3$PO(@ gRЊ g/ / N№ФPO`¦Jg6 -:f. -\gB-Hm/<"у&M /N№2љЮь *@/ `j ~glN№¦(@ g`/ N№дXOHАРЊSЂ&@ \fB \fB,Hm/ N№ФPO&M //<%€/ N№2љЮь *@/ N№ њXO/ N№ њXO/ N№єXOJ-f(/<%†/<%€(M /N№2љЮь *@/ N№ њXO LЧ8ЂN^NuNVяфHЧ8*nB№XvB№]DB№Yд fBЂ`zp\?/ N№4\O(@ gRN№¦&@B/ N№VXOJ№YдfJ№Xvf p?N№]мTOp\Ђ g/ N№VXO/ N№ њXOKм` p?N№]мTOB№Xv LЧ8N^NuNVярHЧ8*n(M /N№:XO*@/ N№ њXOp\?/ N№4\O(@ gnB/ N№3єXO&@Bg/ N№¬\O-@яь nяь hf nяьJЁfp\`(/ /<"ц nяь/(N№2љЮь &@/ N№ њXO*K/.яьN№-FXO LЧ8N^NuNVяиHЧ8А>. n BђJ®g nJђfB@`l/<bж/<Z. n/N№R Юь N№T(/N№3єXO(@N№TІ/N№3єXO&@ g !f / N№L¤`/ N№ XO(@ g– g’/ N№дXO</ N№дXOРF@?N№ lTO-@яьJ®яьgяbJFg/ /.яьN№ФPO0RF0@Сояьp Ђ/ .яь/0HАС— /N№ФPO/ N№ њXO .яь/0HАС— /N№шXO*@?/ /9]DN№¶Юь <JGg0 Ff*/.яьN№bXOJ@g/<"ш`/<"ъ/.яьN№¦PO n/N№ њXO n ®яь n №]DB№]D0LЧ8АN^NuNVямHЧ0Ђ*nN№U¬/ N№3єXO-@яьgp ?/.яьN№n\O-@яшg nяшBBgHnяшHnяьN№RЮь >(nяь gd Go.p\?/ N№4\O(@ gRЊ`(nяь/.яш/ N№ФPO(nяь/ N№дXO @Oo/ /<"ьN№·tPOB,O/ / N№ФPO/.яьN№ њXO/.яшN№ њXON№Uф0LЧ0ЂN^NuNVяиHЧ8А*n(n /<%†/<# / N№2љЮь &@/ N№шXO"/9]D/ N№0:PO-@яь/ N№ њXO/9]DN№ њXOB№]D0S@>Bg/.яь/ N№0љЮь /.яьN№-FXO0S@<ѕFl>RG0HАР­(@/ N№дXOЮ@N№)J@f/ N№bXOJ@gМ/ / N№ ТPO`ѕLЧ8АN^NuNVяшHЧ0*nN№,м(@ g,p?/ / N№.bЮь / N№bXOJ@g / / N№ ТPO LЧ0N^NuNVядHЧ8Ђ*n(n N№,м&@ g>--mяш0SGJ@gт/<"ѕ/ N№јPOJ@g’/.яшN№bXOJ@gz/<%†/<# /.яшN№2љЮь -@яф/.яфN№шXO"p?/ /9]DN№ЄЮь /9]D/.яфN№0:PO-@яь/.яфN№ њXO/9]DN№ њXOB№]D`B®яь`/.яшN№ ®XO-@яьBg/.яь/ N№0љЮь /.яьN№-FXO/.яшN№дXOR@ nяшРА-Hяш`я/ N№-FXO LЧ8ЂN^NuNVямHЧ8А*n—Л g¤/ N№TXOJЂg”p\?/ N№4\O(@ g$BHl/ N№ 2XO/N№ ьPO&@p\Ђ`В/ N№шXO(@ g4p?/ /9]DN№ЄЮь <B/9]D/ N№0:PO&@B@Ђ/9]DN№ њXOB№]D`f/<"ѕ/ N№3$PO(@ g4№Нf*|#`B@$ @\g™М g2B/ N№ ®XO&@B@`яXN№,м&@™Мp?/ / N№.bЮь LЧ8АN^NuNVяшHЧ0*nN№Sј"p?N№ lTO(@ g(Ќ)y"Д#М"ДLЧ0N^NuNVяь/ *y"Д g#н"Д/N№-FXO/ N№ њXO*_N^NuNVярHЧ8*n/<#N№} XO/N№3єXO(@-@яь gJJgF/ N№дXOHАРЊSЂ&@ \fBJ-g&Hm/<#/.яьN№2љЮь (@/.яьN№ њXO LЧ8N^NuNVюмHЧ8А npя0ЂJ№"Дg y"Д `BЂ&@N№Sв*@HЂ @0m:HЂ @9n0 g / N№юXO n0Ђ?/+N№-ѕ\O` <%†*@`ЮHЂ @*f g.Bg/ N№.\O*@ n0јя`¶HЂ @-f gp?`Ф <%†`ЦHЂ @. —Лx/<bж/<Z./ N№R Юь / N№ њXON№,м-@яьN№Sв*@ gPJgJ #gBN№U¬/<^H/<Wr/ N№R Юь N№,м-@яшN№Sв*@ gJgюzB@ | њ2<`XH°XWЙяъ PNР`ђHnятN№JXO*@ёnятlz8.ят`tz/ N№3єXO(@/ / N№1рPON№U¬Bg/ N№¬\O-@яфBg/.яфN№.\O*@»ь%†f›Н/.яфN№ њXON№Uф`/ N№ И`/ N№3єXO*@JEg&(M/<#+/ /<#)N№2љЮь *@/ N№ њXOBg/ /.яшN№.bЮь / N№ њXO`ютJ®яшgм nяш*h gЮN№U¬/<bж/<Z./ N№R Юь N№Sв*@ g¬Jg¦ 'g† "g~/ N№TXOJЂf/<"ѕ/ N№3$POJЂg\/ N№ 2XO-@яфJ®яфg nяфJhg nяфJЁf/ /<#-N№5юPO&@Bg/.яф/.яьN№0љЮь /.яфN№-FXO›Нp?/ /.яьN№.bЮь `яJN№Uф/.яшN№-FXON№Uф`э¦JGg$J№"ДgRD0? y"Д//.яьN№0љЮь N№Sј/N№-FXOJ№Xvf#ЛXv .яьLЧ8рN^NuNVяфHЧ8*n fBЂ`B&m /N№{XO(@№Лg*/ N№ XXOp?/ N№3єXO/N№¬\O*@N№ – LЧ8N^NuNVяь/>. GAm GZnGA` Gam GznGa?p?NAXO#АYд.N^NuNVяь/ *n?<я/ pN?NAPOJЂg / p9?NA\O`pя#АYд*_N^NuNVяь/ *n/ p:?NA\O#АYд №яяяЬYдf #ь#PXv*_N^NuNVяшHЧ0?<иN№ lTO*@ fBЂ`vp?NATOЂaЂp:@BgHmpG?NAPOJ-f p\@B-/ N№дXO @иm/<#^N№'ЪXOBg/ N№3єXO/N№4@\O(@/ N№ њXO LЧ0N^NuNVN№¦#А]DN^NuNVяфHЧ8*n g†N№¦(@&MJg& -:fB@?N№шTOJ-gTЌ`*|#eJ№Yдm:/ p;?NA\O#АYдl( gB@?N№шTO/ /<#gN№5юPO#АXv g / N№ њXOLЧ8N^NuNVяь/ N№¦*@/ /<#zN№}ЖPO/ N№ њXO*_N^NuNVяь/ N№Sв*@Jf/<#~N№} XO*@/ N№VXON№ф*_N^NuNVяшHЧ0*np?N№ lTO(@ g(Ќ)yFљ#МFљLЧ0N^NuNVяшHЧ0J№FљfBЂ`( yFљ(P yFљ*h/9FљN№ њXO#НFљ LЧ0N^NuNVяфHЧ8N№,м(@BgN№¦&@// N№.bЮь / N№ њXO*yFљ g*Bg/<#ѓ/ N№.bЮь Bg// N№.bЮь *m`Т g#м]D/ N№ њXOLЧ8N^NuNVяшHЧ0N№Sв*@Jg:N№¦(@/ N№VXOJ№YдmN№ф gb/ N№ZXO`V/ N№ њ`тN№¦*@N№ђ(@ g/ N№ZXO/ N№VXON№ф`/ N№ њXO#ь#<Xvpя#АYдN№ФLЧ0N^NuNVяь/ N№ђ*@ g"/ N№VXON№ф/ N№ њXON№Ф`#ь#<Xvpя#АYд*_N^NuNVямHЧ8Ђ*n(n p\?/ N№4\O&@p\?/ N№4\O-@яь·ояьfp`: g4J®яьg. nяьBB/ / N№јPOJ@fp`B@> nяьp\ЂЂ0`B@LЧ8ЂN^NuNVяшHЧ Ђ*nBgBg/ pC?NAЮь >/<#…N№9’XOJ@gGяю`G?p?/ pC?NAЮь LЧ ЂN^NuNVяфHЧ0Ђ*n(n Bg/ p=?NAPO>JGmp??/ pW?NAЮь ?p>?NAXOLЧ0ЂN^NuNVяш/ *np,?NATO=@яьp*?NATO=@яюHnяь/ N№PO*_N^NuNVяшHЧ0N№Sв*@N№Sв(@Jg/ / BgpV?NAЮь `pя#АYдLЧ0N^NuNVяь/ *n/ pA?NA\OС№Yд*_N^NuNVяшHЧ0*n gpP?N№ lTO`BЂ(@ g*/ N№дXO @Pl/ / N№ФPO/ N№кXO`B LЧ0N^NuNVяЦHЧ8ш*n(n / N№шXO*@/ N№шXO(@ gь gцJngz|`Ћz/ / N№јPOJ@f pя#АYд`К y"FfB/ / N№LPOJ@g2/ N№ШXOJ№Yдg №яяяЯYдfђ/ / BgpV?NAЮь `Єp?/ / /<#€N№5юЮь /N№А~\O=|яяъHnяъN№6иXO&@ fpЩ`яl0.яъ@яюH@B@H@-@яьBg/ p=?NAPO>JGn/ /<#‘N№5юPO#АXv`Ъ/ /.яь?p??NAЮь &JEg*Bg/ p?NAXOС№Yд/<#ЅN№9’XOJ@g Bg?HnяцpW?NAЮь Hnяц/ N№PO?p>?NAXOС№Yд/ N№ њXOJ№Yдf y"Ff / N№ШXO/ N№ њXO/ N№ њXOLЧ8шN^NuNVяшHЧ0*n/ N№дXOT@?N№ lTO(@#АF” f pЩ#АYд`./ / N№ФPO/ N№дXOS@ША \gRЊ Lp\ЂRЊ LBLЧ0N^NuNVярHЧ8Ђ*n/ N№bXO>Jg -:f TЂ` &@p\?/ N№4\O(@ f ` RЂ(@/<%†/ /9F”N№2љЮь &@JGg2/<#АN№9’XOJ@f/<#ГN№9’XOJ@g/ / N№ВPO`Bg/ / N№RЮь / N№ њXOLЧ8ЂN^NuNVяфHЧ8(yF”—Л/. p9?NA\O/.N№дXOHАР®SЂ*@ \f <%†` <#Ж*@/<#И/ /.N№2љЮь *@/ N№ 2XO&@/ N№ њXO gJ*k gB/. N№–XOJg$N№)J@f/ N№XO/ N№дXOR@ЪА`Ш/9F”N№ њXO/ N№-FXO#МF”J№Yдf y"Ff/.p:?NA\O#АYдLЧ8N^NuNVяиHЧ8АRyF09F @"f <#К` <#Н&@N№T((@/ N№bXOJ@g,/ N№–XO/</ N№CЋPO/9F”N№ њXO`ђ|B®яьN№Sв*@Jg(HЂ @-g HЂ @+f / N№9ZXO`Т-MяьRF`КJFf #ь#РXv Fo/ /<#ЮN№5юPO#АXv`&/.яь/ N№CBPO @fBg/ /.яьN№RЮь ByFLЧ8АN^NuNV3ь!FN№ВN^NuNVяь/ *np?/<%†/ N№RЮь *_N^NuNV/9]DN№АшXO/9]DN№ њXOB№]DN^NuNV/9XvN№АшXOB№XvN^NuNVяфHЧ8/<$ЁN№} XO*@Jf/<$ N№3єXO*@`0Bg/ N№3єXO/N№¬\O&@Bg/ N№.\O*@/ N№ њXO/<%†/<$ЇN№} XO// N№2љЮь (@/ N№ њXO LЧ8N^NuNV/<#юN№АшXON№H$/<$»N№АшXOBgN№n TOJ№]Dg y]DJf/<$еN№АшXON№N№ѕЖp3А' N^NuNVядHЧ8а*n>. (n?/N№Вґ\OBA9$¤B@°AgBA9$¦B@°Afjp?Hnяь/ N№RЮь :BA9$¦B@°Af4 Eo. g*pя?pя?/.яьN№/"PO&@ g/ N”XO/ N№ њXO/.яьN№ њXO`яjB@LЧ8аN^NuNVяь/ *n/<%‚N№)DXO/ N№)DXO*_N^NuNVяш/N№ї¤?<N№ lTO-@яьg, nяьB/<!?<HnяьN№ JЮь > Gf nяьB .яь.N^NuNVяь/ N№!**@/<%‚N№)DXOp?/ N№#~\O*_N^NuNVяшHЧ0*n™М?<N№72TOJ@fB/ N№љXO*@ g2J­g,/ N№UpXO mJg$N№TЬ/N№3єXO(@N№H°` / N№-FXO LЧ0N^NuNVяь/ /<.zN№)DXON№uьN№ЋnN№Sј*@p?/ N№1 \O/ N№!®XO/N№ њXON№ЋЋ/<.zN№)DXON№®’*_N^NuNVяжHЧрJ№FћgN№ѓ’ђ№Fћ(B№FћJ„l„яяяR„/<И Ђd/N№ЋPO:0HАЃь<<0Бь<љ@0HАЃь<>0Бь<њ@Hnяц???N№V~Юь B.яю/Hnяц/<%N№5юЮь /N№АшXOLЧрN^NuNVяь/ N№ѓ’#АFћN№Sј*@p?/ N№1 \O/ N№!®XO/N№ њXO*_N^NuNVяиHЧ8а*n>. gJf/ N№ њXO`ZB№Xvp!?/ N№n\OJЂg$/ N№L¤XO(@№Нg Bg/ N№А~\ON№0`(MJGg / N№MрXOBg/ N№¬\O&@J№XvgN№0/ N№-F`€/<%,N№}@XO:JEnz|/<%:N№}@XOJ@g N№ѓ’#АFћRF0°En N№)J@g/ N№-FXO0D@HА#АYд›Н`/ N№!®XO*@N№N№EцN№0J№Yдg 09Yж?/<%?N№5ю\O/N№АшXOB№YдN№"Њ g./<bж/<Z./ N№R Юь / N№ њXON№Sј&@`я4LЧ8аN^NuNVяшHЧ0*nN№ѕЖN№!*(@ g/ / N№ФPO`BN№ѕкLЧ0N^NuNVяшHЧ Ђ*n>9=Оp3А=О/<%P/</њN№}ЖPOBg/ N№3єXO/N№#~\O3З=О/</њN№}@XOLЧ ЂN^NuNVяь/B§p ?NA\O.!ьЋ®ц/p ?NA\O.N^NuNVядHЧ8а>.*n (nN№ЧF y=Оf pя?N№TON№% /N№|ЁXON№¦&@ g*/ /</ЊN№}ЖPO/ /</€N№}ЖPO/ N№ њXOp/N№5аXO//</ёN№}ЖPOp?/</¤N№}Ж\O GgЄz0SG @o^XЌ M&PJEg,/<%R/ N№јPOJ@gBg/ N№3єXO/N№#~\O`АJEgzN№,м-@яь`®p?/ /.яьN№.bЮь `JEf*J®яьg$Bg/.яьN№.XO/N№#~\O/.яьN№ њXO09Yж?N№TON№ЋЋ/<.zN№)DXON№Ћnpя3А=ОN№±(Bgp?N№¶6XO/<#юN№АшXOBg/<%UN№3єXO/N№#~\OBg/<%ZN№3єXO/N№#~\ON№P/<%bN№}@XO<N№!~JFgцBg/<%kN№3єXO/N№#~\O`ЪLЧ8аN^NuNVяь/ *n/<&ЊN№)DXO/ N№)DXOp?p?NMXOpя?N№TO*_N^NuNVяь/>. yя%Љl09%ЉRy%Љ0@СьFўp@яЂ.N^NuNVяь/ *n gJgB@?N№(TO`м*_N^NuNVяь/Jy%Љo0B@9Fў>Sy%Љ09%Љ?/<FЈ/<FўN№ЌмЮь `p?p?NMXO>0.N^NuNVяь/~яp?p?NMXOJЂg0p?p?NMXO> Gg Gg Gg Gg ?N№(TO0.N^NuNVяь/N№(О> Gg Gfp`B@.N^NuNVяфHЧ А*ng<HЂ?p?p?NM\ON№(ОHЂ @fp?p?NMXO`КHЂ @fАLЧ АN^NuNVярHЧ0А*n(n >.B@<g 0FСНpЃ`мLЧ0АN^NuNVяиHЧ8а*n(n >.JGgp`p@яGн·НcB@`фB@:g0EСНp@яЂ`иLЧ8аN^NuNVяаHЧ8ш*n>. SGzJGo’|јGl„0HАе€ @СН(P0R@HАе€ @СН&Pg^HЃHЂ°AmPHЃHЂ°Aoв0HАе€ @СН(P0HАе€ @СН0R@HАе€"@УН ‘0R@HАе€ @СН ЊJ®g ? nNђTO:RF`яz>`яjLЧ8шN^NuNVяиHЧ0р›НBEB@8<J® g„Fdzx0еH?N№ lTO*@ gfSF0HАе€ @СНBђ(n JgD nfШь-/ N№дXO>ѕDo80REHАе€ @СН ЊєFm / N№ њXO`’0R@ША`ё0HАе€ @СНBђ n Ќ n0… n0„LЧ0рN^NuNVяЬHЧ8ш>.*n<./. N№дXO80БДРnR@?N№ lTO(@-@яь fBЂ`HzєFl<0HАе€ @СН /0HА‘— &@ЫfьJDg?/. SЊ /N№ЌмЮь ШДRE`АB .яьLЧ8шN^NuNVяшHЧ Ђ>.JGnBЂ`&0Бь \@?N№ lTO*@ g :‡Bmp ;@ LЧ ЂN^NuNVямHЧ8А*n(n gt gp<0-°mfD0-БЖ\@>0Бь РG?N№ lTO&@ gB?/ / N№ЌмЮь / N№ њXO*Km ?/ 0Бн0@СНHhN№ЌмЮь Rm LЧ8АN^NuNVяь/ p ?N№ lTO*@ g:pd?N№ lTO+@gpd;@BmBU mB( mB` / N№ њXO›Н *_N^NuNVяь/ *n g/-N№ њXO/ N№ њXO*_N^NuNVяфHЧ0Ђ*n(n g0 g,~Jg&/ / N№јPOJ@f0`RG/ N№дXOR@ЪА`ЦpяLЧ0ЂN^NuNVяшHЧ Ђ*n>. JGm f <%†`RGSGgJg/ N№дXOR@ЪА`и LЧ ЂN^NuNVямHЧ8А*n>. gJGm 0-<°Gn <%†`.?/-N№-ѕ\O(@&@RG0°Fl/ N№дXOШАp А`ж LЧ8АN^NuNVямHЧ8А*n(n >. g  gљJGg~/ N№дXOРU<0РF°mmB0@d?N№ lTO&@ gd?/-/ N№ЌмЮь /-N№ њXO+K0@d;@&m g0/ /0HАС— /N№ФPO0РF0@СЛB0РG:ЂJGgRmLЧ8АN^NuNVяЬHЧ8шJ®fBЂ`юJn l8Bn B®яь*nJg"/ N№дXO:єno=ERn 0R@ЪА`ЪRn`-nяьpNHАЃо8JDnx0. РDS@HАЃД60.T@Бо R@?N№ lTO&@(@ gzzєClr|јDl`0БГРE>ѕn lRJ®яьg0HАе€ @Сояь `?/.N№-ѕ\O*@~ЭgRG`шp @яя0S@°FoRG0°nlp А`рRF`њp Аp АRE`ЉB LЧ8шN^NuNVяфHЧ8*n(n N№,м&@ g: g6Jg2Bg/ / N№.bЮь p?/ / N№.bЮь / N№дXOR@ША`К LЧ8N^NuNVямHЧ8А*n(n >. gP gL<,&lJGm@јGm< g8?/ N№-ѕ\O&@0RG°Fl"p?/ / N№.bЮь / N№дXOR@ЦА`ЦLЧ8АN^NuNVямHЧ0а*n>. gTѕmnNJGoJ0S@?/-N№-ѕ\O(@/ N№дXOR@<" ’­0ђA:?0HАРЊ// N№ЌмЮь SmќULЧ0аN^NuNVярHЧ0А*n(n -HЂ> G0m2 G9n,~|JFg>RЌ M 0m 9nHЃ0зHРA@0>SF`ШJGg0@я0@Сь%ЊB@>RЌ8‡ LЧ0АN^NuNVяоHЧ0А*n(n gЊ g†gTHЂ @"g HЂ @'f@RЊ Lg4HЃHЂ°Ag(HЂ @fHnяю/ N№1zPO(@0.яюHЂА`ДB`,/ N№дXO=@яю№Нg0.яюR@?/ / N№ЌмЮь Ъояю LЧ0АN^NuNVямHЧ0J®gFJ® g@J®g:/.N№дXO8/. N№дXO6/.N№дXOРCРDR@?N№ lTO`BЂ*@-@яьJ®яьg(nЬfьSЌ(n ЬfьSЌ(nЬfь .яьLЧ0N^NuNVяфHЧ0Ђ*n(n g> g:/ N№дXO>B@?/ N№n\O*@ g?/ / N№цЮь J@gRЌ`Т›Н LЧ0ЂN^NuNVяфHЧ0Ђ~*nJg(n JgHЃHЂ°Afр`RGRЌ`а0LЧ0ЂN^NuNVяшHЧ0*n g/ N№дXOR@?N№ lTO`BЂ(@ g / / N№ФPO LЧ0N^NuNVяфHЧ0Ђ*n>. / N№дXOHАРЌSЂ(@№НeHЂ°Gf `SЊ`мBЂLЧ0ЂN^NuNVяиHЧ0р*n(M g4Jn g|azzx `|AzZxаgHЃ0°An HЂ°EnћHЂА`а LЧ0рN^NuNVяиHЧ ш*n>. | g¶ -fv-RЌ`v+gђ0HА* Gf@HЂ @AmHЂ @Fn HЂ@7HА*HЂ @amHЂ @fn HЂ@WHА*HЂ @0mHЂ @9n HЂ@0HА*2HБ °Ѓl/0HА/N№ NPOР…,`яnHЂ @-f DЂ, LЧ шN^NuNVярHЧ а..<. *|JВ MSЌBz+J‡lz- DЂ.0HА//N№вPO"@Уь%p MSЌ‘0HА//N№ЋPO.J‡nМB@ @-fB@Ђ`RЌ LЧ аN^NuNVяь/..p ?/N№5d\O.N^NuNVярHЧ0АKо (|JД nR®B@>gё G%gЗ`д nR®B@>|0 | ґ2<`XH°XWЙяъ PNР`ё\FTFPF?0HА/N№5d\O// N№ФPO/ N№дXOШАTЌ`†\FTFPF?/N№5dXO// N№ФЮь / N№дXOШАXЌ`яV// N№ФPO`аp-@яА`®B <JДLЧ0АN^NuNVяшHЧ Ђ nJPf0 Ge?N№ lTO*@ fG`д n0‡ LЧ ЂN^NuNVяъ/>."UЃ0HАР№#ъ°Ѓo#ь&¦Xvpя`B@.N^NuNVяЮHЧ8аB№YдB№Xv=|LяцHnяцN№6иXO-@яьJ®яьf pЩ#АYд`40.яцU@HА.(nяь *@/ .яьђЊHАР‡/?.p??NAЮь ,o¬ РЊ&@p Ђ(M  gRЊ`ц№ЛgJ , яяfB$z`"Bzp ?/ N№n\O-@яшg p Ђ(nяшB ђЌ?/ n Nђ\O0HАРЊ*@`¦ ђЌHА°‡m(//<&КN№5юPO#АXv ђЌ?/ n Nђ\O*K(nяь»ЛdЭ`ш*nяь`я6J†l#ь&сXv#ЖYдJ†f$ nяь±Мg#ь'XvB ђЌ?/ n Nђ\O?.p>?NAXO/.яьN№ њXOLЧ8аN^NuNVярHЧ8ЂJ®gj/.N№дXOHАР®&@p Ђ*n»ЛdHp ?/ N№n\O(@ g4B,яяB@ @ fB,яя/ /. n NђPOB@@яяp ЂKм`ґBLЧ8ЂN^NuNVяшHЧ0*n +f <`Ъ` <\D(@B@- LРАpЂLЧ0N^NuNVяшHЧ0*n +f <`Ъ` <\D(@B@- LРАB@LЧ0N^NuNVяь/ B№Xvp.?/.N№n\O*@ g4/<)Ю/ N№јPOJ@f /./. /.N№Ј¦Юь HА#АYд`0N№ѕк/./. /.BgpK?NAЮь#АYдN№ѕЖN№% *_N^NuNVярHЧ8ЂN№Tn(@/ N№дXO>0T@?N№ lTO*@ n Ђ gp@яЂ/ HmN№ФPOBgN№{РTO&@/<)бN№} XO*@ gJf*|)лJnfD mf> -wf6p?/<)о/ N№.bЮь p?/<'H/ N№.bЮь / N№TЉXO n «/ N№ њXOLЧ8ЂN^NuNVяаHЧ8А*nHnяшHnяь?. N№:VЮь Jn g /.яш/.яь/ N№Ј¦Юь HА#АYд`/ N№mXO(@ g/.яш/.яь/ N№9КЮь `p/ N№шXO(@&y]DB№]DBg/ / N№ЄЮь < Ff"/.яш/.яь/ N№9КЮь №яяяЯYдf/<%†/<)у/ N№2љЮь (@ g p?/ / N№ЄЮь </ N№ њXO`pЩ#АYд/<%†/<*/ N№2љЮь -@яфJ®яфgdpЯ#АYдJFo`/ N№дXOR@HАР®яф(@~ GlD0HАЂ'*// N№ФPO/.яш/.яь/.яфN№9КЮь №яяяЯYдf XG`ѕpЩ#АYдJ№Yдl* №яяяЩYдf <* `/ /<*N№5юPO#АXv/.яфN№ њXO/ N№ њXO/.яьN№ њXO/.яшN№ њXO/9YдN№5аXO//</њN№}ЖPOLЧ8АN^NuNVp?N№Sв/N№;2\ON^NuNVN№Tn/N№3єXO#А]DN^NuNVяшHЧ ЂN№Sв/N№юXO>N№ЎфJ@g ?N№ў `Ћp?BgN№ШкXO @gB@`v/<*)N№)DXON№Ћn/<*,N№} XO/N№VXO/<'NPO`N№ќЪBg/<*`/ N№.bЮь / /N№>NPO g#н]D/ N№ њXOLЧ8N^NuNVяфHЧ0ЂN№Sв(@JgDp?/ N№4ђ\O@яю*@/ N№>XO>?/ /<*oN№5юЮь /N№3єXO#А]DLЧ0ЂN^NuNVярHЧ8ЂN№Sв(@N№Sв&@Jg4Jg0p?/ N№4ђ\O@яю*@p?/ N№4ђ\O>?/ N№l\OLЧ8ЂN^NuNVяЪHЧ8ш*nz/<*‚N№9’XOR@6p#АYдUяъg .aяъg .bяъf”B@.яъ@яџ:0R@=@яю?<$N№ lTO&@ fpЩ`bBFB@>=@яь FPlЉ80SDJ@oxp?/9Yд???/<*…N№5юЮь/N№А~\O?<ее/<‡eC!p ???p ??B§/ p ?NNЮьHА#АYд(KJ\gRG`шN№)J@gЊpя#АYд`¶RF`яr<<0SFJ@g0HАг€ @СЛBP`к| Fl(p ?Bg?p??B§/ p ?NNЮьHА#АYдRF`ТBg?.яюp?NNTO// p?NNЮьp?BgBgp??B§/ p ?NNЮьHАС№Yдp?BgBgp??B§/ p?NNЮьHАС№Yд/ N№ њXOJ№Yдf 0D@HА#АYдLЧ8шN^NuNVяфHЧ Аp ?NMTO.*|NД|aB@ @zd ЂgB@Ав‡R`аB <NДLЧ АN^NuNVяЮHЧ Ђ*nB@> GAm GPnG@` Gam GpnG`` p?NATOR@>?Hnярp6?NAPOJЂmp0@`@яжB.язHnяь/.яшN№ FPO-@ямHnяф/.ямN№ FPO-@яиHnяр/.ямN№ FPO-@ям/.яи/.ямHnяж/<*ёN№5юЮь/N№АшXOLЧ ЂN^NuNV/<%†N№B//<*ОN№2љЮь #А]DN^NuNVяшHЧ0*n(n /<*ЪN№9’XOJ@g / / /<*ЭN№5юЮь /N№¶ЪXO`pLЧ0N^NuNVямHЧ8А*n(n N№Sв&@JgFB@ @-g B@ @+f / N№9Z`/ / N№CBPO< FgJFg/ N”XON№)J@g¬/<%†N№ґ$XOLЧ8АN^NuNVяфHЧ АN№Sв*@ -g|`$-B@ @mfp`B@ @gfp`B@<N№Sв*@N№Sв// ?N№»РЮь LЧ АN^NuNVяшHЧ Ђpь3А'$3А'"*y`А gLBgpE?NAXO3А'"Bg/ p=?NAPO3А'&/ N№ њXOB№`А yяэ'&m?9'&BgpF?NA\O*y`Д g’p?pE?NAXO3А'$~яJy`Єg,p?/ p=?NAPO3А'(>JGop??B§pB?NAЮь JGlBg/ p.0HАг€ @Сь'" PяэmV?p>?NAXO0HАг€ @Сь'"??pF?NA\O0HАг€ @Сь'"?p>?NAXO0T@HАг€ @Сь'"?p>?NAXO.N^NuNVBgN№E|TOp?N№E|TON^NuNV yяэ'$op`B@N^NuNVяшHЧ0*n(n yяэ'$m8/ / N№дXOHА/p?p@?NAЮь /<%‚p/p?p@?NAЮь `/ N№)DXO/<%‚N№)DXOLЧ0N^NuNVяфHЧ А>.*n HЂ @>fj~By`Є ->f RЌp3А`ЄJ-gF0HАе€ @Сь`А/N№ њXOHmHmN№1рPOHmN№3єXO2HБе‰ AСь`А Ђ~0`HЂ @?/<,&N№5ю\O/N№АшXON№,м&@ gT*|'hJ•gp?// N№.bЮь Ъь `дBgpя?/+N№/"PO(@/ N№АшXO/ N№ њXO/ N№-FXOLЧ8N^NuNVямHЧ0аB№YдB№XvB№]Dp?/<%†/<\DN№)ИЮь p?/<%†/<`ЪN№)ИЮь N№Sв(@/ N№дXO>| Gn,*|'hJ•g"B@-°GgЪь `м// N№јPO<JFnиB@-:0@>EюJFfn E fhN№ЎфJ@gh Eg"JFf Egp?`BgN№GFTON№Sв(@JFf" E f/-/ N№CЋPO`&/ mNђXO`Bg/ N№;2\O~` y' gJGf/<,ѕDl0RGHАе€ @СщWnBђ`и>9`ѕѕEo SF0HАе€ @СщWnSG0HАе€"@УН ‘`Ь>JGoSG0HАе€ @СН/N№ њXO`д/ N№ њXOёy`ѕl3Д`ѕ`By`ѕBybдLЧ рN^NuNVямHЧ8А*n(n / N№дXO<09`ѕS@>JGm(0HАе€ @СщWn&P?/ / N№цЮь J@gSG`Ф#ь,RXv&|%†/<%†/ / N№2љЮь LЧ8АN^NuNVямHЧ8А>.*n (n0Рy`ѕђy,PS@<JFmјy`ѕl0HАе€ @СщWn&P`#ь,RXv&|%†/ / / N№2љЮь LЧ8АN^NuNVяиHЧ8а*n(n -fzRЊ`z&L|B@> G0m G9n0Бь РG@0<`ЮS‹JEg 09,PђF</ / ?N№K„Юь LЧ8аN^NuNVяь/09bдRybд>ѕy`ѕfBybд/<%†/<%†09,PђG?N№K„Юь .N^NuNVямHЧ8АJ№Wng0/<^H/<_ў/.N№R Юь N№,м&@|N№Sв*@ gКJgД/ N№3єXO*@ gІ 'gЉ "g‚ g|p!?/ N№n\O(@ ghRFBRЊ LHЂ> G!fRЊ // ?9,PN№K„Юь `* G0m G9o G-f / / N№Kр` / / N№KPO(@/ N№ њXO*L`Ђp?/ / N№.bЮь / N№ њXO`я,JFf / N№-F`$/.N№ њXOBg/ N№.\O-@/ N№ њXO .LЧ8АN^NuNVяфHЧ0Ђ*nJ№WnfN№Iъ(yWn g09`ѕ°y`јlRy`ѕ`4/N№ њXO~09`ѕS@°Go0HАе€ @СМ0R@HАе€"@УМ ‘RG`Ш/ N№3єXO29`ѕSAHБе‰ AСМ ЂRy,PBybд09,PR@HА/N№5аXO//</ёN№}ЖPOLЧ0ЂN^NuNVяиHЧ8а>.*yWn gъ|zєy`ѕl0HАе€ @СН/N№дXOЬ@RE`Ю09`ѕзHРFR@?N№ lTO#А]D(@ g°09,Pђy`ѕ<zєy`ѕl–JGgLRF0HА/N№5аXO&@/<,j/ N№ФPOZЊ/ / N№дXO2 /0HА‘— /N№ФPOp А0HАе€ @СН// N№ФPO2HБе‰ AСН/N№дXOША/<%‚/ N№ФPOTЊRE`яdLЧ8аN^NuNVяь/ N№Sв*@ g -f -hfBg`p?N№NґTO*_N^NuNVяъ/ /<,FN№} XO*@Jg$Bg/ p=?NAPO=@яюm/<Mр?.яюN№7d\O*_N^NuNVяь/ /<,FN№} XO*@JgP/ N№ёґXOJ@fBBgN№NґTO/9]DN№дXO?/9]DN№є0\O/9]DN№ њXOB№]DN№№Ш*_N^NuNVярHЧ0А*nB@0@СщNтJg8-(yNцB@?/ N№n\O(@ gBAB@,°Af TЂ`TЊ`ТRЌ LЧ0АN^NuNVяфHЧ А*nRЌ Mg BAB@°AfмBAB@°Ag #ь,ЊXv` -яяgМRЌ LЧ АN^NuNVяфHЧ0Ђ*yNд(yNоB@9NмЂJf #НNиBЂ`rB@0@Сь]HJgRЌ`м#НNиB@ LРАJfRЌ`р ђ№Nи>JGf& 'g "f / N№Q` Jg / N№P¶XO*@#НNдХNмB 9NиLЧ0ЂN^NuNVяфHЧ8*n(n &nJy,†gшBy,†p?/<,њ/<]HN№)ИЮь p?/<,Ў/<[2N№)ИЮь p?/<,¦/<Z.N№)ИЮь p?/<,Ї/<WrN№)ИЮь p?/<,И/<X|N№)ИЮь p?/<,К/<_ўN№)ИЮь pА_ўАX|АWrАZ.А[2p?/<,С/<bжN№)ИЮь p?/<%†/<^HN№)ИЮь #МNо#ЛNт·ьbжf <,t` <%†#АNц f*|%†ХNм#НNд/9,pN№-FXON№,м#А,pByNвByNаN№Qf*@ gp?/ /9,pN№.bЮь RyNа`Ц 9,pLЧ8N^NuNVяь/ *y,pB№,pByNвByNа *_N^NuNVJ№,pg009Nв°yNаl"09NвRyNв? y,p/(N№-ѕ\O` <%†N^NuNVJ№,pg009Nв°yNаl"SyNа09Nа? y,p/(N№-ѕ\O` <%†N^NuNV?9Nв/9,pN№.\ON^NuNVяь/ *n?9Nв/9,p/ N№0љЮь *_N^NuNVJ№,pg y,pShBg/9,pN№.\ON^NuNVярHЧ0АJ№,pg y,p*h `BЂ*@ g y,p0(<`B@<~ѕFlL ;f4J-f.0R@?/9,pN№.\O(@0 y,p1@3АNаB `/ N№дXOR@ЪАRG`°BЂLЧ0АN^NuNVяь/ *n/9,pN№-FXO#Н,pByNв g0-`B@3АNа*_N^NuNVяь/ p ?N№ lTO*@ g*:№Nв;yNа+y,p+y,€#Н,€N№Sј*_N^NuNVяь/ *y,€ g6/9,pN№-FXO3ХNв3нNа#н,p#н,€/ N№ њXO*_N^NuNVяшHЧ Ђ>.*n 0HАЃьdH@HАЃь @0А0HАЃь H@@0ЂLЧ ЂN^NuNVярHЧ а>.<. :. *n/ ?N№V@\OHm?N№V@\OHm?N№V@\Op:@@LЧ аN^NuNVяшHЧА>.|-0@g|h0@g|v0@g|d0@ g|mHЂАYмprАYн0@gp-`pwАYо/<-/<YпN№ФPOLЧАN^NuNVяфHЧа>.0@<0к@@:0HАе€ @Сь,Ш//<Z N№ФPO/<Z?N№V@\Op АZАZ9ZHЂ @0fp АZLЧаN^NuNVярHЧр>.0к@@?<0а@ж@@:0@гH8/<Z???N№V~Юь LЧрN^NuNV/<-c/<YщN№ФPON^NuNVярHЧ а../N№5аXO*@/ N№дXO<zpђF°Eo0RE0@СьYмp Ђ`ж0RE0@СьYмќfрp АZ LЧ аN^NuNVяь/ *np*?NATO:Ђp,?NATO;@*_N^NuNVяиHЧш>.,. :.0RG0@Сщ_ћHЂ8 y_ћРЗHЂ6JDgpJCgl D9nf D0m` C9nZ C0mT0@0Бь РC@0HА-@яьJEf .яьвЂ-@яь` Ef®Pяь .яьлЁА†-@яь FЂА№`ЦЂ®яь#А`ЦLЧшN^NuNVяшHЧ0*|`Ц /N№X†XO nJg/.N№дXO@?N№ lTO(@#А_ћJ№_ћg nR®РfфSЊ y_ћAи±Мcp А`мp?/<аBgN№X¬POp?/<p?N№X¬POp?/<~p?N№X¬POp ?/<шp ?N№X¬POp?/<аp ?N№X¬POBgp/p?N№X¬PO/9`Цp?NN\O?-p-?NAXO?p+?NAXO/9_ћN№ њXO`0?N№WHTO?-N№WАTOB9Z/<Z N№3єXO#А]DLЧ0N^NuNVN№Sв/N№Y\XON^NuNVявHЧ8Ђ>.*yWd gL0БХHАРЌ\Ђ(@&LAл -Hяь KCи Aояь1!!!!! nяьCи KAи 1!!!!!Cояь nяьAи 1!!!!!LЧ8ЂN^NuNVяШHЧ8а>.<. *n (nHnяюHnяьHnяш/ ?N№*ОЮьJ®яшg„JGg—Лz--|%‚яр`&|ZРz-|%†яр/ ?.яь/.яшN№*Юь ??.яь/.яш/.яр?N№+„Юь-@яф/.яшN№ њXOJ®яфg / N№ њXO` -MяфpЩ#АYд(®яфLЧ8аN^NuNVямHЧ8p?N№ lTO-@яшN№,м(@J®яшg fBЂ`Фp ?N№,TO-@яьp/?NATO&@Kлp1?/<-npN?NAPOJЂfVJgF .fJ-g: -.g2p?Bg/ N№4@\O// N№.bЮь Hk/.яьN№,ZPO-@яьpO?NATOJЂgЄJlf #ь-rXv#ояьWdHl/,?BgN№[:Юь nяш Њ nяш!nяьB№Wd .яшLЧ8N^NuNVяфHЧ8*n(m/N№ њXO&m g /N№-FXO/+N№ њXO/ N№ њXO/ N№ њXO LЧ8N^NuNVяфHЧ8*n g6(yZ* g,&L(l g/ /N№јPOJ@fж g/ N№]XO'@LЧ8N^NuNVяь/ *yZ* g**m g/ N№]XO*@`о/9Z*N№ њXOB№Z**_N^NuNVярHЧ8ЂJ№Z*f N№xё#АZ*N№¦*@/ /9Z*N№wјPO&@ g Jng(k/ N№ њXO`&/ N№]^XON№[ю(@/ / /9Z*N№x\Юь B№]D g8 T0R@>?N№ lTO#А]DJ№]Dg? T/(/9]DN№ЌмЮь LЧ8ЂN^NuNVярHЧ8ЂJ№Z*gvN№Sв*@ -fN№]¬``Jg / N№]^XO`P yZ*(h gB&l S>J«g"k k0БйЮ@/?/<-‡N№5юЮь /N№АшXO(l`єLЧ8ЂN^NuNVяшHЧ0*n/ N№дXOHАРЌSЂ(@№Нe \g™М`№Нc ,\яяfSЊ`рB LЧ0N^NuNVяЬHЧ8ЂB®яр/.N№_:XO-@ям/.N№:XO&@(@ gxp\?/ N№4\O*@ gNHmN№3єXO(@ -:яяfRЌB*K gМJfЖ/.N№:XO-@p1?/.pN?NAPOJЂg†/.N№дXO @n~ n (:fr n (\g nJ(f\ nB@?N№B/N№n\OJЂg>p/?NATO-@яр nярp@ nярBЁBЂ nяр1@ nяр1@` p/?NATO-@яр/.N№ њXO``/ /9Z*N№wјPO-@яьgя& nяь-hяф/ nяф P/(N№-pPO>JGm$ nяф-hяш nяш0БЗHАР®яшЂ&@-Kяр/ N№ њXO/ N№ њXOJ®ямg nямp\Ђ .ярLЧ8ЂN^NuNVямHЧ0а*n>. | 0@g|!0@g|#0@g|\p.?/ N№4\O(@ g,RЊz El"0HАЂ'*// N№јPOJ@fp*`XE`Ш0LЧ0аN^NuNVяшHЧ0*n/ N№_‚XO(@ fB@`B@,?/ N№aD\OLЧ0N^NuNVяь/ *n/ N№aѕXOJ@gp `B@*_N^NuNVяь/ *n/ N№aѕXO @\fp`B@*_N^NuNVяЪHЧ8р*nJ9bJgp`B@89b$HЂ:JDg0<я`p1>B®яцB№]DN№,м(@ g–JfBgN№]мTO 9]D-@яц*@xJgф/ N№_‚XO&@ f/ N№дXOR@ЪА`ЪB@+?N№VРTON№X /+N№X&XO?+N№WHTO?+N№WАTOp АZB9ZBg/<Yм/ N№.bЮь Bg/ / N№.bЮь |JEgB@+?/ N№aD\O2RF0AСО@яъJDf0RF0@СОp @яъ0RF0@СОp @яъ0RF0@СОB(яъ?Hnяъ/ N№.bЮь `я /.яцN№ њXO*l</ N№ њXOJDf#Н]D`/<]D/ ?p?N№[:Юь 09W`SyW`J@o0J№]Dg(/9]DN№3єXO*@/p?N№e|\O/ N№ њXOLЧ8рN^NuNVяжHЧ8Ђ*nJg~`BgN№]мTO*y]D~JGf J9b$gЬJ9b$g <aѕ` <aш-@яшN№,м-@яьJ®яьgм(MB.ячJg‚JGg / N№:XO` &@/ nяшNђXO@я@я@яцg4Bg/ /.яьN№.bЮь . яцfB.яцp?Hnяц/.яьN№.bЮь JGg / N№ њXO/ N№дXOR@ША`я|JGf / N№ њXO nяь*h/.яьN№ њXOBgpя?/ N№/"PO#А]D09W`SyW`J@o / BgN№e|\O/ N№ њXOLЧ8ЂN^NuNVядHЧ8А>.*n g0(MN№Jg"N№)J@fJGgШь-p ?/ N№n\O&@ gшB/ N№bXO<JFgВ/<-Ќ/ N№јPOJ@g¬/<-Џ/ N№јPOJ@g–B№XvN№¦-@яь/ N№VXOJ№YдfZJ№XvfRN№¦-@яш/.яш/<-’N№5юPO/N№АшXO/.яшN№ њXOJGg/<%†N№bB` /<%†N№d*XO/.яьN№VXO/.яьN№ њXOJGg p ЂIл`юи/ N№дXOR@ША`юЦLЧ8АN^NuNVяь/ p?/<%†/<aЮN№)ИЮь N№Sв*@ g -fp?Hm/<aЮN№)`ФJgp`B@3АW`J9b0g3ьяW`J9bJfJ9b*g / N№bB`/ N№d*XO*_N^NuNVяфHЧ А*n>. JGmP0SGJ@gHN№)J@gpя#АYдRyNю`,p?NATOJЂgЪHЂ?p?NAXOHЂ @ fёN№hъ`°LЧ АN^NuNVяшHЧ0*n(n / N№} XO*@ gJf*L/ N№дXO?/ N№gZ\OLЧ0N^NuNVяь/ ByOByNюB№O/<-љN№}@XO3АOJyOnp73АO/<%†/<-ЎN№gЖPOJyOg B№O `Љ/<%†N№Y\XO/9O/<-Ё/9]DN№2љЮь *@/<-і/<-«/ N№2љЮь #АO / N№ њXOJ№O gp0?/9O N№4\O#АO/9]DN№ њXOB№]D*_N^NuNVp3АOJ№O gt 9OR№OJЂg/<-Й/<-ВN№gЖPO/9ON№5аXO//9ON№ФPO/<-М/9ON№¦PO/9O N№дXO?/9O N№gZ\ON^NuNVяь/ *nJyNюfB09ORyOHАЃщOH@J@fN№hъ?. / N№gZ\O/<%‚/<-СN№gЖPO*_N^NuNVяшHЧ Ђ*nBg/ p=?NAPO>JGmZ#НO/9ON№дXO3АON№h /<i†?N№7d\O/<-Я/<-ШN№gЖPOJ№O g/9O N№ њXOLЧ ЂN^NuNVByO/<iа/<-бN№CЋPON^NuNVp3АO/<iа/<-зN№CЋPON^NuNVяшHЧ0*nRyO/ /9NъN№ZPO @fњ/ N№дXOРyO@?N№ lTO(@ gv/9O/ N№ФPO LРщOp Ђ09OHА/N№5аXO/09OR@HАРЊ/N№ФPO/<-л/ N№¦PO/ / N№¦PO/ N№АшXO/ N№ њXOLЧ0N^NuNVяшHЧ Ђ*nBg/ p=?NAPO>JGl #ь-оXv`6#НO/9ON№дXO3АOByOByNю/<j¦?N№7d\OLЧ ЂN^NuNVюмHЧ8ЂN№Sв/N№3єXO*@Jngj/ N№дXOгHR@?N№ lTO(@&@ gJp?/<-эHnяN№)ИЮь -MюьgHЂ0@СОJ(яgp\АHЂА`вB/.юьN№ њXO*K gN/ N№ЋґXO#АNъ/ N№ њXOJ№Nъf pя#АYд`"/<kr/<.N№CЋPO/9NъN№ њXOLЧ8ЂN^NuNVBgN№kЪTON^NuNVp?N№kЪTON^NuNVяь/ *nBg/ /<. N№5юPO/N№А~\O*_N^NuNVяшHЧ0*n/ /9`ёN№wјPO(@ g ,`BЂLЧ0N^NuNVяфHЧ8/. /<.$/.N№2љЮь &@/. N№3єXO(@ g. g*p.?/ N№4\O*@ gB/ / /9`ёN№x\Юь LЧ8N^NuNVямHЧ8Ђ*nN№¦-@яь/ N№VXOJ№XvfљJ№YдmђBgN№]мTO(y]D gz/ N№дXOHАРЌSЂ&@ \g—Л`Bp?/<.&/ N№ЄЮь >Jg$0SGJ@o/ / N№mBPO/ N№дXOR@ША`Ш/9]DN№ њXOB№]D gp\ЂJ®яьg/.яьN№VXO/.яьN№ њXOB№XvB№YдLЧ8ЂN^NuNV?./9`ёN№z\O#А]DN^NuNVяфHЧ8N№Sв*@JgR/ /9`ёN№wјPO&@ g/+/ /<.8N№5юЮь `/ /<.NN№5юPO(@/ N№3єXO#А]D` p?N№n TOLЧ8N^NuNVярHЧ8ЂJ№`ёg/9`ёN№xдXON№xё#А`ё/<.dN№{JXO*@J№`ёgR gN/<^H/<X|/ N№R Юь &@(k>+JGo(SG0?/ N№-ѕ\O*@ gJg/ N№m¬XOSG`ФLЧ8ЂN^NuNVp?p?NMXOJЂgp?p?NMXO`вN^NuNVJ№O:g4Jy.‚g,/9O:N№ њXOB№O:"|O6 yO6Aи1!!!!!!!N^NuNVJ№O:fм/<.jN№}@XO3АO>JyO>f3ьO>/<.ж/<.jN№}ЖPO/9O:N№ њXO?9O>N№ lTO#АO:J№O:g€Bgp?NNXO#АO6 yO6Cи |O61!!!!!!! yO6 №O: yO61yO>09O>HАЃь yO61@ 09O>HАЃьБь yO61@ yO6Bh yO6BhN^NuNVяшHЧ Ђ*nHЂ@0>JGm G o pя3А.„`B0HАг€ @Сь.ђ3Р.„?9.Ћ?9.Њ?9.Љ?9.€?9.†?9.„p?NNЮьLЧ ЂN^NuNVяш/Jy.„lX/<.лN№} XO/N№q Gg HnяьN№q9.„pя3А.„N№q° yяя.„f3З.„ yяя.„gN№r.N^NuNVяь/ J№O fZp?NNTO#АO?<ЃN№ lTO*@#АO@ f 9O` @яЂ#АO N№Ћ#АODByO$p3АO&N№rJy.‚g&By.‚/</ G2fN№Ћ"`N№ЋH~?N№¬JTOp?p?N№ЭьXO.N^NuNVярHЧ8Ђ/</?N№} XO&@*@/ N№дXO @l &|/C *@/ N№дXOHАРЌWЂ(@~ GlB0HАг€ @СьOH»Мd&-H‚-HЃA0йIHЂ@0бHРAРB@0`B@0ЂRGXЌ`ё/<OHp?NN\OLЧ8ЂN^NuNVяш/N№np?NNTO> yWNBh$ yWNBh yWNBh yWNBh6 yWNp1@2 yWNBh4 yWNCояь!I.0HАй€ @Сь.®=Pяь0HАй€ @Сь.°=Pяю0HАй€"@Уь.І yWN1Q&0HАй€"@Уь.ґ yWN1Q(0HАй€"@Уь.¶ yWN1Q*0HАй€"@Уь.ё yWN1Q,0HАй€"@Уь.є yWN1Q0HАй€"@Уь.ј yWN1QN№„.N^NuNVяь/ /</®N№} XO*@ gFJgB-HЃHЂ@0йHРA@0А.г-HЃ-HЂ@0йHРA@0А.д*|.в`*|.ЮJ-gJ-g/ p?p?NNPO*_N^NuNV/</TBgp?NNPON^NuNVяшHЧ0*n ™М g (n g(l g/ /N№јPOJ@fи LЧ0N^NuNVяфHЧ8*n gL(n gD&L(l g/ /N№јPOJ@fж g&'l/N№ њXO/,N№ њXO/ N№ њXOLЧ8N^NuNVяь/ J®gJJ® gDJ®g>/. /.N№wшPOp ?N№ lTO*@ g*® +n n+h n!M*_N^NuNVяь/ p ?N№ lTO*@ g p+@+@*Ђ *_N^NuNVяшHЧ0*n g((m/N№ њXO/-N№ њXO/ N№ њXO*L`ФLЧ0N^NuNVяоHЧ8Ђ*n fBЂ`ЖN№,м&@ gо n lp `p=@яюB.яяJn fp`B@>(m gЉ?// N№.bЮь Jn gjBgHnяю/ N№.bЮь n fp?/<%†/ N№.bЮь Bg/,/ N№.bЮь n l Bg/<%‚` p?/<%†/ N№.bЮь (l`яt LЧ8ЂN^NuNVяфHЧ8*n?. / N№y$\O(@ fBЂ`4&lJn fBgpя?/ N№/"PO&@/,N№ њXO/ N№ њXO LЧ8N^NuNVяшHЧ0N№Sв*@Jg`N№Tn(@Jg>J№/Vf N№xё#А/V/ N№3єXO// N№3єXO//9/VN№x\Юь `./ N№{XO/N№3єXO`p?/9/VN№z\O#А]DLЧ0N^NuNVN№Sв//9/VN№wшPON^NuNVяшHЧ0*n/ /9/VN№wјPO(@ g ,` LЧ0N^NuNVяшHЧ0*n/ /9/ZN№wјPO(@ g ,`BЂLЧ0N^NuNVяшHЧ0*n(n J№/Zf N№xё#А/Z/ N№3єXO// N№3єXO//9/ZN№x\Юь LЧ0N^NuNVяь/>.JGgp`p> Gf$/<04/<0*N№} XO/N№јPOJ@f~?/9/ZN№y$\O.N^NuNVяь/ p?N№{РTO*@#н]D/ N№ њXO*_N^NuNVяшHЧ0N№Sв*@N№Sв(@Jg/ / N№{|PO`N№|&LЧ0N^NuNVN№Sв//9/ZN№wшPON^NuNVяфHЧ8*n gJJgF(Mp=?/ N№n\O*@ g0BGнJfR‹/ / N№{|POp=Ђ/ N№дXOR@HАР‹*@`¶LЧ8N^NuNVяшHЧ0*n/ /90N№wјPO(@ g ,` <%†LЧ0N^NuNVяшHЧ0*n/ N№} XO(@/ N№юXOLЧ0N^NuNVяь/ J№0gH y0*h g,/-/-///<07N№5юЮь/N№)DXO*m`Р/<0IN№)DXO*_N^NuNVярHЧ8Ђ*n(n J№0f N№xё#А0/ N№3єXO(@/ / N№1рPO/ / N№3єXO*@//90N№x\Юь ~ G l~0Бь @Сь/Д// N№јPOJ@fZ0Бь @Сь/ВJPg0/ N№3єXO*@/ p?/ N№4@\O/N№{|PO/ N№ њXO0Бь @Сь/ѕ&P g N“`RG`я~LЧ8ЂN^NuNVяшHЧ Ђ*n>. 0HА/N№5аXO// N№}ЖPOLЧ ЂN^NuNVяш/ N№Sв*@Jg"HnяьN№Sв/N№ЁфPO// N№}ЖPO`p?/90N№z\O#А]D*_N^NuNVN№Sв//90N№wшPON^NuNVяфHЧ0Ђ*n>. Ry_њ0HАС№`° #fB@-@яП3А0`hJy0m` y0nVp ?/ N№n\O(@ gB№Нg>BHlN№3єXO// N№3єXO/090HАе€ @Сь0/N№x\Юь p ЂLЧ0ЂN^NuNVяшHЧ Ђpя3А0/</jN№} XO*@JgX~ Gn20HАе€ @Сь0/N№xдXON№xё2HБе‰ AСь0 ЂRG`И/<R/ N№єЮPO/<%‚N№)DXOLЧ ЂN^NuNVярHЧ0А>.<. p?0HАЂ/N№5d\ORЂ*@/ 0HАе€ @Сь0/N№wјPO(@ g ,` <%†LЧ0АN^NuNVямHЧ8АN№Sв*@ gJfB@`¤3ь@`ґ/<`ґN№6иXO#АYЂJ№YЂgЦ np 3АOВB№OЮByOРB@3АOМ3АOОByOКB@3АOИ3АOЖ3АOДpя3АOѕ|/<\8N№€XOJ@g#ь0¶Xv|`ИN№q°N№p@pя?pя?pя?pя?Bgpя?p?NNЮь/ /.N№ЊљPOHЂ @rf/<0С`/<0ЯN№} XO(@ gFJgBp\?/ N№4\O&@ f&M/ / /<0нN№5юЮь &@/ N№дXO?/ N№„d\OHЂ @rf / N№†ф`/ N№ЉтXO<pя?pя?pя?pя?p?pя?p?NNЮь/9YЂN№ њXOJFf/9XvN№‚¦XON№oь0LЧ8АN^NuNVяшHЧ Ђ*nJyOѕm?9Oѕp>?NAXOpя3АOѕ~ Glp?p?p?NM\ORG`ж~ Glp?p?p?NM\ORG`жBgN№ѓ®TON№oЦ#НXvB@LЧ ЂN^NuNVяшHЧАB§p ?NA\O. y0І y0® Ђ2, y0® °†mф y0Іяч/p ?NA\OLЧАN^NuNV y0®#Р0ЄN^NuNV/<ѓ~p&?NN\O 90ЄN^NuNVJng(/<ѓ~p&?NN\O0.бHH@B@H@Р№0Є#А0¦`B№0¦N^NuNVN№)J@gpя?/<\8N№–\Op?p?NMXOJЂgp?p?NMXO`8J№0¦gѕ/<ѓ~p&?NN\O 90Є°№0¦mўpя?/<`ИN№–\O`ЋN^NuNVяфHЧ А*n>. |јGlHЂ?p?p?NM\ORF`жLЧ АN^NuNVяфHЧ0Ђ*n(n rfB@`p> GfBg/ p<`Bg/ p=?NAPO3АOѕJyOѕl/<0хN№‚¦XO` Gf/<1`/<1N№·tXOpLЧ0ЂN^NuNVяфHЧИ>.N№ѓк<ѕFfњRyOЖRyOТByOШyЂOА№ЂOЮ/9OЮN№Ќ”XO09OА°y`ґfBByOА69`ґHГ/9YЂ09`ґHА/?9Oѕp@?NAЮь °ѓg/<1-N№‚¦XO`:N№oЦp?p?p?NM\O`"RyOМ09OМ?p#?N№ЌXOp3АOЬLЧИN^NuNVяшHЧАN№ѓк3АOФN№ѓк3АOЦRyOИ09OИ?p?N№ЌXO09OЦРyOФ @яfЊ09OТR@@я°yOФfL~<9OА09OА@Ђ°Fo*N№ѓк yYЂРЖЂ yYЂРЖBA0РA@я>RF`И?N№…TO`L09OТ@я°yOФfN№oЦp?p?p?NM\O`"RyOМ09OМ?p#?N№ЌXOp3АOЬLЧАN^NuNVяфHЧ €*n/<1Y/ N№„POJ@fB@`ЋByOАB@3АOШ3АOТN№oЦp?p?p?NM\O/<`ИN№€XOJ@g8RyOШ09OШ @dRyOО09OО?p0?N№ЌXO`Є/<1[`~ Gg~ yOШgtByOЬ?9OВN№ѓ®TON№ѓк> Gg Gg Gfж Gf /<1…`В GfN№…т yOЬfњRyOШN№oЦp?p?p?NM\O`я~ Gf~ yOШdtp?p?p?NM\O69OАHГ/9YЂ09OАHА/?9Oѕp@?NAЮь °ѓg/<1§`6?9Oѕp>?NAXOBgN№ѓ®TO/9OЮ/<1їN№·tPOp`/<1ЦN№‚¦XOLЧ €N^NuNVяфHЧаByOЪ?9OВN№ѓ®TO/<`ИN№€XOJ@g> y(OЪd"RyOО09OО?p0?N№ЌXON№oЦ`ґ/<1эN№‚¦XO`RyOИ09OИ?p?N№ЌXOp?p?p?NM\O?9OТp?p?NM\O09OТF@?p?p?NM\O?<Ђ 9YЂ/09OАHАС— /N№„d\O~:9OА09OА@Ђ°Eo yYЂРЕB@Ю@RE`а?p?p?NM\ON№oЦRyOДRyOЪN№ѓк< FgRyOР09OР?p#?N№ЌXO Ff /<2'`я Fg yOЪfюћ Ffp`B@LЧаN^NuNVяь/ ByOЪ?9OВN№ѓ®TO/<`ИN№€XOJ@g, y(OЪd"RyOО09OО?p0?N№ЌXON№oЦ`ґp?p?p?NM\ORyOЪN№ѓк @g yOЪf€BgN№ѓ®TO yOЪf <2K` <2†*@/9OЮ/ N№·tPO*_N^NuNVяфHЧ А*n/<2™/ N№„POJ@fB@`|p3АOТ|ByOЪ/<`ИN№€XOJ@g> y(OЪd"RyOО09OО?p0?N№ЌXON№oЦ`В/<2›N№‚¦XO`?9OВN№ѓ®TON№ѓкHЂ @gHЂ @g 0RF @(mя|HЂ @f/<2Е`¬ F(m/<2й`ћN№oЦ?9OВN№ѓ®TO/9YЂ09`ґHА/?9Oѕp??NAЮь 3АOФgV yOЪgLByOА/9OЮN№Ќ”XON№€®yЂOА№ЂOЮRyOТ09OА°yOФdЋ yOЪfј`‚?9Oѕp>?NAXOpя3АOѕ yOЪf /<3>`юдN№Љ4pLЧ АN^NuNVяфHЧ0Ђ*n(n p7?/<0N/<OhN№ЌмЮь ХOњ/ N№дXO> Go~?/ /<OџN№ЌмЮь 0GСьOџB/<OhN№·tXOLЧ0ЂN^NuNVяшHЧА>.<. 0GСьOj0HАЃь H@@0Ђ0HАЃь <0GСьOi0HАЃь H@@0Ђ0HАЃь <0GСьOh0HАЃь H@@0Ђ/<OhN№·tXOLЧАN^NuNVярHЧ а../N№5аXO*@/ N№дXO:pђE<0RF0@СьOhќfрp АOw/<OhN№·tXOLЧ аN^NuNVяфHЧ0Ђ*n(n >. g g JGoSGЬQПяьLо0ЂяфN^Nu Nu "i!iHяц!iLяк1|яТ1|1яЦ1|ЂяШNu "i!iHяц!iLяк1|яТ1|яЦ1|яШNu "hBi3|"hBQ  N№w¤Nu  N№wNu 0(яЦR@HАNuB5Nщ%Nщ%@NVяоHЧ8ЂJ®f/<3jN№lдXOBЂ`D#оOвp3АOжB№Oо#ьOиOк?<њN№—JTOHnяюBgN№ђ \OJЂgј №яOоm/<3x` 09Oр@Z?N№ lTO*@ f /<3‡`я~#оOвp3АOжAнX#ИOк?<њN№—JTOHnяюBgN№ђ \OJЂgяLB-PB-QB­RBmVIнY/ N№ќ XO @JflIм flP` fR-Q0.яю@gF—Л~ g6 f"HlN№дXO°GmGмHlN№дXO>/ N№ќ XO(@`Ж+KR;GV LЧ8ЂN^NuNVяоHЧ8Ђ n p0ЂJng4 y Oжm /<3”`*>9OжRyOж0@?N№—TO*@`›НHnяюN№‘„XO(@ gь g/ / N№—ЖPO`*L0.яю@f n Pяю0.яю@ n ЃP yOв |fR№OвHnяюN№‘„XO(@ gў`ЁJng 0@?`BgN№—TO&@/ / N№—ЖPO(M g/ / N№$PO/ N№ќ XO(@`вJng yOвR№Oв )g /<3 `. `4Jnfц yOвJgм yOв )f/<3­`/<3єN№lдXOBЂLЧ8ЂN^NuNVятHЧ8 nBPp?N№—TO*@™М yOвJg` yOв |gT yOв )gHHnяюN№’(XO&@ fBЂ`F0.яю@ nЃP f0.яю@ nЃP` / / N№—ЖPO(K`– fp ?N№—TO" LЧ8N^NuNVятHЧ0ЂHnяюN№”HXO*@ fBЂ`ъ yOвHЂ @*g HЂ @+gHЂ @?g n0®яю`Ж0.яю@fHЂ @?g/<3ЖN№lдXO`¤HЂ @+gp`p n0ЂHЂ @*f0.яю@g/ p ?N№—x\O`2HЂ @*fd/ p?N№—x\Op?N№—TO// N№$PO/ / N№$POp?N№—TO// N№—ЖPOp ?N№—TO// N№—Ж`ВHЂ @+f0.яю@g/ p `яjHЂ @+fFp?N№—TO(@/ / N№—ЖPO/ p?N№—TO/N№—ЖPOp?N№—TO// `яtHЂ @?fL/ p?N№—x\Op?N№—TO// N№—ЖPOp ?N№—TO(@/ / N№—ЖPO/ / N№$POR№Oв yOв *g yOв +g yOв ?f /<3а`юX LЧ0ЂN^NuNVятHЧ А nBP yOвR№OвHЂ | к2< `XH°XWЙяъ PNР`†p?N№—TO*@`tp`мp?N№—TO*@ nP`V yOв ^fp?N№—TO*@R№Oв`p?N№—TO*@ yOв ]g yOв -f yOвR№OвHЂ?N№—JTO yOвJgђ yOв ]g‚ yOв -fАR№Oв yOв ]g yOвJfp-`° yOвB@(яюR@> yOвB@<0R@°Gl/<3лN№lдXOBЂ`xѕFn?N№—JTORG`оR№Oв`яhBgN№—JTO yOв ]g/<3ь`ёR№Oв`юТHnяюp?N№ђ \O*@ g 0.яю@ nЃP` /<4 `я~/<4`яt yOвJf /<4*`я`p?N№—TO*@ yOвR№OвHЂ?N№—JTOBgN№—JTO`юLS№Oв/<45/9OвN№3‚PO>JGn /<4A`я yOвРЗ Go HЂ @*gHЂ @+g HЂ @?fSG nP Gf nPp?N№—TO*@JGo yOвR№OвHЂ?N№—JTOSG`ЮBgN№—JTO LЧ АN^NuNVяшHЧ0*yOк»ьOиfV№Oо`(M0.АBB#МOк LЧ0N^NuNV №OиOкg yOкR№Oк0.Ђ`R№OоN^NuNVяфHЧ8 №OиOкfV№Oо`**yOкV№Oк(yOк»о c%`ц&n 0.АBBLЧ8N^NuNVяфHЧ0Ђ ®OиgD*n/ N№ќ XO(@ g*L`м f ђ® ` . ђЌ>0а@@я@0@я@LЧ0ЂN^NuNVJ®g( ®Oиg n f/. nHhN№—ЖPON^NuNVяфHЧ8*n(n g f/<4SN№lдXO`ѕB@-X @њg/<4b`аJ­Rg<&L mRHЂ?/ N№n\O&@ g?-V/-R/ N№цЮь J@gR‹`К gf#МOцJ-Qg/ / N№™JPO`N&LJ-Pg0-PHЂ?/ N№n\O&@ g,/ / N№™JPOJ@gp`R‹`Р/ / N№™JPOJ@fиJfмB@LЧ8N^NuNVяфHЧ0Ђ#о Oт#оOъ .Ђ(#АOю*n .Ђ((@~ JGoBќBњSG`ф nHhYN№™ЖXOJ@g n ® n!yOт(p`B@LЧ0ЂN^NuNVяиHЧ0а*n g./ N№ќ XO-@яьHЂ @'bPеH0@Сь!8 PNР*nяь`О/<4†`8 yOт±щOцgв`. yOтJ`р yOтJgR№Oт`АIн yOтHЃHЂ°Afш/ N№дXO> Go?/9Oт/ N№цЮь J@fМ yOтРЗ#ИOт`яl yOтJg® yOтHЂ?HmN№n\OJЂfяz`Њ yOтJgЂ yOтHЂ?HmN№n\OJЂgяL`^HЂ@>(yOт/.яьN№™ЖXOJ@g<0HАе€ @СщOъJђf0HАе€ @СщOъ Њp`HЂ@>(yOт/.яьN№™ЖXOJ@gт0HАе€ @СщOюJђfЖ0HАе€ @СщOю`ґ nяь g Aн-Hяь`юl(yOтHmN№™ЖXOJ@fЉ#МOт/ N№ќ XO*@ gЊ gМ`‚~ nяь f nяь(  fB@`p:(yOтHmN№њVXO<јEmFJgHЃ yOтHЂ°Af/.яьN№™ЖXOJ@fяSF0HАРЊ#АOт`Д/<4tN№lдXOB@LЧ0аN^NuNVяфHЧ0Ђ~*yOт .VЂ(@ nHЂW@ @bnеH0@Сь!Ш PNР`n/ N№дXO>ЪЗ`^HЃHЂ°AfRRGRЌ`оJgHHЂ?/ N№n\OJЂg4RGRЌ`вJg*HЂ?/ N№n\OJЂfRGRЌ`в/<4™N№lдXO~#НOт0LЧ0ЂN^NuNVяцHЧ0*n»ьOиfBЂ`D-HЃ-HЂ@ябHРA@я=@яюJnяюgЪ f /0.яюHА‘—` /0.яюHАС— LЧ0N^NuNVяфHЧ8*n*U gP/- / /<4ИN№5юЮь /N№)DXO(m gТ0T@?/ /<4ЭN№5юЮь /N№)DXO(l`ФLЧ8N^NuNV/<4ёN№ќpXO/<4хN№)DXO/<4ЄN№ќpXON^NuNVяфHЧ8*n .XЂ&@(k g №Нd&L(l`р'M+Lp0Р‹TЂ°Ќf 'L0T@СS*Kp0РЌTЂ°Њf +l0T@СULЧ8N^NuNVямHЧ8А>.p0,†/pH?NA\O*@ fBЂ`NJy4Жg <4ё` <4Є(@&T·Нc(K&S`ц(Ќ*‹+F p;@Iн +@ ЂUЂ8ЂB¬ LЧ8АN^NuNVяиHЧ8а>. GяяgЁRG0 @d~GяюJy4Жg <4ё` <4Є&@z&S gVIл*l g0°Gd(M*m`о g20ђG< Fcp0РЌTЂ)@(l0@яю8Ђ:‡)m TЂ`(JEg¦` G?тc?`?.p3А4Ж?N№ћцTO*@By4Ж LЧ ЂN^NuNVяшHЧ Ђ*np3А4Ж/ N№џєXO>By4Ж0LЧ ЂN^NuNVяшHЧ0*|4Є(U g*”/ pI?NA\O`мLЧ0N^NuNVяфHЧ0Ђ>.*n g / N№юXO`B@ @gp`B@3А' p?N№ lTO(@ g,8‡9y' Bl)yaЪB¬B¬ )y50#М50LЧ0ЂN^NuNVяь/ *y50»ь5g6#н50J­ g /- N№-FXOJ­g /-N№ њXO/ N№ њXO y503и' *_N^NuNVяшHЧ ЂN№Ўp @> GgJGfмLЧ ЂN^NuNVJy54op`B@N^NuNVяь/>.p3А560HА#АYд.N^NuNVяаHЧ0А*n|B@ @d8B@HАг€ @СОB@HАг€"@Уь'"1QярB@HАг€ @Сь'"pь0ЂR`ѕ-yaЪяшRy54 y50Jhg/<5`/<5p?N№ ц\O m-Pяь nяь±нg’N№)J@g pэ#АYд`‚/.яьN№БъXO/N№3єXO(@/<58N№}@XOJ@g Bg/ N№А~\O#ояьaЪBy56Bg/ N№#~\O y56g&Jy56g 9aЪ` yaЪ -@яь`яfB№YдSy54N№ЎР#ояшaЪ|B@ @d$B@HАг€ @Сь'"B@HАг€"@УО0©ярR`ТLЧ0АN^NuNVятHЧ0Ђpя#АYдJ®g nJg?<я/.pN?NAPOJЂg#ь5CXvpЯ`ј?<N№72TOJ@gpя`¦/.N№Б~XO(@ f #ь5XXv`Ьp?/<%†N№А~\OJ® g n Hh/<5x/.N№2љЮь `BЂ*@/<bж/<Z./ N№R Юь /N№ XXO/ N№ њXO/ N№ў,XO/ N№БЄXON№ –09YжLЧ0ЂN^NuNVярHЧ0А>.*n gv?<я/ pN?NAPOJЂfd Gef|`\p/?NATO(@B@,< GdfF`> Gff0@fp`B@<`& GhfF` GvfF` GmfF `|JFg <5` <5LЧ0АN^NuNVярHЧ0Ђ*nB@ @{f0HnяьN№Sв/N№ЁфPO(@ nяь }g–#ь5zXv`€B@ @0e B@ @9cdB@ @-fN№Sв/B@-?N№¤Є\O(@`@B@ @!f4N№Sв/N№ҐPXO(@ g/ N№юXOJ@g <5`Ж <5`ѕ(M/ N№3єXO(@ LЧ0ЂN^NuNVяаHЧ8р*n(n z~x+(ј%† gЮJgШ/ N№ҐPXO-@яь0REJ@f/.яьN№3єXO&@J®яьg/.яьN№юXOHА,/.яьN№ њXO`|B@@% @ bNеH0@Сь!р PNР`>Ю†`:ћ†`6//N№ NPO`&J†g//N№Ћ`мJ†g //N№в`Ь <я.N№Sв(Ђ TB@?/<5„N№4\OJЂg N№Sв*@`я Ef `/N№5аXO/N№3єXOLЧ8рN^NuNVядHЧ8р*n(n &n,/ N№юXO:/ N№Sв/N№¦(PO/N№юXO8B@ @fB@ @=fєDmд`КB@ @>f JfєDoР`¶B@ @=fB@ @=fєDf¶`њB@ @!fB@ @=fєDgњ`‚xJDg/<5`/<5N№3єXOLЧ8рN^NuNVядHЧ8р*n(n &n,/ N№юXO:/ N№Sв/N№ЁфPO/N№юXO8B@ @&fB@ @&fJEg&JDg"p8`"B@ @|fB@ @|f JEfвJDfЮB@`ЬxJDg/<5`/<5N№3єXOLЧ8рN^NuNVярHЧ8*n(n Hnяь/ N№¦(PO&@ nяьB@ |"2<`XH°XWЙяъ PNР`(/ /.яь/ N№§LЮь `/ /.яь/ N№ЁJ`к(®яь LЧ8N^NuNVяш/ y50JhgHnяьN№Sв/N№ЁфPO/p`/<5p?N№ ц\O.N^NuNVярHЧ0Ђ*y50 UfL>-N№ЎpJGg/<5p?N№ ц\O`:N№Sв(@JgHnяь/ N№ЁфPO` <5(@/ p`К Ug #ь5ЉXvLЧ0ЂN^NuNV y50 Pg y50 PfN№Ўp` #ь5љXvN^NuNV y50Jhg/<XrN№Sв/N№ЁфPO/`/<5p?N№ ц\ON^NuNV y50 Pf* y50Jhg y50#иaЪp3А56N№Ўp` #ь5«XvN^NuNVярHЧ0N№Sв-@яьN№Sв(@ {g #ь5їXvN№,м*@ y50JhgdN№Sв(@ g< }g6Jf #ь5ЙXv`&p?Hnяш/ N№ЁфPO// N№.bЮь (nяш`АBg/-N№-ѕ\O//.яьN№}ЖPO y50Jhg/<5`/<5p?N№ ц\O/.яьN№3єXO y50!@ y50!M y50p1@LЧ0N^NuNVяшHЧ0(y50 TfJJlg<0,Rl? l /(N№-ѕ\O*@ gJg/ /,N№}ЖPO#мaЪ`N№Ўp` #ь5УXvLЧ0N^NuNVяфHЧ А>.p3АYЮBy`ўByWlBy_H0<и3АWb3А\2/9YаN№џєXOB№YаSG03А5ж2RA095иP@ББгH<?N№ћцTO*@ fN№ЦR`Z#НYа0R@еHЪА#НY„0R@еHЪА|јGn80HАе€ @СщYа Ќ095иX@ЪА0HАе€ @СщY„ Ќ095иX@ЪАRF`ДLЧ АN^NuNVBg?95жN№¶6XO/<6N№)DXON^NuNVямHЧ8А>.03А_HHАе€ @СщYа TЂ(@ /095иHАС— &@ . Ђ *@ n >(0SGJ@oBB@<№Лfp$@яя`0 F fp А ђ‹Рy5и@fм`К F d p^АF@`ИЖ`¶ ђ‹Рy5и3АWlLЧ8АN^NuNVярHЧ а<9Wl095и3АWl:~ 09_HHАе€ @СщYа /0HАС— TЂ*@0RF°ElHЂА`рLЧ аN^NuNVяфHЧ А>.0HАе€ @СщY„ TЂ*@|>95иSGmB@А`фLЧ АN^NuNVJnf p3АYЮ` yY€B( yY€(N№ѕЖpN^NuNVяфHЧ0Ђ*nB@->JGoSGBA-0°Ae*B@-@яя`JGlB@-Ю@JGl~` B@-вH>(UJGo"m l±йgSG(l`ж+L-LЧ0ЂN^NuNVяфHЧ0Ђ*nB@->(m№ХgRG(T`ц0HАе€ @СщYа PP/ ?N№­P\ON№­юLЧ0ЂN^NuNVярHЧ0А*n(mBA-B@-РA<B@->ѕFlV0HАе€ @СщYа PP0HАе€ @СщYа PPяэ3З_HByWl m№иg/ ?N№­P\O(TN№­юRG`¦LЧ0АN^NuNVярHЧ8Ђ yY€B@(3АWZ yY€*h yY€»Рg RyWZ*U`мBy_љIн yY€ /0(HАС— &@№Лd*B@> G f y_љ` G lRy_љRy_љ`Т09_љ°y5иm095иS@3А_љLЧ8ЂN^NuNVяь/~ѕy5жn"0HАе€ @СщYа PP?N№®VTORG`ЦBgBgN№¶6XO/<6N№)DXOByYЮBy`ў.N^NuNVямHЧ8Ђ*yYи gњJ-gЊB@-@f&(m~BA-0°Ad№Хg m№иg(TRG`а/ N№®ИXOB@-@яп @f / N№ЇF`B@-@ g / N№Ї–XOB@-@g / N№µЁXOB-B-*m `яbN№° JyYЮgN№°К/<6N№)DXO yяя=Оf095ж`B@>ѕy5жnJ0HАе€ @СщYа&P0@g.Sяю0HАе€ @СщY„-Pяь nяьHhHk?N№ІЉЮь RG`®/<6N№)DXO?9_љ?9WZN№¶6XOLЧ8ЂN^NuNVяиHЧ8Ђ0.°y5жf Jy`ўfvB§N№ґ$XO?.N№®VTO0.HАе€ @СщYа P0@g/<6 N№)DXO*n (n n Рщ5и±НgBAB@°AfRЌRЊ`а n Рщ5и±НgШ~ . /095иHАС— &@ ./095иHАС— -@яь nяьBA(яяB@+яя°AfS‹S®яь  gа~`Ь-KяшJGf* nяш±Нg nяш ( яяfS®яш`ж ђ®яш @n-Kяш ђ® ??.N№¶6XO»ояшgB@?p?p?NM\ORyWbЭ`Ю nяш±Лg/<6#N№)DXO»ЛgЭ`ш0.HАе€ @СщYа P0@g/<6&N№)DXOLЧ8ЂN^NuNVяь/ *n g/ /<YЋN№ФPO09`¶D@??95жN№¶6XO/<YЋN№)DXO/<YЋN№дXO3А`¶095жHАе€ @СщYа PP*_N^NuNVяиHЧ8ЂBgN№ѕъTO°® f-|6)яш<ъ&|62N№¦`-|69яш~-&|6= . Ђf-@яь(n nAиP±МcB@А`м n B@(@g np*@ n@ .XЂ(@ nяшR®яшРfфp ZЊ n B@(@gptА n B@(@gprАTЊЫfьSЊ nяьR®яьРfфp  n J(g . Ђ*@XЊЭfьp @яяLЧ8ЂN^NuNVюѕHЧ Ђ n±щ\4grAоюЖ-HяьJ®яьgd .яьЂ *@ nяь1y5и n/(/ N№ґљPO nBA( nB@(РA>0HАе€ @СщYа PP/.яь?N№­P\OLЧ ЂN^NuNVяшHЧА>.<. ѕy\2fјyWbgH3З\2ѕy5жfЬy`¶3ЖWb0HЂHЂ@ А60HЂHЂ@ А6/<6N№)DXOLЧАN^NuNV09`¶D@??95жN№¶6XO/<6DN№)DXOBy`ўN^NuNVяш/B.яьp?Hnяь/.N№·"Юь > Gfp` .yяьg .Yяьfp`B@.N^NuNVяь//.N№ґ$XO?./. N№Вґ\O/<%†N№ґ$XOB@ @f BgBgN№ЫXOB@.N^NuNVярHЧ0АKо (|P nR®B@>gЄ G%gЗ`д nR®B@>|0 |"@2<`XH°XWЙяъ PNР`ё\FTFPF?0HА/N№5d\O// N№ФPO/ N№дXOШАTЌ`†\FTFPF?/N№5dXO// N№ФЮь / N№дXOШАXЌ`яV// N№ФPO`аB3ьиWb09`¶D@??95жN№¶6XO/<6IN№)DXO/<PN№)DXO/<6LN№)DXO095жHАе€ @СщYа PPp3А`ўLЧ0АN^NuNVя°/.N№bXOJ@gpя?/<6PN№А~\Op` /.Hnя°N№ФPOBgHnя°p?9Pтp>?NAXO №PцRьg/9RьN№ њXO0.N^NuNVяшHЧ Ђ*nJn oz0. РyRц°yRъoN№№‚ @fp`r0. РyRц°yRъn0. ` 09RъђyRц>?/ 9Rь/09RцHАС— /N№ЌмЮь ЪЗџn ЯyRц`Ђ»ь6hg*|6fp=@ `яjB@LЧ ЂN^NuNVяшHЧ0*n(n / N№bXOJ@gpя?/<6PN№А~\Op`¶Bg/ p=?NAPO3АPтlp`њp?/ /<6ЁN№5юPO/N№А~\OBybвBy_њB№`°/ ?9PтN№7d\OJybвl #ь6№XvJ№Xvg/9XvN№ґ$XO`яvp??9_њ/9`°/ /<6ЙN№5юЮь/N№А~\OB@LЧ0N^NuNVярHЧ аp?/. N№4ђ\O>p?/.N№4ђ\O<JGgD Fon>0.HАе€ @Сь:6*P0: @яяgJEgєGf:‡;F`XЌ`в/<:^N№·tXOLЧ аN^NuNVяфHЧа>.<. 0HАЂ*p?/N№5d\O//<SN№ФPOp АS0HАЂ*p?/N№5d\O//<SN№ФPOp АSАSАS?BgN№Ђ~XO//<S N№ФPO/<:B/<S N№¦PO?p?N№Ђ~XO//<SN№ФPOLЧаN^NuNVярHЧ0А/<:±N№·tXON№ШN> Gmfp` Ggfp`B@<Bgp?p?0HАе€ @Сь:R/N№тЄЮь *@ gb/ N№уvXO @fR0HАе€ @Сь:6(P0> @яяg&?,?N№јLXO/<S/ N№тPOJ@gXЊ`Р/ N№пXXOJЂgp`B@LЧ0АN^NuNVяиHЧ ш/<:пN№·tXON№ШN</<;N№·tXON№ШN8 Dmfp` Dgfp`B@6~0HАе€ @Сь:6*P0: @яяgєFf>-`XЌ`иJGf F m F~o F m Fюn~1??N№јLXOB9SB9S/<S/<S/<S/<;8N№·tЮьpLЧ шN^NuNV/<.p?p??/<=N№тЄЮь #АWh.N^NuNVp?p?p?/<= N№тЄЮь #А[.N^NuNV/9YиN№ЫњXOp?N№ѕъTOJЂg*/9WhN№лћXOJy=Оgp?BgN№®’XOBy=ОN^NuNVяь/ /9\4N№ЫњXON№ї*/9[.N№лћXON№е6N№L*@ g/ N№ґ$XO/ N№ њXO*_N^NuNV/9[.N№нКXON№ї¤N№]¬N^NuNVяь/ ybЮ±щ[.f N№вp`@/<=N№·tXON№ШN> Gbg GBfN№Ѕ"` Gcg GCfN№Ѕо`B@.N^NuNVяфHЧ А*n>. /</¤N№}@XO°GmPJy=Оf / N№·t`R@?N№ lTO&@ gj?Hm / N№ЌмЮь 0GСЛBN№L(@ gF/ N№дXO<?/ / N№цЮь J@f0ђFR@?0HАР‹// N№ЌмЮь / N№ њXO LЧ8АN^NuNVямHЧ8АN№ї**yY€/9\4N№ЫњXO(ybЮ ybЮ±щ[.g/9[.N№лћXON№е6/.N№БОXO>9=Оpя3А=ОN№ФB3З=О yY€&P<+0. S@°Fl0. S@<?Hk /.N№ЌмЮь nРЖBN№е6№щbЮg / N№лћXO/ N№ЫњXO09`®LЧ8АN^NuNVяь/>. 0@?3А`®p3А=Оp.N^NuNVp??. ?.N№ГЋ\ON^NuNVp??. ?.N№ГЋ\ON^NuNVямHЧ Ђ>.BgN№ѕъTO°№bЮfа yY€*P/ N№ВXO-@яьp?HnяшHnяьN№RЮь JGgDpя?pя?/.яшN№/"PO-@яфJ®яфg/.яфN№АшXO/.яфN№ њXON№е6 yY€*P/.яшN№ њXOJ®яьgX yY€BhBg?-N№XON№L-@яшJ®яшg/.яшN№БОXO/.яшN№ њXO/.яьN№БОXO/.яьN№ њXOLЧ ЂN^NuNVBgN№ГмTON^NuNVp?N№ГмTON^NuNVяфHЧ8BgN№ѕъTO°№bЮg ybЮ±щ[.f0 ybЮ*h yY€(P№Нfp?p?N№гИXOJ@f№нg?. ?. ?.N№еz\O`њN№L\(@ gЋ yY€Bhp?p?N№С‚XO ybЮ±щWhf8/<%†/ N№L&@/N№2љЮь *@ g / N№ њXO/ N№ њXO`*L/ /9bЮN№тPO/ N№ њXOp?p?N№гИXOLЧ8N^NuNVяиHЧ Ђp?N№ѕъTO°№bЮg 9bЮ`N№кт*@HnярHmf/<=EN№йЪЮь > Gfp`P Gf BgBgp?HnярN№тЄЮь *@ fB@`*»щWhg"/ N№лћXO/<=^N№·tXO/ N№ў,XOLЧ ЂN^NuNVяшHЧ Ђ>9=Оpя3А=О*yY€N№!~3З=Оp3АYЮN№ШN/ N№ЫњXO/<%†N№ґ$XOLЧ ЂN^NuNVямHЧ8Ђ yY€-Pяь/.яьN№ВXO(@ yWh"h nяь±йg@/<%†/ N№L&@/N№2љЮь *@ g / N№ њXO/ N№АшXO/ N№ њ`p?BgN№дVXOp?BgN№О6XOp?/ N№#~\ON№е6N№L*@ g/ N№БОXO/ N№ њXO/9bЮN№ЫBXOLЧ8ЂN^NuNVBgN№ѕъTO°№bЮf N№З(p`, ybЮ±щ[.f p3А=О`д?. ?. ?.N№О6\ON^NuNVяь/<=ЋN№}@XOHА-@яьJ®яьf-|РяьHnяь0.HАй€/N№ FPO-@яь .яьS®яьJЂfфN^NuNVяоHЧ0А*n>. Bnяю yY€(h"yY€ Q№Рg№Нfp=@яю(T`ж nяюfb yY€(P yY€<( yY€ Ќ yY€1G yY€(N№±(p?N№ИRTO yY€ Њ yY€1F yY€(`4/ N№БъXO/N№ґ$XON№±(p?N№ИRTO/<=”N№ґ$XON№±(pLЧ0АN^NuNVякHЧ0А0.@я=@яю0.@g n@яюm n_яюnn@яю?.яю/<=†N№n\O(@ g,HЂ`0.яю=@яь yY€*P yY€0(S@>BnяъJGf*m ybЮ»иfB@`N0-R@>SG0°mfp ` B@5p @я<јnяьfJnяъf?/ N№Иў\Op`Snяъјnяюf Rnяъ`љLЧ0АN^NuNVяь/Jn lB@`0. @g G@m G_nG@??. N№яаXO.N^NuNVяшHЧА nя fB@`N~ѕn lD?. p??.N№Кl\O< @g0`&?. N№Й€TO @g/<=•N№·tXORG`¶pLЧАN^NuNVяфHЧаz| yY€јhlH"yY€ QРЖB@( @я> G g G gJnf G fE` G m GfRERERF`¬0LЧаN^NuNVяжHЧ а"ybЮ i*P~|RF yY€»РfJ=Fяъ yY€ /0(HАС— -@яь yY€0(°mfp `"yY€ MРйB@( @я=@яш0-R@HАЮЂ ybЮ»иg*U`ђ yY€B@(: yY€*h ybЮ»иg yY€»РgRE*U`дRE/pd//.яьN№ NPO/N№ЋPO=@яцBgN№Л(TO???.яъ?.яц/.яь?.яш/<=ќN№·tЮьpLЧ аN^NuNVямHЧ р yY€*P yY€0(><ѕmfSGlB@`BB@5p @я8SGmмB@5p @я:„p …p јmg yY€Rhp?N№яЖTOpLЧ рN^NuNVяшHЧАN№(z<Jn lB@`6Jn fp`, F fN№и> GfSn fм0`??. N№яаXOLЧАN^NuNVJn lB@`VJn g n o 3о YЊp`Jn fp`4>. N№и< FfSGfо Ff?. ?. ?.N№гИ\O<0LЧАN^NuNVяшHЧ ЂJn lB@`\0. Sn J@gN yY€*P yY€0-°hf. ybЮ»иg" UJhfp?BgN№дtXO> @gІ0` N№и`мpLЧ ЂN^NuNVяаHЧ8р yY€-Pяь .яьЂ *@ yY€0(HАРЌSЂ(@&@»МbHЂ: @ g E fSЊ`ж ђЊ>"nяьЪйIл№НdHЂ: @ g E fRЊ`ж ђ‹<0РFS@8g4 yY€џh nяь™h ђ‹ђF?0HАР‹/ KђЗHhN№ЌмЮь p ?p?N№яаXOLЧ8рN^NuNVяфHЧ0Ђ yY€*PJmf"ybЮ(m L±йg*L`д(M~"ybЮ(T L±йg JlfRG`жJGfp` yY€ • yY€BhBg?N№XOLЧ0ЂN^NuNVяфHЧаJn lB@`¦0. Sn J@g–~z"yY€ Qєhl2"yY€ QРЕB@( @я< F g F f F fGRGRE`АN№иJ@gћ0HАЃь:gp ??N№яаXOJ@gЂ0HАЃьH@:gяxp ??N№яаXOJ@fяd`яZpLЧаN^NuNVJn l0. D@??.N№С `.Jng09`Ё@fN№Ђy`¬p??. N№XON^NuNVяь/Jn l0. D@??.N№РёXO`PJng09`Ё@fN№Ђy`¬?. ?. ?.N№гИ\O> @fp??. N№XO>0.N^NuNVямHЧ р09`Ё@fN№Ђ"yY€ Q:(y`¬JnfX yY€<(јEl&"yY€ QРЖB@( @я8 @ g D fRF`Ц yY€0ђh>јEfRG`ЁJGfў~`њJn o: yY€0ђhR@>"yY€ Q*P<. SFgr ybЮ»иgf0-R@Ю@*U`д yY€>( yY€Bh yY€*P<. 0RFJ@g*"ybЮ m±йg*m yY€(0-R@Ю@`О yY€ Ќp??N№XOLЧ рN^NuNVBgp?N№С‚XON^NuNVярHЧ аJn m¤z0. Sn J@g4N№иZ|?N№JTO>mЮ G ffp?BgN№О6XOJ@gfRERF`Ф yY€*h yY€ P±Нf40SEJ@g"ybЮ m±йg*m`в yY€!M yY€(p`?p?N№яаXOJ@fњB@LЧ аN^NuNVяфHЧа|z/<=РN№·tXON№ШN> @0m G9o GUg G-fV GUfеN`& G-f JEfB|zя`JEf|z0Бь РG@0<JEm?`JFg0D@`pя?/<=ЧN№·t\O`Љ Eяяf JFfRF0D@< n0†0LЧаN^NuNVяцHЧАN№wBy`ЁJy=ОnnJyS@nN№±(N№ШN>Jy`ўgN№¶¦N№±( G gИ|p=@яю GUf ybЮ±щ[.g|HnяюN№УђXO>?.яю??N№Цt\O`ЉN№w¤LЧАN^NuNVp?BgN№®’XOBy=О/</¤N№}@XOR@?/</¤N№~°\ON№ФB y=Оf.N№­*/<%†N№ґ$XO#щbЮWF/<=ЯN№·tXO` B№WFN№Шp3А=О/</¤N№}@XOS@?/</¤N№~°\ON^NuNVJ№WFg0/9YиN№ЫњXO/9WFN№лћXO/<%†N№ґ$XON№ФЪN^NuNVяъ/ /<<ЪN№ґ$XOp?p?N№їTXON№Sв*@Jg8 -fRy`Ф`ж/ N№чTXO=@яюJy`Фg ybЮ( nяюgјN№ФЪ*_N^NuNVp3А`ФN№ХИN^NuNV/<>N№)DXOpя?N№TON^NuNVярHЧ а>."ybЮ0)vHАе€ @Сь:6*P0: @яяg<єGf4By`¬??. ?. 0-HАе€ @СьAа PNђ\O<3щ`¬`Ё`VXЌ`є G m G~o G m8 Gюn2Jn nBy`ЁJn lB@`p<`By`¬??. N№яаXO`¤By`Ё| FgByS@0LЧ аN^NuNVяфHЧ0ЂN№ѕЖN№Ћ> G2g~?N№¬JTOB№`¤B№W\p?N№ѕъTO*@#АbЮ fN№ЦR`tB№Y€B№Yи095жS@?BgN№ЯXO(@p??95жN№ЯXO#А\4 gєJ№\4gІ #АY€#АYи)y\4 y\4BЁ By`Фp3А=ОLЧ0ЂN^NuNVN№±(N№ЂN№ МB№YаN№ЧFN№ї¤N№­*ByYЮN^NuNVяь/N№Ъ’> Gf N№Шћ@`& Gf N№Шћ@`JGm Gn 0@@@>0.N^NuNVяь/N№Ъ’> Gam GznG JGm Gn 0@@@>0.N^NuNVp3А=ОN^NuNVяь/>. ybЮB@(@g ybЮB@(@fN№эИ?N№Щ.TO.N^NuNVяь/Jnf6N№тpJ@g,BgN№уьTO> Gg/<>=N№¶ЪXO> Gg0` p3А=Оp.N^NuNVJ№WBfJyS@o/<>[N№·tXOB@`/<>N№·tXO#ьSBWBpN^NuNV yS@o/<SBN№(RXOSyS@`ByS@J№WBg/<>ЌN№·tXO yWBBB№WBpN^NuNV/<SB/<>™N№5юPO/N№АшXON^NuNVяь/>. J№WBfJyS@o/<>«N№·tXOB@`"JGoJ9SBg3ЗS@/<SBN№(RXOp.N^NuNVяь/N№(z>J№WBg` №W>WBc> yWBR№WBpЂ yWBR№WBp)Ђ yWBBB№WB/<>СN№ґ$XO` yWBR№WBp@яЂ0.N^NuNV/<>щN№·tXOJ№WBg B9SBB№WBByS@pN^NuNVяшHЧ0*n(yYи g g l±Нf,(l `дLЧ0N^NuNV0. yY€@ yY€(pN^NuNVяь/ *n f*yYи#НY€#нbЮp*_N^NuNV yY€ h ±щ\4f #щ\4Y€ yY€/( N№ЫњXON^NuNVяшHЧ0*n yYи±щ\4fBЂ`& yYи±Нf*y\4(yYи l ±Нg(l `т LЧ0N^NuNV/9Y€N№ЫьXO/N№ЫњXON^NuNVяь/>. 0D@??.N№ЬЉXO.N^NuNVяфHЧ А>. yY€*hJGl0RGJ@g. ybЮ»иg"*U`и0SGJ@g"ybЮ m±йg*m`в yY€!M yY€(| yY€BA(0°Ad yY€»РgV ybЮ»иg*URF`Т yY€*h yY€B@(вH<0SFJ@g ybЮ»иg*U`и yY€ Ќ yY€BhpLЧ АN^NuNVяшHЧ0*n g / N№ЫьXO`BЂ(@ gb№щ\4f yY€±щYиf#н Y€#н Yи`)m ,B@-R@С, mS(f/ /-N№йјPO/ N№џєXOLЧ0N^NuNVярHЧ8Ђ*yYи g<(m »щY€g»щ\4f*L`д mS(f/ /-N№йјPO/ N№џєXO`Ш yY€&h yY€B@(>JGg"ybЮ k±йgSG&k`д yY€±щ\4fBgBgN№ЯXO*@ g#НY€#щY€Yи yY€!y\4 y\4BЁ 095ж y\4@ y\4p@ yY€B(095жS@ yY€@ yY€!K yY€(pLЧ8ЂN^NuNVяфHЧ А>.<. p?N№ћцTO*@ f/<?N№·tXO`f ybЮR(p@+ybЮB-GFJ№Y€g/9Y€/ N№йјPO yY€+h`/9bЮ/ N№йјPO ybЮ+h LЧ АN^NuNVяаHЧ8а*n -dB@-?/<?N№·t\OB@`жBgBgN№ЯXO&@ gиB@-@яявH>B@-@яяђG<(mz№ХgRE(T`ц(mєGn(єGf(TG'm +K B@-РGR@@F``B®яь-yYияш nяш±Нg-nяшяь nяш-h яш`жJ®яьf#ЛYи` nяь!K 'M mGRGЯ-F0SGJ@g(T`ф+L'L-+pLЧ8аN^NuNV/9Y€N№ЯАXON^NuNVяфHЧ0ЂJn l0. D@??.N№вXO` yYиJЁ f/<?=N№·tXOB@`а yY€*h f*yYи m ±щY€g*m `оB@-°n b/<?M`ё yY€ h ±Нf*(m~ѕn l m№иg(TRG`к+L0. С-`B yY€(h~ѕn l"ybЮ l±йg(lRG`в yY€!L yY€0. ‘( yY€0. С(0. ‘- yY€(-pLЧ0ЂN^NuNVяфHЧ0ЂJn l0. D@??.N№атXO` yYиJЁ f/<?_N№·tXOB@`ж yY€*h f*yYи m ±щY€g*m `о yY€B@(°n b/<?o`І yY€ h ±Нf0(m~ѕn l"m l±йg(lRG`д+L0. ‘-`< yY€(h~ѕn l ybЮ№иg(TRG`и yY€!L yY€0. С( yY€0. ‘(0. С- yY€(-pLЧ0ЂN^NuNVяь/ yYи±щ\4fBЂ`F/9\4N№ЫьXO*@BA-095жHАЃь°Ad/ N№ЯАXOJ@g/9\4N№ЫьXO*@ *_N^NuNV yY€BhpN^NuNVяшHЧ Ђ>. JGl0D@??.N№дtXO`b0SGJ@gX yY€Jhf@$ybЮ yY€"P*i M±кfB@`0 yY€ Ќ yY€1m yY€(`¬ yY€Sh` pLЧ ЂN^NuNV yY€"P yY€1ipN^NuNVяшHЧ Ђ>. JGl0D@??.N№гИXO`^0SGJ@gT yY€*P yY€0(°mf0 ybЮ»иfB@`. yY€ • yY€Bh yY€(`° yY€Rh`¤pLЧ ЂN^NuNVN№и„ ybЮ"h yY€ ‘ yY€Bh yY€(pN^NuNV"ybЮ yY€ © yY€Bh yY€(pN^NuNVN№и„N№е6N^NuNVяь/ Jn l0. D@??.N№жXO`l09`Ё@f 3щ_љXzy`¬ yY€*P0. Sn J@g ybЮ»иg*U`д yY€ Ќ/ N№жЁXO yY€1@ yY€(p*_N^NuNVяь/ Jn l0. D@??.N№еzXO`r09`Ё@f 3щ_љXzy`¬ yY€*P0. Sn J@g"ybЮ m±йg*m`Ю yY€ Ќ/ N№жЁXO yY€1@ yY€(p*_N^NuNVямHЧ р*n|xёmg8B@5@ @я>: G fE` G m GfREREєyXzn<RD`В0LЧ рN^NuNVяшHЧ Ђ>. Jnf yY€B@(@яю>JGn.~`*JGl0D@??.N№зЄXO`^ yY€BA(0ББ> yY€*h0SGJ@g ybЮ»иg*U`и yY€!M yY€ Ќ yY€Bh yY€(pLЧ ЂN^NuNVяшHЧ Ђ>. Jnf yY€B@(@яю>JGn.~`*JGl0D@??.N№зXO`d yY€BA(0ББ> yY€*h0SGJ@g"ybЮ m±йg*m`в yY€!M yY€ Ќ yY€Bh yY€(pLЧ ЂN^NuNV"yY€ yY€!Q"yY€ yY€1i N^NuNVN№иZ/<?‚N№·tXOpN^NuNVяшHЧ Ђ yY€JЁf/<?ЌN№·tXOB@`V yY€*P yY€>("yY€ yY€ ©"yY€ yY€1i  yY€!M yY€1G yY€(pLЧ ЂN^NuNVяФHЧ А>. Jnf6B.яаp ?Hnяа/<?¤N№·"Юь <J.яаfp`THnяаN№юXO>"ybЮ i*P Go"ybЮ U±йg*USG`ж yY€ Ќ yY€Bh yY€(pLЧ АN^NuNVяшHЧ0*n(n *Ь*Ь*”LЧ0N^NuNVяиHЧ8АB®яь/<?ѕ/. /.N№2љЮь (@ f(n/ N№ґ$XO№оgD/ N№ њXON№,м-@яь|&yW\ gp?Hkf/.яьN№.bЮь &k `а nяь*h nBp?/.N№Вґ\O @f p?/./ N№¶Юь B§N№ґ$XO`И/<%†N№ґ$XO/.яьN№-FXO nJf/. /.N№ФPOHЂ @fp`HЂ @ fp`B@LЧ8АN^NuNVяь/ ybЮ*h f*yW\»щ[.g»щ`¤f*m f*yW\ *_N^NuNVяиHЧ ЂN№кт*@HnярHmf/<?ВN№йЪЮь > Gfp`0 Gf BgBgp?HnярN№тЄЮь *@ fB@` / N№лћXOLЧ ЂN^NuNVяшHЧ0*n ybЮS(f/9Y€/9bЮN№йјPO#НbЮ yY€!M yY€!m yY€(B@-R-J@f/ /9Y€N№йјPO`$(yYи g№щY€g l±Нf/ `Т(l `вpLЧ0N^NuNVямHЧ8Ђ*nBgBgBg/ N№тЄЮь (@ fB@`x№щbЮf/<?ХN№·tXO`д yY€-PяьBy_њB№`° l&P·мg0>+?Hk /.яьN№юЋЮь JЂg¦Ry_њ0HАС№`°&S`К ybЮ(pLЧ8ЂN^NuNVяиHЧ ЂN№кт*@HnярHmf/<?фN№йЪЮь > Gg$ Gfp?HnярN№ъИ\O> yY€(0LЧ ЂN^NuNVярHЧ8Ђ*n/ N№уvXO> @g0`Z/-N№џєXO™М&yW\·Нg(K&k `ф&k g)K `#ЛW\ ybЮ±Нf #щW\bЮ/ N№џєXON№¶¦pLЧ8ЂN^NuNVярHЧ8Ђ*n fp`rN№кт(@№Нfp?N№ѕъTO(@ gR№НgN/ N№лћXO&yYи g. k±Нf 'L/ / N№йјPO'l+R,&k `О/ N№нFXO`B@LЧ8ЂN^NuNVяиHЧ ЂHnяр ybЮHhf/<@N№йЪЮь > Gfp`,JGf 9bЮ`BgBgBgHnярN№тЄЮь *@/ N№нКXOLЧ ЂN^NuNVярHЧ8*n(n l±Нf0.`n&l gS+f / / N№йјPO)MB@-R-J@f/ / N№йјPO`,-yYияьJ®яьg l±Нf nяь±Мg/.яь`Р-l яь`Ь0.@Ѓ,pLЧ8N^NuNVяшHЧ0*n fBЂ`NJ-f&N№гP(@ g:p?/ / N№оѕЮь @g"`Р(yYи g l±Нf, `(l `ж LЧ0N^NuNVяфHЧ А*n>. ,. † m0p //N№вPOЂ0SG20AСНЂp //N№ЋPO,`ИSG00@СН Ђ0ЂJGo SG00@СНp `оLЧ АN^NuNVяdHЧ8аBgp?p?/<@N№тЄЮь #А`¤J№`¤fB@`` y`¤(яэ/9`¤N№уvXO: @g0`8/<%† y`¤HhN№ФPO/<@/9`¤N№тPOJ@gў/<@C/9`¤N№тPOJ@gЉ&yW\ gвKоя|B@+@gpt`p-АB@+@gpr`p-АB@+@gp*`p-Аp А~ k-Pяь nяь±лg nяь0(T@HАЮЂ nяь`Ю/p ?/ N№пВЮь Ъь p АIлfЬfьSЌIлJg& Ђd»Аdp А`оHЂ<g [Ђ»АdрЖ`мBHnя|/9`¤N№тPOJ@gюЁ&k `яpLЧ8аN^NuNVяь/ N№р8 @f/9`¤N№пXXO*@ fB@` y`¤*ђ y`¤;hp*_N^NuNVяфHЧ8*n(n g8 g4/ N№дXO?/ /-N№юЋЮь &@ g U±нf*‹ gp`B@LЧ8N^NuNVяь/ *yW\ g"B@-@fB@-@gp`*m `ЪB@*_N^NuNVяфHЧ8*n(yW\ gHlf/ N№јPOJ@gљ(l `вJn gЊpx?N№ћцTO(@ fBЂ`vBgN№юBTO&@ f / N№џєXO`а&‹'K)K9nv(‹B¬BlBl B,0.@/<@jHlN№ФPO/ HlfN№ФPO)yW\ #МW\ LЧ8N^NuNVярHЧ8Ђ*nB@-@f4B@-@g(Hmf/<@kN№5юPO/N№¶ЪXO> @g0`2"m(Q L±нg / N№юЬXO`ж*­BmB­Bm -яэpLЧ8ЂN^NuNVяфHЧ А|N№тpJ@f/<@€N№·t`ІN№сФN№±(*yW\ gvJ-gjB@-@g^Jng0.`Hm/<@ќN№5юPO/N№¶ЪXO> Gf"/ N№эzXO @f-яэ/ N№ЫBXO`RF Gf0`6*m `†/9`¤N№пXXO/N№ЭnXO/9`¤N№нКXOJFfp`B@LЧ АN^NuNVяь/ Bgp?Bg/<?°N№тЄЮь *@ g/ N№пXXO/N№ЭnXO/ N№нКXO*_N^NuNVяшHЧ0Bgp?p?/<?°N№тЄЮь (@ g>/ N№уvXO/ /<т/.N№8ЪЮь / N№пXXO*@ g*”;lN№±(LЧ0N^NuNVяшHЧ Ђp\?/. N№4\O*@ fp:?/. N№4\O*@ f . SЂ*@RЌ /N№дXO> Go~?/ /.N№ЌмЮь nРЗBLЧ ЂN^NuNVяиHЧ8Ђ*n(n p\? ybЮHhN№4\O&@ g$R‹ KB ybЮHh/ N№ФPOB@Ђ`XN№¦&@B gJ/ / N№ФPO/ N№дXOHАРЊSЂ-@яь nяь \gR®яь nяьp\ЂR®яь nяьB/ N№ њXOpP?N№ lTO-@яшJ®яшg|/ /.яшN№ФPO/ N№ґ$XO/<х,pP?HnяшN№ JЮь /<%†N№ґ$XO/.яш/ N№ФPO/.яшN№ њXON№фдB@ @gB@ @ fp`B@`pLЧ8ЂN^NuNVяЊHЧ8А/.Hnя°N№ФPOHnя°N№кXO*yW\ gшHnя°HmN№јPOJ@fЪ ybЮS(f/9Y€/9bЮN№йјPO#НbЮ yY€!MB@-R-J@f/ /9Y€N№йјPO`$(yYи g№щY€g l±Нf/ `Т(l `в yY€&P yY€B@(вH>0SGJ@g"ybЮ k±йg&k`в yY€!K yY€(p?/<@¬N№А~\Op`*m `яHnя°Hnя N№хљPOBgBgBgHnя N№тЄЮь *@ g\B@-<0@fL0@g0@g. JybвfH?/ /9Y|N№юЋЮь JЂg0T@HАС№`°Ry_њ`pЩ3АbвJ№Yдg 09Yж3АbвLЧ ЂN^NuNVяфHЧ0Ђ(ybЮJ® f6-l / N№уvXO> @g0`њ/.HlN№ФPO,яь`,#о Y|/<щЊ/.N№єЮPO> Gf/<@ьN№·tXO*yYи g6 m±щbЮf$ ybЮ h *Ђ+@BmB­Bm -*m `Ж Ggp`B@LЧ0ЂN^NuNVямHЧ0а*n>. yY€:( yY€(PN№дVp?p?N№дtXOJGg / N№м@XO` yY€// N№щфPO<Jy_њg?9_њ/9`°/ /<AN№·tЮь yY€1E yY€ Њ0LЧ0аN^NuNVя¬/Hnя°/<A+N№цPO> @g0`Hnя°N№кXOBgHnя°N№ъИ\O.N^NuNVя¬/Hnя°/<A9N№цPO> @g0` Hnя°N№кXON№иZB§Hnя°N№щфPO.N^NuNVя¬/Hnя°/<AEN№цPO> Gg0` Hnя°N№чTXO.N^NuNVядHЧ8р*n(n B@-@g/<ARN№¶ЪXO8 Dfљ/ N№ёґXO8fЉBFB@HА. m&P·нg(0+:?Hk N№є0\O8JDfRF0T@HАЮЂ&S`ТN№№Ш:JDf8JEf4p??// /<A|N№5юЮь/N№А~\O-яэ/ N№ЫBXOJDfp`B@LЧ8рN^NuNVя¬/Hnя°/<AћN№цPO> @fRHnя°N№кXO @nФHnя°N№TXOJЂfДHnя°/9bЮN№ь*PO> @fHnя° ybЮHhN№ФPO0.N^NuNVяшHЧ0*nIнB@-@fp`&Jg/ N№TXOJЂgN№э` / / N№ь*POLЧ0N^NuNV/9bЮN№эzXON^NuNVя¬/Hnя°/<A№N№цPO> @f0`2JGgHnя°`/<%† ybЮHhN№ФPO/9bЮN№ЫBXOp.N^NuNVN^NuNVяфHЧ А>.< Fl|0@ ?N№ћцTO*@ g;G`?/<C®N№·t\O LЧ АN^NuNVярHЧ8Ђ*n>.?N№юBTO(@ g$?/. Hl N№ЌмЮь &m&Њ)K+L(Ќ LЧ8ЂN^NuNVяфHЧ8*n&yYи g. k±Нf'U S±Нf&•Bk k±Нf'UBk &k `О(yW\ g(J,f T±Нf(•Bl l±Нf)UBl (l `Ф m • U!m/ N№џєXOLЧ8N^NuNVяфHЧ0Ђ*n>. -g~B@-@f G-(yYи g l±НfЏ,(l `кLЧ0ЂN^NuNV?./9bЮN№яr\ON^NuNVяаHЧ8Аp?N№яЖTO yY€*P ybЮ»иfx yY€Jhg/<CХN№·tXOB@`є?.N№юBTO(@ gи-mяь nяь Њ(Ќ+L)nяь yY€ Њ yY€1nGм 0.SnJ@gh0. А`к yY€>(2-яюA 0-Рn°AoP0.Рm?N№юBTO(@ gяl?-Hm Hl N№ЌмЮь m Њ(• U!L)m/ N№џєXO` 0.Сm(M /0,HАС— Ђ -@яш .яш/0.HА‘— &@0GСМAи ±Лg S®яш nяшЈ`и|јnl 0. АRF`р-yYияфJ®яфg„ nяф h±Нf nяф!L nяф P±Нf* nяф Њ nяф±щY€g nяф0(°Go nяф0.Сh nяф h±Нf nяф!L nяф0( °Go nяф0.Сh nяф-h яф`яxpLЧ8АN^NuNVяиHЧ8Ђp?N№яЖTO yY€&P yY€>(?N№юBTO-@яьfB@`дKл .яьЂ (@0GСЛAи ±НgЭ`рIл KРлAи ±НgЭ`оџk nяь!k'nяь nяь h ®яь nяь ‹-yYияшJ®яшgv nяш h±Лf nяш!nяь nяш P±Лf nяш0(°Gl nяш ®яь` nяшџh nяш h±Лf nяш0( °Gl nяш!nяь` nяшџh nяш-h яш`„pLЧ8ЂN^NuNVяиHЧ8А09CЁ°yC¬fp=@ Jnoа yY€&P yY€>( ybЮ·иfB@`ѕ0+ђG<јno<.JFf6p?N№яЖTON№J@gОJn g?. p ?N№ёXOJ@gґSn`€p?N№яЖTOKуp 0HАРЌ(@ n fN09CЄђyCЁ°FlBgN№ЉTOJ@fв`яn?/ 9C¤/09CЁHАС— /N№ЌмЮь ЭyCЁ`b n fF09C¬°Flp?N№ЉTOJ@fж`я?/ 09C¬ђFHАР№C¤/N№ЌмЮь ќyC¬`Jn g/<CвN№'ЪXO KРлAи ±МgЬ`оќk-yYияьJ®яьgr nяь P±Лf( nяь0(°Gm nяьќh nяь0(°Gl nяь1G nяь h±Лf( nяь0( °Gm nяьќh nяь0( °Gl nяь1G nяь-h яь`€ќn`юpLЧ8АN^NuNVяиHЧ8 yY€&P-Sяь"ybЮ nяь±йfJkf2/ N№юЬ`$ nяь0+яю@ ђk°hm¶ nяь?( nяьHh KРлHh N№ЌмЮь -yYияфJ®яфgb nяф h±ояьf nяф!K nяф P±ояьf nяф ‹ nяф0+Сh nяф h±ояьf nяф!K nяф0+Сh nяф-h яф` nяь0(Сk nяь&ђ nяь P!K`N nяь0+Рh?N№юBTO-@яшfB@`:Kл .яшЂ (@ KРлAи ±НgЭ`о .яьЂ *@"nяь nяьРйAи ±НgЭ`и k ®яш"nяь nяш ‘ nяь P!nяш nяш!k-yYияфJ®яфg¤ nяф h±Лg nяф h±ояьf nяф!nяш nяф P±Лf nяф ®яш` nяф P±ояьf nяф ®яш nяф0+Сh nяф h±Лf nяф!nяш`$ nяф h±ояьf nяф!nяш nяф0+Сh nяф-h яф`яX/ N№џєXO/.яьN№џєXOpLЧ8N^NuNVJ№C¤g(/9C¤N№џєXOB№C¤ByCЄB@3АCЁ3АC¬N^NuNVяшHЧА>.<. Ff809CЁ°yCЄfBgN№ЉTOJ@fB@`T09CЁRyCЁ0@СщC¤‡`: Ff&JyC¬fp?N№ЉTOJ@gЖSyC¬09C¬`И/<CкN№'ЪXOpLЧАN^NuNVяь/>.JGm09C¬РG°yCЁmpя`09C¬РG0@СщC¤HЂ@я.N^NuNVяфHЧ А>.09CЄ@?N№ћцTO*@ f 09CЄ@?/<CтN№·t\OB@`Ћ Gf 09C¬@`p@<J№C¤gD09CЁђyC¬? 9C¤/09C¬HАС— /0HАРЌ/N№ЌмЮь /9C¤N№џєXO#НC¤yCЄ09CЁђyC¬РF3АCЁ3ЖC¬pLЧ АN^NuNVямHЧ8А*n yY€JЁf /<D`^"yY€ yY€ P±йfj yY€*ђ"yY€ yY€0(°i l" yY€;h"yY€ yY€0( ђi` yY€;h "yY€ yY€0(ђi ;@p`к yY€&P yY€<( yY€(P yY€0,ђhR@> ybЮ№иf"ybЮ k±йgђ ybЮ№иg:(T yY€№иf$ yY€*ђ yY€;h yY€0Рh `яp0,R@Ю@"ybЮ k±йgЊ&k0+R@Ь@ yY€·иfяt*‹ yY€;h  yY€0ђh `я /<D-N№·tXOB@LЧ8АN^NuNVяф/HnяшN№ dXO> @g0`@09`Ё@fN№Ђy`¬ yY€ ®яш yY€1nяьp??.яюN№XO.N^NuNVямHЧ АHnяшN№ dXO< @g0`x09`Ё@fN№Ђy`¬*nяш>.яь0.яюSnяюJ@gHѕmfp?p ?N№ёXO< @f°*U~`Рp?B@5p @я?N№ёXO< @fЉRG`¬pLЧ АN^NuNV/<_J/<D@N№·tPON^NuNVярHЧ8Ђ/<DTN№}@XOJ@gЉ/.N№дXOеHR@?N№ћцTO&@ gh*K(ng4B@ @ae$B@ @zbp[АB@АB@@яаАp]А`ОB@`цB/ N№дXO @ l/ /.N№ФPO/ N№џєXOLЧ8ЂN^NuNVяLHЧ8А*nB.я`J9_JfpP?Hnя`/ /<DeN№5юPO` pP?Hnя`/<_J/ /<DjN№5юЮь /N№·"Юь > Gfp`ѕJ.я`gJHnя`/<_JN№ФPO&|_JIоя`gB@ @\fpАB@А`жBHnя`/<_JN№ФPO/9D.*n ?<я?p?N№гИ\O/ N№дXO20ђA<g& yY€8(JFoрBg?N№XO yY€1DB@:gА E fF yY€"P yY€0(°if?<яp?BgN№дt\O`ДBgp?N№XOJ@gІN№и`Є"ybЮ yY€ P±йf?p?N№яаXO`† yY€"P yY€0(°ifBgp?N№XOJ@gя\`В"yY€ yY€0(Rh0@ССE `я:p?N№яЖTOp`p ?0D@?N№яаXOJ@fяB@LЧ рN^NuNVякHЧ8АJ®gрJ® gи nB@(X @њfЦ*n N№,м&@B.яяg°HЂ @&f|`$HЂ @\f 0m 9n HЂ@0<`|яJFlHЂ@яюBgHnяю/ N№.bЮь `Ё0HАе€ @СоJђg0HАе€ @СоJЁ(g†0HАе€ @Со(h(BBg0HАе€ @Со// N№.bЮь HЂЂ`яN(k/ N№ њXO LЧ8АN^NuNVяфHЧ0Ђ yY€*P yY€>( ybЮ»иg./ N№БъXO(@0HАРЊ//9D( ybЮ»иgJ/ N№БъXO(@JGm 0GСМ0GСМB/ /9D Gg$JGg GfN№Ш`N№L>JGfN№ ш0.N^NuNVяь//<DЋN№ АXO> Gg$JGg GfN№L`N№Ш>JGfN№ ш0.N^NuNVяHЧ шB.я°/<DЎN№ АXO> @g0`:pP?Hnя°/<_J/<DІN№5юPO/N№·"Юь > Gfp`Hnя°/<_J/<DНN№·tЮь zxN№L @fґJEg N№(О< Fяяf| 0@?fN№±(`N№±(N№(z<0 |"p2<`XH°XWЙяъ PNР`¤zHnя°/9D/ N№ њXOJGgRD F.g`яT/<DмN№·tXO`яP yY€(N№±(?/<E-N№·t\OpLЧ шN^NuNVяшHЧ Ђ*nB@ @AeB@ @Zbяаp?N№яЖTOLЧ ЂN^NuNVяшHЧ Ђ*nB@ @aeB@ @zb p?N№яЖTOLЧ ЂN^NuNVяь/~N№ёJ@fp?BgN№дtXOJ@f~я`RG`Ь0.N^NuNVярHЧ0А>.*n (nJGlB@`p0SGJ@gfN№. @яяgиN№ёJ@gв$yY€"yY€ RРйHh N•XOp?BgN№дtXOJ@gІN№ёJ@g¬$yY€"yY€ RРйHh N”`ИpLЧ0АN^NuNV/<ф/<ф?. N№bЮь N^NuNV/<є/<є?. N№bЮь N^NuNV/<є/<ф?. N№bЮь N^NuNVяь/>. JGl0D@??.N№к`fp?BgN№гИXOJ@fB@`R0SGJ@g. JGl0D@??.N№\XO`60SGJ@g,N№. @яяfB@`N№ёJ@gЮp?BgN№дtXOJ@`Юp.N^NuNVяфHЧ АJn lB@`њ09`Ё@fN№Ђy`¬ yY€*P yY€<(~0. Sn J@g@N№ёJ@fp?BgN№дtXOJ@g$RG`аN№ёJ@gКp?BgN№дtXOJ@gRG`а yY€ Ќ yY€1Fp??N№XOLЧ АN^NuNVяь/Jn lB@`¤09`Ё@fN№Ђy`¬p?BgN№гИXOJ@fp`r~0. Sn J@g@N№ёJ@fp?BgN№гИXOJ@g:RG`аN№ёJ@gКp?BgN№гИXOJ@gRG`аp?BgN№дtXOJ@gяjSGp??N№XO.N^NuNVяфHЧ А yY€*P yY€<(јmg Gam Gzo$ GAm GZo G0m G9o G$g G_fp`B@LЧ АN^NuNVямHЧ0а>. JGl0D@??.N№ШXO`Ћ0SGJ@gvp?BgN№гИXO<N№ёJ@f Fgа yY€Bh ybЮ(h yY€*P m±Мg( mJhgB@- @я: @ g E g*m`Р yY€ Ќ`‚ yY€(pLЧ0аN^NuNVямHЧ0а>. JGl0D@??.N№XO`–0SGJ@g~ yY€Bhp?BgN№дtXO<N№ёJ@f Fgа yY€Bh yY€*P ybЮ(h»Мg4*U»Мg"JmgB@- @я: @ g E fЬ*m yY€ Ќ`я| yY€(pLЧ0аN^NuNVярHЧ8Ђp?p?N№ШXO yY€(Pp?p?N№XON№,м&@ gl~ yY€*P»Мg*URG`ц0SGJ@gPBg yY€/N№БъXO// N№.bЮь Bg/<EX/ N№.bЮь p?p?N№С‚XO3щ`¬`Ё`Ё LЧ8ЂN^NuNVядHЧ8аN№љ(@ fB@`XN№,м*@ f / N№-FXO`в|~ lРЖB@:0@Сь[2Jg E fGRGRF`Ш lРЖBBg/,/ N№.bЮь lРЖ…/<^H/<[2 ,/0HАС— /N№R Юь / N№-FXO|N№Sв&@/N№дXO:0РEЮ@ѕyEDnJEf"?/- yY€/N№юЋЮь JEg`|BU>Bg0HАе€ @СьEF// N№.bЮь Bg/ / N№.bЮь 0S@0@СЛB@: E.g E!g E?fp`p<`я`N№Sј/N№-FXO/ N№-FXOpLЧ8аN^NuNVJng0. ` BgN№Л(TO3АED?9ED/<EZN№·t\OpN^NuNVярHЧ а*nz~HЂ< @ g F fRЌ`к F-fz` F+fRЌHЂ< @0m F9n2A00Бь ђA>`ЬJEf0D@>0LЧ аN^Nu o0/BA°gJfшBЂNu Nu o О П —B@Nu o0/,X.X.ђNu"o o JfьS€ЩfьNu"o oђfJfцHЂHАNu"o o ЩfьNu o"Jfь ђЃS@Nu"o oBЂ2/ gSAђfJgQЙяфHЂHАNuNVN№6?.N№ћTON^NuNVN^NuNVяфHЧ А*nB§p ?NA\O.</p ?NA\O0LЧ АN^NuNVяфHЧ А*n>. B§p ?NA\O,:‡/p ?NA\O0LЧ АN^NuNV?.pL?NAXON^NuNVяь/?.pE?NAXO>l0HА/N№LXO`"?.N№XTO=@m?.?N№°XO0.N^NuNVяь/?.?. rF?NA\O>J@f(?.N№XTO=@m?.?. N№°XO0. `0HА/N№LXO.N^NuNVяшHЧ Ђ>.0V@ @bеH0@Сь"  PNР`*pP`&pA`"pC`JGm*yEpSGmJfшpя`JgшHЂLЧ ЂN^NuNVяшHЧ Ђ>.JGm*yEpSGmJfшpя` Jgш0. ЂLЧ ЂN^NuNVяшHЧ Ђ>.0V@ @bHеH0@Сь"¬ PNР*yEpHЂ°Gg JfpЭ`&RЌ`м ђ№Ep?N№ІTO`~C`О~A`К~P`ЖpЫLЧ ЂN^NuNVJ®l .DЂ3А"ёpя` .N^Nu•К  fEйяДHщWJNu Nu"o`Cп"/jDЃ$jD‚Aъ`|J/j JЃgRЂJk`JjDЂNu"o`Cп"/$Aъ`JNu"o`Cп$jD‚"/Aъ`, g J/j”Ђ Nu"o`Cп$"/Aъ` NupяJ‚fpNРв€І‚cгЉdцв’’‚dТ‚гђdфFЂNР o"`"/ jDЃ$/jD‚DЂ$@Aъ`" jDЂNu o"`"/ _$0АВ"@0HAВВHBАВРЃH@B@Р‰NР"‚$h~а"кD6ЊO6ЋX6Љc6Кd6Zo6\s6јx6XD6(•ю$””(•Ц)•ю*–+–.”?–[”І\–^”‚|•ю–\›4љљ љ*љ”љВ›~™юљ>™ю›М›Мњ>њ>њ>њ>њ>њ>њ>њ>њ>љрљрљрљрљрљрљрљрљрњ>›:›:›:›:›:›:›:›:›:њЋњ°њОњмњмњћ¦Ю¦ц¦ц¦ц¦ц¦А¦ё¦ц¦ј¦ц¦О&©J<©6=©6>©6|©J&©ZDёOёXёd·Рo·Тsё2x·ОD·ћЋЋЋ ,!*.,О|~‚†>:6...bad reg exp[()|?*\.con:aux:prn:\\\~:\\\ '%s' too long\\.home\..\ginprompt$< ""'%s' faileddir stack is emptydir non emptygetcwd\could not cd to %scwdhome +w%s -> %scp: %s not foundcould not create dest file+t-R-r\*mvcpdestination ?last arg '%s' must be a dir beta-test version 1.00.00.02 110287 of yet another shell for atariST (non-profit redistribution is permitted) Їgul„m® Copyright Ѕ 1987 pm@cwru.edu ЇЇ 4promptprompt_tail programs accessible through hash table:none! (your hash table is empty)time spent by cmd = %s (%D 5ms-ticks)semicolon_maxtimecmd exit code %d0-cdategulam.gshow_memmem0123456789abcdef \  !"#$%&'()*+,-./0123456789:;<=>?@ACD GHIJKLM OPQ S U WXYZ[\]^_`acdefghijklm opq s u wxyz{|}~ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяfatal situation in Gulam:run-time stack is about to overflowa line with >= %D chars has been splitFile read errorThe last line ended without \nяьяьяьяьgtosttpprggulamend.g=CCAP????????????????????????;*дzf*к а*о"*с К*чВ*ьВ*яZё+ BJ+C+ ^¬+Ф+=j+lѕ+ ©¬+" «Ъ+) Є$+/ Є–+8=€+=Х€+@lР+F ЄЮ+N @&+U""+Ylѕ+^в+cOМ+k ©h+nD+qj‚+ufИ+x>И+| :+‚Ц<+‡Ћn+ЊЋЋ+’К+•?n+›?О+Ў+¦j`+¬|&+µX+»B+їo:+Жљ+К Ш+Н p+УЂЮ+Ц~в+Ъ|R+б=N+иЂЮ+лt+оsЪ+х#<+ъ d,ХИ,zъ, 4,|Љ,nА,  ЄV.genv_styleguARGV.(g|tos|ttp|prg).xxxnot enough memory%s: not foundfhome%D bytes at %D owned by %D Malloc lst: free lst: word 0x%X has 0x%x-2f track %d, side %d, bad sectors %d, status %DK:%s: free %D, total %Ddrive map: -i%s %s?aliascatcdchmodcopycpdatedfdmdircdirsechoegrepefendforendifendwhileexitfgfgrepforeachformatgemgrephelphistoryifkblprlsmemmkdirmoremsonmsoffmvpeekwpokewpopdprintprintenvpushdpwdrehashrenrmrmdirrxsetsetenvsourcesxteteexittimetouchueunaliasunsetunsetenvwhichwhile%d built-in commands:dir_cachehistfileno such historyhistory >>>=<===!=/==~/~unmatched quote ; `'"!@#$%^&-=+`{}:;'"\|,.<>/, '">= User Aborted Transfer. <rx_remote_cmdsx_remote_cmd%s %s Cannot open fileReady to receive ...Ready to send ...> Error writing file - Aborting Transfer. <w> Too many time outs. Aborted Transfer. <> Transfer Cancelled By Sender. <> Error writing file. < %D bytes received. > Too many errors. Aborted Transfer. <> Too many time outs. Aborted Transfer. <> Transfer Cancelled By Receiver. < %D bytes sent; EOF acknowledgment not received though! %D bytes sent. r> Too many time outs; aborted transfer. <> Transfer cancelled by receiver. <> Receiver not sending NAK's; aborting. <> Error reading file; aborting transfer. <> No acknowledgment of sector; aborting. <NULL argumentregexp too bigout of spacetoo many ()unmatched ()unmatched ()junk on end*+ operand could be emptynested *?+invalid [] rangeunmatched []internal urp?+* follows nothingtrailing \^$.[()|?+*\internal disasterNULL parametercorrupted programmemory corruptioncorrupted pointersinternal foulupheap at %D size %D chunk at %D size %d --- free(%D) has illegal arg 015batch_echoshell file not foundis shell file nesting too deep? missing }+-/*%unexpected elseextraneous endifextraneous endwhilemissing {missing }extraneous endforPYrcKJfepKq Їgul„m® cwd: жо buf: qKqKthat was a directory! Cannot open file for writing(Writing %s ...)Write I/O error(Reading %s ...)File read error(Read %s, %D bytes in %d lines)Ѓ\‚]ѓ „5…Q†P‡N€?‰=Љ>‹Њ ЌbЋa»#јЅѕ@0ABCDEFGHIJ%K LMNO"P#Q3R+S,T4VaW6Y;Z_)k}k]kА Б ЗJВIЕEГDДЖ&° ·Uё2№TґZµ#¶^±ІіA BPCF=IMOAN P RS>V=W?XBZF!'!=C()1I2JBNEFI<KQNDODPESRZGH\!.0>T<U[V]W%/ YBZC[D]F^GL_Q)R+S,U`VbW5\[DcF«7яяЃ\‚]ѓ „5‹Њ8ЌЋ»#јЅѕ@0ABC(DEFGHIJ%K LMNO"P#Q3RST4VaW6Y;ZА Б ДЖB° ·Uё2№TґZµ#¶^±ІіOAN P XBE()DH\!2.0>T<UBZC[D]F^L_U`VbW5\[«7яя6к6к9 :„:“:ўsorry, no room for new key binding...Їwall chart r®Їwall chart g®Їwall chart m®wall chart for Regular buffer, Minibuf, or Gulam? [r m or g] Briefly describe key: in Regular buffer, Minibuf, or Gulam? [r m or g] (key-code fn-code %s) %s runs %s1234567890-= qwertyuiop[] asdfghjkl;'`#zxcvbnm,./ Ѓ‚ѓ„…†‡€‰ЉЋ»ЕЅѕГјЌ\Њ‹АБЗВ·ё№ґµ¶±Іі°ЖД!"њ$%^&*()_+ QWERTYUIOP{} ASDFGHJKL:@я~ZXCVBNM<>? ЎўЈ¤Ґ¦§Ё©Є®ЫеЭЮгЬ­|¬«абзвЧШЩФХЦСТУРжд1234567890-= QWERTYUIOP[] ASDFGHJKL;'`#ZXCVBNM,./ Ѓ‚ѓ„…†‡€‰ЉЋ»ЕЅѕГјЌ\Њ‹АБЗВ·ё№ґµ¶±Іі°ЖДue as adapted by pm@cwru.edu 03/04/86Їgul„m®Їmini®help: press B for wall-chart; C for describe-key: Execute cmds in buffer [(cmd output will be in Їgul„m® buffer))(][}{delaybeep...Char=0%o point=%D(%d%%) line=%d row=%d col=%dArg: 4Arg: %dtemporarily exiting to Їgul„m®; buffers are NOT freed... gulam's ueinit() ran out of room Unsaved buffers exist! Quit? sorry, cannot nest key board macros[Start macro][End macro]kbd macro is :%s:sorry, cannot do recursive kbd macro![kbd macro forced to end; no more room]^G...ok!Cannot allocate WINDOW blockCannot split a %d line windowOnly one windowImpossible changeOnly one windowImpossible change|[Mark set]No mark in this windowGoto line: Їcompletions®]: Switch to buffer [Cannot insert buffer into selfInsert buffer [Kill buffer [Їbuflist®trc Size Buffer File--- ------------ ------ ----Discard changed buffer Ї%s®?(No changed buffers)Save file %s?(Old buffer)A namesake buffer exists; give another name: Cannot create buffer(New file)(Inserted %s, %D bytes in %d lines)Insert file: Read file: Visit file: Buffer is marked read-Only; write anyway?(Wrote %s : %D bytes in %d lines)Write the buffer to file: Change associated file name to: no-opю:ГРГґГЋэЮДтїTЖ*ыЄЪtЬЉЬhШкШЪЕИНvЩ.ЫАЩЂЩДЪ>Д®’гИдtС РёгґдVС‚еzНЮжО6Пшй&ЖТТѕLю: Вю:ю:Rи„КlЫxНМЁ X фѕкїшю:ю:ТФыfыфэИэю:ПЂиўЛ’ЫЖЬHватю:ЭьаЬю:ю:мил2ю:сФоXуью:еfдюШю:О¬\:юHкцззЄЕю:ю:ю:ю:ю:ю:ю:Кѕю:ю:ЅоЅ"Could not allocate %d bytes for a linebug: linsertldeletekinsertCan't get %d bytes for killbufNo mark set in this windowBug: lost markSearch failed: "%s"case_insensitive%s: %s: (default %s) re Search Forwardre Search Backwardre Query replacere Query replace %s with: re Query replacing %s with %s: replace, [.] rep-end, don't, [!] repl rest quit(%d replacements done)FERESEU Fill column set to %dEtCCAP????????????????????????L"20 Ћ <(l.&6( (     " *8    (         ""    (     " "$ * $        " $ (  . F6 H               ",Jћ "  ( *  $ :6"$  6&         $      " $ "  (    "8  (           ",    &         . bB’2$PH<\ "",$ 00:B.TXF^ L > $tr6Zh $*:" <4(  46 p>0(""^0$  $  (               ^<  64  0 PD$ *x   $$  6 ., $ . 80.$&     ,"      *   (  \   **"      *    "   `$  "         * $ hT6 :   N r    $ †  2 $ "      0 $J(&:N &4 X ,$& H    &  $."  (    "   , ,"          ,   . 2  *          >     0      .     z""  :  (*:< 0 :8 *@ .$    ,. .   ((      4       0  ,  , @$  & z             "        $    2     $  """  Є     $F 6 , $   $ 8 F: 4   "            J .P $$,(       < ", p   jt6.  D  8      :      ,(   ћ*(  *  ,  ¦,  R&"             $    J& B& ґB    (H    r      Ю&(   < 4(       & ,  "&2      2"*B8       $$     (J  (          (        *0 "     HBh6" Z$  F".   ,$2j*"62"2 $   &* *   "f4      *     0<      2    "    & 0      * 2n(V&  8 6  > "  *  ,    "   ,   T*(   ((         4  @ &  4(   8    $  $ @ \LH     ЂP& .2@ 4 8 $4  ,  (  .   4    <    8&     N    *. $ 6  6$08B@, &&( h8p p– ,    љ < ћ‚ґ                   (&"P  "*( 0   FXT   ,         <:@  "   &&( "  p  8 0  6 & *  6 $2 ¤0(2> 0 "јґ &”¬" 0њ Ь"bеееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееHere's a version of gnuchess for the Atari ST. The port to Laser C was quite straight-forward, and I suspect that compiling with MWC or a similar compiler would be equally easy. I used Rene van't Veen's Curses package for the ST to compile it, although any similar curses package should do. If you don't have curses and want to recompile, you can try the non-display version; I dunno if this works, but it ought to. Please read the copyright notice (in the file 'copying'). To play, you need the file 'gnuchess.boo' to be in the same directory as 'gnuchess.tos'. Run gnuchess.tos, and type 'help' when it prompts for your command; you'll get a list of commands. That's about it. Hope you enjoy. --Eric R. Smith Aug. 9, 1988 еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее Chess(GNU) Chess(GNU) NAME Chess - GNU Chess SYNOPSIS Chess [ arg1 arg2 ] DESCRIPTION _C_h_e_s_s plays a game of chess against the user or it plays against itself. _C_h_e_s_s has a simple alpha-numeric board display or it can be compiled for use with the CHESSTOOL program on a SUN works- tation. The program gets its opening moves from the file gnuchess.book which should be located in the same directory as gnuchess. To invoke the prgram, type 'gnuchess' or type 'chesstool nchess' on a SUN workstation where 'CHESSTOOL' is installed. The 'gnuchess' command can be followed by up to 2 command line arguments. If one argument is given it determines the programs search time in seconds. If two arguments are given, they will be used to set tournament time controls with the first argument being the number of moves and the second being the total clock time in minutes. Thus, entering 'chess 60 5' will set the clocks for 5 minutes (300 seconds) for the first 60 moves. If no argu- ment is given the program will prompt the user for level of play. For use with CHESSTOOL, see the documentation on that program. Once _C_h_e_s_s is invoked, the program will display the board and prompt the user for a move. To enter a move, use the notation 'e2e4' where the first letter-number pair indicates the origination square and the second letter-number pair indicates the destination square. An alternative is to use the notation 'nf3' where the first letter indicates the piece type (p,n,b,r,q,k). To castle, type the origin and destination squares of the king just as you would do for a regular move, or type "o-o" for kingside castling and "o-o- o" for queenside. COMMANDS In addition to legal moves, the following commands are available as responses. _b_e_e_p -- causes the program to beep after each move. _b_d -- updates the current board position on the display. _b_o_o_k -- turns off use of the opening library. _b_o_t_h -- causes the computer to play both sides of a chess game. Page 1 Chess(GNU) Chess(GNU) _b_l_a_c_k -- causes the computer to take the black pieces with the move and begin searching. _l_e_v_e_l -- allows the user to set time controls such as 60 moves in 5 minutes etc. In tournament mode, the program will vary the time it takes for each move depending on the situation. If easy mode is disabled (using the 'easy' com- mand), the program will often respond with its move immedi- ately, saving time on its clock for use later on. _d_e_p_t_h -- allows the user to change the search depth of the program. The maximum depth is 29 ply. Normally the depth is set to 29 and the computer terminates its search based on elapsed time rather than depth. Using the depth command allows setting depth to say 4 ply and setting response time to a large number such as 9999 seconds. The program will then search until all moves have been examined to a depth of 4 ply (with extensions up to 11 additional ply for sequences of checks and captures). _e_a_s_y -- toggles easy mode (thinking on opponents time) on and off. The default is easy mode ON. If easy mode is dis- abled, the user must enter a 'break' or '^C' to get the pro- grams attention before entering each move. _e_d_i_t -- allows the user to set up a board position. In this mode, the '#' command will clear the board, the 'c' command will toggle piece color, and the '.' command will exit setup mode. Pieces are entered by typing a letter (p,n,b,r,q,k) for the piece followed by the coordinate. For example "pb3" would place a pawn on square b3. _f_o_r_c_e -- allows the user to enter moves for both sides. To get the program to play after a sequence of moves has been entered use the 'white' or 'black' commands. _g_e_t -- retrieves a game from disk. The program will prompt the user for a file name. _h_e_l_p -- displays a short description of the commands. _h_i_n_t -- causes the program to supply the user with its predicted move. _l_i_s_t -- writes the game moves and some statistics on search depth, nodes, and time to the file 'chess.lst'. _n_e_w -- starts a new game. _p_o_s_t -- causes the program to display the principle varia- tion and the score during the search. A score of 100 is equivalent to a 1 pawn advantage for the computer. Page 2 Chess(GNU) Chess(GNU) _r_a_n_d_o_m -- causes the program to randomize its move selection slightly. _r_e_v_e_r_s_e -- causes the board display to be reversed. That is, the white pieces will now appear at the top of the board. _q_u_i_t -- exits the game. _s_a_v_e -- saves a game to disk. The program will prompt the user for a file name. _s_w_i_t_c_h -- causes the program to switch places with the opponent and begin searching. _u_n_d_o -- undoes the last move whether it was the computer's or the human's. You may also type "remove". This is equivalent to two "undo's" (e.g. retract one move for each side). _w_h_i_t_e -- causes the computer to take the white pieces with the move and begin searching. BUGS Pawn promotion to pieces other than a queen is not allowed. En-Passant does not work properly with CHESSTOOOL. The transposition table may not work properly in some positions so the default is to turn this off. SEE ALSO chesstool(6) Page 3 еееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееееее ******************************************************************** Deze diskette is samengesteld door de Stichting ST, Postbus 11129, 2301 EC Leiden. Onze bibliotheek van public domain programma's omvat op dit moment (winter 1993) al meer dan negenhonderd disks. Daarop vindt u programma's op elk gebied, van tekstverwerker en database tot de leukste spelletjes, de fraaiste tekenprogramma's en de handigste utilities. Ook bevat onze bibliotheek een speciale afdeling voor public domain disks met Macintosh software, die te gebruiken zijn onder de ALADIN emulator. Deze MAC-PD serie bevat tot nu toe ongeveer vijfendertig disks. ******************************************************************** U vindt in het twee maandelijks tijdschrift "ST" (Onafhankelijk tijd- schrift van en voor gebruikers van Atari ST computers) een overzicht en een bespreking van de inhoud van de nieuwe public-domain diskettes. Dit tijdschrift bevat tevens een bestelkaart zodat U vlotHoe doen we het? Aangezien er geen enkel gebruik gemaakt wordt van GEM dient men een commando shell te gebruiken. Deze is aanwezig. Ga alsvolgt te werk: 1. Start de Gulam shell door hem gewoon via de desktop dubbel te klikken. 2. tik bij de prompt (dat is een >> tekentje) precies in: cd execs 3. je zit nu in de goede folder en kunt hierna gnuchess intypen. Het menu met alle opties verschijnt 4. kiest ui te het menu het gewenste level. 5. geef het 'help' commando om meer te weten te komen. over de software kunt beschikken. De november/december uitgave 1993 bevat de aanvullin- gen en wijzigingen van dat jaar. In uitgave nov/dec 1992 is een over- zicht van de Public Domain bibliotheek (bijgewerkt tot dec. 1992) te vinden. De Stichting ST geeft ook een speciale PD catalogus disk (database met filenamen) uit. Deze public domain disk is geproduceerd en gedistribueerd door: ************** Stichting ST afd. Software Bakkersteeg 9A 2311 RH LEIDEN ************** Ondanks onze controle komt het af en toe voor dat een diskje niet goed is gecopieerd.Mocht U dit overkomen, aarzel dan niet en stuur de defecte disk aan ons terug. U krijgt dan direct een vervangende disk toegestuurd. ************************************************************************ Teneinde het voor ons mogelijk te maken om productiefouten op te sporen en vervolgens in de toekomst te vermijden, zijn alle disks, geproduceerd door de Stichting ST, voorzien van een groen productienummer. ************************************************************************