function InitGames() { GMS(m0, n0, 0, b0, 'endgame_n_1g0.htm'); } // Copyright 98,99 by ChessBase GmbH, Germany function Init( path ) { gifs = new Array(6); for ( var i=0; i< 26; i++) gifs[i]= new Image(); gifs[0].src = path + "b.gif"; gifs[1].src = path + "bbb.gif"; gifs[2].src = path + "bbw.gif"; gifs[3].src = path + "bkb.gif"; gifs[4].src = path + "bkw.gif"; gifs[5].src = path + "bqb.gif"; gifs[6].src = path + "bqw.gif"; gifs[7].src = path + "brb.gif"; gifs[8].src = path + "brw.gif"; gifs[9].src = path + "bnb.gif"; gifs[10].src = path + "bnw.gif"; gifs[11].src = path + "wbb.gif"; gifs[12].src = path + "wbw.gif"; gifs[13].src = path + "wrb.gif"; gifs[14].src = path + "wrw.gif"; gifs[15].src = path + "wqb.gif"; gifs[16].src = path + "wqw.gif"; gifs[17].src = path + "wkb.gif"; gifs[18].src = path + "wkw.gif"; gifs[19].src = path + "wnb.gif"; gifs[20].src = path + "wnw.gif"; gifs[21].src = path + "wpb.gif"; gifs[22].src = path + "wpw.gif"; gifs[23].src = path + "bpb.gif"; gifs[24].src = path + "wpb.gif"; gifs[25].src = path + "b.gif"; } function SyncPicture( base, basename ) { if ( base > -1 ) return base; for ( i=0; i < document.images.length; i++ ) { if ( document.images[i].name != "" ) if ( document.images[i].name == basename ) return i; else if ( document.images[i].name.substring(0,3) == basename.substring(0,3) ) i+= 63; } return -1; } function MF5( moves, names, nm, base, basename ) { base = SyncPicture( base, basename ); for ( i=0; nMoves[nm] < moves[nLevels[nm]].length / 2 && i < 10; i++ ) MF( moves, names, nm, base, false ); return base; } function MB5( moves, names, nm, base, basename ) { base = SyncPicture( base, basename ); for ( i=0; ( nMoves[nm] > 0 || nLevels[nm] > 0 ) && i < 10; i++ ) MB( moves, names, nm, base ); return base; } function GoStart( moves, names, nm, base, basename ) { base = SyncPicture( base, basename ); while ( nMoves[nm] > 0 || nLevels[nm] > 0 ) MB( moves, names, nm, base ); return base; } function GoEnd( moves, names, nm, base, basename ) { base = SyncPicture( base, basename ); while ( nMoves[nm] < moves[nLevels[nm]].length / 2 ) MF( moves, names, nm, base, false ); return base; } function MF( moves, names, nm, base, basename, bCheckV ) { base = SyncPicture( base, basename ); if ( bCheckV ) { var b = false; for ( i=0; i < moves.length; i++ ) if ( i != nLevels[nm] && moves[i].root == nLevels[nm] && moves[i].move == nMoves[nm] ) b = true; if ( b ) { var vf = window.open('', 'Frank', 'status=no,scrollbars=no,menubar=no,toolbar=no,width=240,height=160') with ( vf.document ) { open(); write('Varianten
') close() } vf.erzeuger = self; var ihtml=""; ihtml = ihtml + "Hauptvariante - Main line" + "<\a>"; ihtml = ihtml + "
"; var nCurrentLevel=nLevels[nm]; var nMoveNum=nMoves[nm]; for ( j=0; j < moves.length; j++ ) { if ( j != nCurrentLevel && moves[j].root == nCurrentLevel && moves[j].move == nMoveNum ) { gm( moves,names,nm,base,basename,1,j); var moveStr = GMS2( moves, names, nm, base, 1, j, basename ); ihtml = ihtml + "
"; ihtml = ihtml + moveStr + "<\a>"; ihtml = ihtml + "
"; gm( moves,names,nm,base,basename,nMoveNum,nCurrentLevel); } } if ( document.all ) vf.document.all.disp.innerHTML=ihtml else if ( document.layers ) { vf.document.layers[0].document.clear(); vf.document.layers[0].document.write(ihtml); vf.document.layers[0].document.close(); } return base; } } if ( nMoves[nm] < moves[nLevels[nm]].length / 2 ) { var n = nMoves[nm]*2; var from = moves[nLevels[nm]][ n ] & 0x3f; var to = moves[nLevels[nm]][ n+1 ] & 0x3f; names[ nNameCount[nm] ] = document.images[ base + from ].src; names[ nNameCount[nm]+1 ] = document.images[ base + to ].src; var len = names[nNameCount[nm]].length; var nn = (Math.floor(( to / 8 )) + ( to % 8 )); var dest = ( nn % 2 ) == 1 ? "b" : "w"; var piece = names[nNameCount[nm]].substring(len-6,len-5); if (( moves[nLevels[nm]][ n ] & 0x380 ) == 0x80 ) piece = "q"; else if (( moves[nLevels[nm]][ n ] & 0x380 ) == 0x100 ) piece = "n"; else if (( moves[nLevels[nm]][ n ] & 0x380 ) == 0x180 ) piece = "b"; else if (( moves[nLevels[nm]][ n ] & 0x380 ) == 0x200 ) piece = "r"; document.images[ base + to ].src = names[nNameCount[nm]].substring(0,len-6) + piece + dest + names[nNameCount[nm]].substring(len-4,len); nn = (Math.floor(( from / 8 )) + ( from % 8 )); if (( nn % 2 ) == 1 ) document.images[ base + from ].src = EmptyBlackPath; else document.images[ base + from ].src = EmptyWhitePath; nMoves[nm]++; nNameCount[nm] = nNameCount[nm] + 2; if ( nMoves[nm] < moves[nLevels[nm]].length / 2 && ( moves[nLevels[nm]][ nMoves[nm]*2 ] & 0x40 ) == 0x40 ) MF( moves, names, nm, base, bCheckV ); } return base } function MB( moves, names, nm, base, basename ) { base = SyncPicture( base, basename ); if ( nMoves[nm] > 0 ) { nMoves[nm]--; nNameCount[nm] -= 2; var from = moves[nLevels[nm]][ nMoves[nm]*2 ] & 0x3f; var to = moves[nLevels[nm]][ nMoves[nm]*2+1 ] & 0x3f; document.images[ base + from ].src = names[ nNameCount[nm] ]; document.images[ base + to ].src = names[ nNameCount[nm]+1 ]; if (( moves[nLevels[nm]][ nMoves[nm]*2 ] & 0x40 ) == 0x40 ) MB( moves, names, nm, base ); } if ( nMoves[nm] == 0 ) if ( nLevels[nm] > 0 ) { nMoves[nm] = moves[nLevels[nm]].move; nLevels[nm] = moves[nLevels[nm]].root; if (( moves[nLevels[nm]][nMoves[nm]*2] & 0x40 ) == 0x40 ) nMoves[nm]--; } return base; } function GMS2( moves, names, nm, base, nMoveNumber, nLevel, basename ) { if ( nMoveNumber > 0 ) { var n = (nMoveNumber-1)*2; var off=1; for ( i=0; i <= n; i += 2 ) if (( moves[nLevel][i] & 0x40 ) == 0x40 ) off = off+1; var from = moves[nLevel][ n ] & 0x3f; var to = moves[nLevel][ n+1 ] & 0x3f; var len = document.images[ base + to ].src.length; var piece = document.images[ base + to ].src.substring(len-6,len-5); if ( piece == "q" ) piece = pieces.substring(1,2); else if ( piece == "r" ) piece = pieces.substring(4,5); else if ( piece == "b" ) piece = pieces.substring(3,4); else if ( piece == "n" ) piece = pieces.substring(2,3); else if ( piece == "k" ) piece = pieces.substring(0,1); else piece = pieces.substring(5,6); var piece2 = ""; if (( moves[nLevel][ n ] & 0x380 ) == 0x80 ) piece2 = pieces.substring(1,2); else if (( moves[nLevel][ n ] & 0x380 ) == 0x100 ) piece2 = pieces.substring(2,3); else if (( moves[nLevel][ n ] & 0x380 ) == 0x180 ) piece2 = pieces.substring(3,4); else if (( moves[nLevel][ n ] & 0x380 ) == 0x200 ) piece2 = pieces.substring(4,5); var lines = "abcdefgh"; var rows = "87654321"; var fromLine = from%8; var fromRow = Math.floor(from/8); var toLine = to%8; var toRow = Math.floor(to/8); var moveNumber = gmn( moves, nLevel ) + nMoveNumber-off; var result = (Math.floor((moveNumber)/2)+1).toString() + ". "; if ( document.images[ base + to ].src.substring(len-7,len-6) == "b" ) result = result + "... "; if ( n >= 2 && (( moves[nLevel][n] & 0x40 ) == 0x40 )) { if (( moves[nLevel][n-1] == 62 ) || ( moves[nLevel][n-1] == 6 )) result = result + "0-0" else if (( moves[nLevel][n-1] == 2 + 7 * 8 ) || ( moves[nLevel][n-1] == 2 + 0 * 8 )) result = result + "0-0-0" else { var sep = "x"; from = moves[nLevel][ n-2 ] & 0x3f; to = moves[nLevel][ n-1 ] & 0x3f; fromLine = from%8; fromRow = Math.floor(from/8); toLine = to%8; toRow = Math.floor(to/8); result = result + lines.substring( fromLine, fromLine+1 ) + rows.substring( fromRow, fromRow+1 ) + sep + lines.substring( toLine, toLine+1 ) + rows.substring( toRow, toRow+1 ) + piece2 + " ep"; } } else { var len = names[ nNameCount[nm]-1 ].length; var substr = names[ nNameCount[nm]-1 ].substring( len-6, len ); var sep = (( substr == "/w.gif" ) || ( substr == "\\w.gif" ) || ( substr == "/b.gif" ) || ( substr == "\\b.gif" )) ? "-" : "x"; if ( piece2 != "" ) piece = ""; result = result + piece.toUpperCase() + lines.substring( fromLine, fromLine+1 ) + rows.substring( fromRow, fromRow+1 ) + sep + lines.substring( toLine, toLine+1 ) + rows.substring( toRow, toRow+1 ) + piece2; } } else result=''; if (document.all) { name = 'i' + baseName + nm; if ( result == '' ) document.all.tags( "DIV" )[name].innerHTML = "Startposition"; else document.all.tags( "DIV" )[name].innerHTML = "Position after " + result; } else if ( document.layers ) { document.layers[nm].document.layers[0].document.clear(); var gesamt = "
Position after " + result + "
"; document.layers[nm].document.layers[0].document.write(gesamt); document.layers[nm].document.layers[0].document.close(); } return result; } function GMS( moves, names, nm, base, basename ) { base = SyncPicture( base, basename ); var nLevel = nLevels[nm]; var nMoveNumber = nMoves[nm]; if ( nMoveNumber >= 0 && nMoveNumber <= moves[nLevel].length / 2 ) { if ( document.all ) { if ( nOld[nm] != -1 ) document.anchors[nOld[nm]].style.background="#FFF8B3"; if ( nMoveNumber > 0 ) { nOld[nm] = moves[nLevel].base[nMoveNumber-1]; document.anchors[nOld[nm]].style.background="gray"; } else nOld[nm] = -1; } return GMS2( moves, names, nm, base, nMoveNumber, nLevel, basename ); } else return "??"; } function gm( moves, names, nm, base, basename, n, m ) { base = SyncPicture( base, basename ); GoStart(moves,names,nm,base,basename ); gm_sub( moves,names,nm,base,basename,n,m); GMS( moves, names, nm, base, basename ); } function gmn( moves, m ) { if ( m > 0 ) { var off=0; var n2 = moves[m].move; var m2 = moves[m].root; for ( i=0; i <= n2*2; i += 2 ) if (( moves[m2][i] & 0x40 ) == 0x40 ) off = off+1; return gmn( moves, m2 ) + ( n2 - off ); } return 0; } function gm_sub( moves, names, nm, base, basename, n, m ) { if ( m > 0 ) { var off=0; var n2 = moves[m].move; var m2 = moves[m].root; for ( i=0; i <= n2*2; i += 2 ) if (( moves[m2][i] & 0x40 ) == 0x40 ) off = off+1; gm_sub( moves,names,nm,base, basename, n2-off, m2 ); } nLevels[nm]=m; nMoves[nm]=0; for ( i=0; i < n; i++ ) MF(moves,names,nm,base,basename, false); }